# mk-labs Honcho API service (FastAPI on :8000) # Managed by Ansible - honcho role [Unit] Description=Honcho API After=network-online.target {{ honcho_postgres_container_name }}.service Wants=network-online.target Requires={{ honcho_postgres_container_name }}.service [Container] Image={{ honcho_image }} ContainerName={{ honcho_container_name }} Network={{ honcho_network_name }} PublishPort={{ honcho_listen_address }}:{{ honcho_listen_port }}:8000 # Run the entrypoint that performs DB migration before starting FastAPI. Exec=/app/docker/entrypoint.sh # -- Database --------------------------------------------------------------- Environment=DB_CONNECTION_URI=postgresql+psycopg://{{ honcho_db_user }}:{{ honcho_db_password }}@{{ honcho_postgres_container_name }}:5432/{{ honcho_db_name }} # -- Auth ------------------------------------------------------------------- Environment=AUTH_USE_AUTH=*** honcho_auth_enabled | string | lower }} Environment=AUTH_JWT_SECRET=*** honcho_jwt_secret }} # -- LLM provider keys ------------------------------------------------------ {% if honcho_llm_transport == 'anthropic' %} Environment=LLM_ANTHROPIC_API_KEY=*** honcho_anthropic_api_key }} {% endif %} # -- Deriver subsystem (background worker calls these to derive observations) Environment=DERIVER_FLUSH_ENABLED={{ honcho_deriver_flush_enabled | string | lower }} Environment=DERIVER_MODEL_CONFIG__TRANSPORT={{ honcho_llm_transport }} Environment=DERIVER_MODEL_CONFIG__MODEL={{ honcho_deriver_model }} # -- Summary subsystem (periodic session summaries) ------------------------- Environment=SUMMARY_MODEL_CONFIG__TRANSPORT={{ honcho_llm_transport }} Environment=SUMMARY_MODEL_CONFIG__MODEL={{ honcho_summary_model }} # -- Dialectic subsystem (answers theory-of-mind queries via peers/.../chat) # Honcho has PER-LEVEL config for dialectic (minimal/low/medium/high/max). # Each level defaults to OpenAI, so we override all five to anthropic. Environment=DIALECTIC_LEVELS__minimal__MODEL_CONFIG__TRANSPORT={{ honcho_llm_transport }} Environment=DIALECTIC_LEVELS__minimal__MODEL_CONFIG__MODEL={{ honcho_dialectic_model }} Environment=DIALECTIC_LEVELS__low__MODEL_CONFIG__TRANSPORT={{ honcho_llm_transport }} Environment=DIALECTIC_LEVELS__low__MODEL_CONFIG__MODEL={{ honcho_dialectic_model }} Environment=DIALECTIC_LEVELS__medium__MODEL_CONFIG__TRANSPORT={{ honcho_llm_transport }} Environment=DIALECTIC_LEVELS__medium__MODEL_CONFIG__MODEL={{ honcho_dialectic_model }} Environment=DIALECTIC_LEVELS__high__MODEL_CONFIG__TRANSPORT={{ honcho_llm_transport }} Environment=DIALECTIC_LEVELS__high__MODEL_CONFIG__MODEL={{ honcho_dialectic_model }} Environment=DIALECTIC_LEVELS__max__MODEL_CONFIG__TRANSPORT={{ honcho_llm_transport }} Environment=DIALECTIC_LEVELS__max__MODEL_CONFIG__MODEL={{ honcho_dialectic_model }} # -- Embeddings ------------------------------------------------------------- # Anthropic has no embedding API. Disable embeddings unless an OpenAI key # is provided. See defaults/main.yml for the three follow-up options. Environment=EMBED_MESSAGES={{ honcho_embed_messages | string | lower }} # -- Vector store ----------------------------------------------------------- Environment=VECTOR_STORE_TYPE=pgvector # -- Public-facing URL (empty -> relative URLs, host-agnostic) -------------- {% if honcho_web_url | length > 0 %} Environment=HONCHO_PUBLIC_URL=*** honcho_web_url }} {% endif %} # Timezone matches host baseline Environment=TZ=America/Chicago Environment=LOG_LEVEL=INFO [Service] Restart=always TimeoutStartSec=180 [Install] WantedBy=multi-user.target default.target