Spaces:
Running
Running
| """ | |
| Summarization tool: calls LLM to produce a concise summary of any text block. | |
| """ | |
| from tools.base_tool import BaseTool, ToolResult | |
| from services.llm_service import LLMService | |
| from utils.logger import get_logger | |
| logger = get_logger("summarize_tool") | |
| SYSTEM = ( | |
| "You are a precise scientific summarizer. " | |
| "Return a concise, factual summary in 3-5 sentences. " | |
| "Preserve key findings, methods, and numbers." | |
| ) | |
| class SummarizeTool(BaseTool): | |
| name = "summarize" | |
| description = "Produce a concise LLM summary of a given text block." | |
| def __init__(self, llm: LLMService): | |
| self.llm = llm | |
| async def run(self, text: str, max_words: int = 150) -> ToolResult: | |
| if not text or not text.strip(): | |
| return self._err("Empty text provided to summarize tool.") | |
| prompt = f"Summarize the following text in at most {max_words} words:\n\n{text}" | |
| try: | |
| summary = await self.llm.complete(SYSTEM, prompt) | |
| return self._ok(summary.strip()) | |
| except Exception as e: | |
| logger.error(f"Summarize tool failed: {e}") | |
| return self._err(str(e)) | |