zeroclaw, automate which laptop gets which llm based on system specs, add providers automatically to config.toml, add some root levels defaults including a parameter which hopefully help with timeouts.

This commit is contained in:
me
2026-10-07 10:46:00 -07:00
parent 4cd86fc47f
commit 80a809545c
+143 -40
View File
@@ -24,44 +24,123 @@
- name: Workstation | Linux | Software | ZeroClaw | Facts 01 - name: Workstation | Linux | Software | ZeroClaw | Facts 01
ansible.builtin.set_fact: ansible.builtin.set_fact:
zeroclaw: zeroclaw
ollama: ollama ollama: ollama
llm_installs: zeroclaw: zeroclaw
##### QWEN #####
### 3.5, the recommended latest model of QWEN.
- qwen3.5:0.8b
- qwen3.5:2b
- qwen3.5:4b
#- qwen3.5:9b
#- qwen3.5:27b
#- qwen3.5:35b
### 3.0 Coder
#- qwen3-coder:30b
### 2.5 Coder, 7b recommended for code tasks vs QWEN 3.5 4b.
- qwen2.5-coder:0.5b
- qwen2.5-coder:1.5b
- qwen2.5-coder:3b
- qwen2.5-coder:7b
#- qwen2.5-coder:14b
#- qwen2.5-coder:32b
### 2.5, does not have "thinking" as an attribute, tempting!
#- qwen2.5:0.5b
#- qwen2.5:1.5b
#- qwen2.5:3b
#- qwen2.5:7b
#- qwen2.5:14b
#- qwen2.5:32b
### Others, TBD
#- deepseek-r1:1.5b
#- deepseek-r1:7b
#- mistal:7b
#- ministral:3b
#- ministral:8b
#- mistal:7b
#- glm4-flash
llm_removals:
- qwen3:4b # QWEN3 is the most similar to Ask Brave.
zerocode: zerocode zerocode: zerocode
llm_installs: []
llm_removals:
# QWEN3 is the most similar to Ask Brave.
- { "model": "qwen3:4b", "provider": "qwen_30_040" }
llm_micro:
- { "model": "qwen3.5:0.8b", "provider": "qwen_35_008" }
- { "model": "qwen2.5-coder:0.5b", "provider": "qwen_25_coder_005" }
llm_small:
- { "model": "qwen3.5:2b", "provider": "qwen_35_020" }
- { "model": "qwen2.5-coder:1.5b", "provider": "qwen_25_coder_015" }
- { "model": "qwen2.5-coder:3b", "provider": "qwen_25_coder_030" }
llm_medium:
- { "model": "qwen3.5:4b", "provider": "qwen_35_040" }
- { "model": "qwen2.5-coder:7b", "provider": "qwen_25_coder_070" }
llm_large:
- { "model": "qwen3.5:9b", "provider": "qwen_35_090" }
- { "model": "qwen2.5-coder:14b", "provider": "qwen_25_coder_140" }
llm_huge:
- { "model": "qwen3.5:27b", "provider": "qwen_35_270" }
- { "model": "qwen3.5:35b", "provider": "qwen_35_350" }
- { "model": "qwen3-coder:30b", "provider": "qwen_30_coder_300" }
- { "model": "qwen2.5-coder:32b", "provider": "qwen_25_coder_320" }
llm_giant:
- { "model": "qwen3.5:27b", "provider": "qwen_35_270" }
- { "model": "qwen3.5:35b", "provider": "qwen_35_350" }
##### Others #####
### 2.5, does not have "thinking" as an attribute, tempting!
#- qwen2.5:0.5b
#- qwen2.5:1.5b
#- qwen2.5:3b
#- qwen2.5:7b
#- qwen2.5:14b
#- qwen2.5:32b
### TBD
#- deepseek-r1:1.5b
#- deepseek-r1:7b
#- mistal:7b
#- ministral:3b
#- ministral:8b
#- mistal:7b
#- glm4-flash
- name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | Micro
ansible.builtin.set_fact:
llm_installs: "{{ llm_installs + llm_micro }}"
when: ansible_processor_vcpus >= 1
and ansible_memtotal_mb >= 2000
- name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | Micro | Uninstall
ansible.builtin.set_fact:
llm_installs: "{{ llm_removals + llm_micro }}"
when: ansible_processor_vcpus < 1
or ansible_memtotal_mb < 2000
- name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | Small
ansible.builtin.set_fact:
llm_installs: "{{ llm_installs + llm_small }}"
when: ansible_processor_vcpus >= 2
and ansible_memtotal_mb >= 4000
- name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | Small | Uninstall
ansible.builtin.set_fact:
llm_installs: "{{ llm_removals + llm_small }}"
when: ansible_processor_vcpus < 2
or ansible_memtotal_mb < 4000
- name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | Medium
ansible.builtin.set_fact:
llm_installs: "{{ llm_installs + llm_medium }}"
when: ansible_processor_vcpus >= 4
and ansible_memtotal_mb >= 8000
- name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | Medium | Uninstalls
ansible.builtin.set_fact:
llm_installs: "{{ llm_removals + llm_medium }}"
when: ansible_processor_vcpus < 4
or ansible_memtotal_mb < 8000
- name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | Large
ansible.builtin.set_fact:
llm_installs: "{{ llm_installs + llm_large }}"
when: ansible_processor_vcpus >= 8
and ansible_memtotal_mb >= 16000
- name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | Large | Uninstalls
ansible.builtin.set_fact:
llm_installs: "{{ llm_removals + llm_large }}"
when: ansible_processor_vcpus < 8
and ansible_memtotal_mb < 16000
- name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | Huge
ansible.builtin.set_fact:
llm_installs: "{{ llm_installs + llm_huge }}"
when: ansible_processor_vcpus >= 12
and ansible_memtotal_mb >= 32000
- name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | Huge | Uninstalls
ansible.builtin.set_fact:
llm_installs: "{{ llm_removals + llm_huge }}"
when: ansible_processor_vcpus < 12
and ansible_memtotal_mb < 32000
- name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | Giant
ansible.builtin.set_fact:
llm_installs: "{{ llm_installs + llm_huge }}"
when: ansible_processor_vcpus >= 18
and ansible_memtotal_mb >= 64000
- name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | Giant | Uninstalls
ansible.builtin.set_fact:
llm_installs: "{{ llm_removals + llm_huge }}"
when: ansible_processor_vcpus < 18
and ansible_memtotal_mb < 64000
- name: Workstation | Linux | Software | ZeroClaw | Facts 02 - name: Workstation | Linux | Software | ZeroClaw | Facts 02
ansible.builtin.set_fact: ansible.builtin.set_fact:
@@ -218,10 +297,10 @@
- http://127.0.0.1:11434/ - http://127.0.0.1:11434/
- http://127.0.0.1:42617/health - http://127.0.0.1:42617/health
- name: Workstation | Linux | Software | ZeroClaw | ollama | Models | Install - name: Workstation | Linux | Software | ZeroClaw | Models | ollama | Install
ansible.builtin.shell: | ansible.builtin.shell: |
set -o pipefail set -o pipefail
item='{{ item }}' item='{{ item.model }}'
if ollama list | grep -q $item; then if ollama list | grep -q $item; then
echo "OKAY" && echo "OKAY" &&
return return
@@ -237,11 +316,12 @@
failed_when: "'FAILED' in shell_check.stdout" failed_when: "'FAILED' in shell_check.stdout"
become: true become: true
become_user: "{{ user }}" become_user: "{{ user }}"
when: llm_installs | length > 0
- name: Workstation | Linux | Software | ZeroClaw | ollama | Models | Remove - name: Workstation | Linux | Software | ZeroClaw | Models | ollama | Remove
ansible.builtin.shell: | ansible.builtin.shell: |
set -o pipefail set -o pipefail
item='{{ item }}' item='{{ item.model }}'
if ollama list | grep -q $item; then if ollama list | grep -q $item; then
ollama rm $item && ollama rm $item &&
echo "INSTALLED" && echo "INSTALLED" &&
@@ -257,5 +337,28 @@
failed_when: "'FAILED' in shell_check.stdout" failed_when: "'FAILED' in shell_check.stdout"
become: true become: true
become_user: "{{ user }}" become_user: "{{ user }}"
when: llm_removals | length > 0
- name: Workstation | Linux | Software | ZeroClaw | Models | zeroclaw | Defaults
ansible.builtin.blockinfile:
path: "{{ user_user.home }}/.zeroclaw/config.toml"
marker: "# {mark} ANSIBLE MANAGED BLOCK | zeroclaw | Defaults"
insertbefore: BOF
block: |
default_provider = "ollama"
default_model = "qwen3.5:4b"
provider_timeout_secs = 3600
# Cheat Sheet: https://docs.zeroclaw.com/master/en/providers/configuration.html
- name: Workstation | Linux | Software | ZeroClaw | Models | zeroclaw | Add Providers
ansible.builtin.blockinfile:
path: "{{ user_user.home }}/.zeroclaw/config.toml"
marker: "# {mark} ANSIBLE MANAGED BLOCK | zeroclaw | Providers"
block: |
{% for llm in llm_installs %}
[providers.models.ollama.ansible_{{ llm.provider }}]
model = "{{ llm.model }}"
timeout_secs = 3600 # 1 hour, default is 120 (2 minutes), issue happens between 5 and 6 minutes though.
{% endfor %}
when: ansible_pkg_mgr == "pacman" when: ansible_pkg_mgr == "pacman"