---
# 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