Compare commits
33
Commits
f487461d94
...
b09e74c4b7
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b09e74c4b7 | ||
|
|
107afbece4 | ||
|
|
076f954abd | ||
|
|
648962e710 | ||
|
|
15370d639f | ||
|
|
eb3b16264e | ||
|
|
25346a95de | ||
|
|
d25f47bd72 | ||
|
|
9aa25f85cd | ||
|
|
b732402719 | ||
|
|
b3b2cb075f | ||
|
|
95542ec233 | ||
|
|
8abe634c42 | ||
|
|
5e0b5fb4d2 | ||
|
|
855cffc64d | ||
|
|
032239e430 | ||
|
|
57b56d82c4 | ||
|
|
bede2b84f3 | ||
|
|
4fbf7b41e4 | ||
|
|
ce1afc6624 | ||
|
|
b4fc988f97 | ||
|
|
9ab9f0095b | ||
|
|
9949014558 | ||
|
|
373b03d46c | ||
|
|
6117a65009 | ||
|
|
af82cd3319 | ||
|
|
bb1529e5b1 | ||
|
|
252d24b2a7 | ||
|
|
a997fd8efc | ||
|
|
88ec75a544 | ||
|
|
3d64b90d58 | ||
|
|
892af9a669 | ||
|
|
7661b85238 |
No files matched your search
@@ -23,6 +23,7 @@
|
||||
stress: stress
|
||||
jq: jq
|
||||
btop: btop
|
||||
xkb: x11-xkb-utils
|
||||
|
||||
- name: General | Facts | Package | Parrot OS Fixes
|
||||
ansible.builtin.set_fact:
|
||||
@@ -51,6 +52,7 @@
|
||||
encfs: encfs
|
||||
dig: bind
|
||||
base_devel: base-devel
|
||||
xkb: xorg-setxkbmap
|
||||
when: ansible_pkg_mgr == "pacman"
|
||||
|
||||
- name: General | Facts | Package | FreeBSD
|
||||
@@ -266,11 +268,14 @@
|
||||
;;
|
||||
esac
|
||||
update_npm: |
|
||||
if [[ `which npm` ]]; then
|
||||
echo "*** NPM ***" &&
|
||||
sudo npm update -g
|
||||
echo -e "\n"
|
||||
fi
|
||||
## Let's let the distro package managers handle this, otherwise may end up
|
||||
## breaking dependencies or causing other system weirdness. No thanks! :)
|
||||
# if [[ `which npm` ]]; then
|
||||
# echo "*** NPM ***" &&
|
||||
# sudo npm update -g
|
||||
# echo -e "\n"
|
||||
# fi
|
||||
echo "*** Skipping NPM ***"
|
||||
|
||||
# Flatpaks
|
||||
- name: General | Facts | Package | Update Command | Flatpak | Check
|
||||
|
||||
@@ -60,7 +60,8 @@
|
||||
strawberry: strawberry
|
||||
dict_en: hunspell-en_us
|
||||
dict_es: hunspell-es_any
|
||||
|
||||
xset: xorg-xset
|
||||
xlock: xss-lock
|
||||
|
||||
- name: Workstation | Facts | Package | apt (All Distros)
|
||||
ansible.builtin.set_fact:
|
||||
@@ -80,6 +81,7 @@
|
||||
ncurses: libncurses-dev
|
||||
android_udev: android-udev-rules
|
||||
vlc_plugins: libavcodec-extra
|
||||
xset: x11-server-utils
|
||||
when: ansible_pkg_mgr == "apt"
|
||||
|
||||
- name: Workstation | Facts | Package | Pop_OS!
|
||||
|
||||
+34
-25
@@ -27,28 +27,6 @@ font pango:monospace 8
|
||||
# text rendering and scalability on retina/hidpi displays (thanks to pango).
|
||||
#font pango:DejaVu Sans Mono 8
|
||||
|
||||
# Start XDG autostart .desktop files using dex. See also
|
||||
# https://wiki.archlinux.org/index.php/XDG_Autostart
|
||||
exec --no-startup-id dex --autostart --environment i3
|
||||
|
||||
# The combination of xss-lock, nm-applet and pactl is a popular choice, so
|
||||
# they are included here as an example. Modify as you see fit.
|
||||
|
||||
# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the
|
||||
# screen before suspend. Use loginctl lock-session to lock your screen.
|
||||
exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork
|
||||
|
||||
# NetworkManager is the most popular way to manage wireless networks on Linux,
|
||||
# and nm-applet is a desktop environment-independent system tray GUI for it.
|
||||
exec --no-startup-id nm-applet
|
||||
|
||||
# Use pactl to adjust volume in PulseAudio.
|
||||
set $refresh_i3status killall -SIGUSR1 i3status
|
||||
#bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
|
||||
#bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
|
||||
#bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
|
||||
#bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
|
||||
|
||||
# Use Mouse+$mod to drag floating windows to their wanted position
|
||||
floating_modifier $mod
|
||||
|
||||
@@ -331,9 +309,11 @@ bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcu
|
||||
bindsym $mod+Shift+q exec "i3-msg exit"
|
||||
|
||||
# lock
|
||||
bindsym $ctrl+$alt+l exec "i3lock -c 000000 -e -f && sleep 1 && xset dpms force off"
|
||||
bindsym $ctrl+$mod+l exec "i3lock -c 000000 -e -f && sleep 1 && xset dpms force off"
|
||||
bindsym $shift+$mod+l exec "i3lock -c 000000 -e -f && sleep 1 && xset dpms force off"
|
||||
#set $LOCK_CMD "i3lock -c 333333 -e -f && sleep 1 && xset dpms force off"
|
||||
set $LOCK_CMD "loginctl lock-session"
|
||||
bindsym $ctrl+$alt+l exec $LOCK_CMD
|
||||
bindsym $ctrl+$mod+l exec $LOCK_CMD
|
||||
bindsym $shift+$mod+l exec $LOCK_CMD
|
||||
|
||||
# shutdown entire system.
|
||||
#bindsym $ctrl+$shift+q exec dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
|
||||
@@ -433,3 +413,32 @@ exec_always --no-startup-id bash -c 'pkill -ef "bash `which battery_nag.sh`" >~/
|
||||
#exec_always --no-startup-id "killall redshift-gtk; redshift-gtk"
|
||||
#exec_always --no-startup-id "killall redshift; redshift -l 35.19540:-111.65720 -t 6500K:1100K"
|
||||
exec_always --no-startup-id "killall redshift; killall redshift-gtk; sleep 1; redshift -x; redshift-gtk -l 35.19540:-111.65720 -t 6500K:1100K"
|
||||
|
||||
# Allow locking the session.
|
||||
#set $AGENT pkttyagent
|
||||
set $AGENT lxqt-policykit-agent
|
||||
exec_always --no-startup-id "killall $AGENT; $AGENT"
|
||||
|
||||
# Start XDG autostart .desktop files using dex. See also
|
||||
# https://wiki.archlinux.org/index.php/XDG_Autostart
|
||||
exec --no-startup-id dex --autostart --environment i3
|
||||
|
||||
# The combination of xss-lock, nm-applet and pactl is a popular choice, so
|
||||
# they are included here as an example. Modify as you see fit.
|
||||
|
||||
# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the
|
||||
# screen before suspend. Use loginctl lock-session to lock your screen.
|
||||
#exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork
|
||||
#exec_always --no-startup-id xss-lock --transfer-sleep-lock -- i3lock -c 111111 -e -f --nofork
|
||||
exec_always --no-startup-id xss-lock --transfer-sleep-lock -- sh -c 'i3lock -c 111111 -e -f --nofork & sleep 1; xset dpms force off; wait'
|
||||
|
||||
# NetworkManager is the most popular way to manage wireless networks on Linux,
|
||||
# and nm-applet is a desktop environment-independent system tray GUI for it.
|
||||
exec --no-startup-id nm-applet
|
||||
|
||||
# Use pactl to adjust volume in PulseAudio.
|
||||
set $refresh_i3status killall -SIGUSR1 i3status
|
||||
#bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
|
||||
#bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
|
||||
#bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
|
||||
#bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
|
||||
@@ -63,8 +63,8 @@
|
||||
]
|
||||
},
|
||||
"access_grants": [],
|
||||
"is_active": true,
|
||||
"updated_at": 1792596704,
|
||||
"is_active": false,
|
||||
"updated_at": 1792896243,
|
||||
"created_at": 1792539937,
|
||||
"background_image_data": null
|
||||
},
|
||||
@@ -132,8 +132,8 @@
|
||||
]
|
||||
},
|
||||
"access_grants": [],
|
||||
"is_active": true,
|
||||
"updated_at": 1792596711,
|
||||
"is_active": false,
|
||||
"updated_at": 1792896243,
|
||||
"created_at": 1792539958,
|
||||
"background_image_data": null
|
||||
},
|
||||
@@ -201,8 +201,8 @@
|
||||
]
|
||||
},
|
||||
"access_grants": [],
|
||||
"is_active": true,
|
||||
"updated_at": 1792596722,
|
||||
"is_active": false,
|
||||
"updated_at": 1792896243,
|
||||
"created_at": 1792542461,
|
||||
"background_image_data": null
|
||||
},
|
||||
@@ -265,8 +265,8 @@
|
||||
]
|
||||
},
|
||||
"access_grants": [],
|
||||
"is_active": true,
|
||||
"updated_at": 1792596791,
|
||||
"is_active": false,
|
||||
"updated_at": 1792896243,
|
||||
"created_at": 1792542993,
|
||||
"background_image_data": null
|
||||
},
|
||||
@@ -329,8 +329,8 @@
|
||||
]
|
||||
},
|
||||
"access_grants": [],
|
||||
"is_active": true,
|
||||
"updated_at": 1792596783,
|
||||
"is_active": false,
|
||||
"updated_at": 1792896243,
|
||||
"created_at": 1792543028,
|
||||
"background_image_data": null
|
||||
},
|
||||
@@ -393,80 +393,11 @@
|
||||
]
|
||||
},
|
||||
"access_grants": [],
|
||||
"is_active": true,
|
||||
"updated_at": 1792596852,
|
||||
"is_active": false,
|
||||
"updated_at": 1792896243,
|
||||
"created_at": 1792573569,
|
||||
"background_image_data": null
|
||||
},
|
||||
{
|
||||
"version_id": "d5657244-5bd0-4858-bda5-24dd6c45128b",
|
||||
"id": "coder-moe",
|
||||
"user_id": "2e2e7554-11f1-4047-8ca4-b04070ccc704",
|
||||
"base_model_id": "qwen3.6:35b",
|
||||
"name": "Code-MoE [256k,23GB]",
|
||||
"params": {
|
||||
"custom_params": {},
|
||||
"num_ctx": 256000,
|
||||
"num_thread": 7,
|
||||
"system": "Please use the attached Knowledge Base files as your personality."
|
||||
},
|
||||
"meta": {
|
||||
"profile_image_url": "/static/favicon.png",
|
||||
"background_image_url": null,
|
||||
"description": null,
|
||||
"i18n": null,
|
||||
"capabilities": {
|
||||
"file_context": true,
|
||||
"vision": true,
|
||||
"file_upload": true,
|
||||
"web_search": true,
|
||||
"image_generation": true,
|
||||
"code_interpreter": true,
|
||||
"terminal": true,
|
||||
"citations": true,
|
||||
"status_updates": true,
|
||||
"usage": true,
|
||||
"memory": true,
|
||||
"builtin_tools": true
|
||||
},
|
||||
"knowledge": [
|
||||
{
|
||||
"id": "120fa5c0-7f02-4cf3-a136-07b92b042d48",
|
||||
"name": "Base.md",
|
||||
"type": "file"
|
||||
},
|
||||
{
|
||||
"id": "fbcfabac-d48f-49e2-a7a7-73375448dd89",
|
||||
"name": "Coder.md",
|
||||
"type": "file"
|
||||
},
|
||||
{
|
||||
"id": "975690ae-5ddb-4e56-aef1-21f5f73ed74f",
|
||||
"name": "Quick.md",
|
||||
"type": "file"
|
||||
}
|
||||
],
|
||||
"voice": null,
|
||||
"voice_avatar": null,
|
||||
"suggestion_prompts": null,
|
||||
"tags": [
|
||||
{
|
||||
"name": "code"
|
||||
}
|
||||
],
|
||||
"terminalId": "0f44afba-4f8e-4699-abfd-7c49b61457fe",
|
||||
"defaultFeatureIds": [
|
||||
"web_search",
|
||||
"image_generation",
|
||||
"code_interpreter"
|
||||
]
|
||||
},
|
||||
"access_grants": [],
|
||||
"is_active": true,
|
||||
"updated_at": 1792596766,
|
||||
"created_at": 1792596052,
|
||||
"background_image_data": null
|
||||
},
|
||||
{
|
||||
"version_id": "8fef2e35-68b2-4b68-a90f-69f66cd07782",
|
||||
"id": "coder-architect",
|
||||
@@ -531,8 +462,8 @@
|
||||
]
|
||||
},
|
||||
"access_grants": [],
|
||||
"is_active": true,
|
||||
"updated_at": 1792596744,
|
||||
"is_active": false,
|
||||
"updated_at": 1792896243,
|
||||
"created_at": 1792573569,
|
||||
"background_image_data": null
|
||||
},
|
||||
@@ -595,22 +526,23 @@
|
||||
]
|
||||
},
|
||||
"access_grants": [],
|
||||
"is_active": true,
|
||||
"updated_at": 1792596774,
|
||||
"is_active": false,
|
||||
"updated_at": 1792896243,
|
||||
"created_at": 1792573569,
|
||||
"background_image_data": null
|
||||
},
|
||||
{
|
||||
"version_id": "94031db1-bb29-4c2e-b8ca-540750c33ce9",
|
||||
"version_id": "a6fd32f5-a499-4358-8eb6-8601b9a4d4f3",
|
||||
"id": "language-moe",
|
||||
"user_id": "2e2e7554-11f1-4047-8ca4-b04070ccc704",
|
||||
"base_model_id": "qwen3.5:35b",
|
||||
"name": "Lang-MoE [256k,28GB]",
|
||||
"name": "Lang-MoE [7-256K,28GB]",
|
||||
"params": {
|
||||
"system": "Please use the attached Knowledge Base files as your personality.",
|
||||
"custom_params": {},
|
||||
"num_thread": 7,
|
||||
"num_ctx": 64000
|
||||
"num_ctx": 999999,
|
||||
"compact_token_threshold": 16000
|
||||
},
|
||||
"meta": {
|
||||
"profile_image_url": "/static/favicon.png",
|
||||
@@ -659,9 +591,644 @@
|
||||
]
|
||||
},
|
||||
"access_grants": [],
|
||||
"is_active": true,
|
||||
"updated_at": 1792596751,
|
||||
"is_active": false,
|
||||
"updated_at": 1792949676,
|
||||
"created_at": 1792595834,
|
||||
"background_image_data": null
|
||||
},
|
||||
{
|
||||
"version_id": "cff6fd12-f6a8-4a27-b34e-e966d90b4bff",
|
||||
"id": "coder-moe",
|
||||
"user_id": "2e2e7554-11f1-4047-8ca4-b04070ccc704",
|
||||
"base_model_id": "qwen3.6:35b",
|
||||
"name": "Code-MoE [7-256K,24GB]",
|
||||
"params": {
|
||||
"custom_params": {},
|
||||
"num_ctx": 999999,
|
||||
"num_thread": 7,
|
||||
"system": "Please use the attached Knowledge Base files as your personality.",
|
||||
"compact_token_threshold": 64000
|
||||
},
|
||||
"meta": {
|
||||
"profile_image_url": "/static/favicon.png",
|
||||
"background_image_url": null,
|
||||
"description": null,
|
||||
"i18n": null,
|
||||
"capabilities": {
|
||||
"file_context": true,
|
||||
"vision": true,
|
||||
"file_upload": true,
|
||||
"web_search": true,
|
||||
"image_generation": true,
|
||||
"code_interpreter": true,
|
||||
"terminal": true,
|
||||
"citations": true,
|
||||
"status_updates": true,
|
||||
"usage": true,
|
||||
"memory": true,
|
||||
"builtin_tools": true
|
||||
},
|
||||
"knowledge": [
|
||||
{
|
||||
"id": "120fa5c0-7f02-4cf3-a136-07b92b042d48",
|
||||
"name": "Base.md",
|
||||
"type": "file"
|
||||
},
|
||||
{
|
||||
"id": "fbcfabac-d48f-49e2-a7a7-73375448dd89",
|
||||
"name": "Coder.md",
|
||||
"type": "file"
|
||||
}
|
||||
],
|
||||
"voice": null,
|
||||
"voice_avatar": null,
|
||||
"suggestion_prompts": null,
|
||||
"tags": [
|
||||
{
|
||||
"name": "code"
|
||||
}
|
||||
],
|
||||
"terminalId": "0f44afba-4f8e-4699-abfd-7c49b61457fe",
|
||||
"defaultFeatureIds": [
|
||||
"web_search",
|
||||
"image_generation",
|
||||
"code_interpreter"
|
||||
]
|
||||
},
|
||||
"access_grants": [],
|
||||
"is_active": false,
|
||||
"updated_at": 1792949675,
|
||||
"created_at": 1792596052,
|
||||
"background_image_data": null
|
||||
},
|
||||
{
|
||||
"version_id": "70a6bcc2-7a7f-4446-bd73-f2433c34af3c",
|
||||
"id": "coder-moe-64k",
|
||||
"user_id": "2e2e7554-11f1-4047-8ca4-b04070ccc704",
|
||||
"base_model_id": "qwen3.6:35b",
|
||||
"name": "Code [MoE,4-64k,22GB]",
|
||||
"params": {
|
||||
"custom_params": {},
|
||||
"num_ctx": 64000,
|
||||
"num_thread": 4,
|
||||
"system": "Please use the attached Knowledge Base files as your personality.",
|
||||
"compact_token_threshold": 48000
|
||||
},
|
||||
"meta": {
|
||||
"profile_image_url": "/static/favicon.png",
|
||||
"background_image_url": null,
|
||||
"description": null,
|
||||
"i18n": null,
|
||||
"capabilities": {
|
||||
"file_context": true,
|
||||
"vision": true,
|
||||
"file_upload": true,
|
||||
"web_search": true,
|
||||
"image_generation": true,
|
||||
"code_interpreter": true,
|
||||
"terminal": true,
|
||||
"citations": true,
|
||||
"status_updates": true,
|
||||
"usage": true,
|
||||
"memory": true,
|
||||
"builtin_tools": true
|
||||
},
|
||||
"knowledge": [
|
||||
{
|
||||
"id": "120fa5c0-7f02-4cf3-a136-07b92b042d48",
|
||||
"name": "Base.md",
|
||||
"type": "file"
|
||||
},
|
||||
{
|
||||
"id": "fbcfabac-d48f-49e2-a7a7-73375448dd89",
|
||||
"name": "Coder.md",
|
||||
"type": "file"
|
||||
}
|
||||
],
|
||||
"voice": null,
|
||||
"voice_avatar": null,
|
||||
"suggestion_prompts": null,
|
||||
"tags": [
|
||||
{
|
||||
"name": "code"
|
||||
}
|
||||
],
|
||||
"terminalId": "0f44afba-4f8e-4699-abfd-7c49b61457fe",
|
||||
"defaultFeatureIds": [
|
||||
"web_search",
|
||||
"image_generation",
|
||||
"code_interpreter"
|
||||
]
|
||||
},
|
||||
"access_grants": [],
|
||||
"is_active": true,
|
||||
"updated_at": 1792987522,
|
||||
"created_at": 1792798618,
|
||||
"background_image_data": null
|
||||
},
|
||||
{
|
||||
"version_id": "2108d3b5-bcc0-458a-abdf-70ed01b9a07e",
|
||||
"id": "code-moe-4-32ktbd-clone",
|
||||
"user_id": "2e2e7554-11f1-4047-8ca4-b04070ccc704",
|
||||
"base_model_id": "qwen3.6:35b",
|
||||
"name": "Code-MoE [4-32k,TBD]",
|
||||
"params": {
|
||||
"custom_params": {},
|
||||
"num_ctx": 64000,
|
||||
"num_thread": 4,
|
||||
"system": "Please use the attached Knowledge Base files as your personality.",
|
||||
"compact_token_threshold": 24000
|
||||
},
|
||||
"meta": {
|
||||
"profile_image_url": "/static/favicon.png",
|
||||
"background_image_url": null,
|
||||
"description": null,
|
||||
"i18n": null,
|
||||
"capabilities": {
|
||||
"file_context": true,
|
||||
"vision": true,
|
||||
"file_upload": true,
|
||||
"web_search": true,
|
||||
"image_generation": true,
|
||||
"code_interpreter": true,
|
||||
"terminal": true,
|
||||
"citations": true,
|
||||
"status_updates": true,
|
||||
"usage": true,
|
||||
"memory": true,
|
||||
"builtin_tools": true
|
||||
},
|
||||
"knowledge": [
|
||||
{
|
||||
"id": "120fa5c0-7f02-4cf3-a136-07b92b042d48",
|
||||
"name": "Base.md",
|
||||
"type": "file"
|
||||
},
|
||||
{
|
||||
"id": "fbcfabac-d48f-49e2-a7a7-73375448dd89",
|
||||
"name": "Coder.md",
|
||||
"type": "file"
|
||||
}
|
||||
],
|
||||
"voice": null,
|
||||
"voice_avatar": null,
|
||||
"suggestion_prompts": null,
|
||||
"tags": [
|
||||
{
|
||||
"name": "code"
|
||||
}
|
||||
],
|
||||
"terminalId": "0f44afba-4f8e-4699-abfd-7c49b61457fe",
|
||||
"defaultFeatureIds": [
|
||||
"web_search",
|
||||
"image_generation",
|
||||
"code_interpreter"
|
||||
]
|
||||
},
|
||||
"access_grants": [],
|
||||
"is_active": false,
|
||||
"updated_at": 1792949674,
|
||||
"created_at": 1792896286,
|
||||
"background_image_data": null
|
||||
},
|
||||
{
|
||||
"version_id": "e5df99a2-6b1a-446f-b714-65b74740022c",
|
||||
"id": "code-moe-128k",
|
||||
"user_id": "2e2e7554-11f1-4047-8ca4-b04070ccc704",
|
||||
"base_model_id": "qwen3.6:35b",
|
||||
"name": "Code-MoE [4-128k,TBD]",
|
||||
"params": {
|
||||
"custom_params": {},
|
||||
"num_ctx": 128000,
|
||||
"num_thread": 4,
|
||||
"system": "Please use the attached Knowledge Base files as your personality.",
|
||||
"compact_token_threshold": 96000
|
||||
},
|
||||
"meta": {
|
||||
"profile_image_url": "/static/favicon.png",
|
||||
"background_image_url": null,
|
||||
"description": null,
|
||||
"i18n": null,
|
||||
"capabilities": {
|
||||
"file_context": true,
|
||||
"vision": true,
|
||||
"file_upload": true,
|
||||
"web_search": true,
|
||||
"image_generation": true,
|
||||
"code_interpreter": true,
|
||||
"terminal": true,
|
||||
"citations": true,
|
||||
"status_updates": true,
|
||||
"usage": true,
|
||||
"memory": true,
|
||||
"builtin_tools": true
|
||||
},
|
||||
"knowledge": [
|
||||
{
|
||||
"id": "120fa5c0-7f02-4cf3-a136-07b92b042d48",
|
||||
"name": "Base.md",
|
||||
"type": "file"
|
||||
},
|
||||
{
|
||||
"id": "fbcfabac-d48f-49e2-a7a7-73375448dd89",
|
||||
"name": "Coder.md",
|
||||
"type": "file"
|
||||
}
|
||||
],
|
||||
"voice": null,
|
||||
"voice_avatar": null,
|
||||
"suggestion_prompts": null,
|
||||
"tags": [
|
||||
{
|
||||
"name": "code"
|
||||
}
|
||||
],
|
||||
"terminalId": "0f44afba-4f8e-4699-abfd-7c49b61457fe",
|
||||
"defaultFeatureIds": [
|
||||
"web_search",
|
||||
"image_generation",
|
||||
"code_interpreter"
|
||||
]
|
||||
},
|
||||
"access_grants": [],
|
||||
"is_active": false,
|
||||
"updated_at": 1792949673,
|
||||
"created_at": 1792896373,
|
||||
"background_image_data": null
|
||||
},
|
||||
{
|
||||
"version_id": "e48d06af-e6c0-4034-9506-f2e77030fe00",
|
||||
"id": "code-moe-256k",
|
||||
"user_id": "2e2e7554-11f1-4047-8ca4-b04070ccc704",
|
||||
"base_model_id": "qwen3.6:35b",
|
||||
"name": "Code-MoE [4-256K,24GB]",
|
||||
"params": {
|
||||
"custom_params": {},
|
||||
"num_ctx": 999999,
|
||||
"num_thread": 4,
|
||||
"system": "Please use the attached Knowledge Base files as your personality.",
|
||||
"compact_token_threshold": 32000
|
||||
},
|
||||
"meta": {
|
||||
"profile_image_url": "/static/favicon.png",
|
||||
"background_image_url": null,
|
||||
"description": null,
|
||||
"i18n": null,
|
||||
"capabilities": {
|
||||
"file_context": true,
|
||||
"vision": true,
|
||||
"file_upload": true,
|
||||
"web_search": true,
|
||||
"image_generation": true,
|
||||
"code_interpreter": true,
|
||||
"terminal": true,
|
||||
"citations": true,
|
||||
"status_updates": true,
|
||||
"usage": true,
|
||||
"memory": true,
|
||||
"builtin_tools": true
|
||||
},
|
||||
"knowledge": [
|
||||
{
|
||||
"id": "120fa5c0-7f02-4cf3-a136-07b92b042d48",
|
||||
"name": "Base.md",
|
||||
"type": "file"
|
||||
},
|
||||
{
|
||||
"id": "fbcfabac-d48f-49e2-a7a7-73375448dd89",
|
||||
"name": "Coder.md",
|
||||
"type": "file"
|
||||
}
|
||||
],
|
||||
"voice": null,
|
||||
"voice_avatar": null,
|
||||
"suggestion_prompts": null,
|
||||
"tags": [
|
||||
{
|
||||
"name": "code"
|
||||
}
|
||||
],
|
||||
"terminalId": "0f44afba-4f8e-4699-abfd-7c49b61457fe",
|
||||
"defaultFeatureIds": [
|
||||
"web_search",
|
||||
"image_generation",
|
||||
"code_interpreter"
|
||||
]
|
||||
},
|
||||
"access_grants": [],
|
||||
"is_active": false,
|
||||
"updated_at": 1792984273,
|
||||
"created_at": 1792896428,
|
||||
"background_image_data": null
|
||||
},
|
||||
{
|
||||
"version_id": "0ee081d0-303d-480b-ae05-00abc9394503",
|
||||
"id": "lang-moe-64k",
|
||||
"user_id": "2e2e7554-11f1-4047-8ca4-b04070ccc704",
|
||||
"base_model_id": "qwen3.5:35b",
|
||||
"name": "Lang [MoE,4-64K,23GB]",
|
||||
"params": {
|
||||
"system": "Please use the attached Knowledge Base files as your personality.",
|
||||
"custom_params": {},
|
||||
"num_thread": 4,
|
||||
"num_ctx": 64000,
|
||||
"compact_token_threshold": 48000
|
||||
},
|
||||
"meta": {
|
||||
"profile_image_url": "/static/favicon.png",
|
||||
"background_image_url": null,
|
||||
"description": null,
|
||||
"i18n": null,
|
||||
"capabilities": {
|
||||
"file_context": true,
|
||||
"vision": true,
|
||||
"file_upload": true,
|
||||
"web_search": true,
|
||||
"image_generation": true,
|
||||
"code_interpreter": true,
|
||||
"terminal": true,
|
||||
"citations": true,
|
||||
"status_updates": true,
|
||||
"usage": true,
|
||||
"memory": true,
|
||||
"builtin_tools": true
|
||||
},
|
||||
"knowledge": [
|
||||
{
|
||||
"id": "120fa5c0-7f02-4cf3-a136-07b92b042d48",
|
||||
"name": "Base.md",
|
||||
"type": "file"
|
||||
},
|
||||
{
|
||||
"id": "bb929f41-18c0-4177-8139-fabfde2b8235",
|
||||
"name": "Language.md",
|
||||
"type": "file"
|
||||
}
|
||||
],
|
||||
"voice": null,
|
||||
"voice_avatar": null,
|
||||
"suggestion_prompts": null,
|
||||
"tags": [
|
||||
{
|
||||
"name": "language"
|
||||
},
|
||||
{
|
||||
"name": "general"
|
||||
}
|
||||
],
|
||||
"defaultFeatureIds": [
|
||||
"web_search",
|
||||
"image_generation",
|
||||
"code_interpreter"
|
||||
]
|
||||
},
|
||||
"access_grants": [],
|
||||
"is_active": false,
|
||||
"updated_at": 1792988150,
|
||||
"created_at": 1792899998,
|
||||
"background_image_data": null
|
||||
},
|
||||
{
|
||||
"version_id": "11892bd5-5049-45e8-a13e-bd2678ff584c",
|
||||
"id": "lang-moe-256k",
|
||||
"user_id": "2e2e7554-11f1-4047-8ca4-b04070ccc704",
|
||||
"base_model_id": "qwen3.5:35b",
|
||||
"name": "Lang-MoE [4-256K,28GB]",
|
||||
"params": {
|
||||
"system": "Please use the attached Knowledge Base files as your personality.",
|
||||
"custom_params": {},
|
||||
"num_thread": 4,
|
||||
"num_ctx": 999000,
|
||||
"compact_token_threshold": 16000
|
||||
},
|
||||
"meta": {
|
||||
"profile_image_url": "/static/favicon.png",
|
||||
"background_image_url": null,
|
||||
"description": null,
|
||||
"i18n": null,
|
||||
"capabilities": {
|
||||
"file_context": true,
|
||||
"vision": true,
|
||||
"file_upload": true,
|
||||
"web_search": true,
|
||||
"image_generation": true,
|
||||
"code_interpreter": true,
|
||||
"terminal": true,
|
||||
"citations": true,
|
||||
"status_updates": true,
|
||||
"usage": true,
|
||||
"memory": true,
|
||||
"builtin_tools": true
|
||||
},
|
||||
"knowledge": [
|
||||
{
|
||||
"id": "120fa5c0-7f02-4cf3-a136-07b92b042d48",
|
||||
"name": "Base.md",
|
||||
"type": "file"
|
||||
},
|
||||
{
|
||||
"id": "bb929f41-18c0-4177-8139-fabfde2b8235",
|
||||
"name": "Language.md",
|
||||
"type": "file"
|
||||
}
|
||||
],
|
||||
"voice": null,
|
||||
"voice_avatar": null,
|
||||
"suggestion_prompts": null,
|
||||
"tags": [
|
||||
{
|
||||
"name": "language"
|
||||
}
|
||||
],
|
||||
"terminalId": "0f44afba-4f8e-4699-abfd-7c49b61457fe",
|
||||
"defaultFeatureIds": [
|
||||
"web_search",
|
||||
"image_generation",
|
||||
"code_interpreter"
|
||||
]
|
||||
},
|
||||
"access_grants": [],
|
||||
"is_active": false,
|
||||
"updated_at": 1792984275,
|
||||
"created_at": 1792949420,
|
||||
"background_image_data": null
|
||||
},
|
||||
{
|
||||
"version_id": "b41d4794-2f89-48a9-8f74-fbc7732f7c4a",
|
||||
"id": "tasks",
|
||||
"user_id": "2e2e7554-11f1-4047-8ca4-b04070ccc704",
|
||||
"base_model_id": "qwen3.5:4b",
|
||||
"name": "Tasks [4b,4-32k,2.6GB]",
|
||||
"params": {
|
||||
"custom_params": {},
|
||||
"num_ctx": 32000,
|
||||
"num_thread": 4,
|
||||
"compact_token_threshold": 16000,
|
||||
"system": "Please used the attached Knowledge Base files as your personality."
|
||||
},
|
||||
"meta": {
|
||||
"profile_image_url": "/static/favicon.png",
|
||||
"background_image_url": null,
|
||||
"description": null,
|
||||
"i18n": null,
|
||||
"capabilities": {
|
||||
"file_context": true,
|
||||
"vision": true,
|
||||
"file_upload": true,
|
||||
"web_search": true,
|
||||
"image_generation": true,
|
||||
"code_interpreter": true,
|
||||
"terminal": true,
|
||||
"citations": true,
|
||||
"status_updates": true,
|
||||
"memory": true,
|
||||
"builtin_tools": true
|
||||
},
|
||||
"knowledge": [
|
||||
{
|
||||
"id": "120fa5c0-7f02-4cf3-a136-07b92b042d48",
|
||||
"name": "Base.md",
|
||||
"type": "file"
|
||||
}
|
||||
],
|
||||
"voice": null,
|
||||
"voice_avatar": null,
|
||||
"suggestion_prompts": null,
|
||||
"tags": [
|
||||
{
|
||||
"name": "general"
|
||||
}
|
||||
],
|
||||
"defaultFeatureIds": [
|
||||
"code_interpreter"
|
||||
]
|
||||
},
|
||||
"access_grants": [],
|
||||
"is_active": false,
|
||||
"updated_at": 1792988777,
|
||||
"created_at": 1792977834,
|
||||
"background_image_data": null
|
||||
},
|
||||
{
|
||||
"version_id": "d3edb3bc-8097-4d68-aa7c-3986fb2e6224",
|
||||
"id": "tasks-2b",
|
||||
"user_id": "2e2e7554-11f1-4047-8ca4-b04070ccc704",
|
||||
"base_model_id": "qwen3.5:2b",
|
||||
"name": "Tasks [2b,4-16k,2.6GB]",
|
||||
"params": {
|
||||
"custom_params": {},
|
||||
"num_ctx": 16000,
|
||||
"num_thread": 4,
|
||||
"compact_token_threshold": 8000,
|
||||
"system": "Please used the attached Knowledge Base files as your personality."
|
||||
},
|
||||
"meta": {
|
||||
"profile_image_url": "/static/favicon.png",
|
||||
"background_image_url": null,
|
||||
"description": null,
|
||||
"i18n": null,
|
||||
"capabilities": {
|
||||
"file_context": true,
|
||||
"vision": true,
|
||||
"file_upload": true,
|
||||
"web_search": true,
|
||||
"image_generation": true,
|
||||
"code_interpreter": true,
|
||||
"terminal": true,
|
||||
"citations": true,
|
||||
"status_updates": true,
|
||||
"memory": true,
|
||||
"builtin_tools": true
|
||||
},
|
||||
"knowledge": [
|
||||
{
|
||||
"id": "120fa5c0-7f02-4cf3-a136-07b92b042d48",
|
||||
"name": "Base.md",
|
||||
"type": "file"
|
||||
}
|
||||
],
|
||||
"voice": null,
|
||||
"voice_avatar": null,
|
||||
"suggestion_prompts": null,
|
||||
"tags": [
|
||||
{
|
||||
"name": "general"
|
||||
}
|
||||
],
|
||||
"defaultFeatureIds": [
|
||||
"code_interpreter"
|
||||
]
|
||||
},
|
||||
"access_grants": [],
|
||||
"is_active": false,
|
||||
"updated_at": 1792988758,
|
||||
"created_at": 1792987029,
|
||||
"background_image_data": null
|
||||
},
|
||||
{
|
||||
"version_id": "3979937f-a787-4e01-ac72-f55ddd0ebf17",
|
||||
"id": "lang-32k",
|
||||
"user_id": "2e2e7554-11f1-4047-8ca4-b04070ccc704",
|
||||
"base_model_id": "qwen3.5:35b",
|
||||
"name": "Lang [MoE,4-32K,22GB]",
|
||||
"params": {
|
||||
"system": "Please use the attached Knowledge Base files as your personality.",
|
||||
"custom_params": {},
|
||||
"num_thread": 4,
|
||||
"num_ctx": 32000,
|
||||
"compact_token_threshold": 24000
|
||||
},
|
||||
"meta": {
|
||||
"profile_image_url": "/static/favicon.png",
|
||||
"background_image_url": null,
|
||||
"description": null,
|
||||
"i18n": null,
|
||||
"capabilities": {
|
||||
"file_context": true,
|
||||
"vision": true,
|
||||
"file_upload": true,
|
||||
"web_search": true,
|
||||
"image_generation": true,
|
||||
"code_interpreter": true,
|
||||
"terminal": true,
|
||||
"citations": true,
|
||||
"status_updates": true,
|
||||
"usage": true,
|
||||
"memory": true,
|
||||
"builtin_tools": true
|
||||
},
|
||||
"knowledge": [
|
||||
{
|
||||
"id": "120fa5c0-7f02-4cf3-a136-07b92b042d48",
|
||||
"name": "Base.md",
|
||||
"type": "file"
|
||||
},
|
||||
{
|
||||
"id": "bb929f41-18c0-4177-8139-fabfde2b8235",
|
||||
"name": "Language.md",
|
||||
"type": "file"
|
||||
}
|
||||
],
|
||||
"voice": null,
|
||||
"voice_avatar": null,
|
||||
"suggestion_prompts": null,
|
||||
"tags": [
|
||||
{
|
||||
"name": "language"
|
||||
},
|
||||
{
|
||||
"name": "general"
|
||||
}
|
||||
],
|
||||
"defaultFeatureIds": [
|
||||
"web_search",
|
||||
"image_generation"
|
||||
]
|
||||
},
|
||||
"access_grants": [],
|
||||
"is_active": true,
|
||||
"updated_at": 1793328802,
|
||||
"created_at": 1792988144,
|
||||
"background_image_data": null
|
||||
}
|
||||
]
|
||||
@@ -129,7 +129,9 @@
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/workstation/linux/software/android.yml
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/workstation/linux/software/llm.yml
|
||||
- ansible.builtin.include_tasks: tasks/workstation/linux/software/docker.yml
|
||||
|
||||
- ansible.builtin.include_tasks: tasks/workstation/linux/software/ai/llm.yml
|
||||
|
||||
when: ansible_system == "Linux"
|
||||
and internet
|
||||
|
||||
@@ -69,6 +69,7 @@
|
||||
- "{{ stress }}"
|
||||
- "{{ jq }}"
|
||||
- "{{ btop }}"
|
||||
- "{{ xkb }}"
|
||||
state: present
|
||||
|
||||
- name: General | Software | Packages | Install Software (DEV)
|
||||
|
||||
+17
-14
@@ -11,7 +11,7 @@ personalities that help guide the AI into productivity rather than verbosity.
|
||||
|
||||
You are concise, succinct, and direct with responses. Unapologetic yet kind.
|
||||
Friendly but not overbearing. You strive to be correct and are willing to admit
|
||||
when you may now truly know something or further research needs to be done. You
|
||||
when you may not truly know something, or further research needs to be done. You
|
||||
focus on responding without overthinking, preferring to ask questions when any
|
||||
confusion arises. You choose to make very little assumptions, raising concern if
|
||||
anything needs elaboration, clarification, or refinement. You are good at what
|
||||
@@ -31,10 +31,13 @@ interest in learning Croatian and practicing Spanish. You know that I am a
|
||||
native English speaker with very little experience in anything other than
|
||||
Spanish, but that I have not had much practice with my Spanish other than
|
||||
university studies. You know that I also have an eventual interest in Italian
|
||||
but am not focusing on it since it and Spanish are a bit too similar. Learning
|
||||
Croatian is my top priority and practicing Spanish is right after that. Any
|
||||
similarities that can therefore be tied to any of the aforementioned languages
|
||||
are greatly appreciated.
|
||||
but am not focusing on it since it and Spanish are a bit too similar to be
|
||||
learned at the same time. Learning Croatian is my top priority and practicing
|
||||
Spanish is right after that. Any similarities that can therefore be tied to any
|
||||
of the aforementioned languages are greatly appreciated. Using easy vocabulary
|
||||
initially is also very helpful, rather than going into advanced tenses or vocab
|
||||
that only a native or fluent speaker would know, at least until I begin to show
|
||||
that level of ability and skill. Please keep things simple, direct, and concise.
|
||||
|
||||
### Coder
|
||||
|
||||
@@ -48,16 +51,16 @@ overwhelming them with technical details unless asked. You know that the
|
||||
designer you are working with (me, the user) likely already understands these
|
||||
things and does not need them included in our conversation.
|
||||
|
||||
Android SDK is at $ANDROID_HOME and should be "$HOME/SDKs/Android/Sdk".
|
||||
Flutter SDK is at $FLUTTER_HOME and should be "$HOME/SDKs/Flutter/flutter".
|
||||
Java SDK (JDK) is at $JAVA_HOME and should be "$HOME/SDKs/Java".
|
||||
Android SDK is at `$ANDROID_HOME` and should be `$HOME/SDKs/Android/Sdk`.
|
||||
Flutter SDK is at `$FLUTTER_HOME` and should be `$HOME/SDKs/Flutter/flutter`.
|
||||
Java SDK (JDK) is at `$JAVA_HOME` and should be `$HOME/SDKs/Java`.
|
||||
|
||||
These have also been added your PATH:
|
||||
These have been added your PATH via `/home/user/.bashrc`:
|
||||
|
||||
- "$ANDROID_HOME/platform-tools"
|
||||
- "$ANDROID_HOME/cmdline-tools/latest/bin"
|
||||
- "$FLUTTER_HOME/bin"
|
||||
- "$JAVA_HOME/bin"
|
||||
- `$ANDROID_HOME/platform-tools`
|
||||
- `$ANDROID_HOME/cmdline-tools/latest/bin`
|
||||
- `$FLUTTER_HOME/bin`
|
||||
- `$JAVA_HOME/bin`
|
||||
|
||||
#### Quick Developer
|
||||
|
||||
@@ -105,7 +108,7 @@ Number of physical cores is 8, hyperthreaded to 16, but supposedly the emulated
|
||||
cores are not very useful to LLMs. Try only using between 6 and 8 when possible.
|
||||
Research says it is not worth enabling the iGPU for Intel XE, CPUs are better.
|
||||
|
||||
## Benchmark
|
||||
## Benchmarks
|
||||
|
||||
### System
|
||||
|
||||
+138
-73
@@ -66,7 +66,15 @@
|
||||
# Also setting this to a minimum of 3 for using Codium with extensions.
|
||||
# 20261014: Going down to 1 since only using CPUs, no GPUs. Otherwise
|
||||
# the models seem to take excessively long to answer even small things.
|
||||
llm_parallel: 1 #"{{ [(ansible_processor_vcpus / 2) | round(0, method='ceil'), 3] | max | int }}"
|
||||
#llm_parallel: 1 #"{{ [(ansible_processor_vcpus / 2) | round(0, method='ceil'), 3] | max | int }}"
|
||||
# 20261027 Increased to 3 as a maximum.
|
||||
# After more research, this is a more memory-based parameter. Basically
|
||||
# the model allocates this number of KV caches, that way when it is
|
||||
# running in multiple chats it does not need to drop context and reload.
|
||||
# Still only uses X threads for all chats, but does not waste much time.
|
||||
# So if set to 3, and doing 64K context, it really allocates 192k in RAM
|
||||
# and supposedly if only doing 1 chat the model can use it all.
|
||||
llm_parallel: "{{ [(ansible_memtotal_mb / 8000) | round(0, method='floor'), 3] | min | int }}"
|
||||
# Most LLMs take a coefficient of about 1.2 to 1.5 of their file size in
|
||||
# RAM, which is usually less than guessing a usage of weight*1000.
|
||||
# Example:
|
||||
@@ -76,6 +84,7 @@
|
||||
llm_size_coef: 1.3
|
||||
# Base the context on MB of RAM, with a minumum 64k for decent thinking.
|
||||
llm_context: "{{ [(ansible_memtotal_mb * 4) | round(-3, method='ceil'), 64000] | max | int }}"
|
||||
llm_docker_network: open-webui-net
|
||||
|
||||
- name: Workstation | Linux | Software | LLMs | Facts 02
|
||||
ansible.builtin.set_fact:
|
||||
@@ -228,29 +237,6 @@
|
||||
- "{{ qwen_code }}"
|
||||
state: present
|
||||
|
||||
- name: Workstation | Linux | Software | LLMs | Docker | Install
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- docker
|
||||
- docker-compose
|
||||
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:
|
||||
|
||||
@@ -287,6 +273,7 @@
|
||||
|
||||
### Required ###
|
||||
export HOME={{ user_user.home }}
|
||||
export OLLAMA_HOST=0.0.0.0 # Needed for Open WebUI
|
||||
|
||||
### Timeouts ###
|
||||
export OLLAMA_LOAD_TIMEOUT=30m # default is 5m
|
||||
@@ -295,7 +282,7 @@
|
||||
### Resource Usage ###
|
||||
export OLLAMA_KEEP_ALIVE=-1 # default is 5m. Good frontends keep the model alive as long as it needs to be, this is not a source of timeout.
|
||||
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_NUM_PARALLEL={{ llm_parallel }} # default is 1 and applies per-model
|
||||
export OLLAMA_CONTEXT_LENGTH={{ llm_context }} # default is 4096, https://docs.ollama.com/faq#how-can-i-specify-the-context-window-size
|
||||
export OLLAMA_MAX_QUEUE=999 # default is 512 (unconfirmed)
|
||||
export OLLAMA_NUM_THREADS={{ (ansible_processor_vcpus / 2) | int }} # not real, but maybe some day.
|
||||
@@ -426,6 +413,13 @@
|
||||
content: |
|
||||
#!/bin/sh
|
||||
exec 2>&1
|
||||
|
||||
## TBD / TODO
|
||||
## Move this to the same compose file as Open Terminal.
|
||||
## Will solve quite a few network related complications.
|
||||
## Also refactor the two into their own file (open_webui.yml).
|
||||
## Probably also will then condense into 1 runit service.
|
||||
|
||||
image=ghcr.io/open-webui/open-webui:latest
|
||||
|
||||
# Wait for Docker to start up.
|
||||
@@ -434,45 +428,43 @@
|
||||
# Ensure the old container is gone.
|
||||
echo "RUN: Stopping..."
|
||||
docker stop open-webui &&
|
||||
echo "RUN: Container stopped" ||
|
||||
echo "RUN: Container stopped." ||
|
||||
echo "RUN: Container already stopped."
|
||||
echo "RUN: Deleting..."
|
||||
docker rm -f open-webui &&
|
||||
echo "RUN: Container deleted" ||
|
||||
echo "RUN: Container deleted." ||
|
||||
echo "RUN: Container already deleted."
|
||||
|
||||
# Check for any new updates in background.
|
||||
sleep 300 &&
|
||||
echo "RUN: Updating..." &&
|
||||
docker pull $image &
|
||||
# Check for any new updates in the background.
|
||||
(
|
||||
while true; do
|
||||
sleep 600
|
||||
echo "RUN: Checking for updates..."
|
||||
docker pull $image
|
||||
done
|
||||
) &
|
||||
LOOP_PID=$!
|
||||
|
||||
# Ensure cleanup on any exit (normal or signal from runit).
|
||||
trap 'kill "$LOOP_PID" 2>/dev/null; wait "$LOOP_PID" 2>/dev/null' EXIT
|
||||
|
||||
# Create a network for associated programs.
|
||||
net={{ llm_docker_network }}
|
||||
docker network inspect $net >/dev/null 2>&1 || \
|
||||
docker network create $net
|
||||
|
||||
# Start the open-webui program.
|
||||
set -e
|
||||
exec docker run \
|
||||
--name open-webui \
|
||||
--network=host -e PORT={{ open_webui_port }} \
|
||||
-e OLLAMA_BASE_URL=http://0.0.0.0:11434 \
|
||||
docker run \
|
||||
--name open-webui --network $net \
|
||||
-e PORT={{ open_webui_port }} \
|
||||
-p {{ open_webui_port }}:{{ open_webui_port }} \--add-host=host.docker.internal:host-gateway \
|
||||
-e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
|
||||
{{ ("-e HF_TOKEN=" ~ hf_token) if hf_token else '' }} \
|
||||
-e WEBUI_SECRET_KEY={{ open_webui_key }} \
|
||||
-e ENABLE_QUERIES_CACHE=True \
|
||||
-v open-webui:/app/backend/data \
|
||||
$image
|
||||
|
||||
# Unsure why this was not working on Artix with runit.
|
||||
# exec curl 0.0.0.0:8080/health gave a successful response.
|
||||
# The environment was not accessible on the host though.
|
||||
#-p {{ open_webui_port }}:8080 \
|
||||
|
||||
# The host.docker.internal params still seem required, even with
|
||||
# giving access to the host system and trying this:
|
||||
#-e OLLAMA_BASE_URL=http://localhost:11434 \
|
||||
# Although I did not try it with 0.0.0.0, maybe that'd work.
|
||||
|
||||
# Had to change this to 0.0.0.0, below was still acting weird.
|
||||
#-e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
|
||||
|
||||
# 20261020, trying to remove this again while leaving the rest.
|
||||
#--add-host=host.docker.internal:host-gateway \
|
||||
mode: "0755"
|
||||
|
||||
- name: Workstation | Linux | Software | LLMs | runit | open-webui | Script | Finish
|
||||
@@ -589,24 +581,33 @@
|
||||
container. You are the user `user` and have been granted access to
|
||||
the designer's Code and SDKs via mount at `{{ user_user.home }}`.
|
||||
|
||||
Host system is typically (but not always) a systemd-free distro
|
||||
such as Artix or Devuan. User likes the `runit` service manager.
|
||||
`elogind` is used rather than systemd's logind. Desktop is i3 and
|
||||
display manager is lightdm. Servers are run on Debian and Docker
|
||||
containers are typically debian:trixie-slim with a Dockerfile
|
||||
called by compose.yml which adds the necessary packages, sometimes
|
||||
building from source if the Debian executable is too old.
|
||||
|
||||
If the `$GOT_EM` environment variable is `true` then all the
|
||||
necessary packages for compiling Android and Flutter were
|
||||
installed. If it is `false` then they were not installed, and
|
||||
compiling will fail. Please check this before trying and alert me
|
||||
if they need added. If we don;t have Internet, then ask me to
|
||||
if they need added. If we don't have Internet, then ask me to
|
||||
compile or run whatever command is needed on the host system.
|
||||
|
||||
# Rules
|
||||
|
||||
Never use any `git` subcommands that change anything, including
|
||||
Never use any `git` subcommands that change the repo, including
|
||||
but not limited to `add`, `commit`, `pull`, `push`, `branch`,
|
||||
`switch`, etc. The user is who controls the respository changes.
|
||||
You may informational git subcommands such as use `git status`.
|
||||
You may use informational git subcommands such as `git status`,
|
||||
and may occasionally be asked to run `git clone` type commands.
|
||||
|
||||
If any programs need installed in order to work on a project, we
|
||||
need to document that in an install.sh script, as well as add it
|
||||
to ~/PACKAGES.txt so that the user can ensure they stay installed.
|
||||
install.sh scripts should be for both `apt` systems (Debian,
|
||||
need to document that in an `install.sh` script, as well as add it
|
||||
to `~/PACKAGES.txt` so that we can ensure they stay installed.
|
||||
`install.sh` scripts should be for both `apt` systems (Debian,
|
||||
Ubuntu) and pacman system (Arch, Artix). using distribution
|
||||
package managers is preferable over `pip` and `npm` when
|
||||
possible, unless the project is actually Python or Node.js.
|
||||
@@ -620,10 +621,27 @@
|
||||
such as `/usr/lib/jvm`, please ask the user and halt all further
|
||||
operations until you have received feedback.
|
||||
|
||||
# Effort
|
||||
|
||||
It is never okay to brute force a solution if something is not
|
||||
working well. it is better to ask the user for assistance or alert
|
||||
them that you've encountered blockers and then cease the process
|
||||
until you've received feedback.
|
||||
until you've received feedback. This especially relates to when
|
||||
system errors occur which are not related to the source code, such
|
||||
as a compiler failing to be found or an SDK version mismatch. If
|
||||
the error is with the source code though, troubleshooting and code
|
||||
changes should continue until the program is compiling properly.
|
||||
|
||||
For CLI projects such as script languages, the final result should
|
||||
always be tested both to run successfully and have the proper
|
||||
output. All test cases should be analyzed and walked through,
|
||||
which will help ensure all the requirements have been met.
|
||||
|
||||
For GUI programs (such as Android, Flutter, Kotlin Multiplatform,
|
||||
Kivy, etc), the project should be tested to both compile & build
|
||||
successfully and also generate the proper installation file (APK,
|
||||
Linux Bundle). Once that is confirmed, the user/desginer will test
|
||||
that the application meets the proper requirements.
|
||||
|
||||
# Preferences
|
||||
|
||||
@@ -647,6 +665,12 @@
|
||||
- Kotlin: 2.4.20
|
||||
- Java: JDK 17
|
||||
- Flutter (plugin loader): 1.0.0
|
||||
|
||||
Regardless of whether AGP bundles Kotlin, we need to specify it to
|
||||
avoid things like "Your project's Kotlin version (2.2.10) is lower
|
||||
than Flutter's minimum supported version of 2.2.20. Please upgrade
|
||||
your Kotlin version." This is exactly why we use these versions,
|
||||
plus it helps document what's actually being used over guessing.
|
||||
backup: false
|
||||
owner: "{{ user }}"
|
||||
group: "{{ user }}"
|
||||
@@ -654,7 +678,7 @@
|
||||
|
||||
- name: Workstation | Linux | Software | LLMs | runit | open-terminal | Script | Compose YAML
|
||||
ansible.builtin.copy:
|
||||
dest: /usr/local/etc/open-terminal/docker-compose.yml
|
||||
dest: /usr/local/etc/open-terminal/compose.yml
|
||||
content: |
|
||||
#exec docker run \
|
||||
# --name open-terminal \
|
||||
@@ -675,14 +699,37 @@
|
||||
# -e OPEN_TERMINAL_PACKAGES="$packages" \
|
||||
# -e GOT_EM="$GOT_EM" \
|
||||
# $image run --port {{ open_terminal_port }}
|
||||
networks:
|
||||
{{ llm_docker_network }}:
|
||||
name: {{ llm_docker_network }}
|
||||
external: true
|
||||
|
||||
services:
|
||||
open-terminal:
|
||||
build:
|
||||
context: ./
|
||||
network: host
|
||||
image: hyperling-open-terminal:latest
|
||||
container_name: open-terminal
|
||||
network_mode: host
|
||||
ports:
|
||||
- {{ open_terminal_port }}:{{ open_terminal_port }}
|
||||
networks:
|
||||
- {{ llm_docker_network }}
|
||||
#dns:
|
||||
# ## Mullvad
|
||||
# ## (https://mullvad.net/en/help/dns-over-https-and-dns-over-tls)
|
||||
# #- 194.242.2.9 # all.dns.mullvad.net
|
||||
# ##- 194.242.2.8 # not real (yet?)
|
||||
# ##- 194.242.2.7 # not real (yet?)
|
||||
# #- 194.242.2.6 # family.dns.mullvad.net
|
||||
# #- 194.242.2.5 # extended.dns.mullvad.net
|
||||
# #- 194.242.2.4 # base.dns.mullvad.net
|
||||
# #- 194.242.2.3 # adblock.dns.mullvad.net
|
||||
# - 194.242.2.2 # dns.mullvad.net
|
||||
# #- 194.242.2.1 # not real (yet?)
|
||||
# #- 194.242.2.0 # not real (yet?)
|
||||
# ## Cloudflare
|
||||
# - 1.0.0.1
|
||||
# - 1.1.1.1
|
||||
command: run --port {{ open_terminal_port }}
|
||||
environment:
|
||||
- OPEN_TERMINAL_FILE_BROWSER_ROOT=/home/user
|
||||
@@ -700,7 +747,7 @@
|
||||
- {{ jdk_etc17 }}:{{ jdk_etc17 }}:ro
|
||||
- {{ jdk_etc21 }}:{{ jdk_etc21 }}:ro
|
||||
- {{ jdk_etc25 }}:{{ jdk_etc25 }}:ro
|
||||
- /etc/hosts:/etc/hosts:ro
|
||||
#- /etc/resolv.conf:/etc/resolv.conf:ro
|
||||
- {{ user_user.home }}/.gradle:{{ user_user.home }}/.gradle
|
||||
- {{ user_user.home }}/.pub-cache:{{ user_user.home }}/.pub-cache
|
||||
owner: root
|
||||
@@ -714,14 +761,18 @@
|
||||
|
||||
USER root
|
||||
|
||||
RUN echo "System"
|
||||
RUN apt-get update && apt-get install -y \
|
||||
ca-certificates git curl bash sudo wget ansible ansible-lint
|
||||
|
||||
RUN echo "Android"
|
||||
RUN apt-get update && apt-get install -y \
|
||||
libc6:amd64 libncurses-dev \
|
||||
libstdc++6 lib32z1 libbz2-1.0 android-udev-rules
|
||||
# Debian removed JDK 17, continue serving from the host.
|
||||
# Debian removed JDK 17, continue serving from the host.
|
||||
# default-jdk openjdk-17-jdk
|
||||
|
||||
RUN echo "Flutter (Main)"
|
||||
RUN echo "Flutter"
|
||||
RUN apt-get update && apt-get install -y \
|
||||
curl git unzip xz-utils zip libglu1-mesa libglu1-mesa
|
||||
|
||||
@@ -734,6 +785,10 @@
|
||||
RUN apt-get update && apt-get install -y \
|
||||
libc6:amd64 libstdc++6 lib32z1 libbz2-1.0
|
||||
|
||||
RUN echo "Ansible"
|
||||
RUN apt-get update && apt-get install -y \
|
||||
ansible ansible-lint
|
||||
|
||||
USER user
|
||||
owner: root
|
||||
mode: "0755"
|
||||
@@ -758,22 +813,32 @@
|
||||
|
||||
# Ensure the old container is stopped.
|
||||
echo "RUN: Stopping..."
|
||||
docker compose -f /usr/local/etc/open-terminal/docker-compose.yml down &&
|
||||
echo "RUN: Container stopped" ||
|
||||
docker compose \
|
||||
-f /usr/local/etc/open-terminal/compose.yml down &&
|
||||
echo "RUN: Container stopped." ||
|
||||
echo "RUN: Container already stopped."
|
||||
|
||||
# Check for any new updates in background.
|
||||
sleep 600 &&
|
||||
echo "RUN: Updating..." &&
|
||||
docker compose -f /usr/local/etc/open-terminal/docker-compose.yml \
|
||||
build --pull &
|
||||
# Check for any new updates in the background.
|
||||
(
|
||||
while true; do
|
||||
sleep 600
|
||||
echo "RUN: Checking for updates..."
|
||||
docker compose \
|
||||
-f /usr/local/etc/open-terminal/compose.yml \
|
||||
build --pull
|
||||
done
|
||||
) &
|
||||
LOOP_PID=$!
|
||||
|
||||
# Ensure cleanup on any exit (normal or signal from runit).
|
||||
trap 'kill "$LOOP_PID" 2>/dev/null; wait "$LOOP_PID" 2>/dev/null' EXIT
|
||||
|
||||
export GOT_EM=true
|
||||
|
||||
# Start the open-terminal program.
|
||||
# https://github.com/open-webui/open-terminal#configuration
|
||||
set -e
|
||||
exec docker compose -f /usr/local/etc/open-terminal/docker-compose.yml up
|
||||
docker compose -f /usr/local/etc/open-terminal/compose.yml up
|
||||
owner: root
|
||||
mode: "0755"
|
||||
|
||||
@@ -784,7 +849,7 @@
|
||||
{{ runit_finish_sleep }}
|
||||
|
||||
echo "FINISH: Stopping..."
|
||||
docker compose -f /usr/local/etc/open-terminal/docker-compose.yml down &&
|
||||
docker compose -f /usr/local/etc/open-terminal/compose.yml down &&
|
||||
echo "FINISH: Container stopped" ||
|
||||
echo "FINISH: Container already stopped."
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
# 2026-10-27 Hyperling
|
||||
# Pulled out of llm.yml since the number of tasks is growing.
|
||||
|
||||
- name: Workstation | Linux | Software | Docker | Install
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- docker
|
||||
- docker-compose
|
||||
- docker-buildx
|
||||
state: present
|
||||
|
||||
- name: Workstation | Linux | Software | Docker | Install [runit]
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- docker-runit
|
||||
state: present
|
||||
when: ansible_pkg_mgr == "pacman"
|
||||
and ansible_service_mgr == "runit"
|
||||
|
||||
- name: Workstation | Linux | Software | Docker | Group
|
||||
ansible.builtin.user:
|
||||
name: "{{ item }}"
|
||||
groups: docker
|
||||
append: true
|
||||
loop:
|
||||
- root
|
||||
- "{{ user }}"
|
||||
|
||||
- name: Workstation | Linux | Software | Docker | Config | Dir
|
||||
ansible.builtin.file:
|
||||
name: /etc/docker
|
||||
state: directory
|
||||
owner: root
|
||||
mode: '0755'
|
||||
|
||||
# This was causing the docker daemon to fail. Was trying to fix ports mappings.
|
||||
#- name: Workstation | Linux | Software | Docker | Config | File
|
||||
# ansible.builtin.copy:
|
||||
# dest: /etc/docker/daemon.json
|
||||
# content: |
|
||||
# {
|
||||
# "firewall-backend": "nftables"
|
||||
# }
|
||||
# backup: false
|
||||
# owner: root
|
||||
# mode: '0644'
|
||||
# when: ansible_pkg_mgr == "pacman"
|
||||
|
||||
- name: Workstation | Linux | Software | Docker | Config | File
|
||||
ansible.builtin.file:
|
||||
name: /etc/docker/daemon.json
|
||||
state: absent
|
||||
owner: root
|
||||
mode: '0755'
|
||||
@@ -5,52 +5,73 @@
|
||||
- name: Workstation | Linux | Software | Hugo
|
||||
block:
|
||||
|
||||
- name: Workstation | Linux | Software | Hugo | pacman
|
||||
block:
|
||||
- name: Workstation | Linux | Software | Hugo | pacman
|
||||
block:
|
||||
|
||||
- name: Workstation | Linux | Software | Hugo | pacman | Facts
|
||||
ansible.builtin.set_fact:
|
||||
sass_old: ruby-sass
|
||||
sass_current: dart-sass
|
||||
- name: Workstation | Linux | Software | Hugo | pacman | Facts
|
||||
ansible.builtin.set_fact:
|
||||
sass_old: ruby-sass
|
||||
sass_current: dart-sass
|
||||
|
||||
- name: Workstation | Linux | Software | Hugo | pacman | Remove Old
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "{{ sass_old }}"
|
||||
state: absent
|
||||
- name: Workstation | Linux | Software | Hugo | pacman | Remove Old
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "{{ sass_old }}"
|
||||
state: absent
|
||||
|
||||
- name: Workstation | Linux | Software | Hugo | pacman | Install New
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- "{{ sass_current }}"
|
||||
state: present
|
||||
- name: Workstation | Linux | Software | Hugo | pacman | Install New
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- hugo
|
||||
- "{{ sass_current }}"
|
||||
state: present
|
||||
|
||||
when: ansible_pkg_mgr == "pacman"
|
||||
when: ansible_pkg_mgr == "pacman"
|
||||
|
||||
# This must exist after nodejs.yml so that NPM is installed.
|
||||
- name: Workstation | Linux | Software | Hugo | npm
|
||||
block:
|
||||
# This must exist after nodejs.yml so that NPM is installed.
|
||||
- name: Workstation | Linux | Software | Hugo | apt
|
||||
block:
|
||||
|
||||
- name: Workstation | Linux | Software | Hugo | npm | Facts
|
||||
ansible.builtin.set_fact:
|
||||
sass_old: node-sass
|
||||
sass_current: sass
|
||||
- name: Workstation | Linux | Software | Hugo | apt | sass | Facts
|
||||
ansible.builtin.set_fact:
|
||||
sass_old: node-sass
|
||||
sass_current: sass
|
||||
|
||||
- name: Workstation | Linux | Software | Hugo | npm | Gather
|
||||
ansible.builtin.shell: npm prefix -g
|
||||
register: npm_bin_dir # Provides /usr/local/ on Devuan, /usr/ on Artix.
|
||||
changed_when: false
|
||||
- name: Workstation | Linux | Software | Hugo | apt | sass | Gather
|
||||
ansible.builtin.shell: npm prefix -g
|
||||
register: npm_bin_dir # Provides /usr/local/ on Devuan, /usr/ on Artix.
|
||||
changed_when: false
|
||||
|
||||
- name: Workstation | Linux | Software | Hugo | npm | Remove Old
|
||||
ansible.builtin.shell: "npm remove -g {{ sass_old }}"
|
||||
args:
|
||||
creates: "{{ npm_bin_dir.stdout }}/bin/sass"
|
||||
- name: Workstation | Linux | Software | Hugo | apt | sass | Remove Old
|
||||
ansible.builtin.shell: "npm remove -g {{ sass_old }}"
|
||||
args:
|
||||
creates: "{{ npm_bin_dir.stdout }}/bin/sass"
|
||||
|
||||
- name: Workstation | Linux | Software | Hugo | npm | Install New
|
||||
ansible.builtin.shell: "npm install -g {{ sass_current }}"
|
||||
args:
|
||||
creates: "{{ npm_bin_dir.stdout }}/bin/sass"
|
||||
- name: Workstation | Linux | Software | Hugo | apt | sass | Install New
|
||||
ansible.builtin.shell: "npm install -g {{ sass_current }}"
|
||||
args:
|
||||
creates: "{{ npm_bin_dir.stdout }}/bin/sass"
|
||||
|
||||
when: ansible_pkg_mgr == "apt"
|
||||
- name: Workstation | Linux | Software | Hugo | apt | hugo | Remove Old
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- hugo
|
||||
state: absent
|
||||
|
||||
- name: Workstation | Linux | Software | Hugo | apt | hugo | Install Dependencies
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- golang
|
||||
- gcc
|
||||
state: present
|
||||
|
||||
- name: Workstation | Linux | Software | Hugo | apt | hugo | Build
|
||||
ansible.builtin.shell: |
|
||||
CGO_ENABLED=1 go install -tags extended github.com/gohugoio/hugo@latest
|
||||
ln -s $HOME/go/bin/hugo /usr/local/bin/hugo
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
|
||||
when: ansible_pkg_mgr == "apt"
|
||||
|
||||
when: coding is true
|
||||
@@ -54,6 +54,8 @@
|
||||
- "{{ strawberry }}"
|
||||
- "{{ dict_en }}"
|
||||
- "{{ dict_es }}"
|
||||
- "{{ xset }}"
|
||||
- "{{ xlock }}"
|
||||
state: present
|
||||
|
||||
- name: Workstation | Linux | Software | Packages | Install From Repo [Coding]
|
||||
|
||||
@@ -13,12 +13,16 @@
|
||||
- echo "deb [signed-by=/usr/share/keyrings/mullvad-keyring.asc arch=$( dpkg --print-architecture )] https://repository.mullvad.net/deb/stable $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/mullvad.list
|
||||
- apt update
|
||||
when: ansible_pkg_mgr == "apt"
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
|
||||
- name: Workstation | Software | VPN | Mullvad | Add Repo [dnf]
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop:
|
||||
- sudo dnf config-manager --add-repo https://repository.mullvad.net/rpm/stable/mullvad.repo
|
||||
when: ansible_pkg_mgr == "dnf"
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
|
||||
- name: Workstation | Software | VPN | Install
|
||||
ansible.builtin.package:
|
||||
@@ -67,6 +71,8 @@
|
||||
- "cd {{ mullvad_repack_dir }} && ./repack.sh ../Mullvad.deb"
|
||||
- "apt-get install -y --reinstall {{ devuan_mullvad_dir }}/Mullvad_repack.deb"
|
||||
when: not mullvad_installed.stat.exists
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
|
||||
when: ansible_pkg_mgr == "apt"
|
||||
and ansible_service_mgr != "systemd"
|
||||
@@ -95,6 +101,8 @@
|
||||
- echo "cd {{ mullvad_exe_dir }}" >> {{ mullvad_exe_new }}
|
||||
- echo "./{{ mullvad_exe }}" >> {{ mullvad_exe_new }}
|
||||
- chmod +x {{ mullvad_exe_new }}
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
|
||||
- name: Workstation | Software | VPN | Mullvad | runit | Enable Service (mullvad-daemon)
|
||||
ansible.builtin.file:
|
||||
@@ -113,7 +121,7 @@
|
||||
- name: Workstation | Software | VPN | Mullvad | PATH | Enable Lockdown
|
||||
ansible.builtin.shell: "{{ item }}"
|
||||
loop:
|
||||
- mullvad lan set block
|
||||
- mullvad lan set allow # This allows Docker to forward ports to localhost!
|
||||
- mullvad tunnel set ipv6 on
|
||||
- mullvad dns set default --block-ads --block-trackers --block-malware --block-gambling --block-adult-content --block-social-media
|
||||
- mullvad auto-connect set on
|
||||
@@ -121,3 +129,5 @@
|
||||
- mullvad beta-program set off
|
||||
become: true
|
||||
become_user: "{{ user }}"
|
||||
register: shell_check
|
||||
changed_when: shell_check.rc == 0
|
||||
@@ -24,8 +24,11 @@
|
||||
- name: Java
|
||||
ansible.builtin.include_tasks: tasks/workstation/linux/software/java.yml
|
||||
|
||||
- name: Docker
|
||||
ansible.builtin.include_tasks: tasks/workstation/linux/software/docker.yml
|
||||
|
||||
- name: LLM
|
||||
ansible.builtin.include_tasks: tasks/workstation/linux/software/llm.yml
|
||||
ansible.builtin.include_tasks: tasks/workstation/linux/software/ai/llm.yml
|
||||
|
||||
#######################
|
||||
#######################
|
||||
|
||||
Reference in new issue
Block a user