From 81ef1aacf8d686bd057cea571638ad5263780c26 Mon Sep 17 00:00:00 2001 From: mikalai_biazruchka Date: Wed, 7 May 2025 17:03:12 +0300 Subject: [PATCH] Update max length concept (confluence as example) --- src/alita_tools/confluence/__init__.py | 8 ++++---- src/alita_tools/elitea_base.py | 7 ++++++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/alita_tools/confluence/__init__.py b/src/alita_tools/confluence/__init__.py index b5cff4fa..d21d443b 100644 --- a/src/alita_tools/confluence/__init__.py +++ b/src/alita_tools/confluence/__init__.py @@ -33,9 +33,9 @@ class ConfluenceToolkit(BaseToolkit): @staticmethod def toolkit_config_schema() -> BaseModel: + wrapper = ConfluenceAPIWrapper.model_construct() selected_tools = {x['name']: x['args_schema'].schema() for x in - ConfluenceAPIWrapper.model_construct().get_available_tools()} - ConfluenceToolkit.toolkit_max_length = get_max_toolkit_length(selected_tools) + wrapper.get_available_tools()} return create_model( name, base_url=(str, Field(description="Confluence URL", json_schema_extra={'configuration': True, 'configuration_title': True})), @@ -43,7 +43,7 @@ def toolkit_config_schema() -> BaseModel: api_key=(SecretStr, Field(description="API key", default=None, json_schema_extra={'secret': True, 'configuration': True})), username=(str, Field(description="Username", default=None, json_schema_extra={'configuration': True})), space=(str, Field(description="Space", default=None, json_schema_extra={'toolkit_name': True, - 'max_toolkit_length': ConfluenceToolkit.toolkit_max_length})), + 'max_toolkit_length': wrapper.get_max_toolkit_length()})), cloud=(bool, Field(description="Hosting Option", json_schema_extra={'configuration': True})), limit=(int, Field(description="Pages limit per request", default=5)), labels=(Optional[str], Field( @@ -85,7 +85,7 @@ def get_toolkit(cls, selected_tools: list[str] | None = None, toolkit_name: Opti if selected_tools is None: selected_tools = [] confluence_api_wrapper = ConfluenceAPIWrapper(**kwargs) - prefix = clean_string(toolkit_name, ConfluenceToolkit.toolkit_max_length) + TOOLKIT_SPLITTER if toolkit_name else '' + prefix = clean_string(toolkit_name, confluence_api_wrapper.get_max_toolkit_length()) + TOOLKIT_SPLITTER if toolkit_name else '' available_tools = confluence_api_wrapper.get_available_tools() tools = [] for tool in available_tools: diff --git a/src/alita_tools/elitea_base.py b/src/alita_tools/elitea_base.py index 78c4baf9..a3e71b77 100644 --- a/src/alita_tools/elitea_base.py +++ b/src/alita_tools/elitea_base.py @@ -3,7 +3,7 @@ import logging from typing import Any, Optional, List from pydantic import BaseModel, create_model, Field -from .utils import TOOLKIT_SPLITTER +from .utils import TOOLKIT_SPLITTER, get_max_toolkit_length logger = logging.getLogger(__name__) @@ -19,6 +19,11 @@ class BaseToolApiWrapper(BaseModel): + def get_max_toolkit_length(self): + """Calculates the maximum length of the toolkit name based on the selected tools per toolkit.""" + return get_max_toolkit_length({x['name']: x['args_schema'].schema() for x in + self.get_available_tools()}) + def get_available_tools(self): raise NotImplementedError("Subclasses should implement this method")