Setting up the Virtana AI Chatbot
Virtana AI adds a Copilot Chatbot to your monitoring environment so you can work with alerts, documentation, and insights through a conversational interface. The Copilot connects to an external large language model (LLM) provider that powers its responses. Before you enable the Copilot, you configure one supported provider, add the connection details to your Global View deployment, and turn on the related feature flags.
When the Copilot is enabled, you can do the following:
Interact with product documentation. Ask questions in natural language and get contextual answers drawn from Virtana's documentation.
Query alert-related information. Retrieve active alerts, alert history, and alert configurations without writing a query.
Generate alert policies and insights. Create alert policies and surface actionable insights based on data from your environment.
Supported model providers
This section describes the large language model (LLM) providers that Virtana AI supports. You must configure exactly one provider before you enable the Copilot, because the provider supplies the model that powers the chatbot, alert generation, and insights features.
The following table describes the three supported providers and when to use each one:
Provider | When to use it | Default inference endpoint |
|---|---|---|
OpenAI | Choose OpenAI to connect directly to the OpenAI API and its hosted models (for example, GPT-4o and GPT-5). |
|
Gemini | Choose Gemini to connect to Google's Gemini models. |
|
LiteLLM | Choose LiteLLM when you want a single gateway in front of multiple model backends, or when you run self-hosted or custom model deployments. LiteLLM provides a unified API across those backends. | Virtana-internal proxy URL. Set |
Note
When you set VIRTANA_AI_MODEL_PROVIDER to LITELLM, always set VIRTANA_AI_INFERENCE_ENDPOINT to your own proxy URL. The built-in default for LITELLM points to a Virtana-internal proxy that customer deployments can't reach, and Copilot fails to answer any question until you override it.
Configure the LiteLLM proxy for Virtana AI Copilot
A LiteLLM proxy gives you one place to manage large language model (LLM) credentials, route each Virtana AI workload to a model of your choice, log requests, and terminate TLS for backends that use private certificates. Virtana AI reaches the proxy over its OpenAI-compatible API, so the proxy is transparent to the Copilot features that use it.
LiteLLM model alias prerequisites
Create a model in your LiteLLM proxy for every Virtana AI model alias before you deploy Global View. When VIRTANA_AI_MODEL_PROVIDER is set to LITELLM, Virtana AI sends these aliases as literal model names, and a request for an alias your proxy doesn't define fails with a 4xx "model not found" error.
Map the aliases to OpenAI models as follows:
VIRTANA_MDL_MINI: 'gpt-4o-mini' VIRTANA_MDL_NANO: 'gpt-4.1-nano' VIRTANA_MDL_REASON: 'gpt-5.1' VIRTANA_MDL_REASONING_MINI: 'gpt-5-mini' VIRTANA_MDL_MINI_DEFAULT_CONFIG: 'gpt-4o-mini' VIRTANA_MDL_MINI_CHATOPENAI: 'gpt-4o' VIRTANA_MDL_MINI_ROUTEOPENAI: 'gpt-4o-mini' VIRTANA_MDL_MINI_SWAGGER_ANALYSIS: 'gpt-4o-mini' VIRTANA_MDL_MINI_GENERAL: 'gpt-5' VIRTANA_MDL_MINI_GV_ALERT: 'gpt-4o-mini' VIRTANA_MDL_MINI_GV_ALERT_TOOL_SELECTOR: 'gpt-4o-mini' VIRTANA_MDL_REASON_GV_ALERT_RESPONSE_GENERATOR: 'gpt-4o' VIRTANA_MDL_MINI_CHART_GENERATOR: 'gpt-4o-mini' VIRTANA_MDL_MINI_METRICS_STATEMENT: 'gpt-4o-mini' VIRTANA_MDL_REASON_METRICS: 'gpt-4o' VIRTANA_MDL_REASON_INSIGHT_SVC: 'gpt-4o' VIRTANA_MDL_REASON_TROUBLESHOOTING: 'gpt-4.1' VIRTANA_MDL_NANO_IDENTIFIER: 'gpt-4.1-nano'
Map the aliases to Gemini models as follows:
VIRTANA_MDL_MINI: 'gemini-2.5-flash' VIRTANA_MDL_NANO: 'gemini-2.5-flash' VIRTANA_MDL_REASON: 'gemini-3.7-flash' VIRTANA_MDL_REASONING_MINI: 'gemini-2.5-pro' VIRTANA_MDL_MINI_DEFAULT_CONFIG: 'gemini-2.5-flash' VIRTANA_MDL_MINI_CHATOPENAI: 'gemini-2.5-pro' VIRTANA_MDL_MINI_ROUTEOPENAI: 'gemini-2.5-flash' VIRTANA_MDL_MINI_SWAGGER_ANALYSIS: 'gemini-2.5-flash' VIRTANA_MDL_MINI_GENERAL: 'gemini-3.7-flash' VIRTANA_MDL_MINI_GV_ALERT: 'gemini-2.5-flash' VIRTANA_MDL_MINI_GV_ALERT_TOOL_SELECTOR: 'gemini-2.5-flash' VIRTANA_MDL_REASON_GV_ALERT_RESPONSE_GENERATOR: 'gemini-2.5-pro' VIRTANA_MDL_MINI_CHART_GENERATOR: 'gemini-2.5-flash' VIRTANA_MDL_MINI_METRICS_STATEMENT: 'gemini-2.5-flash' VIRTANA_MDL_REASON_METRICS: 'gemini-2.5-pro' VIRTANA_MDL_REASON_INSIGHT_SVC: 'gemini-2.5-pro' VIRTANA_MDL_REASON_TROUBLESHOOTING: 'gemini-2.5-pro' VIRTANA_MDL_NANO_IDENTIFIER: 'gemini-2.5-flash'
Each alias names the Copilot feature it serves and the model tier that feature needs. The tier tells you which upstream model to map an alias to when you don't want to use the defaults above: mini aliases need a fast, low-cost model, reasoning aliases need a stronger model, nano aliases need the fastest model available, and the embedding alias needs an embedding model.
Copilot refers to models by alias throughout the application, and resolves each alias at runtime based on VIRTANA_AI_MODEL_PROVIDER. Aliases are grouped by workload: MINI aliases handle fast, low-cost tasks, REASON aliases handle analysis and generation, NANO aliases handle identifier extraction, and VIRTANA_MDL_EMBEDDING handles document indexing and search.
The following table lists every alias, the model each provider resolves it to, and the model_name value your LiteLLM proxy must expose when VIRTANA_AI_MODEL_PROVIDER is LITELLM:
Model name | Description | OpenAI default | GEMINI default | LITELLM required |
|---|---|---|---|---|
| Fast, low-cost requests that no more specific alias covers. |
|
|
|
| Short extraction requests that need the fastest available model. |
|
|
|
| Primary reasoning model for analysis and generation. |
|
|
|
| Lightweight reasoning for shorter analysis tasks. |
|
|
|
| Calls that don't name a workload-specific model. |
|
|
|
| Interactive chat responses in the Copilot conversation. |
|
|
|
| Routing a question to the Copilot capability that answers it. |
|
|
|
| Analysis of API specifications. |
|
|
|
| General-purpose requests that aren't tied to one feature. |
|
|
|
| Questions about Global View alerts. |
|
|
|
| Selecting which tool answers a Global View alert question. |
|
|
|
| Generating the answer to a Global View alert question. |
|
|
|
| Generating charts from a request. |
|
|
|
| Building the metric query that answers a metrics question. |
|
|
|
| Analyzing metric data and explaining what it shows. |
|
|
|
| Insight generation. |
|
|
|
| Troubleshooting analysis. |
|
|
|
| Extracting identifiers, such as resource names, from a request. |
|
|
|
Note
The models listed above are the models Virtana tests and validates for chatbot functionality, alert policy generation, and insight generation. Using other models can produce inconsistent or unsupported behavior.
Choose how the proxy resolves model names
The value of VIRTANA_AI_MODEL_PROVIDER decides which model name Virtana AI sends, and your proxy has to recognize that name. Requests reach the proxy in both patterns below, because virtana_ai_inference_endpoint always sets the base URL.
Pick the pattern that matches your proxy configuration:
Aliases. Set
VIRTANA_AI_MODEL_PROVIDERtoLITELLM. Virtana AI sendsVIRTANA_MDL_*aliases, and the proxy holds the complete mapping to upstream models, so you can change any mapping without redeploying Global View.Provider model IDs. Set
VIRTANA_AI_MODEL_PROVIDERtoOPENAIorGEMINI. Virtana AI resolves each alias before sending the request, and the proxy must expose names such asgpt-4o-miniorgemini/gemini-2.5-flash.
Define the Virtana AI aliases in the proxy
Your litellm_config.yaml file must expose one model_name entry per Virtana AI alias when VIRTANA_AI_MODEL_PROVIDER is LITELLM. You can point all MINI and NANO aliases at one low-cost model and all REASON aliases at one stronger model, as long as every alias is defined.
The following example maps the aliases to OpenAI models:
model_list:
# Fast, low-cost workloads
- model_name: VIRTANA_MDL_MINI
litellm_params:
model: openai/gpt-4o-mini
api_key: os.environ/OPENAI_API_KEY
- model_name: VIRTANA_MDL_MINI_DEFAULT_CONFIG
litellm_params:
model: openai/gpt-4o-mini
api_key: os.environ/OPENAI_API_KEY
- model_name: VIRTANA_MDL_MINI_ROUTEOPENAI
litellm_params:
model: openai/gpt-4o-mini
api_key: os.environ/OPENAI_API_KEY
- model_name: VIRTANA_MDL_MINI_SWAGGER_ANALYSIS
litellm_params:
model: openai/gpt-4o-mini
api_key: os.environ/OPENAI_API_KEY
- model_name: VIRTANA_MDL_MINI_GENERAL
litellm_params:
model: openai/gpt-4o-mini
api_key: os.environ/OPENAI_API_KEY
- model_name: VIRTANA_MDL_MINI_GV_ALERT
litellm_params:
model: openai/gpt-4o-mini
api_key: os.environ/OPENAI_API_KEY
- model_name: VIRTANA_MDL_MINI_GV_ALERT_TOOL_SELECTOR
litellm_params:
model: openai/gpt-4o-mini
api_key: os.environ/OPENAI_API_KEY
- model_name: VIRTANA_MDL_MINI_CHART_GENERATOR
litellm_params:
model: openai/gpt-4o-mini
api_key: os.environ/OPENAI_API_KEY
- model_name: VIRTANA_MDL_MINI_METRICS_STATEMENT
litellm_params:
model: openai/gpt-4o-mini
api_key: os.environ/OPENAI_API_KEY
# Interactive chat
- model_name: VIRTANA_MDL_MINI_CHATOPENAI
litellm_params:
model: openai/gpt-4o
api_key: os.environ/OPENAI_API_KEY
# Reasoning workloads
- model_name: VIRTANA_MDL_REASON
litellm_params:
model: openai/gpt-5
api_key: os.environ/OPENAI_API_KEY
- model_name: VIRTANA_MDL_REASONING_MINI
litellm_params:
model: openai/gpt-5-mini
api_key: os.environ/OPENAI_API_KEY
- model_name: VIRTANA_MDL_REASON_INSIGHT_SVC
litellm_params:
model: openai/gpt-4o
api_key: os.environ/OPENAI_API_KEY
- model_name: VIRTANA_MDL_REASON_GV_ALERT_RESPONSE_GENERATOR
litellm_params:
model: openai/gpt-4o
api_key: os.environ/OPENAI_API_KEY
- model_name: VIRTANA_MDL_REASON_METRICS
litellm_params:
model: openai/gpt-4o
api_key: os.environ/OPENAI_API_KEY
- model_name: VIRTANA_MDL_REASON_TROUBLESHOOTING
litellm_params:
model: openai/gpt-4.1
api_key: os.environ/OPENAI_API_KEY
# Identifier extraction
- model_name: VIRTANA_MDL_NANO
litellm_params:
model: openai/gpt-4.1-nano
api_key: os.environ/OPENAI_API_KEY
- model_name: VIRTANA_MDL_NANO_IDENTIFIER
litellm_params:
model: openai/gpt-4.1-nano
api_key: os.environ/OPENAI_API_KEY
- model_name: VIRTANA_MDL_EMBEDDING
litellm_params:
model: openai/text-embedding-3-large
api_key: os.environ/OPENAI_API_KEYEvery entry in the example uses the same four fields. The following table describes each field and the value to give it for Virtana AI:
Field | Description | Value to use for Virtana AI |
|---|---|---|
| The set of models the proxy exposes to its clients. | One entry for every alias that Virtana AI sends. An alias that is missing from this list fails with a 4xx "model not found" error. |
| The name a client asks for. LiteLLM matches the incoming request against this value. | The Virtana AI alias, spelled exactly as Virtana AI sends it, such as |
| The upstream provider and model that serve the request, in | The model you want that workload to use, such as |
| The credential LiteLLM uses for the upstream provider, not the credential Virtana AI uses to reach LiteLLM. | Your provider key. The |
Start the proxy with this configuration and confirm that it serves an OpenAI-compatible /v1 API before you deploy Global View:
litellm --config litellm_config.yaml --port 4000
The command takes two options:
--config: Path to thelitellm_config.yamlfile that defines the model list.--port: Port the proxy listens on. The port you choose must match the port invirtana_ai_inference_endpoint, which is4000in the examples in this topic.
Configure certificate trust for LiteLLM
A LiteLLM proxy is the supported way to reach an LLM backend that presents a self-signed or private certificate authority (CA) certificate. Certificate trust applies to two separate connections, so identify which one fails before you install a certificate:
Virtana AI to the proxy. When the proxy serves HTTPS with a certificate that the cluster doesn't trust, the
virtana-aipod fails to verify it. In-cluster deployments avoid this by using the proxy's internal service URL over HTTP.The proxy to the LLM backend. When the backend presents a self-signed certificate, LiteLLM fails to verify it, and the proxy needs the issuing CA certificate.
Trust a private CA in the LiteLLM deployment
Mount your CA bundle into the LiteLLM container and point the standard SSL environment variables at it. LiteLLM uses Python HTTP clients that read the bundle path from these variables, so both must be set for all outbound requests to verify correctly.
env:
- name: REQUESTS_CA_BUNDLE
value: "/etc/ssl/certs/ca-certificates.crt"
- name: SSL_CERT_FILE
value: "/etc/ssl/certs/ca-certificates.crt"
volumeMounts:
- name: enterprise-ca
mountPath: /etc/ssl/certs/ca-certificates.crt
subPath: ca-certificates.crt
readOnly: true
volumes:
- name: enterprise-ca
configMap:
name: enterprise-ca-bundleThree values in this example must agree with each other: the mount path, the two SSL environment variables, and the ConfigMap key. The following table describes each field and the value to give it:
Field | Description | Default values |
|---|---|---|
| The CA bundle that the Python | The same path as |
| The CA bundle that OpenSSL-based clients trust, including the HTTP client LiteLLM uses for provider calls. | The same path as |
| Which volume the container mounts. | The same name as |
| Where the CA bundle appears inside the container. | Any path the container can read. Overwriting the system bundle at |
| Which key from the ConfigMap is mounted as a single file. | The key name you used when you created the ConfigMap, which is |
| Whether the container can write to the mounted bundle. |
|
| Which ConfigMap holds the CA bundle. | The ConfigMap you create in the next step, which is |
Create the ConfigMap from your CA bundle before you deploy the proxy:
kubectl create configmap enterprise-ca-bundle \ --from-file=ca-certificates.crt=/path/to/ca-certificates.crt \ -n <namespace>
The command takes three values:
enterprise-ca-bundle: Name of the ConfigMap. It must matchvolumes.configMap.namein the LiteLLM deployment.from-file: The ConfigMap key and the local file it holds, inkey=pathform. The key must matchsubPathin the deployment, and the path is your CA bundle file in PEM format.n: Namespace to create the ConfigMap in. It must be the namespace that runs the LiteLLM deployment, because a ConfigMap is only visible inside its own namespace.
Point Virtana AI at the proxy
Set virtana_ai_inference_endpoint to the proxy's in-cluster service URL so that traffic between Virtana AI and the proxy stays inside the cluster network and needs no additional certificate trust.
cp-configs:
virtana_ai:
virtana_ai_inference_endpoint: "http://litellm.<namespace>.svc.cluster.local:4000/v1"Warning
Disabling TLS verification in LiteLLM sends provider API keys over connections that aren't validated, which exposes them to interception. Install the CA certificate instead of disabling verification.
Global View configuration
Virtana AI Copilot connects to a large language model (LLM) backend over an OpenAI-compatible API, and you can configure that connection in Global View with a small set of environment variables. You can connect directly to a public provider, or route every request through a LiteLLM proxy so that credentials, model routing, request logging, and certificate trust stay under your control. This section describes the supported providers, the three configuration patterns, and the rules that decide which model name Copilot sends.
Set the LiteLLM endpoint and key in global-view-values.yaml for a Helm-based deployment. The endpoint must be the OpenAI-compatible base URL of your proxy, which for most LiteLLM deployments includes the /v1 suffix.
virtana-ai:
enabled: true
env:
VIRTANA_AI_MODEL_PROVIDER: "LITELLM"
VIRTANA_AI_EMBEDDING_PROVIDER: "OPENAI"
VIRTANA_AI_EMBEDDING_ENDPOINT: "https://api.openai.com/v1"
cp-configs:
virtana_ai:
virtana_ai_api_key: "<litellm_proxy_key>"
virtana_ai_inference_endpoint: "http://litellm.<namespace>.svc.cluster.local:4000/v1"The following table describes each parameter in the configuration block, including the value to enter and when the value is required:
Parameter | Description and value |
|---|---|
| Turns the Virtana AI Copilot Chatbot feature on or off. Set this to |
| Names the LLM provider that powers Virtana AI. Enter one of the supported values: |
| Authenticates Virtana AI with your provider. Enter the API key for your chosen provider. This key is required for all three providers (OpenAI, Gemini, and LiteLLM). For LiteLLM, use the key that has access to every model name in the LiteLLM model configuration. |
| Sets the inference endpoint URL that Virtana AI calls. Leave this blank for OpenAI and Gemini, because they use their default public endpoints. If you run a self-hosted LiteLLM instance, enter the full endpoint URL, for example, |
For an OVA-based deployment, set the Virtana AI values in the /home/virtana/override-global-view-values.yaml file on the Global View appliance.
cp-configs:
virtana_ai:
virtana_ai_api_key: ""
virtana_ai_inference_endpoint: ""
virtana-ai:
enabled: false
env:
VIRTANA_AI_MODEL_PROVIDER: ""The following table describes each parameter in the configuration block:
Parameter | Description | Default values |
|---|---|---|
| Authenticates Virtana AI with your model provider. Required for OpenAI, Gemini, and LiteLLM. For LiteLLM, enter the proxy key that has access to every model name in your LiteLLM model configuration. | "" (empty). The Copilot can't connect until you enter a key. |
| Sets the OpenAI-compatible base URL for inference requests. Leave blank for OpenAI and Gemini. For a self-hosted LiteLLM proxy, enter the proxy URL, for example, | "" (empty). When blank, Virtana AI uses the provider's default endpoint. The LiteLLM default is a Virtana-internal proxy that customer deployments can't reach, so always set this value for |
| Turns the Copilot on or off. Set to |
|
| Selects the LLM provider and which model names Virtana AI sends. Supported values: | "" (empty). When empty, Virtana AI uses |
Both deployment types configure the same seven settings under different names.
Configuration variables
Copilot reads its connectivity settings from six environment variables. The three inference variables are required for every deployment; the three embedding variables are optional and inherit the inference values when you leave them unset.
The following table describes each variable:
Environment variable | Purpose | Default value |
|---|---|---|
| Selects the inference provider and the alias resolution behavior. |
|
| Authenticates inference requests. Must not be empty. | None. Legacy |
| Sets the OpenAI-compatible base URL for inference requests. | The default endpoint for the selected provider |
| Selects the embedding provider, independently of the inference provider. | The value of |
| Authenticates embedding requests. | The value of |
| Sets the base URL for embedding requests. | The value of |
Virtana recommends keeping embeddings on OpenAI regardless of which provider handles inference. The Copilot document search store is indexed with the OpenAI text-embedding-3-large model at 1024 dimensions, and any other embedding model produces vectors that the existing store can't match.
Warning
Changing VIRTANA_AI_EMBEDDING_PROVIDER or the embedding model on a system that already has an indexed document store makes document search return incorrect or empty results. You must re-index the document store with the new embedding model before Copilot answers documentation questions correctly again.
Scenario 1: Connect directly to OpenAI or Gemini
Connect directly to a public provider when your Global View deployment can reach the provider's API, and you don't need centralized credential management or request logging. Copilot resolves its model aliases to that provider's model IDs and calls the provider's default endpoint, so you only set the provider and the key.
The following example configures a direct OpenAI connection:
export VIRTANA_AI_MODEL_PROVIDER="OPENAI" export VIRTANA_AI_API_KEY="<openai_api_key>"
To use Gemini instead, set VIRTANA_AI_MODEL_PROVIDER to GEMINI and supply a Gemini API key.
Scenario 2: Route through LiteLLM with model aliases
Set VIRTANA_AI_MODEL_PROVIDER to LITELLM when you want your proxy configuration, rather than Copilot, to decide which upstream model serves each workload. Copilot sends its internal aliases as literal model names, so your proxy holds the complete alias-to-model mapping, and you can change any mapping without touching Global View. Virtana recommends this pattern for proxy deployments.
The following example configures Copilot to send aliases to a LiteLLM proxy while keeping embeddings on OpenAI:
export VIRTANA_AI_MODEL_PROVIDER="LITELLM" export VIRTANA_AI_API_KEY="<litellm_proxy_key>" export VIRTANA_AI_INFERENCE_ENDPOINT="http://<litellm_host>:4000/v1" export VIRTANA_AI_EMBEDDING_PROVIDER="OPENAI" export VIRTANA_AI_EMBEDDING_API_KEY="<openai_api_key>" export VIRTANA_AI_EMBEDDING_ENDPOINT="https://api.openai.com/v1"
Your litellm_config.yaml file must define a model_name entry for every alias listed in model aliases and their resolved model IDs. A request for an alias that the proxy doesn't define returns a 4xx "model not found" error, and the Copilot feature that uses that alias stops working.
Scenario 3: Route through LiteLLM with provider model IDs
Set VIRTANA_AI_MODEL_PROVIDER to OPENAI or GEMINI and point VIRTANA_AI_INFERENCE_ENDPOINT at your LiteLLM proxy when the proxy already exposes standard provider model names. Copilot resolves each alias to a provider model ID before it sends the request, so the proxy sees names such as gpt-4o-mini rather than VIRTANA_MDL_MINI.
If your LiteLLM proxy uses self-signed certificates or you need to skip TLS certificate validation, set VIRTANA_AI_SSL_VERIFY to "false". By default, this value is "true".
The following example sends OpenAI model IDs to a LiteLLM proxy:
export VIRTANA_AI_MODEL_PROVIDER="OPENAI" export VIRTANA_AI_API_KEY="<litellm_proxy_key>" export VIRTANA_AI_INFERENCE_ENDPOINT="http://<litellm_host>:4000/v1" export VIRTANA_AI_SSL_VERIFY="false"
Set VIRTANA_AI_API_KEY to the LiteLLM proxy key in this pattern, not to your OpenAI or Gemini key. The proxy authenticates Copilot with its own key and uses the upstream provider key from its own configuration.
Note
VIRTANA_AI_MODEL_PROVIDER controls model name resolution only. It never overrides VIRTANA_AI_INFERENCE_ENDPOINT, so requests go to whichever endpoint you set, even when the provider value names a public provider.
VIRTANA_AI_SSL_VERIFY defaults to true. Set it to "false" only when bypassing certificate checks is necessary.
Enable GrowthBook feature flags
This section describes the feature flags that activate the Copilot and insights features for your end users. GrowthBook is the feature-flag service that controls which features appear in the product. After you deploy Global View with the configuration described in Global View configuration, set the two flags below in GrowthBook.
The following table lists each feature flag, the value to set, and the effect of that value:
Feature flag | Default value | Effect |
|---|---|---|
|
| Enables the Copilot Chatbot in the user interface. The flag controls the disable behavior, so a value of |
|
| Enables AI-powered insights generation in the IPM module. |