Compare commits

..
2 Commits
Author SHA1 Message Date
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
claudeandClaude Opus 5.5 0559783297 Persist LocalAI state and match the live deployment
- Keep agents, KB collections, users and runtime settings
  (LOCALAI_DATA_PATH, LOCALAI_CONFIG_DIR) and backends
  (LOCALAI_BACKENDS_PATH) on the models PVC. The chart's /data,
  /configuration and /backends are ephemeral, so every pod restart wiped
  the agent team and the llama.cpp backend.
- Default the agent pool to ornith-1.5-9b-q8 with
  granite-embedding-107m-multilingual embeddings.
- Make the image tag a variable, defaulting to the CUDA 13 image that runs.
- Patch hostNetwork and the LOCALAI_P2P_TOKEN secretKeyRef (Secret
  localai/localai-p2p) onto the Deployment after Helm. Both were set by
  hand, and applying the role would otherwise revert them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-07 12:45:17 -05:00
2 changed files with 66 additions and 1 deletions
+14
View File
@@ -8,3 +8,17 @@ localai_api_keys:
localai_watchdog_idle: "false" localai_watchdog_idle: "false"
localai_watchdog_idle_timeout: "15m" localai_watchdog_idle_timeout: "15m"
localai_watchdog_busy: "true" localai_watchdog_busy: "true"
localai_watchdog_busy_timeout: "10m"
localai_image_tag: latest-gpu-nvidia-cuda-13
localai_debug: "false"
localai_p2p: "false"
localai_federated: "false"
# Persistent state lives on the models PVC (mounted at /models).
localai_data_path: /models/.localai/data
localai_config_dir: /models/.localai/configuration
localai_backends_path: /models/.backends
localai_agent_pool_default_model: ornith-1.5-9b-q8
localai_agent_pool_embedding_model: granite-embedding-107m-multilingual
localai_host_network: true
# Name of a Secret holding LOCALAI_P2P_TOKEN; empty skips the patch.
localai_p2p_token_secret: localai-p2p
+52 -1
View File
@@ -20,7 +20,7 @@
values: values:
deployment: deployment:
image: image:
tag: latest-gpu-nvidia-cuda-12 tag: "{{ localai_image_tag }}"
pullPolicy: Always pullPolicy: Always
runtimeClassName: nvidia runtimeClassName: nvidia
secretEnv: secretEnv:
@@ -34,12 +34,27 @@
value: "{{ localai_watchdog_idle_timeout }}" value: "{{ localai_watchdog_idle_timeout }}"
- name: LOCALAI_WATCHDOG_BUSY - name: LOCALAI_WATCHDOG_BUSY
value: "{{ localai_watchdog_busy }}" value: "{{ localai_watchdog_busy }}"
- name: LOCALAI_WATCHDOG_BUSY_TIMEOUT
value: "{{ localai_watchdog_busy_timeout }}"
- name: DEBUG - name: DEBUG
value: "{{ localai_debug }}" value: "{{ localai_debug }}"
- name: LOCALAI_P2P - name: LOCALAI_P2P
value: "{{ localai_p2p }}" value: "{{ localai_p2p }}"
- name: LOCALAI_FEDERATED - name: LOCALAI_FEDERATED
value: "{{ 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: resources:
limits: limits:
nvidia.com/gpu: 1 nvidia.com/gpu: 1
@@ -70,3 +85,39 @@
hosts: hosts:
- localai.eom.dev - 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