Files
ansible-role-localai/tasks/main.yml
T
claudeandClaude Opus 5.5 dd5f03f074 Add a busy timeout for the LocalAI watchdog
LOCALAI_WATCHDOG_BUSY had no matching timeout setting, so the role
could only ever use LocalAI's built-in 5 minutes. On the throttled
Tesla T4 a legitimate request can take more than 6 minutes, so default
to 10 minutes, which also matches the ingress proxy-read-timeout.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-09 10:43:17 -05:00

124 lines
3.9 KiB
YAML

#SPDX-License-Identifier: MIT-0
---
# tasks file for localai
- name: Add skynet repo
kubernetes.core.helm_repository:
name: go-skynet
repo_url: https://go-skynet.github.io/helm-charts/
register: repo_update
- name: Update Helm repos
command: helm repo update
when: repo_update.changed
- name: Deploy LocalAI
kubernetes.core.helm:
name: localai
chart_ref: go-skynet/local-ai
release_namespace: localai
create_namespace: true
values:
deployment:
image:
tag: "{{ localai_image_tag }}"
pullPolicy: Always
runtimeClassName: nvidia
secretEnv:
- name: LOCALAI_DISABLE_WEBUI
value: "{{ localai_disable_webui }}"
- name: LOCALAI_API_KEY
value: "{{ localai_api_keys | join(',') }}"
- name: LOCALAI_WATCHDOG_IDLE
value: "{{ localai_watchdog_idle }}"
- name: LOCALAI_WATCHDOG_IDLE_TIMEOUT
value: "{{ localai_watchdog_idle_timeout }}"
- name: LOCALAI_WATCHDOG_BUSY
value: "{{ localai_watchdog_busy }}"
- name: LOCALAI_WATCHDOG_BUSY_TIMEOUT
value: "{{ localai_watchdog_busy_timeout }}"
- name: DEBUG
value: "{{ localai_debug }}"
- name: LOCALAI_P2P
value: "{{ localai_p2p }}"
- name: LOCALAI_FEDERATED
value: "{{ localai_federated }}"
# Keep agents, knowledge-base collections, users and runtime settings
# on the models PVC; the chart's default /data and /configuration are
# ephemeral, so a pod restart used to wipe them.
- name: LOCALAI_DATA_PATH
value: "{{ localai_data_path }}"
- name: LOCALAI_CONFIG_DIR
value: "{{ localai_config_dir }}"
- name: LOCALAI_BACKENDS_PATH
value: "{{ localai_backends_path }}"
- name: LOCALAI_AGENT_POOL_DEFAULT_MODEL
value: "{{ localai_agent_pool_default_model }}"
- name: LOCALAI_AGENT_POOL_EMBEDDING_MODEL
value: "{{ localai_agent_pool_embedding_model }}"
resources:
limits:
nvidia.com/gpu: 1
persistence:
models:
size: 256Gi
output:
size: 128Gi
tolerations:
- key: specialResources
operator: Equal
value: GPU
effect: NoSchedule
ingress:
enabled: true
className: nginx
annotations:
cert-manager.io/cluster-issuer: ca-issuer
nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
nginx.ingress.kubernetes.io/proxy-set-header: "X-Forwarded-For"
hosts:
- host: localai.eom.dev
paths:
- path: /
pathType: ImplementationSpecific
tls:
- secretName: localai-tls
hosts:
- localai.eom.dev
# The chart has no values for these, so patch them onto the Deployment after
# Helm. hostNetwork lets p2p workers on the LAN reach the server directly.
- name: Enable host networking
kubernetes.core.k8s:
state: patched
kind: Deployment
name: localai-local-ai
namespace: localai
definition:
spec:
template:
spec:
hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet
when: localai_host_network | bool
# The p2p token lives in a Secret created outside this role (localai/localai-p2p).
- name: Read the p2p token from its Secret
kubernetes.core.k8s:
state: patched
kind: Deployment
name: localai-local-ai
namespace: localai
definition:
spec:
template:
spec:
containers:
- name: local-ai
env:
- name: LOCALAI_P2P_TOKEN
valueFrom:
secretKeyRef:
name: "{{ localai_p2p_token_secret }}"
key: LOCALAI_P2P_TOKEN
when: localai_p2p_token_secret | length > 0