LITELLM_PROXY_API_BASE in values/jedify-be.yaml, and authenticates with LITELLM_PROXY_API_KEY from your application configuration secret.
By default that endpoint is the LiteLLM proxy the platform chart installs, which forwards each call to Vertex AI in your project. You can point it at an OpenAI-compatible gateway you already run instead.
The model names the application calls
The application asks for models by fixed names. Whatever serves them, proxy or gateway, must answer to exactly these names. As of release 2026.10.10:
These are names, not vendors. In the default configuration every one of them is served by a Gemini model, so a name doesn’t tell you which vendor answered.
The embedding model is a one-time choice
Embeddings belong to your account: building the model and answering questions read the same vectors. Choose the model behindtext-embedding-ada-002 before your first build, and don’t change it. Changing it later means re-embedding everything with a full rebuild; otherwise your account holds vectors from two different models, and answers degrade without any error.
The default, gemini-embedding-001, covers more than 100 languages.
Default: Vertex AI through the LiteLLM proxy
The proxy runs in thejedify namespace as its own Google service account, which holds only roles/aiplatform.user. Its model list is litellm.modelList in the platform chart’s values. The chart fills each entry’s Vertex AI project from gcp.projectId, so most installations change nothing here.
The proxy runs with two settings: drop_params: true, so a parameter a model doesn’t support is dropped instead of failing the call, and num_retries: 2.
Check that each model is offered to your project
A Vertex AI model is servable only where Google offers it to your project, and preview models are allowlisted project by project. A name that works in one project can return404 in the next, same region and all. The defaults use generally available models in us-central1. Check each one before the first question:
not found means that model isn’t offered to your project in that location. Model availability changes over time, so check again when you change models or Google retires one.
Choose the location
Decision. The defaults call Vertex AI inus-central1. If your data must stay in another region, set vertex_location on every entry to a location where each model is offered.
- Embeddings need a regional location, never
global. Pods reach Google APIs through Private Google Access’s restricted addresses, which don’t serve the global Vertex AI endpoint for embeddings. The call fails withThe service you are trying to access is not available on Google's Restricted VIPs. - Chat models may use
global. Some preview models are offered only there, and chat completions atglobalwork over the same path.
Change the model list
litellm.modelList is a list, so a list in your values replaces the chart’s whole list. Restate all eight names. The chart fills in your project on every entry, so you set only the model and the location. For example, to keep the default models in europe-west4, add this block to the end of values/jedify-infra.yaml, once (YAML keeps only the last of two blocks with the same key):
Invalid model name, restart the proxy yourself:
If you turn on Model Armor screening (
model_armor_mode in OpenTofu), it covers Gemini models on Vertex AI only. A model served any other way, including through your own gateway, isn’t screened.Verify the models
Run a real completion for every name, from inside an application pod, through the application’s own configuration. This tests what the application uses: the address, the key, DNS, and the certificates the pod trusts. It doesn’t print any secret./v1/models as the check. Every name in the proxy’s list is an alias, so the proxy lists all of them whether or not the model behind each one exists. Only a real completion proves a name works.
Use your own gateway
You can replace the bundled proxy with an OpenAI-compatible gateway you already run. The gateway must:- answer
POST /v1/chat/completions, including streamed responses, andPOST /v1/embeddings; - serve every name in the model names the application calls, spelled exactly;
- accept or ignore parameters a model doesn’t support, the way the bundled proxy’s
drop_paramsdoes, instead of rejecting the call; - accept the key it issued you as a bearer token;
- present a certificate the application trusts: one from a public certificate authority, or from your own after you trust your certificate authority;
- be reachable from the cluster. With egress masquerade on, the gateway and any firewall in front of it see your node subnet’s addresses, not the pod range: allow that range.
1
Store your gateway's key
Replace To verify, list the key names. Expected: the same keys as before.
LITELLM_PROXY_API_KEY in your application configuration secret with the key your gateway issued. This adds a new version and keeps every other key:2
Point the application at your gateway
Set To verify, read both back. Expected: both show your gateway’s URL.
GATEWAY_URL to your gateway’s base URL, with no trailing slash and no /v1: the client library appends the path itself.3
Apply the change and verify
External Secrets refreshes the application’s secret every hour. Force it now, then upgrade both application releases:Then run Verify the models. Expected: every name answers through your gateway.
4
Turn off the bundled proxy
Once every name answers through your gateway, remove the bundled proxy:To verify, check that the proxy is gone. Expected:
NotFound.A gateway behind a private certificate authority
The application’s image trusts the public certificate authorities only. A gateway (or a data warehouse, or any other endpoint the application calls) whose certificate comes from your own certificate authority fails every call withCERTIFICATE_VERIFY_FAILED.
Turn on componentsDefaults.trustExtraCA and add your authority’s certificate to the application configuration secret as EXTRA_CA_PEM_B64: the PEM file, base64-encoded on one line. One PEM file can hold several certificates; include the intermediates if your server doesn’t send its own chain.
ca-bundle, that writes the public authorities plus yours into /trust/bundle.pem, and the process reads it through SSL_CERT_FILE and REQUESTS_CA_BUNDLE. Because the public authorities are in the same file, your identity provider, your warehouse and Google’s APIs keep working beside the private endpoint.
Set the switch and the key together. With the switch on and the key missing, the init container refuses to start the pod rather than run it without your certificate authority. A changed certificate takes effect when the pods restart.
To verify, read the init container’s log: it prints how many certificates the bundle holds. Then verify the models again.