Spaces:
Sleeping
Sleeping
| """ | |
| Summarizer Agent Module | |
| ======================== | |
| Agent responsible for summarizing documents and content. | |
| """ | |
| from dataclasses import dataclass, field | |
| from typing import Any | |
| from .base import BaseAgent | |
| class SummarizerAgent(BaseAgent): | |
| """ | |
| Agent that summarizes documents and content. | |
| Takes a list of documents/text and produces a concise summary. | |
| """ | |
| role: str = "summarizer" | |
| tools: list[str] = field(default_factory=lambda: ["text_analysis", "summarization"]) | |
| async def run(self, input: dict[str, Any]) -> dict[str, Any]: | |
| """ | |
| Summarize the provided documents. | |
| Args: | |
| input: Dictionary with 'documents' key containing list of documents to summarize | |
| Returns: | |
| Dictionary with summary | |
| """ | |
| documents = input.get("documents", []) | |
| self.log(f"Summarizing {len(documents)} documents") | |
| summary = self._generate_summary(documents) | |
| return { | |
| "agent": "summarizer", | |
| "summary": summary, | |
| "document_count": len(documents) | |
| } | |
| def _generate_summary(self, documents: list[dict | str]) -> str: | |
| """ | |
| Generate a summary from the provided documents. | |
| Args: | |
| documents: List of documents (can be dicts with 'snippet'/'text' or strings) | |
| Returns: | |
| Summary string | |
| """ | |
| if not documents: | |
| return "No documents provided for summarization." | |
| # Extract text content from documents | |
| texts = [] | |
| for doc in documents: | |
| if isinstance(doc, dict): | |
| # Try common text fields | |
| text = doc.get("snippet") or doc.get("text") or doc.get("content") or "" | |
| if doc.get("title"): | |
| text = f"{doc['title']}: {text}" | |
| texts.append(text) | |
| elif isinstance(doc, str): | |
| texts.append(doc) | |
| # Generate summary (simplified - in production, use LLM) | |
| combined = " ".join(texts) | |
| # Create a simulated intelligent summary | |
| if len(combined) > 200: | |
| key_sentences = combined[:200] + "..." | |
| else: | |
| key_sentences = combined | |
| summary = ( | |
| f"Summary of {len(documents)} documents: " | |
| f"{key_sentences} " | |
| f"[Analysis based on {len(combined)} characters of source text]" | |
| ) | |
| return summary | |