diff --git a/tasks/workstation/linux/software/zeroclaw.yml b/tasks/workstation/linux/software/zeroclaw.yml index 93949c0..c47216e 100644 --- a/tasks/workstation/linux/software/zeroclaw.yml +++ b/tasks/workstation/linux/software/zeroclaw.yml @@ -32,69 +32,81 @@ zerocode: zerocode llm_concurrency: "{{ ansible_processor_vcpus / 4 | round(0, method='ceil') | int }}" llm_installs: [] - llm_micro_cpu: 1 - llm_micro_ram: 2000 - llm_micro: + llm_tier0_cpu: 1 + llm_tier0_ram: 2000 + llm_tier0: - { "model": "qwen3.5:0.8b", "provider": "qwen_35_0008" } - { "model": "qwen2.5-coder:0.5b", "provider": "qwen_25_coder_0005" } - { "model": "qwen2.5-coder:1.5b", "provider": "qwen_25_coder_0015" } - llm_small_cpu: 2 - llm_small_ram: 4000 - llm_small: + llm_tier1_cpu: 2 + llm_tier1_ram: 4000 + llm_tier1: - { "model": "qwen3.5:2b", "provider": "qwen_35_0020" } - { "model": "qwen2.5-coder:3b", "provider": "qwen_25_coder_0030" } - llm_medium_cpu: 4 - llm_medium_ram: 8000 - llm_medium: + llm_tier2_cpu: 3 + llm_tier2_ram: 6000 + llm_tier2: - { "model": "qwen3.5:4b", "provider": "qwen_35_0040" } - { "model": "qwen2.5-coder:7b", "provider": "qwen_25_coder_0070" } - llm_large_cpu: 8 - llm_large_ram: 16000 - llm_large: + llm_tier3_cpu: 4 + llm_tier3_ram: 8000 + llm_tier3: - { "model": "qwen3.5:9b", "provider": "qwen_35_0090" } - { "model": "qwen2.5-coder:14b", "provider": "qwen_25_coder_0140" } - llm_huge_cpu: 12 - llm_huge_ram: 32000 - llm_huge: + llm_tier4_cpu: 6 + llm_tier4_ram: 12000 + llm_tier4: + llm_tier5_cpu: 8 + llm_tier5_ram: 16000 + llm_tier5: + llm_tier6_cpu: 10 + llm_tier6_ram: 30000 + llm_tier6: + #- { "model": "qwen3.8:27b", "provider": "qwen_38_0270" } + #- { "model": "qwen3.6:35b", "provider": "qwen_36_0350" } - { "model": "qwen3.5:35b", "provider": "qwen_35_0350" } - { "model": "qwen3-coder:30b", "provider": "qwen_30_coder_0300" } - { "model": "qwen2.5-coder:32b", "provider": "qwen_25_coder_0320" } - llm_giant_cpu: 18 - llm_giant_ram: 64000 - llm_giant: + llm_tier7_cpu: 12 + llm_tier7_ram: 64000 + llm_tier7: + llm_tier8_cpu: 32 + llm_tier8_ram: 320000 + llm_tier8: - { "model": "qwen3.5:122b", "provider": "qwen_35_1220" } - llm_removals: - # Micro # - # Small # - - { "model": "qwen3:4b", "provider": "qwen_30_0040" } # QWEN3 is the most similar to Ask Brave. - # Medium # - # Large # - # Huge # - - { "model": "qwen3.5:27b", "provider": "qwen_35_0270" } - # Giant # - # MEGA # + llm_tier9_cpu: 64 + llm_tier9_ram: 999000 + llm_tier9: - { "model": "qwen3-coder:420b", "provider": "qwen_30_coder_4200" } + llm_removals: + # tier0 # + # tier1 # + - { "model": "qwen3:4b", "provider": "qwen_30_0040" } + # tier2 # + # tier3 # + # tier4 # + - { "model": "qwen3.6:27b", "provider": "qwen_36_0270" } + - { "model": "qwen3.5:27b", "provider": "qwen_35_0270" } + # tier5 # + # tier9 # ##### TBD ##### - #- qwen3.8:27b - #- qwen3.6:27b - #- qwen3.6:35b ### 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 - #- qwen2.5:72b + #- qwen2.5:0.5b + #- qwen2.5:1.5b + #- qwen2.5:3b + #- qwen2.5:7b + #- qwen2.5:14b + #- qwen2.5:32b + #- qwen2.5:72b ### Others - #- deepseek-r1:1.5b - #- deepseek-r1:7b - #- mistral:7b - #- ministral-3:3b - #- ministral-3:8b - #- ministral-3:14b - #- glm4-flash + #- deepseek-r1:1.5b + #- deepseek-r1:7b + #- mistral:7b + #- ministral-3:3b + #- ministral-3:8b + #- ministral-3:14b + #- glm4-flash - name: Workstation | Linux | Software | ZeroClaw | Facts 02 ansible.builtin.set_fact: @@ -117,77 +129,125 @@ ollama_runit_log_script: "{{ ollama_runit_log_dir }}/{{ runit_log_script }}" zeroclaw_runit_log_script: "{{ zeroclaw_runit_log_dir }}/{{ runit_log_script }}" - - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | Micro + - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | tier0 ansible.builtin.set_fact: - llm_installs: "{{ llm_installs + llm_micro }}" - when: ansible_processor_vcpus >= llm_micro_cpu - and ansible_memtotal_mb >= llm_micro_ram + llm_installs: "{{ llm_installs + llm_tier0 }}" + when: ansible_processor_vcpus >= llm_tier0_cpu + and ansible_memtotal_mb >= llm_tier0_ram - - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | Micro | Uninstall + - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | tier0 | Uninstall ansible.builtin.set_fact: - llm_removals: "{{ llm_removals + llm_micro }}" - when: ansible_processor_vcpus < llm_micro_cpu - or ansible_memtotal_mb < llm_micro_ram + llm_removals: "{{ llm_removals + llm_tier0 }}" + when: ansible_processor_vcpus < llm_tier0_cpu + or ansible_memtotal_mb < llm_tier0_ram - - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | Small + - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | tier1 ansible.builtin.set_fact: - llm_installs: "{{ llm_installs + llm_small }}" - when: ansible_processor_vcpus >= llm_small_cpu - and ansible_memtotal_mb >= llm_small_ram + llm_installs: "{{ llm_installs + llm_tier1 }}" + when: ansible_processor_vcpus >= llm_tier1_cpu + and ansible_memtotal_mb >= llm_tier1_ram - - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | Small | Uninstall + - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | tier1 | Uninstall ansible.builtin.set_fact: - llm_removals: "{{ llm_removals + llm_small }}" - when: ansible_processor_vcpus < llm_small_cpu - or ansible_memtotal_mb < llm_small_ram + llm_removals: "{{ llm_removals + llm_tier1 }}" + when: ansible_processor_vcpus < llm_tier1_cpu + or ansible_memtotal_mb < llm_tier1_ram - - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | Medium + - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | tier2 ansible.builtin.set_fact: - llm_installs: "{{ llm_installs + llm_medium }}" - when: ansible_processor_vcpus >= llm_medium_cpu - and ansible_memtotal_mb >= llm_medium_ram + llm_installs: "{{ llm_installs + llm_tier2 }}" + when: ansible_processor_vcpus >= llm_tier2_cpu + and ansible_memtotal_mb >= llm_tier2_ram - - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | Medium | Uninstalls + - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | tier2 | Uninstalls ansible.builtin.set_fact: - llm_removals: "{{ llm_removals + llm_medium }}" - when: ansible_processor_vcpus < llm_medium_cpu - or ansible_memtotal_mb < llm_medium_ram + llm_removals: "{{ llm_removals + llm_tier2 }}" + when: ansible_processor_vcpus < llm_tier2_cpu + or ansible_memtotal_mb < llm_tier2_ram - - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | Large + - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | tier3 ansible.builtin.set_fact: - llm_installs: "{{ llm_installs + llm_large }}" - when: ansible_processor_vcpus >= llm_large_cpu - and ansible_memtotal_mb >= llm_large_ram + llm_installs: "{{ llm_installs + llm_tier3 }}" + when: ansible_processor_vcpus >= llm_tier3_cpu + and ansible_memtotal_mb >= llm_tier3_ram - - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | Large | Uninstalls + - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | tier3 | Uninstalls ansible.builtin.set_fact: - llm_removals: "{{ llm_removals + llm_large }}" - when: ansible_processor_vcpus < llm_large_cpu - or ansible_memtotal_mb < llm_large_ram + llm_removals: "{{ llm_removals + llm_tier3 }}" + when: ansible_processor_vcpus < llm_tier3_cpu + or ansible_memtotal_mb < llm_tier3_ram - - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | Huge + - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | tier4 ansible.builtin.set_fact: - llm_installs: "{{ llm_installs + llm_huge }}" - when: ansible_processor_vcpus >= llm_huge_cpu - and ansible_memtotal_mb >= llm_huge_ram + llm_installs: "{{ llm_installs + llm_tier4 }}" + when: ansible_processor_vcpus >= llm_tier4_cpu + and ansible_memtotal_mb >= llm_tier4_ram - - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | Huge | Uninstalls + - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | tier4 | Uninstalls ansible.builtin.set_fact: - llm_removals: "{{ llm_removals + llm_huge }}" - when: ansible_processor_vcpus < llm_huge_cpu - or ansible_memtotal_mb < llm_huge_ram + llm_removals: "{{ llm_removals + llm_tier4 }}" + when: ansible_processor_vcpus < llm_tier4_cpu + or ansible_memtotal_mb < llm_tier4_ram - - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | Giant + - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | tier5 ansible.builtin.set_fact: - llm_installs: "{{ llm_installs + llm_giant }}" - when: ansible_processor_vcpus >= llm_giant_cpu - and ansible_memtotal_mb >= llm_giant_ram + llm_installs: "{{ llm_installs + llm_tier5 }}" + when: ansible_processor_vcpus >= llm_tier5_cpu + and ansible_memtotal_mb >= llm_tier5_ram - - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | Giant | Uninstalls + - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | tier5 | Uninstalls ansible.builtin.set_fact: - llm_removals: "{{ llm_removals + llm_giant }}" - when: ansible_processor_vcpus < llm_giant_cpu - or ansible_memtotal_mb < llm_giant_ram + llm_removals: "{{ llm_removals + llm_tier5 }}" + when: ansible_processor_vcpus < llm_tier5_cpu + or ansible_memtotal_mb < llm_tier5_ram + + - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | tier6 + ansible.builtin.set_fact: + llm_installs: "{{ llm_installs + llm_tier6 }}" + when: ansible_processor_vcpus >= llm_tier6_cpu + and ansible_memtotal_mb >= llm_tier6_ram + + - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | tier6 | Uninstalls + ansible.builtin.set_fact: + llm_removals: "{{ llm_removals + llm_tier6 }}" + when: ansible_processor_vcpus < llm_tier6_cpu + or ansible_memtotal_mb < llm_tier6_ram + + - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | tier7 + ansible.builtin.set_fact: + llm_installs: "{{ llm_installs + llm_tier7 }}" + when: ansible_processor_vcpus >= llm_tier7_cpu + and ansible_memtotal_mb >= llm_tier7_ram + + - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | tier7 | Uninstalls + ansible.builtin.set_fact: + llm_removals: "{{ llm_removals + llm_tier7 }}" + when: ansible_processor_vcpus < llm_tier7_cpu + or ansible_memtotal_mb < llm_tier7_ram + + - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | tier8 + ansible.builtin.set_fact: + llm_installs: "{{ llm_installs + llm_tier8 }}" + when: ansible_processor_vcpus >= llm_tier8_cpu + and ansible_memtotal_mb >= llm_tier8_ram + + - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | tier8 | Uninstalls + ansible.builtin.set_fact: + llm_removals: "{{ llm_removals + llm_tier8 }}" + when: ansible_processor_vcpus < llm_tier8_cpu + or ansible_memtotal_mb < llm_tier8_ram + + - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | tier9 + ansible.builtin.set_fact: + llm_installs: "{{ llm_installs + llm_tier9 }}" + when: ansible_processor_vcpus >= llm_tier9_cpu + and ansible_memtotal_mb >= llm_tier9_ram + + - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | tier9 | Uninstalls + ansible.builtin.set_fact: + llm_removals: "{{ llm_removals + llm_tier9 }}" + when: ansible_processor_vcpus < llm_tier9_cpu + or ansible_memtotal_mb < llm_tier9_ram - name: Workstation | Linux | Software | ZeroClaw | Facts | Merge | Print ansible.builtin.debug: @@ -238,7 +298,7 @@ # Allow pulling LLMs for use with ZeroClaw. exec 2>&1 export HOME={{ user_user.home }} - export OLLAMA_KEEP_ALIVE=1h # default 5m + export OLLAMA_KEEP_ALIVE=20m # default 5m export OLLAMA_REQUEST_TIMEOUT=3600 # default 300 (unconfirmed, not in the list of --help vars) export OLLAMA_LOAD_TIMEOUT=30m # default is 5m export OLLAMA_MAX_LOADED_MODELS={{ llm_concurrency }} # default is 3 if using CPUs, or 3 * NumGPUs @@ -292,6 +352,8 @@ #!/bin/sh -e # Allow using the ZeroClaw frontend. exec 2>&1 + export HOME={{ user_user.home }} + export SHELL={{ bash_exec.stdout }} exec chpst -u {{ user }} zeroclaw daemon -v --log-level info dest: "{{ zeroclaw_runit_script }}" mode: "0755" @@ -420,7 +482,7 @@ insertafter: EOF block: | {% for llm in llm_installs %} - [providers.models.ollama.ansible_{{ llm.provider }}] + [providers.models.ollama.{{ llm.provider }}] model = "{{ llm.model }}" timeout_secs = 3600 # 1 hour, default is 120 (2 minutes), issue happens between 5 and 6 minutes though. context_window = 999999999