diff --git a/tasks/workstation/linux/software/zeroclaw.yml b/tasks/workstation/linux/software/zeroclaw.yml index a2bf30b..82e58dc 100644 --- a/tasks/workstation/linux/software/zeroclaw.yml +++ b/tasks/workstation/linux/software/zeroclaw.yml @@ -24,44 +24,123 @@ - name: Workstation | Linux | Software | ZeroClaw | Facts 01 ansible.builtin.set_fact: - zeroclaw: zeroclaw ollama: ollama - llm_installs: - ##### 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. + zeroclaw: zeroclaw 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 ansible.builtin.set_fact: @@ -218,10 +297,10 @@ - http://127.0.0.1:11434/ - 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: | set -o pipefail - item='{{ item }}' + item='{{ item.model }}' if ollama list | grep -q $item; then echo "OKAY" && return @@ -237,11 +316,12 @@ failed_when: "'FAILED' in shell_check.stdout" become: true 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: | set -o pipefail - item='{{ item }}' + item='{{ item.model }}' if ollama list | grep -q $item; then ollama rm $item && echo "INSTALLED" && @@ -257,5 +337,28 @@ failed_when: "'FAILED' in shell_check.stdout" become: true 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"