Compare commits

...
4 Commits
2 changed files with 164 additions and 35 deletions

No files matched your search

+45 -8
View File
@@ -314,7 +314,7 @@
block: |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; LLMs: GUIs ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; zero (default=true)
; zeroclaw (default=true)
; Install and enable the Zeroclaw web daemon, a minimalistic interface
; for many models and providers with negligible resource usage. Also
; installs the CLI tool zerocode as an alternative to the web GUI.
@@ -324,7 +324,7 @@
; Install and enable open-webui as a Docker container. Very polished web
; frontend for ollama and also handles other web LLMs through API calls.
; Container is over 1GB in size and consumes substantial resources!
; URL: http://localhost:1337
; URL: http://localhost:3000
;
; open_webui_port (default=3000)
; Port on which to run the open-webui Docker instance.
@@ -343,6 +343,33 @@
; Install and enable qwen-code as a daemon.
; URL: http://127.0.0.1:4170
;
; qwen_code_key (default='')
; API key for accessing the web GUI. Optional, not used if left blank.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
state: present
create: true
backup: true
mode: "0644"
- name: General | Account Management | Provisioning Configuration | Workstation | Create | LLMs | GUIs
ansible.builtin.blockinfile:
path: "{{ wrk_file }}"
marker: '; {mark} MANAGED BY ANSIBLE | Workstation Config | LLMs | GUIs'
block: |
;;;;;;;;;;;;;;;;;;;;;;;;; LLMs: MCPs / Sandboxes ;;;;;;;;;;;;;;;;;;;;;;;;;
;
; open_terminal (default=false)
; Docker container to be used with GUIs like open-webui so that agents
; have somewhere safe to execute commands. Also allows file read/writes.
; URL: http://127.0.0.1:8000
;
; open_terminal_port (default=8000)
; Port on which to run the open-terminal Docker instance.
;
; open_terminal_key (default=open-terminal-key)
; API key, needed in order to access the server. Required.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
state: present
create: true
@@ -392,15 +419,21 @@
mobile: "{{ lookup('ini', 'mobile file={{wrk_file}} default=false') | bool }}"
redmode: "{{ lookup('ini', 'redmode file={{wrk_file}} default=true' ) | bool }}"
# LLMs
ollama_enabled: "{{ lookup('ini', 'ollama file={{wrk_file}} default=true' ) | bool }}"
manage_models: "{{ lookup('ini', 'manage_models file={{wrk_file}} default=true' ) | bool }}"
zeroclaw_enabled: "{{ lookup('ini', 'zero file={{wrk_file}} default=true ') | bool }}"
ollama_enabled: "{{ lookup('ini', 'ollama file={{wrk_file}} default=true' ) | bool }}"
manage_models: "{{ lookup('ini', 'manage_models file={{wrk_file}} default=true' ) | bool }}"
hf_token: "{{ lookup('ini', 'hf_token file={{wrk_file}} default=false') }}"
# LLM GUIs
zeroclaw_enabled: "{{ lookup('ini', 'zeroclaw file={{wrk_file}} default=true ') | bool }}"
open_webui_enabled: "{{ lookup('ini', 'open_webui file={{wrk_file}} default=false') | bool }}"
open_webui_port: "{{ lookup('ini', 'open_webui_port file={{wrk_file}} default=1337' ) | int }}"
open_webui_port: "{{ lookup('ini', 'open_webui_port file={{wrk_file}} default=3000' ) | int }}"
open_webui_key: "{{ lookup('ini', 'open_webui_key file={{wrk_file}} default=PleaseEnsureTheKeyIsAtLeast32To64Characters') }}"
hf_token: "{{ lookup('ini', 'hf_token file={{wrk_file}} default=false') }}"
codium_config: "{{ lookup('ini', 'codium_config file={{wrk_file}} default=true' ) | bool }}"
qwen_code_enabled: "{{ lookup('ini', 'qwen_code file={{wrk_file}} default=true' ) | bool }}"
qwen_code_key : "{{ lookup('ini', 'qwen_code_key file={{wrk_file}} default=false') }}"
# LLM MCPs
open_terminal_enabled: "{{ lookup('ini', 'open_terminal file={{wrk_file}} default=false') | bool }}"
open_terminal_port: "{{ lookup('ini', 'open_terminal_port file={{wrk_file}} default=8000' ) | int }}"
open_terminal_key: "{{ lookup('ini', 'open_terminal_key file={{wrk_file}} default=false') }}"
- name: General | Account Management | Provisioning Configuration | Workstation | Boolean Check | Editing
ansible.builtin.set_fact:
@@ -423,13 +456,17 @@
- { 'redmode': "{{ redmode }}" }
- { 'ollama_enabled': "{{ ollama_enabled }}" }
- { 'manage_models': "{{ manage_models }}" }
- { 'hf_token': "{{ hf_token }}" }
- { 'zeroclaw_enabled': "{{ zeroclaw_enabled }}" }
- { 'open_webui_enabled': "{{ open_webui_enabled }}" }
- { 'open_webui_port': "{{ open_webui_port }}" }
- { 'open_webui_key': "{{ open_webui_key }}" }
- { 'hf_token': "{{ hf_token }}" }
- { 'codium_config': "{{ codium_config }}" }
- { 'qwen_code_enabled': "{{ qwen_code_enabled }}" }
- { 'qwen_code_key': "{{ qwen_code_key }}" }
- { 'open_terminal_enabled': "{{ open_terminal_enabled }}" }
- { 'open_terminal_port': "{{ open_terminal_port }}" }
- { 'open_terminal_key': "{{ open_terminal_key }}" }
# No longer mining, this is now considered deprecated.
### Miner ##
+119 -27
View File
@@ -45,6 +45,10 @@
- open_webui_key
- codium_config
- qwen_code_enabled
- qwen_code_key
- open_terminal_enabled
- open_terminal_port
- open_terminal_key
- name: Workstation | Linux | Software | LLMs | Facts 01
ansible.builtin.set_fact:
@@ -214,6 +218,28 @@
- "{{ qwen_code }}"
state: present
- name: Workstation | Linux | Software | LLMs | Docker
ansible.builtin.package:
name:
- docker
state: present
- name: Workstation | Linux | Software | LLMs | Docker | runit
ansible.builtin.package:
name:
- docker-runit
state: present
when: ansible_pkg_mgr == "pacman"
- name: Workstation | Linux | Software | LLMs | Docker | Group
ansible.builtin.user:
name: "{{ item }}"
groups: docker
append: true
loop:
- root
- "{{ user }}"
- name: Workstation | Linux | Software | LLMs | runit
block:
@@ -256,7 +282,7 @@
export OLLAMA_REQUEST_TIMEOUT=3600 # default 300 (unconfirmed, not in the list of --help vars)
### Resource Usage ###
export OLLAMA_KEEP_ALIVE=2h # default is 5m
export OLLAMA_KEEP_ALIVE=20m # default is 5m
export OLLAMA_MAX_LOADED_MODELS={{ llm_concurrency }} # default is 3 if using CPUs, or 3 * NumGPUs
export OLLAMA_NUM_PARALLEL={{ llm_parallel }} # default is 1 and applies per-model (unconfirmed)
export OLLAMA_CONTEXT_LENGTH={{ llm_context }} # default is 4096, https://docs.ollama.com/faq#how-can-i-specify-the-context-window-size
@@ -372,31 +398,6 @@
# Open WebUI - Start #
- name: Workstation | Linux | Software | LLMs | runit | open-webui | Packages
ansible.builtin.package:
name:
- docker
state: present
when: open_webui_enabled
- name: Workstation | Linux | Software | LLMs | runit | open-webui | Docker Group
ansible.builtin.user:
name: "{{ item }}"
groups: docker
append: true
loop:
- root
- "{{ user }}"
when: open_webui_enabled
- name: Workstation | Linux | Software | LLMs | runit | open-webui | Packages | init
ansible.builtin.package:
name:
- docker-runit
state: present
when: open_webui_enabled
and ansible_pkg_mgr == "pacman"
- name: Workstation | Linux | Software | LLMs | runit | open-webui | Dir | /etc/sv
ansible.builtin.file:
name: "/etc/sv/open-webui/log"
@@ -446,7 +447,6 @@
{{ ("-e HF_TOKEN=" ~ hf_token) if hf_token else '' }} \
-e WEBUI_SECRET_KEY={{ open_webui_key }} \
-v open-webui:/app/backend/data \
-v {{ user_user.home }}/Code:{{ user_user.home }}/Code \
ghcr.io/open-webui/open-webui:main
# Unsure why this was not working on Artix with runit.
@@ -501,6 +501,96 @@
# Open WebUI - End #
# Open Terminal - Start #
- name: Workstation | Linux | Software | LLMs | runit | open-terminal | Dir | /etc/sv
ansible.builtin.file:
name: "/etc/sv/open-terminal/log"
state: directory
owner: root
mode: "0755"
- name: Workstation | Linux | Software | LLMs | runit | open-terminal | Dir | /var/log
ansible.builtin.file:
name: "/var/log/open-terminal"
state: directory
owner: "{{ user }}"
mode: "0755"
- name: Workstation | Linux | Software | LLMs | runit | open-terminal | Script | Run
ansible.builtin.copy:
dest: /etc/sv/open-terminal/run
content: |
#!/bin/sh
exec 2>&1
# Wait for Docker to start up.
while [ ! -S /var/run/docker.sock ]; do sleep 1; done
# Ensure the old container is gone.
echo "RUN: Stopping..."
docker stop open-terminal &&
echo "RUN: Container stopped" ||
echo "RUN: Container already stopped."
echo "RUN: Deleting..."
docker rm -f open-terminal &&
echo "RUN: Container deleted" ||
echo "RUN: Container already deleted."
# Start the open-terminal program.
set -e
exec docker run \
--pull=always \
--name open-terminal \
--network=host -p {{ open_terminal_port }}:8000 \
-v open-terminal:/home/user \
-v {{ user_user.home }}/Code:/home/user/Code \
-e OPEN_TERMINAL_API_KEY={{ open_terminal_key }} \
ghcr.io/open-webui/open-terminal
mode: "0755"
- name: Workstation | Linux | Software | LLMs | runit | open-terminal | Script | Finish
ansible.builtin.copy:
dest: /etc/sv/open-terminal/finish
content: |
{{ runit_finish_sleep }}
echo "FINISH: Stopping..."
docker stop open-terminal &&
echo "FINISH: Container stopped" ||
echo "FINISH: Container already stopped."
echo "FINISH: Deleting..."
docker rm -f open-terminal &&
echo "FINISH: Container deleted" ||
echo "FINISH: Container already deleted."
echo "FINISH: Done!"
mode: "0755"
- name: Workstation | Linux | Software | LLMs | runit | open-terminal | Script | Log
ansible.builtin.copy:
dest: /etc/sv/open-terminal/log/run
content: |
#!/bin/sh -e
exec svlogd -tt /var/log/open-terminal
mode: "0755"
- name: Workstation | Linux | Software | LLMs | runit | open-terminal | Script | Log Config
ansible.builtin.copy:
dest: /var/log/open-terminal/config
content: |
s1000000 # rotate at 1 MB
n5 # keep 5 old files
dateformat %Y-%m-%d_%H-%M-%S # each run gets its own file.
mode: "0755"
# Open Terminal - End #
# Swap Stopper - Start #
- name: Workstation | Linux | Software | LLMs | runit | swap-stopper | Script | Executable
@@ -624,6 +714,7 @@
- { 'name': "{{ zeroclaw }}" , 'status': "{{ zeroclaw_enabled }}" }
- { 'name': 'docker' , 'status': true }
- { 'name': 'open-webui' , 'status': "{{ open_webui_enabled }}" }
- { 'name': 'open-terminal' , 'status': "{{ open_terminal_enabled }}" }
- { 'name': 'swap-stopper' , 'status': true }
- { 'name': '{{ qwen_code }}', 'status': "{{ qwen_code_enabled }}" }
@@ -651,6 +742,7 @@
loop:
- "{{ 'http://127.0.0.1:42617/health' if zeroclaw_enabled else dummy_website }}"
- "{{ 'http://127.0.0.1:' ~ open_webui_port ~ '/health' if open_webui_enabled else dummy_website }}"
- "{{ 'http://127.0.0.1:' ~ open_terminal_port ~ '/health' if open_terminal_enabled else dummy_website }}"
- "{{ 'http://127.0.0.1:4170' if qwen_code_enabled else dummy_website }}"
ignore_errors: true