Skip to main content

Troubleshooting

This page covers common issues encountered when deploying and operating Iris.

Startup Failures​

APPLICATION_YML_PATH environment variable is not set​

Iris requires the APPLICATION_YML_PATH environment variable to locate its configuration file. In Docker deployments, this is set automatically by the compose files. If running manually:

export APPLICATION_YML_PATH=/path/to/application.yml
export LLM_CONFIG_PATH=/path/to/llm_config.yml
poetry run uvicorn iris.main:app --host 0.0.0.0 --port 8000

Configuration file not found​

The path specified in APPLICATION_YML_PATH does not exist or is not readable. Verify:

ls -la $APPLICATION_YML_PATH

In Docker, check that the volume mount is correct in your compose file:

volumes:
- /host/path/to/application.yml:/config/application.yml:ro

Error parsing YAML file​

The application.yml or llm_config.yml contains invalid YAML syntax. Common causes:

  • Incorrect indentation (YAML is whitespace-sensitive)
  • Missing quotes around strings containing special characters
  • Tabs instead of spaces

Validate your file:

python -c "import yaml; yaml.safe_load(open('application.yml'))"

LangFuse public_key and secret_key are required when enabled=True​

You set langfuse.enabled: true in application.yml but did not provide both public_key and secret_key. Either provide the keys or set enabled: false:

langfuse:
enabled: false

Connectivity Issues​

Artemis Cannot Reach Iris​

Symptoms: Iris features are greyed out or unavailable in the Artemis UI.

  1. Verify Iris is running:

    curl http://iris-host:8000/docs
  2. Check the health endpoint (requires authentication):

    curl -H "Authorization: your-token" http://iris-host:8000/api/v1/health/
  3. Verify Artemis configuration in application-artemis.yml:

    iris:
    enabled: true
    url: http://iris-host:8000 # No trailing slash
    secret-token: your-token
  4. Docker networking: If both services run in Docker on the same host, use the container name or Docker network DNS instead of localhost:

    iris:
    url: http://pyris-app:8000

See also: Artemis Integration

Iris Cannot Reach Weaviate​

Symptoms: Health endpoint shows Weaviate as DOWN. Ingestion and RAG-based features fail.

  1. Check Weaviate is running:

    docker compose -f <compose-file> ps weaviate
  2. Check Weaviate logs:

    docker compose -f <compose-file> logs weaviate
  3. Verify application.yml settings: When running in Docker Compose, host should be weaviate (the service name), not localhost:

    weaviate:
    host: "weaviate"
    port: "8001"
    grpc_port: "50051"
  4. Test Weaviate directly:

    curl http://localhost:8001/v1/.well-known/ready

See also: Weaviate Setup

Iris Cannot Reach LLM Provider​

Symptoms: Pipeline executions fail with connection errors. Logs show timeout or DNS resolution failures.

  1. Verify outbound connectivity from the Iris container:

    docker exec pyris-app python -c "import urllib.request; urllib.request.urlopen('https://api.openai.com')"
  2. Check API keys in llm_config.yml: Ensure the api_key values are valid and have not expired.

  3. For Azure endpoints: Verify the endpoint URL is correct and the azure_deployment name matches your Azure deployment.

  4. For Ollama: Ensure the Ollama server is running and accessible from the Iris container. If Ollama runs on the Docker host, use host.docker.internal as the endpoint hostname.

See also: LLM Configuration

Authentication Errors​

401 Unauthorized on API Requests​

The Authorization header value does not match any token in application.yml:

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

Common causes:

  • Token mismatch between Artemis's iris.secret-token and Iris's api_keys[].token
  • Trailing whitespace or newline characters in the token
  • Copying the token with surrounding quotes (the YAML value should not include literal quote characters)

403 Forbidden​

Iris returns 403 when authentication succeeds but the request is invalid. Check Iris logs for details:

docker compose -f <compose-file> logs pyris-app | grep "403\|forbidden\|Forbidden"

LLM Configuration Errors​

Missing Models at Startup​

Iris logs warnings when pipelines cannot find required models. Example:

WARNING: Pipeline 'exercise_chat' could not resolve model for role 'primary'

Fix: Ensure llm_config.yml contains models matching what the pipelines expect. At minimum, configure:

  • A chat model (e.g., openai_chat type)
  • An embedding model (e.g., openai_embedding or azure_embedding type)

Model API Errors During Pipeline Execution​

If a model is configured but API calls fail:

  • Rate limiting: You may be hitting the provider's rate limits. Check the LLM provider dashboard.
  • Quota exceeded: Your API key may have exhausted its budget.
  • Model deprecation: The model name may no longer be valid. Check the provider's documentation for current model names.

Port Conflicts​

If services fail to start due to port conflicts:

# Change the Iris port
export PYRIS_PORT=8080

# Change the Weaviate ports
export WEAVIATE_PORT=9001
export WEAVIATE_GRPC_PORT=50052

Remember to update application.yml with the new Weaviate ports if you change them.

Memory and Resource Issues​

Iris Container Running Out of Memory​

Iris itself is lightweight, but LLM responses with very long contexts can spike memory usage. If the container is OOM-killed:

  • Increase the Docker memory limit for the pyris-app service
  • Monitor memory usage: docker stats pyris-app

Weaviate Disk Usage​

Weaviate warns at 80% disk usage and may refuse writes when full.

# Check disk usage of the Weaviate data volume
du -sh /path/to/weaviate-data

Solutions:

  • Increase disk space
  • Delete unused collections through the Iris API
  • Re-index only the courses that are currently active

Docker Resource Allocation​

If services fail to start or crash immediately:

  • On Docker Desktop: Increase memory allocation in Docker Desktop settings (recommend at least 4 GB for the full stack)
  • On Linux: Ensure sufficient system resources and check dmesg for OOM killer activity

Log Locations​

SourceHow to Access
Iris application logsdocker compose -f <compose-file> logs -f pyris-app
Weaviate logsdocker compose -f <compose-file> logs -f weaviate
Nginx logs (if used)docker compose -f <compose-file> logs -f nginx
Sentry dashboardCheck your Sentry project (see Monitoring)
LangFuse dashboardCheck your LangFuse project (see Monitoring)

Debugging Tips​

  1. Enable verbose logging: Set SENTRY_ATTACH_STACKTRACE=true to get full stack traces in Sentry.

  2. Check the Swagger UI: Navigate to http://iris-host:8000/docs to interactively test API endpoints.

  3. Validate configuration files before deploying:

    python -c "
    import yaml
    with open('application.yml') as f:
    print('application.yml:', 'OK' if yaml.safe_load(f) else 'EMPTY')
    with open('llm_config.yml') as f:
    print('llm_config.yml:', 'OK' if yaml.safe_load(f) else 'EMPTY')
    "
  4. Test connectivity step by step: Verify each connection independently (Iris to Weaviate, Iris to LLM, Artemis to Iris) before debugging pipeline failures.

  5. Use LangFuse for pipeline debugging: Enable LangFuse tracing to see exactly which LLM calls are made, what prompts are sent, and where failures occur. See Monitoring for setup.