Compare commits
4
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9f82c136e9 | ||
|
|
89fdb52fcc | ||
|
|
98c6d47d7f | ||
|
|
8a2a723d4b |
No files matched your search
@@ -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
|
||||
@@ -394,13 +421,19 @@
|
||||
# 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 }}"
|
||||
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_key: "{{ lookup('ini', 'open_webui_key file={{wrk_file}} default=PleaseEnsureTheKeyIsAtLeast32To64Characters') }}"
|
||||
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=3000' ) | int }}"
|
||||
open_webui_key: "{{ lookup('ini', 'open_webui_key file={{wrk_file}} default=PleaseEnsureTheKeyIsAtLeast32To64Characters') }}"
|
||||
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 ##
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in new issue
Block a user