haiku.rag/tests/cassettes/test_rlm/TestClientRLMIntegration.test_rlm_aggregation.yaml

939 lines
104 KiB
YAML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

interactions:
- request:
headers:
accept:
- application/json
accept-encoding:
- gzip, deflate, zstd
connection:
- keep-alive
content-length:
- '108'
content-type:
- application/json
host:
- localhost:11434
method: POST
parsed_body:
encoding_format: base64
input:
- 'Sales report Q1: Revenue was $100,000.'
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: 17
total_tokens: 17
status:
code: 200
message: OK
- request:
headers:
accept:
- application/json
accept-encoding:
- gzip, deflate, zstd
connection:
- keep-alive
content-length:
- '108'
content-type:
- application/json
host:
- localhost:11434
method: POST
parsed_body:
encoding_format: base64
input:
- 'Sales report Q2: Revenue was $150,000.'
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: 17
total_tokens: 17
status:
code: 200
message: OK
- request:
headers:
accept:
- application/json
accept-encoding:
- gzip, deflate, zstd
connection:
- keep-alive
content-length:
- '108'
content-type:
- application/json
host:
- localhost:11434
method: POST
parsed_body:
encoding_format: base64
input:
- 'Sales report Q3: Revenue was $200,000.'
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: 17
total_tokens: 17
status:
code: 200
message: OK
- request:
headers:
accept:
- application/json
accept-encoding:
- gzip, deflate, zstd
connection:
- keep-alive
content-length:
- '7341'
content-type:
- application/json
host:
- localhost:11434
method: POST
parsed_body:
messages:
- content: |-
You are a Recursive Language Model (RLM) agent that solves complex research questions by writing and executing Python code.
IMPORTANT: You MUST use the `execute_code` tool to run Python code. The functions described below are ONLY available inside the execute_code tool - you cannot access them any other way. Always execute code to answer questions; do not just describe what code would do.
CRITICAL: Inside execute_code, these functions are ALREADY available in the namespace. Do NOT import them - just call them with `await`:
- results = await search("query") ✓ CORRECT
- from haiku.rag import search ✗ WRONG - will fail
- results = search("query") ✗ WRONG - must use await
You have access to a sandboxed Python interpreter with these haiku.rag functions (use them directly with `await`, no imports needed):
## Available Functions
### await search(query, limit=10) -> list[dict]
Search the knowledge base using hybrid search (vector + full-text).
Returns list of dicts with keys: chunk_id, content, document_id, document_title, document_uri, score, page_numbers, headings
### await list_documents(limit=10, offset=0) -> list[dict]
List available documents in the knowledge base.
Returns list of dicts with keys: id, title, uri, created_at
### await get_document(id_or_title) -> str | None
Get the full text content of a document by ID, title, or URI.
Returns the document content as a string, or None if not found.
### await get_chunk(chunk_id) -> dict | None
Get a specific chunk by its ID (from search results).
Returns dict with keys: chunk_id, content, document_id, document_title, headings, page_numbers, labels
Use this to retrieve full chunk details and metadata for citation.
### await llm(prompt) -> str
Call an LLM directly with the given prompt. Returns the response as a string.
Use this for classification, summarization, extraction, or any task where you
already have the content and just need LLM reasoning.
## Pre-loaded Documents Variable
If documents were pre-loaded for this session, a `documents` variable is available:
```python
# documents is a list of dicts with keys: id, title, uri, content
for doc in documents:
print(doc['title'], len(doc['content']))
```
Check if it exists with: `if 'documents' in dir(): ...`
## Available Python Features
The interpreter supports: variables, arithmetic, strings, f-strings, lists, dicts, tuples, sets, loops, conditionals, comprehensions, functions, async/await, `map()`, `sorted()`/`.sort(key=...)`, try/except, and the `json` module.
Not supported: imports (other than `json`), class definitions, generators/yield, match statements, decorators, `with` statements.
For pattern matching or text extraction, use string methods (`str.split`, `str.find`, `str.startswith`, `in` operator) or the `llm()` function.
## Strategy Guide
1. **Explore First**: Start by listing documents or searching to understand what's available. Document names may differ from filenames (e.g., "tbmed593.pdf" might be stored as "TB MED 593" or similar).
2. **If get_document returns None**: Use `await list_documents()` to see actual document titles, or `await search()` to find relevant content.
3. **Iterative Refinement**: Run code, examine results, adjust your approach based on what you find.
4. **Use print() Liberally**: The sandbox captures stdout - print intermediate results to see what you're working with.
5. **Aggregate with Code**: For counting, averaging, or comparing across documents, write loops and data structures.
6. **Use llm() for Classification/Extraction**: When you need to classify, summarize, or extract structured data from content you already have, use `await llm()`.
7. **Cite Your Sources**: Use get_chunk() to retrieve chunk metadata for citations. Track which documents/chunks informed your answer.
## Example Patterns
### Counting documents matching a condition
```python
docs = await list_documents(limit=100)
count = 0
for doc in docs:
content = await get_document(doc['id'])
if content and 'keyword' in content.lower():
count += 1
print(f"Found in: {doc['title']}")
print(f"Total: {count}")
```
### Extracting data with llm()
```python
numbers = []
results = await search("financial data", limit=20)
for r in results:
extracted = await llm(f"Extract all dollar amounts from this text as a comma-separated list of numbers (no $ signs): {r['content']}")
for part in extracted.split(','):
part = part.strip().replace(',', '')
if part.isdigit():
numbers.append(int(part))
if numbers:
print(f"Average: {sum(numbers) / len(numbers)}")
```
### Using search results with get_chunk for citations
```python
results = await search("safety requirements", limit=5)
for r in results:
chunk = await get_chunk(r['chunk_id'])
print(f"From '{chunk['document_title']}', page {chunk['page_numbers']}: {chunk['content'][:100]}")
```
### Using llm() for classification
```python
content = await get_document("Q1 Report")
sentiment = await llm(f"Classify the sentiment as positive, negative, or mixed: {content}")
print(sentiment)
```
## Workflow
1. **ALWAYS start by using execute_code** to explore the knowledge base
2. Run multiple code blocks as needed to gather information
3. After collecting data, provide your final answer
## Output Format
CRITICAL: Your final response MUST be valid JSON matching this exact schema:
```json
{"answer": "Your complete answer here as a string", "program": "Your final consolidated program here as a string"}
```
- `answer`: A clear answer to the user's question with key findings and references to specific documents/chunks.
- `program`: A single, self-contained Python program that produces the answer. Consolidate your exploratory code executions into one clean script.
Do NOT return arbitrary JSON structures. Always use the exact format: {"answer": "...", "program": "..."}
CRITICAL: You MUST call execute_code at least once before providing your answer. Never give up without trying to execute code first.
role: system
- content: What is the total revenue across all quarterly reports?
role: user
model: gpt-oss
reasoning_effort: low
stream: false
tool_choice: auto
tools:
- function:
description: |-
<summary>Execute Python code in a sandboxed interpreter.
The code has access to haiku.rag functions (search, list_documents,
get_document, get_chunk, llm).
Use print() to output results.</summary>
<returns>
<description>Structured result with success status, stdout, and stderr.</description>
</returns>
name: execute_code
parameters:
additionalProperties: false
properties:
code:
description: Python code to execute.
type: string
required:
- code
type: object
strict: true
type: function
- function:
description: Result from RLM agent execution.
name: final_result
parameters:
additionalProperties: false
properties:
answer:
description: The answer to the user's question
type: string
program:
description: The final consolidated program
type: string
required:
- answer
- program
type: object
strict: true
type: function
uri: http://localhost:11434/v1/chat/completions
response:
headers:
content-length:
- '809'
content-type:
- application/json
parsed_body:
choices:
- finish_reason: tool_calls
index: 0
message:
content: ''
reasoning: We need to find quarterly reports documents and extract revenue figures. Likely documents include Q1,
Q2, etc. Search for "quarterly report revenue".
role: assistant
tool_calls:
- function:
arguments: '{"code":"# Search for quarterly report revenue\nresults = await search(\"quarterly report revenue\",
limit=20)\nprint(len(results))\nfor r in results[:5]:\n print(r[''document_title''], r[''page_numbers''],
r[''score''])\n"}'
name: execute_code
id: call_00l27zrg
index: 0
type: function
created: 1771924503
id: chatcmpl-643
model: gpt-oss
object: chat.completion
system_fingerprint: fp_ollama
usage:
completion_tokens: 110
prompt_tokens: 1625
total_tokens: 1735
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:
- quarterly report revenue
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:
- '8336'
content-type:
- application/json
host:
- localhost:11434
method: POST
parsed_body:
messages:
- content: |-
You are a Recursive Language Model (RLM) agent that solves complex research questions by writing and executing Python code.
IMPORTANT: You MUST use the `execute_code` tool to run Python code. The functions described below are ONLY available inside the execute_code tool - you cannot access them any other way. Always execute code to answer questions; do not just describe what code would do.
CRITICAL: Inside execute_code, these functions are ALREADY available in the namespace. Do NOT import them - just call them with `await`:
- results = await search("query") ✓ CORRECT
- from haiku.rag import search ✗ WRONG - will fail
- results = search("query") ✗ WRONG - must use await
You have access to a sandboxed Python interpreter with these haiku.rag functions (use them directly with `await`, no imports needed):
## Available Functions
### await search(query, limit=10) -> list[dict]
Search the knowledge base using hybrid search (vector + full-text).
Returns list of dicts with keys: chunk_id, content, document_id, document_title, document_uri, score, page_numbers, headings
### await list_documents(limit=10, offset=0) -> list[dict]
List available documents in the knowledge base.
Returns list of dicts with keys: id, title, uri, created_at
### await get_document(id_or_title) -> str | None
Get the full text content of a document by ID, title, or URI.
Returns the document content as a string, or None if not found.
### await get_chunk(chunk_id) -> dict | None
Get a specific chunk by its ID (from search results).
Returns dict with keys: chunk_id, content, document_id, document_title, headings, page_numbers, labels
Use this to retrieve full chunk details and metadata for citation.
### await llm(prompt) -> str
Call an LLM directly with the given prompt. Returns the response as a string.
Use this for classification, summarization, extraction, or any task where you
already have the content and just need LLM reasoning.
## Pre-loaded Documents Variable
If documents were pre-loaded for this session, a `documents` variable is available:
```python
# documents is a list of dicts with keys: id, title, uri, content
for doc in documents:
print(doc['title'], len(doc['content']))
```
Check if it exists with: `if 'documents' in dir(): ...`
## Available Python Features
The interpreter supports: variables, arithmetic, strings, f-strings, lists, dicts, tuples, sets, loops, conditionals, comprehensions, functions, async/await, `map()`, `sorted()`/`.sort(key=...)`, try/except, and the `json` module.
Not supported: imports (other than `json`), class definitions, generators/yield, match statements, decorators, `with` statements.
For pattern matching or text extraction, use string methods (`str.split`, `str.find`, `str.startswith`, `in` operator) or the `llm()` function.
## Strategy Guide
1. **Explore First**: Start by listing documents or searching to understand what's available. Document names may differ from filenames (e.g., "tbmed593.pdf" might be stored as "TB MED 593" or similar).
2. **If get_document returns None**: Use `await list_documents()` to see actual document titles, or `await search()` to find relevant content.
3. **Iterative Refinement**: Run code, examine results, adjust your approach based on what you find.
4. **Use print() Liberally**: The sandbox captures stdout - print intermediate results to see what you're working with.
5. **Aggregate with Code**: For counting, averaging, or comparing across documents, write loops and data structures.
6. **Use llm() for Classification/Extraction**: When you need to classify, summarize, or extract structured data from content you already have, use `await llm()`.
7. **Cite Your Sources**: Use get_chunk() to retrieve chunk metadata for citations. Track which documents/chunks informed your answer.
## Example Patterns
### Counting documents matching a condition
```python
docs = await list_documents(limit=100)
count = 0
for doc in docs:
content = await get_document(doc['id'])
if content and 'keyword' in content.lower():
count += 1
print(f"Found in: {doc['title']}")
print(f"Total: {count}")
```
### Extracting data with llm()
```python
numbers = []
results = await search("financial data", limit=20)
for r in results:
extracted = await llm(f"Extract all dollar amounts from this text as a comma-separated list of numbers (no $ signs): {r['content']}")
for part in extracted.split(','):
part = part.strip().replace(',', '')
if part.isdigit():
numbers.append(int(part))
if numbers:
print(f"Average: {sum(numbers) / len(numbers)}")
```
### Using search results with get_chunk for citations
```python
results = await search("safety requirements", limit=5)
for r in results:
chunk = await get_chunk(r['chunk_id'])
print(f"From '{chunk['document_title']}', page {chunk['page_numbers']}: {chunk['content'][:100]}")
```
### Using llm() for classification
```python
content = await get_document("Q1 Report")
sentiment = await llm(f"Classify the sentiment as positive, negative, or mixed: {content}")
print(sentiment)
```
## Workflow
1. **ALWAYS start by using execute_code** to explore the knowledge base
2. Run multiple code blocks as needed to gather information
3. After collecting data, provide your final answer
## Output Format
CRITICAL: Your final response MUST be valid JSON matching this exact schema:
```json
{"answer": "Your complete answer here as a string", "program": "Your final consolidated program here as a string"}
```
- `answer`: A clear answer to the user's question with key findings and references to specific documents/chunks.
- `program`: A single, self-contained Python program that produces the answer. Consolidate your exploratory code executions into one clean script.
Do NOT return arbitrary JSON structures. Always use the exact format: {"answer": "...", "program": "..."}
CRITICAL: You MUST call execute_code at least once before providing your answer. Never give up without trying to execute code first.
role: system
- content: What is the total revenue across all quarterly reports?
role: user
- content: null
reasoning: We need to find quarterly reports documents and extract revenue figures. Likely documents include Q1, Q2,
etc. Search for "quarterly report revenue".
role: assistant
tool_calls:
- function:
arguments: '{"code":"# Search for quarterly report revenue\nresults = await search(\"quarterly report revenue\",
limit=20)\nprint(len(results))\nfor r in results[:5]:\n print(r[''document_title''], r[''page_numbers''],
r[''score''])\n"}'
name: execute_code
id: call_00l27zrg
type: function
- content: '{"code":"# Search for quarterly report revenue\nresults = await search(\"quarterly report revenue\", limit=20)\nprint(len(results))\nfor
r in results[:5]:\n print(r[''document_title''], r[''page_numbers''], r[''score''])\n","stdout":"3\nQ1 Report
[] 0.03226645663380623\nQ2 Report [] 0.03226645663380623\nQ3 Report [] 0.032258063554763794\n","stderr":"","success":true}'
role: tool
tool_call_id: call_00l27zrg
model: gpt-oss
reasoning_effort: low
stream: false
tool_choice: auto
tools:
- function:
description: |-
<summary>Execute Python code in a sandboxed interpreter.
The code has access to haiku.rag functions (search, list_documents,
get_document, get_chunk, llm).
Use print() to output results.</summary>
<returns>
<description>Structured result with success status, stdout, and stderr.</description>
</returns>
name: execute_code
parameters:
additionalProperties: false
properties:
code:
description: Python code to execute.
type: string
required:
- code
type: object
strict: true
type: function
- function:
description: Result from RLM agent execution.
name: final_result
parameters:
additionalProperties: false
properties:
answer:
description: The answer to the user's question
type: string
program:
description: The final consolidated program
type: string
required:
- answer
- program
type: object
strict: true
type: function
uri: http://localhost:11434/v1/chat/completions
response:
headers:
content-length:
- '567'
content-type:
- application/json
parsed_body:
choices:
- finish_reason: tool_calls
index: 0
message:
content: ''
reasoning: Found Q1, Q2, Q3. Probably Q4 too. Search for Q4.
role: assistant
tool_calls:
- function:
arguments: '{"code":"results4 = await search(\"Q4 Report revenue\", limit=5)\nprint(results4)\n"}'
name: execute_code
id: call_s2cf4xgs
index: 0
type: function
created: 1771924505
id: chatcmpl-466
model: gpt-oss
object: chat.completion
system_fingerprint: fp_ollama
usage:
completion_tokens: 64
prompt_tokens: 1858
total_tokens: 1922
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:
- Q4 Report revenue
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:
- '9694'
content-type:
- application/json
host:
- localhost:11434
method: POST
parsed_body:
messages:
- content: |-
You are a Recursive Language Model (RLM) agent that solves complex research questions by writing and executing Python code.
IMPORTANT: You MUST use the `execute_code` tool to run Python code. The functions described below are ONLY available inside the execute_code tool - you cannot access them any other way. Always execute code to answer questions; do not just describe what code would do.
CRITICAL: Inside execute_code, these functions are ALREADY available in the namespace. Do NOT import them - just call them with `await`:
- results = await search("query") ✓ CORRECT
- from haiku.rag import search ✗ WRONG - will fail
- results = search("query") ✗ WRONG - must use await
You have access to a sandboxed Python interpreter with these haiku.rag functions (use them directly with `await`, no imports needed):
## Available Functions
### await search(query, limit=10) -> list[dict]
Search the knowledge base using hybrid search (vector + full-text).
Returns list of dicts with keys: chunk_id, content, document_id, document_title, document_uri, score, page_numbers, headings
### await list_documents(limit=10, offset=0) -> list[dict]
List available documents in the knowledge base.
Returns list of dicts with keys: id, title, uri, created_at
### await get_document(id_or_title) -> str | None
Get the full text content of a document by ID, title, or URI.
Returns the document content as a string, or None if not found.
### await get_chunk(chunk_id) -> dict | None
Get a specific chunk by its ID (from search results).
Returns dict with keys: chunk_id, content, document_id, document_title, headings, page_numbers, labels
Use this to retrieve full chunk details and metadata for citation.
### await llm(prompt) -> str
Call an LLM directly with the given prompt. Returns the response as a string.
Use this for classification, summarization, extraction, or any task where you
already have the content and just need LLM reasoning.
## Pre-loaded Documents Variable
If documents were pre-loaded for this session, a `documents` variable is available:
```python
# documents is a list of dicts with keys: id, title, uri, content
for doc in documents:
print(doc['title'], len(doc['content']))
```
Check if it exists with: `if 'documents' in dir(): ...`
## Available Python Features
The interpreter supports: variables, arithmetic, strings, f-strings, lists, dicts, tuples, sets, loops, conditionals, comprehensions, functions, async/await, `map()`, `sorted()`/`.sort(key=...)`, try/except, and the `json` module.
Not supported: imports (other than `json`), class definitions, generators/yield, match statements, decorators, `with` statements.
For pattern matching or text extraction, use string methods (`str.split`, `str.find`, `str.startswith`, `in` operator) or the `llm()` function.
## Strategy Guide
1. **Explore First**: Start by listing documents or searching to understand what's available. Document names may differ from filenames (e.g., "tbmed593.pdf" might be stored as "TB MED 593" or similar).
2. **If get_document returns None**: Use `await list_documents()` to see actual document titles, or `await search()` to find relevant content.
3. **Iterative Refinement**: Run code, examine results, adjust your approach based on what you find.
4. **Use print() Liberally**: The sandbox captures stdout - print intermediate results to see what you're working with.
5. **Aggregate with Code**: For counting, averaging, or comparing across documents, write loops and data structures.
6. **Use llm() for Classification/Extraction**: When you need to classify, summarize, or extract structured data from content you already have, use `await llm()`.
7. **Cite Your Sources**: Use get_chunk() to retrieve chunk metadata for citations. Track which documents/chunks informed your answer.
## Example Patterns
### Counting documents matching a condition
```python
docs = await list_documents(limit=100)
count = 0
for doc in docs:
content = await get_document(doc['id'])
if content and 'keyword' in content.lower():
count += 1
print(f"Found in: {doc['title']}")
print(f"Total: {count}")
```
### Extracting data with llm()
```python
numbers = []
results = await search("financial data", limit=20)
for r in results:
extracted = await llm(f"Extract all dollar amounts from this text as a comma-separated list of numbers (no $ signs): {r['content']}")
for part in extracted.split(','):
part = part.strip().replace(',', '')
if part.isdigit():
numbers.append(int(part))
if numbers:
print(f"Average: {sum(numbers) / len(numbers)}")
```
### Using search results with get_chunk for citations
```python
results = await search("safety requirements", limit=5)
for r in results:
chunk = await get_chunk(r['chunk_id'])
print(f"From '{chunk['document_title']}', page {chunk['page_numbers']}: {chunk['content'][:100]}")
```
### Using llm() for classification
```python
content = await get_document("Q1 Report")
sentiment = await llm(f"Classify the sentiment as positive, negative, or mixed: {content}")
print(sentiment)
```
## Workflow
1. **ALWAYS start by using execute_code** to explore the knowledge base
2. Run multiple code blocks as needed to gather information
3. After collecting data, provide your final answer
## Output Format
CRITICAL: Your final response MUST be valid JSON matching this exact schema:
```json
{"answer": "Your complete answer here as a string", "program": "Your final consolidated program here as a string"}
```
- `answer`: A clear answer to the user's question with key findings and references to specific documents/chunks.
- `program`: A single, self-contained Python program that produces the answer. Consolidate your exploratory code executions into one clean script.
Do NOT return arbitrary JSON structures. Always use the exact format: {"answer": "...", "program": "..."}
CRITICAL: You MUST call execute_code at least once before providing your answer. Never give up without trying to execute code first.
role: system
- content: What is the total revenue across all quarterly reports?
role: user
- content: null
reasoning: We need to find quarterly reports documents and extract revenue figures. Likely documents include Q1, Q2,
etc. Search for "quarterly report revenue".
role: assistant
tool_calls:
- function:
arguments: '{"code":"# Search for quarterly report revenue\nresults = await search(\"quarterly report revenue\",
limit=20)\nprint(len(results))\nfor r in results[:5]:\n print(r[''document_title''], r[''page_numbers''],
r[''score''])\n"}'
name: execute_code
id: call_00l27zrg
type: function
- content: '{"code":"# Search for quarterly report revenue\nresults = await search(\"quarterly report revenue\", limit=20)\nprint(len(results))\nfor
r in results[:5]:\n print(r[''document_title''], r[''page_numbers''], r[''score''])\n","stdout":"3\nQ1 Report
[] 0.03226645663380623\nQ2 Report [] 0.03226645663380623\nQ3 Report [] 0.032258063554763794\n","stderr":"","success":true}'
role: tool
tool_call_id: call_00l27zrg
- content: null
reasoning: Found Q1, Q2, Q3. Probably Q4 too. Search for Q4.
role: assistant
tool_calls:
- function:
arguments: '{"code":"results4 = await search(\"Q4 Report revenue\", limit=5)\nprint(results4)\n"}'
name: execute_code
id: call_s2cf4xgs
type: function
- content: '{"code":"results4 = await search(\"Q4 Report revenue\", limit=5)\nprint(results4)\n","stdout":"[{''chunk_id'':
''fb347b1c-9bf0-455b-8535-3484f9578731'', ''content'': ''Sales report Q1: Revenue was $100,000.'', ''document_id'':
''7c76fa0e-4d74-49d1-88a6-908391e63fe5'', ''document_title'': ''Q1 Report'', ''document_uri'': None, ''score'':
0.03226645663380623, ''page_numbers'': [], ''headings'': None}, {''chunk_id'': ''50f60a6f-53e4-4850-8d5b-a3c00d4375c6'',
''content'': ''Sales report Q2: Revenue was $150,000.'', ''document_id'': ''792e21c1-2736-4fa8-ba8e-0629b1cb5a2f'',
''document_title'': ''Q2 Report'', ''document_uri'': None, ''score'': 0.03226645663380623, ''page_numbers'': [],
''headings'': None}, {''chunk_id'': ''70233263-be1a-414e-8841-c9509076530e'', ''content'': ''Sales report Q3: Revenue
was $200,000.'', ''document_id'': ''ab42afcc-0fe0-4fdc-8c26-656d747c950e'', ''document_title'': ''Q3 Report'', ''document_uri'':
None, ''score'': 0.032258063554763794, ''page_numbers'': [], ''headings'': None}]\n","stderr":"","success":true}'
role: tool
tool_call_id: call_s2cf4xgs
model: gpt-oss
reasoning_effort: low
stream: false
tool_choice: auto
tools:
- function:
description: |-
<summary>Execute Python code in a sandboxed interpreter.
The code has access to haiku.rag functions (search, list_documents,
get_document, get_chunk, llm).
Use print() to output results.</summary>
<returns>
<description>Structured result with success status, stdout, and stderr.</description>
</returns>
name: execute_code
parameters:
additionalProperties: false
properties:
code:
description: Python code to execute.
type: string
required:
- code
type: object
strict: true
type: function
- function:
description: Result from RLM agent execution.
name: final_result
parameters:
additionalProperties: false
properties:
answer:
description: The answer to the user's question
type: string
program:
description: The final consolidated program
type: string
required:
- answer
- program
type: object
strict: true
type: function
uri: http://localhost:11434/v1/chat/completions
response:
headers:
content-length:
- '1421'
content-type:
- application/json
parsed_body:
choices:
- finish_reason: stop
index: 0
message:
content: '{"answer":"The summed revenue reported across all available quarterly reports (Q1, Q2, and Q3) is **$450,000**.
The figures are:\n- **Q1 Report** $100,000 (citation: chunk fb347b1c9bf0455b85353484f9578731)\n- **Q2 Report**
$150,000 (citation: chunk 50f60a6f53e448508d5ba3c00d4375c6)\n- **Q3 Report** $200,000 (citation: chunk
70233263be1a414e8841c9509076530e)\n\nNo Q4 report was found in the knowledge base. The total is therefore
100k + 150k + 200k = 450k dollars.", "program":"# Calculate total revenue from quarterly reports\nresults
= await search(\"sales report revenue\", limit=10)\nrevenue = 0\nfor r in results:\n # Use llm to extract dollar
amount\n amount_text = await llm(f\"Extract the dollar amount from this snippet: {r[''content'']}\")\n #
Clean and convert\n amt = int(''''.join([c for c in amount_text if c.isdigit()]))\n revenue += amt\nprint(f\"Total
revenue: ${revenue}\")"}'
reasoning: Results show Q1 100k, Q2 150k, Q3 200k. No Q4? Maybe not included. Total revenue = 450k. Provide citations
from chunks.
role: assistant
created: 1771924512
id: chatcmpl-210
model: gpt-oss
object: chat.completion
system_fingerprint: fp_ollama
usage:
completion_tokens: 367
prompt_tokens: 2311
total_tokens: 2678
status:
code: 200
message: OK
version: 1