Skip to main content

Configuration

Iris is configured through two YAML files and environment variables. This page documents all configuration options and how they are loaded.

Configuration Files​

FilePurposeEnv Variable
application.yml / application.local.ymlApp settings: API keys, Weaviate, Memiris, LangFuseAPPLICATION_YML_PATH
llm_config.yml / llm_config.local.ymlLLM model definitionsLLM_CONFIG_PATH

Both paths are specified via environment variables. The .local.yml variants are for development and are gitignored.

Application Configuration​

Loaded by: src/iris/config.py

The Settings class is a Pydantic model that validates the YAML file at startup:

class Settings(BaseModel):
api_keys: list[APIKeyConfig]
env_vars: dict[str, str]
weaviate: WeaviateSettings
memiris: MemirisSettings
langfuse: LangfuseSettings = Field(default_factory=LangfuseSettings)

@classmethod
def get_settings(cls):
file_path_env = os.environ.get("APPLICATION_YML_PATH")
if not file_path_env:
raise EnvironmentError("APPLICATION_YML_PATH environment variable is not set.")
file_path = Path(file_path_env)
with open(file_path, "r", encoding="utf-8") as file:
settings_file = yaml.safe_load(file)
return cls.model_validate(settings_file)

The settings singleton is created at module load time:

settings = Settings.get_settings()

Full Example​

application.local.yml
api_keys:
- token: "your-secret-token"

weaviate:
host: "localhost"
port: "8001"
grpc_port: "50051"

memiris:
enabled: true
sleep_enabled: true

langfuse:
enabled: false
public_key: "pk-lf-..."
secret_key: "sk-lf-..." # pragma: allowlist secret
host: "https://cloud.langfuse.com"

env_vars:
SENTRY_ENVIRONMENT: "development"

Section Reference​

api_keys​

List of API tokens that Artemis uses to authenticate with Iris:

api_keys:
- token: "your-secret-token"

The token is validated by the TokenValidator FastAPI dependency on every pipeline request.

weaviate​

Connection settings for the Weaviate vector database:

FieldTypeDescription
hoststringWeaviate hostname (e.g., localhost)
portintREST API port (default: 8001)
grpc_portintgRPC port (default: 50051)

memiris​

Settings for the Memiris memory system:

FieldTypeDefaultDescription
enabledbooltrueWhether Memiris memory creation is active
sleep_enabledbooltrueWhether the nightly memory consolidation job runs

langfuse​

Optional LangFuse observability integration:

FieldTypeDefaultDescription
enabledboolfalseEnable/disable LangFuse tracing
public_keystringnullLangFuse public key (required when enabled)
secret_keystringnullLangFuse secret key (required when enabled)
hoststringhttps://cloud.langfuse.comLangFuse server URL
warning

When enabled: true, both public_key and secret_key must be provided. The Pydantic validator will reject the configuration otherwise.

env_vars​

Arbitrary environment variables set at startup. Useful for Sentry configuration and other runtime settings:

env_vars:
SENTRY_ENVIRONMENT: "staging"
SENTRY_SERVER_NAME: "iris-staging-01"

LLM Configuration​

Loaded by: src/iris/llm/llm_manager.py

The LlmManager singleton reads the YAML file and creates typed model objects. The file is a YAML list where each entry defines one LLM:

Full Example​

llm_config.local.yml
# Chat models
- id: oai-gpt-5-mini
name: GPT 5 Mini
description: GPT 5 Mini on OpenAI
type: openai_chat
model: gpt-5-mini
api_key: "<your-key>"
tools: []
cost_per_million_input_token: 0.4
cost_per_million_output_token: 1.6

# Azure chat model
- id: azure-gpt-5-mini
name: GPT 5 Mini (Azure)
description: GPT 5 Mini on Azure
type: azure_chat
endpoint: "<your-endpoint>"
api_version: "2025-04-01-preview"
azure_deployment: gpt-5-mini
model: gpt-5-mini
api_key: "<your-key>"
cost_per_million_input_token: 0.4
cost_per_million_output_token: 1.6

# Embedding model
- id: oai-embedding-small
name: Embedding Small
description: Embedding Small 8k
type: openai_embedding
model: text-embedding-3-small
api_key: "<your-key>"
cost_per_million_input_token: 0.02

# Reranker
- id: cohere
name: Cohere Client V2
description: Cohere V2 client
type: cohere_azure
model: rerank-multilingual-v3.5
endpoint: "<your-endpoint>"
api_key: "<your-key>"
cost_per_1k_requests: 2

# Or use a local no-network fallback when no reranking service is available
- id: passthrough-reranker
name: Passthrough reranker
description: Preserve vector-search order
type: passthrough_reranker
model: passthrough
cost_per_1k_requests: 0

Parameter Reference​

ParameterRequiredDescription
idYesUnique identifier across all models
nameYesHuman-readable display name
descriptionYesAdditional description
typeYesModel type (see below)
modelYesVendor model name — used for version matching (e.g., gpt-5-mini)
api_keyProviderAPI key for external providers; omit for passthrough
endpointAzure/CohereProvider endpoint URL
hostOllamaOllama server host URL
api_versionAzureAzure API version
azure_deploymentAzureAzure deployment name
toolsNoSupported tool types (default: [])
cost_per_million_input_tokenNoCost tracking: input token price
cost_per_million_output_tokenNoCost tracking: output token price
cost_per_1k_requestsNoCost tracking: per-request price (rerankers)

Model Types​

TypeProviderClass
openai_chatOpenAIDirectOpenAIChatModel — Chat completions
azure_chatAzure OpenAIAzureOpenAIChatModel — Chat completions via Azure
openai_embeddingOpenAIDirectOpenAIEmbeddingModel — Text embeddings
azure_embeddingAzure OpenAIAzureOpenAIEmbeddingModel — Text embeddings via Azure
openai_completionOpenAIDirectOpenAICompletionModel — Text completions
azure_completionAzure OpenAIAzureOpenAICompletionModel — Text completions via Azure
ollamaOllamaOllamaModel — Local model inference
cohere_azureCohere (Azure)CohereAzureClient — Reranking
passthrough_rerankerLocalPassthroughReranker — Preserve vector-search order

How Models Are Selected​

The ModelVersionRequestHandler selects models by matching the model field:

class ModelVersionRequestHandler(RequestHandler):
def _select_model(self, type_filter: type) -> LanguageModel:
matching_llms = [
llm for llm in self.llm_manager.entries
if isinstance(llm, type_filter) and llm.model == self.version
]
if not matching_llms:
raise ValueError(f"No {type_filter.__name__} found with model name {self.version}")
return matching_llms[0]

When a variant specifies cloud_agent_model: "gpt-5-mini", the handler searches for the first entry in llm_config.yml where model == "gpt-5-mini" and the type is a ChatModel.

Environment Variables​

Beyond the two config file paths, Iris uses these environment variables:

VariablePurposeDefault
APPLICATION_YML_PATHPath to application configRequired
LLM_CONFIG_PATHPath to LLM configRequired
SENTRY_ENVIRONMENTSentry environment namedevelopment
SENTRY_SERVER_NAMESentry server identifierlocalhost
SENTRY_RELEASESentry release versionNone
SENTRY_ENABLE_TRACINGEnable Sentry performance tracingFalse
SENTRY_ATTACH_STACKTRACEAttach stack traces to eventsFalse

Additional environment variables can be injected via the env_vars section of application.yml.

Docker Configuration​

When running with Docker, configuration files are mounted into the container. The Docker Compose environment variables control paths and ports:

VariableDefaultPurpose
PYRIS_DOCKER_TAGlatestDocker image tag
PYRIS_APPLICATION_YML_FILE—Path to application config on host
PYRIS_LLM_CONFIG_YML_FILE—Path to LLM config on host
PYRIS_PORT8000Host port for the Iris application
WEAVIATE_PORT8001Host port for Weaviate REST API
WEAVIATE_GRPC_PORT50051Host port for Weaviate gRPC

See Local Setup for Docker setup instructions.