Skip to main content
Reflex uses two different models in every run:
  • Reasoning model — the agent that diagnoses failures and rewrites prompts. This is where the intelligence lives. Defaults to Claude.
  • Target model — the model your prompt will actually run on. This is what you’re benchmarking or optimizing for.
They can be completely different providers. A common setup is Claude as the reasoning agent rewriting prompts for a GPT-4o target.

Reasoning model (default: Claude)

Reflex ships with Anthropic Claude as the default reasoning model — it’s included when you pip install aevyra-reflex, no extra flags needed. The default model is claude-sonnet-4-20250514. It’s fast, capable, and well-suited to the diagnostic reasoning reflex requires. Default install:
pip install aevyra-reflex
export ANTHROPIC_API_KEY=sk-ant-...
No reasoning_model or reasoning_provider configuration is needed. The default just works.

Changing the reasoning model

Override it in OptimizerConfig:
from aevyra_reflex import PromptOptimizer, OptimizerConfig

optimizer = PromptOptimizer(
    config=OptimizerConfig(
        reasoning_model="claude-opus-4-6",
        reasoning_provider="anthropic",  # optional if model name starts with "claude"
    )
)
Or via the CLI:
aevyra-reflex run \
  --reasoning-model claude-opus-4-6 \
  --dataset data.csv \
  --provider openai --model gpt-4o-mini \
  prompt.txt

Using a different reasoning provider

You can swap Claude for Gemini, any OpenAI-compatible model, or a local Ollama model. Gemini (no extra package — uses Google’s OpenAI-compatible endpoint):
export GOOGLE_API_KEY=...
config = OptimizerConfig(
    reasoning_model="gemini-2.0-flash",
    reasoning_provider="gemini",  # or omit — inferred from "gemini-*" model name
)
OpenAI:
pip install aevyra-reflex[openai]
config = OptimizerConfig(
    reasoning_model="gpt-4o",
    reasoning_provider="openai",   # or omit — inferred from model name
)
Ollama (no SDK needed — uses urllib directly):
config = OptimizerConfig(
    reasoning_model="llama3.3:70b",
    reasoning_provider="ollama",   # or set base_url to your Ollama server
)

Target model providers

The target model is the model your prompts actually run on during evals. Reflex passes each dataset example through it and scores the output. Install only the provider you need:
pip install aevyra-reflex[openai]      # OpenAI
pip install aevyra-reflex[google]      # Gemini
pip install aevyra-reflex[mistral]     # Mistral
pip install aevyra-reflex[cohere]      # Cohere
pip install aevyra-reflex[all]         # everything
Ollama and any OpenAI-compatible API (OpenRouter, Together, Fireworks, etc.) work with [openai] — no extra package required beyond openai.

Provider reference

ProviderExtraEnv varDefault model
Anthropic(included)ANTHROPIC_API_KEYclaude-sonnet-4-6
OpenAI[openai]OPENAI_API_KEYgpt-4o-mini
Google Gemini[google]GOOGLE_API_KEYgemini-2.0-flash
Mistral[mistral]MISTRAL_API_KEYmistral-large-latest
Cohere[cohere]COHERE_API_KEYcommand-r-plus
Ollama(no SDK)any local model
OpenRouter[openai]OPENROUTER_API_KEYany model
Together AI[openai]TOGETHER_API_KEYany model
Fireworks[openai]FIREWORKS_API_KEYany model
Groq[openai]GROQ_API_KEYany model

Examples

OpenAI target:
optimizer = (
    PromptOptimizer()
    .set_dataset("data.csv")
    .add_provider("openai", "gpt-4o-mini")
    .add_metric(RougeScore())
)
Gemini target:
optimizer = (
    PromptOptimizer()
    .set_dataset("data.csv")
    .add_provider("google", "gemini-2.0-flash")
    .add_metric(RougeScore())
)
Ollama (local) target:
optimizer = (
    PromptOptimizer()
    .set_dataset("data.csv")
    .add_provider("ollama", "llama3.1:8b")
    .add_metric(RougeScore())
)
OpenRouter target (any model available on OpenRouter):
optimizer = (
    PromptOptimizer()
    .set_dataset("data.csv")
    .add_provider("openrouter", "meta-llama/llama-3.1-8b-instruct")
    .add_metric(RougeScore())
)

Mix and match

The reasoning model and target model are fully independent. A typical cost-effective setup:
optimizer = PromptOptimizer(
    config=OptimizerConfig(
        # Claude drives the reasoning (default)
        reasoning_model="claude-sonnet-4-20250514",
        # ...but we're optimizing a cheap Groq endpoint
    )
).set_dataset("data.csv").add_provider("groq", "llama-3.1-8b-instant")
Or use a powerful frontier model for both:
config = OptimizerConfig(
    reasoning_model="claude-opus-4-6",
)
optimizer = PromptOptimizer(config=config).add_provider("openai", "gpt-4o")

Missing SDK errors

If you try to use a provider without its SDK installed, reflex raises a clear error:
ImportError: The OpenAI provider requires the openai package.
Install it with: pip install aevyra-verdict[openai]
All provider SDKs are optional and loaded lazily — importing aevyra_reflex never fails due to a missing provider package.