Agently / app /services /chat_executor.py
CI Deploy
Deploy 2026-07-03 12:00 UTC
9b72d5a
Raw
History Blame Contribute Delete
2.95 kB
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)