docs: update ADK demo example; add framework documentation#1040
Conversation
WalkthroughAdds a new "Frameworks Overview" API reference page and updates the ADK demo: removes MCP-specific config and documentation, converts workflow prompts to multiline YAML, updates project keywords, and replaces an MCP-based tool import with a direct time tool import. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
participant User
participant Workflow
participant MCP_Tool as MCP_Tool
participant Std_Tool as Std_Tool
rect rgba(200,230,255,0.4)
Note over User,Workflow: Old flow (MCP-based)
User->>Workflow: invoke workflow
Workflow->>MCP_Tool: call get_city_time_tool via MCP transport
MCP_Tool->>MCP_Tool: forward to MCP server
MCP_Tool-->>Workflow: return result
end
rect rgba(200,255,200,0.4)
Note over User,Workflow: New flow (direct tool)
User->>Workflow: invoke workflow
Workflow->>Std_Tool: call get_city_time_tool directly
Std_Tool-->>Workflow: return result
Workflow-->>User: deliver final response
end
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Pre-merge checks and finishing touches✅ Passed checks (3 passed)
✨ Finishing touches🧪 Generate unit tests (beta)
📜 Recent review detailsConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro 📒 Files selected for processing (1)
🧰 Additional context used📓 Path-based instructions (3)docs/source/**/*.md📄 CodeRabbit inference engine (.cursor/rules/general.mdc)
Files:
**/*⚙️ CodeRabbit configuration file
Files:
docs/source/**/*⚙️ CodeRabbit configuration file
Files:
🧠 Learnings (1)📚 Learning: 2025-09-23T18:39:15.023ZApplied to files:
🪛 LanguageTooldocs/source/reference/frameworks-overview.md[grammar] ~47-~47: Use a hyphen to join words. (QB_NEW_EN_HYPHEN) ⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
🔇 Additional comments (4)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Signed-off-by: Will Killian <wkillian@nvidia.com>
5c1bf9e to
2c92765
Compare
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
docs/source/reference/frameworks-overview.md (1)
47-47: Consider hyphenating the compound adjective.When "tool calling" is used as a compound adjective modifying "mechanisms," it should be hyphenated as "tool-calling mechanisms" for grammatical correctness.
-The ability to use framework-specific tool calling mechanisms, allowing agents to invoke functions and tools during execution. +The ability to use framework-specific tool-calling mechanisms, allowing agents to invoke functions and tools during execution.
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (7)
docs/source/index.md(1 hunks)docs/source/reference/frameworks-overview.md(1 hunks)examples/frameworks/adk_demo/README.md(2 hunks)examples/frameworks/adk_demo/configs/config.yml(1 hunks)examples/frameworks/adk_demo/configs/eval_config.yml(1 hunks)examples/frameworks/adk_demo/pyproject.toml(1 hunks)examples/frameworks/adk_demo/src/nat_adk_demo/register.py(1 hunks)
🧰 Additional context used
📓 Path-based instructions (9)
docs/source/**/*.md
📄 CodeRabbit inference engine (.cursor/rules/general.mdc)
docs/source/**/*.md: Use the official naming throughout documentation: first use “NVIDIA NeMo Agent toolkit”, subsequent “NeMo Agent toolkit”; never use deprecated names (Agent Intelligence toolkit, aiqtoolkit, AgentIQ, AIQ/aiq)
Documentation sources are Markdown files under docs/source; images belong in docs/source/_static
Keep docs in sync with code; documentation pipeline must pass Sphinx and link checks; avoid TODOs/FIXMEs/placeholders; avoid offensive/outdated terms; ensure spelling correctness
Do not use words listed in ci/vale/styles/config/vocabularies/nat/reject.txt; accepted terms in accept.txt are allowed
Files:
docs/source/reference/frameworks-overview.mddocs/source/index.md
**/*
⚙️ CodeRabbit configuration file
**/*: # Code Review Instructions
- Ensure the code follows best practices and coding standards. - For Python code, follow
PEP 20 and
PEP 8 for style guidelines.- Check for security vulnerabilities and potential issues. - Python methods should use type hints for all parameters and return values.
Example:def my_function(param1: int, param2: str) -> bool: pass- For Python exception handling, ensure proper stack trace preservation:
- When re-raising exceptions: use bare
raisestatements to maintain the original stack trace,
and uselogger.error()(notlogger.exception()) to avoid duplicate stack trace output.- When catching and logging exceptions without re-raising: always use
logger.exception()
to capture the full stack trace information.Documentation Review Instructions - Verify that documentation and comments are clear and comprehensive. - Verify that the documentation doesn't contain any TODOs, FIXMEs or placeholder text like "lorem ipsum". - Verify that the documentation doesn't contain any offensive or outdated terms. - Verify that documentation and comments are free of spelling mistakes, ensure the documentation doesn't contain any
words listed in the
ci/vale/styles/config/vocabularies/nat/reject.txtfile, words that might appear to be
spelling mistakes but are listed in theci/vale/styles/config/vocabularies/nat/accept.txtfile are OK.Misc. - All code (except .mdc files that contain Cursor rules) should be licensed under the Apache License 2.0,
and should contain an Apache License 2.0 header comment at the top of each file.
- Confirm that copyright years are up-to date whenever a file is changed.
Files:
docs/source/reference/frameworks-overview.mdexamples/frameworks/adk_demo/configs/config.ymlexamples/frameworks/adk_demo/README.mdexamples/frameworks/adk_demo/configs/eval_config.ymlexamples/frameworks/adk_demo/src/nat_adk_demo/register.pydocs/source/index.mdexamples/frameworks/adk_demo/pyproject.toml
docs/source/**/*
⚙️ CodeRabbit configuration file
This directory contains the source code for the documentation. All documentation should be written in Markdown format. Any image files should be placed in the
docs/source/_staticdirectory.
Files:
docs/source/reference/frameworks-overview.mddocs/source/index.md
**/*.{yaml,yml}
📄 CodeRabbit inference engine (.cursor/rules/nat-test-llm.mdc)
In workflow/config YAML, set llms.._type: nat_test_llm to stub responses.
Files:
examples/frameworks/adk_demo/configs/config.ymlexamples/frameworks/adk_demo/configs/eval_config.yml
**/*.{py,yaml,yml}
📄 CodeRabbit inference engine (.cursor/rules/nat-test-llm.mdc)
**/*.{py,yaml,yml}: Configure response_seq as a list of strings; values cycle per call, and [] yields an empty string.
Configure delay_ms to inject per-call artificial latency in milliseconds for nat_test_llm.
Files:
examples/frameworks/adk_demo/configs/config.ymlexamples/frameworks/adk_demo/configs/eval_config.ymlexamples/frameworks/adk_demo/src/nat_adk_demo/register.py
**/configs/**
📄 CodeRabbit inference engine (.cursor/rules/general.mdc)
Configuration files consumed by code must be stored next to that code in a configs/ folder
Files:
examples/frameworks/adk_demo/configs/config.ymlexamples/frameworks/adk_demo/configs/eval_config.yml
examples/**/*
⚙️ CodeRabbit configuration file
examples/**/*: - This directory contains example code and usage scenarios for the toolkit, at a minimum an example should
contain a README.md or file README.ipynb.
- If an example contains Python code, it should be placed in a subdirectory named
src/and should
contain apyproject.tomlfile. Optionally, it might also contain scripts in ascripts/directory.- If an example contains YAML files, they should be placed in a subdirectory named
configs/. - If an example contains sample data files, they should be placed in a subdirectory nameddata/, and should
be checked into git-lfs.
Files:
examples/frameworks/adk_demo/configs/config.ymlexamples/frameworks/adk_demo/README.mdexamples/frameworks/adk_demo/configs/eval_config.ymlexamples/frameworks/adk_demo/src/nat_adk_demo/register.pyexamples/frameworks/adk_demo/pyproject.toml
**/README.@(md|ipynb)
📄 CodeRabbit inference engine (.cursor/rules/general.mdc)
Ensure READMEs follow the naming convention; avoid deprecated names; use “NeMo Agent Toolkit” (capital T) in headings
Files:
examples/frameworks/adk_demo/README.md
**/*.py
📄 CodeRabbit inference engine (.cursor/rules/nat-test-llm.mdc)
**/*.py: Programmatic use: create TestLLMConfig(response_seq=[...], delay_ms=...), add with builder.add_llm("", cfg).
When retrieving the test LLM wrapper, use builder.get_llm(name, wrapper_type=LLMFrameworkEnum.) and call the framework’s method (e.g., ainvoke, achat, call).
**/*.py: In code comments/identifiers use NAT abbreviations as specified: nat for API namespace/CLI, nvidia-nat for package name, NAT for env var prefixes; do not use these abbreviations in documentation
Follow PEP 20 and PEP 8; run yapf with column_limit=120; use 4-space indentation; end files with a single trailing newline
Run ruff check --fix as linter (not formatter) using pyproject.toml config; fix warnings unless explicitly ignored
Respect naming: snake_case for functions/variables, PascalCase for classes, UPPER_CASE for constants
Treat pyright warnings as errors during development
Exception handling: use bare raise to re-raise; log with logger.error() when re-raising to avoid duplicate stack traces; use logger.exception() when catching without re-raising
Provide Google-style docstrings for every public module, class, function, and CLI command; first line concise and ending with a period; surround code entities with backticks
Validate and sanitize all user input, especially in web or CLI interfaces
Prefer httpx with SSL verification enabled by default and follow OWASP Top-10 recommendations
Use async/await for I/O-bound work; profile CPU-heavy paths with cProfile or mprof before optimizing; cache expensive computations with functools.lru_cache or external cache; leverage NumPy vectorized operations when beneficial
Files:
examples/frameworks/adk_demo/src/nat_adk_demo/register.py
🧠 Learnings (1)
📚 Learning: 2025-09-23T18:39:15.023Z
Learnt from: CR
PR: NVIDIA/NeMo-Agent-Toolkit#0
File: .cursor/rules/general.mdc:0-0
Timestamp: 2025-09-23T18:39:15.023Z
Learning: Applies to docs/source/**/*.md : Use the official naming throughout documentation: first use “NVIDIA NeMo Agent toolkit”, subsequent “NeMo Agent toolkit”; never use deprecated names (Agent Intelligence toolkit, aiqtoolkit, AgentIQ, AIQ/aiq)
Applied to files:
docs/source/reference/frameworks-overview.md
🪛 LanguageTool
docs/source/reference/frameworks-overview.md
[grammar] ~47-~47: Use a hyphen to join words.
Context: ...e ability to use framework-specific tool calling mechanisms, allowing agents to i...
(QB_NEW_EN_HYPHEN)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: CI Pipeline / Check
🔇 Additional comments (11)
examples/frameworks/adk_demo/README.md (2)
20-20: LGTM! Description accurately reflects the updated demo.The change from MCP-specific language to "multiple tools" correctly reflects the migration from MCP tools to standard NAT tools.
47-47: Minor improvement to documentation flow.The change from "Then run" to "Run" improves readability by removing unnecessary sequencing.
examples/frameworks/adk_demo/pyproject.toml (1)
22-22: LGTM! Keywords updated to reflect ADK focus.The change from "mcp" to "adk" in keywords accurately reflects the demo's updated focus on ADK rather than MCP integration.
examples/frameworks/adk_demo/configs/config.yml (2)
31-32: LGTM! MCP-specific configuration removed.The removal of
transport,mcp_tool_name, andurlfields is consistent with the migration from MCP tools to standard NAT tools. The configuration now correctly uses_type: nat_adk_demo/get_city_time_toolwithout MCP-specific parameters.
45-47: Improved prompt formatting.The multi-line block scalar format improves readability without changing the prompt's semantic content.
examples/frameworks/adk_demo/configs/eval_config.yml (2)
21-22: LGTM! Eval configuration consistent with main config.The removal of MCP-specific fields from the eval configuration maintains consistency with the main configuration file.
35-37: Improved prompt formatting in eval config.The multi-line format matches the main config and improves readability.
docs/source/index.md (1)
132-132: LGTM! Appropriate placement for framework documentation.The addition of the Frameworks Overview to the Reference section's toctree is well-placed and consistent with the documentation structure.
docs/source/reference/frameworks-overview.md (2)
20-20: LGTM! Proper naming convention used.The documentation correctly uses "NVIDIA NeMo Agent toolkit" on first reference, following the established naming guidelines.
Based on learnings
149-149: URLs verified and accessible.Both external framework URLs are confirmed working:
- https://agno.com/ → HTTP 200
- https://google.github.io/adk-docs/ → HTTP 200
examples/frameworks/adk_demo/src/nat_adk_demo/register.py (1)
20-20: Verify that the nat_time_tool module exists.The module exists at
./examples/frameworks/adk_demo/src/nat_adk_demo/nat_time_tool.pyand exports the expected interface: aTimeMCPToolConfigclass and aget_city_timeasync function properly decorated with@register_functionfor the ADK framework. The import in register.py is correctly used for registration side effects via the decorator pattern.
Signed-off-by: Will Killian <wkillian@nvidia.com>
There was a problem hiding this comment.
Actionable comments posted: 0
🧹 Nitpick comments (1)
docs/source/reference/frameworks-overview.md (1)
46-50: Standardize terminology: "tool calling" vs "function calling".The document uses "tool calling" as the standard term across frameworks (lines 46-50, 73, 92, 111, 131, 151) but switches to "function calling" for Semantic Kernel (line 175). For consistency and clarity, align the Semantic Kernel section with the established terminology or use a footnote explaining the framework-specific nomenclature.
Additionally, the static analysis tool suggests hyphenating compound adjectives: consider using "tool-calling" consistently if treating this as a compound modifier.
Apply this diff to standardize terminology:
| **Tool Calling** | Fully supported through Semantic Kernel's function calling | +| **Tool Calling** | Fully supported through Semantic Kernel's tool calling interface |Also applies to: 175-175
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
docs/source/reference/frameworks-overview.md(1 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
docs/source/**/*.md
📄 CodeRabbit inference engine (.cursor/rules/general.mdc)
docs/source/**/*.md: Use the official naming throughout documentation: first use “NVIDIA NeMo Agent toolkit”, subsequent “NeMo Agent toolkit”; never use deprecated names (Agent Intelligence toolkit, aiqtoolkit, AgentIQ, AIQ/aiq)
Documentation sources are Markdown files under docs/source; images belong in docs/source/_static
Keep docs in sync with code; documentation pipeline must pass Sphinx and link checks; avoid TODOs/FIXMEs/placeholders; avoid offensive/outdated terms; ensure spelling correctness
Do not use words listed in ci/vale/styles/config/vocabularies/nat/reject.txt; accepted terms in accept.txt are allowed
Files:
docs/source/reference/frameworks-overview.md
**/*
⚙️ CodeRabbit configuration file
**/*: # Code Review Instructions
- Ensure the code follows best practices and coding standards. - For Python code, follow
PEP 20 and
PEP 8 for style guidelines.- Check for security vulnerabilities and potential issues. - Python methods should use type hints for all parameters and return values.
Example:def my_function(param1: int, param2: str) -> bool: pass- For Python exception handling, ensure proper stack trace preservation:
- When re-raising exceptions: use bare
raisestatements to maintain the original stack trace,
and uselogger.error()(notlogger.exception()) to avoid duplicate stack trace output.- When catching and logging exceptions without re-raising: always use
logger.exception()
to capture the full stack trace information.Documentation Review Instructions - Verify that documentation and comments are clear and comprehensive. - Verify that the documentation doesn't contain any TODOs, FIXMEs or placeholder text like "lorem ipsum". - Verify that the documentation doesn't contain any offensive or outdated terms. - Verify that documentation and comments are free of spelling mistakes, ensure the documentation doesn't contain any
words listed in the
ci/vale/styles/config/vocabularies/nat/reject.txtfile, words that might appear to be
spelling mistakes but are listed in theci/vale/styles/config/vocabularies/nat/accept.txtfile are OK.Misc. - All code (except .mdc files that contain Cursor rules) should be licensed under the Apache License 2.0,
and should contain an Apache License 2.0 header comment at the top of each file.
- Confirm that copyright years are up-to date whenever a file is changed.
Files:
docs/source/reference/frameworks-overview.md
docs/source/**/*
⚙️ CodeRabbit configuration file
This directory contains the source code for the documentation. All documentation should be written in Markdown format. Any image files should be placed in the
docs/source/_staticdirectory.
Files:
docs/source/reference/frameworks-overview.md
🪛 LanguageTool
docs/source/reference/frameworks-overview.md
[grammar] ~47-~47: Use a hyphen to join words.
Context: ...e ability to use framework-specific tool calling mechanisms, allowing agents to i...
(QB_NEW_EN_HYPHEN)
🔇 Additional comments (2)
docs/source/reference/frameworks-overview.md (2)
62-62: Past critical issue has been resolved.The previous review flagged an inconsistency between the LlamaIndex capability matrix (line 62) and detailed section (line 155) regarding retriever provider support. The current version now shows consistent information: both the matrix (❌ No) and detailed section (None) correctly indicate no retriever provider support. This resolves the earlier concern.
Also applies to: 155-155
1-181: Comprehensive framework documentation with solid structure.The new frameworks-overview document is well-organized and provides clear capability matrices with framework-specific details. The documentation follows naming conventions ("NVIDIA NeMo Agent toolkit" on first use, then shortened), includes all required framework sections with installation instructions, and avoids placeholder text or TODOs. License header and copyright year (2025) are correct. This is solid documentation that addresses the VDR feedback as intended.
Signed-off-by: Will Killian <wkillian@nvidia.com>
|
/merge |
The ADK example didn't actually use MCP, so update the example. Add framework documentation page to address VDR feedback. Closes ## By Submitting this PR I confirm: - I am familiar with the [Contributing Guidelines](https://github.com/NVIDIA/NeMo-Agent-Toolkit/blob/develop/docs/source/resources/contributing.md). - We require that all contributors "sign-off" on their commits. This certifies that the contribution is your original work, or you have rights to submit it under the same license, or a compatible license. - Any contribution which contains commits that are not Signed-Off will not be accepted. - When the PR is ready for review, new or existing tests cover these changes. - When the PR is ready for review, the documentation is up to date with these changes. ## Summary by CodeRabbit * **Documentation** * Added a new "Frameworks Overview" reference with supported frameworks, capability matrix, installation snippets, and provider mappings. * **Examples** * Updated ADK demo to showcase a weather/time agent with multi-tool calling, simplified run instructions, and removed MCP server setup guidance. * Cleaned example configs by removing several tool transport/setup fields and converting prompts to multiline for readability. * Rewired the demo to use an updated time tool module. * **Chores** * Updated example package keywords. Authors: - Will Killian (https://github.com/willkill07) Approvers: - Eric Evans II (https://github.com/ericevans-nv) URL: NVIDIA#1040
Description
The ADK example didn't actually use MCP, so update the example.
Add framework documentation page to address VDR feedback.
Closes
By Submitting this PR I confirm:
Summary by CodeRabbit