16_ai.ymlΒΆ

---
# URL of Local Ollama Container
OLLAMA_BASE_LOCAL_URL: "http://{{ lookup('config','svc-ai-ollama', 'services.ollama.name') }}:{{ lookup('config','svc-ai-ollama', 'services.ollama.ports.internal.http')
  }}"

LITELLM_BASE_LOCAL_URL: "http://{{ lookup('config','svc-ai-litellm', 'services.litellm.name') }}:{{ lookup('config','svc-ai-litellm', 'services.litellm.ports.internal.http')
  }}"

LMSTUDIO_BASE_LOCAL_URL: "http://{{ lookup('config','svc-ai-lmstudio', 'services.lmstudio.name') }}:{{ lookup('config','svc-ai-lmstudio', 'services.lmstudio.ports.internal.http')
  }}"

S1_BASE_LOCAL_URL: "http://{{ lookup('config','svc-ai-s1', 'services.s1.name') }}:{{ lookup('config','svc-ai-s1', 'services.s1.ports.internal.http') }}"

LITELLM_OPENAI_BASE_LOCAL_URL: "{{ LITELLM_BASE_LOCAL_URL }}/v1"

LITELLM_LOOPBACK_HOSTS: "{{ NETWORK_LOOPBACK_HOSTS }}"

LITELLM_BASE_LOOPBACK_URL: "http://{{ LITELLM_LOOPBACK_HOSTS | first }}:{{ lookup('config','svc-ai-litellm', 'services.litellm.ports.local.http') }}"

LITELLM_OPENAI_BASE_LOOPBACK_URL: "{{ LITELLM_BASE_LOOPBACK_URL }}/v1"

LITELLM_BACKEND_ROLES: "{{ lookup('deployment').inventory }}"

LITELLM_OLLAMA_BACKEND: >-
  {{ (lookup('config', 'svc-ai-litellm', 'services.ollama.enabled') | bool)
     and (lookup('config', 'svc-ai-litellm', 'services.ollama.shared') | bool) }}

LITELLM_LMSTUDIO_BACKEND: >-
  {{ (lookup('config', 'svc-ai-litellm', 'services.lmstudio.enabled') | bool)
     and (lookup('config', 'svc-ai-litellm', 'services.lmstudio.shared') | bool) }}

AI_LOCAL_MODELS:
  - alias: llama3.2:1b
    context: 65536
    name: llama-3.2-1b-instruct
    repo: lmstudio-community/Llama-3.2-1B-Instruct-GGUF
    url: https://huggingface.co/lmstudio-community/Llama-3.2-1B-Instruct-GGUF/resolve/main/Llama-3.2-1B-Instruct-Q4_K_M.gguf
    source: https://huggingface.co/lmstudio-community/Llama-3.2-1B-Instruct-GGUF
    quant: q4_k_m
    file: Llama-3.2-1B-Instruct-Q4_K_M.gguf
    sha256: "f7ede42862ceca07ad1c88a97b67520019c4ac7e5ced250d2e696fa62ab189af"
    bytes: 807690688

AI_MODEL_CONTEXTS: >-
  {{ (AI_LOCAL_MODELS + (lookup('config', 'svc-ai-litellm', 'services.litellm.remote_models')))
     | selectattr('context', 'defined') | list | items2dict(key_name='alias', value_name='context') }}

AI_MOCK_PROVIDER: mock

AI_REMOTE_ALIASES: >-
  {{ lookup('config', 'svc-ai-litellm', 'services.litellm.remote_models')
     | selectattr('provider', 'in',
         [AI_MOCK_PROVIDER]
         + ['openai'] * (lookup('api_enabled', 'openai') | int)
         + ['anthropic'] * (lookup('api_enabled', 'anthropic') | int)
         + ['openrouter'] * (lookup('api_enabled', 'openrouter') | int))
     | map(attribute='alias') | list }}

AI_MOCK_ALIASES: >-
  {{ lookup('config', 'svc-ai-litellm', 'services.litellm.remote_models')
     | selectattr('provider', 'eq', AI_MOCK_PROVIDER) | map(attribute='alias') | list }}

LITELLM_CHAT_MODEL: "{{ (((lookup('config', 'svc-ai-ollama', 'services.ollama.preload_models') | map(attribute='alias') | reject('search', 'embed') | list) if 'svc-ai-ollama'
  in LITELLM_BACKEND_ROLES else []) + ((lookup('config', 'svc-ai-lmstudio', 'services.lmstudio.preload_models') | map(attribute='alias') | reject('search', 'embed')
  | list) if 'svc-ai-lmstudio' in LITELLM_BACKEND_ROLES else []) + AI_REMOTE_ALIASES) | first | default('') }}"

AI_AGENT_MODEL: "{{ AI_MOCK_ALIASES | first | default(LITELLM_CHAT_MODEL, true) }}"

LITELLM_CHAT_MODEL_SERVED: >-
  {{ ((LITELLM_OLLAMA_BACKEND | bool)
      and ((lookup('config', 'svc-ai-ollama', 'services.ollama.preload_models')
            | map(attribute='alias') | reject('search', 'embed') | list) | length > 0))
     or ((LITELLM_LMSTUDIO_BACKEND | bool)
         and ((lookup('config', 'svc-ai-lmstudio', 'services.lmstudio.preload_models')
               | map(attribute='alias') | reject('search', 'embed') | list) | length > 0))
     or ((AI_REMOTE_ALIASES | length) > 0) }}

LITELLM_USABLE: "{{ ('svc-ai-litellm' in group_names) and (LITELLM_CHAT_MODEL_SERVED | bool) }}"

MCP_DISCOVERY: "{{ lookup('mcp_servers') }}"
MCP_DISCOVERED_SERVERS: "{{ MCP_DISCOVERY.selected }}"
MCP_RECONCILE_STRICT: false