Key points
- Supported providers:
gemini,lmstudio,openai,anthropic,groq,mistral,ollama,openrouter,azure-openai. reasoningandthinkingare generic NopsAI options for LM Studio only. Other providers reject a generic value rather than silently ignoring stale configuration.max_tokensis supported by every current provider.allowed_scopesrestricts which run scopes may select the profile; an empty list permits every scope.- The credential value is write-only and is never returned by the API after submission.
- A local provider URL must be reachable from the API runtime — inside containers use a LAN IP or
host.docker.internal, notlocalhost.
Field reference
providerllm profilestringRequiredNone
Model provider client used for this profile.
provider: anthropicgemini, lmstudio, openai, anthropic, groq, mistral, ollama, openrouter, azure-openai
config/config.go
modelllm profilestringOptionalProvider default
Model identifier passed to the provider.
model: claude-sonnet-4-5base_urlllm profilestringOptionalProvider default endpoint
Endpoint override for self-hosted, proxied, or Azure deployments.
base_url: http://host.docker.internal:1234/v1- Must be reachable from the API runtime. Inside containers use a LAN IP or host.docker.internal, not localhost.
credential_refllm profilestringConditionalNone
Reference into the encrypted credential registry holding the provider API key.
credential_ref: llm/anthropic-prod- Required for providers that authenticate; local providers such as Ollama may not need one.
The credential value is never returned by the API after submission.
config/config.go
api_key_secretllm profilestringOptionalNone
Legacy inline secret name. Kept for migration compatibility.
api_key_secret: OPENAI_API_KEYSuperseded by credential_ref
allowed_scopesllm profilestring[]OptionalAll scopes
Runtime scopes allowed to select this profile. An empty list permits every scope.
allowed_scopes:
- platform/production- Scope comparison trims surrounding slashes and is case-insensitive.
Scope restriction is applied in addition to AAA authorization, not instead of it.
services/nopsai/pkg/validation/pipeline.go
timeout_secondsllm profileintegerOptionalPlatform default
Per-request timeout for provider calls made with this profile.
timeout_seconds: 120max_tokensllm profileintegerOptionalProvider default
Maximum output tokens per request. Supported by every current provider.
max_tokens: 8192config/config.go
pricingllm profileobjectOptionalUnpriced (zero for local providers)
Optional rate card in USD per million tokens, used to report AI usage as money. Takes input_per_million_usd and output_per_million_usd, plus optional cached_input_per_million_usd and cache_write_per_million_usd that default to the input rate. Leave it out when the rate is unknown: the model still runs and its cost records as unknown rather than zero, so dashboards report it as unpriced instead of understating spend. Local providers default to explicit zeroes because they have no per-token charge.
pricing:
input_per_million_usd: 0.30
output_per_million_usd: 2.50config/config.go
temperaturellm profilefloatOptionalProvider default
Sampling temperature. Unset leaves the provider default in place.
temperature: 0.2reasoningllm profilestringOptionalNone
Generic reasoning level. Supported only for the LM Studio provider.
reasoning: highoff, low, medium, high, on
- Other providers reject a generic value rather than silently ignoring stale configuration.
config/config.go
thinkingllm profilebooleanOptionalNone
Boolean form of the reasoning toggle. Supported only for LM Studio; reasoning takes precedence.
thinking: trueconfig/config.go
prompt_cache.modellm profilestringOptionalNone
Provider prompt-cache behavior for this profile.
prompt_cache:
mode: autoprompt_cache.scopellm profilestringOptionalNone
Cache partition boundary applied to prompt caching.
prompt_cache:
scope: runprompt_cache.retentionllm profilestringOptionalNone
How long a cached prompt prefix stays valid.
prompt_cache:
retention: 1hprovider_state.modellm profilestringOptionalNone
Whether provider-side conversation state is used for multi-turn goal work.
provider_state:
mode: autoextrallm profilemap<string,string>OptionalNone
Provider-specific settings passed through unchanged.
extra:
api_version: "2024-10-21"Examples
reasoning-large:
provider: anthropic
model: claude-sonnet-4-5
credential_ref: llm/anthropic-prod
max_tokens: 8192
temperature: 0.2
timeout_seconds: 120
allowed_scopes:
- platform/productionlocal-reasoning:
provider: lmstudio
model: qwen2.5-coder-32b
base_url: http://host.docker.internal:1234/v1
reasoning: highHow it works
Profiles can be system-wide or team-owned, and a team can set its own default. Assistant chat and AI Evaluation select from the same profile set that pipelines do.
Use the profile test action before a pipeline depends on it. A broken credential surfaces there instead of failing every goal at run time.
Prompt cache and provider state settings are recorded in telemetry as hashes, revision markers, cache and session identity, and token counts — prompt bodies are not stored.
Implementation evidence
config/config.goProvider constants, reasoning levels, and profile struct.
doc/llm-model-selection.mdProvider and model selection notes.

