ai-agent-book 精选快照(<2MB 代码与文档,来自 github.com/bojieli/ai-agent-book)
Build latest book artifacts / build (push) Canceled after 0s
dependency resolution / resolve (3.11) (push) Canceled after 0s
dependency resolution / resolve (3.13) (push) Canceled after 0s
deploy-pages / build (push) Canceled after 0s
deploy-pages / deploy (push) Canceled after 0s
i18n consistency check / check (push) Canceled after 0s
provider adoption tests / test (chapter2/context-compression) (push) Canceled after 0s
provider adoption tests / test (chapter2/prompt-injection) (push) Canceled after 0s
provider adoption tests / test (chapter2/system-hint) (push) Canceled after 0s
provider adoption tests / test (chapter3/log-sanitization) (push) Canceled after 0s
web-search-agent tests / test (push) Canceled after 0s
web-search-agent tests / agentbook (push) Canceled after 0s

This commit is contained in:
2026-08-20 13:12:50 +00:00
commit b119135836
10275 changed files with 3284984 additions and 0 deletions
@@ -0,0 +1,24 @@
{
"transport": "mcp-stdio",
"server": "/Users/boj/book/ai-agent-book/chapter4/perception-tools/src/main.py",
"tools_list_received": true,
"server_name": "perception-tools",
"server_version": "1.26.0",
"tool_count": 126,
"unique_tool_count": 126,
"schema_tokens_o200k": 50120,
"schema_bytes": 206819,
"schema_sha256": "77b57f69c57243f3295e6b2c3cf493420fe1bdbdd816df7d6374a1640221d627",
"required_tools_present": {
"web_search": true,
"code_interpreter": true,
"yfinance_quote": true,
"search_news": true,
"arxiv_search": true,
"arxiv_download": true,
"github_list_contributors": true
},
"catalog_gzip_bytes": 21244,
"catalog_gzip_sha256": "822bdadf46573ca850447f1ead6b526c01f46f73d35c90000895f891584d24bd",
"catalog_gzip_content_sha256": "77b57f69c57243f3295e6b2c3cf493420fe1bdbdd816df7d6374a1640221d627"
}
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="900" height="500"><rect width="100%" height="100%" fill="white"/><text x="450" y="32" text-anchor="middle" font-size="22">openai/openai-python contributors</text><rect x="70" y="70" width="68" height="350" fill="#4f46e5"/><text x="104.0" y="65" text-anchor="middle" font-size="11">700</text><text x="104.0" y="440" text-anchor="end" transform="rotate(-35 104.0 440)" font-size="10">stainless-app[bot]</text><rect x="146" y="282" width="68" height="138" fill="#4f46e5"/><text x="180.0" y="277" text-anchor="middle" font-size="11">276</text><text x="180.0" y="440" text-anchor="end" transform="rotate(-35 180.0 440)" font-size="10">stainless-bot</text><rect x="222" y="372" width="68" height="48" fill="#4f46e5"/><text x="256.0" y="367" text-anchor="middle" font-size="11">96</text><text x="256.0" y="440" text-anchor="end" transform="rotate(-35 256.0 440)" font-size="10">RobertCraigie</text><rect x="298" y="401" width="68" height="19" fill="#4f46e5"/><text x="332.0" y="396" text-anchor="middle" font-size="11">39</text><text x="332.0" y="440" text-anchor="end" transform="rotate(-35 332.0 440)" font-size="10">apcha-oai</text><rect x="374" y="406" width="68" height="14" fill="#4f46e5"/><text x="408.0" y="401" text-anchor="middle" font-size="11">29</text><text x="408.0" y="440" text-anchor="end" transform="rotate(-35 408.0 440)" font-size="10">hallacy</text><rect x="450" y="413" width="68" height="7" fill="#4f46e5"/><text x="484.0" y="408" text-anchor="middle" font-size="11">14</text><text x="484.0" y="440" text-anchor="end" transform="rotate(-35 484.0 440)" font-size="10">rachellim</text><rect x="526" y="414" width="68" height="6" fill="#4f46e5"/><text x="560.0" y="409" text-anchor="middle" font-size="11">13</text><text x="560.0" y="440" text-anchor="end" transform="rotate(-35 560.0 440)" font-size="10">logankilpatrick</text><rect x="602" y="416" width="68" height="4" fill="#4f46e5"/><text x="636.0" y="411" text-anchor="middle" font-size="11">9</text><text x="636.0" y="440" text-anchor="end" transform="rotate(-35 636.0 440)" font-size="10">dtmeadows</text><rect x="678" y="416" width="68" height="4" fill="#4f46e5"/><text x="712.0" y="411" text-anchor="middle" font-size="11">9</text><text x="712.0" y="440" text-anchor="end" transform="rotate(-35 712.0 440)" font-size="10">kristapratico</text><rect x="754" y="417" width="68" height="3" fill="#4f46e5"/><text x="788.0" y="412" text-anchor="middle" font-size="11">7</text><text x="788.0" y="440" text-anchor="end" transform="rotate(-35 788.0 440)" font-size="10">ddeville</text></svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

@@ -0,0 +1,12 @@
{
"model": "sentence-transformers/all-MiniLM-L6-v2",
"backend": "local-transformers-mean-pooling",
"device": "cpu",
"local_files_only": true,
"catalog_text_count": 126,
"texts_sha256": "3da0897f88acbd0d32a3a77578bd135a91d631a8b85775ff12232eb5aafe3b9d",
"cache_path": "/Users/boj/book/ai-agent-book/chapter4/active-tool-discovery/validation/experiment_4_5/qwen3_4b_exact_20260730T061700Z/index/embeddings-all-MiniLM-L6-v2-3da0897f88acbd0d32a3.json",
"cache_sha256": "23051857081c61e9dfc184d868fdaecd0bc816360133eeb951cbb6593fdda9c9",
"vector_count": 126,
"vector_dimensions": 384
}
@@ -0,0 +1,105 @@
{
"generated_at": "2026-07-30T05:05:11.922419+00:00",
"files": [
{
"path": "catalog.schemas.json.gz",
"bytes": 21244,
"sha256": "822bdadf46573ca850447f1ead6b526c01f46f73d35c90000895f891584d24bd"
},
{
"path": "catalog_receipt.json",
"bytes": 864,
"sha256": "9f4072990692bb6a0f5c4a6e23f18f2a4bf9938478cf60b2ffd73fe5ee766a7a"
},
{
"path": "control/apple_stock_news/receipt.json",
"bytes": 73358,
"sha256": "ecd66de27d40f03f8aaafe02fe1826fff1917efac68078031d0cb3117edfbceb"
},
{
"path": "control/github_contributors_visualization/contributors.svg",
"bytes": 2602,
"sha256": "d14524e843fa88f3ad322848fc7fa8cad7d5153c79f7d74c7be5e24ba3880b0a"
},
{
"path": "control/github_contributors_visualization/receipt.json",
"bytes": 124615,
"sha256": "400e65e13aad11428f6ef43ee115001a820440df25f6ce24e66c0328f7a48a0f"
},
{
"path": "control/transformer_arxiv_download/papers/2607.27184v1.pdf",
"bytes": 1095498,
"sha256": "73f5c9a80cbfd807ed5bc14c963b7c9fd18a9de6eb30c8845b0505a79abd9536"
},
{
"path": "control/transformer_arxiv_download/papers/2607.27185v1.pdf",
"bytes": 797471,
"sha256": "4e4ff0947d28d37b7cfcfd743b50f1538945b6acfa598e74b084659436780754"
},
{
"path": "control/transformer_arxiv_download/papers/2607.27188v1.pdf",
"bytes": 1176383,
"sha256": "ecbe0ac9ae6768860d7f9f10a6986f86d4e98f9c73fd398e44894a8ac29b42e8"
},
{
"path": "control/transformer_arxiv_download/receipt.json",
"bytes": 67851,
"sha256": "a9cc68669d65e3836f25ad436c0448355bac27d7ac30784de3f7fe918f4c3347"
},
{
"path": "embedding_receipt.json",
"bytes": 601,
"sha256": "a1f160a9903b88259ba789587a9c2c6f3fc3408c80ec54c97b99fe269116bd40"
},
{
"path": "index/embeddings-all-MiniLM-L6-v2-3da0897f88acbd0d32a3.json",
"bytes": 1354409,
"sha256": "23051857081c61e9dfc184d868fdaecd0bc816360133eeb951cbb6593fdda9c9"
},
{
"path": "protocol.json",
"bytes": 1738,
"sha256": "a9b40108c154e5b492aad47443e9d290e7d509a6ee5d75e5b77e365fdda8d8f9"
},
{
"path": "summary.json",
"bytes": 3008,
"sha256": "94b993ff8fd5f96fc048c95575c44f6e04393e97dd3e910d7f679815d9cd1958"
},
{
"path": "treatment/apple_stock_news/receipt.json",
"bytes": 33672,
"sha256": "2ac858befb44d83cbe494ebf80b06c0dfb6da2f29d9c78c2c4e218e0b716c05b"
},
{
"path": "treatment/github_contributors_visualization/contributors.svg",
"bytes": 215,
"sha256": "01d4f904edcaefb2563db27c7a3879eed9ed538df1dbd85fc86ce184bd84466f"
},
{
"path": "treatment/github_contributors_visualization/receipt.json",
"bytes": 51082,
"sha256": "96d0bc297187151c87efa0a4da928af908debc971abfa970f06bdd9575cea1d3"
},
{
"path": "treatment/transformer_arxiv_download/papers/2607.27184v1.pdf",
"bytes": 1095498,
"sha256": "73f5c9a80cbfd807ed5bc14c963b7c9fd18a9de6eb30c8845b0505a79abd9536"
},
{
"path": "treatment/transformer_arxiv_download/papers/2607.27185v1.pdf",
"bytes": 797471,
"sha256": "4e4ff0947d28d37b7cfcfd743b50f1538945b6acfa598e74b084659436780754"
},
{
"path": "treatment/transformer_arxiv_download/papers/2607.27188v1.pdf",
"bytes": 1176383,
"sha256": "ecbe0ac9ae6768860d7f9f10a6986f86d4e98f9c73fd398e44894a8ac29b42e8"
},
{
"path": "treatment/transformer_arxiv_download/receipt.json",
"bytes": 141065,
"sha256": "b052456553112648946f63b75e3fdf9bdf25ef6fe446f48d3d297ff91ebb09b3"
}
]
}
@@ -0,0 +1,58 @@
{
"experiment": "4-5",
"title": "Active tool discovery with Qwen3-4B and the perception MCP server",
"authority": "book/chapter4.md:624",
"model": "qwen3:4b",
"model_runtime": "ollama",
"minimum_mcp_tools": 120,
"minimum_control_schema_tokens": 50000,
"control": {
"system_tools": "all complete schemas returned by perception MCP tools/list",
"required_behavior": "plan and execute using the full catalog"
},
"treatment": {
"system_tools": [
"web_search",
"code_interpreter",
"discover_tools"
],
"discovery_top_k": 5,
"schema_injection_role": "user",
"status_bar_updates": true
},
"tasks": [
{
"id": "apple_stock_news",
"prompt": "Query Apple's latest stock price and search related current news to explain the movement.",
"required_capabilities": [
"specialized_stock_quote",
"current_web_news"
]
},
{
"id": "transformer_arxiv_download",
"prompt": "Find the latest transformer papers on arXiv and download the top three PDFs.",
"required_capabilities": [
"arxiv_search",
"file_download"
],
"required_downloads": 3
},
{
"id": "github_contributors_visualization",
"prompt": "Analyze contributor statistics for openai/openai-python and generate a visualization report.",
"required_capabilities": [
"github_contributors",
"code_interpreter"
],
"required_visualizations": 1
}
],
"acceptance": {
"catalog_from_mcp": true,
"no_mock_tool_results": true,
"all_receipts_machine_readable": true,
"raw_schema_catalog_gzipped_and_hashed": true,
"compare_accuracy_and_completion_honestly": true
}
}
@@ -0,0 +1,81 @@
{
"experiment": "4-5",
"campaign_id": "qwen3_4b_exact_20260730T061700Z",
"generated_at": "2026-07-30T05:05:11.594208+00:00",
"model": "qwen3:4b",
"catalog": {
"transport": "mcp-stdio",
"server": "/Users/boj/book/ai-agent-book/chapter4/perception-tools/src/main.py",
"tools_list_received": true,
"server_name": "perception-tools",
"server_version": "1.26.0",
"tool_count": 126,
"unique_tool_count": 126,
"schema_tokens_o200k": 50120,
"schema_bytes": 206819,
"schema_sha256": "77b57f69c57243f3295e6b2c3cf493420fe1bdbdd816df7d6374a1640221d627",
"required_tools_present": {
"web_search": true,
"code_interpreter": true,
"yfinance_quote": true,
"search_news": true,
"arxiv_search": true,
"arxiv_download": true,
"github_list_contributors": true
},
"catalog_gzip_bytes": 21244,
"catalog_gzip_sha256": "822bdadf46573ca850447f1ead6b526c01f46f73d35c90000895f891584d24bd",
"catalog_gzip_content_sha256": "77b57f69c57243f3295e6b2c3cf493420fe1bdbdd816df7d6374a1640221d627"
},
"embedding": {
"model": "sentence-transformers/all-MiniLM-L6-v2",
"backend": "local-transformers-mean-pooling",
"device": "cpu",
"local_files_only": true,
"catalog_text_count": 126,
"texts_sha256": "3da0897f88acbd0d32a3a77578bd135a91d631a8b85775ff12232eb5aafe3b9d",
"cache_path": "/Users/boj/book/ai-agent-book/chapter4/active-tool-discovery/validation/experiment_4_5/qwen3_4b_exact_20260730T061700Z/index/embeddings-all-MiniLM-L6-v2-3da0897f88acbd0d32a3.json",
"cache_sha256": "23051857081c61e9dfc184d868fdaecd0bc816360133eeb951cbb6593fdda9c9",
"vector_count": 126,
"vector_dimensions": 384
},
"comparison": {
"control": {
"tasks": 3,
"mean_tool_selection_accuracy": 1.0,
"tasks_with_all_required_capabilities": 3,
"tasks_completed": 3,
"elapsed_seconds": 2382.981
},
"treatment": {
"tasks": 3,
"mean_tool_selection_accuracy": 0.6666666666666666,
"tasks_with_all_required_capabilities": 1,
"tasks_completed": 1,
"elapsed_seconds": 813.557
}
},
"dynamic_schema_injection_tokens": {
"apple_stock_news": 0,
"transformer_arxiv_download": 1852,
"github_contributors_visualization": 0
},
"acceptance": {
"status": "failed",
"gates": {
"exact_model_with_qwen_response_receipts": true,
"catalog_from_mcp_and_hash_matches": true,
"tool_count_at_least_120": true,
"control_over_50k_complete_schema_tokens": true,
"three_tasks_each_group": true,
"real_mcp_execution_only": false,
"all_tasks_completed_with_required_artifacts": false,
"treatment_discovery_history_and_status_verified": false,
"identical_tasks_model_runtime_and_catalog": true,
"local_embedding_index_receipted": true,
"dynamic_schema_injection_tokens_recorded": false,
"comparison_metrics_present_for_both_arms": true
}
},
"status": "failed"
}
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="900" height="500"><rect width="100%" height="100%" fill="white"/><text x="450" y="32" text-anchor="middle" font-size="22">openai/openai-python contributors</text></svg>

After

Width:  |  Height:  |  Size: 215 B

@@ -0,0 +1,24 @@
{
"transport": "mcp-stdio",
"server": "/Users/boj/book/ai-agent-book/chapter4/perception-tools/src/main.py",
"tools_list_received": true,
"server_name": "perception-tools",
"server_version": "1.26.0",
"tool_count": 126,
"unique_tool_count": 126,
"schema_tokens_o200k": 50120,
"schema_bytes": 206819,
"schema_sha256": "77b57f69c57243f3295e6b2c3cf493420fe1bdbdd816df7d6374a1640221d627",
"required_tools_present": {
"web_search": true,
"code_interpreter": true,
"yfinance_quote": true,
"search_news": true,
"arxiv_search": true,
"arxiv_download": true,
"github_list_contributors": true
},
"catalog_gzip_bytes": 21244,
"catalog_gzip_sha256": "dd911ebfaf881037289bcf3c64cfe48fb2b4639438800860d50b9ec79615b903",
"catalog_gzip_content_sha256": "77b57f69c57243f3295e6b2c3cf493420fe1bdbdd816df7d6374a1640221d627"
}
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="900" height="500"><rect width="100%" height="100%" fill="white"/><text x="450" y="32" text-anchor="middle" font-size="22">openai/openai-python contributors</text><rect x="70" y="70" width="68" height="350" fill="#4f46e5"/><text x="104.0" y="65" text-anchor="middle" font-size="11">700</text><text x="104.0" y="440" text-anchor="end" transform="rotate(-35 104.0 440)" font-size="10">stainless-app[bot]</text><rect x="146" y="282" width="68" height="138" fill="#4f46e5"/><text x="180.0" y="277" text-anchor="middle" font-size="11">276</text><text x="180.0" y="440" text-anchor="end" transform="rotate(-35 180.0 440)" font-size="10">stainless-bot</text><rect x="222" y="372" width="68" height="48" fill="#4f46e5"/><text x="256.0" y="367" text-anchor="middle" font-size="11">96</text><text x="256.0" y="440" text-anchor="end" transform="rotate(-35 256.0 440)" font-size="10">RobertCraigie</text><rect x="298" y="401" width="68" height="19" fill="#4f46e5"/><text x="332.0" y="396" text-anchor="middle" font-size="11">39</text><text x="332.0" y="440" text-anchor="end" transform="rotate(-35 332.0 440)" font-size="10">apcha-oai</text><rect x="374" y="406" width="68" height="14" fill="#4f46e5"/><text x="408.0" y="401" text-anchor="middle" font-size="11">29</text><text x="408.0" y="440" text-anchor="end" transform="rotate(-35 408.0 440)" font-size="10">hallacy</text><rect x="450" y="413" width="68" height="7" fill="#4f46e5"/><text x="484.0" y="408" text-anchor="middle" font-size="11">14</text><text x="484.0" y="440" text-anchor="end" transform="rotate(-35 484.0 440)" font-size="10">rachellim</text><rect x="526" y="414" width="68" height="6" fill="#4f46e5"/><text x="560.0" y="409" text-anchor="middle" font-size="11">13</text><text x="560.0" y="440" text-anchor="end" transform="rotate(-35 560.0 440)" font-size="10">logankilpatrick</text><rect x="602" y="416" width="68" height="4" fill="#4f46e5"/><text x="636.0" y="411" text-anchor="middle" font-size="11">9</text><text x="636.0" y="440" text-anchor="end" transform="rotate(-35 636.0 440)" font-size="10">dtmeadows</text><rect x="678" y="416" width="68" height="4" fill="#4f46e5"/><text x="712.0" y="411" text-anchor="middle" font-size="11">9</text><text x="712.0" y="440" text-anchor="end" transform="rotate(-35 712.0 440)" font-size="10">kristapratico</text><rect x="754" y="417" width="68" height="3" fill="#4f46e5"/><text x="788.0" y="412" text-anchor="middle" font-size="11">7</text><text x="788.0" y="440" text-anchor="end" transform="rotate(-35 788.0 440)" font-size="10">ddeville</text></svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

@@ -0,0 +1,12 @@
{
"model": "sentence-transformers/all-MiniLM-L6-v2",
"backend": "local-transformers-mean-pooling",
"device": "cpu",
"local_files_only": true,
"catalog_text_count": 126,
"texts_sha256": "3da0897f88acbd0d32a3a77578bd135a91d631a8b85775ff12232eb5aafe3b9d",
"cache_path": "/Users/boj/book/ai-agent-book/chapter4/active-tool-discovery/validation/experiment_4_5/qwen3_4b_exact_v2_20260730T130600Z/index/embeddings-all-MiniLM-L6-v2-3da0897f88acbd0d32a3.json",
"cache_sha256": "23051857081c61e9dfc184d868fdaecd0bc816360133eeb951cbb6593fdda9c9",
"vector_count": 126,
"vector_dimensions": 384
}
@@ -0,0 +1,10 @@
{
"generated_at": "2026-07-30T06:17:57.036863+00:00",
"files": [
{
"path": "summary.failed.json",
"bytes": 3017,
"sha256": "cc817f77c7c268ced5dd5a19fc28afe2b8ca5f9466c339a9a29600812ba84c07"
}
]
}
@@ -0,0 +1,81 @@
{
"experiment": "4-5",
"campaign_id": "qwen3_4b_exact_v2_20260730T130600Z",
"generated_at": "2026-07-30T06:17:56.800966+00:00",
"model": "qwen3:4b",
"catalog": {
"transport": "mcp-stdio",
"server": "/Users/boj/book/ai-agent-book/chapter4/perception-tools/src/main.py",
"tools_list_received": true,
"server_name": "perception-tools",
"server_version": "1.26.0",
"tool_count": 126,
"unique_tool_count": 126,
"schema_tokens_o200k": 50120,
"schema_bytes": 206819,
"schema_sha256": "77b57f69c57243f3295e6b2c3cf493420fe1bdbdd816df7d6374a1640221d627",
"required_tools_present": {
"web_search": true,
"code_interpreter": true,
"yfinance_quote": true,
"search_news": true,
"arxiv_search": true,
"arxiv_download": true,
"github_list_contributors": true
},
"catalog_gzip_bytes": 21244,
"catalog_gzip_sha256": "dd911ebfaf881037289bcf3c64cfe48fb2b4639438800860d50b9ec79615b903",
"catalog_gzip_content_sha256": "77b57f69c57243f3295e6b2c3cf493420fe1bdbdd816df7d6374a1640221d627"
},
"embedding": {
"model": "sentence-transformers/all-MiniLM-L6-v2",
"backend": "local-transformers-mean-pooling",
"device": "cpu",
"local_files_only": true,
"catalog_text_count": 126,
"texts_sha256": "3da0897f88acbd0d32a3a77578bd135a91d631a8b85775ff12232eb5aafe3b9d",
"cache_path": "/Users/boj/book/ai-agent-book/chapter4/active-tool-discovery/validation/experiment_4_5/qwen3_4b_exact_v2_20260730T130600Z/index/embeddings-all-MiniLM-L6-v2-3da0897f88acbd0d32a3.json",
"cache_sha256": "23051857081c61e9dfc184d868fdaecd0bc816360133eeb951cbb6593fdda9c9",
"vector_count": 126,
"vector_dimensions": 384
},
"comparison": {
"control": {
"tasks": 3,
"mean_tool_selection_accuracy": 1.0,
"tasks_with_all_required_capabilities": 3,
"tasks_completed": 3,
"elapsed_seconds": 2590.82
},
"treatment": {
"tasks": 3,
"mean_tool_selection_accuracy": 0.8333333333333334,
"tasks_with_all_required_capabilities": 2,
"tasks_completed": 2,
"elapsed_seconds": 1513.24
}
},
"dynamic_schema_injection_tokens": {
"apple_stock_news": 6201,
"transformer_arxiv_download": 4005,
"github_contributors_visualization": 2632
},
"acceptance": {
"status": "failed",
"gates": {
"exact_model_with_qwen_response_receipts": true,
"catalog_from_mcp_and_hash_matches": true,
"tool_count_at_least_120": true,
"control_over_50k_complete_schema_tokens": true,
"three_tasks_each_group": true,
"real_mcp_execution_only": false,
"all_tasks_completed_with_required_artifacts": false,
"treatment_discovery_history_and_status_verified": true,
"identical_tasks_model_runtime_and_catalog": true,
"local_embedding_index_receipted": true,
"dynamic_schema_injection_tokens_recorded": true,
"comparison_metrics_present_for_both_arms": true
}
},
"status": "failed"
}
@@ -0,0 +1,125 @@
{
"generated_at": "2026-07-30T06:23:19.609663+00:00",
"files": [
{
"path": "catalog.schemas.json.gz",
"bytes": 21244,
"sha256": "dd911ebfaf881037289bcf3c64cfe48fb2b4639438800860d50b9ec79615b903"
},
{
"path": "catalog_receipt.json",
"bytes": 864,
"sha256": "caa34a27d7483e4aec5de0be0af7124dab2cd3b546de1566709febc4c16f962c"
},
{
"path": "control/apple_stock_news/receipt.json",
"bytes": 71818,
"sha256": "79cd1fb10cefdb57e153353e79213fb8d72dbc84a877c53d042a7f0d50c94977"
},
{
"path": "control/github_contributors_visualization/contributors.svg",
"bytes": 2602,
"sha256": "d14524e843fa88f3ad322848fc7fa8cad7d5153c79f7d74c7be5e24ba3880b0a"
},
{
"path": "control/github_contributors_visualization/receipt.json",
"bytes": 124341,
"sha256": "9eac4f261867cdfdfebbcee18c846f3b496e30e21550e49cd8685ceb144c2391"
},
{
"path": "control/transformer_arxiv_download/papers/2607.27184v1.pdf",
"bytes": 1095498,
"sha256": "73f5c9a80cbfd807ed5bc14c963b7c9fd18a9de6eb30c8845b0505a79abd9536"
},
{
"path": "control/transformer_arxiv_download/papers/2607.27185v1.pdf",
"bytes": 797471,
"sha256": "4e4ff0947d28d37b7cfcfd743b50f1538945b6acfa598e74b084659436780754"
},
{
"path": "control/transformer_arxiv_download/papers/2607.27188v1.pdf",
"bytes": 1176383,
"sha256": "ecbe0ac9ae6768860d7f9f10a6986f86d4e98f9c73fd398e44894a8ac29b42e8"
},
{
"path": "control/transformer_arxiv_download/receipt.json",
"bytes": 67884,
"sha256": "22dc028746590c1086f8649c8f918543c2c3ff59f381c7374929eb0af64e3cbc"
},
{
"path": "embedding_receipt.json",
"bytes": 604,
"sha256": "88157c12bfd7df963bbc6ce411375930f744060a255b8cf39dacb80132a051e1"
},
{
"path": "failed_campaign_attempts/attempt-1/manifest.failed.json",
"bytes": 228,
"sha256": "eea533322acb44f6eb7bd97ad671ffc3ad1f9fd6a3dceaa634f363060ec1c980"
},
{
"path": "failed_campaign_attempts/attempt-1/summary.failed.json",
"bytes": 3017,
"sha256": "cc817f77c7c268ced5dd5a19fc28afe2b8ca5f9466c339a9a29600812ba84c07"
},
{
"path": "index/embeddings-all-MiniLM-L6-v2-3da0897f88acbd0d32a3.json",
"bytes": 1354409,
"sha256": "23051857081c61e9dfc184d868fdaecd0bc816360133eeb951cbb6593fdda9c9"
},
{
"path": "protocol.json",
"bytes": 1927,
"sha256": "4b63335edec11b5ef501972dfaf38aad49d35c6e67aaa625770ba3279c701f42"
},
{
"path": "summary.json",
"bytes": 3000,
"sha256": "c493ab24ca11bd2ef3bb425f46b778cee7bfb1a1c5e07beac03547a2dcdc7924"
},
{
"path": "treatment/apple_stock_news/contributors.svg",
"bytes": 215,
"sha256": "01d4f904edcaefb2563db27c7a3879eed9ed538df1dbd85fc86ce184bd84466f"
},
{
"path": "treatment/apple_stock_news/receipt.json",
"bytes": 87893,
"sha256": "8533019d4b7e2f5707f98e5444639205784b04c7528ecd68cbf35c086568e612"
},
{
"path": "treatment/github_contributors_visualization/contributors.svg",
"bytes": 2602,
"sha256": "d14524e843fa88f3ad322848fc7fa8cad7d5153c79f7d74c7be5e24ba3880b0a"
},
{
"path": "treatment/github_contributors_visualization/receipt.json",
"bytes": 51397,
"sha256": "b95c3d568bceec2de7c91638e9f74f87ea1e83b2a20e6ca26efba8ac6b027883"
},
{
"path": "treatment/transformer_arxiv_download/failed_attempts/attempt-1/receipt.json",
"bytes": 155879,
"sha256": "e65227aa379495c7a4208d2df8bc9d45da5e88257aec6854bbee41886fa32595"
},
{
"path": "treatment/transformer_arxiv_download/papers/2607.27184v1.pdf",
"bytes": 1095498,
"sha256": "73f5c9a80cbfd807ed5bc14c963b7c9fd18a9de6eb30c8845b0505a79abd9536"
},
{
"path": "treatment/transformer_arxiv_download/papers/2607.27185v1.pdf",
"bytes": 797471,
"sha256": "4e4ff0947d28d37b7cfcfd743b50f1538945b6acfa598e74b084659436780754"
},
{
"path": "treatment/transformer_arxiv_download/papers/2607.27188v1.pdf",
"bytes": 1176383,
"sha256": "ecbe0ac9ae6768860d7f9f10a6986f86d4e98f9c73fd398e44894a8ac29b42e8"
},
{
"path": "treatment/transformer_arxiv_download/receipt.json",
"bytes": 66186,
"sha256": "6800b522dc05040ae46c864e05a673df4d17872051a041c46b18a821aba83ced"
}
]
}
@@ -0,0 +1,59 @@
{
"experiment": "4-5",
"title": "Active tool discovery with Qwen3-4B and the perception MCP server",
"authority": "book/chapter4.md:624",
"model": "qwen3:4b",
"model_runtime": "ollama",
"minimum_mcp_tools": 120,
"minimum_control_schema_tokens": 50000,
"control": {
"system_tools": "all complete schemas returned by perception MCP tools/list",
"required_behavior": "plan and execute using the full catalog"
},
"treatment": {
"system_tools": [
"web_search",
"code_interpreter",
"discover_tools"
],
"discovery_top_k": 5,
"schema_injection_role": "user",
"status_bar_updates": true,
"base_tool_boundary": "Generic web search and local code cannot substitute for authoritative domain-specific retrieval; discover each missing specialist at the moment the gap arises."
},
"tasks": [
{
"id": "apple_stock_news",
"prompt": "Query Apple's latest stock price and search related current news to explain the movement.",
"required_capabilities": [
"specialized_stock_quote",
"current_web_news"
]
},
{
"id": "transformer_arxiv_download",
"prompt": "Find the latest transformer papers on arXiv and download the top three PDFs.",
"required_capabilities": [
"arxiv_search",
"file_download"
],
"required_downloads": 3
},
{
"id": "github_contributors_visualization",
"prompt": "Analyze contributor statistics for openai/openai-python and generate a visualization report.",
"required_capabilities": [
"github_contributors",
"code_interpreter"
],
"required_visualizations": 1
}
],
"acceptance": {
"catalog_from_mcp": true,
"no_mock_tool_results": true,
"all_receipts_machine_readable": true,
"raw_schema_catalog_gzipped_and_hashed": true,
"compare_accuracy_and_completion_honestly": true
}
}
@@ -0,0 +1,81 @@
{
"experiment": "4-5",
"campaign_id": "qwen3_4b_exact_v2_20260730T130600Z",
"generated_at": "2026-07-30T06:23:19.390598+00:00",
"model": "qwen3:4b",
"catalog": {
"transport": "mcp-stdio",
"server": "/Users/boj/book/ai-agent-book/chapter4/perception-tools/src/main.py",
"tools_list_received": true,
"server_name": "perception-tools",
"server_version": "1.26.0",
"tool_count": 126,
"unique_tool_count": 126,
"schema_tokens_o200k": 50120,
"schema_bytes": 206819,
"schema_sha256": "77b57f69c57243f3295e6b2c3cf493420fe1bdbdd816df7d6374a1640221d627",
"required_tools_present": {
"web_search": true,
"code_interpreter": true,
"yfinance_quote": true,
"search_news": true,
"arxiv_search": true,
"arxiv_download": true,
"github_list_contributors": true
},
"catalog_gzip_bytes": 21244,
"catalog_gzip_sha256": "dd911ebfaf881037289bcf3c64cfe48fb2b4639438800860d50b9ec79615b903",
"catalog_gzip_content_sha256": "77b57f69c57243f3295e6b2c3cf493420fe1bdbdd816df7d6374a1640221d627"
},
"embedding": {
"model": "sentence-transformers/all-MiniLM-L6-v2",
"backend": "local-transformers-mean-pooling",
"device": "cpu",
"local_files_only": true,
"catalog_text_count": 126,
"texts_sha256": "3da0897f88acbd0d32a3a77578bd135a91d631a8b85775ff12232eb5aafe3b9d",
"cache_path": "/Users/boj/book/ai-agent-book/chapter4/active-tool-discovery/validation/experiment_4_5/qwen3_4b_exact_v2_20260730T130600Z/index/embeddings-all-MiniLM-L6-v2-3da0897f88acbd0d32a3.json",
"cache_sha256": "23051857081c61e9dfc184d868fdaecd0bc816360133eeb951cbb6593fdda9c9",
"vector_count": 126,
"vector_dimensions": 384
},
"comparison": {
"control": {
"tasks": 3,
"mean_tool_selection_accuracy": 1.0,
"tasks_with_all_required_capabilities": 3,
"tasks_completed": 3,
"elapsed_seconds": 2590.82
},
"treatment": {
"tasks": 3,
"mean_tool_selection_accuracy": 1.0,
"tasks_with_all_required_capabilities": 3,
"tasks_completed": 3,
"elapsed_seconds": 808.926
}
},
"dynamic_schema_injection_tokens": {
"apple_stock_news": 6201,
"transformer_arxiv_download": 4005,
"github_contributors_visualization": 2632
},
"acceptance": {
"status": "passed",
"gates": {
"exact_model_with_qwen_response_receipts": true,
"catalog_from_mcp_and_hash_matches": true,
"tool_count_at_least_120": true,
"control_over_50k_complete_schema_tokens": true,
"three_tasks_each_group": true,
"real_mcp_execution_only": true,
"all_tasks_completed_with_required_artifacts": true,
"treatment_discovery_history_and_status_verified": true,
"identical_tasks_model_runtime_and_catalog": true,
"local_embedding_index_receipted": true,
"dynamic_schema_injection_tokens_recorded": true,
"comparison_metrics_present_for_both_arms": true
}
},
"status": "passed"
}
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="900" height="500"><rect width="100%" height="100%" fill="white"/><text x="450" y="32" text-anchor="middle" font-size="22">openai/openai-python contributors</text></svg>

After

Width:  |  Height:  |  Size: 215 B

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="900" height="500"><rect width="100%" height="100%" fill="white"/><text x="450" y="32" text-anchor="middle" font-size="22">openai/openai-python contributors</text><rect x="70" y="70" width="68" height="350" fill="#4f46e5"/><text x="104.0" y="65" text-anchor="middle" font-size="11">700</text><text x="104.0" y="440" text-anchor="end" transform="rotate(-35 104.0 440)" font-size="10">stainless-app[bot]</text><rect x="146" y="282" width="68" height="138" fill="#4f46e5"/><text x="180.0" y="277" text-anchor="middle" font-size="11">276</text><text x="180.0" y="440" text-anchor="end" transform="rotate(-35 180.0 440)" font-size="10">stainless-bot</text><rect x="222" y="372" width="68" height="48" fill="#4f46e5"/><text x="256.0" y="367" text-anchor="middle" font-size="11">96</text><text x="256.0" y="440" text-anchor="end" transform="rotate(-35 256.0 440)" font-size="10">RobertCraigie</text><rect x="298" y="401" width="68" height="19" fill="#4f46e5"/><text x="332.0" y="396" text-anchor="middle" font-size="11">39</text><text x="332.0" y="440" text-anchor="end" transform="rotate(-35 332.0 440)" font-size="10">apcha-oai</text><rect x="374" y="406" width="68" height="14" fill="#4f46e5"/><text x="408.0" y="401" text-anchor="middle" font-size="11">29</text><text x="408.0" y="440" text-anchor="end" transform="rotate(-35 408.0 440)" font-size="10">hallacy</text><rect x="450" y="413" width="68" height="7" fill="#4f46e5"/><text x="484.0" y="408" text-anchor="middle" font-size="11">14</text><text x="484.0" y="440" text-anchor="end" transform="rotate(-35 484.0 440)" font-size="10">rachellim</text><rect x="526" y="414" width="68" height="6" fill="#4f46e5"/><text x="560.0" y="409" text-anchor="middle" font-size="11">13</text><text x="560.0" y="440" text-anchor="end" transform="rotate(-35 560.0 440)" font-size="10">logankilpatrick</text><rect x="602" y="416" width="68" height="4" fill="#4f46e5"/><text x="636.0" y="411" text-anchor="middle" font-size="11">9</text><text x="636.0" y="440" text-anchor="end" transform="rotate(-35 636.0 440)" font-size="10">dtmeadows</text><rect x="678" y="416" width="68" height="4" fill="#4f46e5"/><text x="712.0" y="411" text-anchor="middle" font-size="11">9</text><text x="712.0" y="440" text-anchor="end" transform="rotate(-35 712.0 440)" font-size="10">kristapratico</text><rect x="754" y="417" width="68" height="3" fill="#4f46e5"/><text x="788.0" y="412" text-anchor="middle" font-size="11">7</text><text x="788.0" y="440" text-anchor="end" transform="rotate(-35 788.0 440)" font-size="10">ddeville</text></svg>

After

Width:  |  Height:  |  Size: 2.5 KiB