From 166d20f0222a5cd0deaaceb855e0a5f56db2406c Mon Sep 17 00:00:00 2001 From: danipiza Date: Thu, 26 Feb 2026 07:46:27 +0100 Subject: [PATCH 1/4] [#24213] Docker fixes first approach Signed-off-by: danipiza --- src/vulcanai/console/console.py | 23 +++++++++++++++++++++-- src/vulcanai/tools/embedder.py | 6 ++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/vulcanai/console/console.py b/src/vulcanai/console/console.py index dcd5afd..9b9cea2 100644 --- a/src/vulcanai/console/console.py +++ b/src/vulcanai/console/console.py @@ -16,10 +16,12 @@ import argparse import asyncio +import os import sys import threading import pyperclip # To paste the clipboard into the terminal +from textual import constants as textual_constants from textual import events, work from textual.app import App, ComposeResult from textual.binding import Binding @@ -56,6 +58,8 @@ class VulcanConsole(App): # Two panels: left (log + input) and right (history + variables) # Right panel: 48 characters length # Left panel: fills remaining space + #_vulcanai_bg_color = "#121212" # TODO. danip + _vulcanai_bg_color = "#121212" CSS = """ Screen { layout: horizontal; @@ -66,6 +70,7 @@ class VulcanConsole(App): width: 100%; height: 100%; overflow: hidden hidden; + color: #ffffff; } #left { @@ -78,6 +83,7 @@ class VulcanConsole(App): width: 48; layout: vertical; border: tall #56AA08; + background: __VULCANAI_BG__; padding: 0; overflow: hidden hidden; } @@ -100,6 +106,8 @@ class VulcanConsole(App): #cmd { dock: bottom; + background: __VULCANAI_BG__; + color: __VULCANAI_BG__; } #history_title { @@ -112,13 +120,22 @@ class VulcanConsole(App): height: 1fr; margin: 1; scrollbar-size-vertical: 0; - scrollbar-size-horizontal: 0; + scrollbar-size-horizontal: 0;ach) } #history { width: 100%; + background: __VULCANAI_BG__; + } + + #history_title { + background: __VULCANAI_BG__; + } + + #variables { + background: __VULCANAI_BG__; } - """ + """.replace("__VULCANAI_BG__", _vulcanai_bg_color) # Bindings for the console BINDINGS = [ @@ -140,6 +157,8 @@ def __init__( user_context: str = "", main_node=None, ): + os.environ.setdefault("COLORTERM", "truecolor") + textual_constants.COLOR_SYSTEM = "truecolor" super().__init__() # Textual lib # -- Main variables -- diff --git a/src/vulcanai/tools/embedder.py b/src/vulcanai/tools/embedder.py index d8c4e2c..76d9a2f 100644 --- a/src/vulcanai/tools/embedder.py +++ b/src/vulcanai/tools/embedder.py @@ -12,7 +12,13 @@ # See the License for the specific language governing permissions and # limitations under the License. +import os + import numpy as np + +# Keep Hugging Face download progress bars out of redirected Textual stdout/stderr. +os.environ.setdefault("HF_HUB_DISABLE_PROGRESS_BARS", "1") + from sentence_transformers import SentenceTransformer From f9285dc71f77da019e5ecbdd1b3a2cfb3baf272d Mon Sep 17 00:00:00 2001 From: danipiza Date: Thu, 26 Feb 2026 11:40:45 +0100 Subject: [PATCH 2/4] [#24213] Removed unnecessary background + solved textual log colors error Signed-off-by: danipiza --- src/vulcanai/console/console.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/vulcanai/console/console.py b/src/vulcanai/console/console.py index 9b9cea2..d1c56ed 100644 --- a/src/vulcanai/console/console.py +++ b/src/vulcanai/console/console.py @@ -58,8 +58,6 @@ class VulcanConsole(App): # Two panels: left (log + input) and right (history + variables) # Right panel: 48 characters length # Left panel: fills remaining space - #_vulcanai_bg_color = "#121212" # TODO. danip - _vulcanai_bg_color = "#121212" CSS = """ Screen { layout: horizontal; @@ -83,7 +81,6 @@ class VulcanConsole(App): width: 48; layout: vertical; border: tall #56AA08; - background: __VULCANAI_BG__; padding: 0; overflow: hidden hidden; } @@ -95,6 +92,7 @@ class VulcanConsole(App): border: tall #333333; scrollbar-size-vertical: 0; scrollbar-size-horizontal: 0; + color: #ffffff; } #llm_spinner { @@ -106,36 +104,35 @@ class VulcanConsole(App): #cmd { dock: bottom; - background: __VULCANAI_BG__; - color: __VULCANAI_BG__; + color: #ffffff; } #history_title { content-align: center middle; margin: 0; padding: 0; + color: #ffffff; } #history_scroll { height: 1fr; margin: 1; scrollbar-size-vertical: 0; - scrollbar-size-horizontal: 0;ach) + scrollbar-size-horizontal: 0; } #history { width: 100%; - background: __VULCANAI_BG__; } #history_title { - background: __VULCANAI_BG__; + color: #ffffff; } #variables { - background: __VULCANAI_BG__; + color: #ffffff; } - """.replace("__VULCANAI_BG__", _vulcanai_bg_color) + """ # Bindings for the console BINDINGS = [ From 9d956ac0c8a078ad0ec85662b91b5c0463b1ed10 Mon Sep 17 00:00:00 2001 From: danipiza Date: Thu, 26 Feb 2026 15:34:29 +0100 Subject: [PATCH 3/4] [#24213] Added info message for Hugging Face loading/downloading model Signed-off-by: danipiza --- src/vulcanai/tools/embedder.py | 23 ++++++++++++++++++++++- src/vulcanai/tools/tool_registry.py | 2 +- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/vulcanai/tools/embedder.py b/src/vulcanai/tools/embedder.py index 76d9a2f..4a66660 100644 --- a/src/vulcanai/tools/embedder.py +++ b/src/vulcanai/tools/embedder.py @@ -13,6 +13,7 @@ # limitations under the License. import os +from typing import Optional import numpy as np @@ -21,9 +22,29 @@ from sentence_transformers import SentenceTransformer +from vulcanai.console.logger import VulcanAILogger + +_HF_DOWNLOAD_INFO_PRINTED = False + + +def info_msg_hf_model_loading(model_name: str, logger: Optional[VulcanAILogger] = None) -> None: + global _HF_DOWNLOAD_INFO_PRINTED + + if _HF_DOWNLOAD_INFO_PRINTED: + return + + msg = f"Hugging Face is loading '{model_name}'. If the model is not cached yet, files are being downloaded..." + if logger is not None: + logger.log_console(msg) + else: + VulcanAILogger.log_console(msg) + + _HF_DOWNLOAD_INFO_PRINTED = True + class SBERTEmbedder: - def __init__(self, model_name="all-MiniLM-L6-v2"): + def __init__(self, model_name="all-MiniLM-L6-v2", logger: Optional[VulcanAILogger] = None): + info_msg_hf_model_loading(model_name, logger) self.model = SentenceTransformer(model_name) def embed(self, text: str) -> np.ndarray: diff --git a/src/vulcanai/tools/tool_registry.py b/src/vulcanai/tools/tool_registry.py index 686c8af..901f442 100644 --- a/src/vulcanai/tools/tool_registry.py +++ b/src/vulcanai/tools/tool_registry.py @@ -86,7 +86,7 @@ def __init__(self, embedder=None, logger=None): # Dictionary of deactivated_tools (name -> tool instance) self.deactivated_tools: Dict[str, ITool] = {} # Embedding model for tool metadata - self.embedder = embedder or SBERTEmbedder() + self.embedder = embedder or SBERTEmbedder(logger=self.logger) # Simple in-memory index of (name, embedding) self._index: list[Tuple[str, np.ndarray]] = [] # List of modules where tools can be loaded from From a837d771f7c0f27c9e01fd7570f26354b0b9d99b Mon Sep 17 00:00:00 2001 From: danipiza Date: Thu, 5 Mar 2026 11:11:31 +0100 Subject: [PATCH 4/4] [#24213] Applied revision Signed-off-by: danipiza --- src/vulcanai/console/console.py | 10 +++++----- src/vulcanai/tools/embedder.py | 16 +--------------- 2 files changed, 6 insertions(+), 20 deletions(-) diff --git a/src/vulcanai/console/console.py b/src/vulcanai/console/console.py index d1c56ed..064ceab 100644 --- a/src/vulcanai/console/console.py +++ b/src/vulcanai/console/console.py @@ -68,7 +68,6 @@ class VulcanConsole(App): width: 100%; height: 100%; overflow: hidden hidden; - color: #ffffff; } #left { @@ -125,10 +124,6 @@ class VulcanConsole(App): width: 100%; } - #history_title { - color: #ffffff; - } - #variables { color: #ffffff; } @@ -154,8 +149,13 @@ def __init__( user_context: str = "", main_node=None, ): + # Used to set the same textual colors in a docker container os.environ.setdefault("COLORTERM", "truecolor") textual_constants.COLOR_SYSTEM = "truecolor" + + # Keep Hugging Face download progress bars out of redirected Textual stdout/stderr. + os.environ.setdefault("HF_HUB_DISABLE_PROGRESS_BARS", "1") + super().__init__() # Textual lib # -- Main variables -- diff --git a/src/vulcanai/tools/embedder.py b/src/vulcanai/tools/embedder.py index 4a66660..65fe764 100644 --- a/src/vulcanai/tools/embedder.py +++ b/src/vulcanai/tools/embedder.py @@ -12,34 +12,20 @@ # See the License for the specific language governing permissions and # limitations under the License. -import os from typing import Optional import numpy as np - -# Keep Hugging Face download progress bars out of redirected Textual stdout/stderr. -os.environ.setdefault("HF_HUB_DISABLE_PROGRESS_BARS", "1") - from sentence_transformers import SentenceTransformer from vulcanai.console.logger import VulcanAILogger -_HF_DOWNLOAD_INFO_PRINTED = False - def info_msg_hf_model_loading(model_name: str, logger: Optional[VulcanAILogger] = None) -> None: - global _HF_DOWNLOAD_INFO_PRINTED - - if _HF_DOWNLOAD_INFO_PRINTED: - return - msg = f"Hugging Face is loading '{model_name}'. If the model is not cached yet, files are being downloaded..." if logger is not None: logger.log_console(msg) else: - VulcanAILogger.log_console(msg) - - _HF_DOWNLOAD_INFO_PRINTED = True + VulcanAILogger.default().log_console(msg) class SBERTEmbedder: