From df57b0cf43bb6ecf6da678ca51f66cb2d2fb201a Mon Sep 17 00:00:00 2001 From: Yiorgis Gozadinos Date: Fri, 6 Feb 2026 13:40:23 +0100 Subject: [PATCH] Remove SearchAgent & friends, consolidate duplicate models --- docs/agents.md | 21 +- haiku_rag_slim/haiku/rag/agents/__init__.py | 8 +- .../haiku/rag/agents/chat/__init__.py | 11 +- haiku_rag_slim/haiku/rag/agents/chat/agent.py | 9 +- .../haiku/rag/agents/chat/context.py | 21 +- .../haiku/rag/agents/chat/prompts.py | 25 - .../haiku/rag/agents/chat/search.py | 86 --- haiku_rag_slim/haiku/rag/agents/chat/state.py | 122 +--- haiku_rag_slim/haiku/rag/chat/app.py | 4 +- haiku_rag_slim/haiku/rag/tools/qa.py | 13 + tests/agents/chat/test_chat_agent.py | 174 +---- tests/agents/chat/test_context.py | 24 +- tests/agents/chat/test_state.py | 437 +----------- .../test_search_agent_deduplication.yaml | 601 ---------------- .../test_search_agent_no_results.yaml | 386 ----------- .../test_search_agent_with_context.yaml | 492 ------------- .../test_search_agent_with_filter.yaml | 488 ------------- ...test_search_agent_with_session_filter.yaml | 650 ------------------ 18 files changed, 81 insertions(+), 3491 deletions(-) delete mode 100644 haiku_rag_slim/haiku/rag/agents/chat/search.py delete mode 100644 tests/cassettes/test_chat_agent/test_search_agent_deduplication.yaml delete mode 100644 tests/cassettes/test_chat_agent/test_search_agent_no_results.yaml delete mode 100644 tests/cassettes/test_chat_agent/test_search_agent_with_context.yaml delete mode 100644 tests/cassettes/test_chat_agent/test_search_agent_with_filter.yaml delete mode 100644 tests/cassettes/test_chat_agent/test_search_agent_with_session_filter.yaml diff --git a/docs/agents.md b/docs/agents.md index 71ec3658..9ce9989c 100644 --- a/docs/agents.md +++ b/docs/agents.md @@ -56,7 +56,7 @@ The chat agent enables multi-turn conversational RAG. It maintains session state Key features: - **Session memory**: Previous Q/A pairs are used as context for follow-up questions -- **Query expansion**: SearchAgent generates multiple query variations for better recall +- **Query expansion**: Search toolset generates multiple query variations for better recall - **Document filtering**: Natural language document filtering ("search in document X about...") - **Confidence filtering**: Low-confidence answers are flagged @@ -85,13 +85,14 @@ See [Applications](apps.md#chat-tui) for the full TUI interface guide. ```python from haiku.rag.client import HaikuRAG -from haiku.rag.agents.chat import create_chat_agent, ChatDeps, ChatSessionState +from haiku.rag.agents.chat import create_chat_agent, ChatDeps +from haiku.rag.tools import ToolContext async with HaikuRAG(path_to_db) as client: - # Create agent and session - agent = create_chat_agent(config) - session = ChatSessionState() - deps = ChatDeps(client=client, config=config, session_state=session) + # Create agent with composed toolsets + context = ToolContext() + agent = create_chat_agent(config, client, context) + deps = ChatDeps(config=config, tool_context=context) # First question result = await agent.run("What is haiku.rag?", deps=deps) @@ -134,14 +135,16 @@ Q/A history is used to: When using the chat agent with AG-UI streaming, state is emitted under a namespaced key to avoid conflicts with other agents: ```python -from haiku.rag.agents.chat import AGUI_STATE_KEY, ChatDeps, ChatSessionState +from haiku.rag.agents.chat import AGUI_STATE_KEY, ChatDeps +from haiku.rag.tools import ToolContext # AGUI_STATE_KEY = "haiku.rag.chat" +context = ToolContext() +agent = create_chat_agent(config, client, context) deps = ChatDeps( - client=client, config=config, - session_state=ChatSessionState(), + tool_context=context, state_key=AGUI_STATE_KEY, # Enables namespaced state emission ) ``` diff --git a/haiku_rag_slim/haiku/rag/agents/__init__.py b/haiku_rag_slim/haiku/rag/agents/__init__.py index b69fe07f..2703d977 100644 --- a/haiku_rag_slim/haiku/rag/agents/__init__.py +++ b/haiku_rag_slim/haiku/rag/agents/__init__.py @@ -1,9 +1,7 @@ from haiku.rag.agents.chat import ( ChatDeps, ChatSessionState, - QAResponse, - SearchAgent, - SearchDeps, + QAHistoryEntry, create_chat_agent, ) from haiku.rag.agents.qa import QuestionAnswerAgent, get_qa_agent @@ -34,9 +32,7 @@ __all__ = [ "IterativePlanResult", # Chat "create_chat_agent", - "SearchAgent", "ChatDeps", "ChatSessionState", - "QAResponse", - "SearchDeps", + "QAHistoryEntry", ] diff --git a/haiku_rag_slim/haiku/rag/agents/chat/__init__.py b/haiku_rag_slim/haiku/rag/agents/chat/__init__.py index 2506da21..c089bbcf 100644 --- a/haiku_rag_slim/haiku/rag/agents/chat/__init__.py +++ b/haiku_rag_slim/haiku/rag/agents/chat/__init__.py @@ -8,30 +8,25 @@ from haiku.rag.agents.chat.context import ( summarize_session, update_session_context, ) -from haiku.rag.agents.chat.search import SearchAgent from haiku.rag.agents.chat.state import ( AGUI_STATE_KEY, ChatSessionState, - DocumentInfo, - DocumentListResponse, - QAResponse, - SearchDeps, SessionContext, ) from haiku.rag.tools.context import ToolContext +from haiku.rag.tools.document import DocumentInfo, DocumentListResponse +from haiku.rag.tools.qa import QAHistoryEntry __all__ = [ "AGUI_STATE_KEY", "create_chat_agent", "run_chat_agent", "trigger_background_summarization", - "SearchAgent", "ChatDeps", "ChatSessionState", "DocumentInfo", "DocumentListResponse", - "QAResponse", - "SearchDeps", + "QAHistoryEntry", "SessionContext", "ToolContext", "summarize_session", diff --git a/haiku_rag_slim/haiku/rag/agents/chat/agent.py b/haiku_rag_slim/haiku/rag/agents/chat/agent.py index b84e3150..05163962 100644 --- a/haiku_rag_slim/haiku/rag/agents/chat/agent.py +++ b/haiku_rag_slim/haiku/rag/agents/chat/agent.py @@ -14,16 +14,13 @@ from haiku.rag.agents.chat.prompts import CHAT_SYSTEM_PROMPT from haiku.rag.agents.chat.state import ( AGUI_STATE_KEY, ChatSessionState, - DocumentInfo, - QAResponse, - SearchDeps, SessionContext, emit_state_event, ) from haiku.rag.client import HaikuRAG from haiku.rag.config.models import AppConfig from haiku.rag.tools.context import ToolContext -from haiku.rag.tools.document import DocumentListResponse, create_document_toolset +from haiku.rag.tools.document import create_document_toolset from haiku.rag.tools.qa import ( QA_SESSION_NAMESPACE, QASessionState, @@ -275,10 +272,6 @@ __all__ = [ "trigger_background_summarization", "ChatDeps", "ChatSessionState", - "DocumentInfo", - "DocumentListResponse", - "QAResponse", - "SearchDeps", "SessionContext", "emit_state_event", "AGUI_STATE_KEY", diff --git a/haiku_rag_slim/haiku/rag/agents/chat/context.py b/haiku_rag_slim/haiku/rag/agents/chat/context.py index 966a9b03..07e76a01 100644 --- a/haiku_rag_slim/haiku/rag/agents/chat/context.py +++ b/haiku_rag_slim/haiku/rag/agents/chat/context.py @@ -6,12 +6,12 @@ from typing import TYPE_CHECKING from pydantic_ai import Agent from haiku.rag.agents.chat.prompts import SESSION_SUMMARY_PROMPT -from haiku.rag.agents.chat.state import ChatSessionState, QAResponse, SessionContext +from haiku.rag.agents.chat.state import ChatSessionState, SessionContext from haiku.rag.config.models import AppConfig from haiku.rag.utils import get_model if TYPE_CHECKING: - from haiku.rag.tools.qa import QASessionState + from haiku.rag.tools.qa import QAHistoryEntry, QASessionState @dataclass @@ -79,7 +79,7 @@ def get_cached_embedding(session_id: str, question: str) -> list[float] | None: async def summarize_session( - qa_history: list[QAResponse], + qa_history: list["QAHistoryEntry"], config: AppConfig, current_context: str | None = None, ) -> str: @@ -113,7 +113,7 @@ async def summarize_session( async def update_session_context( - qa_history: list[QAResponse], + qa_history: list["QAHistoryEntry"], config: AppConfig, session_state: ChatSessionState, ) -> None: @@ -143,7 +143,7 @@ async def update_session_context( cache_session_context(session_state.session_id, session_state.session_context) -def _format_qa_history(qa_history: list[QAResponse]) -> str: +def _format_qa_history(qa_history: list["QAHistoryEntry"]) -> str: """Format qa_history for input to summarization.""" lines: list[str] = [] for i, qa in enumerate(qa_history, 1): @@ -165,16 +165,7 @@ async def _update_context_background( ) -> None: """Background task to update session context after an ask.""" try: - # Convert QAHistoryEntry to QAResponse format for update_session_context - qa_history = [ - QAResponse( - question=entry.question, - answer=entry.answer, - confidence=entry.confidence, - citations=list(entry.citations), - ) - for entry in qa_session_state.qa_history - ] + qa_history = list(qa_session_state.qa_history) session_state = ChatSessionState( session_id=session_id, diff --git a/haiku_rag_slim/haiku/rag/agents/chat/prompts.py b/haiku_rag_slim/haiku/rag/agents/chat/prompts.py index 023352d7..6f5707ed 100644 --- a/haiku_rag_slim/haiku/rag/agents/chat/prompts.py +++ b/haiku_rag_slim/haiku/rag/agents/chat/prompts.py @@ -29,18 +29,6 @@ IMPORTANT - When user mentions a document in search/ask: Be friendly and conversational. When you use the "ask" tool, summarize the key findings for the user.""" -SEARCH_SYSTEM_PROMPT = """You are a search query optimizer. You MUST use the run_search tool to execute searches. - -For each user request: -1. Use the run_search tool with the original query -2. Use run_search again with 1-2 alternative keyword queries -3. Keep all queries SHORT (2-5 words) -4. After all tool calls complete, respond "Search complete" - -You can optionally specify a limit parameter (default 5). - -IMPORTANT: You must make actual tool calls. Do not output "run_search(...)" as text.""" - SESSION_SUMMARY_PROMPT = """You are a session summarizer. Given a conversation history of Q&A pairs (and optionally existing context), produce a structured summary that captures key information for future context. If a "Current Context" section is provided at the start of the input, incorporate that context into your summary. This might be initial background context from the user or a previous summary - build upon it rather than discard it. @@ -60,16 +48,3 @@ Rules: - Preserve document names/titles when mentioned in sources Output the summary directly in markdown format. Do not include meta-commentary about the summary itself.""" - -DOCUMENT_SUMMARY_PROMPT = """Generate a summary of the document content provided below. - -Start with a one-paragraph overview, then list the main topics covered, and highlight any key findings or conclusions. - -Guidelines: -- Aim for 1-2 paragraphs for short documents, 3-4 paragraphs for longer ones -- Focus on factual content and key information -- Do not include meta-commentary like "This document discusses..." or "The document covers..." -- Do not speculate beyond what's in the content - -Document content: -{content}""" diff --git a/haiku_rag_slim/haiku/rag/agents/chat/search.py b/haiku_rag_slim/haiku/rag/agents/chat/search.py deleted file mode 100644 index a6168539..00000000 --- a/haiku_rag_slim/haiku/rag/agents/chat/search.py +++ /dev/null @@ -1,86 +0,0 @@ -from pydantic_ai import Agent, RunContext - -from haiku.rag.agents.chat.prompts import SEARCH_SYSTEM_PROMPT -from haiku.rag.agents.chat.state import SearchDeps -from haiku.rag.client import HaikuRAG -from haiku.rag.config.models import AppConfig -from haiku.rag.store.models import SearchResult -from haiku.rag.utils import get_model - - -class SearchAgent: - """Agent that generates multiple queries and consolidates results.""" - - def __init__(self, client: HaikuRAG, config: AppConfig): - self._client = client - self._config = config - - model = get_model(config.qa.model, config) - self._agent: Agent[SearchDeps, str] = Agent( - model, - deps_type=SearchDeps, - output_type=str, - instructions=SEARCH_SYSTEM_PROMPT, - retries=3, - ) - - @self._agent.tool - async def run_search( - ctx: RunContext[SearchDeps], - query: str, - limit: int | None = None, - ) -> str: - """Run a single search query against the knowledge base. - - Args: - query: The search query - limit: Number of results to fetch (default: 5) - """ - effective_limit = limit or 5 - results = await ctx.deps.client.search( - query, limit=effective_limit, filter=ctx.deps.filter - ) - results = await ctx.deps.client.expand_context(results) - ctx.deps.search_results.extend(results) - - if not results: - return f"No results for: {query}" - return f"Found {len(results)} results for: {query}" - - async def search( - self, - query: str, - context: str | None = None, - filter: str | None = None, - limit: int | None = None, - ) -> list[SearchResult]: - """Execute search with query expansion and deduplication. - - Args: - query: The user's search request - context: Optional conversation context - filter: Optional SQL WHERE clause to filter documents - limit: Maximum number of results to return (default: config limit) - - Returns: - Deduplicated list of SearchResult sorted by score - """ - prompt = query - if context: - prompt = f"Context: {context}\n\nSearch request: {query}" - - deps = SearchDeps(client=self._client, config=self._config, filter=filter) - await self._agent.run(prompt, deps=deps) - - # Deduplicate by chunk_id, keeping highest score - seen: dict[str, SearchResult] = {} - for result in deps.search_results: - chunk_id = result.chunk_id or "" - if chunk_id not in seen or result.score > seen[chunk_id].score: - seen[chunk_id] = result - - # Sort by score descending and apply limit - effective_limit = limit or self._config.search.limit - return sorted(seen.values(), key=lambda r: r.score, reverse=True)[ - :effective_limit - ] diff --git a/haiku_rag_slim/haiku/rag/agents/chat/state.py b/haiku_rag_slim/haiku/rag/agents/chat/state.py index 21ee0496..01efb524 100644 --- a/haiku_rag_slim/haiku/rag/agents/chat/state.py +++ b/haiku_rag_slim/haiku/rag/agents/chat/state.py @@ -1,65 +1,18 @@ -from dataclasses import dataclass, field from datetime import datetime -from typing import Any +from typing import TYPE_CHECKING import jsonpatch from ag_ui.core import EventType, StateDeltaEvent from pydantic import BaseModel, Field -from haiku.rag.agents.research.models import Citation, SearchAnswer -from haiku.rag.client import HaikuRAG -from haiku.rag.config.models import AppConfig -from haiku.rag.store.models import SearchResult +from haiku.rag.agents.research.models import Citation -MAX_QA_HISTORY = 50 +if TYPE_CHECKING: + from haiku.rag.tools.qa import QAHistoryEntry AGUI_STATE_KEY = "haiku.rag.chat" -class QAResponse(BaseModel): - """A Q&A pair from conversation history with citations.""" - - question: str - answer: str - confidence: float = 0.9 - citations: list[Citation] = [] - question_embedding: list[float] | None = Field(default=None, exclude=True) - - @property - def sources(self) -> list[str]: - """Source names for display.""" - return list( - dict.fromkeys(c.document_title or c.document_uri for c in self.citations) - ) - - def to_search_answer(self) -> SearchAnswer: - """Convert to SearchAnswer for research graph context.""" - return SearchAnswer( - query=self.question, - answer=self.answer, - confidence=self.confidence, - cited_chunks=[c.chunk_id for c in self.citations], - citations=self.citations, - ) - - -class DocumentInfo(BaseModel): - """Document info for list_documents response.""" - - title: str - uri: str - created: str - - -class DocumentListResponse(BaseModel): - """Response from list_documents tool.""" - - documents: list[DocumentInfo] - page: int - total_pages: int - total_documents: int - - class SessionContext(BaseModel): """Compressed summary of conversation history for research graph.""" @@ -77,7 +30,7 @@ class ChatSessionState(BaseModel): session_id: str = "" initial_context: str | None = None citations: list[Citation] = [] - qa_history: list[QAResponse] = [] + qa_history: list["QAHistoryEntry"] = [] session_context: SessionContext | None = None document_filter: list[str] = [] citation_registry: dict[str, int] = {} @@ -97,69 +50,14 @@ class ChatSessionState(BaseModel): return new_index -@dataclass -class ChatDeps: - """Dependencies for chat agent. +def _rebuild_models(qa_history_entry_cls: type) -> None: + """Resolve ChatSessionState forward reference to QAHistoryEntry. - Implements StateHandler protocol for AG-UI state management. + Must be called after QAHistoryEntry is defined, passing the class. """ - - client: HaikuRAG - config: AppConfig - search_results: list[SearchResult] | None = None - session_state: ChatSessionState = field( - default_factory=lambda: ChatSessionState(session_id="") + ChatSessionState.model_rebuild( + _types_namespace={"QAHistoryEntry": qa_history_entry_cls} ) - state_key: str | None = None - - @property - def state(self) -> dict[str, Any]: - """Get current state for AG-UI protocol.""" - snapshot = self.session_state.model_dump() - if self.state_key: - return {self.state_key: snapshot} - return snapshot - - @state.setter - def state(self, value: dict[str, Any] | None) -> None: - """Set state from AG-UI protocol.""" - if value is None: - return - # Extract from namespaced key if present - state_data: dict[str, Any] = value - if self.state_key and self.state_key in value: - nested = value[self.state_key] - if isinstance(nested, dict): - state_data = nested - # Update session_state from incoming state - if "qa_history" in state_data: - self.session_state.qa_history = [ - QAResponse(**qa) if isinstance(qa, dict) else qa - for qa in state_data.get("qa_history", []) - ] - if "citations" in state_data: - self.session_state.citations = [ - Citation(**c) if isinstance(c, dict) else c - for c in state_data.get("citations", []) - ] - if state_data.get("session_id"): - self.session_state.session_id = state_data["session_id"] - if "document_filter" in state_data: - self.session_state.document_filter = state_data.get("document_filter", []) - if "citation_registry" in state_data: - self.session_state.citation_registry = state_data["citation_registry"] - if "initial_context" in state_data: - self.session_state.initial_context = state_data.get("initial_context") - - -@dataclass -class SearchDeps: - """Dependencies for search agent.""" - - client: HaikuRAG - config: AppConfig - filter: str | None = None - search_results: list[SearchResult] = field(default_factory=list) def emit_state_event( diff --git a/haiku_rag_slim/haiku/rag/chat/app.py b/haiku_rag_slim/haiku/rag/chat/app.py index 87ae91d7..0ebbcd00 100644 --- a/haiku_rag_slim/haiku/rag/chat/app.py +++ b/haiku_rag_slim/haiku/rag/chat/app.py @@ -203,10 +203,10 @@ class ChatApp(App): for c in chat_state["citations"] ] if "qa_history" in chat_state: - from haiku.rag.agents.chat.state import QAResponse + from haiku.rag.tools.qa import QAHistoryEntry self.session_state.qa_history = [ - QAResponse(**qa) if isinstance(qa, dict) else qa + QAHistoryEntry(**qa) if isinstance(qa, dict) else qa for qa in chat_state["qa_history"] ] if "session_context" in chat_state: diff --git a/haiku_rag_slim/haiku/rag/tools/qa.py b/haiku_rag_slim/haiku/rag/tools/qa.py index ac899ef8..4385ed3c 100644 --- a/haiku_rag_slim/haiku/rag/tools/qa.py +++ b/haiku_rag_slim/haiku/rag/tools/qa.py @@ -49,6 +49,13 @@ class QAHistoryEntry(BaseModel): citations: list[Citation] = [] question_embedding: list[float] | None = Field(default=None, exclude=True) + @property + def sources(self) -> list[str]: + """Source names for display.""" + return list( + dict.fromkeys(c.document_title or c.document_uri for c in self.citations) + ) + def to_search_answer(self) -> SearchAnswer: """Convert to SearchAnswer for research graph context.""" return SearchAnswer( @@ -60,6 +67,12 @@ class QAHistoryEntry(BaseModel): ) +# Resolve ChatSessionState forward reference to QAHistoryEntry +from haiku.rag.agents.chat.state import _rebuild_models # noqa: E402 + +_rebuild_models(QAHistoryEntry) + + class QAState(BaseModel): """State for QA toolset. diff --git a/tests/agents/chat/test_chat_agent.py b/tests/agents/chat/test_chat_agent.py index c53c91b5..6cdf096a 100644 --- a/tests/agents/chat/test_chat_agent.py +++ b/tests/agents/chat/test_chat_agent.py @@ -7,16 +7,15 @@ from haiku.rag.agents.chat import ( AGUI_STATE_KEY, ChatDeps, ChatSessionState, - QAResponse, - SearchAgent, + QAHistoryEntry, ToolContext, create_chat_agent, ) from haiku.rag.agents.chat.context import get_cached_session_context -from haiku.rag.agents.chat.state import MAX_QA_HISTORY from haiku.rag.agents.research.models import Citation from haiku.rag.client import HaikuRAG from haiku.rag.config import Config +from haiku.rag.tools.qa import MAX_QA_HISTORY from haiku.rag.tools.session import SESSION_NAMESPACE, SessionState @@ -226,7 +225,7 @@ def test_citation(): def test_qa_response(): - """Test QAResponse model.""" + """Test QAHistoryEntry model.""" citation = Citation( index=1, document_id="doc-123", @@ -235,7 +234,7 @@ def test_qa_response(): document_title="Test Document", content="Test content", ) - qa = QAResponse( + qa = QAHistoryEntry( question="What is this?", answer="This is a test", confidence=0.95, @@ -249,7 +248,7 @@ def test_qa_response(): def test_qa_response_sources_with_uri_fallback(): - """Test QAResponse.sources falls back to URI when title is None.""" + """Test QAHistoryEntry.sources falls back to URI when title is None.""" citation = Citation( index=1, document_id="doc-123", @@ -258,7 +257,7 @@ def test_qa_response_sources_with_uri_fallback(): document_title=None, content="Test content", ) - qa = QAResponse( + qa = QAHistoryEntry( question="What is this?", answer="This is a test", citations=[citation], @@ -267,7 +266,7 @@ def test_qa_response_sources_with_uri_fallback(): def test_qa_response_to_search_answer(): - """Test QAResponse.to_search_answer() converts to SearchAnswer for research graph.""" + """Test QAHistoryEntry.to_search_answer() converts to SearchAnswer for research graph.""" citation = Citation( index=1, document_id="doc-123", @@ -276,7 +275,7 @@ def test_qa_response_to_search_answer(): document_title="Test Document", content="Test content", ) - qa = QAResponse( + qa = QAHistoryEntry( question="What is the answer?", answer="The answer is 42", confidence=0.95, @@ -293,14 +292,6 @@ def test_qa_response_to_search_answer(): assert search_answer.citations[0].chunk_id == "chunk-456" -def test_search_agent_initialization(temp_db_path): - """Test SearchAgent can be initialized.""" - client = HaikuRAG(temp_db_path, create=True) - search_agent = SearchAgent(client, Config) - assert search_agent is not None - client.close() - - # DocLayNet content for testing DOCLAYNET_CLASS_LABELS = """ DocLayNet Dataset - Class Labels @@ -467,108 +458,6 @@ async def test_chat_agent_get_document_not_found(allow_model_requests, temp_db_p assert result.output is not None -@pytest.mark.asyncio -@pytest.mark.vcr() -async def test_search_agent_with_context(allow_model_requests, temp_db_path): - """Test SearchAgent's search method with context.""" - async with HaikuRAG(temp_db_path, create=True) as client: - # Add test documents - await client.create_document( - content=DOCLAYNET_CLASS_LABELS, - uri="doclaynet-labels", - title="DocLayNet Class Labels", - ) - await client.create_document( - content=DOCLAYNET_ANNOTATION, - uri="doclaynet-annotation", - title="DocLayNet Annotation", - ) - - search_agent = SearchAgent(client, Config) - - # Search with context - results = await search_agent.search( - query="What are the class labels?", - context="We're discussing document layout analysis", - ) - - assert isinstance(results, list) - - -@pytest.mark.asyncio -@pytest.mark.vcr() -async def test_search_agent_with_filter(allow_model_requests, temp_db_path): - """Test SearchAgent's search method with document filter.""" - async with HaikuRAG(temp_db_path, create=True) as client: - # Add test documents - await client.create_document( - content=DOCLAYNET_CLASS_LABELS, - uri="doclaynet-labels", - title="DocLayNet Class Labels", - ) - await client.create_document( - content=DOCLAYNET_DATA_SOURCES, - uri="doclaynet-sources", - title="DocLayNet Sources", - ) - - search_agent = SearchAgent(client, Config) - - # Search with filter - only the labels document - results = await search_agent.search( - query="What information is available?", - filter="uri LIKE '%labels%'", - ) - - assert isinstance(results, list) - # Results should only come from the labels document - for r in results: - assert "labels" in (r.document_uri or "") - - -@pytest.mark.asyncio -@pytest.mark.vcr() -async def test_search_agent_deduplication(allow_model_requests, temp_db_path): - """Test SearchAgent deduplicates results by chunk_id.""" - async with HaikuRAG(temp_db_path, create=True) as client: - # Add test documents - await client.create_document( - content=DOCLAYNET_CLASS_LABELS, - uri="doclaynet-labels", - title="DocLayNet Class Labels", - ) - - search_agent = SearchAgent(client, Config) - - # Search - the search agent will likely run multiple queries - # that could return the same chunk, which should be deduplicated - results = await search_agent.search( - query="Tell me about class labels and their counts", - ) - - assert isinstance(results, list) - - # Verify no duplicate chunk_ids - chunk_ids = [r.chunk_id for r in results if r.chunk_id] - assert len(chunk_ids) == len(set(chunk_ids)), "Found duplicate chunk_ids" - - -@pytest.mark.asyncio -@pytest.mark.vcr() -async def test_search_agent_no_results(allow_model_requests, temp_db_path): - """Test SearchAgent handles no results gracefully.""" - async with HaikuRAG(temp_db_path, create=True) as client: - search_agent = SearchAgent(client, Config) - - # Search in empty database - results = await search_agent.search( - query="Find information about nonexistent topic xyz123", - ) - - assert isinstance(results, list) - assert len(results) == 0 - - @pytest.mark.asyncio @pytest.mark.vcr() async def test_chat_agent_ask_adds_citations(allow_model_requests, temp_db_path): @@ -728,7 +617,7 @@ def test_fifo_limit_enforcement(): """ # Create a session state with MAX_QA_HISTORY + 1 entries qa_history = [ - QAResponse( + QAHistoryEntry( question=f"Question {i}", answer=f"Answer {i}", confidence=0.9, @@ -819,43 +708,6 @@ async def test_chat_agent_search_with_session_filter( ) -@pytest.mark.asyncio -@pytest.mark.vcr() -async def test_search_agent_with_session_filter(allow_model_requests, temp_db_path): - """Test SearchAgent respects session document filter.""" - async with HaikuRAG(temp_db_path, create=True) as client: - # Add two distinct documents - await client.create_document( - content=DOCLAYNET_CLASS_LABELS, - uri="doclaynet-labels", - title="DocLayNet Class Labels", - ) - await client.create_document( - content=DOCLAYNET_DATA_SOURCES, - uri="doclaynet-sources", - title="DocLayNet Sources", - ) - - from haiku.rag.tools.filters import build_multi_document_filter - - search_agent = SearchAgent(client, Config) - - # Build filter for only the labels document - doc_filter = build_multi_document_filter(["DocLayNet Class Labels"]) - - results = await search_agent.search( - query="What information is available?", - filter=doc_filter, - ) - - assert isinstance(results, list) - # All results should be from the labels document - for r in results: - assert "labels" in (r.document_uri or "").lower() or "Labels" in ( - r.document_title or "" - ) - - def test_ask_tool_citation_registry_logic(): """Test the citation index assignment logic used by the ask tool. @@ -1033,9 +885,9 @@ def test_prior_answer_matching_below_threshold(): def test_qa_response_embedding_cache(): - """Test that QAResponse stores and retrieves question_embedding correctly.""" + """Test that QAHistoryEntry stores and retrieves question_embedding correctly.""" embedding = [0.1, 0.2, 0.3, 0.4] - qa = QAResponse( + qa = QAHistoryEntry( question="What is X?", answer="X is Y.", confidence=0.9, @@ -1049,8 +901,8 @@ def test_qa_response_embedding_cache(): def test_qa_response_embedding_default_none(): - """Test that QAResponse.question_embedding defaults to None.""" - qa = QAResponse( + """Test that QAHistoryEntry.question_embedding defaults to None.""" + qa = QAHistoryEntry( question="What is X?", answer="X is Y.", confidence=0.9, diff --git a/tests/agents/chat/test_context.py b/tests/agents/chat/test_context.py index 96830b0e..da260a44 100644 --- a/tests/agents/chat/test_context.py +++ b/tests/agents/chat/test_context.py @@ -3,12 +3,10 @@ from pathlib import Path import pytest -from haiku.rag.agents.chat.state import ( - QAResponse, - SessionContext, -) +from haiku.rag.agents.chat.state import SessionContext from haiku.rag.agents.research.models import Citation from haiku.rag.config import Config +from haiku.rag.tools.qa import QAHistoryEntry @pytest.fixture(scope="module") @@ -82,7 +80,7 @@ class TestSummarizeSession: from haiku.rag.agents.chat.context import summarize_session qa_history = [ - QAResponse( + QAHistoryEntry( question="What is the authentication method?", answer="The API uses JWT tokens for authentication.", confidence=0.95, @@ -115,7 +113,7 @@ class TestSummarizeSession: from haiku.rag.agents.chat.context import summarize_session qa_history = [ - QAResponse( + QAHistoryEntry( question="What is the authentication method?", answer="The API uses JWT tokens for authentication.", confidence=0.95, @@ -130,7 +128,7 @@ class TestSummarizeSession: ) ], ), - QAResponse( + QAHistoryEntry( question="What is the rate limit?", answer="Rate limiting is set to 100 requests per minute.", confidence=0.9, @@ -145,7 +143,7 @@ class TestSummarizeSession: ) ], ), - QAResponse( + QAHistoryEntry( question="How do I refresh tokens?", answer="Use the /refresh endpoint with your refresh token.", confidence=0.85, @@ -178,7 +176,7 @@ class TestSummarizeSession: from haiku.rag.agents.chat.context import summarize_session qa_history = [ - QAResponse( + QAHistoryEntry( question="What's the rate limit?", answer="100 requests per minute.", confidence=0.9, @@ -218,7 +216,7 @@ class TestUpdateSessionContext: session_state = ChatSessionState(session_id="test-session") qa_history = [ - QAResponse( + QAHistoryEntry( question="What is the authentication method?", answer="The API uses JWT tokens.", confidence=0.95, @@ -339,7 +337,7 @@ class TestSessionContextCache: session_state = ChatSessionState(session_id="cache-test-session") qa_history = [ - QAResponse( + QAHistoryEntry( question="What is Python?", answer="A programming language.", confidence=0.95, @@ -409,7 +407,7 @@ class TestSessionContextCache: ) qa_history = [ - QAResponse( + QAHistoryEntry( question="What is JWT?", answer="JSON Web Token for authentication.", confidence=0.95, @@ -461,7 +459,7 @@ class TestSessionContextCache: ) qa_history = [ - QAResponse( + QAHistoryEntry( question="What is JWT?", answer="JSON Web Token.", confidence=0.95, diff --git a/tests/agents/chat/test_state.py b/tests/agents/chat/test_state.py index 788ead92..91ee2952 100644 --- a/tests/agents/chat/test_state.py +++ b/tests/agents/chat/test_state.py @@ -1,9 +1,7 @@ from ag_ui.core import StateDeltaEvent from haiku.rag.agents.chat.state import ( - MAX_QA_HISTORY, ChatSessionState, - QAResponse, SessionContext, ) from haiku.rag.tools.filters import ( @@ -11,6 +9,7 @@ from haiku.rag.tools.filters import ( build_multi_document_filter, combine_filters, ) +from haiku.rag.tools.qa import QAHistoryEntry def test_build_document_filter_simple(): @@ -89,304 +88,11 @@ def test_combine_filters_both(): def test_max_qa_history_constant(): """Test MAX_QA_HISTORY constant value.""" + from haiku.rag.tools.qa import MAX_QA_HISTORY + assert MAX_QA_HISTORY == 50 -def test_chat_deps_state_getter_returns_namespaced_state(): - """Test ChatDeps.state getter returns state under namespaced key.""" - from unittest.mock import MagicMock - - from haiku.rag.agents.chat.state import AGUI_STATE_KEY, ChatDeps, ChatSessionState - - mock_client = MagicMock() - mock_config = MagicMock() - - session_state = ChatSessionState( - session_id="test-123", - qa_history=[ - QAResponse(question="Q1", answer="A1", confidence=0.9), - ], - ) - - deps = ChatDeps( - client=mock_client, - config=mock_config, - session_state=session_state, - state_key=AGUI_STATE_KEY, - ) - - state = deps.state - assert state is not None - assert AGUI_STATE_KEY in state - assert state[AGUI_STATE_KEY]["session_id"] == "test-123" - assert len(state[AGUI_STATE_KEY]["qa_history"]) == 1 - assert state[AGUI_STATE_KEY]["qa_history"][0]["question"] == "Q1" - - -def test_chat_deps_state_getter_without_namespace(): - """Test ChatDeps.state getter returns flat state when no state_key.""" - from unittest.mock import MagicMock - - from haiku.rag.agents.chat.state import ChatDeps, ChatSessionState - - mock_client = MagicMock() - mock_config = MagicMock() - - session_state = ChatSessionState(session_id="test-123") - deps = ChatDeps( - client=mock_client, - config=mock_config, - session_state=session_state, - state_key=None, - ) - - state = deps.state - assert state is not None - assert "session_id" in state - assert state["session_id"] == "test-123" - - -def test_chat_deps_state_getter_returns_default_state(): - """Test ChatDeps.state getter returns default state when not explicitly set.""" - from unittest.mock import MagicMock - - from haiku.rag.agents.chat.state import ChatDeps - - mock_client = MagicMock() - mock_config = MagicMock() - - deps = ChatDeps( - client=mock_client, - config=mock_config, - ) - - state = deps.state - assert state is not None - assert "session_id" in state - assert state["qa_history"] == [] - assert state["citations"] == [] - - -def test_chat_deps_state_setter_updates_from_namespaced_state(): - """Test ChatDeps.state setter updates session_state from namespaced incoming state.""" - from unittest.mock import MagicMock - - from haiku.rag.agents.chat.state import AGUI_STATE_KEY, ChatDeps, ChatSessionState - - mock_client = MagicMock() - mock_config = MagicMock() - - session_state = ChatSessionState(session_id="initial") - deps = ChatDeps( - client=mock_client, - config=mock_config, - session_state=session_state, - state_key=AGUI_STATE_KEY, - ) - - # Simulate incoming AG-UI state with namespaced key - incoming_state = { - AGUI_STATE_KEY: { - "session_id": "updated-123", - "qa_history": [ - {"question": "Q1", "answer": "A1", "confidence": 0.9, "citations": []} - ], - "citations": [], - } - } - - deps.state = incoming_state - - assert deps.session_state is not None - assert deps.session_state.session_id == "updated-123" - assert len(deps.session_state.qa_history) == 1 - assert deps.session_state.qa_history[0].question == "Q1" - - -def test_chat_deps_state_setter_handles_none(): - """Test ChatDeps.state setter handles None gracefully.""" - from unittest.mock import MagicMock - - from haiku.rag.agents.chat.state import ChatDeps, ChatSessionState - - mock_client = MagicMock() - mock_config = MagicMock() - - session_state = ChatSessionState(session_id="original") - deps = ChatDeps( - client=mock_client, - config=mock_config, - session_state=session_state, - ) - - # Setting None should not raise and should not change state - deps.state = None - - assert deps.session_state is not None - assert deps.session_state.session_id == "original" - - -def test_chat_deps_state_setter_updates_default_state(): - """Test ChatDeps.state setter updates the default session_state.""" - from unittest.mock import MagicMock - - from haiku.rag.agents.chat.state import ChatDeps - - mock_client = MagicMock() - mock_config = MagicMock() - - deps = ChatDeps( - client=mock_client, - config=mock_config, - ) - - original_session_id = deps.session_state.session_id - - # Update with incoming state - deps.state = {"session_id": "updated-123", "qa_history": [], "citations": []} - - assert deps.session_state.session_id == "updated-123" - assert deps.session_state.session_id != original_session_id - - -def test_chat_deps_state_setter_with_citation_dicts(): - """Test ChatDeps.state setter converts citation dicts to Citation.""" - from unittest.mock import MagicMock - - from haiku.rag.agents.chat.state import AGUI_STATE_KEY, ChatDeps, ChatSessionState - - mock_client = MagicMock() - mock_config = MagicMock() - - session_state = ChatSessionState(session_id="test") - deps = ChatDeps( - client=mock_client, - config=mock_config, - session_state=session_state, - state_key=AGUI_STATE_KEY, - ) - - incoming_state = { - AGUI_STATE_KEY: { - "session_id": "test", - "qa_history": [], - "citations": [ - { - "index": 1, - "document_id": "doc-1", - "chunk_id": "chunk-1", - "document_uri": "test.md", - "document_title": "Test Doc", - "page_numbers": [1, 2], - "headings": ["Intro"], - "content": "Test content", - } - ], - } - } - - deps.state = incoming_state - - assert deps.session_state is not None - assert len(deps.session_state.citations) == 1 - citation = deps.session_state.citations[0] - assert citation.document_id == "doc-1" - assert citation.chunk_id == "chunk-1" - assert citation.page_numbers == [1, 2] - - -def test_chat_deps_state_getter_includes_session_context(): - """Test ChatDeps.state getter includes session_context when present.""" - from datetime import datetime - from unittest.mock import MagicMock - - from haiku.rag.agents.chat.state import ( - AGUI_STATE_KEY, - ChatDeps, - ChatSessionState, - SessionContext, - ) - - mock_client = MagicMock() - mock_config = MagicMock() - - now = datetime.now() - session_state = ChatSessionState( - session_id="test-123", - session_context=SessionContext( - summary="User discussed authentication.", - last_updated=now, - ), - ) - - deps = ChatDeps( - client=mock_client, - config=mock_config, - session_state=session_state, - state_key=AGUI_STATE_KEY, - ) - - state = deps.state - assert state is not None - assert AGUI_STATE_KEY in state - assert state[AGUI_STATE_KEY]["session_context"] is not None - assert ( - state[AGUI_STATE_KEY]["session_context"]["summary"] - == "User discussed authentication." - ) - - -def test_chat_deps_state_setter_ignores_session_context(): - """Test ChatDeps.state setter ignores session_context from client. - - The agent owns session_context via server-side cache, so client-provided - session_context should be ignored to prevent stale state overwriting. - """ - from unittest.mock import MagicMock - - from haiku.rag.agents.chat.state import ( - AGUI_STATE_KEY, - ChatDeps, - ChatSessionState, - SessionContext, - ) - - mock_client = MagicMock() - mock_config = MagicMock() - - # Start with a session_context (e.g., from cache) - session_state = ChatSessionState( - session_id="test", - session_context=SessionContext(summary="Server-side context"), - ) - deps = ChatDeps( - client=mock_client, - config=mock_config, - session_state=session_state, - state_key=AGUI_STATE_KEY, - ) - - # Client sends different session_context (stale) - incoming_state = { - AGUI_STATE_KEY: { - "session_id": "test", - "qa_history": [], - "citations": [], - "session_context": { - "summary": "Client-provided stale context", - "last_updated": "2025-01-15T10:30:00", - }, - } - } - - deps.state = incoming_state - - # session_context should NOT be overwritten - assert deps.session_state is not None - assert deps.session_state.session_context is not None - assert deps.session_state.session_context.summary == "Server-side context" - - def test_citation_registry_index_assignment(): """Test get_or_assign_index basic index assignment behavior. @@ -395,8 +101,6 @@ def test_citation_registry_index_assignment(): - Second unique chunk gets index 2 - Same chunk_id always returns same index """ - from haiku.rag.agents.chat.state import ChatSessionState - session_state = ChatSessionState(session_id="test") # First chunk gets index 1 @@ -414,8 +118,6 @@ def test_citation_registry_index_assignment(): def test_citation_registry_stability(): """Test citation indices are stable across multiple calls in any order.""" - from haiku.rag.agents.chat.state import ChatSessionState - session_state = ChatSessionState(session_id="test") # First round assigns indices 1, 2, 3 @@ -435,8 +137,6 @@ def test_citation_registry_stability(): def test_citation_registry_serialization_roundtrip(): """Test citation_registry serializes and deserializes correctly for AG-UI state.""" - from haiku.rag.agents.chat.state import ChatSessionState - # Create state and assign indices original = ChatSessionState(session_id="test") original.get_or_assign_index("chunk-a") @@ -457,127 +157,6 @@ def test_citation_registry_serialization_roundtrip(): assert restored.get_or_assign_index("chunk-c") == 3 -def test_chat_deps_state_getter_includes_citation_registry(): - """Test ChatDeps.state getter includes citation_registry.""" - from unittest.mock import MagicMock - - from haiku.rag.agents.chat.state import AGUI_STATE_KEY, ChatDeps, ChatSessionState - - mock_client = MagicMock() - mock_config = MagicMock() - - session_state = ChatSessionState(session_id="test") - session_state.get_or_assign_index("chunk-a") - - deps = ChatDeps( - client=mock_client, - config=mock_config, - session_state=session_state, - state_key=AGUI_STATE_KEY, - ) - - state = deps.state - assert state is not None - assert AGUI_STATE_KEY in state - assert state[AGUI_STATE_KEY]["citation_registry"] == {"chunk-a": 1} - - -def test_chat_deps_state_setter_restores_citation_registry(): - """Test ChatDeps.state setter restores citation_registry from incoming state.""" - from unittest.mock import MagicMock - - from haiku.rag.agents.chat.state import AGUI_STATE_KEY, ChatDeps, ChatSessionState - - mock_client = MagicMock() - mock_config = MagicMock() - - session_state = ChatSessionState(session_id="test") - deps = ChatDeps( - client=mock_client, - config=mock_config, - session_state=session_state, - state_key=AGUI_STATE_KEY, - ) - - # Simulate incoming AG-UI state with citation_registry - incoming_state = { - AGUI_STATE_KEY: { - "session_id": "test", - "qa_history": [], - "citations": [], - "citation_registry": {"chunk-x": 1, "chunk-y": 2}, - } - } - - deps.state = incoming_state - - assert deps.session_state is not None - # Registry should be restored - assert deps.session_state.get_or_assign_index("chunk-x") == 1 - assert deps.session_state.get_or_assign_index("chunk-y") == 2 - # New chunk gets next index - assert deps.session_state.get_or_assign_index("chunk-z") == 3 - - -def test_chat_deps_state_setter_restores_document_filter(): - """Test ChatDeps.state setter restores document_filter from incoming state.""" - from unittest.mock import MagicMock - - from haiku.rag.agents.chat.state import AGUI_STATE_KEY, ChatDeps, ChatSessionState - - mock_client = MagicMock() - mock_config = MagicMock() - - session_state = ChatSessionState(session_id="test") - deps = ChatDeps( - client=mock_client, - config=mock_config, - session_state=session_state, - state_key=AGUI_STATE_KEY, - ) - - incoming_state = { - AGUI_STATE_KEY: { - "session_id": "test", - "qa_history": [], - "citations": [], - "document_filter": ["doc1.pdf", "doc2.pdf"], - } - } - - deps.state = incoming_state - - assert deps.session_state is not None - assert deps.session_state.document_filter == ["doc1.pdf", "doc2.pdf"] - - -def test_chat_deps_state_getter_includes_document_filter(): - """Test ChatDeps.state getter includes document_filter.""" - from unittest.mock import MagicMock - - from haiku.rag.agents.chat.state import AGUI_STATE_KEY, ChatDeps, ChatSessionState - - mock_client = MagicMock() - mock_config = MagicMock() - - session_state = ChatSessionState( - session_id="test-123", - document_filter=["doc1.pdf", "doc2.pdf"], - ) - - deps = ChatDeps( - client=mock_client, - config=mock_config, - session_state=session_state, - state_key=AGUI_STATE_KEY, - ) - - state = deps.state - assert state is not None - assert AGUI_STATE_KEY in state - assert state[AGUI_STATE_KEY]["document_filter"] == ["doc1.pdf", "doc2.pdf"] - - def test_chat_session_state_defaults_to_empty_session_id(): """New ChatSessionState should default to empty session_id. @@ -685,7 +264,7 @@ def test_emit_state_event_returns_delta_with_changes(): current_state = ChatSessionState(session_id="test-123", qa_history=[], citations=[]) new_state = ChatSessionState( session_id="test-123", - qa_history=[QAResponse(question="Q1", answer="A1", confidence=0.9)], + qa_history=[QAHistoryEntry(question="Q1", answer="A1", confidence=0.9)], citations=[], ) @@ -709,7 +288,7 @@ def test_emit_state_event_delta_with_state_key(): current_state = ChatSessionState(session_id="test-123", qa_history=[]) new_state = ChatSessionState( session_id="test-123", - qa_history=[QAResponse(question="Q1", answer="A1", confidence=0.9)], + qa_history=[QAHistoryEntry(question="Q1", answer="A1", confidence=0.9)], ) event = emit_state_event(current_state, new_state, state_key=AGUI_STATE_KEY) @@ -728,14 +307,14 @@ def test_emit_state_event_delta_produces_valid_patch(): current_state = ChatSessionState( session_id="test-123", - qa_history=[QAResponse(question="Q1", answer="A1", confidence=0.9)], + qa_history=[QAHistoryEntry(question="Q1", answer="A1", confidence=0.9)], citations=[], ) new_state = ChatSessionState( session_id="test-123", qa_history=[ - QAResponse(question="Q1", answer="A1", confidence=0.9), - QAResponse(question="Q2", answer="A2", confidence=0.8), + QAHistoryEntry(question="Q1", answer="A1", confidence=0.9), + QAHistoryEntry(question="Q2", answer="A2", confidence=0.8), ], citations=[], ) diff --git a/tests/cassettes/test_chat_agent/test_search_agent_deduplication.yaml b/tests/cassettes/test_chat_agent/test_search_agent_deduplication.yaml deleted file mode 100644 index 18afd747..00000000 --- a/tests/cassettes/test_chat_agent/test_search_agent_deduplication.yaml +++ /dev/null @@ -1,601 +0,0 @@ -interactions: -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '730' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - encoding_format: base64 - input: - - |- - DocLayNet Dataset - Class Labels - DocLayNet defines 11 distinct class labels for document layout analysis: - 1. Caption - Text describing figures or tables - 2. Footnote - Notes at the bottom of pages - 3. Formula - Mathematical expressions - 4. List-item - Items in bulleted or numbered lists - 5. Page-footer - Footer content on pages - 6. Page-header - Header content on pages - 7. Picture - Images and diagrams - 8. Section-header - Headings for document sections - 9. Table - Tabular data - 10. Text - Regular paragraph text (highest count: 510,377 instances) - 11. Title - Document titles - The Text class has the highest count with 510,377 instances in the dataset. - model: qwen3-embedding:4b - uri: http://localhost:11434/v1/embeddings - response: - headers: - content-type: - - application/json - transfer-encoding: - - chunked - parsed_body: - data: - - embedding: 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 - index: 0 - object: embedding - model: qwen3-embedding:4b - object: list - usage: - prompt_tokens: 166 - total_tokens: 166 - status: - code: 200 - message: OK -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '1090' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - messages: - - content: |- - You are a search query optimizer. You MUST use the run_search tool to execute searches. - - For each user request: - 1. Use the run_search tool with the original query - 2. Use run_search again with 1-2 alternative keyword queries - 3. Keep all queries SHORT (2-5 words) - 4. After all tool calls complete, respond "Search complete" - - You can optionally specify a limit parameter (default 5). - - IMPORTANT: You must make actual tool calls. Do not output "run_search(...)" as text. - role: system - - content: Tell me about class labels and their counts - role: user - model: gpt-oss - reasoning_effort: low - stream: false - tool_choice: auto - tools: - - function: - description: Run a single search query against the knowledge base. - name: run_search - parameters: - additionalProperties: false - properties: - limit: - anyOf: - - type: integer - - type: 'null' - default: null - description: 'Number of results to fetch (default: 5)' - query: - description: The search query - type: string - required: - - query - type: object - type: function - uri: http://localhost:11434/v1/chat/completions - response: - headers: - content-length: - - '516' - content-type: - - application/json - parsed_body: - choices: - - finish_reason: tool_calls - index: 0 - message: - content: '' - reasoning: Need run_search original query, then alternatives. - role: assistant - tool_calls: - - function: - arguments: '{"query":"class labels counts","limit":5}' - name: run_search - id: call_sq8spu1c - index: 0 - type: function - created: 1769793930 - id: chatcmpl-745 - model: gpt-oss - object: chat.completion - system_fingerprint: fp_ollama - usage: - completion_tokens: 39 - prompt_tokens: 269 - total_tokens: 308 - status: - code: 200 - message: OK -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '89' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - encoding_format: base64 - input: - - class labels counts - model: qwen3-embedding:4b - uri: http://localhost:11434/v1/embeddings - response: - headers: - content-type: - - application/json - transfer-encoding: - - chunked - parsed_body: - data: - - embedding: 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 - index: 0 - object: embedding - model: qwen3-embedding:4b - object: list - usage: - prompt_tokens: 4 - total_tokens: 4 - status: - code: 200 - message: OK -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '1444' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - messages: - - content: |- - You are a search query optimizer. You MUST use the run_search tool to execute searches. - - For each user request: - 1. Use the run_search tool with the original query - 2. Use run_search again with 1-2 alternative keyword queries - 3. Keep all queries SHORT (2-5 words) - 4. After all tool calls complete, respond "Search complete" - - You can optionally specify a limit parameter (default 5). - - IMPORTANT: You must make actual tool calls. Do not output "run_search(...)" as text. - role: system - - content: Tell me about class labels and their counts - role: user - - content: |- - - Need run_search original query, then alternatives. - - role: assistant - tool_calls: - - function: - arguments: '{"query":"class labels counts","limit":5}' - name: run_search - id: call_sq8spu1c - type: function - - content: 'Found 1 results for: class labels counts' - role: tool - tool_call_id: call_sq8spu1c - model: gpt-oss - reasoning_effort: low - stream: false - tool_choice: auto - tools: - - function: - description: Run a single search query against the knowledge base. - name: run_search - parameters: - additionalProperties: false - properties: - limit: - anyOf: - - type: integer - - type: 'null' - default: null - description: 'Number of results to fetch (default: 5)' - query: - description: The search query - type: string - required: - - query - type: object - type: function - uri: http://localhost:11434/v1/chat/completions - response: - headers: - content-length: - - '456' - content-type: - - application/json - parsed_body: - choices: - - finish_reason: tool_calls - index: 0 - message: - content: '' - role: assistant - tool_calls: - - function: - arguments: '{"limit":5,"query":"label class distribution"}' - name: run_search - id: call_min0izqo - index: 0 - type: function - created: 1769793931 - id: chatcmpl-544 - model: gpt-oss - object: chat.completion - system_fingerprint: fp_ollama - usage: - completion_tokens: 24 - prompt_tokens: 334 - total_tokens: 358 - status: - code: 200 - message: OK -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '94' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - encoding_format: base64 - input: - - label class distribution - model: qwen3-embedding:4b - uri: http://localhost:11434/v1/embeddings - response: - headers: - content-type: - - application/json - transfer-encoding: - - chunked - parsed_body: - data: - - embedding: Qllwudxs57vjaeI8McObPGT3ibpecEM9Ib9xPLHFA7vtFIg8lC0cvMJi/jyeAIQ8Fv48O8Y7Qb0yCFK8oHVFvdlarDyxm447vAfXPAzw67tSsYi8Ptg/PG+Ndzv9FzY96vr5vC4qHL1n1YS8YYdEvRdJAT241+g7j6dKPMoiAL3Q4c48Vc5fvDyx3Du5od68VhGGvEMiR7z5b5e8C29cvUBLCj0LTiy9hnGJPF2vezyN71w8s/obvCndZjvl0gi8FQ6GvGqlgLy++zg84OU8PGbuAr1yaby86yaEPVAA4jyfaxQ9yIPJuxvWq7sbvYs7PjyHuzULNTywAGm9taLmvENKPbsO7qq88I//u1u6Qb0IRPU7/++GOvplOb3VmqI8UUudvKZh0jvmyyU8MNgTvRb6hbzcxDW7lj92vFk5Gz1R3za7WUUtvPsTszq8pzw8z+fcPFRBkLuwDv48CRSEO1xgtLz5WQE8/NdEPNIYcjzjxnY7vCuGPIppjrxL6Zw70OIEvJE/GLxeC3C7Fj/QO8IZuTomeEe7dUzQPFvijLwkucc8EA23vBFMb7zt1iu8ShDIOjxGYbwviCw8n6Lou58RnDrhrBa8E+VOvPQww7v1y+w7JZGJPCVVLzwPa2q7h42Qu9sl6jxDQXi8J5uaOxiEHDxDnr28i5C5vPFsTLyLSK88XAZnPJoMSzyqzpm8nuz6PHZGnLwPG8s8x47sO73jLbwWlgw8xLyAuUVeBzyainK8GpseOt8nhLv9Mf88ViuBvDckIr2T6Cs69ygFvWYYnTuHvxk8lK7hPI1phLuld5c7fknIO7TinbpUZAM8jxmhvDqU7jyRoUa8lWl3POEobrw7OPc8GqQhPKXb6Ds5Jcm7FA5KPLNZiLm1Jqo7oCGROtNiA7yUdPK70TmNvG3sl7ylqNO7CPf4vGLAnLscw/y7PHcDvXbr1bzq4f082pFfvH74LD0ABIw9mnp/uHj0ajywSeK7ewRZu4dSL7y3Uek7dan2OrRXGb0+Tpm74kEgvJhpEzxZg5u8EcgLvd+7h7ybGY+8YRfjvBxvqDw5U0k7H2DuO77y5Lyj/cy7L9VevM0ugbyL7J07KkJPvO2Wlzs93OS8o570OxtKF7w4bIa8hQpIvbhshLxTEjw8JsWkvG+PYLzLjzI8WVcWPN1evTttt8Q7iNdUvLOv5DsEaze9QY7iOhATg7vQp3a7sLZzOxwEy7vLD4M8qHmzO2+yujrWVlO8RJZ0uxxgdTys2++8Nd/+uJE2ODy5VV+8N3TdPNk3frxFgaE73W6Gum4NgrwdtnO8nI14PA4ZB71rIW288MQevOUhaLzwR847zn2KPCKYLrucpk47xvpvO3cuvLynwle9A1wtu2xm+byn5Ho71LWwu0qfL7snera8e66bOwmOvzxG5QY9TnWfvNqViLxUyU08VhfKPB+cmbs6PbY7diQTPOUqE7xvEq28Fhy8OylRujz25a88JkzJPCT/HrtK5ZU8LZRHvOnyTDoWllm8kkUfvNBCvzzQMjY80BGDOtMhJztGiNQ83d9IPPWjlTw9hTC8QFnSvDIR4bxPJJ67UIQcu3NsLrvXYrm7nPHeu+ylDTylWso4L3lUPGqyqLxx62s84UNXvEKi2TplgZ28Uqw8u5itnjy5bje8qlKCvFTdVLyxgB49rKQSvfcNFrxa53k8Ycn5vLv5pbslI6s5+VVhve0QCb2D7lS8mVjtO2dPxjxS0/M8l+D8PACxGj1C6nc6Nk8+O4yewjxVIE+91KBjvL8VfjyxEJq80q60vMctijzJPls8d7VCPPIKfztzWI+7Lx6IPPaSkrtbUXa9ioVVO62+OTy0djW8WN4DvfxDkDudauW7PEaFO6tt3buziFa8E0R/PJI8KTwkTXq6d+ALvIJNjDz6ZmK9pHucvPdQIrxMea48mVuIPI3Snb2J8SC8ZTmJvB0PhDyQS/c8imKrvF3e67vFrzK9+6i5PDvzMTzQNI28dKOKPDGvurw/R6674hhFPDLaSbu4Z7u7iwdGPGG4+bsbtbo8e6ShvARLebu4NiO7F58CPKT5QrztaQo5bvnuOuRuwTwFqpQ7FbICvLfS77yucJa8n4p+Oo2RuDxr15A89C1yvL2DAD2Mc2i8Job+vFsPBb3r8WC7BchuvRokG7zAwhE9T00wvOCbw7x/tnM86j/EPOPjgbxvGI+8mfqUO4hpMzph6h48xQhmvP8Vu7zsWgG86n9OPDTb2LzP+Ws72wgVOnt3LDyyGF88NMh6vGxADTzPerG7cn/Guwm0hzyM5so81XrcPAZd+TwdXQA9ulpiOrT9c7tUXwy7wjh4PPja77tDDJo8DzS3OjsynjxsKw+76+WNveUlsrwA9ck6A2dzPH9GgDwboFK8IohNvHcx8bxw/RY9vgxpvPnGmbyYLTU8qn/rO6HrCLwsBp28bfLlPEpBv72Xj0U7/X0SPRQ1BTyzj6u87HqAvAhdnLzPJBy88338Ok7HkzyHHsG8ogn6vFcGursN8QG8Dt63PL+OtjyYewq8UzS/O0UHhrxPZ/Q7AxMRPFVxxTk54988sk8aPZRvkDzVUVI84eGkPL0zBrw2BJK8JocwPNXSjDxv7967TsQLvZf/QDs/ttY8Vn3Au3JFMbqP9rG8mhmLvLSHfjunrZq7tOcjvMQcND3jofu7QgPwvN/uTj0yinA80sUYvIDUUbxbcRg8YypxPKjAGD32Fks7J8QxvaWSu7uBZmS77wYuu8yurLwaFec8HuwcPbLGgbxhI427yP5EvKKEs7sBase8QrMhO7arrDy3Luu5ACsOvQ/Eijtnyis8qVFKPEcMA7zJaOa7AfLWvMvNQzyoW6Y7fAdNvCK5Aj1BEOy7upBxPE/qcLwhKts7RzQRPEO6RzyYyXu7vKCnOw5GrDuZ1pO9xA7JOygcoLsujnq822PxOyHAULw/TsS7x+sCPfIxULwsN+c8C+PBuzgYn7uZHvm8qQZGPDLDG7w6vyY8UgsoutWlzzrqYCm8B+SZPJHhBr0gKmO7UGbYugColLyRwUo8RLACvMBgwLxnxIA7ViIjvNWc7bva/IS8tpn6u9ilq7td4V88u07XOr+sYzzjAZC8TdC4vM+0ED0SVT88jg4yPJeBmTyJzJS8eIyVPExu8bs3gSS8JfKvvDUiOb2NEg+9xGLAPF573jkNiPo7Tbj0OxVC6LzidFA8arsxPd5gwzvJA++7itq+PK3BlDzxzjW9Jnc2PAu3xzy4zNA8RqhAvOLTvTwzS8A7/EI1vdvy0bwhUWK7lXmuvOhZ6rtnx1O9OAIpu7eu8DsNqPm8P0BgOyMi/byuQg05EzDYuitKhrvwn868Uu4HvThL0Ltftxg9GAVIPOv4f7zDli260MPDvP+HPjz59BM8BwOlPJZ23jtc89w8PeOtPLYZM7wKWNo7/m83vOw/G73h+tI6CEe8PE5W7rt2XJW8HQgwPciPibksQB07iobAPDsma7yUqvE7+0FeusIZoDz8fbc78aohvDEM4bw/Ojq8gg3HPC+X0bwlKCw8XXoQvWcZRLuYl7A8J9AGvSV/vbxONIU72QvKO0S/uLuFbkC6JDZjvIFyUDxzkZQ8TeHtPLa9ELy86g09JE4sOz5V7ju4P+m7Q/bNvJdIKjw/6va8OJISu7M7czwZ39c8rBbPPOug0Lx/bQQ8osEHPTVFizt3qOe6vhzgO02RUrzhkBI6WpaivEzawzq1SKo7s5NOPHNVQ7tF21Q7d9FePaH49bhMXHY8PtYOPfJfODwPV5g8KPOGvHDVBL308xi7t4PavKaCAbyMPkm8Wtx7vLKB5DqGAAq9nGX/PL7mSjzgECe96Vp8vDr0+LvfTF48tLS6OzlDDjrrFdW8uFwpPd6MJzw8Iu87AtOOO/gbYTvS+wG9J3T7OwiamLtzYGW86QP5vPwFXTyCg6Q8Fcf+upiY5TyJKME80rPjPOe6Ez3ytX28+ByAvB1CRTy+w3s8W/q4PLnembo/fo48sWqQvBt5KTxP9L+78zusO6RC4rxPWfI8deISPfka6rqUCvO7aSxYvFeF8rqyVxW8R+CrvLuwlzsFPnC8xSILvFAbNjwFe0s8Bx0BOyp/NzxD8507ZvTXPP1TELzaScK841jvuz3wBT1dGw282GjivFhatbuyGXq7wkjpvCA45rwcqZq8mDDIvNwFS72WE5E7oB5zvY8ZvzxF/0c7NpmCu92Nybv3Q8a7+Q4wvIH5hDyoBtg75KYZvcletDzs6ck8rRcHOvSCBjxE0uw8xO91vCwTSTsMDq47gU4oPLUe67t6TI08AxxoPCv17Du6cKO7flUYPFGUbTynipS8fTqfPBnvIr2+odc7hpZQPC5uwTuCuP64px+AOyLLQbxba+s8skHpuz0xGD1B28G6nRgavHxhKDzOPOI7hsjMPDpjjzwsiVo7Br1nPAmHhzrLMAM96Qmou5bIF701pk29rC9eOr6Jz7wDeRI9kRhuvFRdhzsY6Ny6nUTTOyX/0rs+YgI6uJ1GvFVd07toOkk9YIBlPOOrmDxQPJu7y7E+PYmaWj0+gZ+70ilJvILSo7o1vh67fbN4vFq6QbzJoBy8Zr4ePOM9Ir01E0862YzgvD1MFLsIGYy9XRBVPPZgFjvMv+A8vyKXu5UCez2bOlC8Tdetum+ONDsY1BS8DGplO499ST21zaK8dVvoPLE5kTw4SWO8cGIRPBUUvrvG4AM7mn67POuQobwpKRO9ot8FPTpCrTyBcKA8RBP+ubKn2jvtljs7sU4tvQlEujzrgVs8jTsEPJ2Vfzt71Qu9YJIMvG/lGD3U6AE9+evDu0Il0LxDk4S8qlORPNlbd7z9AwG9HEq6PBSAUjz+Wzm9VcJfPDR+0jyzupI7u19jvJF1LTwdylO8DQsvvK01Wr3odMm8Zgv5Ox1eNDyfEZC8WcKNvAXoAL30xQ69iXImvUQSwzy8BOK7+wUBPVDMwDylJ6m8Hs3iO+CQPrzEOac89tk6PBdkdTzcig89HYQLurnWCT0I8L07ZSBpPGJ3zzwe6p48O51rOk1NibvQUqO7w/eNO0P6F73uoqI7K/1XPL46OLzc7+O6j3qTOb7UrDxzgRe8S7DfPGd1VLk1PD29tzK+PMTrKj061lA8HaRRPHGMi7w1v2E7pu+SOsciWjxfFEq8Uqk1vNTbGbyCuEw7ZhKCu5AI2LzUquY8r8gSPci0NTzk+ee87QOXO7i9OTzLW2k7N60yOxFDK702ayo8i1g8u01ZozyFTRg8Wvv7u+4eJDyP6gi8vMipOwwbbTyqOyo9P7W+PPJP5TxbB8y8/xxAO/Jg/7xS+Qk8I09nPKSRoTtvn+Q6tEUFvfyL6jz2ko28o+suPNl4a70+Gsa8kpFdPH8IhDtcULM8uTYgvMkXNzy9sA486P6PPNIbyLu1s/k8kIafO30W3Lsu64i76IYwO3TgVTzjDz67aVVSPK2G0jzOaLy53GGFPGsJVjySexU9uMvTvEA+FDx0lKw8l72at5lIALzJojW7RRRau5iMLLzYfCm75OyAuXl2ATxWRZA6Od0LvWKkcbytI6W7aGeyO+8vF7yjXIy8E6wJuvgyvToxLb07DcXGPFCgVbxrPRy8TE5VPCJFzDywvCa8dqFHuSsdUTwCGK+6vy+EO1dcpLzCvYa7t8P0vAeEdjx7Ac88GNfJvJAMuDy0Jxq8/KqoOhLWdrpbRPW7G19pvL4Bqrw+com8R9TavMFJoLx3dZC8qmNSO7WSuztQC7a7kBrwu7CaIDyyPMQ7nHgoPELGzTwiDCE7fmcpPGvIFT3RO1m8lPi6u78dTLzw5yQ90StFvPsYWjwgkg48f7z2ur/2lrtF9EC7W7UxO4cEr7xdQVU6FoJhvJAmyLykZHU7ZDNVPOA1FzrlnCS7icRrvIyHCj07tXI7fT78O9b9kLxlxLe8X90gvSzvy7yNtRq8eIOnvHkBl7wiLu48NL+8vM4FLzxGqmM8Bcf4OyxMfzzDRVI8i9JhvC7swzq8goO8WN2xPPJNVjwUuhs97i2rPOATOTyK5Ke8/48QPNIwVLzm9SK9uIqpvKoKHjypNlk8/4wyu38iYDyM8Ss7rq7LO5W9MD3Nuw88nlSGvO0CYLzIn2u8Rhequ76iMj1BGaa7bdf3u+b8oTwjKH485MAPvWMaiDzEpNS7UUkTPJB42zz5BVi72uYqvQcwGzzXIb+8T1JSvKZDxzrrGdg6/IwHO0rYGL0JZvU8uHiJPDXIDzyAbL67QSLyPLSTHbzon1q7eN3FvNJojDxFBu87azQJPSc5Ljwec7S882iFO6b6hjszIvE8RnuKvEfCNzuZYWU90yqFvEPgirq6pO28HVuFO52hzLyCo8I7jxVuu7jrQb2jnjC8uyqZvINaeLxAS5s7TL0DvYcLS7k13Me5B33ou+WDyTtWIv+8/1xIPWnxzbuO70M8hxMqvCSFbzwMgZW8lEZKPLKoLD3DPRW9ZeCUPC2HhLw+T7G8EYQMvCWlHTx338u7gDdAvF/K8bux2KM6qFSwPKj9BTyl7/c79BxWPFwBhjy/5Iw8NtoqPZiArLyxibw88dJyvM6DWjv+j0Y8DqyivNrJqrpWBys8EgAHPXkv2rvutxk9ZreBvAa587sqpCo9UflHvEZgwbwdyFW9yaxEPNbBJjvOsdm7V9QUu7rW37wEKE88V9FevHA8ajxueDY9Lru/O3aIqrwgahK881itPLUFKD3xPKY8T2sgO5JBCbwN6ay88oR0PPsWLj3MZ6Q6esqVOwPddj0nGJC7+sCevK6Srbpg8Ji8CKsKvNv0sbxDe1A8qJ1AvJhvkzzbllK8n1QZvC1qkbx2qLy8tU50PGjcC7tfZ1y9nOjNPGEmsDw9Jwm9bR22PHrs+rwrFCO8auwYPeZcBL2991M8m4ZIvNH2HLz3GsQ8SV2xu3NxojkuH8875CsyvSmnJDyzE4I7xwJsu8oeN7wPTow8+YQ6vNH0qbs/4Jc738MAPZvTGb3lo+K8ngSuvAycEL0Ra3S8T6GzvOr8MTwdHEM8nIqSPHNFnDxw3a27vSG8OkMWTDtNv5q8IJQbPGXJVbtlywM9AESrvJP8UD3tmv66MWWXu51y9DxGzKI8VvcaPJH717zQ8Qq9GV9Su/XRVryxmt483/P8O9VOLTx7rj+9R1LHusER8Lt2opi8tABUPP4EZTz1XIM5vZOGPCfOS7tWB5I7kg7WPNSOY7z2dcG8/t4DO8CTOzuMmI28zm1vPHTnALxiQIu8i5CIOQO3zzzTxzA8Ym86vBIkIDwYoHU8VHCDPBaKHLrWKle8zCY3u257LD1t8Va6pq+zPE6LRLwigPS8a8mTu7SHkLy5UIQ8/a6RO2HVGz0kTPw77qAcvdNrDz1NfAW8pg2UvGUiGbqD+lG8Mza8vAtjVj20+9g8z0HYvJr6nzy7X4k7QGkKvfUNcTyIqzo87ixdPPPj4LyE2g09Ko8Wu9hSCbzFmS49E2f8PPOUAr3VYhe94MNMO7/xkTzTdQS9XO75vJJm57w1zxq8yOCePDU4hrtdCiE8b0mCOzDq/TxddhA8Acm+OyXVXbxVLLS7JLVQvToPRTqFcew4r/8Hu9aoVDykODq7f0a3vJLm/LyE1608oup0O9PrKbvq9I67NP0FPVd2UjySqGG8e3ETO1nsKbznff88FrIKvKKErbxgKfe76sTAO3rSHbtx6v48clyQPBZYlrxWE628BMT0PEu1lTxVvzS8+KAaO20xrbyznoI7EL+CvI7jlrxXYqm8oQ6fPPodc7wyzoy6TjEUPclsy7s6mkW8s8fnvP7Z3joaXk68auvWvOw5Hz3zENg8d192vH/Jjjzocp68jEcSPYJBNLuvN2Y86bC+vCNXPTz/Xw+7SK6pPJ9sIDwZKaW8SnYDvGpa1zrojmA8i/emPIjSQTs+B0+8VJ0TPN3rITww0+S8WdAHPUAkeryvScW7FvlwvA0JpryL4mi95/43PKYNEDzL04u8kKU1vKwdHLz0nlu8BZEIPMhMhTuF5jE9xz3/u80Cg7yX16S8oOyiupDP1TwKWL+8lQnnujXFZLvwKdY7OV1rvB5sQ7z39q07iKMlvI9TPburtwW7vlfDOz7ohrv0WCQ8n8tTu5yEirxUxqc7ZhGsvGvrF70R2qy85/ggPGweXbx3pj289S3hvPrRdDw4Uy88bSEwvFeqyTyoddW6gOuAvOf8mzvNk6u8IU+XvJk0H7xzeK88ZP2MPORDj7udbpq7eOzsvCMNDj251pc8AH9MvZckpzwIOxM7z2S0O9gIorqIPM+6QGgYPJriED37PFS8DfkUPPz3Cr0zTNm7mMhOPFAqqTws4ro8SAB0vOLUObxoerM8enwEPG1QtzcZNJA6sQMkPWjctzzXqhq7dpMpPK7LnzoKdbQ6/8LmvBkTMbuUuU+8WvSRPKEkoTyihgg9uxk7PP1K/7t0lBW8Gx25vA/m5Ty8GQs8D/RPPHD77zt0m4q8tfGovHhdzDwoBns74BnRPIETZ7x0v9q861NOO/NT5jxA12q9wIG6u1TCNjz1XtS83LYGvZ+n0TrihQA9g3X2u6LMxzq7wx49TtYDvOQQrbyaapA7cw8tO71E3Twp0xa8vZTVPCH3jDy32rG72cgqvUn9jTuXaS88tt2Qu3oMIzypTqE8txbjOz3FfD0cCK47AzmBvByfibv2gaq8Kz0Zu0KtsbzjdVo8S4txO3q357yb1w09Fp/vu4ju9ztSoo686z3vvM+kjTxQIaA7H96jPJUVaTw8GZc7aZq2O0DqYLvs7NY8fLjVPIszk7sxdoo8OnStvNwHNjxJjTs8l46bO8lGJzwAe+28EkbuPPvUODyG2v28p3v4utW3ibwbYyC8M+yEu9zErLzYpiW7Xj1gvNwlcLuq2gU9+gf3PJi8uLvkRsW8SQ7nO8EW0bxLE+U690eJvKUryLynhnQ7wUGYPEB+SrwdpcC80HLfPA3jhDss6Sa7aEmbu9c59TzC1Jw88+I4vIMR6DyPaXQ8a8YLOwtaJj1DXxG9guKavIq1j7zRPKc6UVO7POZuxTylwPm7PS4CO7j+1LyZOQY8CP2pvPm7v7t9PT88NW5zOg0flzy5fwK9LDI9vAJXhLxR8b08lXRRvMUJz7oQ6lG8JDNeu5idODwj0mg7mSpGvMxAQ7xlXmm7o0xaO7H9ZzzwtmU80F6Huy5OtDwA9oq8VHOyu3b8vzxAUU88fuCXPB0rF70NFM28k6J+vDK0ijt6Ppg7E+Kfu6VXRTwIFdo7R4LbOuVtOTyjCJW8iePhuj0EHD0Ck+w8+8HiO743IT1AiMk7dm7Gu7/juDsDSDa8W760O50YhDzAKZu7eTDrOjaZGDxJ6cY8ulAZO5kNC72h0oO7N7nIu8x+Dbxib6y8WuNguydFmLxWRJm8xkmtvD3dED1Lg1U8L9GqPHasxzx/1G+8GHC/PGELzjt1nCa9rD64vGly3ToTLim9o5OkvFbe/zxhzKc87sWwPIZVYjscO1i8G26LvER+b7kVcgi9/QDsO6opIjyccA69DCOWOurDijz4KP+7DybtO6R1IryVLYU834NyvFOjDL0TnNU4RvZ0uZYigTw7G6A6E9k6vJtv7ryHj4w7WrVhvEQuHz2XjXs8R7wGvI/iJDxLT++7HrPpuzDC2LxQ9ya8z0yQu9TGhLvpSn27IcK/uEbqG71jayG6EZZ4vD6SyjxZ5468rNlTPEK5I7xojxU9zM3zvCVf0LzGEh+7wGYwvemoh7y2nw+98uJbO5bYM71nRf48LSJ7PL/YCbyaVdu7J8oHvN5JkzziegK9/lU/Ov/oDr0NAvg7uZIrup08czwh40g8oOkBPbNv8jttR5I8XS8kPF+CuDp4fCm8lzkMPWUqibvFam+8epTGvPOG/ry/A968rnTCPPHBBLyUt1U7dTcEPC+CwrwZCw+7r84yOw7Zl7z+9FM8/tLYO4nqFL2tixe8nDkUPZMMIjxcW7y8lg4QPPbVkDv5cNC7qQ8SPO1p6LtZh+s85fqPPLnoxzwoA/g8Y68HPeAQc7uF0sO8A2jzuntEFT2BSvE8aBiPuKf8hrwrz6e7BUUWPR9sF7uWWhq8Af2TPFNNBDvPr1y8AoR5vaMGhjyTCoQ8f7w4vOSfTjt+6868vBQ5vKINPbzzbce60IFAPAscizxJvU08iB2hvIwkojwm5PM8cGxoPB56aDx8Gd68BgQDu5kXkDzhl0q6ptumvFdPzLzv4Pg8xylVu/L5Kbx3S9c7uTyxvNe1nDsweCC8YLQOvD9D6bljwa87RYhsPGb5sDvdzWY84Bq6O5FFmDo30Cm8ucj0ODz8AryKSva6cjNwPMExBr01AtM6cuAhu0ezMjrv7b08OdkkvNyG37xDdQS9gIslPP3mSjye8DE8viWjO+f0RbzNK4E8AgWBPHgFxbyBUUu6ZJqCvLCv67wmN5e7E7TeO11DVD2jTMe8QwRVPGeICTt1yGW8twjGPPaVEb2uY8u8tYjxu7vJljwBZB07bWf5POMoFbydBk+9Od1GPMXrVbxn7sm7YnTiPFpKHT0MWnc7Il6xu7lfaLxJziC9CHsMPfabpjw4gyG8kULsuuMJpbv2Z/I8buhsPFrn5zwXGjw9/iKdvC/KqbwYEto61f9aPAMhyDwP1ay8+dimOw+MHr3i0ae8J/MYOidpG72D/S+7y5CjO4ahCr1WC0Y88yIIvDwVqDvRMz68jkDjPE4UyLuYZ327bzcLvbB9kDyiG7k7Xf04uj4FLjsuIp+85IOAuxz2dTyrS0i56bnhug14gjwmA8685R8qPTipr7zGlSs8ZQyRPHg/O7x8iga9SyPfO21H5Ts1CBW6gF0jPRW9aDykAKa7eiAYvLFmYDv4Uxi9+RrCO+Di97y10nw8BH/JPO4jwjncg5o8mJeOu3H6TLrtlja9S247O/sgyDyYWVi80ztzPE4nuroTymK8KD8DPbhptbvY/O+8Jq2rO+HH6rw5Lde8nEG4O6J1rzxKmGo8hO/HvCdlvTyxOdi8i0tyPCm5TDy2MbO6CKOLvGuizrqfMMK8cc2EvB2x37vZJnS6VZwIu/HIFD31/rS8TWiWvGOyHjsUTRA6nJjXu8a9Er3s1428v5OGvFeAj7ykrga7UA+oPE/C2TxMRqm5xbi5O4aRojylOpS7zHaMO0Kanbq5LpK8xwSEPI0F2rzVUD88yYG3PH58F70ujas7H90DPQ4RE7zM7b281WyFvB8PujuDhxk9Otj/u4NXZDyQiCy8QYMOPBgoyztqwo47tMfGvCfBFbwE/Iq8fEaPPL6Xpjo5s+q7McCCPFLlo7yebHu8zm22vF3WGjzrgyg8IGgrvNVOATusr1G8Rs+DPAuc+DyBPg49zpUnPFq797sjHAO85gDYPPDsHDvm1ae84KYWvCRGaTwY2567MePFPN/kmjySFAi545TkO9JvibzTP967t2mtO5Rn6Lr8eLg8OMu2PMITHb0MUEs7RzbPOnyhlrwb/bk8BoIDvA+jKD2E+428+BoouzvfIb2VPJI7OXkQPCPugjuTHgq9rhqrvFv1ujtO4gE8VpEyvatRgDx0AEg78CfXPMX3tjv/FQe8d8i1O+fDLb2qRr47Ek+8vNvJLLpvO/i6makuPNMsrjzCwa48O2MlPWbaEL0hAzg9gHXbvBCBfzuKfAg8WjQhvCT/3ryZYx28AWWHuhI5y7zj1jo8tHjJvFPVqDuOiqa8Xr4kPA1FXj2qVUG9OPUHvNs6hDszj628YL9evEi2MLu5NAo64o6VOkQENzx25A89qjP6OiBI+rvAXYA8oRbrPEZLXztx6QK8sOCIO+VoszyMo2s8Hb0tPH7PxjzvPO08IMwbvKBJlDwvCZI8Io50POzuOTzGhjA9OfeAPFvVYrxY+w29b13tuwG+2Tt/vI+8drprvLEhOr3nCY08E9m5vH9C5byMPpQ7mnu9O5fWzjwi9Dw8opG/vP3dwLwoWbI85tEZPH2NBDwY51M8uhE3vFXmrDx3yv874tUHPN3gvDyQpr67lyk0PHrYqjrzvy28v0AZvGjrfjwSDZy8oQ8quvCvl7zi2g28HfvdO2Lvgbzyu/Y5LuY2PVE1M7vVqXc5Z9GWO7n5Szyeta88gFm/PIcM6LzA1vk7CDG/vJwy0rxIuJC8Nr/evAFXUrxWwUY7CmtRPF4ogbslKoc89Q6GPB1D3LvqUI07Cw+1vAW2Oj3ALwq9zUBVPNDGuDz42q87Dhs0O4NO5zt6gW68G+RlPM9jzDzV+9a8iTu3vCkbDb1dxss8lF7xu3ak+btbg5e7GP7yvHiiD739ijG9cy/sPPIrAD2PwA48QSsIuxgBcbtCb4I82MCLujdilrmUz2q8Muytu4OY67v8C6o8y8zHvDgr0ztZa7u8VvkEvca+V7xWer08N/+hvM0HPzxwlce7QqjXvNd5ljy2WSQ7mPSVvMgd6jx05Qe7zCrHO+9xSruDPR48rQ6uOpugObwgvai8sXjsu3btBTwP4RE8ZbCDPCq8RzxU7mO8X/PhvGYtOLsDDpW80f3nPJSIerq1f4i8pYYoO/paDT0R3rI7Z7gJurrGgbwBosu8D+WAuD4fHDrGIiK85qFQPL6ARTt63/e7N9+HPHRHhbudyno80BUFOhH6T7llJCc9BeYXPb+9wTy3wyM9e8nCO+ZVjz3pA4G8X4YaveAM2Dx2ddO8jH+kvD3QsDw/cb88N3yBPFwxpbz7+Ag9g8XbPAnQtzvzlK48338YPCOMmjtOeok80baGPLbrlLtyljQ87+m1OttBOrzyTJE7mnmLvBSVrjwh5NM8j1GKvKEpVTwIZ+c7A5DfO9XjVTsXq228dky3vP29D7u6qO48cFZNu2TPgjr9ZQe7hc/DupZb4DyYLcY8pX2LvFzLprwt8AO8qMG2vMOfkjzHMuq6fg44PHx7jrzjnEg8pgYJvdiFdDzYan2889fnui1Ca7yoBSA7AIAHPVpVzDxZNCu7Y3dovHQoUjwwGNU7udq9vKgS2DtsEdc8iYYvPB9HwbqKUL673muEPDfF/Dsg6Ya7dMYuvEAGTTu163Q7+8Lfu2DpzTvn6d+7jMWsO7cD6bqGIW08h0mtPIIBErwp89I8Oh3OOpo0FTrdhA+8pTqhO17uijpwFBc8IsicvKfXa7w2AeA7SCqEu8JXBjq+Hci8gV6ou0wSjzvOzo28uF8jPNZV6zvLXie7aHP2On6DnLu7pTC6cV8PvCV9o7wO8sq83PGavL/Br7wW4HE8eDbAvCmB/bpqqPG35BszvBJGlDz6WY+7gWokPDGIM7txzc07L+4PO518mTwocCu8olv0OyHZz7xaEYW8CsaFPAhtHDxjAPO7RhLCuo5W5zpG5mA8olm4vCSYlDwDth68BKXPvKBe07oFqaa81ifFPE77g7wQF/Q7HRoUvKhtKDzmRnu81dgrPKxEvTrEkQC8Xjt7O14vczyl1bI8y9wQPMlun7zejyI8IGmSvEuHt7xlXcu7KsKEvIkWRrxluqi6Zf1MujdLTDx98+o7CGymOyMolrxpst68CX2TvIAms7zshlW8Frt3PP+URbxKip+7giCBPHdMOLw8eto8Y6Y0vHT4lLvptW66QfVROw== - index: 0 - object: embedding - model: qwen3-embedding:4b - object: list - usage: - prompt_tokens: 4 - total_tokens: 4 - status: - code: 200 - message: OK -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '1741' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - messages: - - content: |- - You are a search query optimizer. You MUST use the run_search tool to execute searches. - - For each user request: - 1. Use the run_search tool with the original query - 2. Use run_search again with 1-2 alternative keyword queries - 3. Keep all queries SHORT (2-5 words) - 4. After all tool calls complete, respond "Search complete" - - You can optionally specify a limit parameter (default 5). - - IMPORTANT: You must make actual tool calls. Do not output "run_search(...)" as text. - role: system - - content: Tell me about class labels and their counts - role: user - - content: |- - - Need run_search original query, then alternatives. - - role: assistant - tool_calls: - - function: - arguments: '{"query":"class labels counts","limit":5}' - name: run_search - id: call_sq8spu1c - type: function - - content: 'Found 1 results for: class labels counts' - role: tool - tool_call_id: call_sq8spu1c - - content: null - role: assistant - tool_calls: - - function: - arguments: '{"limit":5,"query":"label class distribution"}' - name: run_search - id: call_min0izqo - type: function - - content: 'Found 1 results for: label class distribution' - role: tool - tool_call_id: call_min0izqo - model: gpt-oss - reasoning_effort: low - stream: false - tool_choice: auto - tools: - - function: - description: Run a single search query against the knowledge base. - name: run_search - parameters: - additionalProperties: false - properties: - limit: - anyOf: - - type: integer - - type: 'null' - default: null - description: 'Number of results to fetch (default: 5)' - query: - description: The search query - type: string - required: - - query - type: object - type: function - uri: http://localhost:11434/v1/chat/completions - response: - headers: - content-length: - - '453' - content-type: - - application/json - parsed_body: - choices: - - finish_reason: tool_calls - index: 0 - message: - content: '' - role: assistant - tool_calls: - - function: - arguments: '{"limit":5,"query":"class frequency table"}' - name: run_search - id: call_apvul2uz - index: 0 - type: function - created: 1769793933 - id: chatcmpl-253 - model: gpt-oss - object: chat.completion - system_fingerprint: fp_ollama - usage: - completion_tokens: 24 - prompt_tokens: 378 - total_tokens: 402 - status: - code: 200 - message: OK -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '91' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - encoding_format: base64 - input: - - class frequency table - model: qwen3-embedding:4b - uri: http://localhost:11434/v1/embeddings - response: - headers: - content-type: - - application/json - transfer-encoding: - - chunked - parsed_body: - data: - - embedding: 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 - index: 0 - object: embedding - model: qwen3-embedding:4b - object: list - usage: - prompt_tokens: 4 - total_tokens: 4 - status: - code: 200 - message: OK -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '2032' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - messages: - - content: |- - You are a search query optimizer. You MUST use the run_search tool to execute searches. - - For each user request: - 1. Use the run_search tool with the original query - 2. Use run_search again with 1-2 alternative keyword queries - 3. Keep all queries SHORT (2-5 words) - 4. After all tool calls complete, respond "Search complete" - - You can optionally specify a limit parameter (default 5). - - IMPORTANT: You must make actual tool calls. Do not output "run_search(...)" as text. - role: system - - content: Tell me about class labels and their counts - role: user - - content: |- - - Need run_search original query, then alternatives. - - role: assistant - tool_calls: - - function: - arguments: '{"query":"class labels counts","limit":5}' - name: run_search - id: call_sq8spu1c - type: function - - content: 'Found 1 results for: class labels counts' - role: tool - tool_call_id: call_sq8spu1c - - content: null - role: assistant - tool_calls: - - function: - arguments: '{"limit":5,"query":"label class distribution"}' - name: run_search - id: call_min0izqo - type: function - - content: 'Found 1 results for: label class distribution' - role: tool - tool_call_id: call_min0izqo - - content: null - role: assistant - tool_calls: - - function: - arguments: '{"limit":5,"query":"class frequency table"}' - name: run_search - id: call_apvul2uz - type: function - - content: 'Found 1 results for: class frequency table' - role: tool - tool_call_id: call_apvul2uz - model: gpt-oss - reasoning_effort: low - stream: false - tool_choice: auto - tools: - - function: - description: Run a single search query against the knowledge base. - name: run_search - parameters: - additionalProperties: false - properties: - limit: - anyOf: - - type: integer - - type: 'null' - default: null - description: 'Number of results to fetch (default: 5)' - query: - description: The search query - type: string - required: - - query - type: object - type: function - uri: http://localhost:11434/v1/chat/completions - response: - headers: - content-length: - - '298' - content-type: - - application/json - parsed_body: - choices: - - finish_reason: stop - index: 0 - message: - content: Search complete - role: assistant - created: 1769793934 - id: chatcmpl-983 - model: gpt-oss - object: chat.completion - system_fingerprint: fp_ollama - usage: - completion_tokens: 6 - prompt_tokens: 422 - total_tokens: 428 - status: - code: 200 - message: OK -version: 1 diff --git a/tests/cassettes/test_chat_agent/test_search_agent_no_results.yaml b/tests/cassettes/test_chat_agent/test_search_agent_no_results.yaml deleted file mode 100644 index 84ec7bf7..00000000 --- a/tests/cassettes/test_chat_agent/test_search_agent_no_results.yaml +++ /dev/null @@ -1,386 +0,0 @@ -interactions: -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '1094' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - messages: - - content: |- - You are a search query optimizer. You MUST use the run_search tool to execute searches. - - For each user request: - 1. Use the run_search tool with the original query - 2. Use run_search again with 1-2 alternative keyword queries - 3. Keep all queries SHORT (2-5 words) - 4. After all tool calls complete, respond "Search complete" - - You can optionally specify a limit parameter (default 5). - - IMPORTANT: You must make actual tool calls. Do not output "run_search(...)" as text. - role: system - - content: Find information about nonexistent topic xyz123 - role: user - model: gpt-oss - reasoning_effort: low - stream: false - tool_choice: auto - tools: - - function: - description: Run a single search query against the knowledge base. - name: run_search - parameters: - additionalProperties: false - properties: - limit: - anyOf: - - type: integer - - type: 'null' - default: null - description: 'Number of results to fetch (default: 5)' - query: - description: The search query - type: string - required: - - query - type: object - type: function - uri: http://localhost:11434/v1/chat/completions - response: - headers: - content-length: - - '482' - content-type: - - application/json - parsed_body: - choices: - - finish_reason: tool_calls - index: 0 - message: - content: '' - reasoning: Need run_search with queries. - role: assistant - tool_calls: - - function: - arguments: '{"query":"xyz123","limit":5}' - name: run_search - id: call_wrvoaxs5 - index: 0 - type: function - created: 1769793935 - id: chatcmpl-393 - model: gpt-oss - object: chat.completion - system_fingerprint: fp_ollama - usage: - completion_tokens: 35 - prompt_tokens: 268 - total_tokens: 303 - status: - code: 200 - message: OK -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '76' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - encoding_format: base64 - input: - - xyz123 - model: qwen3-embedding:4b - uri: http://localhost:11434/v1/embeddings - response: - headers: - content-type: - - application/json - transfer-encoding: - - chunked - parsed_body: - data: - - embedding: 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 - index: 0 - object: embedding - model: qwen3-embedding:4b - object: list - usage: - prompt_tokens: 5 - total_tokens: 5 - status: - code: 200 - message: OK -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '1396' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - messages: - - content: |- - You are a search query optimizer. You MUST use the run_search tool to execute searches. - - For each user request: - 1. Use the run_search tool with the original query - 2. Use run_search again with 1-2 alternative keyword queries - 3. Keep all queries SHORT (2-5 words) - 4. After all tool calls complete, respond "Search complete" - - You can optionally specify a limit parameter (default 5). - - IMPORTANT: You must make actual tool calls. Do not output "run_search(...)" as text. - role: system - - content: Find information about nonexistent topic xyz123 - role: user - - content: |- - - Need run_search with queries. - - role: assistant - tool_calls: - - function: - arguments: '{"query":"xyz123","limit":5}' - name: run_search - id: call_wrvoaxs5 - type: function - - content: 'No results for: xyz123' - role: tool - tool_call_id: call_wrvoaxs5 - model: gpt-oss - reasoning_effort: low - stream: false - tool_choice: auto - tools: - - function: - description: Run a single search query against the knowledge base. - name: run_search - parameters: - additionalProperties: false - properties: - limit: - anyOf: - - type: integer - - type: 'null' - default: null - description: 'Number of results to fetch (default: 5)' - query: - description: The search query - type: string - required: - - query - type: object - type: function - uri: http://localhost:11434/v1/chat/completions - response: - headers: - content-length: - - '562' - content-type: - - application/json - parsed_body: - choices: - - finish_reason: tool_calls - index: 0 - message: - content: '' - reasoning: Need alternative keywords. perhaps just xyz123? maybe no results. Let's try "nonexistent topic". - role: assistant - tool_calls: - - function: - arguments: '{"limit":5,"query":"nonexistent topic"}' - name: run_search - id: call_qipdipff - index: 0 - type: function - created: 1769793937 - id: chatcmpl-285 - model: gpt-oss - object: chat.completion - system_fingerprint: fp_ollama - usage: - completion_tokens: 50 - prompt_tokens: 326 - total_tokens: 376 - status: - code: 200 - message: OK -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '87' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - encoding_format: base64 - input: - - nonexistent topic - model: qwen3-embedding:4b - uri: http://localhost:11434/v1/embeddings - response: - headers: - content-type: - - application/json - transfer-encoding: - - chunked - parsed_body: - data: - - embedding: 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 - index: 0 - object: embedding - model: qwen3-embedding:4b - object: list - usage: - prompt_tokens: 4 - total_tokens: 4 - status: - code: 200 - message: OK -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '1789' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - messages: - - content: |- - You are a search query optimizer. You MUST use the run_search tool to execute searches. - - For each user request: - 1. Use the run_search tool with the original query - 2. Use run_search again with 1-2 alternative keyword queries - 3. Keep all queries SHORT (2-5 words) - 4. After all tool calls complete, respond "Search complete" - - You can optionally specify a limit parameter (default 5). - - IMPORTANT: You must make actual tool calls. Do not output "run_search(...)" as text. - role: system - - content: Find information about nonexistent topic xyz123 - role: user - - content: |- - - Need run_search with queries. - - role: assistant - tool_calls: - - function: - arguments: '{"query":"xyz123","limit":5}' - name: run_search - id: call_wrvoaxs5 - type: function - - content: 'No results for: xyz123' - role: tool - tool_call_id: call_wrvoaxs5 - - content: |- - - Need alternative keywords. perhaps just xyz123? maybe no results. Let's try "nonexistent topic". - - role: assistant - tool_calls: - - function: - arguments: '{"limit":5,"query":"nonexistent topic"}' - name: run_search - id: call_qipdipff - type: function - - content: 'No results for: nonexistent topic' - role: tool - tool_call_id: call_qipdipff - model: gpt-oss - reasoning_effort: low - stream: false - tool_choice: auto - tools: - - function: - description: Run a single search query against the knowledge base. - name: run_search - parameters: - additionalProperties: false - properties: - limit: - anyOf: - - type: integer - - type: 'null' - default: null - description: 'Number of results to fetch (default: 5)' - query: - description: The search query - type: string - required: - - query - type: object - type: function - uri: http://localhost:11434/v1/chat/completions - response: - headers: - content-length: - - '298' - content-type: - - application/json - parsed_body: - choices: - - finish_reason: stop - index: 0 - message: - content: Search complete - role: assistant - created: 1769793938 - id: chatcmpl-239 - model: gpt-oss - object: chat.completion - system_fingerprint: fp_ollama - usage: - completion_tokens: 6 - prompt_tokens: 399 - total_tokens: 405 - status: - code: 200 - message: OK -version: 1 diff --git a/tests/cassettes/test_chat_agent/test_search_agent_with_context.yaml b/tests/cassettes/test_chat_agent/test_search_agent_with_context.yaml deleted file mode 100644 index 98d5d919..00000000 --- a/tests/cassettes/test_chat_agent/test_search_agent_with_context.yaml +++ /dev/null @@ -1,492 +0,0 @@ -interactions: -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '730' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - encoding_format: base64 - input: - - |- - DocLayNet Dataset - Class Labels - DocLayNet defines 11 distinct class labels for document layout analysis: - 1. Caption - Text describing figures or tables - 2. Footnote - Notes at the bottom of pages - 3. Formula - Mathematical expressions - 4. List-item - Items in bulleted or numbered lists - 5. Page-footer - Footer content on pages - 6. Page-header - Header content on pages - 7. Picture - Images and diagrams - 8. Section-header - Headings for document sections - 9. Table - Tabular data - 10. Text - Regular paragraph text (highest count: 510,377 instances) - 11. Title - Document titles - The Text class has the highest count with 510,377 instances in the dataset. - model: qwen3-embedding:4b - uri: http://localhost:11434/v1/embeddings - response: - headers: - content-type: - - application/json - transfer-encoding: - - chunked - parsed_body: - data: - - embedding: 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 - index: 0 - object: embedding - model: qwen3-embedding:4b - object: list - usage: - prompt_tokens: 166 - total_tokens: 166 - status: - code: 200 - message: OK -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '481' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - encoding_format: base64 - input: - - |- - DocLayNet Dataset - Annotation Process - The annotation process was organized into 4 phases: - - Phase 1: Data selection and preparation by a small team of experts - - Phase 2: Label selection and guideline definition - - Phase 3: Annotation by 40 dedicated annotators - - Phase 4: Quality control and continuous supervision - The Corpus Conversion Service (CCS) was used for annotation, providing a visual interface. - model: qwen3-embedding:4b - uri: http://localhost:11434/v1/embeddings - response: - headers: - content-type: - - application/json - transfer-encoding: - - chunked - parsed_body: - data: - - embedding: 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 - index: 0 - object: embedding - model: qwen3-embedding:4b - object: list - usage: - prompt_tokens: 90 - total_tokens: 90 - status: - code: 200 - message: OK -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '1143' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - messages: - - content: |- - You are a search query optimizer. You MUST use the run_search tool to execute searches. - - For each user request: - 1. Use the run_search tool with the original query - 2. Use run_search again with 1-2 alternative keyword queries - 3. Keep all queries SHORT (2-5 words) - 4. After all tool calls complete, respond "Search complete" - - You can optionally specify a limit parameter (default 5). - - IMPORTANT: You must make actual tool calls. Do not output "run_search(...)" as text. - role: system - - content: |- - Context: We're discussing document layout analysis - - Search request: What are the class labels? - role: user - model: gpt-oss - reasoning_effort: low - stream: false - tool_choice: auto - tools: - - function: - description: Run a single search query against the knowledge base. - name: run_search - parameters: - additionalProperties: false - properties: - limit: - anyOf: - - type: integer - - type: 'null' - default: null - description: 'Number of results to fetch (default: 5)' - query: - description: The search query - type: string - required: - - query - type: object - type: function - uri: http://localhost:11434/v1/chat/completions - response: - headers: - content-length: - - '499' - content-type: - - application/json - parsed_body: - choices: - - finish_reason: tool_calls - index: 0 - message: - content: '' - reasoning: Need to search. - role: assistant - tool_calls: - - function: - arguments: '{"query":"class labels document layout analysis","limit":5}' - name: run_search - id: call_9kmd3k34 - index: 0 - type: function - created: 1769793917 - id: chatcmpl-938 - model: gpt-oss - object: chat.completion - system_fingerprint: fp_ollama - usage: - completion_tokens: 36 - prompt_tokens: 278 - total_tokens: 314 - status: - code: 200 - message: OK -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '107' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - encoding_format: base64 - input: - - class labels document layout analysis - model: qwen3-embedding:4b - uri: http://localhost:11434/v1/embeddings - response: - headers: - content-type: - - application/json - transfer-encoding: - - chunked - parsed_body: - data: - - embedding: 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 - index: 0 - object: embedding - model: qwen3-embedding:4b - object: list - usage: - prompt_tokens: 6 - total_tokens: 6 - status: - code: 200 - message: OK -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '1498' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - messages: - - content: |- - You are a search query optimizer. You MUST use the run_search tool to execute searches. - - For each user request: - 1. Use the run_search tool with the original query - 2. Use run_search again with 1-2 alternative keyword queries - 3. Keep all queries SHORT (2-5 words) - 4. After all tool calls complete, respond "Search complete" - - You can optionally specify a limit parameter (default 5). - - IMPORTANT: You must make actual tool calls. Do not output "run_search(...)" as text. - role: system - - content: |- - Context: We're discussing document layout analysis - - Search request: What are the class labels? - role: user - - content: |- - - Need to search. - - role: assistant - tool_calls: - - function: - arguments: '{"query":"class labels document layout analysis","limit":5}' - name: run_search - id: call_9kmd3k34 - type: function - - content: 'Found 2 results for: class labels document layout analysis' - role: tool - tool_call_id: call_9kmd3k34 - model: gpt-oss - reasoning_effort: low - stream: false - tool_choice: auto - tools: - - function: - description: Run a single search query against the knowledge base. - name: run_search - parameters: - additionalProperties: false - properties: - limit: - anyOf: - - type: integer - - type: 'null' - default: null - description: 'Number of results to fetch (default: 5)' - query: - description: The search query - type: string - required: - - query - type: object - type: function - uri: http://localhost:11434/v1/chat/completions - response: - headers: - content-length: - - '459' - content-type: - - application/json - parsed_body: - choices: - - finish_reason: tool_calls - index: 0 - message: - content: '' - role: assistant - tool_calls: - - function: - arguments: '{"limit":5,"query":"layout analysis class names"}' - name: run_search - id: call_spxfncol - index: 0 - type: function - created: 1769793918 - id: chatcmpl-975 - model: gpt-oss - object: chat.completion - system_fingerprint: fp_ollama - usage: - completion_tokens: 25 - prompt_tokens: 342 - total_tokens: 367 - status: - code: 200 - message: OK -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '97' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - encoding_format: base64 - input: - - layout analysis class names - model: qwen3-embedding:4b - uri: http://localhost:11434/v1/embeddings - response: - headers: - content-type: - - application/json - transfer-encoding: - - chunked - parsed_body: - data: - - embedding: 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 - index: 0 - object: embedding - model: qwen3-embedding:4b - object: list - usage: - prompt_tokens: 5 - total_tokens: 5 - status: - code: 200 - message: OK -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '1801' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - messages: - - content: |- - You are a search query optimizer. You MUST use the run_search tool to execute searches. - - For each user request: - 1. Use the run_search tool with the original query - 2. Use run_search again with 1-2 alternative keyword queries - 3. Keep all queries SHORT (2-5 words) - 4. After all tool calls complete, respond "Search complete" - - You can optionally specify a limit parameter (default 5). - - IMPORTANT: You must make actual tool calls. Do not output "run_search(...)" as text. - role: system - - content: |- - Context: We're discussing document layout analysis - - Search request: What are the class labels? - role: user - - content: |- - - Need to search. - - role: assistant - tool_calls: - - function: - arguments: '{"query":"class labels document layout analysis","limit":5}' - name: run_search - id: call_9kmd3k34 - type: function - - content: 'Found 2 results for: class labels document layout analysis' - role: tool - tool_call_id: call_9kmd3k34 - - content: null - role: assistant - tool_calls: - - function: - arguments: '{"limit":5,"query":"layout analysis class names"}' - name: run_search - id: call_spxfncol - type: function - - content: 'Found 2 results for: layout analysis class names' - role: tool - tool_call_id: call_spxfncol - model: gpt-oss - reasoning_effort: low - stream: false - tool_choice: auto - tools: - - function: - description: Run a single search query against the knowledge base. - name: run_search - parameters: - additionalProperties: false - properties: - limit: - anyOf: - - type: integer - - type: 'null' - default: null - description: 'Number of results to fetch (default: 5)' - query: - description: The search query - type: string - required: - - query - type: object - type: function - uri: http://localhost:11434/v1/chat/completions - response: - headers: - content-length: - - '298' - content-type: - - application/json - parsed_body: - choices: - - finish_reason: stop - index: 0 - message: - content: Search complete - role: assistant - created: 1769793919 - id: chatcmpl-704 - model: gpt-oss - object: chat.completion - system_fingerprint: fp_ollama - usage: - completion_tokens: 6 - prompt_tokens: 388 - total_tokens: 394 - status: - code: 200 - message: OK -version: 1 diff --git a/tests/cassettes/test_chat_agent/test_search_agent_with_filter.yaml b/tests/cassettes/test_chat_agent/test_search_agent_with_filter.yaml deleted file mode 100644 index 641a5a25..00000000 --- a/tests/cassettes/test_chat_agent/test_search_agent_with_filter.yaml +++ /dev/null @@ -1,488 +0,0 @@ -interactions: -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '730' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - encoding_format: base64 - input: - - |- - DocLayNet Dataset - Class Labels - DocLayNet defines 11 distinct class labels for document layout analysis: - 1. Caption - Text describing figures or tables - 2. Footnote - Notes at the bottom of pages - 3. Formula - Mathematical expressions - 4. List-item - Items in bulleted or numbered lists - 5. Page-footer - Footer content on pages - 6. Page-header - Header content on pages - 7. Picture - Images and diagrams - 8. Section-header - Headings for document sections - 9. Table - Tabular data - 10. Text - Regular paragraph text (highest count: 510,377 instances) - 11. Title - Document titles - The Text class has the highest count with 510,377 instances in the dataset. - model: qwen3-embedding:4b - uri: http://localhost:11434/v1/embeddings - response: - headers: - content-type: - - application/json - transfer-encoding: - - chunked - parsed_body: - data: - - embedding: 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 - index: 0 - object: embedding - model: qwen3-embedding:4b - object: list - usage: - prompt_tokens: 166 - total_tokens: 166 - status: - code: 200 - message: OK -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '412' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - encoding_format: base64 - input: - - |- - DocLayNet Dataset - Data Sources - The data sources for DocLayNet include: - - Publication repositories such as arXiv - - Government offices and official documents - - Company websites and corporate reports - - Data directory services for financial reports - - Patent documents - Scanned documents were excluded to avoid rotation and skewing issues. - model: qwen3-embedding:4b - uri: http://localhost:11434/v1/embeddings - response: - headers: - content-type: - - application/json - transfer-encoding: - - chunked - parsed_body: - data: - - embedding: 1B93udC80DrPAwi8BUoePQ9ck7ocgVg92ju1PE6CSTsRee470aWguomYnLxsawc9aS9PO+x+6DyntT+9O7n3vMcy1DyP4aW80hKpu4CiSbrpUQg79am9PMvOZT2GAqA8/NUMvXOXEL3ICJu8SG2yvKI+wbxifwE91f5CPeSSTbzL8QW8qXssPFq1STtsATi8PMM5O9coUjuFalU8qjQvPEm9pTxFBy27tS57PNgcOTuBOYK86anEvNIh7Tvrv0K88Z/3vJl/krv2t008cpYKPOWgNr1uDQS7Als0PXPyKDtPKwQ9QLkzO0extrw1BRk801Lyu3i1B73yirI7h5qBvN1a0Lt5uXe8co9BPHNJlrx/PZE8WQZqu1zEwrzC3Mm8n4+pOx1SbTxchKk8JyWAvB19bDvshzI85oNovNKAvDrgaLQ7Zlk2u6qMFjzAsxw7q24Xu5GXZzx8Ig4811ywO7QH1bz7Vew8wLF2O0Nr5zxqNAO76IGEPMPuo7oKo6Y7MobEvD+3ALz3Txg8OqqiuDogG7u2vdG8yTecPOZPlLpuBKM8GeTHvAEje7voj4S7KfvOO4dSHjwxtAI6eOcIvKRfJbwqoFg8PiSHPCZ9IbwvUMG7spgdPOlUPzwwoaw85ggkPPdyV7xwww+8Xmo1PFxlBLxhCMC93AldPOPrprzQRtQ8yUQcu3A9qTx2EJa7TG/EPOJEw7zlgx08LiMsO16D07y/ZzY8WllnO1LpIDxT2aS8CzJRO8BRejtU13I8y0Lmu1m4Cb0DCuY6YP7xvIjfg7o7Rxu8qoSxPHsrJbsMbvk7FCnYO50WXDzdKIE8Lo3zvGtx5LvIGGI8fzveO5mD4juBbnI8vtZFvA68ajw1nag8q7BsPL/29Dq4hgS7fxCouXRKyLz6F/g86lE4vDcaLrvbEkm6jI/6uxY+Zbyp9QI8T2yqPPgCS7yumLw8wUhfPB92Gj1BOuG8qW4aOxuiFTxYVb+8b2ikuxOZk7tYtv47IrK3PPmubTojTdk8bnHJu/zAlTxt79C6BUFdvBNa+ToUE+k8hPHkvNUBSDyHOEm7i6wlu2V25DwtxIe8uhRIvNMk37sSLFa62ihTvEXp5DsZ+Vq8v4u5O4fL/LygHzy8LmACPY72CTxvLN85HkBovFaHsrw0a/A8YxaEPA/2YjwTSNQ6A14SvEzZQDzRYu+3adk0PJb0QTwaQka8slMzvH6kRryrDXI8wXovPI7jaTs4h2k83k0cPEXNVDot0YE6mRVgO8fgijwejqO8umvKPDnMrbzT/Ku5eabDOdhNCjkMDhc6ZrqCPOQ6sLw5hLe8hWXKvAHKZLswpGo8uZuOO1ocbbwgIk29bsFbvIPNaLznnOK7Jq6Mu7mfPzsnu6W7rQ/du9a6DLz4hAi8aqkPvDPcmDzxfEI8abZnvBLnM7wZhaY852ukPCoe7zs3QAE9xqdnu79C3bye4Ta8M6o1PBYTuzyVPam7OCqDO2vF87zXbu67pa4avP00frxMh0W8Q+e5O6dZZT0S+xW8a+wXunBgdzxyJLo8f2YHvfZTpzzWFE68+3QZvCUsLz14lIM8TgqYO4jXZrzJG/g7svy2uS1GnTqRM1k8yV+suuhRDbvVdqo8u2rFPJ8dZryLFPQ8ujmgu64TlbypmJg833TCutrslzwwdvQ8zQnJvPkc7ruNSfg7AkBNvOxGJ7y1qpK8HshSvRB/zzzhtP071jKsO4N3nDyytqI6yO2qPLqAFD2ColW8Cq6EPB03+zzl/zq9ulopPBrkbDtbPso7G2D3uw4NijwtPt47WwwVvPP0VLzuv4k8Ac4CvO/IorxA8Gi8GZNlOzFLL73rwI87aABuvLaqzbzn6UC8oh0PvaxNgL1S82c8vh4RPRBEybzeN9A3hlWhO2uHoDzTv++8GsHTum4ptLzB06k7RnZAvFz5iDzbiqG7tLEEvFDSuzxu+Rs9enNXvAqthDxmHAA9MUIaPSZlSjz2ysy7CGB+vPCE3zy9BuO8NO2UuWWsLrxSY+Q74mhdOyEN7rocoeO7b92avFlPiTwlOT88ufKGOH4kXzsogAQ7xK3wuvFCRT3b3Rg8vsB2vN8uDr2tZho9+aUmOyWOrjwo4FU8VS3TvGvlXbyl3t47F8eNvPiLaLwn4Yg8jh4wveziCL35KgQ8kFdMO4xJRDz/rYq8OD66OwD5sjs3w5Y6a6Fyvd3YgTxB0Ao8Hl9kPKuup7rRJYg8aTCtu147R7x+j8Q84YDAO9fsL7rHIIE8BM/8OwgW0zzjjh08MDBKvSoPurwSuhY96bGOu4TTuDy63Kq8I2KWPO8QGzqdn4274rFwu4Reo7zQfzA7Jr8MPew2zruLiq88ABTUvLrkKrz6AxM8feUOPd6qhzxrR0K9bSQ0vSwDNjwmciW83mc8O06mnjopGVC8fmwqPCgePTvuI3S9cUP0POMiLL2xUmw8vvMcOxSdQ7su14487ZWbvITeFLu7Tzm8inwtvIR8gjzRpb85eyDTPCPT8DxQsbq86iwTvJvJCDw41hc8RehDvH6MWrzA7K87U0rpPAcaCrw+MfU7Ug/lu3Q+aTx9XfE8zk/lPNxUnbtZ5EM8UYuBO6ViDj284TC8ArC9vBR+dDydQpG5ETHNPC4YgTwWd668RyP9OyqjsrwTTma4czEJva23SDwOd7W8Ia4rO9ePOzwHBKA8K3QLPde6R7yGhcY8njbHO7NhFDwc5YU7dgPNvFB/1DwAeIq7E4UfPD1dFry9XRq9GO8NPVa2LjuOosM4i1xrvNLkBrrvKC48J5oQO33MGD1H77Q8n13TO+IhYTzExXG8y31UO7KzlzxjT4K7yR1PvGDafDyD8UW8NyQMvG41tDvwPEE920OdvPTRpDuJ6yq8fDskPGo6sry1iKY71dLSPD7Hijp7D0M6QeuGu6aoADxhPQ69moKmur5KJjwoiRQ88pGDOoanEb2kMs88MrZyPBegTrsXA4q8cOhsPDym9rovGFg7JeluO+rD9zvyjbG787alvH1igbyljIS7PBOAvP2S27vNN/m7iWvwu72gcj1LncM8kLOEPLk+m7ti+zA8bFmpPPEcyTwFoQy7abgyvC7JZTqB4qg76zGZPAiBjDtJVdc8tO+kPPZGB70ib0W8PrvBO7f3yTpsqa47qekJvYnA1jxrDSi8b9AsvZxPmTs/0Em8exJDPUL0wbypcYK8wjTPu7ildLy5BW47Aagpux+HSryPUKK6cSbTvJyBkDr8ULY7U7DXPEfwWjzGjeW6ZiPtvEc/p7yyHSS9GUSMvCxfOrsMftg8PGDlPMQWNrzFOMo7iLGKvBcjVzwdWYO8BoEmvXMFmrxm9+c8IOV/PBHvdzviUEU9daOcPEI1rDu8uqq8YLyIvX+oCrz0+1w7HT//O6C/GT0GKrk8nFpjPMWMwjwH2jE9KlKGPEuqirwx2le9kjcJPGG6E7xQUxg8EmhMPKYWDTzKBUi6eTL4vK8knjyr18k8+7yYvLc0Rjw9+K+761wYPbeQVLx5n5+8ZlqOPPLhWz1ACYw87vuqO8O0Crzr0aW7bfwLvWRpJbyvZd48YmV2Pbj80LvWbE494Sz4vHuIZTsdSii5FO5KPPyo6TvVVIA8j5XDPKgUnbzSg4E7PrbIPGAyV7z49q87965evOFOVzwQV/e7CrdAvAbMHrxCgdm7vBMlPAmgfjqGqCQ9q4KgPFCUbrzrDUq8k+TrvC63Yrs/ygy9o7usvHLeSL1PDKE7lLihu5uczzyQkZi8700XPbjimTyJK8W8eKMIvdrZOryUR4u8WNJOvJYC7jn4jHi8fd1vPPJaOzt2zaw7FN2tvFUk/zpTAYS8XhOru7iKbbtybWy8TEd5vKtg2jwz8CG94q8bPSLjlDxDT4G8OY9LvKq8IjzV8QS8XamFPB/bJzx4Ir+8DNPnOUPuuzyu78Q83x+nPGyO0Lp0VHM7acSEu4jHwDu70Aa9rn4kPQ4vObxLtFg8/ZLRPPayorzruXy8rAvdPIQk9DqWQYQ8EeWtPPUrWjzKhVg7v9e1vNpOCrybsQC9NqsGvbu2i7xXPM67FHcSu+kLETzuC/67VwLSvLweODv1n2K7Ga/XPM18mTxuFgi8tjQ3Pe/htbukqnI7L2JhvHl19jwaFo88Zp5EvRgufTwVsuM8i3cQvcVQnTwZi348S+a4O8dbq7ttbqg6EfbcvMqZDr3TliC83Ds5PCSZ8Twe6cw6YmkvvYKzAbyuanK8zEREvUY4q7sb9s48sbjtuUBtwTx7NRk8xqCFvLZ/uTxAhSU9PUaQvHwAMzsMLmk6WKivvJGHDr2RZYU8XK9LPDIQa7y5AZ68a7oSubpvIjyLhCa8YZayvHlubzwHqws8VhKguylSsLuXvvI6cJwDPE9hCD0Svgq82pAhPX/T6TwcVrU8R4ugPJTlMrtojew8WfDHPJOPm7meA5o7iuFGveCJHrxD9ka9gBRGu7ZXqLx5Oio93k5XvJ2FOTuKPF48qg3CvNVHvDz5vvG7DQtLu5z5kLiEGm8950oIPbBy8roO7s46CznivA5NhDxsPpM8lXILPOl4Fbza/cU78qHouxBUNbwD6NM7GN7MvNLFLD1+kmU8c5V8vRuDNrrQ1oC8wXj0PA8KSTysChO9GjGAPAifxDyQC6+7RdRluwkTELu8FjY87dT8O6OtMDyK5Km8NpIMuyJogjwmT8O8B1A9PE1mY7yzSV48pl9pu33qx7uwmMM8w5gLvLa0WLxycAa8XHc2vEFQKjwjD6u80ISQvBbAvTwqeVG8mfG7vPe+BzzmR0e8UPBtPD9oPj116ps7bMKUu6l3jDzGxS49rxsDvXXuAL13Dp67iQ6evN2ku7sYcBC8hc6EO3NCQztRGQs8dTxFvdbliLwL/pw8AFGdPOgWTLz/aC88P9CpPCLyh7xH/2C5+TWqvALvX7yajKs7v56uvH90qryrELc75HSxvLu0Pj2DX4g8Hp89vEUv+jpKyeo86DkGvYSFKr0uiZu79wUtPVqJNLqrW868rwqCuwSTirvLLww9PSNYPFw6Hr27cvY8xu8KvAyMjTxTPQG97S/IOtsHQrpS3p27mv/3OK+MzLrrKz88dEFRvO5kmDrNpaC8BhjWOx6QDzw3+Q085OX0PJviB7tCOkO8FnuPusibRzuk9VO8T7Y6vPPcazu7dMK7W2zLO+QLZTzpMCI9xpWuvGKJQTztwQe84lajvKqKajzLAvE7SDP+usz2BTwxGOM7K7+lPDAQ+7zKY4873e4RvZ5HhzskaNE8nT3pOzeC3Tz0CHQ9whU5PMlhOzxHfTM8V0yOvKKF17yJrw491ZzBvDgogjq19Vw7sRngOw9/Cjz2nR072qkYPUFoBL3HRBu81pMYvN8NSjz4N2M6nFdEPLqvp7zaeTO8T7BgPZ39ubzAAQU9/xohu6hVrDscQzO8M8U1PWCQzjwVIh69U8cUPJrPgzz5Y7G62E2XPDMyDbwIi5U86ExivZuVr7wJtGG8GopjvJa7IrvQPva7IQNNvMAZFbmCFP67uWvwPLK+Rry/dQm9O0WcvJpKlzxrctG8tchxvEANw7tGkEc8Ma9DuscrpToHfnC8/NwAPeQVtbxR+eG7Z3qiPLloLjznHC27oBKrPA3xCbx5xwe9zk1TvMxbPr3L/Ra8zzEnvY2ecLrVETU8qMEbPLtLtbw5ip+7r0rKPFskcLzFXAe8ajtsPM5417yTGc67d9f8vEsxmbxKQcw8bE0WvEclbbxl0wq9W8gHPWBeZr3VVy87CGzzPN6N5LrCmoK7u2u2PNzmjruBKI+8fnZkunoZertXwsA89wXbvIsfXLze/de756w/vHruDbwZtK48Ow0VOlJqmTx66wU9li27vHbTx7w+3p07Xq//vCOQsrwuVrM8ftcUvbVyqzwkMOe6pBRTu4XeCjwMoU28TMq5vH7a1bw9reG7zHixvNcjgTybmAe8xLV8vPp+TT2ysIq7+IMqO08xbzy74o672Ah2PPEf8DxMtay7V1UTvFOjSjxo9Rq8aLDwu5UoFD367G283w5kPH078jyjfsS6OebMuxCREL3+U8Q8TksMvB5bojx1LsC868vEvPAUnjy3O+68b3ywO11LEL2wORE80FetOmGcAT2jDW88zUUzvIclQbzzYrs8nh+qPN7s0bsCzf47vP6kPCBA3jyXNGW7eTtivFIB3DsI+4E8VVR1u700hDqalnA8NLXGOxoedrxbK0i7yM4MuyHDfrterkW8XPyHPPZtLL0MDSq7M/kHu/cQFDvq+U04qJMWPdrvMr0ahSC6rysWPfAvJzwLhas8+1qzPPkJdTw1PIM8DaWsPK+vLLyNS2i8w1QIPEERMLzqmA287OvwOxPXlb1hT1e8RVgqvA5gD73rKUs8y6XCvIi6U7zlP8S6g9gTvTkwyjyRobA8De0fPUJEEbyjdx281+yIvDM4kbw1WKM7X/+LPHcbyDu5NTQ8+u/aO0/cQDvZ/a68fM4GPNMEVjyS4h+7iajpujT0gr27upQ890n5PKyDEz22quY7DX+FPJvXEjvQyEk7keGlOy3mHrtc6yE7+9ocvObLcLx7djO8wOuPPD0NErw43ws8sH0yPHDSlrwOVIo9dBrvOwpApTxEn5U8bDxMvOQAKzx2NJe8p+GcPFuyp7yotEy7QixevPe4kjyIKbA8HMF+PFWSRL3dST09kEI8vOPXD73isy+8B+iXO+cJVDx9nCi9YozbPPpiE7xh4yy8ElwwPBDorrcrXRS9kZgFPe9tmzysuT88expsvBtgmDvKqr08qBauvNFdR7wPiRE9ilqju4qaAbtOULu700FYPHpOAbwdO8O8rOT7PDb91ztCsrG89/mwvPKK+7u/b5S736FHvEAOzbsNMbg8Qk7FPO5hnTv/a287+IsVvIW+l7w7n2A7lZ0qOw5uxDx0lNG7wT6lvIGCdTxd2am8WxDAPDTuWzub5rk84cwyvTBnZLzkLza81t08vDjWmbzzloS789arvO2ckbxMIn27Xdh8uhQO0jtjd1S8GmiJvJp9MbyjUN27TEB5vDkyYTyO2ku763duOrPQzjyFz5C80OoIPcUglTxX9y28AHIFPNIZ8jwwJRQ8R/UTPQPf/Do4ToS8boMNPIpb5btfUp+7A791u9CKt7vAbzy9g13ivPfm/7yx8f27SON8PCYXBrxXEOM7ObigvPqQCj1zU5I8c/BOPHWINTxNwK87cowevLlhO7rOphS9J28/POR4AzzTz7s85PgePfWpmjxSp3E8FZyGvOkIFTzfp/c8t0IAPbuqJDzHkRW8LlcevJsxj7xImQC8OdgPPWaAorxKwNi74qoGu1RqFjwDi4M8iCKHO6/3DD17pc48h3XKvOcVtTwdywU7RkWHPBFZdrpywTG88zpcvLxy3jzuUFO8Lkm0vMk4hjxquOs777+dOyXLnLzg8l07c1QdvAZpC73ExSy8i1UrvETmArs12SE8uTosPKkpUrsMHJK8+qVhvFGGUT38Cxq8WjtxPK39ATyKKDC9ND6CPE103rzCO447X7k8vOKukjsd9Y+9XX2EvEx+rrz+nM05UyBmvLzhxDstmAe9vmECvDnXVLypE5m8iUtKvLHppbwJuEm86fZZPN8Vvju276+8CV2FvILDNjwwc7A7gTuMvFDkQLwN0PK7f5zKuxzkmbvIjz87ojQZvF93HbstFpa7v+IbvHcYjDpFHXE8BtwGPS+0Pru7dmu8k50BPVqJWDzGX0C895Y0PG5Mm7xIPa88GR2gO8mvV7xHMVU8EVQGu94YA7xkkQS92arsOvK8lTp2KIa8aWy0O9tNYDuxQQA96wWIOkgVsby9AY48ln03t2a5Yrx0T6Q8EnCCvLrMyjx58iu8NZAQPMt0pbzTrVy8tLIGPEs3mzuB0ZA7B73RPL5Rjrzwo/G6R+p3vHHM1zyV1DA7b65gPPUKgrwkoxm9/0abvFYVpbzMjpK8mMT3PNILVbtYE+q8t2ePu1HWgjzZ/DK7E4nvuvK6xby8U4S5qoiku0F8zztK6h27MfOJPDfW4TzjbiA8QRUBvMNZITn0WTa80t1ivGknGz2xgeG7KjkCvd4oAz1h2ua8uc9avAIVDbw+0TM9ipozPEfNVzvylRc9OdHPPNMgbjqTptG7JV6lvNgNHL2bUCI8lxgkO9yBOLwY64A8xucOvbTaPzzMQVM821UjPemwC7y4DU67xwb6usc+GT3USOy6jBt0uzCaGT08fBs7YPxBu3LUmzxjRRo8qjHJvHW3MjydxQ28KhaLvMUu6jvPfXw8FEYFu89oHz0l2TK9xeJtO3OuGjsXkTY8I/bSu5c8KzzXSfc6wlZaO0PcG72AZ487z5jLuwHOCLxhEKi6EeqVOxhpjLuAQcO6j2zePNkorbzexCI9r+vSPN3qQbpwpJO8+UUPvBV/bDyHxXI8wkMKPUXZlDsXM7y6VIRDvI1LSb17Cuk61MLJO/l9gjxHPfG8clCyvK7SODw8vfI8AbaAuyPRLDtI1Ie7U9OEvNUWpjwbqoC84U4DPdNfgjy/TBK8X9XSOlPVnrsIoTS8r79cvBYZv7zguuc8yc43vPCeXrz9o9G7jA8WO0A9AD0KPaY6pZDWPIynWzzCAhE7fOQ5PErg4TqWkCU8mVJju1RDg7zVqo48RPYwu8LfNjxag3i8/D6quzcDnjsu7028HbKnvAEDaTy9+xw9cliVPAegnrzBjxo8khV7u+Qw8Dy4RI284PQSvHVaBr0h4TU8RgFZPOAGlDzAZf08r8h0uiye2jzQTwo9NIkJPf9dpzwVB5Y7hZUkudPSKz19aJq8n/ocvNrjz7o7CRk85SQZPIxOtzzvSFC8H2GhPKt+UjvUn2C8w8GNvKqySD2IEiS8hmLIvPfI8Dya4Y47n/NRPaCWCL128qC8iUsmvA1dvDq4oIs7Ve+SOpUcgbxZonq8lQscPR/1Ab0TZ029mgTjvJzpIzuUMAe9SsI1PXdm3Tx74hE9iJdgu4mUlzyyrUs8SgJZPLx3sDxqvie9wYDmu90XmLtGENI7VD+mPARSkbyCzoa8uVFvPI8evbtipQU8hn23uqXngbzZcem8QtfRvCKVuTz/qmG79ivaO7+vrbxk/JA84iT2u6dTkju8cw09bnebPMSP6jxPVzU8570uvE3YUTxS7IQ6iKX/PIosdj3w91I8V3lhvHic0bu/c0E80J/YOrqzHb20Ig88HVuPPHAtiryky1W7zu46vKeOPLy3sMa8xmSnvIetqrzYfY+8E9EOvJTko7tysCc7C4wMOlziQjzB7RU95Yvru5VZrztzc6M80wfAur/tabo/Ch694Rp1vNwyBzybZVE8lwWjvFk0YDuTqJs7TCGTvOS0H7tmWlO6OYSJvI26Lrz314O8v78rvB2+TzxPUqG8bO0mvACvDrwddPC8aLzDPJUT6bzNu9+7OJNWu/qlrzpsWkw8KWbjvH5iCb2QXFi84Wp9vQtljLwr/3U80uQaOpAWJzxgSKk7PH8EvBwuuzvZ7Su9nGa9PKV42zuY4We8OH4KvRYEOTxXslK9vXFlOzJVKr3sM9o80V+POpYCnTzM/Ag8bWCAvKBfsLv/DPQ8Is23vI+x9LxhdAC9TkcaPDIeFzy/0US7kBBmuxvWIzzN33Y8dmsdPMs1O70Enws8+uuZPAwtPLiuRM+8vDDdOZKA/Lxh3ig9RL+ZvOf7OjzTLYC85nq7PMXpFzxGqjW8/pYLvGUGabxVwIu8UN/VvNSfODpBOzG8pdYhPAQn3LxIk8c8Q/SuPBOi1DurKVe8tR7aOnX2PTxoosK7K24PvQ7Aq7vp4po89WtSvMgJWTy0u8Q8ScajvEo4Ar3Shba7xyxqvHfEC7xiK5G8FMA4O+rGITv2Zj+9C5aPvDYdv7w49Q68/aBXu/46vzwp/yG9QIE+u/IikDsIPn+8Tiq5vNtynrzFf+28rJJ5vAFnODzBJgs8QK9XPJcHgTxliiI70YItPPXfNTwon+A7Dh5nPMhkkbouiwA7v1pNvBwwuzs6PcM76YCrO5G6tTyby+K8US1WvOvKoTtOSX283Hatu6jNy7vEMSq7FFt8vHmNPTxm0Y888vsHPc+ebjpStKa8lVcZvHRt4Dy9igq9Et8BPFqIITwFVUu88sXWOwyAHDp3pRw7t/yovD38lLzigAs8LDT0PKRdL7wZek25orjsO03yvbykpKG8CGCtOhIEvDwZlkk8umsXPIoXpzzpZrm8nVqBPLWpDrwFajc8NN3Tu5jIM7wGdDe8nRR+O8lKs7wAW4+7L5zoO67/DbyjGgM9pIeqPEQ1hLtwdz28l0AmPUZinbw8gA+94aJvPMJH+7vB1pu51PwKPUvp3DxUmvM4Kcg7vO1bljyIuUM7hn/bPOr6CTt1sE28S6jvur4cnbwPtrO7oN67PBwB4TysneM8DAedvHWAAbwp8bq7kD6GPIMJRrzz8WC8I1qKupdGb7yEr1o8L2tTvEJNMjt7qPM7Fh6rPLcxuLx6Ey49rYNIOw8ZFLwtp9a8srb+POxuGrzRroI8T42+u6P6NbxQGA07X5vIPOxwcbzmdIo8G9GUu9LltrsTUEE8QiRBvAO8brx/tOm78RMCPALU0DzJ3hg9B5lzPLCviDz1xRG8HGqXvIL3gTn0QCC8mTzzPO/Kgrz7btu8u4XqOywch7wYHjC8VuevvHuKxbwL7SW8AM02PBSGsbyK3+q8FWK2u0N5mDw8UJK7zDI5O8iOYDxrPT470QiUPFw1PTy4P6a84R0mvf6zyTw+ugY7XPwQvWLy4zy+jsC8NSRCvVHZOL32mSA9kR60PBvzojwf1Ni8afZDPNgsKD3Yxq+8i1qcvMmp+rvLPoO8nfK7OrSlgDwMkKW8EFu0O//uFrwvek68WqS7uwlKrrwktIc8zSUXvV+fvrq6Yhu8q7GVvDuyDz1d47I7bfofu+qGAT1GEzq9RlAJPRvsuLu/T9C7MqEPPdYggrz+54M71hkIPF+WIjsGMs66KRb5u5JrBTyE+c28tKH3PBRPqLwUe9o80lQ2vCbeQryE0+q7dep8O8cfajssJ1A8xBXjvGnaYTyv2fI7XjsRPGrXpDwXLtA8dsCLvBCd1ryAeSy8Mz+DPD12C7ypSrw82yzyPAiIBD0ikT27Ef6JvO+kGD3Mi2W8k0eCvGWquLwsF2I6Ub8iPWIqwLpipDi7AhbaPNPwGrzQ26O8mlQnO54dAbxRUxe9ckwVvJTZXbyN7Qu9jJKCOyNlYTvzoOk7k6alvGFNJ7qoB5A8j9zIOzGP0rzEYBY90MHMPNN8P7tHOUG8VSWcPF/EHrw3vIk8l0yIvLJfg7yt9lO8lhAjO+F9YztYL0G9XsCKOz0G5Dx9w826NJnkO5grA7pp46q8fqkvPFNSRjv2B5Q8S8EOPLIGDr3ONwo8A/HvPIPywDy82de866UxvA/aMDyWKiK8GFGNu+U9uLzmw+k8BLMNvb1C8rv0oqQ8XarmO1OjeDypN808m/YfvWIBubwrNvQ65B/gvEbgobw/ZeU6aaWavIytNTz41787Hgy9PEzJjbvOE2467pypvASJ0zzwQ1I77JNUuknzWD1U6BQ8U4ZOvKr62bx8too7wu9zuvYo67zg9p471z8svR4ZlTzMd0Q9yIHLO4xOhDwe1Z27LV3TvIwjLzx9d/S8U4yPPAqvYL0DWIu8B/bcvFNyp7ziqPs7zq2nu6P1f7xRY5G82tTPvDCjRT0JJuw7epf5POVlbDy+uzK94Oa+PEkCZLz3I2w8H6DjvF3dHT16k0g8UcM6vNGSDrskbg28pwkuPEHVD7zw9B86FI4SveU0ED3TSQ87YcRkulS5rjwkKIE661elu/8C4bsBO467IH0ovIwPQDzUKnk8LWTGu/omxLz05Ys6tPaGvNRcwDxI+h+9eOG1PNyxx7z0FyG8Ujb9vNEcpbzqzTm8vIyiPGHmj7tybXQ809qdOsRaOTy5Bpu8gmhpO87xTTxwxtY82gE7O2SHBbyf7Jg8LLVIPOETPrw+nZ27Wv4XvUgYHj33iNu7ZS6xvDoQND3Jq4U8GEjzuz3mWjtfSeS7Opr1vNUArryEEtW8oVzuPMaXmbzCQgy9vC3nu78PgLx0Fb48PkwDOyB3rjzgC8k8dfGjPGTZ6Tubuma8WO+svCaiZL1bdvm7Eu4xO8RoKru+vVA9+46uuruWcLszJqw725LLvPlchzwJj/a8OP4ZPHbRKryv1x09TACBvL/hJr3/jZS8X14HPU8msbw3O2+7BdllvDEIODyAPRU8cdCCOU75FTyh45G7MCRXvBB1dbtqYFE5H5DIu39+KzwZER66dnSkPPqRFjz5y0c8TGWcvLJh6bvWauQ8oqsSPIoUAzylI9w8r48evFW4jbxhYdm8AcA5ugnZBLxkXPu7CpSdPFU2iTyn5TI8iFKOvAO6hzzE8SK8p13sO5XsRrwTJgo8jVIqvLBlJL1aCCs8pnEmu05hLb3xmcC8RiR2uiOrojtbQmY8GPqYPFdJFbzn05m8QW0EvKlyXjzOzNk7TEkrO6pX3rswoo28caocPIy5pLuc5048qezGPBPSjLvQQqg7ByrIPD9RTrthxEu8kJGZPPQ1BT2t9Oq8r/EAPeLspTyZBZw78IOyO9MTsjyGm9g8chyQPCOLHbwh6PY7RmikPBWrMLwaA607k38evNYEnjydPgy7vaPFPBi22TzRw+Q8npc8vG7forwAN4M7MRSpu/q9w7uFP788+8lWvFMND7oDMW+8X2nOO+zhdLwPyQs87g9WPDZqHLzerJm8few3vK6ggjz3lik6pag2u/1amLtHIXy8CiJYvJGJNjtzmGq8GheSvLiaq7uRKIk8nJosvL9airwICLm7ZT6evO1yRrx3av+7aHmGvJov3rwD25g7zUKJvHULEzxxqK285z7Xu5jskLwYxPI8iYiovFGxCbySyuC8XphPPCSrfDxP6CK8/5YEPArZxrvRMJM88nv9O6UJ27n8S6+8LV8gPFaBq7sctem5EBX8vPZyhrzAs8Q7KpdFPRtcRLuQ0Nk7h5MNPWB/HLxfsGe89txqOxa9Fj35g647Ey/6PAb9vDym5iM9UKFEPICDi7xDedo8zfjVuwRL3DkaKtE8hnXPuoTKxDt4MAM8aI4jvWfJQrxrLtS8hLXNu9qVaT38a4G8wdgnvZlTjzwqVqc8BcRKPO5elDx2N4C8dNLWu/Gkwjx7ig88dT6KO5RBjztjvqA5fLKjvIADsbySF3I91r36uJnBGLwfCBI8XmZPvFJE2jvIyoO8L3XFPH0xdDv/6Ke6gRT7u2SEUry6uMA7guqCPGFbzDvhsqS86XhePBOJfTysAn+8UzzpPGRNO7sfcJc77s+/uwe1nzz0dy67tzS1vFSGZbyIV7q7u6KJvFAHurweSQy84meau6zy1jxOnMs8qLD2O51OzzxtJrA7ydQlPI+OgjtLkgM9rr4+vNkcYLyi8yg6FQEQvF+F3zzH8ac8BlSIvObkH7zMPZG80S9RvHaQpTwC0c07oQ23PKuZsTqb/by8BqctPOyt3TuyNAu8tOeSO9iQBj1U/HE8Qsqiu0STTjxm1jU8O3EBvBN+Cb1NS9C8Nhiuuw== - index: 0 - object: embedding - model: qwen3-embedding:4b - object: list - usage: - prompt_tokens: 68 - total_tokens: 68 - status: - code: 200 - message: OK -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '1077' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - messages: - - content: |- - You are a search query optimizer. You MUST use the run_search tool to execute searches. - - For each user request: - 1. Use the run_search tool with the original query - 2. Use run_search again with 1-2 alternative keyword queries - 3. Keep all queries SHORT (2-5 words) - 4. After all tool calls complete, respond "Search complete" - - You can optionally specify a limit parameter (default 5). - - IMPORTANT: You must make actual tool calls. Do not output "run_search(...)" as text. - role: system - - content: What information is available? - role: user - model: gpt-oss - reasoning_effort: low - stream: false - tool_choice: auto - tools: - - function: - description: Run a single search query against the knowledge base. - name: run_search - parameters: - additionalProperties: false - properties: - limit: - anyOf: - - type: integer - - type: 'null' - default: null - description: 'Number of results to fetch (default: 5)' - query: - description: The search query - type: string - required: - - query - type: object - type: function - uri: http://localhost:11434/v1/chat/completions - response: - headers: - content-length: - - '568' - content-type: - - application/json - parsed_body: - choices: - - finish_reason: tool_calls - index: 0 - message: - content: '' - reasoning: Need to search for "information available" likely? maybe ask general. We'll just perform searches. - role: assistant - tool_calls: - - function: - arguments: '{"query":"information available","limit":5}' - name: run_search - id: call_ko9qzts4 - index: 0 - type: function - created: 1769793924 - id: chatcmpl-257 - model: gpt-oss - object: chat.completion - system_fingerprint: fp_ollama - usage: - completion_tokens: 48 - prompt_tokens: 266 - total_tokens: 314 - status: - code: 200 - message: OK -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '91' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - encoding_format: base64 - input: - - information available - model: qwen3-embedding:4b - uri: http://localhost:11434/v1/embeddings - response: - headers: - content-type: - - application/json - transfer-encoding: - - chunked - parsed_body: - data: - - embedding: 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 - index: 0 - object: embedding - model: qwen3-embedding:4b - object: list - usage: - prompt_tokens: 3 - total_tokens: 3 - status: - code: 200 - message: OK -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '1485' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - messages: - - content: |- - You are a search query optimizer. You MUST use the run_search tool to execute searches. - - For each user request: - 1. Use the run_search tool with the original query - 2. Use run_search again with 1-2 alternative keyword queries - 3. Keep all queries SHORT (2-5 words) - 4. After all tool calls complete, respond "Search complete" - - You can optionally specify a limit parameter (default 5). - - IMPORTANT: You must make actual tool calls. Do not output "run_search(...)" as text. - role: system - - content: What information is available? - role: user - - content: |- - - Need to search for "information available" likely? maybe ask general. We'll just perform searches. - - role: assistant - tool_calls: - - function: - arguments: '{"query":"information available","limit":5}' - name: run_search - id: call_ko9qzts4 - type: function - - content: 'Found 1 results for: information available' - role: tool - tool_call_id: call_ko9qzts4 - model: gpt-oss - reasoning_effort: low - stream: false - tool_choice: auto - tools: - - function: - description: Run a single search query against the knowledge base. - name: run_search - parameters: - additionalProperties: false - properties: - limit: - anyOf: - - type: integer - - type: 'null' - default: null - description: 'Number of results to fetch (default: 5)' - query: - description: The search query - type: string - required: - - query - type: object - type: function - uri: http://localhost:11434/v1/chat/completions - response: - headers: - content-length: - - '500' - content-type: - - application/json - parsed_body: - choices: - - finish_reason: tool_calls - index: 0 - message: - content: '' - reasoning: Now alternative queries. - role: assistant - tool_calls: - - function: - arguments: '{"limit":5,"query":"what information is available"}' - name: run_search - id: call_rlsnakww - index: 0 - type: function - created: 1769793926 - id: chatcmpl-841 - model: gpt-oss - object: chat.completion - system_fingerprint: fp_ollama - usage: - completion_tokens: 35 - prompt_tokens: 339 - total_tokens: 374 - status: - code: 200 - message: OK -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '99' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - encoding_format: base64 - input: - - what information is available - model: qwen3-embedding:4b - uri: http://localhost:11434/v1/embeddings - response: - headers: - content-type: - - application/json - transfer-encoding: - - chunked - parsed_body: - data: - - embedding: ZhAIuR36xrvLeYW7R4NouGgji7qXRnc9LbzWPdW3oLqw2ZY8798UPT8C+zrjMfk8AJKeuQpSprziW2M8zExKO9GCWjwdesc88Qs0vP3WwLvpwoW8DXOVPJWyHz0LFo67ukKbvOmf1LyEIvW8GLOHvXVlKD1nc/O7ztosvG/c1ryL8Cw5MTgjvAlC6zvcpQC9zBXcujdZZLxjQDG8LlQBPMjdyzysx028dw0NPUIOEDy6qti8bQfevC6R07hJfXM81XhpuxcbybwNIgg8rQwtPBIXJLwRstW813Z1O/YZ4zyiTeA8+tEFvJTKpzrK5Ko7bluBu1h3IjsEVg+9Dk8IvM0YTzqtRgS9qswsvNQv8Lw/Mtc7iErqO6p3mDz47sm6gu/6ufHVlTwG3As8N0QPvTfo4LstjAU9XT5TO9e8/TzLMpA8anWEO0o9+Ds5Aik9CqW+PKYrTTnT5Ls84qqrOxWITDu2D8m78lBRPDOIpTvIDUo7g5H/u9zAFjt4xIQ8ZVDMvAbT0Lwiwqq8vCEBPAlaELtRxns7+TUMO6fkcrwdCnu8e+6rvDM117xir+s7KSxkPEZwjLwdbzy7gZ8gvD1lpLviiIS9NTzHu508GDz2Nje8NYYQPcvxQDyYuMY8XEQGvDuF9TwoV5s7gAsxPKJ0ITxRTC+9n1+hvHkVNLyYDse7fH2HPKEXsDwlpry7WoAEu0jlXLwhkL+6bvmnPGu7Y7yHfCg8pNEBvZI3BTxfa2y7Ok2vOjjpgjsoI5I86Me6vL+y8LxiUyq89yEgvFUp5DzlnwK8U0ukPB4xlLxF91M8yxCrPPoKj7uCoyo9QoR8uytkhTw0Ld87tKBxPKb2ETsdSNk7F4q9vAWLOT0u/QE8YqsdPHKApLwxoIu8Go6fvMPH7bwiLgK6KjBtvG8jpjuuR9G8Y22EvDyeJToDBK68fbA2PPwIF7wo0t27Qlcku+oVEb2COlA7mglNvE8NsjzAC3A83jfXuzfOlDrvgiQ8hd2PPLr75rx3OxA98F3mu/0NLzsaMR68QyXLvMywXrxzaKO7Crw2PF1U2DwHpN486GLau3ThHj0hSRq6gpj/u2buWbujaHo5l3gkvCzPlbs/W4W8QrySPNnPAb281oq714WbvMFIwjsACag75x3vvGBPNbw9LYY82wGdPImDjDsnWnU8Zr8yvAKQ4DnFKg29v46IPPJgrDmHUQ28XVIfPGYxl7sy3Qw8SUaWPCeUE7vgtuw7Fu2cO809YruPBwC9V1biuki33zzYiAU67MEMvZRQHbw9Jn67VIUlPKwVQbzSKbm8qOGmO2p4vbxk+Um8mWQQvegOAL3jzi07T8uSO4qLjrwgwVs8aYKIunAYY7yvNJW8zUxcus4qXDwbwjO8gsV+vMVDxbwGbbU7Ha0fvDSXYzwtTCG88ZRNvIidgjxGXpu8VBMKPRhwmbtejh48NSodPGkaDLyr8b+8ZsYeO1yqRDqk62g8Mow1Pc6pRLwDWhw6ctVLvPG+ezxUPpm8lQAJPG0Ptbs12VY8hXrovKFRjTpc8mc8p6MBvR+lNDwWZEq8qFhkvfx9wjyGMQM8F1sgvAXEMbzILj68cc0+OgKRpDuGqsa5uKJ3O0tTCD3dUdM8VdG6O1UxiDz0w4O81iM4vVe7LLwgFbG8eeeIPHxJCzuHjmu8jB8bveyHOjz3UoO8Q3LIvCmyH72bDTI88BRbvUO0x7ubtyq6Vz+BO5VouDyBguc8hTizPJcYIrxwrBU916QsPDQiBz0L0IO7E/mRvA2lyjtv/DK8ETuWO91nSD0vphE8yd3Dupapyjt73Fy8bncmPMPJa7t7VvK8YLjsObafFLwPzVC8vAKivEZHar0mr9C7z8OSvABNHTpnzra7jSAOveEuAT061YG86UGuPC4UXT19pze9v3jDuzhrSztWKPa727/CPHDfgbwk+um8eLF+vDKA5DwYHr+7KWKIvGFckzvBzea8uU5vPPGOubphaFE7HAwEvIq/2rvtOEG8tOcGvDMPuTzpObo8YspTPFAYIrx4QgQ8xZsru6ySqzzQJkM6rGaFPB+tdzyqF6o87/vFvN9yKT1gyp+7yMglPEr2GL0iBi0916SQO5GILjwwRNg8nIDPvIll77ywMZe7ODMWvRNCGL2I7+k7cISEvEZZR7uZm40861gauyDfOrsXuZY7ShmSPNX+CrxQ9Vk8scL5u3aUkDsq9Zc8a5blu8+pxbxaQ3s8cBX3Ox98g7wkVR+8iHLbO/PLDTxh33U8MPQQveljjzyJzcm83YhtvPxgZryqfqe8GwymvBvrUz02dFa8TfJzPci4DbtERUe8/UtEPBzZjbynfCY53mz4uwxqUzwsvfs8zgIJve0b0bsDvIy8stQhvMGaZzwKFxS9mPU6vByhILzt2h28k1x7vOOkb72xKVQ7bQkCPZdT4rsXdDm9noYou0fYsb2uXxE8U11QPFA1Nb1MDj281jMMvW2Z0rygluO8bwJwvMaHAj2f46O8rQEjvEBLCb1qp7W7wsovO0PFqjuDsa47pYjBvOL4Yby5zww8P3mDPJNaWDxLEU88m8+nPNFV9ruXZ6w8K+ITPQHsxzztemk8k6+FvHexXDxA7Lk8mF5JvGvdFbwSeOM8d4mEOU+N27jz8tS8Bz7qPPUv7TuZB9i7LDEWPfs00jsKo5C8+OOJu3ULdLzzFi080/85vZ77obxv7xs8HtQLPGQAOjz65xQ8e4A3vYzz1DxnnIc8cCdDvHuy7buoCHs86VluOgxciLx5yfK7649hPHreybwUL5G8DGvUPNOu2zyBoo88DaYjvIQMeTyaUN68K7RBOz7jjLtuWAQ97S4bve0XErurymu7j3X2POxIJrwSV4K8UeHHvOezmLs1TEs8nv9wu70m1TwtcBm9X6NpvC2vxbuIABS9zOmSPAOpUjxUF1U7f+udO+TIj7xMSiQ8F2UxPcEikLs9DRA8V0a1PMW8lDyCQe27XPrbO+sedztFuki7+M2LOH57crs38om81c5jOwTAg7xVH/a6HX+3vMEKNj0oU9e7VLwLOgDjRrp8efi79+3tu6PwEb2ujjy9Z38cvBmAQLuqoAW8Em8pvG0+irwX7lo6zR4XvAAubrxLJ7w72rvqPCE5ojwqkSS9VWddu+14VzzH3oO86ohCOmOJerwyB5+8Qen1OvxN5rz58Jo8iHlKPYjGBb3Vmxo8hQmIO34TIrw1YTw7e2bwOyq+pjynkZC8zkKBPJltZbyQKIS8QIS/u2cTTTxCg7q6zS38uzlCLTzw9ze88ENGOW5EhryBl0K9wMyzvPrP5bw8o5k7DJ7BPFI0ML2IT9u8mSiavN2G6Ts/Zs68oX8Guw1DJ7yWrQM9NZdhvFIRMjzf5QC9V3hYvVDYLT1ONh28VsINvUevkzuGbpY7/V/hPP4dILwIySw9wGqjvLTGpLx5YLg7EhLQOweqBz1kORQ8TIexPObCo7xeAui8uzENPb3gezojTSM9CyIEvWcN1jyM2cO7VhUgPHa1V7ys5HI8Bh8Lu65B2ryJ2KW8LclIveGEMrw+CXA9WdNPuMKRuLt2+/K74n81PZRP9Tksqik9/10SvduvEDwl08c7JUYNPdEpLbtPiG88QUFHPPfD3TyQkgK9qSZguiubIbwOZry8HLW1u4r4ODxkgdQ8dUs6PN5Wsrx5Jle8iPB+PGQ4oTopu1Q89OMZug+xpDx2Mg+9L/hUvCzhoDyFY4Y7VtrEPOwaujw4IZm7ZjJ1PdIvnrv1bYM809vJOm7BkjzKUea8wqM/vaObPr362JK8etw+PEuvqbyKRq68vsheuxIJaLzeaiy8IN32PJZtajwxCze9k6QkvFNZnbwYbRq8p+UTuM3GnLxRv/c8obc5PUlSoDxbfRC8OEaquw0SOTxP4rO8wNOKPBHa3LyS/iO89/STvBQ2qTz4t+M7vyMSPM7GHrw2Ih88viB4vKh12Dz2R0W9e976uw4T4DvU5fm85LJ8O0obpjt5EK47gDwePCGxUbymuS09gZQUPdSegjrbkkE9bctXPEIrPryE2S288MFHvJA3NrxG7KW8cS5vPBYK1Lvyd5O8GSrtvKcNxjvA1VE63O/sPBpdXjwU/xM7goqdO0CYnDyPaQG9doDrvDzdijxADYE7Qi9FvERmdrzG7rM8q6HIu/7lP7xem6w7/9IBvQ2JkLx6JFW8ZBcZvcET3jxCMzs8ZHk7OO6tF7qvuhM962V8vPsuLLyRLhq8dRtLvIEiPjyfVoU83X/dvKhCJrvTKWk9aoRsvANnkjxNkZW61IRRvF4GV7y8Nc08qwAVPSBMJb3Fmwi8ssLoOyzHEjsybcm7mhwYPNSQQ7zs1og7ipt6POuPFD0P5Ng89gWnvEUZjbwBl2g8/yHBuv4QdjzxyTe8RKMEut5HPDt5GUi6qCrQPIDuULwF6Cw8j+HyvLm6Dbu3rcM7wllbvRPRJL0qkp68ZheoPJpmuTtumIQ9E2oBvWpBeTw8u5s7gwtTPCk8xroeoeS8Dq1IPIlwkTzs7mk9bC5nvO4B1jy+Xh88dFnxO1zqsDyNLUE8PvDOPA9xkTpKshE8nhATva8U6Lw2mtu7LVV2u9mUOjxBYLI8Si7BvEwLvrvk6B29dLmqPN3UszzDc7s8Xrg5PDYxYbpZxgs8yjclvLXEdbyqiN27msfRPMY33DwE7MC75hgxPUX24jyA0KK8oGDiO80mCzwRLK88PU6ZOW+0RTvLGQm8MAgFPaLTzjsI2ko8V58evEffP7xLH4y5ZQKlvHeluTtymCe9aZayu5F36LsIIvG8fjozPLlRmjuzl7I6hvOQvH9FZrzkkx08hRRhvFe3FbwGOwu9SyuSO2ZyHzxOnR29y846PBdZYLxTtSs84EuDvEzKBb3SvhA9H5HquoXXEL3FXk86FnuKPeixv7y+Xve777Ynu7MYO73KUBc8LS8evUE6HTyb4A69se+FvN4gWDw7Cly76I2WO3PWtzx3/to84n0GvEzhzbtCApG82iy2O8ZSiD2zwnW841zCPNRjU7vk5Qc80VngO3VDMDwkUc+6906mu2j26Ds96OQ6k9gEvFRxx7zF7My8LN4LO3kP8bvJ2bA772oaPKYSbzyeLxU8XsQlO8p1Mzx+COS5JH2oPNL5F7v6WKO89yUBOyOzyTvu9hE8W8xvOi3t27ym3hu81RFXPBz7Az0Rz748ay05PaS1kTzpjXy8H+PoO88c/DwnSRG7Y1EEPMrIAL104EC8arEQvNYEn7sRL4S8cZYePMRrjjxxCGe6JOa/PBw0qbxITRM9SnFbuzrTmzwes/U86HSCPIekCb0/tbM80m2jPMe23LzgtMq7LmArvYuhyzzo6hA8iyEbPSQ+KDy0lAm6ZluHvD9rKbvj16O78fPFvLdpmrwanpY8ctkDPHmYx7tsWho8NP9yvEnuDDuBI0o7GrItPKGHsTyujBS9ab6IPJtNH7yAgKu79ue7PJj0tjwBIuk8h/XjPMEtZbyzWLk7Sg+Xu2isdLsLYdC6pphOPPyCB72smDe7btIzPGDCyTqbjRi8q7zavGrn+zkzAqg8HzkdvA5T+LyEELQ7uHvFOi8tujxz4DO6PXVZPNFpcTzzi5k7s0g+PEeUqjwLxa+70Wa2PPVEDTy6KPm8PTGCPOGeXLyNtq67mbwBveorJDsO9Ra8GisKvHKQYjwNqQS9j4G6PK15DbsM85M8q9xCPGWohTvnk6+7O74Xu8xfzLyN8vW819gxvR5lNTzs++u7DzabPN2ml7o1TR295snrPOcj9DunWbI66DnJPDiENDxGjn28YREEvUHeLDvejzY9rGFSvCHSgrxdwV+8PdMxPCmIRzyGchA7wDMhPENfYrvNPuI7jiVqu6+1X7z7SLa8flrTPFrz8rsRsYs8EHABvcy7sTsI0oK5S/+BPHMfQ7sA7TQ6Q3hKPGBFijxPuYu8aLzCvPG7ubrt1iA8RFUZPGOgSLw7oNg76BCTuuvTgTso6zK8yqoGOtwdiDuATpi84TdJPYwRNz3obOG7G7gnPab8Ejx2T0i8mTS5O/iSYjyYShW8NJeqOCWnDzzgvqy8FeWau6JEw7xTzr08B0r3vAQCPT28px49eyYGvPd+8rwOWig7ZxoEPMujqTwmqFA8rZyOvLpMxjyk9KA8TaqZvFOBrjvH0QG9r0saO1H8Pjx0SRg6y4OIvDJKAT0cPq+8X9vout3AODsvGQ29Vu5dvNf+5LxkuoE868McvAAydLu+7IK8c2ciPeBvgDwr/Pe6oCo3vRMk9juRBvi7YoP5PDmLibsr7d47V9XkO00Ktzy+cUC8YAPgvKHVcjgYe+M8Nk5pvPSgRby2WQY8r9LmPLkOfLsayM085f2EvLXPx7zNSgu9MISwPJe9JL0BA6G7blmGvG2DX7xa9rI8ejc2vPPxjzyhmZU7akRnPXI5PTxJBQ28yAluPCMBBz1H5aC8vcjjvFgPtDw0BiG8qXVnPO6VEby/2PA6MHogPKmi07rnks+8u7ESvfSnCjuZfWW7YDaYPOqDwjw3CKm8GZixPIULgzuBW9o89AcCPU4l8LxGRhI8/l2ZvGAi+rzhmpY8SASgPAD3xblUKYM833irPAfTUjlUS3A9HyBUPMZWv7yOmdU7AVfoO5GztbxTtFm8bM02O0TTA7qS2xS8bFmpu+tH3LsrhuU8vyzoORUSxrmzBg89KAjDvJS/jjwCLUm8y/65u+eOPjwX8qS8FuiIPJJzu7uMrcI7umuQPAKLBT04cCo942zfvADRRz1pCsm6DeLFvCirFr2jhC293V6YPBY2nDvSyzM8zoX5PCpF9jswgVq8gXgTPHcHjbzXvd68Q1vRPPP/qDvYfSu9H/rcO/xg2DxkdVi8iC0XvJu4tjvMosK8JYyIPC3ao7zcHq67JBjGujFpj7wnwb67hZq3PIGj3rv9aFI8EzurvOH1QD14ZsE8COcKvBimhDwbWaU8DjVOvN214bsFtWQ8N1aRPALPsro40xi8yuQgvRiPKbxx4K68klx9urRyNrzyJ8O74R8tPNMJ+Dru9YW89t7xuvmH07zgG/q8JfaEPMU8nby6kga8NA0jPBwagLv6Fai7tTsBPCR4Aj0qCC87KH0ePZjX47yP8IW8Uug3vFTqdDktV5O6CvN+O8PmMLnmiaW8D7BAPLXAhTw38Sy9vw+CPDzPP7x5Z6I8onSCPIDXLjyJR0Y8B+48PFzs2Dt3xlq7LrxvPBRZtrsAzfO8jrevPNarfrz2wVi8uYONPIDqkjySK8I7lt8nvMGkAz0/amm8HuMWPQ0v37kRkSw8dOEnPUlPhTx1HiQ7CnniPKo83byRQ7G6xeYYvBY7CLy9jMQ88OmJPNH/sTyaonM6YGE8vA3FvDyenDY8fjUoPcHpI7z7MVG8UUMkvDzVWbsdW4o8hq/RvEpYIj0WjQM8sznBvE8fzTzGwoo8E+6Nu+Fjb7wzuS88+wSZuyGeSryC1ZU8io8TPGWwcbzcbea8hkppvPZFOz2DrRe9QR2FvFIX9DqiTTu8qJT8PCHI5Lx6j+u7NWHNuwSPHT2f5uO8U2DCu+fOUbxF6G47kMDlu1o0JT284kE8+HSUu+ut0LyWsny8mr8nvVtVNL2/mJ+8UU4HPU29HLm7BIM8o7U5PJY37jwGXo0847UoveQpMbzAgaI8PQfmu5tBv7zecWs8q3aDPKWurLyAQAg8AecUuo66q7w3bmQ7AOqxPNFAgLu8Wcg8Gh0vPJmSpDyvzri8Y9rzPElESLvqrXS830MWPA805rsC7mm7XAMFPblRILzDn628Xlt/OWZj97pu8NW8TxATvQKqDDzXmDm6nSPIvMd7njzF5808qd79N81KJb3xMAk8+6kGvCZpirycvpM7cz8qPHRWyDrO1Rq9aD54vJ9jILt+f9u8ixH/O5BQl7swkVI5p32BvCbdDDwOhUe8ZdgBPQlwT7wmkpW8WAiCvGmjvTywy6m8/VGeu+U9W7subgU8VrCpuiPkDLxutlu8FDb4O98ArTtZNMQ87XFyPAjTeLvFqGu8iUzNPOB+PDyPG4C8609wO+VsszsOFis7TLQAvIalZzxRxYe6JTd6Otitgbyhg6Y7SB0APKphBLxYS/w8Z6bGuvqQvTwmt+48JRqtO7J+Dr3K0LY7MadTvB+EvrxnhEU8AjbqO7CifbzBOMo8TRbLu/HjEbxKjxk83K0sPPtp2TtX4hI93a3POyjBYTz/H4g8vJeIOwzBjjzfIqa8QvpdO4PpbTz/QoY7RXSsvI6CuDxPncc8BaVbPLBMRbtTfhI8vQArvHkJIT3lIJG8It+5u1xT5DuyRK+6KaNTOzVKMT1JHLC7sOsHvBNEB73bjxE7SzyZPF2i7jyswnu8+QDhO0ULQDu75VQ6wncGPA0vgjxIq9s83BexvLB6ObxVJ+W7enkfO5X6H7upVnk7THy+On31qjoagSO8HCyyu93Pojt/RhY8KVchPPD17rr2rOO7URvAO/IEJz3Vi4Y8NFK6u0Jpajw1lDS8o3WsvLI9OT1vE368rqkRPCqxtbxLNmm8jgEyvD/bOrzlvJY8QITxO5womzvVi2o8UA00PAEv9rse/7e8I/g2PbEWPjxPtUI8D2/4PABjiTscssC834QGvU9KojxXB748C1cAvBjQHDzIFlS8biujvN+Uuzz8UIE7u+reO31M0btfnh69FU4avCagk7yZxZg8PvrHO0c9b7vEoBk8Ds9svNZ/ijyQdT29IxlzvOgbGzzneya8KPI/PDInBDx1nIY8AUxCPcpsV7yHXS68YFdIPO7ggToqr6E7w/A2Ow+TaTui4Hy8utpsvNF8vburh6685EXmPD/OLzyiuPe8scWGOwugirzv3BO8AI2+vOuNYro3tTe7WM6pvETSkTxKTNE8SWsOvH9ap7xEe+m81dMDPa3FDr1jOVS8q6qDu8HZJb1ZcMK7eBkLPPiBFb3dYBa9NSq/uc8JuzwMGCO8i/YQPOxah7o/SXA8DBU1vOjYpTz1qnk5aY5gPLWmlDzQNrG8zgqguzCIpDyTDd28RLNnPOZzcjyt65G8690xO+patTyYLhG9zBnsvJZyGbw5ogc891IfPJbHcDzUS4885+yFvJDHLbotWqC7XOW8vK2iAjy2stM8i6yGOg3ioTwUE4G7aVgWvbwJgLzaToq8ztKqO1fiuDxkI908nwcsPW1NuTxPdxw8ZDx7u7WplTz26TC8yg+hu5KC0bzavTU7wV+8uyODN7whmSa8Ujg1vE3sDj2ICEu8aVgWvJGBQLzRrtG7pvxPPHllNDyDq7w62Z6Mu1XMcTygyE27LYnXumeJDLxyJEy9jExMPC4wm7sFDYK6gjYgvMxRqTteM8q6Eig4vcojcbyYZfu80bZiO5LJ7LwX7zm8ZZ4EPJ7LgLzjJoc7h3CovAmk4DyzaT08GiMFPbuX0zyf1Tu836yoO7JG7Dxl7tq8fjuku+/CWLxZN7c6XzdrvKRr77tjSUk8CUGnPEgGo7s4N9c8kHwSPHdeerxMlQ68sj2vPIJ5wjv8O6A7bFKWvEOyJj3Yzs+88KYKPWBEAr3YX5Q8T7qHvFZk8bzAuBK8nsfrvO80yTybGPI8t65vPPSBBjuYYsE8Ka/gO6ZL+DzC9vo8HeCHOJy5GjzTPgU7ehwRPJ8gWLwiQhO8SOoTvSaGGTz+Ona8lBcIuZX6grw0oso70b8vvVFbjryHtiM864hpvMTQGby3pw49pLWFvG0ifbu2NLG8PPNSvRqaNz2VlvS82y/OPDgS0LxV7YS7MeiDvKJ2VLt9t+Y5GF7Wu+MN2DvfkYm8WIubuhmGaby6lTS6eJGhvOSkGD24iWY8kjX5uzQ217zutQk8nCDGvFSlBjyw0cs80fGEutdfFTu77PC7M1JkvDjQgLs7Dwg6mb+SO8HvmjxTThk6iBYCPSc3pLw2WyC9t44HurrAEzshsgy8Ia8ZvBOngzvr6Em7OeYfPeCmljyVUVY8g5M5PNZsgLyOLd08quW5PO8j2jt2vJg8EnpYPBxMcLwIqJq74+fMPE5I+jvuXfu8eZ4evLdM4jzkx4g8uauFu6WvMDytVv+7fK0iPIN6XTzjQf684QYZPaisVrspzMq8n6f7u4oIXjuH0Ag988mPuzI7G7yNKGq8yY7TvEZxkjyjDwE8ETMnPFx1ubzMM+k7HMxmvP8cNz0SNwS6VNUmO1ZucTxbus+8hZVNvM932zytpss8Wr7BPLWqMTy/4OU8LfhZPAx44bvt2/479b8JPI+1dDtYyiO8IdkHPWjEo7it6C66/vwbPMfjtDz0KaO7VIKyPBRM97z4Vr+7qP0IPX2jC7wprzI8fnLROx6JCrwq76q62jxTvOnFLDwU4mA8ktdAvM4bzbyvizG8DJSMPLRTHzs4cQM8foH/u4O1q7wb5pk7AOHHO3z+Dj2lUA28EAUWvdTu9Lwq2Ku87j3PO8uT8Tz9fJ68HbcMPTcTt7wVN/Y8sKh0PF/NRb3VRBI8EoQqvOokvztoZVu8IDIEPFKxSr1FgB297wRXPFofo7wQHVC8q12qO5lvtDy7egO8rOwNPFqt+bzML5M791f4PLlr5bxhqiK8DzeNvPGepbpTA2s8gQTFu0xnuDnsfTk9Jo2OPKkyOrzzEnG8k3oJvCgkBT26P3O8rAeevIAJ7rwNQoO8UyYyPJFwFr09wmq7R4/eu7k/Ab1Y5mg7Eg8duoxVCr26vBm870JPOnQVPbxvLia80/+RvJDgkru3M327PygsPDiP4bzT7AQ8B1QxvHe8nTt2hZK5QjN2vGUXmbuJBQI8a8KcOZzT8TqbRt08IR0nPTgR6Lw16ra8IGWDvMMBxTyIDW28NPvuvASivDvJNe48TKMEPRkkiDzCfsG8iIKju9A4N7xPxt27Gvo7PDCZ9ru96Gq6osBaOl+G2Dv2M9a8L47IvFTwujyps8y7UcAbvdS1szzy2F+9A9wKPS83kzxndL68UP/Lun3kHLxi+m27mZ1Bu7AMnzzSKse7bPJSvJcVMLw+3O+84WsPOwliw7wxq0q8jUinvJCHDTye4tm8d4atuwNZYDyS90u8Q6JbPA0JAD3QYce8TiCSvCHKibxatAy8X6IOORegF717R3q3x63sPEOsJz3v3UQ7PekQPMzDYjxQYSo87ADIu2bVpLxoB8G80fFJPPIURDyJPTu8BPJhPDz67DuaHgi8YvDlPPiZLzzWzQG6tIatPImQJ727OO+8/8K8u0i9izzBBvE7VH0MuhM7sDtWYre8bvc1vI/mwTzcVOy7u0OFO4QH2bxXuf48EwDYvAaQfLuDoVs8bCwmPBnrr7wcbFa8MevPu3fkZzy+grA7LE2mvHqGtjxk/iG942edudFL+rqWwT+8OVVqPDBiaruCFqy8b+RkOyEHDbvisJU6ulxOuzfkqztw1Ri8AfbLPHVD2Dx4QzA62i7sPNtclbynqb07tX6uPH/LU72hO4w8byBrPJ8MyLxvNgy8AQQbO0dYRDriU5K8ng/AvM/h5juG4jy8stL8vIUP07wxfzG8na8vvREh/LkC8WC8GAwHPHNejDvsuxG8n4l/vPcfc7wPUpG8SU8fOyWxubvpZ5C8l431O/3jD70FY7Q8GDNrO9WHuLpv+wO8YxQxPMVIVD0jVio9hfbFu4O0/bwHvwc9baCEugwyrLqTWro7TRPsPFTpMbueDSC9siaBPP5Strz9H5M8be3ru2n4ND3m67+8CEycvNPTaTvBxS29WjhHvCYkazsk7Mq8bdGTPL2xCr0w2tc8qOV0vG9RJD0+5Zs8t7MMvLcogDrBxQa95IoOPWgvTTxkM047tZHku6CYhTyPvD68uE3oPNe0lDwtlKO7hodNPBxkJ7yAD/o6cGaFPCahn7xKzAw9KPejPEG6Fb3yrX06aGsYO0JzpzxBlPC7H22XvH8lH72FDaW65ZvKO9y2XbumkI28GZGOvGuIQbsq97G8n73qvLnVXzuzx3O7fk+uvJC6xbuBfyu7qQ4lOwjaYDrU7jM8t1EUvMrK8Tsql0071pFMPBfK5TxKnpI7oiqNurN8ITxLj/C8Jo8LvS9MtbxSpFO8lLekObfBxryD2BY8qRNDu8RSLzwsIty7aauru0hT0TxIDH26yFhaO+BntbuK7Vs8Q0y/vO8Xubw8rqm8Em8cvAE12jvWfVM8cBgfPQGB/Dpr01I9XdNQO98uVzxBobi54FmVvCOgKby+FSc8mDotOS3Z0zwqqxe8i17zPDdYizx93r47yO++O5a0FT1+4lq8rJTBvF5NorwuQwQ8Bd8vvAQ7obtSsj28MgdlvLmiRL3nC4E8yXW7vOjxHDwwUbI8yA/AuyJhnbwhR5c8j9SSPK3MlzxzEGq8r9Q3vft3VLyi0DO8PEj0u7Dr6jvlY3G8zAi5vJfJYryJ0927TUewvBqBHDxBwpA803+2ux0PpDx+U6Q8UDUwvEpEbjvqS4S8iNojOwl6+buGusY7HU5hu6NWKjvfrAK9U2qZum8y4zvL2yG8T2Q0PJlSlbxNBaO8QyUEvY9+qjyfH8y8sFYduxFHWzvhDrK8ZdaDO/t10DvdLF88Ig/Kuj4wNTpezZS6QJQZPD3rJL38V7Q7cRqXPIjvcTzag/u8L80FPe4FeryiB0077SFhO9+ywzr8tgU9wlUsPJK7djyr9HU8GQvxuxQgjDzdVo+8MgsxvIZjfDzf6Ki8kyOJu7bsjTwWC7k8pQ60Ordu4jttnE09/Oo4PeC98rqAPj883NUAOwXAKTzHu1w8vWl6PGNd9bvLh+M8fIVcvIRhj7wZByE86x3GvKOTRzsJVD08OowrvLnkaDyAzsa8ZecDvY/lW7qIB7m8X9A9vMoh/zyTbCE8XhMhvZcwAb2ifHK7pAK0OwyFxjsKYbw8kGoBvdT/8by/8DS8UZggvAGekbvMy/O8FEBvvMWQwrs3NkI8HqoZvIS9yTywdiK8g/voPFMvJLvvIhE76mOlPC88aryryMe8KtFjPAOqijskeJM6vkrUPDRjBbyWai88wZRAPExtyjxTkA27bzKKPGbvcLxCX/g6KnFRPMVUyzpkeyY8bGuQu0lyAD1ww5w8mHmDPE1H9jsMQE47hekVPS9i1DzkK6M8jErZugB9Y7zKA7k73LDQuyK8Rjz/sAe83rgvvK/fSzzVsAO9HxKRuwZp/jwNO5s5+j8UvGaguTwor0s86GQePdeHBTzcg9i76kwovMX48bxtM9+7vturvO4hRTx9pGW8Ec2lPGPLybnKmxg9Ld6lPIbQiDwnAu47uxieOyMQlLvJX3S8U0qfPKNNNzyNbwM9ezy8u4C21TxJoSy8G4GJvCKUKjq12um8VmTHPJUTWbwAXAi7n4eqO/4hK7uM3UY8roHau5kX7zycXzk7xQVjvFLXKTsRAlg7fw9LvIXthTzPQKc7HoHbuuD6Wbz1vUC8Hw16PDEhZzzT80K7sYbRu/T21bvEse67bcFYvCmT3ruAlaQ7MZ/Cuz4kEjxvQOC7bHqSuSsFBz3bKYu7o32LvM9+hDqLiQc87K8avPBqcDwRwas7H6+tu7A+yDt+clc8QNaYvF3uU7qw1Q8632ebuz86STx6j9M8TPcUvI1ZCbu4Pgm8Nw5wvA== - index: 0 - object: embedding - model: qwen3-embedding:4b - object: list - usage: - prompt_tokens: 5 - total_tokens: 5 - status: - code: 200 - message: OK -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '1833' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - messages: - - content: |- - You are a search query optimizer. You MUST use the run_search tool to execute searches. - - For each user request: - 1. Use the run_search tool with the original query - 2. Use run_search again with 1-2 alternative keyword queries - 3. Keep all queries SHORT (2-5 words) - 4. After all tool calls complete, respond "Search complete" - - You can optionally specify a limit parameter (default 5). - - IMPORTANT: You must make actual tool calls. Do not output "run_search(...)" as text. - role: system - - content: What information is available? - role: user - - content: |- - - Need to search for "information available" likely? maybe ask general. We'll just perform searches. - - role: assistant - tool_calls: - - function: - arguments: '{"query":"information available","limit":5}' - name: run_search - id: call_ko9qzts4 - type: function - - content: 'Found 1 results for: information available' - role: tool - tool_call_id: call_ko9qzts4 - - content: |- - - Now alternative queries. - - role: assistant - tool_calls: - - function: - arguments: '{"limit":5,"query":"what information is available"}' - name: run_search - id: call_rlsnakww - type: function - - content: 'Found 1 results for: what information is available' - role: tool - tool_call_id: call_rlsnakww - model: gpt-oss - reasoning_effort: low - stream: false - tool_choice: auto - tools: - - function: - description: Run a single search query against the knowledge base. - name: run_search - parameters: - additionalProperties: false - properties: - limit: - anyOf: - - type: integer - - type: 'null' - default: null - description: 'Number of results to fetch (default: 5)' - query: - description: The search query - type: string - required: - - query - type: object - type: function - uri: http://localhost:11434/v1/chat/completions - response: - headers: - content-length: - - '298' - content-type: - - application/json - parsed_body: - choices: - - finish_reason: stop - index: 0 - message: - content: Search complete - role: assistant - created: 1769793927 - id: chatcmpl-853 - model: gpt-oss - object: chat.completion - system_fingerprint: fp_ollama - usage: - completion_tokens: 6 - prompt_tokens: 401 - total_tokens: 407 - status: - code: 200 - message: OK -version: 1 diff --git a/tests/cassettes/test_chat_agent/test_search_agent_with_session_filter.yaml b/tests/cassettes/test_chat_agent/test_search_agent_with_session_filter.yaml deleted file mode 100644 index db9ed9aa..00000000 --- a/tests/cassettes/test_chat_agent/test_search_agent_with_session_filter.yaml +++ /dev/null @@ -1,650 +0,0 @@ -interactions: -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '730' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - encoding_format: base64 - input: - - |- - DocLayNet Dataset - Class Labels - DocLayNet defines 11 distinct class labels for document layout analysis: - 1. Caption - Text describing figures or tables - 2. Footnote - Notes at the bottom of pages - 3. Formula - Mathematical expressions - 4. List-item - Items in bulleted or numbered lists - 5. Page-footer - Footer content on pages - 6. Page-header - Header content on pages - 7. Picture - Images and diagrams - 8. Section-header - Headings for document sections - 9. Table - Tabular data - 10. Text - Regular paragraph text (highest count: 510,377 instances) - 11. Title - Document titles - The Text class has the highest count with 510,377 instances in the dataset. - model: qwen3-embedding:4b - uri: http://localhost:11434/v1/embeddings - response: - headers: - content-type: - - application/json - transfer-encoding: - - chunked - parsed_body: - data: - - embedding: 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 - index: 0 - object: embedding - model: qwen3-embedding:4b - object: list - usage: - prompt_tokens: 166 - total_tokens: 166 - status: - code: 200 - message: OK -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '412' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - encoding_format: base64 - input: - - |- - DocLayNet Dataset - Data Sources - The data sources for DocLayNet include: - - Publication repositories such as arXiv - - Government offices and official documents - - Company websites and corporate reports - - Data directory services for financial reports - - Patent documents - Scanned documents were excluded to avoid rotation and skewing issues. - model: qwen3-embedding:4b - uri: http://localhost:11434/v1/embeddings - response: - headers: - content-type: - - application/json - transfer-encoding: - - chunked - parsed_body: - data: - - embedding: 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 - index: 0 - object: embedding - model: qwen3-embedding:4b - object: list - usage: - prompt_tokens: 68 - total_tokens: 68 - status: - code: 200 - message: OK -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '1077' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - messages: - - content: |- - You are a search query optimizer. You MUST use the run_search tool to execute searches. - - For each user request: - 1. Use the run_search tool with the original query - 2. Use run_search again with 1-2 alternative keyword queries - 3. Keep all queries SHORT (2-5 words) - 4. After all tool calls complete, respond "Search complete" - - You can optionally specify a limit parameter (default 5). - - IMPORTANT: You must make actual tool calls. Do not output "run_search(...)" as text. - role: system - - content: What information is available? - role: user - model: gpt-oss - reasoning_effort: low - stream: false - tool_choice: auto - tools: - - function: - description: Run a single search query against the knowledge base. - name: run_search - parameters: - additionalProperties: false - properties: - limit: - anyOf: - - type: integer - - type: 'null' - default: null - description: 'Number of results to fetch (default: 5)' - query: - description: The search query - type: string - required: - - query - type: object - type: function - uri: http://localhost:11434/v1/chat/completions - response: - headers: - content-length: - - '619' - content-type: - - application/json - parsed_body: - choices: - - finish_reason: tool_calls - index: 0 - message: - content: '' - reasoning: 'Need 3 searches: original query "What information is available?" and two alternatives maybe "available - info" "info available" 2-5 words.' - role: assistant - tool_calls: - - function: - arguments: '{"query":"What information is available?","limit":5}' - name: run_search - id: call_0zdz3o5q - index: 0 - type: function - created: 1769804840 - id: chatcmpl-312 - model: gpt-oss - object: chat.completion - system_fingerprint: fp_ollama - usage: - completion_tokens: 63 - prompt_tokens: 266 - total_tokens: 329 - status: - code: 200 - message: OK -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '100' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - encoding_format: base64 - input: - - What information is available? - model: qwen3-embedding:4b - uri: http://localhost:11434/v1/embeddings - response: - headers: - content-type: - - application/json - transfer-encoding: - - chunked - parsed_body: - data: - - embedding: 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 - index: 0 - object: embedding - model: qwen3-embedding:4b - object: list - usage: - prompt_tokens: 6 - total_tokens: 6 - status: - code: 200 - message: OK -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '1545' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - messages: - - content: |- - You are a search query optimizer. You MUST use the run_search tool to execute searches. - - For each user request: - 1. Use the run_search tool with the original query - 2. Use run_search again with 1-2 alternative keyword queries - 3. Keep all queries SHORT (2-5 words) - 4. After all tool calls complete, respond "Search complete" - - You can optionally specify a limit parameter (default 5). - - IMPORTANT: You must make actual tool calls. Do not output "run_search(...)" as text. - role: system - - content: What information is available? - role: user - - content: |- - - Need 3 searches: original query "What information is available?" and two alternatives maybe "available info" "info available" 2-5 words. - - role: assistant - tool_calls: - - function: - arguments: '{"query":"What information is available?","limit":5}' - name: run_search - id: call_0zdz3o5q - type: function - - content: 'Found 1 results for: What information is available?' - role: tool - tool_call_id: call_0zdz3o5q - model: gpt-oss - reasoning_effort: low - stream: false - tool_choice: auto - tools: - - function: - description: Run a single search query against the knowledge base. - name: run_search - parameters: - additionalProperties: false - properties: - limit: - anyOf: - - type: integer - - type: 'null' - default: null - description: 'Number of results to fetch (default: 5)' - query: - description: The search query - type: string - required: - - query - type: object - type: function - uri: http://localhost:11434/v1/chat/completions - response: - headers: - content-length: - - '446' - content-type: - - application/json - parsed_body: - choices: - - finish_reason: tool_calls - index: 0 - message: - content: '' - role: assistant - tool_calls: - - function: - arguments: '{"limit":5,"query":"available info"}' - name: run_search - id: call_j7bn8lhy - index: 0 - type: function - created: 1769804841 - id: chatcmpl-983 - model: gpt-oss - object: chat.completion - system_fingerprint: fp_ollama - usage: - completion_tokens: 23 - prompt_tokens: 357 - total_tokens: 380 - status: - code: 200 - message: OK -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '84' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - encoding_format: base64 - input: - - available info - model: qwen3-embedding:4b - uri: http://localhost:11434/v1/embeddings - response: - headers: - content-type: - - application/json - transfer-encoding: - - chunked - parsed_body: - data: - - embedding: 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 - index: 0 - object: embedding - model: qwen3-embedding:4b - object: list - usage: - prompt_tokens: 3 - total_tokens: 3 - status: - code: 200 - message: OK -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '1822' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - messages: - - content: |- - You are a search query optimizer. You MUST use the run_search tool to execute searches. - - For each user request: - 1. Use the run_search tool with the original query - 2. Use run_search again with 1-2 alternative keyword queries - 3. Keep all queries SHORT (2-5 words) - 4. After all tool calls complete, respond "Search complete" - - You can optionally specify a limit parameter (default 5). - - IMPORTANT: You must make actual tool calls. Do not output "run_search(...)" as text. - role: system - - content: What information is available? - role: user - - content: |- - - Need 3 searches: original query "What information is available?" and two alternatives maybe "available info" "info available" 2-5 words. - - role: assistant - tool_calls: - - function: - arguments: '{"query":"What information is available?","limit":5}' - name: run_search - id: call_0zdz3o5q - type: function - - content: 'Found 1 results for: What information is available?' - role: tool - tool_call_id: call_0zdz3o5q - - content: null - role: assistant - tool_calls: - - function: - arguments: '{"limit":5,"query":"available info"}' - name: run_search - id: call_j7bn8lhy - type: function - - content: 'Found 1 results for: available info' - role: tool - tool_call_id: call_j7bn8lhy - model: gpt-oss - reasoning_effort: low - stream: false - tool_choice: auto - tools: - - function: - description: Run a single search query against the knowledge base. - name: run_search - parameters: - additionalProperties: false - properties: - limit: - anyOf: - - type: integer - - type: 'null' - default: null - description: 'Number of results to fetch (default: 5)' - query: - description: The search query - type: string - required: - - query - type: object - type: function - uri: http://localhost:11434/v1/chat/completions - response: - headers: - content-length: - - '446' - content-type: - - application/json - parsed_body: - choices: - - finish_reason: tool_calls - index: 0 - message: - content: '' - role: assistant - tool_calls: - - function: - arguments: '{"limit":5,"query":"info available"}' - name: run_search - id: call_h0dpzs9b - index: 0 - type: function - created: 1769804842 - id: chatcmpl-208 - model: gpt-oss - object: chat.completion - system_fingerprint: fp_ollama - usage: - completion_tokens: 23 - prompt_tokens: 399 - total_tokens: 422 - status: - code: 200 - message: OK -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '84' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - encoding_format: base64 - input: - - info available - model: qwen3-embedding:4b - uri: http://localhost:11434/v1/embeddings - response: - headers: - content-type: - - application/json - transfer-encoding: - - chunked - parsed_body: - data: - - embedding: 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 - index: 0 - object: embedding - model: qwen3-embedding:4b - object: list - usage: - prompt_tokens: 3 - total_tokens: 3 - status: - code: 200 - message: OK -- request: - headers: - accept: - - application/json - accept-encoding: - - gzip, deflate, zstd - connection: - - keep-alive - content-length: - - '2099' - content-type: - - application/json - host: - - localhost:11434 - method: POST - parsed_body: - messages: - - content: |- - You are a search query optimizer. You MUST use the run_search tool to execute searches. - - For each user request: - 1. Use the run_search tool with the original query - 2. Use run_search again with 1-2 alternative keyword queries - 3. Keep all queries SHORT (2-5 words) - 4. After all tool calls complete, respond "Search complete" - - You can optionally specify a limit parameter (default 5). - - IMPORTANT: You must make actual tool calls. Do not output "run_search(...)" as text. - role: system - - content: What information is available? - role: user - - content: |- - - Need 3 searches: original query "What information is available?" and two alternatives maybe "available info" "info available" 2-5 words. - - role: assistant - tool_calls: - - function: - arguments: '{"query":"What information is available?","limit":5}' - name: run_search - id: call_0zdz3o5q - type: function - - content: 'Found 1 results for: What information is available?' - role: tool - tool_call_id: call_0zdz3o5q - - content: null - role: assistant - tool_calls: - - function: - arguments: '{"limit":5,"query":"available info"}' - name: run_search - id: call_j7bn8lhy - type: function - - content: 'Found 1 results for: available info' - role: tool - tool_call_id: call_j7bn8lhy - - content: null - role: assistant - tool_calls: - - function: - arguments: '{"limit":5,"query":"info available"}' - name: run_search - id: call_h0dpzs9b - type: function - - content: 'Found 1 results for: info available' - role: tool - tool_call_id: call_h0dpzs9b - model: gpt-oss - reasoning_effort: low - stream: false - tool_choice: auto - tools: - - function: - description: Run a single search query against the knowledge base. - name: run_search - parameters: - additionalProperties: false - properties: - limit: - anyOf: - - type: integer - - type: 'null' - default: null - description: 'Number of results to fetch (default: 5)' - query: - description: The search query - type: string - required: - - query - type: object - type: function - uri: http://localhost:11434/v1/chat/completions - response: - headers: - content-length: - - '298' - content-type: - - application/json - parsed_body: - choices: - - finish_reason: stop - index: 0 - message: - content: Search complete - role: assistant - created: 1769804843 - id: chatcmpl-221 - model: gpt-oss - object: chat.completion - system_fingerprint: fp_ollama - usage: - completion_tokens: 6 - prompt_tokens: 441 - total_tokens: 447 - status: - code: 200 - message: OK -version: 1