GroundX, from EyeLevel, is an enterprise platform that eliminates LLM hallucinations by grounding AI responses in a company's specific, private data. The platform utilizes advanced computer vision to preserve the context of complex document layouts, such as nested tables and schematics, ensuring high-fidelity search and retrieval. Beyond information discovery, it functions as a powerful tool for automated data extraction, transforming unstructured files into structured, verifiable insights with direct source citations.
When used with OpenShift AI on premises, customers can have complete control of their own data and where it is stored and processed.
This AI quickstart demonstrates how to use GroundX from EyeLevel for billing data extraction in an on-prem AI environment with OpenShift AI.
You will deploy GroundX along with its supporting components (MinIO, Percona MySQL, and Strimzi Kafka) using two umbrella Helm charts, then open the included Jupyter notebook and follow the data extraction workflow.
- Deploy operators and cluster prep (storage class, node labels, Percona operator, MinIO operator).
- Deploy application workloads (database cluster, MinIO tenant, Kafka cluster, GroundX, notebook).
- Open the Jupyter notebook and run the billing data extraction demo.
This quickstart was developed and tested on an OpenShift cluster with the following components and resources. This can be considered the minimum requirements.
| Node Type | Qty | vCPU | Memory (GB) |
|---|---|---|---|
| Control Plane | 3 | 4 | 16 |
| Worker | 3 | 4 | 16 |
NVIDIA GPU with 16 GB of vRAM (optional — see GPU configuration).
| Software | Version |
|---|---|
| Red Hat OpenShift | 4.20.5 |
| Red Hat OpenShift Service Mesh | 2.5.11-0 |
| Red Hat OpenShift Serverless | 1.37.0 |
| Red Hat OpenShift AI | 2.25 |
| Helm CLI | 3.17.1 |
| GroundX | 2.9.92 |
The user performing this quickstart should have admin permissions in the cluster (does not require cluster-admin).
Deployment uses two Helm umbrella charts installed in sequence:
| Chart | Path | Purpose |
|---|---|---|
| billing-operators | helm/billing-operators/ |
Operators and cluster prep (storage class, node labels, Percona operator, MinIO operator, optional Strimzi operator) |
| billing-workloads | helm/billing-workloads/ |
Application workloads (database cluster, MinIO tenant, Kafka cluster, GroundX, Jupyter notebook) |
The following must already be deployed and functional on the cluster:
- Red Hat OpenShift Container Platform
- Red Hat OpenShift Service Mesh
- Red Hat OpenShift Serverless
- Red Hat OpenShift AI
- Red Hat Authorino
- Node Feature Discovery operator
- NVIDIA GPU operator (if using GPU for layout inference)
- User has
adminpermissions in the cluster - The
eyelevelproject should not exist
- Clone this repo and log in to your cluster:
git clone https://github.com/johnson2500/Billing-extraction-with-GroundX.git
cd Billing-extraction-with-GroundX
oc login --token=<user_token> --server=https://api.<openshift_cluster_fqdn>:6443- Set the GroundX API key by copying your secret file into place:
cp <secret_with_key>.yaml values/values.groundx.secret.yaml-
Review and edit the values files to match your environment:
helm/billing-operators/values.yaml— operator toggles, node labelshelm/billing-workloads/values.yaml— GroundX config, notebook settings, resource limits
-
Install using the Makefile (recommended):
# From the repo root — installs operators first, then workloads
make installOr install each chart manually:
# Create the namespace
oc create namespace eyelevel --dry-run=client -o yaml | oc apply -f -
# Update chart dependencies
cd helm/billing-operators && helm dependency update && cd ../..
cd helm/billing-workloads && helm dependency update && cd ../..
# Phase 1: Operators
helm upgrade --install billing-operators ./helm/billing-operators \
-f ./helm/billing-operators/values.yaml -n eyelevel
# Phase 2: Workloads
helm upgrade --install billing-workloads ./helm/billing-workloads \
-f ./helm/billing-workloads/values.yaml -n eyelevelmake get-pods
# or
oc get pods -n eyelevelAll pods should reach Running (or Completed for one-shot Jobs).
To disable GPU for GroundX layout inference, add the following to helm/billing-workloads/values.yaml under groundx.layout.inference:
layout:
inference:
resources:
limits:
memory: 12Gi
nvidia.com/gpu: '0' # <-- Set to 0
requests:
cpu: 500m
memory: 2Gi
nvidia.com/gpu: '0' # <-- Set to 0To run with a GPU (CPU-only), set nvidia.com/gpu to '1'. See the comments in values/values.groundx.yaml for details.
- Use the MinIO console route to access MinIO's UI.
- Create a storage bucket called
models.
The billing-workloads chart can create an OpenShift AI notebook and optionally clone this repository into the notebook PVC.
- Configure notebook settings in
helm/billing-workloads/values.yaml. - Enable automatic clone by setting:
notebook.gitClone.enabled: truenotebook.gitClone.repository: https://github.com/johnson2500/Billing-extraction-with-GroundX.git- (optional)
notebook.gitClone.revision,notebook.gitClone.targetDir,notebook.gitClone.forceReset
- Deploy/upgrade the chart:
make install- Open the created notebook from OpenShift AI → Workbenches.
If you are not using the chart-managed notebook, create a workbench in OpenShift AI:
- In OpenShift AI, enter the
eyelevelproject. - Create a workbench:
-
Name:
groundx-wb -
Image selection: Jupyter | Minimal | CPU | Python 3.12
-
Version selection: 2025.2
-
Container size: Small
-
Accelerator: None
-
Add environment variables IMPORTANT READ:
- Type: Secret → Key / value
- Key:
GROUNDX_ADMIN_API_KEY— Value:<YOUR_GROUNDX_ADMIN_API_KEY>
- Key:
- Type: ConfigMap → Key / value
- Key:
GROUNDX_BASE_URL— Value:<GROUNDX_OPENSHIFT_ROUTE>/api: IMPORTANT: This is set in thevalues.yamlfile and needs to have /api appended.
- Key:
- Type: Secret → Key / value
-
Click Create connection:
- Select S3 compatible object storage
- Connection name:
Models-Storage - Access key:
minio - Secret key:
minio123 - Endpoint:
http://minio - Region:
us-east-1 - Bucket:
models
-
- Click Create notebook.
- Clone this repo into the workbench if
notebook.gitClone.enabledisfalse.
- Open the get_started notebook.
- In the
Initialize Client and Prompt Managersection, set the required variables (OpenShift route to GroundX, API key). - Save and run the notebook.
# From the repo root
make uninstallOr manually:
cd helm && make uninstall NAMESPACE=eyelevelThis uninstalls the workloads chart first (clearing CRs and finalizers), then the operators chart. The namespace is preserved by default — delete it separately with oc delete project eyelevel if desired.
- GroundX documentation
- OpenShift AI documentation v2.25
The chart can deploy google/gemma-3-12b-it using the llm-service from the ai-architecture-charts repo.
- Enable: In
helm/billing-workloads/values.yaml,llm-service.enabledistrueby default andglobal.models.gemma-3-12b-itis configured. - Requirements: Nodes with NVIDIA GPUs (
nvidia.com/gpu); the model uses the default GPU device and tolerations from the llm-service chart. - Hugging Face token: If the model is gated, set
llm-service.secret.hf_token(e.g. via a values override or sealed secret). - Use with GroundX: After deploy, the model is exposed as a KServe InferenceService. To use it for GroundX extract, set the extract agent to your cluster's endpoint for the
gemma-3-12b-itpredictor (e.g. the OpenShift route orhttp://gemma-3-12b-it-predictor.<namespace>.svc.cluster.local/v1), and setmodelIdto the served model name.
To disable the LLM service, set llm-service.enabled: false in values.
- Product: OpenShift AI
- Partner: EyeLevel
- Partner product: GroundX
- Business challenge: Data extraction
