From 830d1933b1f7420fd5e743575cd4683ae6b00a91 Mon Sep 17 00:00:00 2001 From: Giacomo Bertolazzi <31776951+Berack96@users.noreply.github.com> Date: Sun, 26 Oct 2025 16:56:21 +0100 Subject: [PATCH] Revert "Aggiungere LLM Providers (#48)" (#51) This reverts commit 6ff2fcc2a7c61fd3768c4f0392dd5f71a4c87ffc. --- .env.example | 9 +-- configs.yaml | 12 ---- pyproject.toml | 4 -- src/app/configs.py | 121 +++++++++++++++++--------------------- src/app/interface/chat.py | 6 +- 5 files changed, 56 insertions(+), 96 deletions(-) diff --git a/.env.example b/.env.example index b999e0e..694300e 100644 --- a/.env.example +++ b/.env.example @@ -5,14 +5,7 @@ # https://makersuite.google.com/app/apikey GOOGLE_API_KEY= -# https://platform.openai.com/settings/organization/api-keys -OPENAI_API_KEY= -# https://admin.mistral.ai/organization/api-keys -MISTRAL_API_KEY= -# https://platform.deepseek.com/api_keys -DEEPSEEK_API_KEY= -# https://console.x.ai/team/%TEAM_ID%/api-keys -XAI_API_KEY= + ############################################################################### # Configurazioni per gli agenti di mercato ############################################################################### diff --git a/configs.yaml b/configs.yaml index 615fcf8..f83ae9e 100644 --- a/configs.yaml +++ b/configs.yaml @@ -19,18 +19,6 @@ models: label: Gemini # - name: gemini-2.0-pro # TODO Non funziona, ha un nome diverso # label: Gemini Pro - gpt: - - name: gpt-4o - label: OpenAIChat - deepseek: - - name: deepseek-chat - label: DeepSeek - xai: - - name: grok-3 - label: xAI - mistral: - - name: mistral-large-latest - label: Mistral ollama: - name: gpt-oss:latest label: Ollama GPT diff --git a/pyproject.toml b/pyproject.toml index 5e3bdb7..e7b2209 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,10 +24,6 @@ dependencies = [ # Modelli supportati e installati (aggiungere qui sotto quelli che si vogliono usare) "google-genai", "ollama", - "openai", - "mistralai", - "deepseek", - "xai", # API di exchange di criptovalute "coinbase-advanced-py", diff --git a/src/app/configs.py b/src/app/configs.py index edd3e39..45b5b01 100644 --- a/src/app/configs.py +++ b/src/app/configs.py @@ -10,10 +10,6 @@ from agno.tools import Toolkit from agno.models.base import Model from agno.models.google import Gemini from agno.models.ollama import Ollama -from agno.models.openai import OpenAIChat -from agno.models.mistral import MistralChat -from agno.models.deepseek import DeepSeek -from agno.models.xai import xAI log = logging.getLogger(__name__) @@ -23,6 +19,7 @@ class AppModel(BaseModel): name: str = "gemini-2.0-flash" label: str = "Gemini" model: type[Model] | None = None + def get_model(self, instructions: str) -> Model: """ Restituisce un'istanza del modello specificato. @@ -57,84 +54,22 @@ class AppModel(BaseModel): output_schema=output_schema ) - - class APIConfig(BaseModel): retry_attempts: int = 3 retry_delay_seconds: int = 2 - - class Strategy(BaseModel): name: str = "Conservative" label: str = "Conservative" description: str = "Focus on low-risk investments with steady returns." - - class ModelsConfig(BaseModel): gemini: list[AppModel] = [AppModel()] - gpt: list[AppModel] = [AppModel(name="gpt-4o", label="OpenAIChat")] - mistral: list[AppModel] = [AppModel(name="mistral-large-latest", label="Mistral")] - deepseek: list[AppModel] = [AppModel(name="deepseek-chat", label="DeepSeek")] - xai: list[AppModel] = [AppModel(name="grok-3", label="xAI")] ollama: list[AppModel] = [] @property def all_models(self) -> list[AppModel]: - return self.gemini + self.ollama + self.gpt + self.mistral + self.deepseek + self.xai - - def validate_models(self) -> None: - """ - Validate the configured models for each provider. - """ - self.__validate_online_models(self.gemini, clazz=Gemini, key="GOOGLE_API_KEY") - self.__validate_online_models(self.gpt, clazz=OpenAIChat, key="OPENAI_API_KEY") - self.__validate_online_models(self.mistral, clazz=MistralChat, key="MISTRAL_API_KEY") - self.__validate_online_models(self.deepseek, clazz=DeepSeek, key="DEEPSEEK_API_KEY") - self.__validate_online_models(self.xai, clazz=xAI, key="XAI_API_KEY") - - self.__validate_ollama_models() - - def __validate_online_models(self, models: list[AppModel], clazz: type[Model], key: str | None = None) -> None: - """ - Validate models for online providers like Gemini. - Args: - models: list of AppModel instances to validate - clazz: class of the model (e.g. Gemini) - key: API key required for the provider (optional) - """ - if key and os.getenv(key) is None: - log.warning(f"No {key} set in environment variables for provider.") - models.clear() - return - - for model in models: - model.model = clazz - - def __validate_ollama_models(self) -> None: - """ - Validate models for the Ollama provider. - """ - try: - models_list = ollama.list() - availables = {model['model'] for model in models_list['models']} - not_availables: list[str] = [] - - for model in self.ollama: - if model.name in availables: - model.model = Ollama - else: - not_availables.append(model.name) - if not_availables: - log.warning(f"Ollama models not available: {not_availables}") - - self.ollama = [model for model in self.ollama if model.model] - - except Exception as e: - log.warning(f"Ollama is not running or not reachable: {e}") - - + return self.gemini + self.ollama class AgentsConfigs(BaseModel): strategy: str = "Conservative" @@ -183,7 +118,7 @@ class AppConfig(BaseModel): super().__init__(*args, **kwargs) self.set_logging_level() - self.models.validate_models() + self.validate_models() self._initialized = True def get_model_by_name(self, name: str) -> AppModel: @@ -251,3 +186,53 @@ class AppConfig(BaseModel): logger = logging.getLogger(logger_name) logger.handlers.clear() logger.propagate = True + + def validate_models(self) -> None: + """ + Validate the configured models for each provider. + """ + self.__validate_online_models("gemini", clazz=Gemini, key="GOOGLE_API_KEY") + self.__validate_ollama_models() + + def __validate_online_models(self, provider: str, clazz: type[Model], key: str | None = None) -> None: + """ + Validate models for online providers like Gemini. + Args: + provider: name of the provider (e.g. "gemini") + clazz: class of the model (e.g. Gemini) + key: API key required for the provider (optional) + """ + if getattr(self.models, provider) is None: + log.warning(f"No models configured for provider '{provider}'.") + + models: list[AppModel] = getattr(self.models, provider) + if key and os.getenv(key) is None: + log.warning(f"No {key} set in environment variables for {provider}.") + models.clear() + return + + for model in models: + model.model = clazz + + def __validate_ollama_models(self) -> None: + """ + Validate models for the Ollama provider. + """ + try: + models_list = ollama.list() + availables = {model['model'] for model in models_list['models']} + not_availables: list[str] = [] + + for model in self.models.ollama: + if model.name in availables: + model.model = Ollama + else: + not_availables.append(model.name) + if not_availables: + log.warning(f"Ollama models not available: {not_availables}") + + self.models.ollama = [model for model in self.models.ollama if model.model] + + except Exception as e: + log.warning(f"Ollama is not running or not reachable: {e}") + diff --git a/src/app/interface/chat.py b/src/app/interface/chat.py index 37529f4..150197b 100644 --- a/src/app/interface/chat.py +++ b/src/app/interface/chat.py @@ -83,15 +83,13 @@ class ChatManager: label="Modello da usare" ) provider.change(fn=self.inputs.choose_team_leader, inputs=provider, outputs=None) - provider.value = self.inputs.team_leader_model.label - strategy = gr.Dropdown( + style = gr.Dropdown( choices=self.inputs.list_strategies_names(), type="index", label="Stile di investimento" ) - strategy.change(fn=self.inputs.choose_strategy, inputs=strategy, outputs=None) - strategy.value = self.inputs.strategy.label + style.change(fn=self.inputs.choose_strategy, inputs=style, outputs=None) chat = gr.ChatInterface( fn=self.gradio_respond