ReflexioDeveloper Docs
Menu
All

LLM Configuration

Configure LLM provider API keys, model selection, Azure OpenAI, and custom endpoints for Reflexio.

LLM Configuration

Reflexio uses LiteLLM for multi-provider LLM support. You must configure an API key for at least one provider.

Hosted Enterprise

Reflexio Enterprise users can configure LLM provider API keys and model selection through the Settings page in the web portal under Advanced Settings.

API Keys

Method 1: Environment Variables (Recommended)

Set provider-specific environment variables in your .env file. LiteLLM picks them up automatically.

# .env — set one or more provider keys
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
GEMINI_API_KEY=...
DEEPSEEK_API_KEY=...

OpenAI is a common starting point for text generation. Embeddings default to Reflexio's local model unless you override embedding_model_name.

Method 2: Programmatic Configuration

Set API keys via the Config object. Programmatic keys take precedence over environment variables.

from reflexio.models.config_schema import APIKeyConfig, OpenAIConfig

config = client.get_config()
config.api_key_config = APIKeyConfig(
    openai=OpenAIConfig(api_key="sk-your-key-here")
)
client.set_config(config)
curl -X GET "${REFLEXIO_URL:-https://www.reflexio.ai}/api/get_config" \
  -H "User-Agent: my-agent-reflexio" \
  -H "Authorization: Bearer $REFLEXIO_API_KEY"

curl -X POST "${REFLEXIO_URL:-https://www.reflexio.ai}/api/set_config" \
  -H "User-Agent: my-agent-reflexio" \
  -H "Authorization: Bearer $REFLEXIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data @- <<'JSON'
{
  "...": "updated full config object"
}
JSON

Supported Providers:

ProviderConfig ClassEnvironment Variable
OpenAIOpenAIConfigOPENAI_API_KEY
AnthropicAnthropicConfigANTHROPIC_API_KEY
Google GeminiGeminiConfigGEMINI_API_KEY
DeepSeekDeepSeekConfigDEEPSEEK_API_KEY
OpenRouterOpenRouterConfigOPENROUTER_API_KEY
MiniMaxMiniMaxConfigMINIMAX_API_KEY
DashScope (Qwen)DashScopeConfigDASHSCOPE_API_KEY
Zhipu AIZAIConfigZAI_API_KEY
MoonshotMoonshotConfigMOONSHOT_API_KEY
xAIXAIConfigXAI_API_KEY

For Z.ai models such as zai/glm-5.2, Reflexio uses https://api.z.ai/api/coding/paas/v4 as the built-in API base. Configure only the ZAI_API_KEY; the coding endpoint is a runtime default, not a setting. An explicit per-call API base or a configured custom endpoint still takes precedence.

Custom OpenAI-Compatible Endpoints

Use CustomEndpointConfig to connect to any OpenAI-compatible API. Custom endpoints take priority over other providers for text generation (but not embeddings).

from reflexio.models.config_schema import APIKeyConfig, CustomEndpointConfig

config.api_key_config = APIKeyConfig(
    custom_endpoint=CustomEndpointConfig(
        model="my-model",
        api_key="your-key",
        api_base="http://localhost:8000/v1"
    )
)
client.set_config(config)
curl -X POST "${REFLEXIO_URL:-https://www.reflexio.ai}/api/set_config" \
  -H "User-Agent: my-agent-reflexio" \
  -H "Authorization: Bearer $REFLEXIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data @- <<'JSON'
{
  "...": "updated full config object"
}
JSON

Azure OpenAI

Use AzureOpenAIConfig nested inside OpenAIConfig to connect to Azure OpenAI:

from reflexio.models.config_schema import (
    APIKeyConfig, OpenAIConfig, AzureOpenAIConfig
)

config.api_key_config = APIKeyConfig(
    openai=OpenAIConfig(
        azure_config=AzureOpenAIConfig(
            api_key="your-azure-key",
            endpoint="https://your-resource.openai.azure.com/",
            api_version="2024-02-15-preview",
            deployment_name="gpt-4o"
        )
    )
)
client.set_config(config)
curl -X POST "${REFLEXIO_URL:-https://www.reflexio.ai}/api/set_config" \
  -H "User-Agent: my-agent-reflexio" \
  -H "Authorization: Bearer $REFLEXIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data @- <<'JSON'
{
  "...": "updated full config object"
}
JSON

Model Selection

Reflexio uses different models for different tasks. Sensible defaults are provided, but you can override them via LLMConfig. Only set fields you want to override — None fields keep the defaults.

FieldDefaultPurpose
should_run_model_nameminimax/MiniMax-M2.5Fast check to decide if extraction should run on a given interaction
generation_model_nameminimax/MiniMax-M2.5Profile extraction, playbook generation, and evaluation
embedding_model_nameOSS: local/minilm-l6-v2; Enterprise: customVector embeddings for semantic search. Enterprise custom uses the operator-configured embedding service without exposing its concrete model.
pre_retrieval_model_nameminimax/MiniMax-M2.5Model for pre-retrieval query reformulation

Embedding input formatting plus the default retrieval and playbook-clustering thresholds are selected by the exact embedding model:

Embedding modelInput formattingRetrieval thresholdClustering similarity
local/minilm-l6-v2No prefix0.300.30
local/nomic-embed-text-v1.5search_document: for stored text; search_query: for queries0.700.85
local/nomic-embed-v1.5 (compatibility alias)search_document: for stored text; search_query: for queries0.700.85
Enterprise custom serviceResolved from the service policyModel-specificModel-specific
Other explicit modelsNo prefix0.450.30

An explicit request threshold always wins, including 0.0. In hybrid search, the threshold filters only the vector arm; full-text matches remain eligible. An explicit playbook clustering_similarity also wins. Playbook embeddings use only their normalized trigger; they do not fall back to playbook content. This normalization applies when an embedding is computed and does not automatically backfill existing playbook vectors.

from reflexio.models.config_schema import LLMConfig

config = client.get_config()
config.llm_config = LLMConfig(
    generation_model_name="openai/gpt-4o",
    embedding_model_name="text-embedding-3-small",
)
client.set_config(config)
curl -X GET "${REFLEXIO_URL:-https://www.reflexio.ai}/api/get_config" \
  -H "User-Agent: my-agent-reflexio" \
  -H "Authorization: Bearer $REFLEXIO_API_KEY"

curl -X POST "${REFLEXIO_URL:-https://www.reflexio.ai}/api/set_config" \
  -H "User-Agent: my-agent-reflexio" \
  -H "Authorization: Bearer $REFLEXIO_API_KEY" \
  -H "Content-Type: application/json" \
  --data @- <<'JSON'
{
  "...": "updated full config object"
}
JSON

Model names use LiteLLM's "provider/model-name" format (e.g., "openai/gpt-4o", "anthropic/claude-3-5-sonnet", "deepseek/deepseek-chat").

Z.ai models use Reflexio's prompt-backed structured-output path, and the live-verified zai/glm-5.2 model supports extraction-agent tool loops. Fallback lists may freely mix providers and structured-output strategies — Reflexio walks the primary and fallback models itself, one at a time, and rebuilds the request (structured-output strategy, api_base, per-model timeout) for each one. That means a primary using native JSON Schema can fall back to a prompt-backed provider like Z.ai, and vice versa; no transport compatibility restriction applies to structured-output or text fallback lists.

Hosted Enterprise

Enterprise settings show Custom by default. Custom uses the local or deployed embedding service; the service's concrete model is intentionally operator-owned and is not shown in organization LLM configuration. After switching between Custom and an explicit cloud model, save the configuration first, then use Regenerate embeddings in Advanced Settings. Regeneration is manually triggered and runs server-side for the current organization using the saved route. Cloud embedding models such as text-embedding-3-small and gemini/gemini-embedding-001 bypass the embedding service when the corresponding provider credentials are configured and the model produces 512-dimensional vectors — regeneration validates the vector width and fails the job if a model returns a different dimension.

Changing embedding models puts new query vectors and existing stored vectors in different vector spaces until regeneration finishes, so semantic search quality may be temporarily degraded during the job.

The input-formatting policy is also part of the embedding space. If an existing non-Nomic database was populated by a Reflexio version that added Nomic-style prefixes to every model, rebuild the local SQLite database or run enterprise embedding regeneration after upgrading.