From 26e6b89229aedc4e14c72bc36194362cc24dee34 Mon Sep 17 00:00:00 2001 From: Folzo Date: Sun, 12 Apr 2026 13:46:20 +0200 Subject: [PATCH] fix: Use Pydantic Valves pattern for OpenWebUI tool config - Add BaseModel Valves class with configurable parameters - beszel_url, beszel_user, beszel_password as configurable valves - Matches ACE Step tool pattern for UI configuration --- docs/TOOL-BESZEL-OPENWEBUI.md | 85 ++++++++++++++++++++--------------- 1 file changed, 50 insertions(+), 35 deletions(-) diff --git a/docs/TOOL-BESZEL-OPENWEBUI.md b/docs/TOOL-BESZEL-OPENWEBUI.md index 1716b45..33dae76 100644 --- a/docs/TOOL-BESZEL-OPENWEBUI.md +++ b/docs/TOOL-BESZEL-OPENWEBUI.md @@ -11,52 +11,53 @@ Permet à Effi d'accéder aux métriques système de FolzoCorp, EffiServer et NA 3. **Description**: `Monitor system resources via Beszel. Usage: get_all_stats(), get_system_stats("folzocorp"), check_alerts("folzocorp"), get_gpu_status("folzocorp"), can_run_comfyui()` 4. **Coller le code ci-dessous** 5. **Save and Activate** - -## Configuration - -Pour modifier les paramètres, modifie les variables en haut du code: -- `BESZEL_URL`: URL du hub Beszel -- `BESZEL_USER`: Username admin -- `BESZEL_PASSWORD`: Password admin +6. **Configurer les variables** via la roue crantée (Vannes) ## Tool Code ```python import requests - -# Configuration - MODIFIER ICI -BESZEL_URL = "http://192.168.1.25:8090" -BESZEL_USER = "admin" -BESZEL_PASSWORD = "ton_password_beszel" +from pydantic import BaseModel, Field class Tools: + class Valves(BaseModel): + beszel_url: str = Field( + default="http://192.168.1.25:8090", + description="Beszel Hub URL", + ) + beszel_user: str = Field( + default="admin", + description="Beszel username", + ) + beszel_password: str = Field( + default="", + description="Beszel password", + ) + def __init__(self): - self.url = BESZEL_URL - self.username = BESZEL_USER - self.password = BESZEL_PASSWORD - self.token = None + self.valves = self.Valves() def _login(self): try: response = requests.post( - f"{self.url}/api/auth/login", - json={"identity": self.username, "password": self.password}, + f"{self.valves.beszel_url}/api/auth/login", + json={"identity": self.valves.beszel_user, "password": self.valves.beszel_password}, timeout=10 ) if response.status_code == 200: - self.token = response.json().get("token") - return True - return False + return response.json().get("token") + return None except Exception: - return False + return None def _get_systems(self): - if not self.token and not self._login(): + token = self._login() + if not token: return None try: - headers = {"Authorization": f"Bearer {self.token}"} - response = requests.get(f"{self.url}/api/systems", headers=headers, timeout=10) + headers = {"Authorization": f"Bearer {token}"} + response = requests.get(f"{self.valves.beszel_url}/api/systems", headers=headers, timeout=10) if response.status_code == 200: return response.json().get("items", []) return None @@ -64,12 +65,13 @@ class Tools: return None def _get_system_stats(self, system_id): - if not self.token and not self._login(): + token = self._login() + if not token: return None try: - headers = {"Authorization": f"Bearer {self.token}"} + headers = {"Authorization": f"Bearer {token}"} response = requests.get( - f"{self.url}/api/systems/{system_id}/stats", + f"{self.valves.beszel_url}/api/systems/{system_id}/stats", headers=headers, timeout=10 ) @@ -149,6 +151,7 @@ class Tools: return alerts def get_all_stats(self): + """Get stats from all monitored systems.""" systems = self._get_systems() if not systems: @@ -167,7 +170,8 @@ class Tools: return "\n\n".join(results) - def get_system_stats(self, system_name): + def get_system_stats(self, system_name: str): + """Get stats for a specific system. Options: folzocorp, effiserver, synology-nas""" systems = self._get_systems() if not systems: @@ -192,7 +196,8 @@ class Tools: available = [s.get('name', s.get('id')) for s in systems] return f"[ERROR] System '{system_name}' not found. Available: {', '.join(available)}" - def check_alerts(self, system_name="all"): + def check_alerts(self, system_name: str = "all"): + """Check for resource alerts. Use 'all' or specific system name.""" systems = self._get_systems() if not systems: @@ -219,7 +224,8 @@ class Tools: return "\n".join(alerts) - def get_gpu_status(self, system_name="folzocorp"): + def get_gpu_status(self, system_name: str = "folzocorp"): + """Get GPU status for a specific system. Most useful for folzocorp (AMD RX 7800 XT).""" systems = self._get_systems() if not systems: @@ -260,6 +266,7 @@ class Tools: return "\n".join(lines) def can_run_comfyui(self): + """Check if there's enough RAM and VRAM to run ComfyUI.""" stats = self._get_system_stats("folzocorp") if not stats: return "[ERROR] Cannot get FolzoCorp stats" @@ -291,15 +298,15 @@ def get_all_stats(): tools = Tools() return tools.get_all_stats() -def get_system_stats(system_name): +def get_system_stats(system_name: str): tools = Tools() return tools.get_system_stats(system_name) -def check_alerts(system_name="all"): +def check_alerts(system_name: str = "all"): tools = Tools() return tools.check_alerts(system_name) -def get_gpu_status(system_name="folzocorp"): +def get_gpu_status(system_name: str = "folzocorp"): tools = Tools() return tools.get_gpu_status(system_name) @@ -327,6 +334,14 @@ can_run_comfyui() | EffiServer | `effiserver` | None (Intel J5040) | | NAS Synology | `synology-nas` | Intel HD Graphics | +## Variables (Vannes) Configurables + +| Variable | Description | +|----------|-------------| +| `beszel_url` | URL du hub Beszel (défaut: http://192.168.1.25:8090) | +| `beszel_user` | Username admin (défaut: admin) | +| `beszel_password` | Mot de passe admin | + --- -*Created 12 April 2026 - Updated to use hardcoded config* +*Created 12 April 2026*