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

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_keyYesAPI key for the provider
endpointAzure/OllamaProvider endpoint 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

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_FILEPath to application config on host
PYRIS_LLM_CONFIG_YML_FILEPath 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.