Spaces:
Sleeping
Sleeping
| from __future__ import annotations | |
| from app.core.config import get_settings | |
| from app.core.llm import build_llm | |
| from app.agent.agent import run_optimized_agent | |
| from app.tools.search import build_web_search_tool | |
| from app.tools.scraper import fetch_url | |
| from app.tools.image_tool import analyze_image | |
| from app.tools.wikipedia_tool import wikipedia_search | |
| from app.tools.arxiv_tool import arxiv_search | |
| from app.utils.logger import get_logger | |
| logger = get_logger(__name__) | |
| def _build_executor( | |
| temperature: float, | |
| max_results: int, | |
| tool_names: list[str] | None = None, | |
| model_name: str | None = None, | |
| max_iterations: int = 5, | |
| compress_chars: int = 1200, | |
| tool_output_limit: int = 1500, | |
| force_tools: bool = False, | |
| ) -> dict: | |
| settings = get_settings() | |
| available = { | |
| "web_search": build_web_search_tool(settings, max_results), | |
| "fetch_url": fetch_url, | |
| "analyze_image": analyze_image, | |
| "wikipedia": wikipedia_search, | |
| "arxiv": arxiv_search, | |
| } | |
| if tool_names: | |
| tools = [available[name] for name in tool_names if name in available] | |
| else: | |
| tools = [available["web_search"], available["fetch_url"], available["analyze_image"]] | |
| llm = build_llm(settings, temperature, tools, model_name=model_name) | |
| def run_fn(prompt: str, chat_history: str = "") -> tuple[str, list]: | |
| return run_optimized_agent( | |
| tools=tools, | |
| llm=llm, | |
| prompt=prompt, | |
| chat_history=chat_history, | |
| max_iterations=max_iterations, | |
| compress_chars=compress_chars, | |
| tool_output_limit=tool_output_limit, | |
| force_tools=force_tools, | |
| ) | |
| return { | |
| "tools": tools, | |
| "llm": llm, | |
| "run_fn": run_fn, | |
| "max_iterations": max_iterations, | |
| "compress_chars": compress_chars, | |
| "tool_output_limit": tool_output_limit, | |
| } | |
| def build_compressed_chat_executor( | |
| temperature: float, | |
| max_results: int, | |
| tool_names: list[str] | None = None, | |
| model_name: str | None = None, | |
| max_iterations: int = 5, | |
| compress_chars: int = 1200, | |
| tool_output_limit: int = 1500, | |
| force_tools: bool = False, | |
| ) -> dict: | |
| logger.info("Building chat executor (max_iterations=%d)", max_iterations) | |
| return _build_executor(temperature, max_results, tool_names, model_name, max_iterations, compress_chars, tool_output_limit, force_tools) | |
| def build_optimized_executor( | |
| temperature: float, | |
| max_results: int, | |
| tool_names: list[str] | None = None, | |
| model_name: str | None = None, | |
| max_iterations: int = 8, | |
| compress_chars: int = 1200, | |
| tool_output_limit: int = 1500, | |
| force_tools: bool = False, | |
| ) -> dict: | |
| logger.info("Building optimized executor (max_iterations=%d)", max_iterations) | |
| return _build_executor(temperature, max_results, tool_names, model_name, max_iterations, compress_chars, tool_output_limit, force_tools) | |