From 3412ff05b5a062e6a66cf3707e7cbfe4f1e7baf7 Mon Sep 17 00:00:00 2001 From: KyMAN <0kyman0@gmail.com> Date: Mon, 1 Jun 2026 17:20:17 +0200 Subject: [PATCH] #wip(py): Building PseudoLoRAs filter. --- JSON/AnP.settings.json | 23 ++++++++++++++----- Python/Controllers/AIController.py | 15 +++++++++++- Python/Drivers/OllamaDriver.py | 4 ++-- .../AIInterpretersManagerInterface.py | 8 ++++++- Python/Managers/AIInterpretersManager.py | 10 ++++++-- Python/Managers/PseudoLoRAsManager.py | 11 ++++++++- 6 files changed, 58 insertions(+), 13 deletions(-) diff --git a/JSON/AnP.settings.json b/JSON/AnP.settings.json index 286af31..f52a1af 100644 --- a/JSON/AnP.settings.json +++ b/JSON/AnP.settings.json @@ -86,17 +86,28 @@ "default_ai_interpreters" : { "anp_titles" : { "type" : "OllamaDriver", - "host" : "localhost", - "port" : 11434, + "url" : "http://localhost:11434/api/generate/", "model" : "gemma3:1b", - "pool" : "anp" + "pool" : "anp", + "stream" : false, + "format" : { + "type" : "array", + "items" : { + "type" : "string" + } + }, + "orders" : [ + "En base al mensaje del usuario y los Tokens que tengas de la conversación, selecciona posibles títulos que tengan que ver con ello.", + "Devuelve una lista con los títulos seleccionados, sin ningún otro texto.", + "Si el mensaje del usuario no tiene relación con ningún título, devuelve una lista vacía." + ] }, "anp_responses" : { "type" : "OllamaDriver", - "host" : "localhost", - "port" : 11434, + "url" : "http://localhost:11434/api/generate/", "model" : "gemma4:e4b", - "pool" : "anp" + "pool" : "anp", + "stream" : true } }, "AnP_AIInterpretersManager_end" : null, diff --git a/Python/Controllers/AIController.py b/Python/Controllers/AIController.py index 0c2f5f8..177a188 100644 --- a/Python/Controllers/AIController.py +++ b/Python/Controllers/AIController.py @@ -4,8 +4,8 @@ from typing import Self, Any, Callable from Abstracts.ModelAbstract import ModelAbstract from Abstracts.ControllerAbstract import ControllerAbstract -from Interfaces.Application.AnPInterface import AnPInterface from Models.RequestModel import RequestModel +from Models.PseudoLoRAModel import PseudoLoRAModel class AIController(ControllerAbstract, ModelAbstract): @@ -17,6 +17,19 @@ class AIController(ControllerAbstract, ModelAbstract): # def __get_data(self:Self, request:RequestModel, callback:Callable[..., Any|None]) -> None: # self.anp.pseudoloras.get("anp_titles") + def __filter_loras_callback() + + def __filter_loras(self:Self, message:str, loras:list[PseudoLoRAModel], keys:list[str]) -> None: + + has_keys:bool = len(keys) > 0 + + self.anp.ai_interpreters.request("anp_titles", None, "# Títulos\n\n" + "\n".join( + "- " + lora.title + "" for lora in loras if not has_keys or lora.key in keys + ) + "\n\n# Mensaje\n\n" + message, lambda id, response:None, []) + + def get_pseudoloras(self:Self, request:RequestModel) -> None: + pass + def test(self:Self, request:RequestModel) -> None: self.anp.ai_interpreters.request("anp_titles", None, request.get("message", "Hola"), lambda id, response: print((id, response.response))) request.set_response({ diff --git a/Python/Drivers/OllamaDriver.py b/Python/Drivers/OllamaDriver.py index 88004c4..25b646c 100644 --- a/Python/Drivers/OllamaDriver.py +++ b/Python/Drivers/OllamaDriver.py @@ -23,8 +23,8 @@ class OllamaDriver(AIInterpretersAbstract, ModelAbstract): def request(self:Self, session:int|None, message:str, - orders:list[str] = [], - callback:Optional[Callable[[int, AIResponseModel], None]] = None + callback:Optional[Callable[[int, AIResponseModel], None]] = None, + orders:list[str] = [] ) -> tuple[int|None, AIResponseModel]: response:Response diff --git a/Python/Interfaces/Managers/AIInterpretersManagerInterface.py b/Python/Interfaces/Managers/AIInterpretersManagerInterface.py index 4098c5e..7cf3c61 100644 --- a/Python/Interfaces/Managers/AIInterpretersManagerInterface.py +++ b/Python/Interfaces/Managers/AIInterpretersManagerInterface.py @@ -23,7 +23,13 @@ class AIInterpretersManagerInterface(ABC): def remove(self:Self, keys:Optional[str|list[str]] = None) -> None:pass @abstractmethod - def request(self:Self, key:str, session:int|None, message:str, callback:Callable[[int, AIResponseModel], None]) -> int|None:pass + def request(self:Self, + key:str, + session:int|None, + message:str, + callback:Callable[[int, AIResponseModel], None], + orders:list[str] = [] + ) -> int|None:pass @abstractmethod def cancel_request(self:Self, key:str, id:int) -> None:pass \ No newline at end of file diff --git a/Python/Managers/AIInterpretersManager.py b/Python/Managers/AIInterpretersManager.py index cfea818..57400f0 100644 --- a/Python/Managers/AIInterpretersManager.py +++ b/Python/Managers/AIInterpretersManager.py @@ -88,7 +88,13 @@ class AIInterpretersManager: if not has_interpreters and pool in self.__pool_requests: del self.__pool_requests[pool] - def request(self:Self, key:str, session:int|None, message:str, callback:Callable[[int, AIResponseModel], None]) -> int|None: + def request(self:Self, + key:str, + session:int|None, + message:str, + callback:Callable[[int, AIResponseModel], None], + orders:list[str] = [] + ) -> int|None: i:int|None = None @@ -96,7 +102,7 @@ class AIInterpretersManager: pool:str = self.__interpreters[key].pool - i = self.__pool_requests[pool].add(self.__interpreters[key], session, message, callback) + i = self.__pool_requests[pool].add(self.__interpreters[key], session, message, callback, orders) self.__pool_requests[pool].execute() return i diff --git a/Python/Managers/PseudoLoRAsManager.py b/Python/Managers/PseudoLoRAsManager.py index 8d6c2e3..9f8e4b4 100644 --- a/Python/Managers/PseudoLoRAsManager.py +++ b/Python/Managers/PseudoLoRAsManager.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- -from typing import Self, Any, Sequence, Callable +from typing import Self, Any, Sequence, Callable, Optional from Interfaces.Application.AnPInterface import AnPInterface from Models.PseudoLoRAModel import PseudoLoRAModel from Utils.Common import Common @@ -89,6 +89,15 @@ class PseudoLoRAsManager: for lora in self.__loras: lora.clean_cache() + def get_asynchronous(self:Self, + each_callback:Callable[[list[PseudoLoRAModel], list[PseudoLoRAModel], Callable[[list[PseudoLoRAModel]], None]], bool], + end_callback:Callable[[list[PseudoLoRAModel]], None], + keys:list[str] = [], + loras:Optional[list[PseudoLoRAModel]] = None, + results:list[PseudoLoRAModel] = [] + ) -> None: + Common.execute(each_callback, ) + def get(self:Self, callback:Callable[[list[PseudoLoRAModel]], bool], keys:list[str] = []) -> list[tuple[str, str]]: next:list[PseudoLoRAModel] = []