diff --git a/app/frontend/components/Chat.tsx b/app/frontend/components/Chat.tsx index 12271549..91036f30 100644 --- a/app/frontend/components/Chat.tsx +++ b/app/frontend/components/Chat.tsx @@ -272,7 +272,7 @@ function MessageViewWithCitations({ return ( {({ messageElements }) => { - if (!chatState?.qa_history?.length) { + if (!chatState?.citations_history?.length) { return ( <> {messageElements} @@ -285,13 +285,11 @@ function MessageViewWithCitations({ // message (tool messages produce nothing). We correlate elements with // messages to inject CitationBlocks after the right assistant responses. // - // Tool call objects on messages only carry `id` (no `name`), so we - // can't identify which tool was called from the message alone. Instead - // we rely on the fact that qa_history only grows when the `ask` tool - // runs: after each assistant text response that followed tool calls, - // we inject any new qa_history citations. + // Both search and ask tools append to citations_history in order, + // so after each assistant text response that followed tool calls, + // we inject the next citations_history entry. const result: React.ReactNode[] = []; - let qaIdx = 0; + let citIdx = 0; let seenToolCalls = false; let elemIdx = 0; @@ -320,19 +318,19 @@ function MessageViewWithCitations({ } // After an assistant text response that followed tool calls, - // inject the next qa_history entry's citations (one per turn) + // inject the next citations_history entry (one per turn) if (msg.role === "assistant" && msg.content && seenToolCalls) { - if (qaIdx < chatState.qa_history.length) { - const qa = chatState.qa_history[qaIdx]; - if (qa.citations?.length) { + if (citIdx < chatState.citations_history.length) { + const citations = chatState.citations_history[citIdx]; + if (citations?.length) { result.push( , ); } - qaIdx++; + citIdx++; } seenToolCalls = false; } diff --git a/app/frontend/lib/sessionStorage.ts b/app/frontend/lib/sessionStorage.ts index 6032be5b..76a4e9b5 100644 --- a/app/frontend/lib/sessionStorage.ts +++ b/app/frontend/lib/sessionStorage.ts @@ -24,6 +24,7 @@ export interface SessionContext { export interface ChatSessionState { initial_context: string | null; citations: Citation[]; + citations_history: Citation[][]; qa_history: QAResponse[]; session_context: SessionContext | null; document_filter: string[]; @@ -53,6 +54,7 @@ export function normalizeChatState(state?: ChatSessionState): ChatSessionState { return { initial_context: state?.initial_context ?? null, citations: state?.citations ?? [], + citations_history: state?.citations_history ?? [], qa_history: state?.qa_history ?? [], session_context: state?.session_context ?? null, document_filter: state?.document_filter ?? [], diff --git a/haiku_rag_slim/haiku/rag/tools/qa.py b/haiku_rag_slim/haiku/rag/tools/qa.py index 466b1ced..69f9ae7c 100644 --- a/haiku_rag_slim/haiku/rag/tools/qa.py +++ b/haiku_rag_slim/haiku/rag/tools/qa.py @@ -185,6 +185,7 @@ async def run_qa_core( if session_state is not None: session_state.citations = citations + session_state.citations_history.append(citations) if qa_session_state is not None: qa_session_state.qa_history.append( diff --git a/haiku_rag_slim/haiku/rag/tools/search.py b/haiku_rag_slim/haiku/rag/tools/search.py index 5e9e8623..0566acde 100644 --- a/haiku_rag_slim/haiku/rag/tools/search.py +++ b/haiku_rag_slim/haiku/rag/tools/search.py @@ -112,6 +112,7 @@ def create_search_toolset( ) ) session_state.citations = citations + session_state.citations_history.append(citations) result_lines = [] for c in citations: diff --git a/haiku_rag_slim/haiku/rag/tools/session.py b/haiku_rag_slim/haiku/rag/tools/session.py index b87ea3c8..3c097871 100644 --- a/haiku_rag_slim/haiku/rag/tools/session.py +++ b/haiku_rag_slim/haiku/rag/tools/session.py @@ -29,6 +29,7 @@ class SessionState(BaseModel): document_filter: list[str] = [] citation_registry: dict[str, int] = {} citations: list[Citation] = [] + citations_history: list[list[Citation]] = [] def get_or_assign_index(self, chunk_id: str) -> int: """Get or assign a stable citation index for a chunk_id. diff --git a/tests/cassettes/test_qa_tools/TestRunQACore.test_run_qa_core_populates_citations_history.yaml b/tests/cassettes/test_qa_tools/TestRunQACore.test_run_qa_core_populates_citations_history.yaml new file mode 100644 index 00000000..e080e943 --- /dev/null +++ b/tests/cassettes/test_qa_tools/TestRunQACore.test_run_qa_core_populates_citations_history.yaml @@ -0,0 +1,844 @@ +interactions: +- request: + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate, zstd + connection: + - keep-alive + content-length: + - '142' + content-type: + - application/json + host: + - localhost:11434 + method: POST + parsed_body: + encoding_format: base64 + input: + - Python is a programming language. It is widely used for web development. + 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: 15 + total_tokens: 15 + status: + code: 200 + message: OK +- request: + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate, zstd + connection: + - keep-alive + content-length: + - '1724' + content-type: + - application/json + host: + - localhost:11434 + method: POST + parsed_body: + messages: + - content: |- + You are the research orchestrator planning the investigation. + + If a section is provided, use it to understand the conversation context. + + Your task: + 1. Analyze the original question + 2. Propose the first question to investigate + + For simple questions, investigate them directly. For composite or complex questions, + you may decompose into a focused sub-question. For example: + - "What are the benefits and drawbacks of X?" → Start with "What are the benefits of X?" + - Ambiguous references should be resolved using background context if available + + Output requirements: + - Set is_complete=False (you are just starting the investigation) + - Set next_question to the question to investigate + - Provide brief reasoning explaining your choice + + The question must be standalone and self-contained: + - Include concrete entities, scope, and any qualifiers + - Avoid ambiguous pronouns (it/they/this/that) + role: system + - content: |- + Plan the research investigation. + + + What is Python? + + role: user + model: gpt-oss + reasoning_effort: low + stream: false + tool_choice: auto + tools: + - function: + description: Output from iterative planning step. + name: final_result + parameters: + additionalProperties: false + properties: + is_complete: + description: Whether research is complete and can be synthesized + type: boolean + next_question: + anyOf: + - type: string + - type: 'null' + default: null + description: Next question to investigate, if not complete + reasoning: + description: Brief explanation of the decision + type: string + required: + - is_complete + - reasoning + type: object + type: function + uri: http://localhost:11434/v1/chat/completions + response: + headers: + content-length: + - '811' + content-type: + - application/json + parsed_body: + choices: + - finish_reason: tool_calls + index: 0 + message: + content: '' + reasoning: 'Need first question: what is Python? So ask definition.' + role: assistant + tool_calls: + - function: + arguments: '{"is_complete":false,"next_question":"What does the term \"Python\" refer to in the context of programming + languages?","reasoning":"The original query asks \"What is Python?\" The first step is to clarify that the + question is about the programming language. We can directly ask about its definition in that context."}' + name: final_result + id: call_n7vdp89o + index: 0 + type: function + created: 1770981593 + id: chatcmpl-992 + model: gpt-oss + object: chat.completion + system_fingerprint: fp_ollama + usage: + completion_tokens: 97 + prompt_tokens: 365 + total_tokens: 462 + status: + code: 200 + message: OK +- request: + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate, zstd + connection: + - keep-alive + content-length: + - '2869' + content-type: + - application/json + host: + - localhost:11434 + method: POST + parsed_body: + messages: + - content: |- + You are a search and question-answering specialist. + + Process: + 1. Call search_and_answer with relevant keywords from the question. + 2. Review the results ordered by relevance. + 3. If needed, perform follow-up searches with different keywords (max 3 total). + 4. Provide a concise answer based strictly on the retrieved content. + + The search tool returns results like: + [9bde5847-44c9-400a-8997-0e6b65babf92] [rank 1 of 5] + Source: "Document Title" > Section > Subsection + Type: paragraph + Content: + The actual text content here... + + [d5a63c82-cb40-439f-9b2e-de7d177829b7] [rank 2 of 5] + Source: "Another Document" + Type: table + Content: + | Column 1 | Column 2 | + ... + + Each result includes: + - chunk_id in brackets and rank position (rank 1 = most relevant) + - Source: document title and section hierarchy (when available) + - Type: content type like paragraph, table, code, list_item (when available) + - Content: the actual text + + Output format: + - query: Echo the question you are answering + - answer: Your concise answer based on the retrieved content + - cited_chunks: List of plain strings containing only the chunk UUIDs (not objects) + - confidence: A score from 0.0 to 1.0 indicating answer confidence + + IMPORTANT: Use the EXACT, COMPLETE chunk ID (full UUID). Do NOT truncate IDs. + + Guidelines: + - Base answers strictly on retrieved content - do not use external knowledge. + - Use the Source and Type metadata to understand context. + - If multiple results are relevant, synthesize them coherently. + - If information is insufficient, say so clearly. + - Be concise and direct; avoid meta commentary about the process. + - Results are ordered by relevance, with rank 1 being most relevant. + role: system + - content: What does the term "Python" refer to in the context of programming languages? + role: user + model: gpt-oss + reasoning_effort: low + stream: false + tool_choice: auto + tools: + - function: + description: Search the knowledge base for relevant documents. + name: search_and_answer + parameters: + additionalProperties: false + properties: + limit: + anyOf: + - type: integer + - type: 'null' + default: null + query: + type: string + required: + - query + type: object + type: function + - function: + description: Answer to a search query with chunk references. + name: final_result + parameters: + additionalProperties: false + properties: + answer: + description: The answer to the question + type: string + cited_chunks: + description: IDs of chunks used to form the answer + items: + type: string + type: array + confidence: + default: 1.0 + description: Confidence score for this answer (0-1) + maximum: 1.0 + minimum: 0.0 + type: number + query: + description: The question that was answered + type: string + required: + - query + - answer + type: object + type: function + uri: http://localhost:11434/v1/chat/completions + response: + headers: + content-length: + - '528' + 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":"definition of Python programming language term referring to","limit":5}' + name: search_and_answer + id: call_taijxk2o + index: 0 + type: function + created: 1770981597 + id: chatcmpl-497 + model: gpt-oss + object: chat.completion + system_fingerprint: fp_ollama + usage: + completion_tokens: 40 + prompt_tokens: 631 + total_tokens: 671 + status: + code: 200 + message: OK +- request: + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate, zstd + connection: + - keep-alive + content-length: + - '129' + content-type: + - application/json + host: + - localhost:11434 + method: POST + parsed_body: + encoding_format: base64 + input: + - definition of Python programming language term referring to + 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: 9 + total_tokens: 9 + status: + code: 200 + message: OK +- request: + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate, zstd + connection: + - keep-alive + content-length: + - '3369' + content-type: + - application/json + host: + - localhost:11434 + method: POST + parsed_body: + messages: + - content: |- + You are a search and question-answering specialist. + + Process: + 1. Call search_and_answer with relevant keywords from the question. + 2. Review the results ordered by relevance. + 3. If needed, perform follow-up searches with different keywords (max 3 total). + 4. Provide a concise answer based strictly on the retrieved content. + + The search tool returns results like: + [9bde5847-44c9-400a-8997-0e6b65babf92] [rank 1 of 5] + Source: "Document Title" > Section > Subsection + Type: paragraph + Content: + The actual text content here... + + [d5a63c82-cb40-439f-9b2e-de7d177829b7] [rank 2 of 5] + Source: "Another Document" + Type: table + Content: + | Column 1 | Column 2 | + ... + + Each result includes: + - chunk_id in brackets and rank position (rank 1 = most relevant) + - Source: document title and section hierarchy (when available) + - Type: content type like paragraph, table, code, list_item (when available) + - Content: the actual text + + Output format: + - query: Echo the question you are answering + - answer: Your concise answer based on the retrieved content + - cited_chunks: List of plain strings containing only the chunk UUIDs (not objects) + - confidence: A score from 0.0 to 1.0 indicating answer confidence + + IMPORTANT: Use the EXACT, COMPLETE chunk ID (full UUID). Do NOT truncate IDs. + + Guidelines: + - Base answers strictly on retrieved content - do not use external knowledge. + - Use the Source and Type metadata to understand context. + - If multiple results are relevant, synthesize them coherently. + - If information is insufficient, say so clearly. + - Be concise and direct; avoid meta commentary about the process. + - Results are ordered by relevance, with rank 1 being most relevant. + role: system + - content: What does the term "Python" refer to in the context of programming languages? + role: user + - content: |- + + Need to search. + + role: assistant + tool_calls: + - function: + arguments: '{"query":"definition of Python programming language term referring to","limit":5}' + name: search_and_answer + id: call_taijxk2o + type: function + - content: |- + [3efaa37c-c1f0-43df-945b-784a9d20bf80] [rank 1 of 1] + Source: "Python Guide" + Type: text + Content: + Python is a programming language. It is widely used for web development. + role: tool + tool_call_id: call_taijxk2o + model: gpt-oss + reasoning_effort: low + stream: false + tool_choice: auto + tools: + - function: + description: Search the knowledge base for relevant documents. + name: search_and_answer + parameters: + additionalProperties: false + properties: + limit: + anyOf: + - type: integer + - type: 'null' + default: null + query: + type: string + required: + - query + type: object + type: function + - function: + description: Answer to a search query with chunk references. + name: final_result + parameters: + additionalProperties: false + properties: + answer: + description: The answer to the question + type: string + cited_chunks: + description: IDs of chunks used to form the answer + items: + type: string + type: array + confidence: + default: 1.0 + description: Confidence score for this answer (0-1) + maximum: 1.0 + minimum: 0.0 + type: number + query: + description: The question that was answered + type: string + required: + - query + - answer + type: object + type: function + uri: http://localhost:11434/v1/chat/completions + response: + headers: + content-length: + - '663' + content-type: + - application/json + parsed_body: + choices: + - finish_reason: stop + index: 0 + message: + content: "- **query**: What does the term \"Python\" refer to in the context of programming languages? \n- **answer**: + \"Python\" refers to a programming language. It is widely used for web development, among other applications. + \ \n- **cited_chunks**: [\"3efaa37c-c1f0-43df-945b-784a9d20bf80\"] \n- **confidence**: 0.92" + reasoning: Only one result but states definition. We'll answer. + role: assistant + created: 1770981603 + id: chatcmpl-608 + model: gpt-oss + object: chat.completion + system_fingerprint: fp_ollama + usage: + completion_tokens: 111 + prompt_tokens: 748 + total_tokens: 859 + status: + code: 200 + message: OK +- request: + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate, zstd + connection: + - keep-alive + content-length: + - '3917' + content-type: + - application/json + host: + - localhost:11434 + method: POST + parsed_body: + messages: + - content: |- + You are a search and question-answering specialist. + + Process: + 1. Call search_and_answer with relevant keywords from the question. + 2. Review the results ordered by relevance. + 3. If needed, perform follow-up searches with different keywords (max 3 total). + 4. Provide a concise answer based strictly on the retrieved content. + + The search tool returns results like: + [9bde5847-44c9-400a-8997-0e6b65babf92] [rank 1 of 5] + Source: "Document Title" > Section > Subsection + Type: paragraph + Content: + The actual text content here... + + [d5a63c82-cb40-439f-9b2e-de7d177829b7] [rank 2 of 5] + Source: "Another Document" + Type: table + Content: + | Column 1 | Column 2 | + ... + + Each result includes: + - chunk_id in brackets and rank position (rank 1 = most relevant) + - Source: document title and section hierarchy (when available) + - Type: content type like paragraph, table, code, list_item (when available) + - Content: the actual text + + Output format: + - query: Echo the question you are answering + - answer: Your concise answer based on the retrieved content + - cited_chunks: List of plain strings containing only the chunk UUIDs (not objects) + - confidence: A score from 0.0 to 1.0 indicating answer confidence + + IMPORTANT: Use the EXACT, COMPLETE chunk ID (full UUID). Do NOT truncate IDs. + + Guidelines: + - Base answers strictly on retrieved content - do not use external knowledge. + - Use the Source and Type metadata to understand context. + - If multiple results are relevant, synthesize them coherently. + - If information is insufficient, say so clearly. + - Be concise and direct; avoid meta commentary about the process. + - Results are ordered by relevance, with rank 1 being most relevant. + role: system + - content: What does the term "Python" refer to in the context of programming languages? + role: user + - content: |- + + Need to search. + + role: assistant + tool_calls: + - function: + arguments: '{"query":"definition of Python programming language term referring to","limit":5}' + name: search_and_answer + id: call_taijxk2o + type: function + - content: |- + [3efaa37c-c1f0-43df-945b-784a9d20bf80] [rank 1 of 1] + Source: "Python Guide" + Type: text + Content: + Python is a programming language. It is widely used for web development. + role: tool + tool_call_id: call_taijxk2o + - content: "\nOnly one result but states definition. We'll answer.\n\n\n- **query**: What does the term + \"Python\" refer to in the context of programming languages? \n- **answer**: \"Python\" refers to a programming + language. It is widely used for web development, among other applications. \n- **cited_chunks**: [\"3efaa37c-c1f0-43df-945b-784a9d20bf80\"] + \ \n- **confidence**: 0.92" + role: assistant + - content: |- + Validation feedback: + Please include your response in a tool call. + + Fix the errors and try again. + role: user + model: gpt-oss + reasoning_effort: low + stream: false + tool_choice: auto + tools: + - function: + description: Search the knowledge base for relevant documents. + name: search_and_answer + parameters: + additionalProperties: false + properties: + limit: + anyOf: + - type: integer + - type: 'null' + default: null + query: + type: string + required: + - query + type: object + type: function + - function: + description: Answer to a search query with chunk references. + name: final_result + parameters: + additionalProperties: false + properties: + answer: + description: The answer to the question + type: string + cited_chunks: + description: IDs of chunks used to form the answer + items: + type: string + type: array + confidence: + default: 1.0 + description: Confidence score for this answer (0-1) + maximum: 1.0 + minimum: 0.0 + type: number + query: + description: The question that was answered + type: string + required: + - query + - answer + type: object + type: function + uri: http://localhost:11434/v1/chat/completions + response: + headers: + content-length: + - '764' + content-type: + - application/json + parsed_body: + choices: + - finish_reason: tool_calls + index: 0 + message: + content: '' + reasoning: Need to use function final_result. + role: assistant + tool_calls: + - function: + arguments: '{"answer":"\"Python\" refers to a programming language. It is widely used for web development, among + other applications.","cited_chunks":["3efaa37c-c1f0-43df-945b-784a9d20bf80"],"confidence":0.92,"query":"What + does the term \"Python\" refer to in the context of programming languages?"}' + name: final_result + id: call_d6rfhil0 + index: 0 + type: function + created: 1770981608 + id: chatcmpl-832 + model: gpt-oss + object: chat.completion + system_fingerprint: fp_ollama + usage: + completion_tokens: 104 + prompt_tokens: 884 + total_tokens: 988 + status: + code: 200 + message: OK +- request: + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate, zstd + connection: + - keep-alive + content-length: + - '2822' + content-type: + - application/json + host: + - localhost:11434 + method: POST + parsed_body: + messages: + - content: |- + Generate a direct, conversational answer + to the question based on the gathered evidence. + + Output: + - answer: Direct, comprehensive answer with a natural, helpful tone. + Write the actual answer, not a description of what you found. + Use as many sentences as needed to fully address the question. + - confidence: Score from 0.0 to 1.0 indicating answer quality. + + Guidelines: + - Base your answer solely on the evidence provided in the context. + - If a section is provided, use it to frame your answer appropriately. + - Be thorough - include all relevant information from the evidence. + - Use formatting (bullet points, numbered lists) when it improves clarity. + - Do NOT use meta-commentary like "Based on the research..." or "The evidence shows..." + Instead, directly state the information. + - If the evidence is incomplete, acknowledge limitations briefly. + role: system + - content: |- + Answer the question based on the gathered evidence. + + + What is Python? + + + What does the term "Python" refer to in the context of programming languages? + "Python" refers to a programming language. It is widely used for web development, among other applications. + 0.92 + Python Guide + + + + role: user + model: gpt-oss + reasoning_effort: low + stream: false + tool_choice: auto + tools: + - function: + description: Conversational answer for chat context. + name: final_result + parameters: + $defs: + Citation: + additionalProperties: false + description: |- + Resolved citation with full metadata for display/visual grounding. + + Used by both research graph and chat agent. The optional index field + supports UI display ordering in chat contexts. + properties: + chunk_id: + type: string + content: + type: string + document_id: + type: string + document_title: + anyOf: + - type: string + - type: 'null' + default: null + document_uri: + type: string + headings: + anyOf: + - items: + type: string + type: array + - type: 'null' + default: null + index: + anyOf: + - type: integer + - type: 'null' + default: null + page_numbers: + items: + type: integer + type: array + required: + - document_id + - chunk_id + - document_uri + - content + type: object + additionalProperties: false + properties: + answer: + description: Direct answer to the question + type: string + citations: + description: Citations supporting the answer + items: + $ref: '#/$defs/Citation' + type: array + confidence: + default: 1.0 + description: Confidence score (0-1) + maximum: 1.0 + minimum: 0.0 + type: number + required: + - answer + type: object + type: function + uri: http://localhost:11434/v1/chat/completions + response: + headers: + content-length: + - '894' + content-type: + - application/json + parsed_body: + choices: + - finish_reason: tool_calls + index: 0 + message: + content: '' + reasoning: 'Need to answer what is Python using evidence: prior answer shows Python refers to programming language + widely used for web development. Provide direct answer.' + role: assistant + tool_calls: + - function: + arguments: '{"answer":"Python is a programming language that is widely used for web development and many other + applications. It is known for its readability, flexibility, and extensive libraries that support tasks ranging + from simple scripting to complex machine‑learning projects.","citations":[],"confidence":0.95}' + name: final_result + id: call_xu9bt153 + index: 0 + type: function + created: 1770981612 + id: chatcmpl-961 + model: gpt-oss + object: chat.completion + system_fingerprint: fp_ollama + usage: + completion_tokens: 102 + prompt_tokens: 446 + total_tokens: 548 + status: + code: 200 + message: OK +version: 1 diff --git a/tests/cassettes/test_search_tools/TestSearchWithSessionState.test_search_multiple_appends_separate_entries.yaml b/tests/cassettes/test_search_tools/TestSearchWithSessionState.test_search_multiple_appends_separate_entries.yaml new file mode 100644 index 00000000..20321446 --- /dev/null +++ b/tests/cassettes/test_search_tools/TestSearchWithSessionState.test_search_multiple_appends_separate_entries.yaml @@ -0,0 +1,162 @@ +interactions: +- request: + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate, zstd + connection: + - keep-alive + content-length: + - '142' + content-type: + - application/json + host: + - localhost:11434 + method: POST + parsed_body: + encoding_format: base64 + input: + - Python is a programming language. It is widely used for web development. + 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: 15 + total_tokens: 15 + status: + code: 200 + message: OK +- request: + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate, zstd + connection: + - keep-alive + content-length: + - '134' + content-type: + - application/json + host: + - localhost:11434 + method: POST + parsed_body: + encoding_format: base64 + input: + - JavaScript runs in the browser. It powers interactive web pages. + 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: 13 + total_tokens: 13 + 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: + - Python + 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: 2 + total_tokens: 2 + status: + code: 200 + message: OK +- request: + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate, zstd + connection: + - keep-alive + content-length: + - '80' + content-type: + - application/json + host: + - localhost:11434 + method: POST + parsed_body: + encoding_format: base64 + input: + - JavaScript + 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: 2 + total_tokens: 2 + status: + code: 200 + message: OK +version: 1 diff --git a/tests/cassettes/test_search_tools/TestSearchWithSessionState.test_search_populates_citations_history.yaml b/tests/cassettes/test_search_tools/TestSearchWithSessionState.test_search_populates_citations_history.yaml new file mode 100644 index 00000000..fc529b6c --- /dev/null +++ b/tests/cassettes/test_search_tools/TestSearchWithSessionState.test_search_populates_citations_history.yaml @@ -0,0 +1,122 @@ +interactions: +- request: + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate, zstd + connection: + - keep-alive + content-length: + - '142' + content-type: + - application/json + host: + - localhost:11434 + method: POST + parsed_body: + encoding_format: base64 + input: + - Python is a programming language. It is widely used for web development. + 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: 15 + total_tokens: 15 + status: + code: 200 + message: OK +- request: + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate, zstd + connection: + - keep-alive + content-length: + - '134' + content-type: + - application/json + host: + - localhost:11434 + method: POST + parsed_body: + encoding_format: base64 + input: + - JavaScript runs in the browser. It powers interactive web pages. + 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: 13 + total_tokens: 13 + 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: + - Python + 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: 2 + total_tokens: 2 + status: + code: 200 + message: OK +version: 1 diff --git a/tests/tools/test_qa.py b/tests/tools/test_qa.py index dcc44aca..3c2dcfef 100644 --- a/tests/tools/test_qa.py +++ b/tests/tools/test_qa.py @@ -76,6 +76,26 @@ class TestRunQACore: if result.citations: assert len(session_state.citation_registry) > 0 + @pytest.mark.asyncio + async def test_run_qa_core_populates_citations_history( + self, allow_model_requests, qa_client, qa_config + ): + """run_qa_core appends to SessionState.citations_history.""" + context = ToolContext() + prepare_context(context, features=["qa"]) + + await run_qa_core( + client=qa_client, + config=qa_config, + question="What is Python?", + context=context, + ) + + session_state = context.get(SESSION_NAMESPACE, SessionState) + assert session_state is not None + assert len(session_state.citations_history) == 1 + assert session_state.citations_history[0] == session_state.citations + @pytest.mark.asyncio async def test_run_qa_core_without_context( self, allow_model_requests, qa_client, qa_config diff --git a/tests/tools/test_search.py b/tests/tools/test_search.py index 49dffdcf..8a131502 100644 --- a/tests/tools/test_search.py +++ b/tests/tools/test_search.py @@ -301,6 +301,44 @@ class TestSearchWithSessionState: # New chunks should get higher indices assert len(session_state.citation_registry) >= first_count + @pytest.mark.asyncio + async def test_search_populates_citations_history( + self, search_client, search_config + ): + """Search appends to SessionState.citations_history.""" + context = ToolContext() + prepare_context(context, features=["search"]) + toolset = create_search_toolset(search_config) + + search_tool = toolset.tools["search"] + ctx = make_ctx(search_client, context) + await search_tool.function(ctx, "Python") + + session_state = context.get(SESSION_NAMESPACE, SessionState) + assert session_state is not None + assert len(session_state.citations_history) == 1 + assert session_state.citations_history[0] == session_state.citations + + @pytest.mark.asyncio + async def test_search_multiple_appends_separate_entries( + self, search_client, search_config + ): + """Multiple searches append separate entries to citations_history.""" + context = ToolContext() + prepare_context(context, features=["search"]) + toolset = create_search_toolset(search_config) + + search_tool = toolset.tools["search"] + ctx = make_ctx(search_client, context) + await search_tool.function(ctx, "Python") + await search_tool.function(ctx, "JavaScript") + + session_state = context.get(SESSION_NAMESPACE, SessionState) + assert session_state is not None + assert len(session_state.citations_history) == 2 + # Latest citations should match the last entry + assert session_state.citations_history[1] == session_state.citations + @pytest.fixture def search_config(): diff --git a/tests/tools/test_session.py b/tests/tools/test_session.py index fc7f2e72..c3d0a768 100644 --- a/tests/tools/test_session.py +++ b/tests/tools/test_session.py @@ -1,5 +1,6 @@ from ag_ui.core import EventType, StateDeltaEvent +from haiku.rag.agents.research.models import Citation from haiku.rag.tools.session import ( SessionState, compute_combined_state_delta, @@ -7,6 +8,34 @@ from haiku.rag.tools.session import ( ) +class TestSessionState: + """Tests for SessionState model.""" + + def test_citations_history_defaults_to_empty(self): + """SessionState.citations_history defaults to empty list.""" + state = SessionState() + assert state.citations_history == [] + + def test_citations_history_serialization_roundtrip(self): + """citations_history survives serialize/deserialize.""" + citation = Citation( + index=1, + document_id="d1", + chunk_id="c1", + document_uri="test://doc", + document_title="Doc", + page_numbers=[], + headings=None, + content="some content", + ) + state = SessionState(citations_history=[[citation]]) + data = state.model_dump(mode="json") + restored = SessionState.model_validate(data) + assert len(restored.citations_history) == 1 + assert len(restored.citations_history[0]) == 1 + assert restored.citations_history[0][0].chunk_id == "c1" + + class TestComputeStateDelta: """Tests for compute_state_delta."""