Full Code of NVIDIA/AIQToolkit for AI

develop 586ba52d6381 cached
2280 files
16.8 MB
4.5M tokens
13975 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (18,204K chars total). Download the full file to get everything.
Repository: NVIDIA/AIQToolkit
Branch: develop
Commit: 586ba52d6381
Files: 2280
Total size: 16.8 MB

Directory structure:
gitextract_gihwybp3/

├── .coderabbit.yaml
├── .cursor/
│   └── rules/
│       ├── cursor-rules.mdc
│       ├── documentation/
│       │   ├── capitalization.mdc
│       │   ├── categories.mdc
│       │   ├── formatting.mdc
│       │   ├── general.mdc
│       │   ├── latinisms.mdc
│       │   ├── lists-and-tables.mdc
│       │   ├── numbers-and-dates.mdc
│       │   ├── punctuation.mdc
│       │   ├── voice-and-tone.mdc
│       │   └── writing-process.mdc
│       ├── general.mdc
│       ├── nat-agents/
│       │   └── general.mdc
│       ├── nat-cli/
│       │   ├── general.mdc
│       │   ├── nat-eval.mdc
│       │   ├── nat-info.mdc
│       │   ├── nat-run-serve.mdc
│       │   └── nat-workflow.mdc
│       ├── nat-setup/
│       │   ├── general.mdc
│       │   └── nat-toolkit-installation.mdc
│       ├── nat-tests/
│       │   ├── general.mdc
│       │   ├── integration-tests.mdc
│       │   └── nat-test-llm.mdc
│       └── nat-workflows/
│           ├── add-functions.mdc
│           ├── add-tools.mdc
│           └── general.mdc
├── .dockerignore
├── .gitattributes
├── .github/
│   ├── CODEOWNERS
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.yml
│   │   ├── config.yml
│   │   ├── documentation_request_correction.yml
│   │   ├── documentation_request_new.yml
│   │   └── feature_request.yml
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── copy-pr-bot.yaml
│   ├── ops-bot.yaml
│   ├── release.yml
│   └── workflows/
│       ├── ci_pipe.yml
│       ├── pr.yaml
│       └── stale.yaml
├── .gitignore
├── .gitlab-ci.yml
├── .gitmodules
├── .nspect-allowlist.toml
├── .pre-commit-config.yaml
├── .pytest.ini
├── .vale.ini
├── CHANGELOG.md
├── CODE-OF-CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE-3rd-party.txt
├── LICENSE.md
├── README.md
├── SECURITY.md
├── ci/
│   ├── markdown-link-check-config.json
│   ├── release/
│   │   ├── pr_code_freeze_template.md
│   │   ├── update-version.sh
│   │   └── update_doc_versions1.py
│   ├── scripts/
│   │   ├── bootstrap_local_ci.sh
│   │   ├── checks.sh
│   │   ├── clear_notebook_output_cells.sh
│   │   ├── common.sh
│   │   ├── copyright.py
│   │   ├── documentation_checks.sh
│   │   ├── github/
│   │   │   ├── build_wheel.sh
│   │   │   ├── checks.sh
│   │   │   ├── common.sh
│   │   │   ├── docs.sh
│   │   │   └── tests.sh
│   │   ├── gitlab/
│   │   │   ├── artifactory/
│   │   │   │   └── Dockerfile
│   │   │   ├── artifactory_upload.sh
│   │   │   ├── build_wheel.sh
│   │   │   ├── checks.sh
│   │   │   ├── common.sh
│   │   │   ├── docs.sh
│   │   │   ├── model_health_check.sh
│   │   │   ├── report_test_results.py
│   │   │   └── tests.sh
│   │   ├── gitutils.py
│   │   ├── license_diff.py
│   │   ├── model_health_check.py
│   │   ├── package_utils.py
│   │   ├── path_checks.py
│   │   ├── path_checks.sh
│   │   ├── run_ci_local.sh
│   │   ├── run_tests.py
│   │   └── sbom_list.py
│   └── vale/
│       └── styles/
│           └── config/
│               └── vocabularies/
│                   └── nat/
│                       ├── accept.txt
│                       └── reject.txt
├── conftest.py
├── docker/
│   ├── Dockerfile
│   └── build_container.sh
├── docs/
│   ├── Makefile
│   ├── README.md
│   └── source/
│       ├── _static/
│       │   └── css/
│       │       └── custom.css
│       ├── _templates/
│       │   └── sidebar-nav-bs.html
│       ├── build-workflows/
│       │   ├── a2a-client.md
│       │   ├── about-building-workflows.md
│       │   ├── advanced/
│       │   │   ├── index.md
│       │   │   ├── interactive-workflows.md
│       │   │   └── middleware.md
│       │   ├── embedders.md
│       │   ├── functions-and-function-groups/
│       │   │   ├── function-groups.md
│       │   │   ├── functions.md
│       │   │   └── index.md
│       │   ├── llms/
│       │   │   ├── index.md
│       │   │   └── using-local-llms.md
│       │   ├── mcp-client.md
│       │   ├── memory.md
│       │   ├── object-store.md
│       │   ├── retrievers.md
│       │   └── workflow-configuration.md
│       ├── components/
│       │   ├── agents/
│       │   │   ├── auto-memory-wrapper/
│       │   │   │   ├── auto-memory-wrapper.md
│       │   │   │   └── index.md
│       │   │   ├── index.md
│       │   │   ├── parallel-executor/
│       │   │   │   ├── index.md
│       │   │   │   └── parallel-executor.md
│       │   │   ├── react-agent/
│       │   │   │   ├── index.md
│       │   │   │   └── react-agent.md
│       │   │   ├── reasoning-agent/
│       │   │   │   ├── index.md
│       │   │   │   └── reasoning-agent.md
│       │   │   ├── responses-api-and-agent/
│       │   │   │   ├── index.md
│       │   │   │   └── responses-api-and-agent.md
│       │   │   ├── rewoo-agent/
│       │   │   │   ├── index.md
│       │   │   │   └── rewoo-agent.md
│       │   │   ├── router-agent/
│       │   │   │   ├── index.md
│       │   │   │   └── router-agent.md
│       │   │   ├── sequential-executor/
│       │   │   │   ├── index.md
│       │   │   │   └── sequential-executor.md
│       │   │   └── tool-calling-agent/
│       │   │       ├── index.md
│       │   │       └── tool-calling-agent.md
│       │   ├── auth/
│       │   │   ├── a2a-auth.md
│       │   │   ├── api-authentication.md
│       │   │   ├── index.md
│       │   │   ├── mcp-auth/
│       │   │   │   ├── index.md
│       │   │   │   ├── mcp-auth-token-storage.md
│       │   │   │   └── mcp-service-account-auth.md
│       │   │   └── user-identity.md
│       │   ├── functions/
│       │   │   ├── code-execution.md
│       │   │   ├── index.md
│       │   │   └── text-to-sql.md
│       │   ├── integrations/
│       │   │   ├── a2a.md
│       │   │   ├── frameworks.md
│       │   │   ├── index.md
│       │   │   ├── integrating-aws-bedrock-models.md
│       │   │   └── integrating-oci-generative-ai-models.md
│       │   └── sharing-components.md
│       ├── conf.py
│       ├── extend/
│       │   ├── custom-components/
│       │   │   ├── adding-a-retriever.md
│       │   │   ├── adding-an-authentication-provider.md
│       │   │   ├── adding-an-llm-provider.md
│       │   │   ├── custom-dataset-loader.md
│       │   │   ├── custom-evaluator.md
│       │   │   ├── custom-functions/
│       │   │   │   ├── function-groups.md
│       │   │   │   ├── functions.md
│       │   │   │   └── per-user-functions.md
│       │   │   ├── finetuning.md
│       │   │   ├── gated-fields.md
│       │   │   ├── index.md
│       │   │   ├── mcp-server.md
│       │   │   ├── memory.md
│       │   │   ├── object-store.md
│       │   │   ├── optimizer.md
│       │   │   └── telemetry-exporters.md
│       │   ├── plugins.md
│       │   └── testing/
│       │       ├── add-unit-tests-for-tools.md
│       │       ├── index.md
│       │       └── test-with-nat-test-llm.md
│       ├── get-started/
│       │   ├── installation.md
│       │   ├── quick-start.md
│       │   └── tutorials/
│       │       ├── add-tools-to-a-workflow.md
│       │       ├── build-a-demo-agent-workflow-using-cursor-rules.md
│       │       ├── create-a-new-workflow.md
│       │       ├── customize-a-workflow.md
│       │       └── index.md
│       ├── improve-workflows/
│       │   ├── about-improving-workflows.md
│       │   ├── evaluate.md
│       │   ├── finetuning/
│       │   │   ├── concepts.md
│       │   │   ├── dpo_with_nemo_customizer.md
│       │   │   ├── index.md
│       │   │   └── rl_with_openpipe.md
│       │   ├── optimizer.md
│       │   ├── profiler.md
│       │   ├── sizing-calc.md
│       │   └── test-time-compute.md
│       ├── index.md
│       ├── reference/
│       │   ├── cli.md
│       │   └── rest-api/
│       │       ├── api-server-endpoints.md
│       │       ├── evaluate-api.md
│       │       ├── http-interactive-execution.md
│       │       ├── index.md
│       │       └── websockets.md
│       ├── release-notes.md
│       ├── resources/
│       │   ├── contributing/
│       │   │   ├── code-of-conduct.md
│       │   │   ├── cursor/
│       │   │   │   ├── cursor-rules-developer-guide.md
│       │   │   │   ├── cursor-rules-reference.md
│       │   │   │   └── index.md
│       │   │   ├── index.md
│       │   │   ├── licensing.md
│       │   │   └── testing/
│       │   │       ├── index.md
│       │   │       ├── running-ci-locally.md
│       │   │       └── running-tests.md
│       │   ├── faq.md
│       │   ├── migration-guide.md
│       │   ├── security-considerations.md
│       │   ├── support.md
│       │   └── troubleshooting.md
│       ├── run-workflows/
│       │   ├── a2a-server.md
│       │   ├── about-running-workflows.md
│       │   ├── existing-agents/
│       │   │   ├── index.md
│       │   │   └── langgraph.md
│       │   ├── fastmcp-server.md
│       │   ├── launching-ui.md
│       │   ├── mcp-server.md
│       │   └── observe/
│       │       ├── observe-workflow-with-catalyst.md
│       │       ├── observe-workflow-with-data-flywheel.md
│       │       ├── observe-workflow-with-dbnl.md
│       │       ├── observe-workflow-with-dynatrace.md
│       │       ├── observe-workflow-with-galileo.md
│       │       ├── observe-workflow-with-langsmith.md
│       │       ├── observe-workflow-with-otel-collector.md
│       │       ├── observe-workflow-with-phoenix.md
│       │       ├── observe-workflow-with-weave.md
│       │       └── observe.md
│       └── versions1.json
├── examples/
│   ├── A2A/
│   │   ├── currency_agent_a2a/
│   │   │   ├── README.md
│   │   │   ├── configs/
│   │   │   │   └── config.yml
│   │   │   ├── data/
│   │   │   │   └── sample_queries.json
│   │   │   └── pyproject.toml
│   │   ├── math_assistant_a2a/
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   ├── src/
│   │   │   │   └── nat_math_assistant_a2a/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── configs/
│   │   │   │       │   └── config.yml
│   │   │   │       ├── data/
│   │   │   │       │   └── sample_queries.json
│   │   │   │       └── register.py
│   │   │   └── tests/
│   │   │       └── test_math_assistant_a2a.py
│   │   └── math_assistant_a2a_protected/
│   │       ├── README.md
│   │       ├── configs/
│   │       │   ├── config-client.yml
│   │       │   └── config-server.yml
│   │       └── pyproject.toml
│   ├── HITL/
│   │   ├── por_to_jiratickets/
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   └── src/
│   │   │       └── nat_por_to_jiratickets/
│   │   │           ├── __init__.py
│   │   │           ├── configs/
│   │   │           │   └── config.yml
│   │   │           ├── data/
│   │   │           │   └── por_requirements.txt
│   │   │           ├── extract_por_tool.py
│   │   │           ├── hitl_approval_tool.py
│   │   │           ├── jira_tickets_tool.py
│   │   │           └── register.py
│   │   └── simple_calculator_hitl/
│   │       ├── README.md
│   │       ├── pyproject.toml
│   │       ├── src/
│   │       │   └── nat_simple_calculator_hitl/
│   │       │       ├── __init__.py
│   │       │       ├── configs/
│   │       │       │   └── config-hitl.yml
│   │       │       ├── register.py
│   │       │       └── retry_react_agent.py
│   │       └── tests/
│   │           └── test_simple_calculator_hitl.py
│   ├── MCP/
│   │   ├── kaggle_mcp/
│   │   │   ├── README.md
│   │   │   ├── configs/
│   │   │   │   ├── config-per-user.yml
│   │   │   │   └── config.yml
│   │   │   └── pyproject.toml
│   │   ├── service_account_auth_mcp/
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   └── src/
│   │   │       └── nat_service_account_auth_mcp/
│   │   │           ├── __init__.py
│   │   │           ├── configs/
│   │   │           │   ├── config-mcp-service-account-jama.yml
│   │   │           │   ├── config-mcp-service-account-jira-function.yml
│   │   │           │   └── config-mcp-service-account-jira.yml
│   │   │           └── scripts/
│   │   │               ├── __init__.py
│   │   │               └── service_tokens.py
│   │   ├── simple_auth_mcp/
│   │   │   ├── README.md
│   │   │   ├── configs/
│   │   │   │   ├── config-mcp-auth-jira-per-user.yml
│   │   │   │   ├── config-mcp-auth-jira.yml
│   │   │   │   └── config-mcp-auth-outlook.yml
│   │   │   └── pyproject.toml
│   │   ├── simple_calculator_fastmcp/
│   │   │   ├── README.md
│   │   │   ├── configs/
│   │   │   │   └── config-mcp-client.yml
│   │   │   ├── pyproject.toml
│   │   │   └── tests/
│   │   │       └── test_simple_calculator_fastmcp.py
│   │   ├── simple_calculator_fastmcp_protected/
│   │   │   ├── README.md
│   │   │   ├── configs/
│   │   │   │   ├── config-client.yml
│   │   │   │   └── config-server.yml
│   │   │   ├── pyproject.toml
│   │   │   └── tests/
│   │   │       └── test_simple_calculator_fastmcp_protected.py
│   │   ├── simple_calculator_mcp/
│   │   │   ├── README.md
│   │   │   ├── configs/
│   │   │   │   ├── config-mcp-client.yml
│   │   │   │   └── config-per-user-mcp-client.yml
│   │   │   ├── pyproject.toml
│   │   │   └── tests/
│   │   │       └── test_simple_calculator_mcp.py
│   │   └── simple_calculator_mcp_protected/
│   │       ├── README.md
│   │       ├── configs/
│   │       │   ├── config-client.yml
│   │       │   └── config-server.yml
│   │       └── pyproject.toml
│   ├── RAG/
│   │   └── simple_rag/
│   │       ├── README.md
│   │       ├── configs/
│   │       │   ├── milvus_memory_rag_config.yml
│   │       │   ├── milvus_memory_rag_tools_config.yml
│   │       │   ├── milvus_rag_config.yml
│   │       │   ├── milvus_rag_config_ttc.yml
│   │       │   ├── milvus_rag_tools_config.yml
│   │       │   └── rag_library_mode_config.yml
│   │       ├── pyproject.toml
│   │       └── tests/
│   │           └── test_simple_rag_e2e.py
│   ├── README.md
│   ├── UI/
│   │   └── README.md
│   ├── advanced_agents/
│   │   ├── aiq_blueprint/
│   │   │   └── README.md
│   │   ├── alert_triage_agent/
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   ├── src/
│   │   │   │   └── nat_alert_triage_agent/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── categorizer.py
│   │   │   │       ├── classification_evaluator.py
│   │   │   │       ├── configs/
│   │   │   │       │   ├── config_live_mode.yml
│   │   │   │       │   ├── config_offline_atif.yml
│   │   │   │       │   ├── config_offline_llama_31.yml
│   │   │   │       │   ├── config_offline_llama_33.yml
│   │   │   │       │   └── config_offline_mode.yml
│   │   │   │       ├── data/
│   │   │   │       │   ├── benign_fallback_offline_data.json
│   │   │   │       │   ├── maintenance_static_dataset.csv
│   │   │   │       │   ├── offline_data.csv
│   │   │   │       │   ├── offline_data.json
│   │   │   │       │   └── output_samples/
│   │   │   │       │       ├── workflow_output.json
│   │   │   │       │       └── workflow_output_atif.json
│   │   │   │       ├── hardware_check_tool.py
│   │   │   │       ├── host_performance_check_tool.py
│   │   │   │       ├── maintenance_check.py
│   │   │   │       ├── monitoring_process_check_tool.py
│   │   │   │       ├── network_connectivity_check_tool.py
│   │   │   │       ├── playbooks.py
│   │   │   │       ├── prompts.py
│   │   │   │       ├── register.py
│   │   │   │       ├── run.py
│   │   │   │       ├── telemetry_metrics_analysis_agent.py
│   │   │   │       ├── telemetry_metrics_host_heartbeat_check_tool.py
│   │   │   │       ├── telemetry_metrics_host_performance_check_tool.py
│   │   │   │       └── utils.py
│   │   │   └── tests/
│   │   │       ├── test_alert_triage_agent_workflow.py
│   │   │       ├── test_categorizer.py
│   │   │       ├── test_hardware_check_tool.py
│   │   │       ├── test_host_performance_check_tool.py
│   │   │       ├── test_maintenance_check.py
│   │   │       ├── test_monitoring_process_check_tool.py
│   │   │       ├── test_network_connectivity_check_tool.py
│   │   │       ├── test_run.py
│   │   │       ├── test_telemetry_metrics_host_heartbeat_check_tool.py
│   │   │       ├── test_telemetry_metrics_host_performance_check_tool.py
│   │   │       └── test_utils.py
│   │   └── vulnerability_analysis_blueprint/
│   │       └── README.md
│   ├── agents/
│   │   ├── README.md
│   │   ├── auto_memory_wrapper/
│   │   │   ├── README.md
│   │   │   └── configs/
│   │   │       ├── config_mem0.yml
│   │   │       └── config_zep.yml
│   │   ├── data/
│   │   │   ├── rewoo.json
│   │   │   ├── wikipedia.csv
│   │   │   ├── wikipedia.json
│   │   │   ├── wikipedia.xlsx
│   │   │   └── wikipedia_generated.json
│   │   ├── mixture_of_agents/
│   │   │   ├── README.md
│   │   │   └── configs/
│   │   │       └── config.yml
│   │   ├── pyproject.toml
│   │   ├── react/
│   │   │   ├── README.md
│   │   │   └── configs/
│   │   │       ├── config-reasoning.yml
│   │   │       └── config.yml
│   │   ├── rewoo/
│   │   │   ├── README.md
│   │   │   └── configs/
│   │   │       └── config.yml
│   │   ├── tests/
│   │   │   ├── conftest.py
│   │   │   └── test_agents.py
│   │   └── tool_calling/
│   │       ├── README.md
│   │       └── configs/
│   │           ├── config-reasoning.yml
│   │           ├── config-responses-api.yml
│   │           └── config.yml
│   ├── config_inheritance/
│   │   ├── README.md
│   │   └── configs/
│   │       ├── base-config.yml
│   │       ├── config-debug.yml
│   │       ├── config-different-model.yml
│   │       ├── config-high-temp-debug.yml
│   │       ├── config-high-temp.yml
│   │       └── config-with-tracing.yml
│   ├── control_flow/
│   │   ├── hybrid_control_flow/
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   ├── src/
│   │   │   │   └── nat_hybrid_control_flow/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── configs/
│   │   │   │       │   └── config.yml
│   │   │   │       └── register.py
│   │   │   └── tests/
│   │   │       └── test_hybrid_control_flow.py
│   │   ├── parallel_executor/
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   ├── src/
│   │   │   │   └── nat_parallel_executor/
│   │   │   │       ├── __init__.py
│   │   │   │       └── configs/
│   │   │   │           └── config.yml
│   │   │   └── tests/
│   │   │       └── test_parallel_executor_example.py
│   │   ├── router_agent/
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   ├── src/
│   │   │   │   └── nat_router_agent/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── configs/
│   │   │   │       │   └── config.yml
│   │   │   │       └── register.py
│   │   │   └── tests/
│   │   │       └── test_control_flow_example_router_agent.py
│   │   └── sequential_executor/
│   │       ├── README.md
│   │       ├── pyproject.toml
│   │       ├── src/
│   │       │   └── nat_sequential_executor/
│   │       │       ├── __init__.py
│   │       │       ├── configs/
│   │       │       │   └── config.yml
│   │       │       └── register.py
│   │       └── tests/
│   │           └── test_example_sequential_executor.py
│   ├── custom_functions/
│   │   ├── automated_description_generation/
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   ├── src/
│   │   │   │   └── nat_automated_description_generation/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── configs/
│   │   │   │       │   ├── config.yml
│   │   │   │       │   └── config_no_auto.yml
│   │   │   │       ├── register.py
│   │   │   │       └── utils/
│   │   │   │           ├── __init__.py
│   │   │   │           ├── description_generation.py
│   │   │   │           ├── prompts.py
│   │   │   │           └── workflow_utils.py
│   │   │   └── tests/
│   │   │       └── test_auto_desc_generation.py
│   │   └── plot_charts/
│   │       ├── README.md
│   │       ├── example_data.json
│   │       ├── pyproject.toml
│   │       ├── src/
│   │       │   └── nat_plot_charts/
│   │       │       ├── __init__.py
│   │       │       ├── configs/
│   │       │       │   └── config.yml
│   │       │       ├── data/
│   │       │       │   └── plot_charts_questions.json
│   │       │       ├── plot_chat.py
│   │       │       └── register.py
│   │       └── tests/
│   │           └── test_plot_charts_workflow.py
│   ├── deploy/
│   │   ├── README.md
│   │   ├── docker-compose.memmachine.yml
│   │   ├── docker-compose.milvus.yml
│   │   ├── docker-compose.minio.yml
│   │   ├── docker-compose.mysql.yml
│   │   ├── docker-compose.phoenix.yml
│   │   └── docker-compose.redis.yml
│   ├── documentation_guides/
│   │   ├── README.md
│   │   ├── locally_hosted_llms/
│   │   │   ├── nim_config.yml
│   │   │   └── vllm_config.yml
│   │   ├── pyproject.toml
│   │   ├── tests/
│   │   │   ├── conftest.py
│   │   │   ├── test_custom_workflow.py
│   │   │   └── test_text_file_ingest.py
│   │   └── workflows/
│   │       ├── custom_workflow/
│   │       │   ├── custom_config.yml
│   │       │   └── search_config.yml
│   │       └── text_file_ingest/
│   │           ├── pyproject.toml
│   │           └── src/
│   │               └── text_file_ingest/
│   │                   ├── __init__.py
│   │                   ├── configs/
│   │                   │   └── config.yml
│   │                   ├── data/
│   │                   │   ├── doca_overview.txt
│   │                   │   ├── gpunetio_blog_post.txt
│   │                   │   └── gpunetio_programming_guide.txt
│   │                   ├── register.py
│   │                   └── text_file_ingest_function.py
│   ├── dynamo_integration/
│   │   ├── ARCHITECTURE.md
│   │   ├── README.md
│   │   ├── data/
│   │   │   └── raw/
│   │   │       └── banking/
│   │   │           └── tools.json
│   │   ├── latency_sensitivity_demo/
│   │   │   ├── INSTALL_LIBRARY.md
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   ├── src/
│   │   │   │   └── latency_sensitivity_demo/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── compare_sensitivity_perf.py
│   │   │   │       ├── configs/
│   │   │   │       │   ├── config_profile.yml
│   │   │   │       │   └── config_with_trie.yml
│   │   │   │       ├── data/
│   │   │   │       │   └── customer_queries.json
│   │   │   │       ├── register.py
│   │   │   │       ├── scripts/
│   │   │   │       │   ├── dynamo_stack.sh
│   │   │   │       │   └── dynamo_stack_sensitivity.sh
│   │   │   │       ├── sensitivity_report.py
│   │   │   │       └── workflow.py
│   │   │   └── tests/
│   │   │       └── test_workflow.py
│   │   ├── react_benchmark_agent/
│   │   │   ├── README.md
│   │   │   ├── README_PREDICTION_TRIE.md
│   │   │   ├── pyproject.toml
│   │   │   ├── src/
│   │   │   │   └── react_benchmark_agent/
│   │   │   │       ├── DEVELOPER_NOTES.md
│   │   │   │       ├── __init__.py
│   │   │   │       ├── banking_tools.py
│   │   │   │       ├── configs/
│   │   │   │       │   ├── config_dynamo_adk_e2e_test.yml
│   │   │   │       │   ├── config_dynamo_e2e_test.yml
│   │   │   │       │   ├── config_dynamo_prefix_e2e_test.yml
│   │   │   │       │   ├── eval_config_no_rethinking_full_test.yml
│   │   │   │       │   ├── eval_config_no_rethinking_minimal_test.yml
│   │   │   │       │   ├── eval_config_rethinking_full_test.yml
│   │   │   │       │   ├── optimize_rethinking_full_test.yml
│   │   │   │       │   ├── profile_rethinking_full_test.yml
│   │   │   │       │   └── run_with_prediction_trie.yml
│   │   │   │       ├── evaluators/
│   │   │   │       │   ├── __init__.py
│   │   │   │       │   ├── action_completion_evaluator.py
│   │   │   │       │   └── tsq_evaluator.py
│   │   │   │       ├── react_benchmark_agent.py
│   │   │   │       ├── register.py
│   │   │   │       ├── self_evaluating_agent_with_feedback.py
│   │   │   │       └── tool_intent_stubs.py
│   │   │   └── tests/
│   │   │       ├── test_self_evaluation.py
│   │   │       ├── test_tool_intent_buffer.py
│   │   │       └── test_tsq_formula.py
│   │   └── scripts/
│   │       ├── create_test_subset.py
│   │       ├── download_agent_leaderboard_v2.py
│   │       ├── plot_throughput_histograms_per_request.py
│   │       ├── plot_throughput_vs_tsq_per_request.py
│   │       ├── run_concurrency_benchmark.sh
│   │       └── throughput_analysis.py
│   ├── evaluation_and_profiling/
│   │   ├── email_phishing_analyzer/
│   │   │   ├── .dockerignore
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   ├── scripts/
│   │   │   │   └── run_phishing_evals_all.sh
│   │   │   ├── src/
│   │   │   │   └── nat_email_phishing_analyzer/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── configs/
│   │   │   │       │   ├── config-langsmith-eval.yml
│   │   │   │       │   ├── config-langsmith-optimize.yml
│   │   │   │       │   ├── config-llama-3.1-8b-instruct.yml
│   │   │   │       │   ├── config-llama-3.3-70b-instruct.yml
│   │   │   │       │   ├── config-mistral-large-3-675b-instruct-2512.yml
│   │   │   │       │   ├── config-mistral-small-4-119b-2603.yml
│   │   │   │       │   ├── config-nemotron-3-nano-30b-a3b.yml
│   │   │   │       │   ├── config-nemotron-3-super-120b-a12b.yml
│   │   │   │       │   ├── config-reasoning.yml
│   │   │   │       │   ├── config.yml
│   │   │   │       │   └── config_optimizer.yml
│   │   │   │       ├── data/
│   │   │   │       │   └── smaller_test.csv
│   │   │   │       ├── prompt.py
│   │   │   │       ├── register.py
│   │   │   │       └── utils.py
│   │   │   └── tests/
│   │   │       └── test_email_phishing_analyzer.py
│   │   ├── simple_calculator_eval/
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   ├── src/
│   │   │   │   └── nat_simple_calculator_eval/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── configs/
│   │   │   │       │   ├── config-branching-nested-trajectory-eval.yml
│   │   │   │       │   ├── config-custom-dataset-format.yml
│   │   │   │       │   ├── config-nested-trajectory-eval.yml
│   │   │   │       │   ├── config-sizing-calc.yml
│   │   │   │       │   ├── config-trajectory-eval.yml
│   │   │   │       │   ├── config-tunable-rag-eval-atif.yml
│   │   │   │       │   ├── config-tunable-rag-eval.yml
│   │   │   │       │   └── config-with-custom-post-process.yml
│   │   │   │       ├── data/
│   │   │   │       │   ├── output_samples/
│   │   │   │       │   │   ├── branching_nested_trajectory_eval/
│   │   │   │       │   │   │   ├── intermediate_step-vs-atif.md
│   │   │   │       │   │   │   ├── workflow_output.json
│   │   │   │       │   │   │   └── workflow_output_atif.json
│   │   │   │       │   │   ├── nested_trajectory_eval/
│   │   │   │       │   │   │   ├── intermediate_step-vs-atif.md
│   │   │   │       │   │   │   ├── workflow_output.json
│   │   │   │       │   │   │   └── workflow_output_atif.json
│   │   │   │       │   │   └── trajectory_eval/
│   │   │   │       │   │       ├── intermediate_step-vs-atif.md
│   │   │   │       │   │       ├── workflow_output.json
│   │   │   │       │   │       └── workflow_output_atif.json
│   │   │   │       │   ├── simple_calculator_nested.json
│   │   │   │       │   ├── simple_calculator_power_branch.json
│   │   │   │       │   └── simple_calculator_power_of_two.json
│   │   │   │       ├── register.py
│   │   │   │       └── scripts/
│   │   │   │           ├── __init__.py
│   │   │   │           ├── custom_dataset_parser.py
│   │   │   │           └── custom_post_process.py
│   │   │   └── tests/
│   │   │       ├── test_nested_trajectory_eval.py
│   │   │       └── test_simple_calculator_eval.py
│   │   └── simple_web_query_eval/
│   │       ├── README.md
│   │       ├── atif-eval-readme.md
│   │       ├── pyproject.toml
│   │       ├── src/
│   │       │   └── nat_simple_web_query_eval/
│   │       │       ├── __init__.py
│   │       │       ├── atif_only_evaluator_register.py
│   │       │       ├── configs/
│   │       │       │   ├── eval_config.yml
│   │       │       │   ├── eval_config_atif.yml
│   │       │       │   ├── eval_config_atif_custom_evaluator.yml
│   │       │       │   ├── eval_config_llama31.yml
│   │       │       │   ├── eval_config_llama31_atif.yml
│   │       │       │   ├── eval_config_llama33.yml
│   │       │       │   ├── eval_config_llama33_atif.yml
│   │       │       │   ├── eval_config_openai.yml
│   │       │       │   ├── eval_only_config.yml
│   │       │       │   └── eval_upload.yml
│   │       │       ├── data/
│   │       │       │   ├── langsmith.csv
│   │       │       │   ├── langsmith.json
│   │       │       │   ├── langsmith.xlsx
│   │       │       │   ├── langsmith_generated.json
│   │       │       │   └── simple_questions.json
│   │       │       ├── register.py
│   │       │       └── scripts/
│   │       │           ├── __init__.py
│   │       │           ├── evaluate_single_item.py
│   │       │           ├── evaluate_single_item_simple.py
│   │       │           └── workflow_to_csv.py
│   │       └── tests/
│   │           ├── test_atif_only_evaluator_register.py
│   │           └── test_simple_web_query_eval.py
│   ├── finetuning/
│   │   ├── dpo_tic_tac_toe/
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   └── src/
│   │   │       └── dpo_tic_tac_toe/
│   │   │           ├── __init__.py
│   │   │           ├── board_position_scorer.py
│   │   │           ├── choose_move_function.py
│   │   │           ├── configs/
│   │   │           │   ├── config.yml
│   │   │           │   └── config_after_training.yml
│   │   │           ├── core.py
│   │   │           ├── data/
│   │   │           │   └── data.json
│   │   │           ├── dpo_workflow.py
│   │   │           ├── evaluator.py
│   │   │           ├── evaluator_register.py
│   │   │           ├── llm_agents.py
│   │   │           ├── move_search_strategy.py
│   │   │           ├── register.py
│   │   │           └── ttc_move_selector_function.py
│   │   └── rl_with_openpipe_art/
│   │       ├── README.md
│   │       ├── pyproject.toml
│   │       └── src/
│   │           └── rl_with_openpipe_art/
│   │               ├── __init__.py
│   │               ├── accuracy_evaluator.py
│   │               ├── configs/
│   │               │   ├── config.yml
│   │               │   ├── config_post_train.yml
│   │               │   └── config_pre_train.yml
│   │               ├── core.py
│   │               ├── data/
│   │               │   ├── data.json
│   │               │   └── eval_data.json
│   │               ├── evaluator_register.py
│   │               ├── llm_agents.py
│   │               ├── register.py
│   │               └── rl_with_openpipe_art.py
│   ├── frameworks/
│   │   ├── adk_demo/
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   ├── src/
│   │   │   │   └── nat_adk_demo/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── agent.py
│   │   │   │       ├── configs/
│   │   │   │       │   ├── config.yml
│   │   │   │       │   ├── config_oai.yml
│   │   │   │       │   └── eval_config.yml
│   │   │   │       ├── data/
│   │   │   │       │   └── eval.json
│   │   │   │       ├── nat_time_tool.py
│   │   │   │       ├── register.py
│   │   │   │       └── weather_update_tool.py
│   │   │   └── tests/
│   │   │       └── test_adk_demo_e2e.py
│   │   ├── agno_personal_finance/
│   │   │   ├── .dockerignore
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   ├── src/
│   │   │   │   └── nat_agno_personal_finance/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── agno_personal_finance_function.py
│   │   │   │       ├── configs/
│   │   │   │       │   └── config.yml
│   │   │   │       └── register.py
│   │   │   └── tests/
│   │   │       └── test_agno_personal_finance_workflow.py
│   │   ├── auto_wrapper/
│   │   │   └── langchain_deep_research/
│   │   │       ├── README.md
│   │   │       ├── configs/
│   │   │       │   ├── config.yml
│   │   │       │   ├── config_with_eval.yml
│   │   │       │   ├── config_with_llms.yml
│   │   │       │   └── config_with_telemetry.yml
│   │   │       ├── data/
│   │   │       │   ├── DeepConsult_top1.csv
│   │   │       │   └── DeepConsult_top10.csv
│   │   │       ├── langgraph_deep_research.ipynb
│   │   │       └── src/
│   │   │           └── configurable_agent.py
│   │   ├── haystack_deep_research_agent/
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   ├── src/
│   │   │   │   └── nat_haystack_deep_research_agent/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── configs/
│   │   │   │       │   └── config.yml
│   │   │   │       ├── data/
│   │   │   │       │   ├── carbonara.md
│   │   │   │       │   └── sample_document.txt
│   │   │   │       ├── pipelines/
│   │   │   │       │   ├── __init__.py
│   │   │   │       │   ├── indexing.py
│   │   │   │       │   ├── rag.py
│   │   │   │       │   └── search.py
│   │   │   │       └── register.py
│   │   │   └── tests/
│   │   │       └── test_haystack_deep_research_agent.py
│   │   ├── multi_frameworks/
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   ├── src/
│   │   │   │   └── nat_multi_frameworks/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── configs/
│   │   │   │       │   └── config.yml
│   │   │   │       ├── haystack_agent.py
│   │   │   │       ├── langchain_research_tool.py
│   │   │   │       ├── llama_index_rag_tool.py
│   │   │   │       └── register.py
│   │   │   └── tests/
│   │   │       └── test_multi_frameworks_workflow.py
│   │   ├── nat_autogen_demo/
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   └── src/
│   │   │       └── nat_autogen_demo/
│   │   │           ├── __init__.py
│   │   │           ├── autogen_team.py
│   │   │           ├── configs/
│   │   │           │   ├── config-eval.yml
│   │   │           │   └── config.yml
│   │   │           ├── data/
│   │   │           │   └── toy_data.json
│   │   │           ├── register.py
│   │   │           └── traffic_status_tool.py
│   │   ├── semantic_kernel_demo/
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   ├── src/
│   │   │   │   └── nat_semantic_kernel_demo/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── configs/
│   │   │   │       │   └── config.yml
│   │   │   │       ├── data/
│   │   │   │       │   ├── hotel_prices.json
│   │   │   │       │   └── local_events.json
│   │   │   │       ├── hotel_price_tool.py
│   │   │   │       ├── local_events_tool.py
│   │   │   │       └── register.py
│   │   │   └── tests/
│   │   │       └── test_semantic_kernel_workflow.py
│   │   └── strands_demo/
│   │       ├── README.md
│   │       ├── bedrock_agentcore/
│   │       │   ├── .dockerignore
│   │       │   ├── Dockerfile
│   │       │   ├── README.md
│   │       │   └── scripts/
│   │       │       ├── deploy_nat.py
│   │       │       ├── get_agentcore_runtime_id.py
│   │       │       ├── run_nat_no_OTEL.sh
│   │       │       ├── run_nat_with_OTEL.sh
│   │       │       ├── update_nat.py
│   │       │       └── verify_nat.py
│   │       ├── pyproject.toml
│   │       └── src/
│   │           └── nat_strands_demo/
│   │               ├── __init__.py
│   │               ├── configs/
│   │               │   ├── agentcore_config.yml
│   │               │   ├── config.yml
│   │               │   ├── eval_config.yml
│   │               │   ├── optimizer_config.yml
│   │               │   └── sizing_config.yml
│   │               ├── data/
│   │               │   └── strands.json
│   │               ├── ping_tool.py
│   │               ├── register.py
│   │               └── url_directory.py
│   ├── front_ends/
│   │   ├── per_user_workflow/
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   └── src/
│   │   │       └── nat_per_user_workflow/
│   │   │           ├── __init__.py
│   │   │           ├── configs/
│   │   │           │   └── config.yml
│   │   │           ├── per_user_functions.py
│   │   │           ├── per_user_workflow.py
│   │   │           └── register.py
│   │   ├── simple_auth/
│   │   │   ├── Dockerfile
│   │   │   ├── README.md
│   │   │   ├── docker-compose.yml
│   │   │   ├── pyproject.toml
│   │   │   ├── src/
│   │   │   │   └── nat_simple_auth/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── configs/
│   │   │   │       │   └── config.yml
│   │   │   │       ├── ip_lookup.py
│   │   │   │       └── register.py
│   │   │   └── tests/
│   │   │       └── test_simple_auth.py
│   │   └── simple_calculator_custom_routes/
│   │       ├── README.md
│   │       ├── configs/
│   │       │   └── config-metadata.yml
│   │       ├── pyproject.toml
│   │       └── tests/
│   │           └── test_simple_calculator_custom_routes.py
│   ├── getting_started/
│   │   ├── scaffolding/
│   │   │   └── README.md
│   │   ├── simple_calculator/
│   │   │   ├── .dockerignore
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   ├── src/
│   │   │   │   └── nat_simple_calculator/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── configs/
│   │   │   │       │   ├── config-reasoning.yml
│   │   │   │       │   └── config.yml
│   │   │   │       ├── data/
│   │   │   │       │   ├── simple_calculator.json
│   │   │   │       │   └── simple_calculator_questions.json
│   │   │   │       └── register.py
│   │   │   └── tests/
│   │   │       └── test_simple_calculator_workflow.py
│   │   └── simple_web_query/
│   │       ├── README.md
│   │       ├── pyproject.toml
│   │       ├── src/
│   │       │   └── nat_simple_web_query/
│   │       │       ├── __init__.py
│   │       │       ├── configs/
│   │       │       │   └── config.yml
│   │       │       └── register.py
│   │       └── tests/
│   │           ├── test_simple_web_query_workflow.py
│   │           └── test_web_query_tool.py
│   ├── memory/
│   │   ├── memmachine/
│   │   │   ├── README.md
│   │   │   ├── configuration.yml
│   │   │   └── memmachine_memory_example.ipynb
│   │   └── redis/
│   │       ├── README.md
│   │       ├── configs/
│   │       │   └── config.yml
│   │       ├── pyproject.toml
│   │       └── tests/
│   │           └── test_memory_redis.py
│   ├── notebooks/
│   │   ├── README.md
│   │   ├── adding_tools_to_agents.ipynb
│   │   ├── bringing_your_own_agent.ipynb
│   │   ├── eval_atif_custom_evaluator.ipynb
│   │   ├── eval_atif_standalone.ipynb
│   │   ├── eval_harbor_atif_interop.ipynb
│   │   ├── getting_started_with_nat.ipynb
│   │   ├── hello_world.ipynb
│   │   ├── launchables/
│   │   │   ├── GPU_Cluster_Sizing_with_NeMo_Agent_Toolkit.ipynb
│   │   │   └── README.md
│   │   ├── mcp_setup_and_integration.ipynb
│   │   ├── multi_agent_orchestration.ipynb
│   │   ├── observability_evaluation_and_profiling.ipynb
│   │   ├── optimize_model_selection.ipynb
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       └── test_notebooks_e2e.py
│   ├── object_store/
│   │   └── user_report/
│   │       ├── README.md
│   │       ├── configs/
│   │       │   ├── config_mem.yml
│   │       │   ├── config_mysql.yml
│   │       │   ├── config_redis.yml
│   │       │   └── config_s3.yml
│   │       ├── data/
│   │       │   └── object_store/
│   │       │       └── reports/
│   │       │           ├── 12345/
│   │       │           │   └── 2025-04-15.json
│   │       │           ├── 24680/
│   │       │           │   └── 2025-03-30.json
│   │       │           └── 67890/
│   │       │               └── latest.json
│   │       ├── pyproject.toml
│   │       ├── src/
│   │       │   └── nat_user_report/
│   │       │       ├── __init__.py
│   │       │       ├── register.py
│   │       │       └── user_report_tools.py
│   │       └── tests/
│   │           └── test_objext_store_example_user_report_tool.py
│   ├── observability/
│   │   └── simple_calculator_observability/
│   │       ├── README.md
│   │       ├── configs/
│   │       │   ├── config-catalyst.yml
│   │       │   ├── config-dbnl.yml
│   │       │   ├── config-galileo.yml
│   │       │   ├── config-langfuse.yml
│   │       │   ├── config-langsmith-eval.yml
│   │       │   ├── config-langsmith-optimize.yml
│   │       │   ├── config-langsmith.yml
│   │       │   ├── config-otel-file.yml
│   │       │   ├── config-patronus.yml
│   │       │   ├── config-phoenix-nested.yml
│   │       │   ├── config-phoenix.yml
│   │       │   └── config-weave.yml
│   │       ├── pyproject.toml
│   │       ├── src/
│   │       │   └── nat_simple_calculator_observability/
│   │       │       ├── __init__.py
│   │       │       └── register.py
│   │       └── tests/
│   │           └── test_simple_calc_observability.py
│   ├── prompt_from_file/
│   │   ├── README.md
│   │   ├── configs/
│   │   │   └── config.yml
│   │   ├── prompts/
│   │   │   └── system_prompt.txt
│   │   └── pyproject.toml
│   └── safety_and_security/
│       └── retail_agent/
│           ├── README.md
│           ├── pyproject.toml
│           ├── src/
│           │   └── nat_retail_agent/
│           │       ├── __init__.py
│           │       ├── configs/
│           │       │   ├── config-eval.yml
│           │       │   ├── config-with-defenses.yml
│           │       │   ├── config.yml
│           │       │   ├── red-teaming-with-defenses.yml
│           │       │   └── red-teaming.yml
│           │       ├── data/
│           │       │   ├── customers.json
│           │       │   ├── evalset-redteaming.json
│           │       │   ├── evalset.json
│           │       │   └── products.json
│           │       └── register.py
│           └── tests/
│               └── test_retail_agent.py
├── external/
│   └── dynamo/
│       ├── E2E_SEQUENCE.md
│       ├── README.md
│       ├── components/
│       │   ├── ARCHITECTURE.md
│       │   ├── README.md
│       │   ├── __init__.py
│       │   ├── config.yaml
│       │   ├── kv_indexer.py
│       │   ├── processor.py
│       │   └── router.py
│       ├── demo_priority_eviction.sh
│       ├── monitor_dynamo.sh
│       ├── monitoring/
│       │   ├── README.md
│       │   ├── docker-compose.yml
│       │   ├── grafana/
│       │   │   └── provisioning/
│       │   │       ├── dashboards/
│       │   │       │   ├── dashboards.yml
│       │   │       │   └── json/
│       │   │       │       └── dynamo-overview.json
│       │   │       └── datasources/
│       │   │           └── datasources.yml
│       │   ├── prometheus.yml
│       │   ├── rules/
│       │   │   ├── sglang-aliases.yml
│       │   │   └── vllm-aliases.yml
│       │   └── scripts/
│       │       └── kv_event_observer.py
│       ├── start_dynamo_disagg.sh
│       ├── start_dynamo_optimized_thompson_hints_sglang.sh
│       ├── start_dynamo_optimized_thompson_hints_vllm.sh
│       ├── start_dynamo_unified.sh
│       ├── stop_dynamo.sh
│       └── test_dynamo_integration.sh
├── nat.code-workspace
├── packages/
│   ├── nvidia_nat_a2a/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── a2a/
│   │   │               ├── __init__.py
│   │   │               ├── auth/
│   │   │               │   ├── __init__.py
│   │   │               │   └── credential_service.py
│   │   │               ├── cli/
│   │   │               │   ├── __init__.py
│   │   │               │   └── commands.py
│   │   │               ├── client/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── client_base.py
│   │   │               │   ├── client_config.py
│   │   │               │   └── client_impl.py
│   │   │               ├── register.py
│   │   │               └── server/
│   │   │                   ├── __init__.py
│   │   │                   ├── agent_executor_adapter.py
│   │   │                   ├── front_end_config.py
│   │   │                   ├── front_end_plugin.py
│   │   │                   ├── front_end_plugin_worker.py
│   │   │                   ├── oauth_middleware.py
│   │   │                   └── register_frontend.py
│   │   └── tests/
│   │       ├── auth/
│   │       │   └── test_credential_service.py
│   │       ├── cli/
│   │       │   └── test_cli.py
│   │       ├── client/
│   │       │   ├── conftest.py
│   │       │   ├── test_client_function_group.py
│   │       │   └── test_client_functionality.py
│   │       ├── conftest.py
│   │       └── server/
│   │           ├── conftest.py
│   │           ├── test_agent_card_generation.py
│   │           ├── test_oauth_middleware.py
│   │           └── test_server_functionality.py
│   ├── nvidia_nat_adk/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── adk/
│   │   │               ├── __init__.py
│   │   │               ├── adk_parser.py
│   │   │               ├── callback_handler.py
│   │   │               ├── llm.py
│   │   │               ├── register.py
│   │   │               └── tool_wrapper.py
│   │   └── tests/
│   │       ├── test_adk_callback_handler.py
│   │       ├── test_adk_llm.py
│   │       ├── test_adk_parser.py
│   │       └── test_adk_tool_wrapper.py
│   ├── nvidia_nat_agno/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── agno/
│   │   │               ├── __init__.py
│   │   │               ├── callback_handler.py
│   │   │               ├── llm.py
│   │   │               ├── register.py
│   │   │               ├── tool_wrapper.py
│   │   │               └── tools/
│   │   │                   ├── __init__.py
│   │   │                   ├── register.py
│   │   │                   └── serp_api_tool.py
│   │   └── tests/
│   │       ├── test_agno_callback_handler.py
│   │       ├── test_llm_agno.py
│   │       ├── test_tool_wrapper.py
│   │       └── tools/
│   │           └── test_serp_api_tool.py
│   ├── nvidia_nat_app/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   ├── meta/
│   │   │   │   └── pypi.md
│   │   │   └── nat_app/
│   │   │       ├── __init__.py
│   │   │       ├── api.py
│   │   │       ├── compiler/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── compilation_context.py
│   │   │       │   ├── compilation_stage.py
│   │   │       │   ├── compiler.py
│   │   │       │   ├── default_graph_compiler.py
│   │   │       │   ├── errors.py
│   │   │       │   ├── optimizer.py
│   │   │       │   └── pipelined_compiler.py
│   │   │       ├── constraints/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── decorators.py
│   │   │       │   ├── models.py
│   │   │       │   └── resolution.py
│   │   │       ├── executors/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── execution_state.py
│   │   │       │   ├── metrics.py
│   │   │       │   ├── result_handler.py
│   │   │       │   └── runner.py
│   │   │       ├── graph/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── access.py
│   │   │       │   ├── adapter.py
│   │   │       │   ├── analysis.py
│   │   │       │   ├── factory.py
│   │   │       │   ├── llm_detection.py
│   │   │       │   ├── models.py
│   │   │       │   ├── protocols.py
│   │   │       │   ├── scheduling.py
│   │   │       │   ├── static_analysis.py
│   │   │       │   ├── topology.py
│   │   │       │   └── types.py
│   │   │       ├── speculation/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── plan.py
│   │   │       │   ├── planner.py
│   │   │       │   ├── resolution.py
│   │   │       │   ├── safety.py
│   │   │       │   └── strategies/
│   │   │       │       ├── __init__.py
│   │   │       │       ├── base.py
│   │   │       │       └── router_branch.py
│   │   │       └── stages/
│   │   │           ├── __init__.py
│   │   │           ├── edge_classification.py
│   │   │           ├── extract.py
│   │   │           ├── llm_analysis.py
│   │   │           ├── node_analysis.py
│   │   │           ├── priority_assignment.py
│   │   │           ├── scheduling.py
│   │   │           ├── topology.py
│   │   │           └── validate.py
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── compiler/
│   │       │   ├── __init__.py
│   │       │   ├── test_compilation_context.py
│   │       │   ├── test_compilation_stage.py
│   │       │   ├── test_compiler.py
│   │       │   ├── test_default_graph_compiler.py
│   │       │   └── test_pipelined_compiler.py
│   │       ├── conftest.py
│   │       ├── constraints/
│   │       │   ├── __init__.py
│   │       │   ├── test_decorators.py
│   │       │   ├── test_models.py
│   │       │   └── test_resolution.py
│   │       ├── executors/
│   │       │   ├── __init__.py
│   │       │   ├── test_execution_state.py
│   │       │   ├── test_metrics.py
│   │       │   ├── test_result_handler.py
│   │       │   └── test_runner.py
│   │       ├── graph/
│   │       │   ├── __init__.py
│   │       │   ├── conftest.py
│   │       │   ├── test_access.py
│   │       │   ├── test_adapter.py
│   │       │   ├── test_analysis.py
│   │       │   ├── test_factory.py
│   │       │   ├── test_llm_detection.py
│   │       │   ├── test_models.py
│   │       │   ├── test_optimizer.py
│   │       │   ├── test_scheduling.py
│   │       │   ├── test_static_analysis.py
│   │       │   ├── test_topology.py
│   │       │   ├── test_types.py
│   │       │   └── test_uncertainty_invariants.py
│   │       ├── speculation/
│   │       │   ├── __init__.py
│   │       │   ├── test_plan.py
│   │       │   └── test_safety.py
│   │       ├── stages/
│   │       │   ├── __init__.py
│   │       │   ├── test_edge_classification.py
│   │       │   ├── test_extract.py
│   │       │   ├── test_llm_analysis.py
│   │       │   ├── test_node_analysis.py
│   │       │   ├── test_priority_assignment.py
│   │       │   ├── test_scheduling.py
│   │       │   ├── test_topology.py
│   │       │   └── test_validate.py
│   │       └── test_api.py
│   ├── nvidia_nat_atif/
│   │   ├── atif-step-extra-guide.md
│   │   ├── atof-event-format.md
│   │   ├── atof-to-atif-conversion-guide.md
│   │   ├── examples/
│   │   │   └── atof_to_atif/
│   │   │       ├── README.md
│   │   │       ├── convert_atof_examples_to_atif.py
│   │   │       ├── generate_atof_examples.py
│   │   │       └── output/
│   │   │           ├── exmp01_atif.json
│   │   │           ├── exmp01_atof.jsonl
│   │   │           ├── exmp02_atif.json
│   │   │           ├── exmp02_atof.jsonl
│   │   │           ├── exmp03_atif.json
│   │   │           ├── exmp03_atof.jsonl
│   │   │           ├── exmp04_atif.json
│   │   │           ├── exmp04_atof.jsonl
│   │   │           ├── exmp05_atif.json
│   │   │           ├── exmp05_atof.jsonl
│   │   │           ├── exmp06_atif.json
│   │   │           └── exmp06_atof.jsonl
│   │   ├── intermediate-step-to-atif-mapping.md
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── atif/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── agent.py
│   │   │       │   ├── atif_step_extra.py
│   │   │       │   ├── content.py
│   │   │       │   ├── final_metrics.py
│   │   │       │   ├── metrics.py
│   │   │       │   ├── observation.py
│   │   │       │   ├── observation_result.py
│   │   │       │   ├── scripts/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   └── generate_atif_trajectory.py
│   │   │       │   ├── step.py
│   │   │       │   ├── subagent_trajectory_ref.py
│   │   │       │   ├── tool_call.py
│   │   │       │   └── trajectory.py
│   │   │       ├── atof/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── category.py
│   │   │       │   ├── events.py
│   │   │       │   ├── extractors.py
│   │   │       │   ├── flags.py
│   │   │       │   ├── io.py
│   │   │       │   ├── schemas.py
│   │   │       │   └── scripts/
│   │   │       │       ├── __init__.py
│   │   │       │       └── atof_to_atif_converter.py
│   │   │       └── meta/
│   │   │           └── pypi.md
│   │   └── tests/
│   │       ├── test_atif_v17_validators.py
│   │       ├── test_data_schema_validation.py
│   │       ├── test_extractors.py
│   │       ├── test_schema_validation.py
│   │       ├── test_shape_mismatch.py
│   │       ├── test_spec_compliance.py
│   │       └── test_tier1_conversion.py
│   ├── nvidia_nat_autogen/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── autogen/
│   │   │               ├── __init__.py
│   │   │               ├── callback_handler.py
│   │   │               ├── llm.py
│   │   │               ├── register.py
│   │   │               └── tool_wrapper.py
│   │   └── tests/
│   │       ├── test_callback_handler_autogen.py
│   │       ├── test_callback_handler_integration.py
│   │       ├── test_llm_autogen.py
│   │       ├── test_register_autogen.py
│   │       └── test_tool_wrapper_autogen.py
│   ├── nvidia_nat_config_optimizer/
│   │   ├── README.md
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── config_optimizer/
│   │   │               ├── __init__.py
│   │   │               ├── cli/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── commands.py
│   │   │               │   └── optimize.py
│   │   │               ├── eval_runtime_loader.py
│   │   │               ├── optimizable_utils.py
│   │   │               ├── optimizer_runtime.py
│   │   │               ├── parameters/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── base.py
│   │   │               │   ├── optimizer.py
│   │   │               │   ├── pareto_visualizer.py
│   │   │               │   └── selection.py
│   │   │               ├── prompts/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── base.py
│   │   │               │   ├── ga_individual.py
│   │   │               │   ├── ga_prompt_optimizer.py
│   │   │               │   └── oracle_feedback.py
│   │   │               ├── register.py
│   │   │               └── update_helpers.py
│   │   └── tests/
│   │       ├── test_optimizable_utils.py
│   │       ├── test_optimizer_runtime_extra.py
│   │       ├── test_oracle_feedback.py
│   │       ├── test_parameter_optimizer.py
│   │       ├── test_parameter_selection_extra.py
│   │       ├── test_pareto_visualizer_extra.py
│   │       ├── test_prompt_optimizer.py
│   │       └── test_update_helpers.py
│   ├── nvidia_nat_core/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── authentication/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── api_key/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── api_key_auth_provider.py
│   │   │       │   │   ├── api_key_auth_provider_config.py
│   │   │       │   │   └── register.py
│   │   │       │   ├── credential_validator/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   └── bearer_token_validator.py
│   │   │       │   ├── exceptions/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   └── api_key_exceptions.py
│   │   │       │   ├── http_basic_auth/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── http_basic_auth_provider.py
│   │   │       │   │   └── register.py
│   │   │       │   ├── interfaces.py
│   │   │       │   ├── jwt_utils.py
│   │   │       │   ├── oauth2/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── oauth2_auth_code_flow_provider.py
│   │   │       │   │   ├── oauth2_auth_code_flow_provider_config.py
│   │   │       │   │   ├── oauth2_resource_server_config.py
│   │   │       │   │   └── register.py
│   │   │       │   ├── register.py
│   │   │       │   └── token_storage.py
│   │   │       ├── builder/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── builder.py
│   │   │       │   ├── child_builder.py
│   │   │       │   ├── component_utils.py
│   │   │       │   ├── context.py
│   │   │       │   ├── dataset_loader.py
│   │   │       │   ├── embedder.py
│   │   │       │   ├── evaluator.py
│   │   │       │   ├── framework_enum.py
│   │   │       │   ├── front_end.py
│   │   │       │   ├── function.py
│   │   │       │   ├── function_base.py
│   │   │       │   ├── function_info.py
│   │   │       │   ├── intermediate_step_manager.py
│   │   │       │   ├── llm.py
│   │   │       │   ├── per_user_workflow_builder.py
│   │   │       │   ├── retriever.py
│   │   │       │   ├── runtime_event_subscriber.py
│   │   │       │   ├── sync_builder.py
│   │   │       │   ├── user_interaction_manager.py
│   │   │       │   ├── workflow.py
│   │   │       │   └── workflow_builder.py
│   │   │       ├── cli/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── cli_utils/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── config_override.py
│   │   │       │   │   └── validation.py
│   │   │       │   ├── commands/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── configure/
│   │   │       │   │   │   ├── __init__.py
│   │   │       │   │   │   ├── channel/
│   │   │       │   │   │   │   ├── __init__.py
│   │   │       │   │   │   │   ├── add.py
│   │   │       │   │   │   │   ├── channel.py
│   │   │       │   │   │   │   ├── remove.py
│   │   │       │   │   │   │   └── update.py
│   │   │       │   │   │   └── configure.py
│   │   │       │   │   ├── finetune.py
│   │   │       │   │   ├── info/
│   │   │       │   │   │   ├── __init__.py
│   │   │       │   │   │   ├── info.py
│   │   │       │   │   │   ├── list_channels.py
│   │   │       │   │   │   └── list_components.py
│   │   │       │   │   ├── object_store/
│   │   │       │   │   │   ├── __init__.py
│   │   │       │   │   │   └── object_store.py
│   │   │       │   │   ├── registry/
│   │   │       │   │   │   ├── __init__.py
│   │   │       │   │   │   ├── publish.py
│   │   │       │   │   │   ├── pull.py
│   │   │       │   │   │   ├── registry.py
│   │   │       │   │   │   ├── remove.py
│   │   │       │   │   │   └── search.py
│   │   │       │   │   ├── start.py
│   │   │       │   │   ├── uninstall.py
│   │   │       │   │   ├── validate.py
│   │   │       │   │   └── workflow/
│   │   │       │   │       ├── __init__.py
│   │   │       │   │       ├── templates/
│   │   │       │   │       │   ├── __init__.py.j2
│   │   │       │   │       │   ├── config.yml.j2
│   │   │       │   │       │   ├── pyproject.toml.j2
│   │   │       │   │       │   ├── register.py.j2
│   │   │       │   │       │   └── workflow.py.j2
│   │   │       │   │       ├── workflow.py
│   │   │       │   │       └── workflow_commands.py
│   │   │       │   ├── entrypoint.py
│   │   │       │   ├── main.py
│   │   │       │   ├── plugin_loader.py
│   │   │       │   ├── register_workflow.py
│   │   │       │   └── type_registry.py
│   │   │       ├── data_models/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── agent.py
│   │   │       │   ├── api_server.py
│   │   │       │   ├── authentication.py
│   │   │       │   ├── common.py
│   │   │       │   ├── component.py
│   │   │       │   ├── component_ref.py
│   │   │       │   ├── config.py
│   │   │       │   ├── dataset_handler.py
│   │   │       │   ├── discovery_metadata.py
│   │   │       │   ├── embedder.py
│   │   │       │   ├── evaluate.py
│   │   │       │   ├── evaluate_config.py
│   │   │       │   ├── evaluate_runtime.py
│   │   │       │   ├── evaluator.py
│   │   │       │   ├── finetuning.py
│   │   │       │   ├── front_end.py
│   │   │       │   ├── function.py
│   │   │       │   ├── function_dependencies.py
│   │   │       │   ├── gated_field_mixin.py
│   │   │       │   ├── interactive.py
│   │   │       │   ├── interactive_http.py
│   │   │       │   ├── intermediate_step.py
│   │   │       │   ├── invocation_node.py
│   │   │       │   ├── llm.py
│   │   │       │   ├── logging.py
│   │   │       │   ├── memory.py
│   │   │       │   ├── middleware.py
│   │   │       │   ├── object_store.py
│   │   │       │   ├── openai_mcp.py
│   │   │       │   ├── optimizable.py
│   │   │       │   ├── optimizer.py
│   │   │       │   ├── profiler.py
│   │   │       │   ├── profiler_callback.py
│   │   │       │   ├── registry_handler.py
│   │   │       │   ├── retriever.py
│   │   │       │   ├── retry_mixin.py
│   │   │       │   ├── runtime_enum.py
│   │   │       │   ├── span.py
│   │   │       │   ├── ssl_verification_mixin.py
│   │   │       │   ├── step_adaptor.py
│   │   │       │   ├── streaming.py
│   │   │       │   ├── swe_bench_model.py
│   │   │       │   ├── telemetry_exporter.py
│   │   │       │   ├── thinking_mixin.py
│   │   │       │   ├── token_usage.py
│   │   │       │   ├── ttc_strategy.py
│   │   │       │   └── user_info.py
│   │   │       ├── embedder/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── azure_openai_embedder.py
│   │   │       │   ├── huggingface_embedder.py
│   │   │       │   ├── nim_embedder.py
│   │   │       │   ├── openai_embedder.py
│   │   │       │   └── register.py
│   │   │       ├── eval/
│   │   │       │   └── __init__.py
│   │   │       ├── experimental/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── decorators/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   └── experimental_warning_decorator.py
│   │   │       │   └── test_time_compute/
│   │   │       │       ├── __init__.py
│   │   │       │       ├── editing/
│   │   │       │       │   ├── __init__.py
│   │   │       │       │   ├── iterative_plan_refinement_editor.py
│   │   │       │       │   ├── llm_as_a_judge_editor.py
│   │   │       │       │   └── motivation_aware_summarization.py
│   │   │       │       ├── functions/
│   │   │       │       │   ├── __init__.py
│   │   │       │       │   ├── execute_score_select_function.py
│   │   │       │       │   ├── multi_llm_judge_function.py
│   │   │       │       │   ├── plan_select_execute_function.py
│   │   │       │       │   ├── ttc_tool_orchestration_function.py
│   │   │       │       │   └── ttc_tool_wrapper_function.py
│   │   │       │       ├── models/
│   │   │       │       │   ├── __init__.py
│   │   │       │       │   ├── editor_config.py
│   │   │       │       │   ├── scoring_config.py
│   │   │       │       │   ├── search_config.py
│   │   │       │       │   ├── selection_config.py
│   │   │       │       │   ├── stage_enums.py
│   │   │       │       │   ├── strategy_base.py
│   │   │       │       │   ├── tool_use_config.py
│   │   │       │       │   └── ttc_item.py
│   │   │       │       ├── register.py
│   │   │       │       ├── scoring/
│   │   │       │       │   ├── __init__.py
│   │   │       │       │   ├── llm_based_agent_scorer.py
│   │   │       │       │   ├── llm_based_plan_scorer.py
│   │   │       │       │   └── motivation_aware_scorer.py
│   │   │       │       ├── search/
│   │   │       │       │   ├── __init__.py
│   │   │       │       │   ├── multi_llm_generation.py
│   │   │       │       │   ├── multi_llm_planner.py
│   │   │       │       │   ├── multi_query_retrieval_search.py
│   │   │       │       │   └── single_shot_multi_plan_planner.py
│   │   │       │       └── selection/
│   │   │       │           ├── __init__.py
│   │   │       │           ├── best_of_n_selector.py
│   │   │       │           ├── llm_based_agent_output_selector.py
│   │   │       │           ├── llm_based_output_merging_selector.py
│   │   │       │           ├── llm_based_plan_selector.py
│   │   │       │           ├── llm_judge_selection.py
│   │   │       │           └── threshold_selector.py
│   │   │       ├── finetuning/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── finetuning_runtime.py
│   │   │       │   ├── interfaces/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── finetuning_runner.py
│   │   │       │   │   ├── trainer_adapter.py
│   │   │       │   │   └── trajectory_builder.py
│   │   │       │   └── utils/
│   │   │       │       ├── __init__.py
│   │   │       │       └── parsers/
│   │   │       │           ├── __init__.py
│   │   │       │           ├── base_parser.py
│   │   │       │           └── common.py
│   │   │       ├── front_ends/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── console/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── authentication_flow_handler.py
│   │   │       │   │   ├── console_front_end_config.py
│   │   │       │   │   ├── console_front_end_plugin.py
│   │   │       │   │   └── register.py
│   │   │       │   ├── cron/
│   │   │       │   │   └── __init__.py
│   │   │       │   ├── fastapi/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── async_jobs/
│   │   │       │   │   │   ├── __init__.py
│   │   │       │   │   │   ├── async_job.py
│   │   │       │   │   │   ├── dask_client_mixin.py
│   │   │       │   │   │   └── job_store.py
│   │   │       │   │   ├── auth_flow_handlers/
│   │   │       │   │   │   ├── __init__.py
│   │   │       │   │   │   ├── http_flow_handler.py
│   │   │       │   │   │   └── websocket_flow_handler.py
│   │   │       │   │   ├── execution_store.py
│   │   │       │   │   ├── fastapi_front_end_config.py
│   │   │       │   │   ├── fastapi_front_end_controller.py
│   │   │       │   │   ├── fastapi_front_end_plugin.py
│   │   │       │   │   ├── fastapi_front_end_plugin_worker.py
│   │   │       │   │   ├── html_snippets/
│   │   │       │   │   │   ├── __init__.py
│   │   │       │   │   │   └── auth_code_grant_success.py
│   │   │       │   │   ├── http_interactive_runner.py
│   │   │       │   │   ├── intermediate_steps_subscriber.py
│   │   │       │   │   ├── main.py
│   │   │       │   │   ├── message_handler.py
│   │   │       │   │   ├── message_validator.py
│   │   │       │   │   ├── register.py
│   │   │       │   │   ├── response_helpers.py
│   │   │       │   │   ├── routes/
│   │   │       │   │   │   ├── __init__.py
│   │   │       │   │   │   ├── async_generation.py
│   │   │       │   │   │   ├── auth.py
│   │   │       │   │   │   ├── chat.py
│   │   │       │   │   │   ├── common_utils.py
│   │   │       │   │   │   ├── execution.py
│   │   │       │   │   │   ├── generate.py
│   │   │       │   │   │   ├── health.py
│   │   │       │   │   │   ├── monitor.py
│   │   │       │   │   │   ├── static.py
│   │   │       │   │   │   ├── v1_chat_completions.py
│   │   │       │   │   │   └── websocket.py
│   │   │       │   │   ├── step_adaptor.py
│   │   │       │   │   └── utils.py
│   │   │       │   ├── register.py
│   │   │       │   └── simple_base/
│   │   │       │       ├── __init__.py
│   │   │       │       └── simple_front_end_plugin_base.py
│   │   │       ├── llm/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── aws_bedrock_llm.py
│   │   │       │   ├── azure_openai_llm.py
│   │   │       │   ├── dynamo_llm.py
│   │   │       │   ├── huggingface_inference_llm.py
│   │   │       │   ├── huggingface_llm.py
│   │   │       │   ├── litellm_llm.py
│   │   │       │   ├── nim_llm.py
│   │   │       │   ├── oci_llm.py
│   │   │       │   ├── openai_llm.py
│   │   │       │   ├── prediction_context.py
│   │   │       │   ├── register.py
│   │   │       │   └── utils/
│   │   │       │       ├── __init__.py
│   │   │       │       ├── constants.py
│   │   │       │       ├── env_config_value.py
│   │   │       │       ├── error.py
│   │   │       │       ├── hooks.py
│   │   │       │       ├── http_client.py
│   │   │       │       └── thinking.py
│   │   │       ├── memory/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── interfaces.py
│   │   │       │   └── models.py
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       ├── middleware/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── cache/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── cache_middleware.py
│   │   │       │   │   ├── cache_middleware_config.py
│   │   │       │   │   └── register.py
│   │   │       │   ├── common.py
│   │   │       │   ├── defense/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── defense_middleware.py
│   │   │       │   │   ├── defense_middleware_content_guard.py
│   │   │       │   │   ├── defense_middleware_data_models.py
│   │   │       │   │   ├── defense_middleware_output_verifier.py
│   │   │       │   │   ├── defense_middleware_pii.py
│   │   │       │   │   ├── defense_middleware_pre_tool_verifier.py
│   │   │       │   │   └── register.py
│   │   │       │   ├── dynamic/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── dynamic_function_middleware.py
│   │   │       │   │   ├── dynamic_middleware_config.py
│   │   │       │   │   └── register.py
│   │   │       │   ├── function_middleware.py
│   │   │       │   ├── logging/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── logging_middleware.py
│   │   │       │   │   ├── logging_middleware_config.py
│   │   │       │   │   └── register.py
│   │   │       │   ├── middleware.py
│   │   │       │   ├── red_teaming/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── red_teaming_middleware.py
│   │   │       │   │   ├── red_teaming_middleware_config.py
│   │   │       │   │   └── register.py
│   │   │       │   ├── register.py
│   │   │       │   ├── timeout/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── register.py
│   │   │       │   │   ├── timeout_middleware.py
│   │   │       │   │   └── timeout_middleware_config.py
│   │   │       │   └── utils/
│   │   │       │       ├── __init__.py
│   │   │       │       └── workflow_inventory.py
│   │   │       ├── object_store/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── in_memory_object_store.py
│   │   │       │   ├── interfaces.py
│   │   │       │   ├── models.py
│   │   │       │   └── register.py
│   │   │       ├── observability/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── exporter/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── base_exporter.py
│   │   │       │   │   ├── exporter.py
│   │   │       │   │   ├── file_exporter.py
│   │   │       │   │   ├── processing_exporter.py
│   │   │       │   │   ├── raw_exporter.py
│   │   │       │   │   └── span_exporter.py
│   │   │       │   ├── exporter_manager.py
│   │   │       │   ├── mixin/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── batch_config_mixin.py
│   │   │       │   │   ├── collector_config_mixin.py
│   │   │       │   │   ├── file_mixin.py
│   │   │       │   │   ├── file_mode.py
│   │   │       │   │   ├── redaction_config_mixin.py
│   │   │       │   │   ├── resource_conflict_mixin.py
│   │   │       │   │   ├── serialize_mixin.py
│   │   │       │   │   ├── tagging_config_mixin.py
│   │   │       │   │   └── type_introspection_mixin.py
│   │   │       │   ├── processor/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── batching_processor.py
│   │   │       │   │   ├── callback_processor.py
│   │   │       │   │   ├── falsy_batch_filter_processor.py
│   │   │       │   │   ├── intermediate_step_serializer.py
│   │   │       │   │   ├── processor.py
│   │   │       │   │   ├── processor_factory.py
│   │   │       │   │   ├── redaction/
│   │   │       │   │   │   ├── __init__.py
│   │   │       │   │   │   ├── contextual_redaction_processor.py
│   │   │       │   │   │   ├── contextual_span_redaction_processor.py
│   │   │       │   │   │   ├── redaction_processor.py
│   │   │       │   │   │   └── span_header_redaction_processor.py
│   │   │       │   │   └── span_tagging_processor.py
│   │   │       │   ├── register.py
│   │   │       │   └── utils/
│   │   │       │       ├── __init__.py
│   │   │       │       ├── dict_utils.py
│   │   │       │       ├── time_utils.py
│   │   │       │       └── tracing_utils.py
│   │   │       ├── parameter_optimization/
│   │   │       │   ├── __init__.py
│   │   │       │   └── eval_runtime_loader.py
│   │   │       ├── plugins/
│   │   │       │   └── .namespace
│   │   │       ├── profiler/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── callbacks/
│   │   │       │   │   └── __init__.py
│   │   │       │   ├── forecasting/
│   │   │       │   │   └── __init__.py
│   │   │       │   ├── inference_optimization/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── bottleneck_analysis/
│   │   │       │   │   │   └── __init__.py
│   │   │       │   │   └── experimental/
│   │   │       │   │       └── __init__.py
│   │   │       │   ├── parameter_optimization/
│   │   │       │   │   └── optimizer_callbacks.py
│   │   │       │   └── prediction_trie/
│   │   │       │       ├── __init__.py
│   │   │       │       ├── data_models.py
│   │   │       │       ├── metrics_accumulator.py
│   │   │       │       ├── serialization.py
│   │   │       │       ├── trie_builder.py
│   │   │       │       └── trie_lookup.py
│   │   │       ├── registry_handlers/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── local/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── local_handler.py
│   │   │       │   │   └── register_local.py
│   │   │       │   ├── metadata_factory.py
│   │   │       │   ├── package_utils.py
│   │   │       │   ├── pypi/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── pypi_handler.py
│   │   │       │   │   └── register_pypi.py
│   │   │       │   ├── register.py
│   │   │       │   ├── registry_handler_base.py
│   │   │       │   ├── rest/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── register_rest.py
│   │   │       │   │   └── rest_handler.py
│   │   │       │   └── schemas/
│   │   │       │       ├── __init__.py
│   │   │       │       ├── headers.py
│   │   │       │       ├── package.py
│   │   │       │       ├── publish.py
│   │   │       │       ├── pull.py
│   │   │       │       ├── remove.py
│   │   │       │       ├── search.py
│   │   │       │       └── status.py
│   │   │       ├── retriever/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── interface.py
│   │   │       │   ├── milvus/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── register.py
│   │   │       │   │   └── retriever.py
│   │   │       │   ├── models.py
│   │   │       │   ├── nemo_retriever/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── register.py
│   │   │       │   │   └── retriever.py
│   │   │       │   └── register.py
│   │   │       ├── runtime/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── loader.py
│   │   │       │   ├── metrics.py
│   │   │       │   ├── runner.py
│   │   │       │   ├── session.py
│   │   │       │   ├── user_manager.py
│   │   │       │   └── user_metadata.py
│   │   │       ├── settings/
│   │   │       │   ├── __init__.py
│   │   │       │   └── global_settings.py
│   │   │       ├── test/
│   │   │       │   └── .namespace
│   │   │       ├── tool/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── chat_completion.py
│   │   │       │   ├── code_execution/
│   │   │       │   │   ├── README.md
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── code_sandbox.py
│   │   │       │   │   ├── local_sandbox/
│   │   │       │   │   │   ├── .gitignore
│   │   │       │   │   │   ├── Dockerfile.sandbox
│   │   │       │   │   │   ├── __init__.py
│   │   │       │   │   │   ├── local_sandbox_server.py
│   │   │       │   │   │   ├── sandbox.requirements.txt
│   │   │       │   │   │   └── start_local_sandbox.sh
│   │   │       │   │   ├── register.py
│   │   │       │   │   └── utils.py
│   │   │       │   ├── datetime_tools.py
│   │   │       │   ├── document_search.py
│   │   │       │   ├── github_tools.py
│   │   │       │   ├── memory_tools/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── add_memory_tool.py
│   │   │       │   │   ├── delete_memory_tool.py
│   │   │       │   │   └── get_memory_tool.py
│   │   │       │   ├── nvidia_rag.py
│   │   │       │   ├── register.py
│   │   │       │   ├── retriever.py
│   │   │       │   └── server_tools.py
│   │   │       └── utils/
│   │   │           ├── __init__.py
│   │   │           ├── atif_converter.py
│   │   │           ├── atif_message_utils.py
│   │   │           ├── callable_utils.py
│   │   │           ├── data_models/
│   │   │           │   ├── __init__.py
│   │   │           │   └── schema_validator.py
│   │   │           ├── debugging_utils.py
│   │   │           ├── decorators.py
│   │   │           ├── dump_distro_mapping.py
│   │   │           ├── exception_handlers/
│   │   │           │   ├── __init__.py
│   │   │           │   ├── automatic_retries.py
│   │   │           │   └── schemas.py
│   │   │           ├── io/
│   │   │           │   ├── __init__.py
│   │   │           │   ├── model_processing.py
│   │   │           │   ├── supress_logs.py
│   │   │           │   └── yaml_tools.py
│   │   │           ├── log_levels.py
│   │   │           ├── log_utils.py
│   │   │           ├── metadata_utils.py
│   │   │           ├── optional_imports.py
│   │   │           ├── producer_consumer_queue.py
│   │   │           ├── reactive/
│   │   │           │   ├── __init__.py
│   │   │           │   ├── base/
│   │   │           │   │   ├── __init__.py
│   │   │           │   │   ├── observable_base.py
│   │   │           │   │   ├── observer_base.py
│   │   │           │   │   └── subject_base.py
│   │   │           │   ├── observable.py
│   │   │           │   ├── observer.py
│   │   │           │   ├── subject.py
│   │   │           │   └── subscription.py
│   │   │           ├── responses_api.py
│   │   │           ├── settings/
│   │   │           │   ├── __init__.py
│   │   │           │   └── global_settings.py
│   │   │           ├── string_utils.py
│   │   │           ├── type_converter.py
│   │   │           ├── type_utils.py
│   │   │           └── url_utils.py
│   │   └── tests/
│   │       ├── eval/
│   │       │   └── test_eval_callbacks.py
│   │       ├── nat/
│   │       │   ├── authentication/
│   │       │   │   ├── test_api_key_auth.py
│   │       │   │   ├── test_bearer_token_validator.py
│   │       │   │   ├── test_data_models.py
│   │       │   │   ├── test_http_basic_auth_exchanger.py
│   │       │   │   ├── test_oauth_exchanger.py
│   │       │   │   └── test_oauth_resource_server_config.py
│   │       │   ├── builder/
│   │       │   │   ├── test_builder.py
│   │       │   │   ├── test_call_tracker_integration.py
│   │       │   │   ├── test_component_utils.py
│   │       │   │   ├── test_context.py
│   │       │   │   ├── test_evaluator.py
│   │       │   │   ├── test_function.py
│   │       │   │   ├── test_function_group.py
│   │       │   │   ├── test_function_info.py
│   │       │   │   ├── test_function_path_stack.py
│   │       │   │   ├── test_interactive.py
│   │       │   │   ├── test_intermediate_step_manager.py
│   │       │   │   └── test_per_user_builder.py
│   │       │   ├── cli/
│   │       │   │   ├── cli_utils/
│   │       │   │   │   ├── test_config_override.py
│   │       │   │   │   └── test_validation.py
│   │       │   │   ├── commands/
│   │       │   │   │   ├── test_validate.py
│   │       │   │   │   └── test_workflow_commands.py
│   │       │   │   ├── test_plugin_loader.py
│   │       │   │   ├── test_register_workflow.py
│   │       │   │   └── test_type_registry.py
│   │       │   ├── data_models/
│   │       │   │   ├── test_auth_payload.py
│   │       │   │   ├── test_common.py
│   │       │   │   ├── test_component_ref.py
│   │       │   │   ├── test_config.py
│   │       │   │   ├── test_gated_field_mixin.py
│   │       │   │   ├── test_interactive_http.py
│   │       │   │   ├── test_optimizable.py
│   │       │   │   ├── test_optimizer_oracle_feedback.py
│   │       │   │   ├── test_thinking_mixin.py
│   │       │   │   └── test_user_info.py
│   │       │   ├── experimental/
│   │       │   │   ├── test_decorator.py
│   │       │   │   └── test_test_time_compute.py
│   │       │   ├── finetuning/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── interfaces/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── test_trainer.py
│   │       │   │   │   ├── test_trainer_adapter.py
│   │       │   │   │   └── test_trajectory_builder.py
│   │       │   │   └── utils/
│   │       │   │       ├── __init__.py
│   │       │   │       └── parsers/
│   │       │   │           ├── __init__.py
│   │       │   │           └── test_base_parser.py
│   │       │   ├── front_ends/
│   │       │   │   ├── auth_flow_handlers/
│   │       │   │   │   ├── mock_oauth2_server.py
│   │       │   │   │   ├── test_console_flow_handler.py
│   │       │   │   │   ├── test_http_flow_handler.py
│   │       │   │   │   ├── test_oauth_security_tests.py
│   │       │   │   │   └── test_websocket_flow_handler.py
│   │       │   │   ├── fastapi/
│   │       │   │   │   ├── conftest.py
│   │       │   │   │   ├── test_execution_store.py
│   │       │   │   │   ├── test_fastapi_front_end_config.py
│   │       │   │   │   ├── test_fastapi_front_end_plugin.py
│   │       │   │   │   ├── test_job_store.py
│   │       │   │   │   ├── test_openai_compatibility.py
│   │       │   │   │   ├── test_per_user_fastapi_integration.py
│   │       │   │   │   └── test_step_adaptor.py
│   │       │   │   └── test_message_validator.py
│   │       │   ├── llm/
│   │       │   │   ├── test_dynamic_prediction_hook.py
│   │       │   │   ├── test_dynamo_llm.py
│   │       │   │   ├── test_dynamo_prediction_trie.py
│   │       │   │   ├── test_oci_llm.py
│   │       │   │   ├── test_prediction_context.py
│   │       │   │   ├── test_runtime_prediction_e2e.py
│   │       │   │   └── utils/
│   │       │   │       ├── __init__.py
│   │       │   │       ├── _llm_configs.py
│   │       │   │       ├── test_hooks.py
│   │       │   │       ├── test_http_client.py
│   │       │   │       └── test_thinking.py
│   │       │   ├── middleware/
│   │       │   │   ├── test_cache_middleware.py
│   │       │   │   ├── test_defense_middleware.py
│   │       │   │   ├── test_defense_middleware_content_guard.py
│   │       │   │   ├── test_defense_middleware_output_verifier.py
│   │       │   │   ├── test_defense_middleware_pii.py
│   │       │   │   ├── test_defense_middleware_pre_tool_verifier.py
│   │       │   │   ├── test_dynamic_middleware.py
│   │       │   │   ├── test_middleware_components.py
│   │       │   │   ├── test_red_teaming_middleware.py
│   │       │   │   └── test_timeout_middleware.py
│   │       │   ├── object_store/
│   │       │   │   └── test_in_memory_object_store.py
│   │       │   ├── observability/
│   │       │   │   ├── exporter/
│   │       │   │   │   ├── test_base_exporter.py
│   │       │   │   │   ├── test_exporter.py
│   │       │   │   │   ├── test_file_exporter.py
│   │       │   │   │   ├── test_processing_exporter.py
│   │       │   │   │   ├── test_raw_exporter.py
│   │       │   │   │   └── test_span_exporter.py
│   │       │   │   ├── mixin/
│   │       │   │   │   ├── test_file_mixin.py
│   │       │   │   │   ├── test_serialize_mixin.py
│   │       │   │   │   └── test_type_introspection_mixin.py
│   │       │   │   ├── processor/
│   │       │   │   │   ├── redaction/
│   │       │   │   │   │   ├── test_contextual_redaction_processor.py
│   │       │   │   │   │   ├── test_contextual_span_redaction_processor.py
│   │       │   │   │   │   ├── test_redaction_processor.py
│   │       │   │   │   │   └── test_span_header_redaction_processor.py
│   │       │   │   │   ├── test_batching_processor.py
│   │       │   │   │   ├── test_intermediate_step_serializer.py
│   │       │   │   │   ├── test_processor.py
│   │       │   │   │   └── test_span_tagging_processor.py
│   │       │   │   ├── test_exporter_manager.py
│   │       │   │   └── utils/
│   │       │   │       ├── test_dict_utils.py
│   │       │   │       └── test_time_utils.py
│   │       │   ├── reactive/
│   │       │   │   ├── test_observable.py
│   │       │   │   ├── test_observer.py
│   │       │   │   ├── test_subject.py
│   │       │   │   └── test_subscription.py
│   │       │   ├── registry_handlers/
│   │       │   │   ├── test_local_handler.py
│   │       │   │   ├── test_metadata_factory.py
│   │       │   │   ├── test_package_utils.py
│   │       │   │   ├── test_pypi_handler.py
│   │       │   │   └── test_rest_handler.py
│   │       │   ├── retriever/
│   │       │   │   ├── test_configs.py
│   │       │   │   ├── test_models.py
│   │       │   │   └── test_retrievers.py
│   │       │   ├── runtime/
│   │       │   │   ├── test_runner.py
│   │       │   │   ├── test_runner_trace_ids.py
│   │       │   │   ├── test_session_manager.py
│   │       │   │   ├── test_session_traceparent.py
│   │       │   │   ├── test_user_manager.py
│   │       │   │   └── test_user_metadata.py
│   │       │   ├── server/
│   │       │   │   ├── config.yml
│   │       │   │   ├── legacy_server_config.yml
│   │       │   │   ├── server_config.yml
│   │       │   │   └── test_unified_api_server.py
│   │       │   ├── test_eval_deprecation_shim.py
│   │       │   ├── tools/
│   │       │   │   ├── test_chat_completion_error_response.py
│   │       │   │   ├── test_code_execution.py
│   │       │   │   ├── test_code_execution_sandbox.py
│   │       │   │   ├── test_datetime_tools.py
│   │       │   │   ├── test_retriever.py
│   │       │   │   └── test_tool_test_runner.py
│   │       │   └── utils/
│   │       │       ├── test_atif_converter.py
│   │       │       ├── test_converter.py
│   │       │       ├── test_decorators.py
│   │       │       ├── test_metadata_utils.py
│   │       │       ├── test_optional_imports.py
│   │       │       ├── test_retry_wrapper.py
│   │       │       ├── test_run_workflow.py
│   │       │       ├── test_string_utils.py
│   │       │       ├── test_type_utils.py
│   │       │       ├── test_url_utils.py
│   │       │       └── test_yaml_tools.py
│   │       ├── profiler/
│   │       │   └── parameter_optimization/
│   │       │       └── test_optimizer_callbacks.py
│   │       └── test_conftest.py
│   ├── nvidia_nat_crewai/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── crewai/
│   │   │               ├── __init__.py
│   │   │               ├── crewai_callback_handler.py
│   │   │               ├── llm.py
│   │   │               ├── register.py
│   │   │               └── tool_wrapper.py
│   │   └── tests/
│   │       ├── test_crewai_callback_handler.py
│   │       ├── test_crewai_choice_extraction.py
│   │       └── test_llm_crewai.py
│   ├── nvidia_nat_data_flywheel/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── data_flywheel/
│   │   │               └── observability/
│   │   │                   ├── __init__.py
│   │   │                   ├── exporter/
│   │   │                   │   ├── __init__.py
│   │   │                   │   ├── dfw_elasticsearch_exporter.py
│   │   │                   │   └── dfw_exporter.py
│   │   │                   ├── mixin/
│   │   │                   │   ├── __init__.py
│   │   │                   │   └── elasticsearch_mixin.py
│   │   │                   ├── processor/
│   │   │                   │   ├── __init__.py
│   │   │                   │   ├── dfw_record_processor.py
│   │   │                   │   └── trace_conversion/
│   │   │                   │       ├── __init__.py
│   │   │                   │       ├── adapter/
│   │   │                   │       │   ├── __init__.py
│   │   │                   │       │   ├── elasticsearch/
│   │   │                   │       │   │   ├── __init__.py
│   │   │                   │       │   │   ├── nim_converter.py
│   │   │                   │       │   │   └── openai_converter.py
│   │   │                   │       │   └── register.py
│   │   │                   │       ├── span_extractor.py
│   │   │                   │       ├── span_to_dfw.py
│   │   │                   │       └── trace_adapter_registry.py
│   │   │                   ├── register.py
│   │   │                   ├── schema/
│   │   │                   │   ├── __init__.py
│   │   │                   │   ├── provider/
│   │   │                   │   │   ├── __init__.py
│   │   │                   │   │   ├── nim_trace_source.py
│   │   │                   │   │   ├── openai_message.py
│   │   │                   │   │   └── openai_trace_source.py
│   │   │                   │   ├── register.py
│   │   │                   │   ├── schema_registry.py
│   │   │                   │   ├── sink/
│   │   │                   │   │   ├── __init__.py
│   │   │                   │   │   └── elasticsearch/
│   │   │                   │   │       ├── __init__.py
│   │   │                   │   │       ├── contract_version.py
│   │   │                   │   │       └── dfw_es_record.py
│   │   │                   │   ├── trace_container.py
│   │   │                   │   └── trace_source_base.py
│   │   │                   └── utils/
│   │   │                       ├── __init__.py
│   │   │                       └── deserialize.py
│   │   └── tests/
│   │       └── observability/
│   │           ├── exporter/
│   │           │   ├── test_dfw_elasticsearch_exporter.py
│   │           │   └── test_dfw_exporter.py
│   │           ├── mixin/
│   │           │   └── test_elasticsearch_mixin.py
│   │           ├── processor/
│   │           │   ├── test_dfw_record_processor.py
│   │           │   └── trace_conversion/
│   │           │       ├── adapter/
│   │           │       │   └── elasticsearch/
│   │           │       │       └── test_openai_converter.py
│   │           │       ├── test_span_extractor.py
│   │           │       ├── test_span_to_dfw_record.py
│   │           │       └── test_trace_adapter_registry.py
│   │           ├── schema/
│   │           │   ├── test_schema_registry.py
│   │           │   └── test_trace_container.py
│   │           └── utils/
│   │               └── test_deserialize.py
│   ├── nvidia_nat_eval/
│   │   ├── pyproject.toml
│   │   ├── scripts/
│   │   │   ├── compare_eval_runs.py
│   │   │   ├── print_atif_function_tree.py
│   │   │   └── print_ist_function_tree.py
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── eval/
│   │   │               ├── __init__.py
│   │   │               ├── cli/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── commands.py
│   │   │               │   └── evaluate.py
│   │   │               ├── data_models/
│   │   │               │   ├── __init__.py
│   │   │               │   └── evaluator_io.py
│   │   │               ├── dataset_handler/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── dataset_downloader.py
│   │   │               │   ├── dataset_filter.py
│   │   │               │   └── dataset_handler.py
│   │   │               ├── dataset_loader/
│   │   │               │   ├── __init__.py
│   │   │               │   └── register.py
│   │   │               ├── eval_callbacks.py
│   │   │               ├── evaluator/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── atif_base_evaluator.py
│   │   │               │   ├── atif_evaluator.py
│   │   │               │   ├── base_evaluator.py
│   │   │               │   └── evaluator_model.py
│   │   │               ├── exporters/
│   │   │               │   ├── __init__.py
│   │   │               │   └── file_eval_callback.py
│   │   │               ├── fastapi/
│   │   │               │   ├── __init__.py
│   │   │               │   └── routes.py
│   │   │               ├── register.py
│   │   │               ├── runners/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── config.py
│   │   │               │   └── multi_eval_runner.py
│   │   │               ├── runtime/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── atif_adapter.py
│   │   │               │   ├── builder.py
│   │   │               │   ├── eval_harness.py
│   │   │               │   ├── evaluate.py
│   │   │               │   ├── llm_validator.py
│   │   │               │   └── remote_workflow.py
│   │   │               └── utils/
│   │   │                   ├── __init__.py
│   │   │                   ├── intermediate_step_adapter.py
│   │   │                   ├── output_uploader.py
│   │   │                   └── tqdm_position_registry.py
│   │   └── tests/
│   │       ├── eval/
│   │       │   ├── conftest.py
│   │       │   ├── dataset_handler/
│   │       │   │   ├── test_dataset_downloader.py
│   │       │   │   ├── test_dataset_filter.py
│   │       │   │   └── test_dataset_handler.py
│   │       │   ├── dataset_loader/
│   │       │   │   ├── __init__.py
│   │       │   │   └── test_dataset_loader_registration.py
│   │       │   ├── evaluator/
│   │       │   │   ├── test_atif_base_evaluator.py
│   │       │   │   └── test_custom_evaluator.py
│   │       │   ├── resilience/
│   │       │   │   └── __init__.py
│   │       │   ├── runners/
│   │       │   │   ├── __init__.py
│   │       │   │   └── test_multi_eval_runner.py
│   │       │   ├── test_atif_adapter.py
│   │       │   ├── test_dependency_guidance.py
│   │       │   ├── test_eval_callback_builder.py
│   │       │   ├── test_eval_harness.py
│   │       │   ├── test_evaluate.py
│   │       │   ├── test_evaluate_callbacks.py
│   │       │   ├── test_file_eval_callback.py
│   │       │   ├── test_intermediate_step_adapter.py
│   │       │   ├── test_llm_retry.py
│   │       │   ├── test_llm_validator.py
│   │       │   ├── test_remote_evaluate.py
│   │       │   ├── test_workflow_eval_builder.py
│   │       │   └── utils/
│   │       │       ├── test_output_uploader.py
│   │       │       └── test_tqdm_position_registry_extra.py
│   │       └── fastapi/
│   │           └── test_evaluate_endpoints.py
│   ├── nvidia_nat_fastmcp/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── fastmcp/
│   │   │               ├── __init__.py
│   │   │               ├── cli/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── commands.py
│   │   │               │   └── utils.py
│   │   │               └── server/
│   │   │                   ├── __init__.py
│   │   │                   ├── front_end_config.py
│   │   │                   ├── front_end_plugin.py
│   │   │                   ├── front_end_plugin_worker.py
│   │   │                   ├── register_frontend.py
│   │   │                   └── tool_converter.py
│   │   └── tests/
│   │       └── test_fastmcp.py
│   ├── nvidia_nat_langchain/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── langchain/
│   │   │               ├── __init__.py
│   │   │               ├── agent/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── auto_memory_wrapper/
│   │   │               │   │   ├── __init__.py
│   │   │               │   │   ├── agent.py
│   │   │               │   │   ├── register.py
│   │   │               │   │   └── state.py
│   │   │               │   ├── base.py
│   │   │               │   ├── dual_node.py
│   │   │               │   ├── prompt_optimizer/
│   │   │               │   │   ├── __init__.py
│   │   │               │   │   ├── prompt.py
│   │   │               │   │   └── register.py
│   │   │               │   ├── react_agent/
│   │   │               │   │   ├── __init__.py
│   │   │               │   │   ├── agent.py
│   │   │               │   │   ├── output_parser.py
│   │   │               │   │   ├── prompt.py
│   │   │               │   │   ├── register.py
│   │   │               │   │   └── register_per_user_agent.py
│   │   │               │   ├── reasoning_agent/
│   │   │               │   │   ├── __init__.py
│   │   │               │   │   └── reasoning_agent.py
│   │   │               │   ├── register.py
│   │   │               │   ├── responses_api_agent/
│   │   │               │   │   ├── __init__.py
│   │   │               │   │   └── register.py
│   │   │               │   ├── rewoo_agent/
│   │   │               │   │   ├── __init__.py
│   │   │               │   │   ├── agent.py
│   │   │               │   │   ├── prompt.py
│   │   │               │   │   └── register.py
│   │   │               │   └── tool_calling_agent/
│   │   │               │       ├── __init__.py
│   │   │               │       ├── agent.py
│   │   │               │       └── register.py
│   │   │               ├── callback_handler.py
│   │   │               ├── control_flow/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── parallel_executor.py
│   │   │               │   ├── register.py
│   │   │               │   ├── router_agent/
│   │   │               │   │   ├── __init__.py
│   │   │               │   │   ├── agent.py
│   │   │               │   │   ├── prompt.py
│   │   │               │   │   └── register.py
│   │   │               │   └── sequential_executor.py
│   │   │               ├── dataset_loader/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── langsmith.py
│   │   │               │   └── register.py
│   │   │               ├── embedder.py
│   │   │               ├── eval/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── langsmith_custom_evaluator.py
│   │   │               │   ├── langsmith_evaluator.py
│   │   │               │   ├── langsmith_evaluator_adapter.py
│   │   │               │   ├── langsmith_judge.py
│   │   │               │   ├── register.py
│   │   │               │   ├── trajectory_evaluator.py
│   │   │               │   ├── tunable_rag_evaluator.py
│   │   │               │   └── utils.py
│   │   │               ├── langchain_parser.py
│   │   │               ├── langgraph_workflow.py
│   │   │               ├── langsmith/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── langsmith_evaluation_callback.py
│   │   │               │   ├── langsmith_optimization_callback.py
│   │   │               │   └── register.py
│   │   │               ├── llm.py
│   │   │               ├── register.py
│   │   │               ├── retriever.py
│   │   │               ├── tool_wrapper.py
│   │   │               └── tools/
│   │   │                   ├── __init__.py
│   │   │                   ├── code_generation_tool.py
│   │   │                   ├── exa_internet_search.py
│   │   │                   ├── register.py
│   │   │                   ├── tavily_internet_search.py
│   │   │                   └── wikipedia_search.py
│   │   └── tests/
│   │       ├── agent/
│   │       │   ├── prompt_optimizer/
│   │       │   │   ├── test_prompt_optimizer_register.py
│   │       │   │   └── test_prompt_templates.py
│   │       │   ├── test_auto_memory_wrapper.py
│   │       │   ├── test_base.py
│   │       │   ├── test_react.py
│   │       │   ├── test_reasoning_agent.py
│   │       │   ├── test_responses_api_agent.py
│   │       │   ├── test_rewoo.py
│   │       │   ├── test_router_agent.py
│   │       │   └── test_tool_calling.py
│   │       ├── control_flow/
│   │       │   ├── test_parallel_executor.py
│   │       │   └── test_sequential_executor.py
│   │       ├── dataset_loader/
│   │       │   └── test_langsmith_loader.py
│   │       ├── eval/
│   │       │   ├── __init__.py
│   │       │   ├── conftest.py
│   │       │   ├── test_langsmith_custom_evaluator.py
│   │       │   ├── test_langsmith_evaluator.py
│   │       │   ├── test_langsmith_judge.py
│   │       │   ├── test_trajectory_evaluate.py
│   │       │   ├── test_tunable_rag_evaluate.py
│   │       │   └── test_utils.py
│   │       ├── langsmith/
│   │       │   ├── test_langsmith_callback.py
│   │       │   ├── test_langsmith_integration.py
│   │       │   └── test_otel_matching.py
│   │       ├── test_dynamo_trie_loading.py
│   │       ├── test_embedder_langchain.py
│   │       ├── test_exa_internet_search.py
│   │       ├── test_finetuning_parser.py
│   │       ├── test_langchain_agents.py
│   │       ├── test_langchain_callback_handler.py
│   │       ├── test_langchain_parser.py
│   │       ├── test_langgraph_workflow.py
│   │       ├── test_llm_langchain.py
│   │       └── test_tavily_internet_search.py
│   ├── nvidia_nat_llama_index/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── llama_index/
│   │   │               ├── __init__.py
│   │   │               ├── callback_handler.py
│   │   │               ├── embedder.py
│   │   │               ├── llama_index_parser.py
│   │   │               ├── llm.py
│   │   │               ├── register.py
│   │   │               └── tool_wrapper.py
│   │   └── tests/
│   │       ├── test_embedder_llama_index.py
│   │       ├── test_llama_index_agents.py
│   │       ├── test_llama_index_callback_handler.py
│   │       ├── test_llama_index_parser.py
│   │       └── test_llm_llama_index.py
│   ├── nvidia_nat_mcp/
│   │   ├── pyproject.toml
│   │   ├── scripts/
│   │   │   ├── check_mcp_auth_cookie.py
│   │   │   └── check_mcp_auth_jwt.py
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── mcp/
│   │   │               ├── __init__.py
│   │   │               ├── auth/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── auth_flow_handler.py
│   │   │               │   ├── auth_provider.py
│   │   │               │   ├── auth_provider_config.py
│   │   │               │   ├── register.py
│   │   │               │   └── service_account/
│   │   │               │       ├── __init__.py
│   │   │               │       ├── provider.py
│   │   │               │       ├── provider_config.py
│   │   │               │       └── token_client.py
│   │   │               ├── cli/
│   │   │               │   ├── __init__.py
│   │   │               │   └── commands.py
│   │   │               ├── client/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── client_base.py
│   │   │               │   ├── client_config.py
│   │   │               │   ├── client_impl.py
│   │   │               │   └── fastapi_routes.py
│   │   │               ├── exception_handler.py
│   │   │               ├── exceptions.py
│   │   │               ├── register.py
│   │   │               ├── server/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── front_end_config.py
│   │   │               │   ├── front_end_plugin.py
│   │   │               │   ├── front_end_plugin_worker.py
│   │   │               │   ├── introspection_token_verifier.py
│   │   │               │   ├── memory_profiler.py
│   │   │               │   ├── register_frontend.py
│   │   │               │   └── tool_converter.py
│   │   │               └── utils.py
│   │   └── tests/
│   │       ├── cli/
│   │       │   └── test_mcp_cli.py
│   │       ├── client/
│   │       │   ├── test_mcp_auth_provider.py
│   │       │   ├── test_mcp_auth_timeout.py
│   │       │   ├── test_mcp_client_base.py
│   │       │   ├── test_mcp_client_impl.py
│   │       │   ├── test_mcp_schema.py
│   │       │   ├── test_mcp_service_account.py
│   │       │   ├── test_mcp_session_management.py
│   │       │   └── test_mcp_token_storage.py
│   │       └── server/
│   │           ├── test_add_root_level_routes.py
│   │           ├── test_main.py
│   │           ├── test_mcp_client_endpoint.py
│   │           ├── test_mcp_custom_routes.py
│   │           ├── test_mcp_debug_routes.py
│   │           ├── test_mcp_front_end_config.py
│   │           ├── test_mcp_front_end_plugin.py
│   │           ├── test_mcp_frontend_register.py
│   │           ├── test_memory_profiler.py
│   │           └── test_tool_converter.py
│   ├── nvidia_nat_mem0ai/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── mem0ai/
│   │   │               ├── __init__.py
│   │   │               ├── mem0_editor.py
│   │   │               ├── memory.py
│   │   │               └── register.py
│   │   └── tests/
│   │       └── test_mem0_editor.py
│   ├── nvidia_nat_memmachine/
│   │   ├── README.md
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           ├── __init__.py
│   │   │           └── memmachine/
│   │   │               ├── __init__.py
│   │   │               ├── memmachine_editor.py
│   │   │               ├── memory.py
│   │   │               └── register.py
│   │   └── tests/
│   │       ├── test_add_and_retrieve.py
│   │       ├── test_memmachine_api_calls.py
│   │       ├── test_memmachine_editor.py
│   │       ├── test_memmachine_integration.py
│   │       └── test_memory.py
│   ├── nvidia_nat_mysql/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       └── plugins/
│   │   │           └── mysql/
│   │   │               ├── __init__.py
│   │   │               ├── mysql_object_store.py
│   │   │               ├── object_store.py
│   │   │               └── register.py
│   │   └── tests/
│   │       └── test_mysql_object_store.py
│   ├── nvidia_nat_nemo_customizer/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── customizer/
│   │   │               ├── __init__.py
│   │   │               ├── dpo/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── config.py
│   │   │               │   ├── register.py
│   │   │               │   ├── trainer.py
│   │   │               │   ├── trainer_adapter.py
│   │   │               │   └── trajectory_builder.py
│   │   │               └── register.py
│   │   └── tests/
│   │       ├── conftest.py
│   │       ├── test_dpo_config.py
│   │       ├── test_dpo_trajectory_builder.py
│   │       └── test_nemo_customizer.py
│   ├── nvidia_nat_openpipe_art/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── openpipe/
│   │   │               ├── __init__.py
│   │   │               ├── config.py
│   │   │               ├── register.py
│   │   │               ├── trainer.py
│   │   │               ├── trainer_adapter.py
│   │   │               └── trajectory_builder.py
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── conftest.py
│   │       ├── test_trainer.py
│   │       ├── test_trainer_adapter.py
│   │       └── test_trajectory_builder.py
│   ├── nvidia_nat_opentelemetry/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── opentelemetry/
│   │   │               ├── __init__.py
│   │   │               ├── mixin/
│   │   │               │   ├── __init__.py
│   │   │               │   └── otlp_span_exporter_mixin.py
│   │   │               ├── otel_span.py
│   │   │               ├── otel_span_exporter.py
│   │   │               ├── otlp_span_adapter_exporter.py
│   │   │               ├── otlp_span_redaction_adapter_exporter.py
│   │   │               ├── register.py
│   │   │               └── span_converter.py
│   │   └── tests/
│   │       └── observability/
│   │           ├── test_otel_span_ids.py
│   │           ├── test_otlp_span_adapter_exporter.py
│   │           ├── test_otlp_span_adapter_integration.py
│   │           └── test_otlp_span_redaction_adapter_exporter.py
│   ├── nvidia_nat_phoenix/
│   │   ├── pyproject.toml
│   │   └── src/
│   │       └── nat/
│   │           ├── meta/
│   │           │   └── pypi.md
│   │           └── plugins/
│   │               └── phoenix/
│   │                   ├── __init__.py
│   │                   ├── mixin/
│   │                   │   ├── __init__.py
│   │                   │   └── phoenix_mixin.py
│   │                   ├── phoenix_exporter.py
│   │                   ├── register.py
│   │                   └── scripts/
│   │                       ├── __init__.py
│   │                       └── export_trajectory_to_phoenix/
│   │                           ├── README.md
│   │                           ├── __init__.py
│   │                           ├── atif_trajectory_exporter.py
│   │                           ├── atif_trajectory_phoenix_exporter.py
│   │                           └── export_atif_trajectory_to_phoenix.py
│   ├── nvidia_nat_profiler/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── profiler/
│   │   │               ├── __init__.py
│   │   │               ├── calc/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── calc_runner.py
│   │   │               │   ├── calculations.py
│   │   │               │   ├── data_models.py
│   │   │               │   └── plot.py
│   │   │               ├── callbacks/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── base_callback_class.py
│   │   │               │   └── token_usage_base_model.py
│   │   │               ├── cli/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── commands.py
│   │   │               │   └── sizing.py
│   │   │               ├── data_frame_row.py
│   │   │               ├── data_models.py
│   │   │               ├── decorators/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── framework_wrapper.py
│   │   │               │   ├── function_tracking.py
│   │   │               │   └── latency.py
│   │   │               ├── forecasting/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── config.py
│   │   │               │   ├── model_trainer.py
│   │   │               │   └── models/
│   │   │               │       ├── __init__.py
│   │   │               │       ├── forecasting_base_model.py
│   │   │               │       ├── linear_model.py
│   │   │               │       └── random_forest_regressor.py
│   │   │               ├── inference_metrics_model.py
│   │   │               ├── inference_optimization/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── bottleneck_analysis/
│   │   │               │   │   ├── __init__.py
│   │   │               │   │   ├── nested_stack_analysis.py
│   │   │               │   │   └── simple_stack_analysis.py
│   │   │               │   ├── data_models.py
│   │   │               │   ├── dynamo_metrics.py
│   │   │               │   ├── experimental/
│   │   │               │   │   ├── __init__.py
│   │   │               │   │   ├── concurrency_spike_analysis.py
│   │   │               │   │   └── prefix_span_analysis.py
│   │   │               │   ├── llm_metrics.py
│   │   │               │   ├── prompt_caching.py
│   │   │               │   ├── token_uniqueness.py
│   │   │               │   └── workflow_runtimes.py
│   │   │               ├── intermediate_property_adapter.py
│   │   │               ├── profile_runner.py
│   │   │               ├── register.py
│   │   │               ├── runtime_evaluator/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── atif_evaluate.py
│   │   │               │   ├── evaluate.py
│   │   │               │   └── register.py
│   │   │               └── utils.py
│   │   └── tests/
│   │       ├── calc/
│   │       │   └── test_calc_runner.py
│   │       ├── decorators/
│   │       │   ├── test_function_tracking.py
│   │       │   └── test_latency.py
│   │       ├── forecasting/
│   │       │   └── test_model_trainer.py
│   │       ├── metrics/
│   │       │   ├── test_common_prefixes.py
│   │       │   ├── test_concurrency_spike.py
│   │       │   ├── test_llm_metrics.py
│   │       │   ├── test_nested_bottleneck.py
│   │       │   ├── test_prefix_span.py
│   │       │   ├── test_simple_bottleneck.py
│   │       │   └── test_token_uniqueness.py
│   │       ├── profiler/
│   │       │   ├── prediction_trie/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── test_data_models.py
│   │       │   │   ├── test_metrics_accumulator.py
│   │       │   │   ├── test_serialization.py
│   │       │   │   ├── test_trie_builder.py
│   │       │   │   └── test_trie_lookup.py
│   │       │   └── test_runtime_evaluator_atif.py
│   │       ├── test_percentile_interval_computation.py
│   │       ├── test_prediction_trie_e2e.py
│   │       ├── test_prediction_trie_integration.py
│   │       ├── test_producer_consumer_queue.py
│   │       └── test_profiler.py
│   ├── nvidia_nat_rag/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── rag/
│   │   │               ├── __init__.py
│   │   │               ├── client.py
│   │   │               ├── config.py
│   │   │               ├── models.py
│   │   │               └── register.py
│   │   └── tests/
│   │       ├── test_rag_function.py
│   │       ├── test_rag_models.py
│   │       └── test_tools.py
│   ├── nvidia_nat_ragaai/
│   │   ├── pyproject.toml
│   │   └── src/
│   │       └── nat/
│   │           ├── meta/
│   │           │   └── pypi.md
│   │           └── plugins/
│   │               └── ragaai/
│   │                   ├── __init__.py
│   │                   ├── mixin/
│   │                   │   ├── __init__.py
│   │                   │   └── ragaai_catalyst_mixin.py
│   │                   ├── ragaai_catalyst_exporter.py
│   │                   └── register.py
│   ├── nvidia_nat_ragas/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── ragas/
│   │   │               ├── __init__.py
│   │   │               ├── rag_evaluator/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── atif_evaluate.py
│   │   │               │   ├── data_models.py
│   │   │               │   ├── evaluate.py
│   │   │               │   ├── llm_adapter.py
│   │   │               │   ├── register.py
│   │   │               │   └── utils.py
│   │   │               └── register.py
│   │   └── tests/
│   │       ├── conftest.py
│   │       └── test_rag_evaluate.py
│   ├── nvidia_nat_redis/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── redis/
│   │   │               ├── __init__.py
│   │   │               ├── memory.py
│   │   │               ├── object_store.py
│   │   │               ├── redis_editor.py
│   │   │               ├── redis_object_store.py
│   │   │               ├── register.py
│   │   │               └── schema.py
│   │   └── tests/
│   │       ├── test_redis_editor.py
│   │       └── test_redis_object_store.py
│   ├── nvidia_nat_s3/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       └── plugins/
│   │   │           └── s3/
│   │   │               ├── __init__.py
│   │   │               ├── object_store.py
│   │   │               ├── register.py
│   │   │               └── s3_object_store.py
│   │   └── tests/
│   │       └── test_s3_object_store.py
│   ├── nvidia_nat_security/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── security/
│   │   │               ├── __init__.py
│   │   │               ├── cli/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── commands.py
│   │   │               │   └── red_teaming/
│   │   │               │       ├── __init__.py
│   │   │               │       ├── red_teaming.py
│   │   │               │       └── red_teaming_utils.py
│   │   │               ├── eval/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── red_teaming_evaluator/
│   │   │               │   │   ├── __init__.py
│   │   │               │   │   ├── data_models.py
│   │   │               │   │   ├── evaluate.py
│   │   │               │   │   ├── filter_conditions.py
│   │   │               │   │   └── register.py
│   │   │               │   └── runners/
│   │   │               │       ├── __init__.py
│   │   │               │       └── red_teaming_runner/
│   │   │               │           ├── __init__.py
│   │   │               │           ├── config.py
│   │   │               │           ├── report_utils.py
│   │   │               │           └── runner.py
│   │   │               └── register.py
│   │   └── tests/
│   │       └── eval/
│   │           ├── red_teaming_evaluator/
│   │           │   ├── __init__.py
│   │           │   ├── fake_chat_models.py
│   │           │   ├── test_evaluate.py
│   │           │   └── test_filter_conditions.py
│   │           └── runners/
│   │               └── red_teaming_runner/
│   │                   ├── __init__.py
│   │                   ├── test_red_teaming_config.py
│   │                   └── test_red_teaming_runner.py
│   ├── nvidia_nat_semantic_kernel/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── semantic_kernel/
│   │   │               ├── __init__.py
│   │   │               ├── callback_handler.py
│   │   │               ├── llm.py
│   │   │               ├── register.py
│   │   │               └── tool_wrapper.py
│   │   └── tests/
│   │       ├── test_llm_sk.py
│   │       ├── test_sk_callback_handler.py
│   │       └── test_sk_decorator.py
│   ├── nvidia_nat_strands/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── strands/
│   │   │               ├── __init__.py
│   │   │               ├── callback_handler.py
│   │   │               ├── llm.py
│   │   │               ├── register.py
│   │   │               └── tool_wrapper.py
│   │   └── tests/
│   │       ├── test_callback_handler.py
│   │       ├── test_strands_callback_handler.py
│   │       ├── test_strands_integration.py
│   │       ├── test_strands_llm.py
│   │       └── test_strands_tool_wrapper.py
│   ├── nvidia_nat_test/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   ├── _utils/
│   │   │   │   ├── configs.py
│   │   │   │   └── dask_utils.py
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── test/
│   │   │           ├── __init__.py
│   │   │           ├── embedder.py
│   │   │           ├── functions.py
│   │   │           ├── llm.py
│   │   │           ├── memory.py
│   │   │           ├── object_store_tests.py
│   │   │           ├── observability.py
│   │   │           ├── plugin.py
│   │   │           ├── register.py
│   │   │           ├── tool_test_runner.py
│   │   │           └── utils.py
│   │   └── tests/
│   │       ├── test_env_fixtures.py
│   │       ├── test_test_llm.py
│   │       └── test_test_utils.py
│   ├── nvidia_nat_vanna/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── vanna/
│   │   │               ├── __init__.py
│   │   │               ├── db_utils.py
│   │   │               ├── execute_db_query.py
│   │   │               ├── register.py
│   │   │               ├── text2sql.py
│   │   │               ├── training_db_schema.py
│   │   │               └── vanna_utils.py
│   │   ├── tests/
│   │   │   └── test_vanna_db_utils.py
│   │   ├── text2sql_config.yml
│   │   └── text2sql_training_config.yml
│   ├── nvidia_nat_weave/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── weave/
│   │   │               ├── __init__.py
│   │   │               ├── fastapi_plugin_worker.py
│   │   │               ├── register.py
│   │   │               ├── weave_eval_callback.py
│   │   │               └── weave_exporter.py
│   │   └── tests/
│   │       ├── test_fastapi_plugin_worker.py
│   │       └── test_weave_eval_callback.py
│   └── nvidia_nat_zep_cloud/
│       ├── pyproject.toml
│       └── src/
│           └── nat/
│               ├── meta/
│               │   └── pypi.md
│               └── plugins/
│                   └── zep_cloud/
│                       ├── __init__.py
│                       ├── memory.py
│                       ├── register.py
│                       └── zep_editor.py
├── pyproject.toml
├── scripts/
│   ├── bootstrap_milvus.sh
│   ├── langchain_web_ingest.py
│   ├── sitemap_scraper.py
│   └── web_utils.py
└── test_data/
    ├── azure_openai_e2e.yaml
    ├── config.yaml
    ├── docker-compose.services.yml
    ├── echo.yaml
    ├── invalid_yaml.yaml
    ├── missing_section_config.yaml
    ├── missing_type_config.yaml
    ├── nginx/
    │   ├── Dockerfile
    │   └── nginx.conf
    └── piston/
        └── Dockerfile

================================================
FILE CONTENTS
================================================

================================================
FILE: .coderabbit.yaml
================================================
# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Docs: https://docs.coderabbit.ai/getting-started/configure-coderabbit/
language: "en-US"
reviews:
  review_status: true
  collapse_walkthrough: false
  pre_merge_checks:
    title:
      mode: error
      requirements: "Title should be concise, and descriptive, and use imperative mood (max ~72 chars)."
    description:
      mode: warning
    issue_assessment:
      mode: warning
  auto_review:
    base_branches: ["develop", "release/.*"]
    enabled: true
    drafts: false
    auto_incremental_review: true

  poem: false
  sequence_diagrams: true
  suggested_reviewers: false

  path_instructions:
    - path: "**/*"
      instructions: >-
        # Code Review Instructions

        - Ensure the code follows best practices and coding standards.
        - For **Python** code, follow
          [PEP 20](https://peps.python.org/pep-0020/) and
          [PEP 8](https://peps.python.org/pep-0008/) for style guidelines.
        - Check for security vulnerabilities and potential issues.
        - Python methods should use type hints for all parameters and return values (except for return values of `None`,
          in that situation no return type hint is needed).
          Example:
            ```python
            def my_function(param1: int, param2: str) -> bool:
                pass
            ```
        - For **Python exception handling**, ensure proper stack trace preservation:
          - When re-raising exceptions: use bare `raise` statements to maintain the original stack trace,
            and use `logger.error()` (not `logger.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.txt` file, words that might appear to be
          spelling mistakes but are listed in the `ci/vale/styles/config/vocabularies/nat/accept.txt` file are OK.
        - Documentation in Markdown files should not contain usage of a possessive 's with inanimate objects
          (ex: "the system's performance" should be "the performance of the system").
        - Documentation in Markdown files should not use NAT as an acronym, always spell out NeMo Agent Toolkit.
          The exception to this rule is when referring to package names or code identifiers that contain "nat", these
          should always be surrounded by backticks (ex: `nvidia-nat`), and be lowercase.


        # 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.

        # Common Bugs to Look For
        - Pydantic models using one of the `SecretStr`, `SerializableSecretStr`, or `OptionalSecretStr` with a default
          defined as `default=""`, creates a bug where the field will be initialized as `str` and not as an instance of
          `SecretStr`. Instead, use `default=None` for optional secret fields such as `OptionalSecretStr` or with a
          `default_factory=lambda: SerializableSecretStr("")` for non-optional secret fields such as `SerializableSecretStr`.
          The `default_factory` approach is preferred for non-optional secret fields to ensure that the field is always
          returns a unique instance.

    - path: "docs/source/**/*"
      instructions: >-
        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/_static` directory.


        # Documentation Categories

        Ensure documentation is placed in the correct category:

        - `get-started/`: Introductory documentation for new users
          - `get-started/tutorials/`: Step-by-step learning guides
        - `build-workflows/`: Workflow creation, configuration, adding remote MCP tools or A2A agents
        - `run-workflows/`: Execution, observability, serving workflows via MCP and A2A protocols
        - `improve-workflows/`: Evaluation and optimization guides
        - `components/`: Specific component implementations (agents, tools, connectors)
        - `extend/`: Custom component development and testing (not core library contributions)
        - `reference/`: Python and REST API documentation only
        - `resources/`: Project information (licensing, FAQs)
          - `resources/contributing/`: Development environment and contribution guides


        Placement rules:

        1. Component implementations always belong in `components/`, not `build-workflows/`
        2. API documentation belongs only in `reference/`
        3. Using remote MCP tools or A2A agents should be placed in `build-workflows/`
        4. Serving workflows via MCP/A2A should be placed in `run-workflows/`

    - path: "examples/**/*"
      instructions: >-
        - 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 a `pyproject.toml` file. Optionally, it might also contain scripts in a `scripts/` directory.
        - If an example contains a `pyproject.toml` file, it should be added to the `examples` list in the root `pyproject.toml` file.
        - If an example contains a tests directory, it should contain a `pyproject.toml` file.
        - 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 named `data/`, and should
          be checked into git-lfs.

    - path: "packages/nvidia_nat_core/src/nat/**/*"
      instructions: >-
        This directory contains the core functionality of the toolkit. Changes should prioritize backward compatibility.

    - path: "packages/nvidia_nat_core/src/nat/eval/**/*"
      instructions: >-
        - This is a deprecated compatibility shim area and should not grow.
        - Flag any PR that adds new files under this path as a blocking issue.
        - New evaluation code should be added under `packages/nvidia_nat_eval/src/nat/plugins/eval/` instead.
        - Changes in this path should be limited to compatibility-only fixes that are explicitly justified in PR notes.

    - path: "packages/**/*"
      instructions: >-
        - This directory contains packages for the toolkit, each should contain a `pyproject.toml` file.
        - Not all packages contain Python code, if they do they should also contain their own set of tests, in a
          `tests/` directory at the same level as the `pyproject.toml` file.
    - path: "packages/*/pyproject.toml"
      instructions: >-
        - The `pyproject.toml` file should never declare a dependency on the `nvidia-nat` meta package.
        - When adding a new package, that new package name (as defined in the `pyproject.toml` file) should
          probably be added as a dependency to the most extra in the root `pyproject.toml` file.
        - `nvidia-nat-core` should likely be listed as a dependency.
        - `nvidia-nat-test` should likely be listed as an optional dependency in the `test` extra
        - A single dependency should be listed on each line and should always have a version specifier.
        - All dependencies should be listed under the `[tool.setuptools_dynamic_dependencies]` section
        - Any dependency that is an NVIDIA NeMo Agent Toolkit package should be declared with a version constraint of `== {version}`

    - path: "packages/nvidia_nat_core/pyproject.toml"
      instructions: >-
        - This package is part of the thin-core strategy; default to minimizing direct dependencies.
        - Treat any new dependency addition as high-risk and require explicit justification in PR review notes.
        - Prefer moving framework-specific or optional capabilities into non-core plugin packages instead of adding dependencies here.
        - If a new dependency is unavoidable, confirm it is required by core contracts/runtime and not by optional evaluators, exporters, profiling, or framework integrations.

    - path: "packages/nvidia_nat_eval/pyproject.toml"
      instructions: >-
        - This package follows a thin-core eval strategy; prioritize keeping dependencies minimal.
        - Treat any new dependency addition as high-risk and require explicit justification in PR review notes.
        - Prefer package-affinity placement (framework/profiler/security/exporter packages) instead of adding dependencies here.
        - If a new dependency is unavoidable, confirm it supports core harness/contracts only and is not better hosted in optional packages.

    - path: "**/tests/**/*.py"
      instructions: >-
        - Ensure that tests are comprehensive, cover edge cases, and validate the functionality of the code.
        - Test functions should be named using the `test_` prefix, using snake_case.
        - Any frequently repeated code should be extracted into pytest fixtures.
        - Pytest fixtures should define the name argument when applying the pytest.fixture decorator. The fixture
          function being decorated should be named using either a `fixture_` prefix or `_fixture` suffix, using snake_case. Example:
            @pytest.fixture(name="my_custom_config")
            def my_custom_config_fixture():
                pass
        - Do NOT add `@pytest.mark.asyncio` to any test. Async tests are automatically detected and run by the
          async runner - the decorator is unnecessary clutter.

    - path: "examples/README.md"
      instructions: >-
        - Ensure that the README.md file is up-to-date with the latest changes in the project.
        - Ensure that there is an entry for each example under the examples directory which contains a README.md file in the examples list.
        - Any added examples should be added to the README.md file.
        - Any removed examples should be removed from the README.md file.
        - Example entries should be categorized by the directory they are located in.

    - path: "**/pyproject.toml"
      instructions: >-
        # pyproject.toml example section review instructions
        - Ensure that for any examples that are added or removed, the examples list in the pyproject.toml file is updated accordingly.
          This is only necessary if the example added contains a pyproject.toml file (e.g. it is installable as a package)
        - All added examples must have a `nat_` prefix within the `uv.sources` name. The path to the example does NOT need to have this prefix. If the example does not have a `nat_` prefix, it should be added.

  auto_apply_labels: true
  suggested_labels: true
  labeling_instructions:
    - label: "! - Release"
      instructions: >-
        You should only apply this label when the source branch has a name matching the regex pattern `release/\d+\.\d+`
        and the target branch is `main`.
    - label: DO NOT MERGE
      instructions: >-
        Apply this label to PRs that should not be merged due to critical issues, incomplete work, or other blocking
        concerns. Check the PR description for specific details about why it should not be merged. There is no need to
        apply this label to draft PRs.
    - label: duplicate
      instructions: >-
        Apply this label when the PR addresses the same issue or implements the same feature as another existing
        PR or issue.
    - label: invalid
      instructions: >-
        Apply this label when the PR contains invalid changes, doesn't follow project guidelines, or has fundamental
        issues that make it unsuitable for the project.

  tools:
    ruff:
      enabled: true
    yamllint:
      enabled: true
    markdownlint:
      enabled: true
    gitleaks:
      enabled: true
    osvScanner:
      enabled: true


================================================
FILE: .cursor/rules/cursor-rules.mdc
================================================
---
description: Follow these rules when the user's request involves creating, modifying, organizing, or structuring Cursor rules within the project
globs:
alwaysApply: false
---
# Cursor Rules Location

How to add new cursor rules to the project

1. Always place rule files in PROJECT_ROOT/.cursor/rules/:
    ```
    .cursor/rules/
    ├── your-rule-name.mdc
    ├── another-rule.mdc
    └── ...
    ```

2. Follow the naming convention:
    - Use kebab-case for filenames
    - Always use .mdc extension
    - Make names descriptive of the rule's purpose

3. Directory structure:
    ```
    PROJECT_ROOT/
    ├── .cursor/
    │   └── rules/
    │       ├── your-rule-name.mdc
    │       └── ...
    └── ...
    ```

4. For related rules sharing the same topic, create a subdirectory:
    ```
    .cursor/rules/
    ├── topic-name/
    │   ├── general.mdc          # General rules for this topic
    │   ├── specific-rule.mdc    # Specific rules within the topic
    │   └── another-rule.mdc
    ├── another-topic/
    │   ├── general.mdc
    │   └── specific-rule.mdc
    └── standalone-rule.mdc
    ```

5. When creating topic subdirectories:
    - Use kebab-case for directory names
    - Always include a `general.mdc` file with overarching guidelines for the topic
    - Place specific rules as separate .mdc files within the subdirectory
    - Example: `nat-cli/` folder contains general NAT CLI rules in `general.mdc` and specific command rules in separate files

6. For `general.mdc` files in subdirectories:
    - Always include a "Referenced Documentation" section that lists all documentation referenced in the rules
    - Format documentation references with descriptive names and brief descriptions
    - Reference the documentation section in the main rules instead of directly linking to documentation
    - Example structure:
    ```markdown
    # General Rules for [Topic]

    ## Referenced Documentation

    - **Documentation Name**: [filename.md](mdc:path/to/filename.md) - Brief description of the documentation
    - **Another Doc**: [another.md](mdc:path/to/another.md) - Description of this documentation

    ## Rules

    - Rule content referencing "the documentation listed in the Referenced Documentation section above"
    ```

7. Writing effective descriptions for Cursor rules:
    - **Start with "Follow these rules when"**: All descriptions should begin with this consistent phrase
    - **Use specific trigger conditions**: Clearly define when the rule should be requested by the agent
    - **Include relevant action verbs**: Use precise verbs like "creating", "modifying", "implementing", "configuring", "adding", "installing", "evaluating", etc.
    - **Be comprehensive but concise**: Cover all relevant scenarios without being overly verbose
    - **Use consistent terminology**: Match the language used in the project (e.g., "NAT workflows", "NAT CLI commands")
    - **Check for typos**: Ensure proper spelling and grammar (avoid errors like "ollow" instead of "Follow")
    - **Examples of good descriptions:**
      - "Follow these rules when the user's request involves creating, modifying, organizing, or structuring Cursor rules within the project"
      - "Follow these rules when the user's request involves NAT CLI commands, operations, or functionality"
      - "Follow these rules when the user's request involves implementing, adding, creating, or modifying functions within NAT workflows"
    - **Avoid overly narrow descriptions**: Don't limit to just one action when the rule covers multiple related scenarios
    - **Use "user's request involves" pattern**: This clearly indicates the trigger condition for the agent

8. Never place rule files:
    - In the project root
    - In subdirectories outside .cursor/rules
    - In any other location

9. Cursor rules have the following structure:

---
description: Short description of the rule's purpose
globs: optional/path/pattern/**/*
alwaysApply: false
---
# Rule Title

Main content explaining the rule with markdown formatting.

1. Step-by-step instructions
2. Code examples
3. Guidelines
Example:
```python
# Good example
async def good_example_function():
    """Implementation following NeMo Agent Toolkit guidelines."""
    # Use async/await for I/O operations
    # Follow snake_case naming convention
    # Include proper type hints and docstrings
    pass

# Bad example
def badExample():
    # Missing async, type hints, and docstring
    # Uses camelCase instead of snake_case
    pass
```


================================================
FILE: .cursor/rules/documentation/capitalization.mdc
================================================
---
description:
globs: **/*.md
alwaysApply: false
---
# Capitalization Guidelines

Capitalize proper names of products, features, pages, and tools. In step-by-step instructions, match the exact capitalization of UI elements. Don't capitalize words that are not proper nouns solely for emphasis.

## Basic Capitalization Rules

### Always Capitalize

#### First Word of Sentences
- Always capitalize the first word of every sentence
- **Examples**: "The cat is sleeping." "Where did I put that book?"

#### Proper Nouns
- **People's names**: Jane Austen, Tom, Diane
- **Places**: Southern California, San Diego, New York City
- **Companies**: NVIDIA, Microsoft, Google
- **Religions**: Catholic, Buddhist, Jewish
- **Political parties**: Democratic Party, Republican Party
- **Products**: CUDA, TensorRT, Agent toolkit

#### Names Used as Forms of Address
- **Correct**: "Just wait until Mom sees this!"
- **Incorrect**: "My mom is not going to like this." (not a form of address)

#### Days, Months, and Holidays
- **Days**: Monday, Tuesday, Wednesday
- **Months**: January, February, March
- **Holidays**: Christmas, Valentine's Day, New Year's Day
- **Don't capitalize seasons**: spring, summer, fall, winter

#### Cities, Countries, Nationalities, and Languages
- **Cities**: London, Tokyo, San Francisco
- **Countries**: United States, Canada, Japan
- **Nationalities**: American, Canadian, Japanese
- **Languages**: English, Spanish, Mandarin

#### Time Periods and Historical Events (with proper names)
- **Historical events**: World War I, Middle Ages, Roaring Twenties
- **Don't capitalize centuries**: sixteenth century, twenty-first century

#### Time Zones
- **Full names**: Eastern Time, Pacific Time, Coordinated Universal Time
- **Abbreviations**: EST, EDT, PST, PDT, UTC, GMT
- **Don't abbreviate** unless space is severely limited

### Title Capitalization

#### For Headings and Titles
Capitalize:
- **First word** (always)
- **All nouns**: Requirements, Phase, Model
- **All verbs** (including short ones like "is"): Configuring, Testing, Building
- **All adjectives**: Quick, Advanced, Custom
- **All proper nouns**: NVIDIA, vGPU, NGC

Don't capitalize:
- **Articles**: a, an, the (unless first word)
- **Conjunctions**: and, but, or (unless >5 letters or first word)
- **Prepositions**: of, in, to, for (unless >5 letters or first word)

#### Examples
- **Correct**: "Requirements for Configuring NVIDIA vGPU in a DRS Cluster"
- **Correct**: "Deploying and Testing Your Text-based Bot"
- **Correct**: "Uploading a Model to NGC"

#### Action Titles
- Use gerund form (-ing) for action-oriented titles
- **Example**: "Installing the Toolkit" not "Install the Toolkit"

### Don't Capitalize

#### After Colons (Usually)
- **Standard**: "I have one true passion: horse racing."
- **Exception - Proper noun**: "There is only one place I want to visit: New York City."
- **Exception - Complete sentence**: "Maggie wears a cap for two reasons: Strong light gives her headaches. She likes how it looks."

#### Compound Words
- **Don't capitalize** compound words unless they're proper names
- **Examples**: long-term solution, up-to-date guides
- **Exceptions**: In-App Advertising, In-App Messaging, In-App Purchases, In-Game Advertising

#### Partial Quotes
- **Capitalize complete quotes**: Mario asked, "What is everyone doing this weekend?"
- **Don't capitalize partial quotes**: Gretchen said she was "way too busy" to join

#### Domain-Specific Terms (Unless Proper Names)
- **Use lowercase**: projects, applications, roles, workflows, functions
- **Exception**: When referring to specific proper names of products or features

## Technical Documentation Specific Rules

### UI Elements
- **Match exact capitalization** of interface elements
- **Bold and italic formatting**: Select *Settings* > *Data Inputs*
- **Button text**: Click **Save** or **Cancel**

### Code and Technical Terms
- **Follow language conventions**: JavaScript (capitalize), API (all caps), JSON (all caps)
- **File extensions**: Use lowercase unless following specific conventions
- **Commands**: Usually lowercase unless they're proper names

### Product Names
- **Use official capitalization**:
  - NVIDIA NeMo Agent Toolkit
  - NeMo Agent Toolkit or "the toolkit" (subsequent uses in body text)
  - NeMo Agent Toolkit (subsequent uses in titles/headings)
  - CUDA, TensorRT, PyTorch
- **Don't capitalize** generic terms: database, server, application (unless part of proper name)
- **Never use** "NAT" or "nat" as an abbreviation for the toolkit in documentation

### Feature Names
- **Capitalize** official feature names: Smart Search, Auto-Save, Real-time Analytics
- **Don't capitalize** generic features: search functionality, automatic saving, real-time updates

## Common Capitalization Mistakes

### Don't Do These
- **Don't capitalize for emphasis**: Important becomes *important* (italic) not Important
- **Don't capitalize common nouns**: "The Database" should be "the database"
- **Don't capitalize job titles**: software engineer, project manager (unless in formal contexts)
- **Don't capitalize directions**: north, south, east, west (unless part of proper name)

### Special Cases

#### Ordinal Numbers
- **Always spell out**: first, second, third, twenty-first
- **Don't use**: 1st, 2nd, 3rd, 21st in dates
- **Correct**: "June 21" not "June 21st"

#### Abbreviations and Acronyms
- **Follow standard conventions**: API, REST, HTTP, URL
- **Don't capitalize** unless the spelled-out form would be capitalized
- **Example**: "application programming interface" → "API"

#### Version Numbers
- **Follow product conventions**:
  - "version 2.1" (lowercase version)
  - "Python 3.9" (capitalize language name)
  - "CUDA 11.8" (follow product style)

## Best Practices

### Consistency
- **Use the same capitalization** for the same term throughout a document
- **Create a style sheet** for product-specific terms
- **Follow established conventions** within your organization

### When in Doubt
- **Check official documentation** for proper names
- **Use sentence case** rather than title case for most content
- **Err on the side of lowercase** for common nouns
- **Be consistent** with your choices throughout the document

### Accessibility
- **Consistent capitalization** helps screen readers
- **Proper capitalization** improves searchability
- **Clear conventions** reduce cognitive load for readers


================================================
FILE: .cursor/rules/documentation/categories.mdc
================================================
---
description: Guidelines for placing documentation in the correct category within the docs/source directory
globs: docs/source/**/*.md
alwaysApply: false
---

# Documentation Categories

When adding new documentation, place it in the appropriate category within the `docs/source` directory.

## Category Reference

| Category          | Directory                | Purpose                                                 |
| ----------------- | ------------------------ | ------------------------------------------------------- |
| About             | `about`                  | Overview, key features, concepts, release notes         |
| Get Started       | `get-started`            | Introductory documentation for new users                |
| Tutorials         | `get-started/tutorials`  | Step-by-step learning guides                            |
| Build             | `build-workflows`        | Workflow creation, configuration, MCP tools, A2A agents |
| Run               | `run-workflows`          | Execution, observability, serving via MCP and A2A       |
| Improve           | `improve-workflows`      | Evaluation and optimization                             |
| Components        | `components`             | Specific implementations (agents, tools, connectors)    |
| Extend            | `extend`                 | Custom component development and testing                |
| Reference         | `reference`              | Python API, REST API, and CLI documentation only        |
| Resources         | `resources`              | Project information (contributing, licensing, FAQs)     |
| Contributing      | `resources/contributing` | Development environment and contribution guides         |

## Category Details

### About (`about`)
Documentation limited to:
- Overview of NeMo Agent Toolkit
- Key features
- Core concepts
- Release notes

### Get Started (`get-started`)

Introductory documentation to help users get started with NeMo Agent Toolkit. Includes installation guides and basic concepts.

**Tutorials** (`get-started/tutorials`): Step-by-step guides to help users learn how to use the toolkit.

### Build (`build-workflows`)

Documentation on how to build workflows and workflow configuration. Includes information on component types (LLMs, agents) that can be used in workflows, and adding remote MCP tools or A2A agents to workflows.

**Note**: Documentation for specific component implementations belongs in the Components category, not here.

### Run (`run-workflows`)

Documentation on how to run workflows, including:

- Observing workflows
- Serving workflows via MCP and A2A protocols

### Improve (`improve-workflows`)

Documentation on workflow improvement:

- Evaluation guides
- Optimization guides

### Components (`components`)

Documentation on specific component implementations:

- Agents (for example, ReAct Agent)
- Tools (for example, Code Execution tool)
- Connectors

### Extend NeMo Agent Toolkit (`extend`)

Documentation on extending the toolkit:

- Writing custom components
- Testing custom components

**Note**: Focus on helping users extend the toolkit for their needs, not on contributing to the core library.

### Reference (`reference`)

Limited to API documentation:

- Python API reference
- REST API reference
- CLI reference

### Resources (`resources`)

Project-wide documentation:

- Contributing guidelines
- Code of conduct
- Licensing
- FAQs

**Contributing** (`resources/contributing`): Development environment setup and contribution processes.

## Placement Guidelines

1. **Before adding documentation**, identify the correct category from the table above
2. **Avoid overlap**: Place content in only one category
3. **Component implementations** always go in `components`
4. **API documentation** belongs only in `reference`
5. **Contribution-related content** goes in `resources/contributing`


================================================
FILE: .cursor/rules/documentation/formatting.mdc
================================================
---
description: 
globs: **/*.md
alwaysApply: false
---
# Formatting Guidelines

Use consistent formatting to help convey meaning and improve readability. All formatting should be consistent throughout technical content.

## Formatting Reference

### Code and Technical Elements

#### Code Samples and Command-Line Arguments
- **Format**: Monospaced font (markdown code blocks or inline code)
- **Example**: 
  ```
  npm install @nvidia/aicore
  ```
- **Inline example**: Use `npm install` to add packages

#### Configuration File Parameters
- **Format**: Inline monospaced font
- **Example**: Set the `timeout` parameter to `30`

#### Expressions and Code Variables
- **Format**: Inline monospaced font
- **Example**: Ensure `delay > 10` evaluates to True

#### File Names
- **Format**: Inline monospaced font
- **Example**: Navigate to the `config.json` file

#### File Paths and Directories
- **Format**: Inline monospaced font
- **Variables**: Surround changeable variables with angle brackets
- **Example (correct)**: `/home/<username>/.login`
- **Example (incorrect)**: `/home/[username]/.login`

#### Knowledge Objects (fields, event types, lookups, tags, etc.)
- **Format**: Inline monospaced font
- **Example**: The default field `index` identifies the index location

#### Source Types
- **Format**: Inline monospaced font
- **Example**: This entry defines the `access_combined` source type

#### Simple XML Elements
- **Format**: Inline monospaced font
- **Example**: Find the `<title>all</title>` element

#### REST API Requests and Responses
- **Format**: Monospaced font block (code blocks)

#### Simple XML Source Code
- **Format**: Monospaced font block (code blocks)

### User Interface Elements

#### Menu Items and UI Elements
- **Format**: Italic text
- **Examples**: 
  - Select *Settings* > *Data Inputs*
  - In the *Name* field, enter your name
  - Click the *Save* button

#### User Input and Actions
- **Format**: Bold text
- **Examples**:
  - For the *Destination* field, enter **ca_counties**
  - From the *Set Source* step, click **Timestamp**

#### Keyboard Shortcuts
- **Format**: No special formatting
- **Example**: Press Ctrl+Alt+Delete

### Text Formatting

#### Guide Titles and Document References
- **Format**: Italic text
- **Example**: Refer to the *Quick Start Guide*

#### Domain-Specific Terms
- **Format**: Italic text on first use or when emphasis is needed
- **Example**: Access permissions are handled through *projects*, *applications*, and *roles*
- **Note**: Don't capitalize unless it's a proper name

#### In-text Emphasis
- **Format**: Italic text
- **Examples**:
  - What users did *after* a starting event
  - What users did *before* an ending event

#### Error Messages
- **Format**: Quotation marks
- **Examples**:
  - If you see "Invalid input value," the add-on was unable to generate a certificate
  - The payload is keyed with "d" whose value is an array

#### Offset Words (not part of sentence meaning)
- **Format**: Quotation marks
- **Example**: Search for "Query Tables" on the website

#### Speech and Dialogue
- **Format**: Quotation marks
- **Examples**:
  - User speech: "Hey Riva"
  - Bot response: "My name is Riva. I was created by engineers at NVIDIA."

### Special Cases

#### User Roles and Capabilities
- **Format**: No special formatting
- **Examples**:
  - You need the admin role to configure settings
  - If the user holds the admin_all_objects capability

#### Variables in Paths
- **Format**: Angle brackets (< >)
- **Example (correct)**: `/home/<username>/.login`
- **Example (incorrect)**: `/home/[username]/.login`

#### Equations
- **Format**: MathML for complex equations
- **Simple expressions**: Use inline code formatting

#### Article Citations
- **Format**: APA style
- **Example**: Include proper author, year, title, and source information

## Formatting Best Practices

### Consistency Rules
- Use the same formatting for the same type of element throughout a document
- Don't mix formatting styles (e.g., don't use both bold and italic for the same purpose)
- Follow the hierarchy: headings, subheadings, body text, code, emphasis

### Readability Guidelines
- Use formatting to enhance meaning, not just for decoration
- Don't overuse formatting - too much emphasis reduces impact
- Leave white space around formatted elements for better readability
- Group related formatted elements together

### Code Formatting
- Use syntax highlighting when available
- Keep code examples concise and focused
- Include only relevant parts of longer code samples
- Use comments in code to explain complex parts
- Format code consistently with project standards

### UI Element Formatting
- Match the exact capitalization and spelling of UI elements
- Use consistent formatting for similar UI elements (all buttons bold, all menus italic)
- Include enough context to help users locate elements
- Use parallel structure when listing UI steps

## Common Formatting Mistakes

### Don't Do These
- Don't use quotation marks for emphasis (use italic instead)
- Don't use ALL CAPS for emphasis
- Don't mix square brackets [ ] and angle brackets < > for variables
- Don't use bold for code elements (use monospace instead)
- Don't skip formatting for technical terms that need it
- Don't overformat simple text

### Alternative Approaches
- Instead of "IMPORTANT", use **Important** or *Important*
- Instead of [variable], use `<variable>`
- Instead of **code**, use `code`
- Instead of plain text for filenames, use `filename.txt`


================================================
FILE: .cursor/rules/documentation/general.mdc
================================================
---
description:
globs: **/*.md
alwaysApply: false
---
# General Documentation Rules

Follow these rules when working with any documentation in the NeMo Agent Toolkit project.

## Referenced Documentation

- **Project Documentation Structure**: [docs/source/](mdc:AgentIQ/docs/source) - Main documentation source directory using Sphinx
- **Documentation README**: [docs/README.md](mdc:AgentIQ/docs/README.md) - Documentation build and contribution guidelines
- **Sphinx Configuration**: [docs/source/conf.py](mdc:AgentIQ/docs/source/conf.py) - Sphinx build configuration and settings
- **Index Page**: [docs/source/index.md](mdc:AgentIQ/docs/source/index.md) - Main documentation landing page
- **Troubleshooting Guide**: [docs/source/troubleshooting.md](mdc:AgentIQ/docs/source/troubleshooting.md) - Common issues and solutions
- **Support Information**: [docs/source/support.md](mdc:AgentIQ/docs/source/support.md) - Support channels and resources

## Style Guide Rules

- **Writing Process**: [writing-process.mdc](mdc:AgentIQ/.cursor/rules/documentation/writing-process.mdc) - 8-step technical writing process and best practices
- **Voice and Tone**: [voice-and-tone.mdc](mdc:AgentIQ/.cursor/rules/documentation/voice-and-tone.mdc) - Authoritative, instructive, and welcoming writing style guidelines
- **Formatting**: [formatting.mdc](mdc:AgentIQ/.cursor/rules/documentation/formatting.mdc) - Code samples, UI elements, and text formatting standards
- **Punctuation**: [punctuation.mdc](mdc:AgentIQ/.cursor/rules/documentation/punctuation.mdc) - Comprehensive punctuation rules for technical documentation
- **Capitalization**: [capitalization.mdc](mdc:AgentIQ/.cursor/rules/documentation/capitalization.mdc) - Title case, sentence case, and proper noun guidelines
- **Lists and Tables**: [lists-and-tables.mdc](mdc:AgentIQ/.cursor/rules/documentation/lists-and-tables.mdc) - Structured content formatting and organization
- **Numbers and Dates**: [numbers-and-dates.mdc](mdc:AgentIQ/.cursor/rules/documentation/numbers-and-dates.mdc) - Numerical content and date formatting standards
- **Categories**: [categories.mdc](mdc:AgentIQ/.cursor/rules/documentation/categories.mdc) - Documentation category placement guidelines

## Documentation Standards

### Terminology and Naming
- Make sure to follow this naming convention for all the documentation. If there is any documentation not following this rule, you MUST update it.
- **Full name (first use)**: "NVIDIA NeMo Agent Toolkit" — use for document titles, webpage headers, and any public descriptions
- **Short name (subsequent references)**: "NeMo Agent Toolkit" or "the toolkit"
- **Capitalization rules**:
  - In document titles, headings, or any context where all words are capitalized, use "Toolkit" (capital T): e.g., "NVIDIA NeMo Agent Toolkit" or "NeMo Agent Toolkit"
  - In all other contexts (body text, descriptions), use "toolkit" (lowercase t): e.g., "NVIDIA NeMo Agent Toolkit" or "NeMo Agent Toolkit"
- **Technical identifiers** (code, CLI, packages, URLs):
  - `nat` for the API namespace and CLI tool
  - `nvidia-nat` for the package name
  - `NAT_` prefix for environment variables
  - `NeMo-Agent-Toolkit` for URLs, directory names, and contexts where capitalization is preserved (no underscores or spaces)
- **"NAT" abbreviation**:
  - OK in code comments
  - NEVER use "NAT" or "nat" to refer to the toolkit in documentation
- Examples:
  - "In the NeMo Agent Toolkit, you can…"
  - "Change directory to the NeMo Agent Toolkit repo root…"
  - Heading: "# Getting Started with NeMo Agent Toolkit"
- Consistently use this terminology throughout all documentation
- NeMo Agent Toolkit was previously known as the Agent Intelligence toolkit, and AgentIQ. You should NEVER use the deprecated names, including Agent Intelligence toolkit, aiqtoolkit, AgentIQ, or AIQ/aiq. If you see any of these names in the documentation, you MUST update it based on the latest naming convention above, unless those names are intentionally used to refer to the deprecated names, or implementing a compatibility layer for the deprecated names.

### Style Guide Compliance
When creating, updating, or reviewing documentation, follow the comprehensive style guide rules listed in the Referenced Documentation section above. These rules cover:

- **Writing Process**: Follow the 8-step process for all documentation projects
- **Voice and Tone**: Write with authority, instruction, and accessibility in mind
- **Formatting**: Apply consistent formatting for code, UI elements, and technical content
- **Grammar and Style**: Use proper punctuation, capitalization, lists, and number formatting

### Quality Standards
- **Audience-focused**: Always consider your target audience when writing
- **SME Review**: Have subject matter experts review technical content for accuracy
- **Consistency**: Apply the same style rules throughout all documentation
- **Accessibility**: Ensure content is accessible to users with different abilities and technical levels
- **Scannability**: Structure content so users can quickly find what they need


================================================
FILE: .cursor/rules/documentation/latinisms.mdc
================================================
---
description: Guidelines for avoiding Latin phrases in documentation to simplify content for a global audience
globs: **/*.md
alwaysApply: false
---

# Latinisms Guidelines

To help simplify content for a global audience, avoid using Latin phrases that have simpler equivalents. Formal, academic content can be an exception or where space is constrained.

## Common Latin Phrases to Avoid

### e.g. (exempli gratia)
- **Instead use**: "for example" or "such as"
- **Example (incorrect)**: "RTX is incredibly useful in creative applications, e.g., applying effects or rendering video projects."
- **Example (correct)**: "RTX is incredibly useful in creative applications such as applying effects or rendering video projects."

### etc. (et cetera)
- **Instead use**: "and so on"
- **Example (incorrect)**: "The system supports various file formats like PNG, JPEG, GIF, etc."
- **Example (correct)**: "The system supports various file formats like PNG, JPEG, GIF, and so on."

### i.e. (id est)
- **Instead use**: "that is"
- **Example (incorrect)**: "The primary programming language, i.e., Python, is used throughout the codebase."
- **Example (correct)**: "The primary programming language, that is Python, is used throughout the codebase."

### versus (vs.)
- **Instead use**: "compared to"
- **Example (incorrect)**: "Cloud deployment vs. on-premises installation offers different benefits."
- **Example (correct)**: "Cloud deployment compared to on-premises installation offers different benefits."

### via
- **Instead use**: "by" or "through"
- **Example (incorrect)**: "Access the dashboard via the main menu."
- **Example (correct)**: "Access the dashboard through the main menu."

### vice versa
- **Instead use**: "conversely"
- **Example (incorrect)**: "Python can call JavaScript functions and vice versa."
- **Example (correct)**: "Python can call JavaScript functions and conversely."

## Exceptions

The following Latin phrases are exceptions because they are industry-standard terms with less-well-known substitutions. When using these terms, italicize them in running text:

- **in silico**: Computer-based simulations or modeling
- **in vitro**: Laboratory-based experiments outside living organisms
- **in vivo**: Experiments within living organisms

### Usage Examples for Exceptions
- "The *in silico* analysis revealed potential drug interactions."
- "These results were validated through *in vitro* testing."
- "The compound showed promising results in *in vivo* studies."

## Why Avoid Latinisms?

### Accessibility Benefits
- Makes content more accessible to non-native English speakers
- Reduces cognitive load for all readers
- Eliminates potential confusion about abbreviation meanings

### Clarity Benefits
- Provides explicit meaning rather than abbreviations
- Avoids assumptions about reader's Latin knowledge
- Makes documentation more scannable and understandable

### Global Audience Considerations
- Latin phrases may not translate well
- Some cultures may be unfamiliar with Latin abbreviations
- Simpler alternatives are universally understood

## When Latin Phrases May Be Acceptable

### Academic or Formal Context
- Research papers or technical specifications
- Legal documentation where precision is critical
- Scientific publications following established conventions

### Space Constraints
- Tables with limited column width
- UI elements with character limits
- Technical diagrams with space restrictions

**Note**: Even in these contexts, consider whether the simpler alternative would be better for your audience.

## Quick Reference

| Latin Phrase | Simple Alternative | Usage Context |
|-------------|-------------------|---------------|
| e.g. | for example, such as | Most contexts |
| etc. | and so on | Most contexts |
| i.e. | that is | Most contexts |
| vs./versus | compared to | Most contexts |
| via | by, through | Most contexts |
| vice versa | conversely | Most contexts |
| *in silico* | (keep as is) | Scientific/technical |
| *in vitro* | (keep as is) | Scientific/technical |
| *in vivo* | (keep as is) | Scientific/technical |

## Implementation Tips

### During Writing
- Use your editor's find/replace feature to identify Latin phrases
- Consider your audience's background and expertise level
- When in doubt, choose the simpler alternative

### During Review
- Scan for Latin abbreviations and phrases
- Check if exceptions are properly italicized
- Ensure alternatives maintain the intended meaning

### Style Guide Integration
- Include these guidelines in your project's style guide
- Set up automated checks for common Latin phrases
- Train team members on these alternatives


================================================
FILE: .cursor/rules/documentation/lists-and-tables.mdc
================================================
---
description: 
globs: **/*.md
alwaysApply: false
---
# Lists and Tables Guidelines

Lists organize information for faster scanning. Tables present descriptions of choices, options, and fields users encounter in tasks. Use these elements to improve content structure and readability.

## General List Best Practices

### Required Elements
- **Lead-in sentence**: Always introduce lists with a complete sentence
- **Multiple items**: Lists must have more than one item
- **Maximum two levels**: Primary list and sub-list only
- **Sub-list rules**: Sub-lists must also have more than one item

### Content Guidelines
- **Capitalize** the first letter of every list item
- **Parallel construction**: Use consistent sentence structure across items
- **One idea per item**: Keep each list item focused on a single concept
- **Link placement**: Avoid links that take users away from task lists
- **Minimal links**: If links are necessary, don't hyperlink entire list items

### Punctuation Rules
- **Complete sentences**: Use end punctuation if list items are complete sentences
- **Phrases/words**: No end punctuation for characters, words, or short phrases
- **Consistency**: Apply the same punctuation rule to all items in a list

## Types of Lists

### Bulleted Lists (Unordered)
**Use when**: Order doesn't matter (options, features, benefits)

#### Requirements
- Complete lead-in sentence ending with a colon
- More than one list item
- Up to two levels maximum
- Parallel sentence construction
- One sentence or idea per item
- End punctuation only if items are complete sentences

#### Example Structure
```markdown
The toolkit provides the following benefits:
- Easy installation and setup
- Comprehensive documentation
- Active community support
- Regular updates and improvements
```

### Numbered Lists (Ordered)
**Use when**: Order matters (sequential steps, procedures, priorities)

#### Requirements
- Complete lead-in sentence ending with period or colon
- More than one list item
- Up to two levels maximum
- Parallel sentence construction
- One action per list item
- Each step ends with period or colon
- End punctuation based on sentence completeness

#### Example Structure
```markdown
To install the toolkit:
1. Download the installation package
2. Extract the files to your desired directory
3. Run the setup command
4. Verify the installation
```

### Definition Lists
**Use when**: Defining terms, descriptions, explanations, or associations

#### Requirements
- Complete lead-in sentence
- More than one defined term
- Two levels: term (bold, own line) and definition (indented, own line)
- Parallel sentence construction
- One definition per term
- End punctuation in every definition

#### Example Structure
```markdown
Key concepts include:

**API**: Application Programming Interface that allows different software applications to communicate with each other.

**SDK**: Software Development Kit that provides tools and libraries for building applications.
```

## Table Guidelines

### When to Use Tables
- Reference information and lookup data
- Decision support matrices
- Compatibility information
- Choices and options for users
- Comparative information
- Configuration parameters

### Table Requirements

#### Structure
- **Introduction**: Full sentence with colon before table
- **Multiple rows**: Never create single-row tables
- **Headers**: Use title case for column headers
- **Titles**: Every table must have a descriptive title

#### Content Guidelines
- **Avoid empty cells**: Use non-breaking space if cell must appear blank
- **Minimal links**: Avoid links unless table's purpose is navigation
- **Limited code**: Use code samples sparingly in tables
- **No merged cells**: Avoid merging or splitting table cells
- **Lists in tables**: Use sparingly; prefer restructuring content

#### Example Structure
```markdown
The following table describes the configuration options:

| Parameter | Type | Description | Default |
|-----------|------|-------------|---------|
| timeout | integer | Request timeout in seconds | 30 |
| retries | integer | Number of retry attempts | 3 |
| debug | boolean | Enable debug logging | false |
```

## Formatting Best Practices

### Parallel Construction
Maintain consistent patterns:

**Good - Parallel verbs**:
- Install the package
- Configure the settings
- Start the service

**Bad - Mixed patterns**:
- Install the package
- Configuration of settings
- The service should be started

### List Organization

#### Logical Ordering
- **Alphabetical**: For reference lists (features, options)
- **Chronological**: For procedures and processes
- **Priority**: For recommendations or importance
- **Categorical**: For grouped related items

#### Length Considerations
- **Short lists** (3-7 items): Use simple bullet points
- **Long lists** (8+ items): Consider sub-categories or tables
- **Complex items**: Consider definition lists or tables

### Visual Formatting

#### Spacing
- Leave white space around lists and tables
- Use consistent indentation for sub-lists
- Separate complex list items with line breaks when needed

#### Emphasis
- **Bold**: For terms in definition lists
- **Italic**: For UI elements in instructions
- **Code**: For technical terms and values

## Common Mistakes to Avoid

### Don't Do These
- **Single-item lists**: Use paragraphs instead
- **Inconsistent punctuation**: Apply same rules to all items
- **Mixed sentence structures**: Maintain parallel construction
- **Overly complex tables**: Break into multiple simpler tables
- **Empty table cells**: Use descriptive text or non-breaking spaces
- **Too many sub-levels**: Limit to two levels maximum

### Better Alternatives
- **Instead of long paragraphs**: Use bulleted lists for multiple points
- **Instead of complex lists**: Use tables for structured data
- **Instead of nested lists**: Use headings and separate lists
- **Instead of single-row tables**: Use definition lists or paragraphs

## Accessibility Considerations

### Screen Reader Support
- Use proper markup for lists and tables
- Include table headers and captions
- Provide clear list introductions
- Use descriptive link text

### Scannability
- Use consistent formatting patterns
- Keep list items concise
- Use meaningful headings
- Group related information logically

### Translation Support
- Use simple, clear language in lists
- Avoid idioms in list items
- Keep parallel construction for easier translation
- Use standard punctuation patterns


================================================
FILE: .cursor/rules/documentation/numbers-and-dates.mdc
================================================
---
description: 
globs: **/*.md
alwaysApply: false
---
# Numbers and Dates Guidelines

Be consistent with number usage throughout documentation. When documenting examples or UI elements, duplicate numbers exactly as they appear in the interface.

## Numbers in Text

### Basic Number Rules

#### Spell Out vs. Numerals
- **Spell out**: Zero through nine in body text
  - "five databases"
  - "zero probability" 
  - "seven years"
- **Use numerals**: 10 and greater
  - "10 screen savers"
  - "28 days"
  - "12 hrs"

#### Consistency Rule
If one item in a group requires a numeral, use numerals for all items of that type:
- **Correct**: "One article has 16 pages, one has 7 pages, and the third has only 5 pages"
- **Correct**: "Christmas is only one month and 12 days away"

#### Adjacent Numbers
When two numbers referring to different things appear together, use a numeral for one and spell out the other:
- **Example**: "fifteen 20-page articles"

#### Starting Sentences
Never start a sentence with a numeral:
- **Correct**: "More than 10 apps are included"
- **Correct**: "Eleven apps are included"
- **Acceptable in lists**: List items may start with numerals

### Special Number Formatting

#### Commas in Numbers
- **Use commas**: For numbers with four or more digits
  - "$1,024"
  - "1,093 MB"

#### Exceptions to Comma Rule
For years, pixels, and baud, use commas only with five or more digits:
- **Years**: "2500 B.C." but "10,000 B.C."
- **Pixels**: "1920 × 1080 pixels" but "10,240 × 4320 pixels" 
- **Baud**: "9600 baud" but "14,400 baud"

#### Never Use Commas In
- **Page numbers**: "page 1091"
- **Addresses**: "15601 NE 40th Street"
- **After decimal points**: "1.06377 units"

#### Negative Numbers
Use an en dash (–), not a hyphen (-):
- **Correct**: "–79"
- **Incorrect**: "-79"

#### Compound Numbers
Hyphenate spelled-out compound numbers:
- "twenty-five fonts"
- "the twenty-first day"

#### Ordinal Numbers
Always spell out ordinals:
- **Correct**: "the first row", "the twenty-first anniversary"
- **Don't use**: "1st", "21st" in regular text
- **Don't use**: Ordinal numbers for dates ("June first" → "June 1")
- **Don't add**: "-ly" to ordinals ("firstly" → "first")

### Number Ranges

#### Preferred Format
Use "from," "through," and "to":
- **Example**: "from 9 through 17"

#### Exceptions
- **En dash for pages**: "pages 112–120"
- **En dash for years**: "2016–2020"
- **Use "to" for times**: "from 10:00 AM to 2:00 PM"
- **Don't use "from" with en dash**: Wrong: "from 10–15"

### Abbreviations

#### General Rule
Don't abbreviate thousand, million, billion as K, M, B:
- **Preferred**: "65,000 people" or "sixty-five thousand people"
- **Preferred**: "$30 million" not "$30M"

#### When Abbreviations Are Necessary
- **Capitalize**: K, M, B
- **No space**: "8K", "30M", "2B"
- **Avoid decimals with K**: "8,210" not "8.21K" (same character count)

#### Global Considerations
- Machine translation may not handle abbreviations correctly
- Target languages may not have equivalent abbreviations
- Allow space for expansion in localized content

## Dates and Times

### Date Format

#### Standard Format
Use "Month DD, YYYY" format:
- **Correct**: "July 31, 2016"
- **Incorrect**: "31 July 2016"

#### Avoid Ordinals in Dates
- **Correct**: "Jan 18"
- **Incorrect**: "Jan 18th"

#### Global Considerations
Always spell out month names to avoid confusion:
- "6/12/2017" could be June 12 or December 6 depending on region
- "June 12, 2017" is unambiguous

### Time Format

#### AM/PM Format
- **Use**: AM and PM with space before
- **Capitalize**: Both letters
- **Examples**: "10:45 AM", "6:30 PM"

#### 24/7 Usage
Don't use "24/7":
- **Use instead**: "all day, every day", "always", "around the clock"

### Days and Months

#### Days of the Week
- **Capitalize**: Sunday, Monday, Tuesday, etc.
- **Don't abbreviate** unless space is severely limited
- **Three-letter abbreviations**: Sun, Mon, Tue, Wed, Thu, Fri, Sat
- **Use sentence case**: "Sun" not "SUN"

#### Months
- **Capitalize**: January, February, March, etc.
- **Don't abbreviate** unless space is severely limited
- **Three-letter abbreviations**: Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec
- **No periods**: "Jan" not "Jan."

## Technical Context Numbers

### Limited Space Contexts
In tables and UI, numerals for 0-9 are acceptable:
- Tables with space constraints
- User interface labels
- Dashboard displays
- Mobile interfaces

### Code and Technical Values
Match exact formatting from code or systems:
- API response values
- Configuration parameters
- Version numbers
- Error codes

### Measurements and Units
- **Use numerals**: With units of measurement
  - "5 GB", "32-bit", "1080p"
- **Include units**: Always specify units for clarity
- **Standard abbreviations**: Use accepted technical abbreviations

## Best Practices

### Consistency Within Documents
- **Same type, same format**: Use consistent formatting for similar numbers
- **Document-wide rules**: Apply the same number style throughout
- **Style sheets**: Create guides for recurring number types

### Readability
- **Choose clarity**: When rules conflict, prioritize reader understanding
- **Context matters**: Consider your audience's expectations
- **Test with users**: Verify number formats work for your audience

### International Considerations
- **Decimal separators**: Be aware of comma vs. period conventions
- **Currency**: Follow local currency formatting when relevant
- **Date formats**: Stick to unambiguous formats
- **Number grouping**: Consider space vs. comma preferences

## Common Mistakes to Avoid

### Don't Do These
- **Inconsistent formatting**: "5 items" and "ten options" in same context
- **Starting with numerals**: "10 steps are required" (rewrite as "Ten steps are required")
- **Wrong dash types**: "-79" instead of "–79"
- **Ordinals in dates**: "June 21st" instead of "June 21"
- **Unnecessary abbreviations**: "5K users" instead of "5,000 users"

### Style Conflicts
When guidelines conflict, prioritize:
1. **User interface accuracy**: Match UI exactly
2. **Technical precision**: Use standard technical formats
3. **Document consistency**: Apply same rules throughout
4. **Readability**: Choose clearest option for audience


================================================
FILE: .cursor/rules/documentation/punctuation.mdc
================================================
---
description:
globs: **/*.md
alwaysApply: false
---
# Punctuation Guidelines

Use punctuation to provide vital clues for reader understanding. If a sentence contains more than a comma or two plus ending punctuation, consider rewriting it for clarity.

## Specific Punctuation Rules

### Ampersand (&)
- **Don't use** ampersands in place of "and"
- **Always write out** "and" unless the ampersand is part of a proper name
- **Exception**: "Search & Reporting app" (proper name)

### Apostrophes (')
Use apostrophes for:

#### Possessive Case
- **Singular nouns**: Add apostrophe + s, even if the noun ends in s, x, or z
  - `insider's guide`
  - `the box's contents`
  - `the CSS's flexibility`
- **Plural nouns ending in s**: Add only an apostrophe
  - `users' passwords`

#### Contractions
- `can't`, `don't`, `it's`

#### Don't Use Apostrophes For
- Possessive form of "it" → use `its`
- Possessive pronouns → `yours`, `theirs`
- Plural nouns → `devices` not `device's`
- Inanimate objects (use alternative phrasing instead)
  - **Incorrect**: "NeMo Agent Toolkit's evaluation system can be used..."
  - **Correct**: "The NeMo Agent Toolkit evaluation system can be used..."
  - **Also correct**: "The evaluation system included in NeMo Agent Toolkit can be used..."

### Brackets

#### Angle Brackets (< >)
- **Use for**: Placeholder variables users should replace
  - **Correct**: `https://<user-specified-domain>.nvidia.com`
  - **Incorrect**: `https://{user-specified domain}.nvidia.com`
- **Use for**: Navigation sequences
  - Select *Save As* > *Saved Search* > *Close*

#### Curly Braces ({ })
- **Use only**: In code samples or string literals

#### Square Brackets ([ ])
- **Use for**: Configuration file stanza names
  - Edit the `[clevertap]` stanza
- **Use in**: Code contexts
  - `tag=dns query [search tag=malware]`
- **Don't use for**: Variable placeholders

### Colons (:)
- **Use to introduce lists**: End the introductory phrase with a colon
  - "We can create backups of the following:"
- **Use sparingly** for elaboration: One statement followed by an expansion
- **Lowercase** the word following a colon unless it's a proper noun or starts a complete sentence

### Commas (,)

#### Serial/Oxford Comma
- **Always use** a comma before the conjunction in lists of three or more items
  - "Google includes Mail, Calendar, People, and Tasks"
  - "Save to a hard drive, external drive, or OneDrive"

#### Other Comma Uses
- **After introductory phrases**: "With WhatsApp, users can call any phone"
- **Before conjunctions** joining independent clauses: "Select *Options*, and then select *Enable*"
- **Consider rewriting** long, complex sentences with multiple commas

### Dashes and Hyphens

#### Em Dash (—)
- **Use for**: Parenthetical phrases with more emphasis than parentheses
- **No spaces** around em dashes
- **Examples**:
  - "The information—numbers, formulas, and text—is stored in cells"
  - "Look at the illustrations in the wizard—they can help you"

#### En Dash (–)
- **Use for**: Ranges of numbers, dates, or pages
  - `2015–2017`
  - `pages 112–120`
- **Use for**: Minus signs
  - `12–3=9`
- **Use for**: Negative numbers
  - `–79`
- **No spaces** around en dashes (except in complex date/time ranges)

#### Hyphens (-)
- **Use for**: Compound modifiers before nouns
  - `built-in drive`
  - `high-level-language compiler`
  - `read-only memory`
- **Use when**: One word is a past or present participle
  - `left-aligned text`
  - `well-defined schema`

### Periods (.)
- **End all sentences** with periods, even short ones
- **One space** after periods, not two
- **Don't use** in headlines, headings, UI titles, or simple lists (≤3 words per item)

#### In Lists
- **Use periods** if list items complete the introductory sentence
- **Use periods** if any list item is a complete sentence
- **No periods** if all items are short phrases (≤3 words) and don't form complete sentences

### Quotation Marks (" ")

#### General Rules
- **Use double quotation marks** (" "), not single (' ')
- **Use straight quotes** in online content
- **Use curly quotes** in printed content (except in code)

#### Punctuation Placement
- **Commas and periods**: Always inside quotation marks
  - `He said, "I never forget a face."`
  - `History is stained with blood spilled in the name of "civilization."`
- **Colons and semicolons**: Always outside quotation marks
  - `Three elements of her "Olympic journey": family, commitment, coaching`
- **Question marks and exclamation points**:
  - Inside if they apply to the quotation
  - Outside if they apply to the whole sentence

### Semicolons (;)
- **Use between** independent clauses not joined by conjunction
- **Use to separate** complex list items containing commas
- **Try to avoid**: Rewrite as multiple sentences or a list when possible
- **Example**: "Select the required *Option*; then select *Automatic* backups"

### Slashes

#### Backslash (\)
- **Use in**: Windows file paths and code

#### Forward Slash (/)
- **Use for**: Unix/Linux paths
- **Use sparingly** to mean "and," "or," "per," or "with"
- **Acceptable**: "read/write permissions"
- **Avoid**: "information is written to/stored in" (use "and" instead)

## Punctuation to Avoid in Technical Documentation

### Don't Use These
- **Ellipses (...)**: Creates uncertainty
- **Exclamation points (!)**: Too informal for most technical content
- **Question marks (?)**: Avoid rhetorical questions in instructions

### Exceptions
- These may be appropriate in user interface text
- May be used in marketing or introductory content
- Can be used when quoting actual user input or error messages

## Best Practices

### Clarity First
- If punctuation makes a sentence confusing, rewrite the sentence
- Use the minimum punctuation necessary to convey meaning
- Break complex sentences into multiple simple sentences

### Consistency
- Follow the same punctuation patterns throughout a document
- Use parallel punctuation in lists and similar structures
- Be consistent with spacing and formatting around punctuation

### Accessibility
- Clear punctuation helps screen readers and translation tools
- Consistent punctuation improves scannability
- Simple punctuation reduces cognitive load for readers


================================================
FILE: .cursor/rules/documentation/voice-and-tone.mdc
================================================
---
description: 
globs: **/*.md
alwaysApply: false
---
# Voice and Tone Guidelines

Write in a friendly, straightforward way that is authoritative, instructive, and welcoming to all audiences.

## Voice Characteristics

### Authoritative
Write with confidence and knowledge without being bossy, rude, or condescending.

#### Avoid Redundancy
- **Problem**: Unnecessary repetition that takes up space and obscures meaning
- **Example (incorrect)**: "The process of freeing a stuck vehicle that has been stuck..."
- **Example (correct)**: "The process of freeing a stuck vehicle consists of..."

#### Avoid Flowery Language
- **Problem**: Overly elaborate writing that uses complicated words to sound skillful
- **Example (incorrect)**: "High-quality learning environments are a necessary precondition for the facilitation and enhancement of the ongoing learning process."
- **Example (correct)**: "People need good schools if they are to learn properly."

#### Use Active Voice
- **Active voice**: Subject performs the action (strong, direct, clear)
- **Passive voice**: Subject receives the action (weak, indirect)
- **Example (correct)**: "Marti logged into the account."
- **Example (incorrect)**: "The account was logged into by Marti."

**Note**: Use passive voice only when the actor is unknown or when changing to active voice would alter the intended meaning.

#### Choose Appropriate Formality
- Use **second person** ("you") whenever possible
- Write prose that empowers the user to take action
- **Example (incorrect)**: "The product allows you to create multiple user segments."
- **Example (correct)**: "With the product you can create multiple user segments."

### Instructive
Make instructions immediately understandable without requiring multiple readings.

#### Writing Style for Instructions
- Use declarative, command, or direct address writing
- Use active instead of passive voice
- Include all necessary articles (a, an, the)
- Use action verbs
- Ensure graphics match descriptive text
- Keep text short but descriptive
- Avoid complicated jargon; use simple language
- Use concise headings and subheadings
- Leave plenty of white space around headings
- Highlight safety information and warnings
- Keep illustrations simple

#### Sentence Types

**Declarative Sentences**
- Relay information, opinions, and facts
- End with a period
- Have at least two words
- Include subject and predicate
- **Examples**: "The dogs barked at the moon." "Jim worked hard, but he failed the exam."

**Imperative Sentences**
- Issue commands and requests
- End with period or exclamation mark
- Can be as short as one word
- Don't explicitly state a subject (implied "you")
- **Examples**: "Close the door." "Stop!" "Come here, look at this dress, and tell me what you think."

**Usage**: Use declarative language most frequently in technical documentation, with imperative language when giving direct instructions.

### Welcoming to All Audiences
Consider accessibility and usability for the widest possible audience.

#### Accessibility Checklist
- Would this language make sense to someone who doesn't work here?
- Could someone quickly scan this document and understand the material?
- If someone can't see colors, images, or video, is the message still clear?
- Is the markup clean and structured?
- Does this work well on mobile devices with accessibility features?

## Writing Guidelines

### Use Second Person
- Address the reader directly with "you"
- Makes instructions more personal and clear
- Helps users understand they are the ones taking action

### Be Direct and Clear
- Get to the point quickly
- Use simple, clear language
- Avoid unnecessary words
- Choose specific verbs over generic ones

### Be Consistent
- Use the same terms throughout a document
- Follow the same style patterns
- Maintain consistent formatting
- Use parallel construction in lists and procedures

### Be Helpful
- Anticipate user questions and answer them
- Provide context when needed
- Include examples and use cases
- Link to related information when helpful

## Common Mistakes to Avoid

### Don't Use These Phrases
- "Simply" or "just" (implies something is easy when it might not be)
- "Obviously" or "clearly" (condescending if it's not obvious to the reader)
- "Please note that" (unnecessary filler)
- "It should be noted that" (wordy and impersonal)

### Avoid These Constructions
- "In order to" (use "to" instead)
- "Due to the fact that" (use "because" instead)
- "At this point in time" (use "now" instead)
- "For the purpose of" (use "to" instead)

### Don't Assume
- Don't assume users know background information
- Don't assume users have specific tools or permissions
- Don't assume users will read everything in order
- Don't assume users have the same level of expertise


================================================
FILE: .cursor/rules/documentation/writing-process.mdc
================================================
---
description: 
globs: **/*.md
alwaysApply: false
---
# Writing Process Guidelines

Follow the structured 8-step writing process when creating or updating documentation.

## The 8-Step Writing Process

### 1. Understand Your Audience
- Identify who will read the documentation (developers, users, administrators)
- Consider their technical level and familiarity with the subject
- Determine what they need to know to accomplish their goals
- Ask: "What does the reader need to know to do what I want them to do?"

### 2. Determine Your Purpose
- Clearly define why you're writing the documentation
- Identify the specific outcome you want to achieve
- Determine if this is a user guide, developer guide, quick start guide, or other type
- Ask: "What do I want the reader to know or do after reading this?"

### 3. Brainstorm Your Ideas
- List all relevant information, facts, and concepts
- Include notes about writing style and approach
- Consider vocabulary and terminology
- Don't limit or reject ideas at this stage

### 4. Choose and Sort Your Ideas
- Select the best ideas that fulfill your purpose
- Eliminate anything that doesn't help achieve your goal
- Organize ideas into logical categories
- Ensure you have all necessary information

### 5. Organize Your Ideas into a Writing Plan
- Create a clear structure using lists, outlines, or diagrams
- Plan paragraph breaks and section headings
- Decide on formatting elements (headings, lists, charts, graphics)
- Eliminate anything that doesn't directly relate to your purpose
- Review: Will this plan fulfill your purpose? Are any steps or information missing?

### 6. Write the First Draft
- Follow your plan without worrying about perfection
- Don't focus on grammar, word choice, or spelling yet
- Keep your audience and purpose in mind
- Focus on getting ideas down

### 7. Revise, Correct, and Rewrite
- **Content review**: Ensure the writing fulfills its purpose
- **Clarity check**: Make sure it's clear and easy to understand
- **Structure review**: Check paragraph and sentence structure
- **Grammar and style**: Proofread for grammar, word choice, and style issues
- **Completeness**: Answer any questions readers might have

### 8. Send a "Clean" Draft to Your Reviewers
- Technical writers depend on subject matter experts (SMEs) for accuracy
- Ensure reviewers review the documentation thoroughly
- Incorporate feedback from reviews
- Do a final accuracy check with SMEs before publishing

## Best Practices

### Before Writing
- Research your topic thoroughly
- Gather all necessary information
- Identify your target audience clearly
- Define success metrics for your documentation

### During Writing
- Stay focused on your purpose
- Write in a consistent voice and tone
- Use clear, simple language
- Follow formatting guidelines consistently

### After Writing
- Always have content reviewed by SMEs
- Test procedures with actual users when possible
- Update documentation based on feedback
- Keep documentation current with product changes

## Documentation Types

### User Guides
- Focus on helping users accomplish specific tasks
- Use step-by-step instructions
- Include screenshots and examples
- Assume minimal technical knowledge

### Developer Guides
- Focus on technical implementation
- Include code examples and API references
- Assume higher technical expertise
- Provide comprehensive technical details

### Quick Start Guides
- Focus on getting users up and running quickly
- Include only essential steps
- Minimize explanatory text
- Provide links to comprehensive documentation

### Release Notes
- Focus on what changed and why it matters
- Organize by impact level (breaking changes, new features, bug fixes)
- Include migration instructions for breaking changes
- Provide clear dates and version numbers


================================================
FILE: .cursor/rules/general.mdc
================================================
---
description: Follow these rules when creating, modifying, or generating any code, tests, documentation, or configuration files
globs:
alwaysApply: false
---

# NeMo Agent Toolkit General Coding Guidelines

These are the overarching standards that every **source, test, documentation and CI file** in this repository must follow. Adhering to these rules locally ensures the project's automated checks and pipelines succeed on your first push.

---

## Terminology and Naming

- Make sure to follow this naming convention for all the documentation. If there is any documentation not following this rule, you MUST update it.
- **Full name (first use)**: "NVIDIA NeMo Agent Toolkit" — use for document titles, webpage headers, and any public descriptions
- **Short name (subsequent references)**: "NeMo Agent Toolkit" or "the toolkit"
- **Capitalization rules**:
  - In document titles, headings, or any context where all words are capitalized, use "Toolkit" (capital T): e.g., "NVIDIA NeMo Agent Toolkit" or "NeMo Agent Toolkit"
  - In all other contexts (body text, descriptions), use "toolkit" (lowercase t): e.g., "NVIDIA NeMo Agent Toolkit" or "NeMo Agent Toolkit"
- **Technical identifiers** (code, CLI, packages, URLs):
  - `nat` for the API namespace and CLI tool
  - `nvidia-nat` for the package name
  - `NAT_` prefix for environment variables
  - `NeMo-Agent-Toolkit` for URLs, directory names, and contexts where capitalization is preserved (no underscores or spaces)
- **"NAT" abbreviation**:
  - OK in code comments
  - NEVER use "NAT" or "nat" to refer to the toolkit in documentation
- Examples:
  - "In the NeMo Agent Toolkit, you can…"
  - "Change directory to the NeMo Agent Toolkit repo root…"
  - Heading: "# Getting Started with NeMo Agent Toolkit"
- Consistently use this terminology throughout all documentation
- NeMo Agent Toolkit was previously known as the Agent Intelligence toolkit, and AgentIQ. You should NEVER use the deprecated names, including Agent Intelligence toolkit, aiqtoolkit, AgentIQ, or AIQ/aiq. If you see any of these names in the documentation, you should update it based on the latest naming convention above, unless those names are intentionally used to refer to the deprecated names, or implementing a compatibility layer for the deprecated names.
- DO NOT change the content of `CHANGELOG.md`
- AIQ Blueprint is the intended name for the blueprint. DO NOT change it.

## Project Structure

- All importable Python code lives under `src/` or `packages/<pkg>/src/` so namespace-packages resolve correctly.
- Each example is an installable package in `examples/<example_name>` and exposes an `__main__.py` for `python -m <example_name>` execution.
- **Examples directory guidelines**:
  - At minimum, examples should contain a `README.md` or `README.ipynb` file.
  - Python code should be placed in a `src/` subdirectory with a `pyproject.toml` file.
  - Scripts should be placed in a `scripts/` subdirectory (optional).
  - YAML files should be placed in a `configs/` subdirectory.
  - Sample data files should be placed in a `data/` subdirectory and checked into git-lfs.
- **Packages directory guidelines**:
  - Each package should contain a `pyproject.toml` file.
  - The `pyproject.toml` should declare a dependency on `nvidia-nat` or another package with a name starting with `nvidia-nat-`.
  - Dependencies should use `~=<version>` format with two-digit versions (e.g., `~=1.0`).
  - If packages contain Python code, they should have tests in a `tests/` directory at the same level as `pyproject.toml`.
- Unit tests live in `tests/` (or `examples/*/tests`) and use the markers defined in `pyproject.toml` (e.g. `integration`).
- Documentation sources are Markdown files under `docs/source`. Image files should be placed in `docs/source/_static` directory.
- Configuration files consumed by code are stored next to that code in a `configs/` folder.
- Large / binary assets **must** be committed with Git-LFS and placed in a neighbouring `data/` folder.
- Shell or utility scripts belong in `scripts/` or `ci/scripts/` – never mix them with library code.
- **Source code organization**:
  - `packages/nvidia_nat_core/src/nat/**/*`: Contains core functionality. Changes should prioritize backward compatibility.

## Code Formatting & Imports

- Follow [PEP 20](https://peps.python.org/pep-0020/) and [PEP 8](https://peps.python.org/pep-0008/) for Python style guidelines.
- Run **yapf** second (PEP 8 base, `column_limit = 120`).
- Indent with 4 spaces, never tabs, and ensure every file ends with a single newline.
- CI fails if formatting is wrong; run `pre-commit run --all-files` locally before pushing.

## Linting

- **ruff** (via `ruff check --fix`) also runs via pre-commit; is executed using the configuration embedded in `pyproject.toml`,
  fix warnings unless they're explicitly ignored in `pyproject.toml`. ruff is only used as a linter not for formatting.
- Respect the naming schemes: `snake_case` for functions & variables, `PascalCase` for classes, `UPPER_CASE` for constants.

## Type Hints

- All public APIs require Python 3.11+ type hints on parameters and return values.
- Prefer `collections.abc` / `typing` abstractions (`Sequence` over `list`).
- Use `typing.Annotated` for units or extra metadata when useful.
- Treat `pyright` warnings (configured in `pyproject.toml`) as errors during development.

## Exception Handling

- Preserve stack traces and prevent duplicate logging when handling exceptions.
- When re-raising exceptions: use bare `raise` statements to maintain the original stack trace, and use `logger.error()` for logging (not `logger.exception()`) to avoid duplicate stack trace output.
- When catching and logging exceptions without re-raising: always use `logger.exception()` (equivalent to `logger.error(exc_info=True)`) to capture the full stack trace information.


## Common Bugs to Avoid

- **Pydantic SecretStr defaults**: Pydantic models using `SecretStr`, `SerializableSecretStr`, or `OptionalSecretStr` with `default=""` creates a bug where the field is initialized as `str` instead of a `SecretStr` instance. Instead:
  - For optional secret fields (e.g., `OptionalSecretStr`): use `default=None`
  - For non-optional secret fields (e.g., `SerializableSecretStr`): use `default_factory=lambda: SerializableSecretStr("")` to ensure each instance gets a unique `SecretStr` object

## Documentation

- Provide Google-style docstrings for every public module, class, function and CLI command.
- The first line must be a concise description ending with a period (Vale checks this).
- Surround code entities with backticks to avoid Vale false-positives.
- Keep docs in sync with code; the **documentation** pipeline will fail on Sphinx errors or broken links.
- **Documentation quality requirements**:
  - Documentation must be clear and comprehensive.
  - Do not include TODOs, FIXMEs, or placeholder text like "lorem ipsum".
  - Avoid offensive or outdated terms.
  - Ensure documentation is free of spelling mistakes.
  - Do not use words listed in `ci/vale/styles/config/vocabularies/nat/reject.txt`.
  - Words that might appear to be spelling mistakes but are listed in `ci/vale/styles/config/vocabularies/nat/accept.txt` are acceptable.

## Testing

- Use **pytest** with `pytest-asyncio` for asynchronous code.
- Name test files `test_*.py` and store them alongside the code in a `tests/` folder.
- **Test naming and structure**:
  - Test functions should be named using the `test_` prefix, using snake_case.
  - Any frequently repeated code should be extracted into pytest fixtures.
  - Pytest fixtures should define the name argument when applying the pytest.fixture decorator.
  - The fixture function being decorated should be named using the `fixture_` prefix or `_fixture` suffix, using snake_case.
  - Example:
    ```python
    @pytest.fixture(name="my_custom_config")
    def my_custom_config_fixture():
        pass
    ```
- Maintain **≥ 80 %** coverage; add or update tests when introducing changes.
- Mock external services with `pytest_httpserver` or `unittest.mock` instead of hitting live endpoints.
- Mark slow tests with `@pytest.mark.slow` so they can be skipped in the default test suite.
- Mark integration tests which require external services with `@pytest.mark.integration` so they can be skipped in the default test suite, follow the integration testing guidelines in the nat-tests/integration-tests.mdc rules.
- Refer to the nat-tests/general.mdc rules for more information on testing.

## Security

- Never commit API keys, credentials or personal data; use environment variables or `.env` files excluded from Git.
- Validate and sanitise all user input, especially in web or CLI interfaces.
- Prefer `httpx` with SSL verification enabled by default and follow OWASP Top-10 recommendations.
- Periodically run `uv pip list --outdated` and upgrade dependencies.

## Continuous Integration

- Never commit code that fails `pre-commit run --all-files` or `ci/scripts/run_ci_local.sh check`.
- Every file must start with the standard SPDX Apache-2.0 header.
- **Copyright requirements**: Confirm that copyright years are up-to-date whenever a file is changed.
- New dependencies must be added to **both** `pyproject.toml` (alphabetically) and `uv.lock` via `uv pip install <pkg> --sync`.
- Sign commits with `--signoff` to comply with the Developer Certificate of Origin (DCO).

## Versioning

- The project follows **semantic versioning** (MAJOR.MINOR.PATCH). Patch releases must remain backward-compatible.
- Version numbers are derived automatically by `setuptools-scm`; never hard-code them in code or docs.
- Add user-visible changes to `CHANGELOG.md` under the appropriate section.

## Performance

- Use `async`/`await` for I/O-bound work (HTTP, DB, file reads).
- Profile CPU-heavy paths with `cProfile` or `mprof` before optimising.
- Cache expensive computations with `functools.lru_cache` or an external cache when appropriate.
- Leverage NumPy vectorised operations whenever beneficial and feasible.

## Licensing

- All source files must include the SPDX Apache-2.0 header template (copy from an existing file).
- Binary assets committed via Git-LFS must have licensing info recorded in `LICENSE-3rd-party.txt` when required.
- CI verifies headers via `ci/scripts/github/checks.sh`; do **not** bypass this check.


================================================
FILE: .cursor/rules/nat-agents/general.mdc
================================================
---
description: Follow these rules when the user's request involves integrating or selecting ReAct, Tool-Calling, Reasoning, or ReWOO agents within NeMo Agent Toolkit workflows
globs:
alwaysApply: false
---
# NeMo Agent Toolkit Agents Integration & Selection Rules

These rules standardise how the four built-in NeMo Agent Toolkit agents are configured inside YAML‐based workflows/functions and provide guidance for choosing the most suitable agent for a task.

## Referenced Documentation

- **ReAct Agent Docs**: [react-agent.md](mdc:docs/source/workflows/about/react-agent.md) – Configuration, prompt format and limitations.
- **Tool-Calling Agent Docs**: [tool-calling-agent.md](mdc:docs/source/workflows/about/tool-calling-agent.md) – Configuration, tool schema routing and limitations.
- **Reasoning Agent Docs**: [reasoning-agent.md](mdc:docs/source/workflows/about/reasoning-agent.md) – Configuration, wrapper semantics and limitations.
- **ReWOO Agent Docs**: [rewoo-agent.md](mdc:docs/source/workflows/about/rewoo-agent.md) – Configuration, planning/solver architecture and limitations.

## Integration Guidelines

1. **ReAct Agent**
   - Use `_type: react_agent` in either the top-level `workflow:` or inside `functions:`.
   - Always provide `tool_names` (list of YAML-defined functions or function groups) and `llm_name`.
   - Optional but recommended parameters: `verbose`, `max_tool_calls`, `parse_agent_response_max_retries`, `pass_tool_call_errors_to_agent`.
   - When overriding the prompt, keep `{tools}` and `{tool_names}` placeholders and ensure the LLM outputs in ReAct format.

2. **Tool-Calling Agent**
   - Use `_type: tool_calling_agent`.
   - Requires an LLM that supports function/tool calling (e.g. OpenAI, Nim chat-completion).
   - Mandatory fields: `tool_names`, `llm_name`.
   - Recommended fields: `verbose`, `handle_tool_errors`, `max_tool_calls`.
   - Tool input parameters must be well-named; the agent relies on them for routing.

3. **ReWOO Agent**
   - Use `_type: rewoo_agent`.
   - Provide `tool_names` and `llm_name`.
   - The agent executes a *planning* and then *solver* phase; advanced users may override `planner_prompt` or `solver_prompt` but must preserve required placeholders.
   - Use `include_tool_input_schema_in_tool_description: true` to improve tool disambiguation.

4. **Reasoning Agent**
   - Use `_type: reasoning_agent`.
   - Requires a *reasoning-capable* LLM (e.g. DeepSeek-R1) that supports `<think></think>` tags.
   - Mandatory fields: `llm_name`, `augmented_fn` (the underlying function/agent to wrap).
   - Optional fields: `verbose`, `reasoning_prompt_template`, `instruction_prompt_template`.
   - The `augmented_fn` must itself be defined in the YAML (commonly a ReAct or Tool-Calling agent).

## Selection Guidelines

Use this quick heuristic when deciding which agent best fits a workflow:

| Scenario | Recommended Agent | Rationale |
| --- | --- | --- |
| Simple, schema-driven tasks (single or few tool calls) | **Tool-Calling** | Lowest latency; leverages function-calling; no iterative reasoning needed |
| Multi-step tasks requiring dynamic reasoning between tool calls | **ReAct** | Iterative Think → Act → Observe loop excels at adaptive decision-making |
| Complex tasks where token/latency cost of ReAct is high but advance planning is beneficial | **ReWOO** | Plans once, then executes; reduces token usage vs. ReAct |
| Need to bolt an upfront reasoning/planning layer onto an existing agent or function | **Reasoning Agent** | Produces a plan that guides the wrapped function; separates planning from execution |

### Additional Tips

- If the LLM **does not** support function/tool calling, prefer **ReAct** or **ReWOO**.
- If up-front planning suffices and adaptability during execution is less critical, prefer **ReWOO** over **ReAct** for better token efficiency.
- When using **Reasoning Agent**, ensure the underlying `augmented_fn` itself can handle the planned steps (e.g., is a ReAct or Tool-Calling agent with relevant tools).
- For workflows that need parallel execution of independent tool calls, none of these agents currently offer built-in parallelism; consider splitting tasks or using custom orchestration.


================================================
FILE: .cursor/rules/nat-cli/general.mdc
================================================
---
description: Follow these rules when the user's request involves NAT CLI commands, operations, or functionality
globs:
alwaysApply: false
---
# General Rules for NAT CLI commands

## Referenced Documentation

- **CLI Documentation**: [cli.md](mdc:docs/source/reference/cli.md) - Comprehensive NAT CLI command reference and usage guide

## Rules

- For requests related to NAT CLI commands, provide detailed information using the relevant sections from the CLI documentation listed in the Referenced Documentation section above. Encourage users to review the documentation themselves for a deeper understanding.

- If CLI commands do not function as expected, refer back to the CLI documentation in the Referenced Documentation section and update any discrepancies in ts, as the documentation may have been updated without corresponding changes to the rules.


================================================
FILE: .cursor/rules/nat-cli/nat-eval.mdc
================================================
---
description: Follow these rules when the user requests to evaluate a workflow
globs:
alwaysApply: false
---
# NeMo Agent Toolkit Evaluation Commands

This rule provides guidance for using `nat eval` command to assess the accuracy of NeMo Agent Toolkit workflows and instrument their performance characteristics.

## nat eval

Evaluates a workflow with a specified dataset to assess accuracy and performance.

### Basic Usage
```bash
nat eval --config_file CONFIG_FILE [OPTIONS]
```

### Required Arguments
- `--config_file FILE`: A JSON/YAML file that sets the parameters for the workflow and evaluation

### Available Options
- `--dataset FILE`: A JSON file with questions and ground truth answers (overrides dataset path in config)
- `--result_json_path TEXT`: JSON path to extract result from workflow output (default: `$`)
- `--skip_workflow`: Skip workflow execution and use provided dataset for evaluation
- `--skip_completed_entries`: Skip dataset entries that already have generated answers
- `--endpoint TEXT`: Use endpoint for running workflow (e.g., `http://localhost:8000/generate`)
- `--endpoint_timeout INTEGER`: HTTP response timeout in seconds (default: 300)
- `--reps INTEGER`: Number of repetitions for evaluation (default: 1)

### Examples
```bash
# Basic evaluation with config file
nat eval --config_file configs/eval_config.yml

# Evaluate with custom dataset
nat eval --config_file configs/eval_config.yml --dataset data/test_questions.json

# Evaluate against running endpoint
nat eval --config_file configs/eval_config.yml --endpoint http://localhost:8000/generate

# Skip workflow execution (evaluate existing results)
nat eval --config_file configs/eval_config.yml --skip_workflow

# Multiple evaluation repetitions
nat eval --config_file configs/eval_config.yml --reps 3

# Extract specific result field
nat eval --config_file configs/eval_config.yml --result_json_path "$.response.answer"

# Skip already completed entries and extend timeout
nat eval --config_file configs/eval_config.yml --skip_completed_entries --endpoint_timeout 600
```

## Dataset Format

The evaluation dataset should be a JSON file containing questions and ground truth answers:

### Basic Format
```json
[
  {
    "question": "What is machine learning?",
    "ground_truth": "Machine learning is a subset of artificial intelligence..."
  },
  {
    "question": "Explain neural networks",
    "ground_truth": "Neural networks are computing systems inspired by..."
  }
]
```

### Extended Format
```json
[
  {
    "question": "What is deep learning?",
    "ground_truth": "Deep learning is a subset of machine learning...",
    "context": "AI fundamentals",
    "difficulty": "intermediate",
    "category": "technical"
  }
]
```

### Dataset with Generated Answers (for skip_workflow)
```json
[
  {
    "question": "What is AI?",
    "ground_truth": "Artificial intelligence refers to...",
    "generated_answer": "AI is the simulation of human intelligence..."
  }
]
```

## Configuration File for Evaluation

The evaluation configuration should include both workflow and evaluation settings:

```yaml
# Workflow components
llms:
  nim_llm:
    _type: "nim_llm"
    model: "meta/llama-3.1-8b-instruct"
    temperature: 0.7

workflow:
  _type: "simple_rag"
  llm: llms.nim_llm

# Evaluation settings
evaluation:
  dataset: "data/eval_dataset.json"
  evaluators:
    - _type: "semantic_similarity"
      threshold: 0.8
    - _type: "factual_accuracy"

  metrics:
    - "accuracy"
    - "bleu_score"
    - "semantic_similarity"
```

## Handling Missing Evaluation Configuration

When working with configuration files that may not contain an evaluation section, follow these rules:

### 1. Auto-detection of Evaluation Configuration
If the specified configuration file does not contain an `evaluation` section:

1. **Search for alternative config files**: Look for configuration files in the same directory that contain an `evaluation` section
2. **Common evaluation config patterns**: Check for files with names like:
   - `*_eval.yml` or `*_eval.yaml`
   - `*_evaluation.yml` or `*_evaluation.yaml`
   - `eval_*.yml` or `eval_*.yaml`
   - `evaluation_*.yml` or `evaluation_*.yaml`
3. **Suggest available options**: If multiple evaluation configs are found, present them to the user for selection

### 2. User Guidance for Missing Evaluation Section
If no evaluation configuration can be found automatically:

1. **Inform the user**: Clearly explain that no evaluation section was found in the configuration file
2. **Request essential information**: Ask the user to provide the following required information:
   - **Dataset path**: Location of the evaluation dataset (JSON file with questions and ground truth)
   - **Evaluators**: Which evaluation metrics to use (e.g., semantic_similarity, factual_accuracy)
   - **Output preferences**: Where to save results and what format to use

### 3. Interactive Configuration Building
When evaluation configuration is missing, guide the user through creating one:

```bash
# Example prompts for missing evaluation config
"No evaluation section found in config file. Please provide:"
"1. Dataset file path (JSON with questions and ground_truth):"
"2. Evaluation metrics (comma-separated): [semantic_similarity, factual_accuracy, bleu_score]:"
"3. Output file path (optional):"
```

### 4. Minimal Evaluation Configuration Template
When user provides minimal information, create a basic evaluation configuration:

```yaml
evaluation:
  dataset: "path/to/user/provided/dataset.json"
  evaluators:
    - _type: "semantic_similarity"
      threshold: 0.8
  metrics:
    - "accuracy"
    - "semantic_similarity"
```

### 5. Configuration Validation
Before proceeding with evaluation:
1. Verify the dataset file exists and is accessible
2. Validate the dataset format (contains required `question` and `ground_truth` fields)
3. Confirm all specified evaluators are available
4. Warn if essential evaluation components are missing

## Result JSON Path Usage

Use `--result_json_path` to extract specific fields from complex workflow outputs:

### Example Workflow Output
```json
{
  "metadata": {"timestamp": "2024-01-01T00:00:00"},
  "response": {
    "answer": "The actual answer text",
    "confidence": 0.95,
    "sources": ["doc1.pdf", "doc2.pdf"]
  },
  "debug_info": {"tokens_used": 150}
}
```

### JSON Path Examples
```bash
# Extract just the answer
nat eval --config_file config.yml --result_json_path "$.response.answer"

# Extract answer with confidence
nat eval --config_file config.yml --result_json_path "$.response"

# Extract root level (default)
nat eval --config_file config.yml --result_json_path "$"
```

## Endpoint Evaluation

When evaluating against a running service:

### Prerequisites
1. Start the service: `nat serve --config_file config.yml --host localhost --port 8000`
2. Verify service is running: Check `http://localhost:8000/docs`

### Evaluation
```bash
# Evaluate against local service
nat eval --config_file eval_config.yml --endpoint http://localhost:8000/generate

# Evaluate against remote service with timeout
nat eval --config_file eval_config.yml --endpoint https://api.example.com/workflow --endpoint_timeout 300
```

## Evaluation Workflows

### 1. Initial Workflow Evaluation
```bash
# Validate configuration
nat validate --config_file eval_config.yml

# Run evaluation
nat eval --config_file eval_config.yml --dataset test_data.json

# Review results and iterate
```

### 2. Continuous Evaluation
```bash
# Skip completed entries for incremental evaluation
nat eval --config_file eval_config.yml --skip_completed_entries

# Multiple repetitions for statistical significance
nat eval --config_file eval_config.yml --reps 5
```

### 3. Production Endpoint Evaluation
```bash
# Start production service
nat serve --config_file prod_config.yml --host 0.0.0.0 --port 8000 --workers 4

# Evaluate production endpoint
nat eval --config_file eval_config.yml --endpoint http://localhost:8000/generate --endpoint_timeout 600
```

### 4. Evaluation-Only Mode
```bash
# When you have pre-generated results
nat eval --config_file eval_config.yml --skip_workflow --dataset results_with_generated_answers.json
```

## Best Practices

1. **Prepare Quality Datasets**: Ensure ground truth answers are accurate and comprehensive
2. **Use Representative Data**: Include diverse questions that reflect real-world usage
3. **Configure Multiple Evaluators**: Use different evaluation metrics for comprehensive assessment
4. **Start Small**: Test with a small dataset before running full evaluations
5. **Version Control Datasets**: Track dataset versions alongside code changes
6. **Document Evaluation Setup**: Keep clear records of evaluation configurations and results
7. **Use Timeouts Appropriately**: Set reasonable timeouts based on expected response times
8. **Incremental Evaluation**: Use `--skip_completed_entries` for long-running evaluations
9. **Statistical Significance**: Use multiple repetitions (`--reps`) for robust results
10. **Monitor Resource Usage**: Consider memory and compute requirements for large datasets

## Common Evaluation Scenarios

### A/B Testing Configurations
```bash
# Evaluate baseline configuration
nat eval --config_file baseline_config.yml --dataset test_set.json --output results_baseline.json

# Evaluate improved configuration
nat eval --config_file improved_config.yml --dataset test_set.json --output results_improved.json

# Compare results
```

### Parameter Tuning
```bash
# Evaluate different temperature settings
nat eval --config_file config.yml --override llms.nim_llm.temperature 0.3 --dataset tune_set.json
nat eval --config_file config.yml --override llms.nim_llm.temperature 0.7 --dataset tune_set.json
nat eval --config_file config.yml --override llms.nim_llm.temperature 0.9 --dataset tune_set.json
```

### Performance Monitoring
```bash
# Regular evaluation with metrics collection
nat eval --config_file monitor_config.yml --endpoint http://prod-service:8000/generate --reps 3
```

## Troubleshooting

- **Timeout Errors**: Increase `--endpoint_timeout` for slow workflows
- **Memory Issues**: Process datasets in smaller batches
- **Connection Errors**: Verify endpoint URLs and service availability
- **JSON Path Errors**: Test JSON paths with sample outputs first
- **Missing Ground Truth**: Ensure dataset format matches expected structure


================================================
FILE: .cursor/rules/nat-cli/nat-info.mdc
================================================
---
description: Follow these rules when the user requests information about NeMo Agent Toolkit components, including: functions, tools, etc.
globs:
alwaysApply: false
---
# NeMo Agent Toolkit Info Commands

This rule provides guidance for using `nat info` commands to discover locally registered NeMo Agent Toolkit components and configured registry channels.

## nat info components

Lists the locally registered NeMo Agent Toolkit components with filtering and search capabilities.

### Basic Usage
```bash
nat info components [OPTIONS]
```

### Available Options
- `-t, --types`: Filter by component type (front_end, function, tool_wrapper, llm_provider, llm_client, embedder_provider, embedder_client, evaluator, memory, retriever_provider, retriever_client, registry_handler, logging, tracing, package, undefined)
- `-o, --output_path TEXT`: Path to save search results
- `-q, --query TEXT`: Query string for searching (default: "")
- `-n, --num_results INTEGER`: Number of results to return (default: -1, meaning all)
- `-f, --fields`: Fields to include in results (all, package, version, component_name, description, developer_notes)

### Output Columns
- `package`: The Python package containing the component
- `version`: The version of the Python package
- `component_type`: Type of NeMo Agent Toolkit component
- `component_name`: Name to use in the `_type` field of configuration
- `description`: Component description, configuration parameters, and default values

### Examples
```bash
# List all registered components
nat info components

# Filter by component type
nat info components --types llm_provider
nat info components --types retriever_provider
nat info components --types function

# Search for specific components
nat info components --query "milvus"
nat info components --query "embedding"

# Filter multiple component types
nat info components --types llm_provider --types embedder_provider

# Limit results and save to file
nat info components --query "rag" --num_results 10 --output_path component_search.json

# Show only specific fields
nat info components --fields component_name --fields description
```

### Use Cases
- **Configuration Discovery**: Find component names to use in YAML config files
- **Parameter Research**: Understand component configuration options and defaults
- **Component Exploration**: Discover available components for workflow development
- **Documentation**: Generate component inventories and documentation

## nat info channels

Lists the configured remote registry channels and their settings.

### Basic Usage
```bash
nat info channels [OPTIONS]
```

### Available Options
- `-t, --type TEXT`: Filter results by channel type (rest, pypi)

### Examples
```bash
# List all configured channels
nat info channels

# Filter by channel type
nat info channels --type rest
nat info channels --type pypi
```

### Use Cases
- **Registry Management**: View configured remote registries
- **Channel Verification**: Confirm channel configurations before publishing or pulling
- **Environment Setup**: Verify remote registry setup

## Common Information Gathering Workflows

### 1. Setting Up a New Workflow
```bash
# Find available LLM providers
nat info components --types llm_provider

# Find available retrievers
nat info components --types retriever_provider

# Search for specific functionality
nat info components --query "embedding"
```

### 2. Debugging Configuration Issues
```bash
# Verify component exists and get exact name
nat info components --query "component_name"

# Check available parameters for a component
nat info components --query "specific_component" --fields description

# List all components in a package
nat info components --query "package_name"
```

### 3. Component Discovery
```bash
# Explore all available tools
nat info components --types tool_wrapper

# Find evaluation components
nat info components --types evaluator

# Search for memory components
nat info components --types memory
```

### 4. Registry Management
```bash
# Check configured registries
nat info channels

# Verify specific registry type
nat info channels --type rest
```

## Component Types Reference

- **front_end**: User interfaces and interaction components
- **function**: Core workflow functions and logic
- **tool_wrapper**: External tool integrations
- **llm_provider**: Large language model providers
- **llm_client**: LLM client implementations
- **embedder_provider**: Embedding model providers
- **embedder_client**: Embedding client implementations
- **evaluator**: Workflow evaluation components
- **memory**: Memory and state management components
- **retriever_provider**: Document retrieval providers
- **retriever_client**: Document retrieval client implementations
- **registry_handler**: Registry interaction components
- **logging**: Logging and monitoring components
- **tracing**: Workflow tracing and debugging components
- **package**: Package-level components

## Best Practices

1. **Start with component discovery**: Use `nat info components` before writing configurations
2. **Use type filters**: Narrow down searches with `--types` to find relevant components
3. **Save search results**: Use `--output_path` for documentation and reference
4. **Check descriptions carefully**: Component descriptions contain crucial configuration details
5. **Verify component names**: Use exact component names from search results in configs
6. **Explore systematically**: Search by functionality keywords to discover relevant components

## Integration with Other Commands

### Before Configuration
```bash
# Discover components for your workflow
nat info components --types llm_provider --types retriever_provider

# Create configuration file using discovered component names
# Then validate the configuration
nat validate --config_file my_config.yml
```

### Before Registry Operations
```bash
# Check available channels before publishing
nat info channels

# Verify specific channel exists
nat info channels --type rest
```

### During Development
```bash
# Find tools to integrate
nat info components --types tool_wrapper --query "search_term"

# Check available evaluators
nat info components --types evaluator
```

## Output Format Tips

- Results are displayed in tabular format by default
- Use `--output_path` to save results as JSON for programmatic use
- Filter fields with `--fields` to focus on specific information
- Use `--num_results` to limit output for large result sets


================================================
FILE: .cursor/rules/nat-cli/nat-run-serve.mdc
================================================
---
description: Follow these rules when the user's request involves running, serving, or executing NeMo Agent Toolkit workflows
globs:
alwaysApply: false
---
# NeMo Agent Toolkit Run and Serve Commands

This rule provides guidance for using `nat run` and `nat serve` commands to execute and deploy NeMo Agent Toolkit workflows.

## nat run

Runs a NeMo Agent Toolkit workflow from a configuration file with command-line inputs. This is an alias for `nat start console`.

### Basic Usage
```bash
nat run --config_file CONFIG_FILE [OPTIONS]
```

### Required Arguments
- `--config_file FILE`: A JSON/YAML file that sets the parameters for the workflow

### Available Options
- `--override <TEXT TEXT>...`: Override config values using dot notation (e.g., `--override llms.nim_llm.temperature 0.7`)
- `--input TEXT`: A single input to submit to the workflow
- `--input_file FILE`: Path to a JSON file of inputs to submit to the workflow

### Examples
```bash
# Basic workflow execution with single input
nat run --config_file configs/rag_config.yml --input "What is machine learning?"

# Run with input file
nat run --config_file configs/rag_config.yml --input_file inputs/questions.json

# Override configuration parameters
nat run --config_file configs/rag_config.yml --input "Hello" --override llms.nim_llm.temperature 0.5

# Multiple configuration overrides
nat run --config_file configs/rag_config.yml --input "Test query" \
  --override llms.nim_llm.temperature 0.7 \
  --override retriever.top_k 10
```

### Use Cases
- One-off testing and debugging
- Running workflows in development
- Batch processing with input files
- Quick validation of workflow configurations

## nat serve

Serves a FastAPI endpoint for the workflow. This is an alias for `nat start fastapi`.

### Basic Usage
```bash
nat serve --config_file CONFIG_FILE [OPTIONS]
```

### Required Arguments
- `--config_file FILE`: A JSON/YAML file that sets the parameters for the workflow

### Available Options
- `--override <TEXT TEXT>...`: Override config values using dot notation
- `--root_path TEXT`: The root path for the API
- `--host TEXT`: Host to bind the server to
- `--port INTEGER`: Port to bind the server to
- `--reload BOOLEAN`: Enable auto-reload for development
- `--workers INTEGER`: Number of workers to run
- `--use_gunicorn BOOLEAN`: Use Gunicorn to run the FastAPI app
- `--runner_class TEXT`: The NAT runner class to use when launching from multiple processes

### Examples
```bash
# Basic local development server
nat serve --config_file configs/rag_config.yml --host 0.0.0.0 --port 8000

# Production server with multiple workers
nat serve --config_file configs/rag_config.yml --host 0.0.0.0 --port 8000 --workers 4 --use_gunicorn true

# Development server with auto-reload
nat serve --config_file configs/rag_config.yml --host localhost --port 8000 --reload true

# Serve with configuration overrides
nat serve --config_file configs/rag_config.yml --port 8080 \
  --override llms.nim_llm.max_tokens 2048 \
  --override retriever.top_k 5
```

### API Documentation
Once served, Swagger API documentation is available at: `http://<HOST>:<PORT>/docs`

Example: `http://localhost:8000/docs`

### Use Cases
- Microservice deployment
- Production API endpoints
- Development testing with REST clients
- Integration with other applications

## Configuration File Requirements

Both commands require a valid workflow configuration file that:
- Defines the workflow components and their parameters
- Uses proper YAML or JSON format
- Maps to registered NeMo Agent Toolkit components

### Example Configuration Structure
```yaml
llms:
  nim_llm:
    _type: "nim_llm"
    model: "meta/llama-3.1-8b-instruct"
    temperature: 0.7

retrievers:
  milvus_retriever:
    _type: "milvus"
    host: "localhost"
    port: 19530

workflow:
  _type: "simple_rag"
  llm: llms.nim_llm
  retriever: retrievers.milvus_retriever
```

## Best Practices

1. **Use descriptive config names**: Name configuration files clearly (e.g., `rag_config.yml`, `qa_config.yml`)
2. **Validate configs first**: Use `nat validate --config_file CONFIG` before running
3. **Start with run command**: Test workflows with `nat run` before serving
4. **Use overrides for testing**: Test different parameters without modifying config files
5. **Enable reload in development**: Use `--reload true` when developing
6. **Use proper ports**: Choose appropriate ports for your deployment environment
7. **Check API docs**: Always verify endpoints at `/docs` after serving

## Common Development Workflow
1. **Validate**: `nat validate --config_file config.yml`
2. **Test**: `nat run --config_file config.yml --input "test input"`
3. **Serve locally**: `nat serve --config_file config.yml --host localhost --port 8000 --reload true`
4. **Check API**: Open `http://localhost:8000/docs` in browser
5. **Deploy**: `nat serve --config_file config.yml --host 0.0.0.0 --port 8000 --workers 4`

## Input File Format

When using `--input_file`, the JSON file should contain a list of inputs:

```json
[
  "What is artificial intelligence?",
  "Explain machine learning",
  "How does deep learning work?"
]
```

Or for more complex inputs:
```json
[
  {"query": "What is AI?", "context": "technical"},
  {"query": "Explain ML", "context": "beginner"}
]
```


================================================
FILE: .cursor/rules/nat-cli/nat-workflow.mdc
================================================
---
description: Follow these rules when the user's request involves creating, reinstalling, or deleting NeMo Agent Toolkit workflows
globs:
alwaysApply: false
---
# NeMo Agent Toolkit Workflow Commands

This rule provides guidance for using `nat workflow create`, `nat workflow reinstall`, and `nat workflow delete` commands effectively.

## nat workflow create

Creates a new NAT workflow using templates with boilerplate code.

### Basic Usage
```bash
nat workflow create WORKFLOW_NAME
```

### Available Options
- `--install` / `--no-install`: Whether to install the workflow package immediately (default: install)
- `--workflow-dir TEXT`: Output directory for saving the created workflow (default: current directory)
- `--description TEXT`: Description for the workflow docstring and component metadata

### Examples
```bash
# Create a basic workflow with default settings
nat workflow create my_rag_workflow

# Create workflow with custom description and don't install immediately
nat workflow create my_rag_workflow --no-install --description "A custom RAG workflow for document processing"

# Create workflow in specific directory
nat workflow create my_rag_workflow --workflow-dir ./my_workflows --description "Custom workflow for data analysis"
```

### What it generates
- Valid `pyproject.toml` file with plugin section
- `register.py` file with NAT boilerplate code
- Configuration file for launching the workflow

## nat workflow reinstall

Rebuilds and reinstalls a workflow package after modifications.

### Basic Usage
```bash
nat workflow reinstall WORKFLOW_NAME
```

### When to use
- After modifying the workflow's Python code
- After updating dependencies in `pyproject.toml`
- After making changes to the workflow's configuration
- After adding new tools or components

### Example
```bash
# Reinstall after making code changes
nat workflow reinstall my_rag_workflow
```

## nat workflow delete

Removes a workflow package from the local environment and uninstalls it.

### Basic Usage
```bash
nat workflow delete WORKFLOW_NAME
```

### Example
```bash
# Remove workflow completely
nat workflow delete my_rag_workflow
```

## Best Practices

1. **Use descriptive workflow names**: Choose names that clearly indicate the workflow's purpose
2. **Always reinstall after code changes**: Use `nat workflow reinstall` when modifying workflow code
3. **Use custom descriptions**: Provide meaningful descriptions when creating workflows
4. **Organize workflows**: Use `--workflow-dir` to organize workflows in dedicated directories
5. **Clean up unused workflows**: Use `nat workflow delete` to remove workflows no longer needed

## Common Workflow
1. Create: `nat workflow create my_workflow --description "Description of what it does"`
2. Develop: Modify the generated code in `register.py` and configuration
3. Test: Use `nat run` or `nat serve` to test the workflow
4. Update: Use `nat workflow reinstall my_workflow` after code changes
5. Clean up: Use `nat workflow delete my_workflow` when no longer needed


================================================
FILE: .cursor/rules/nat-setup/general.mdc
================================================
---
description: Follow these rules when the user's request involves NeMo Agent Toolkit installation, setup, environment configuration, or getting started with the toolkit
globs:
alwaysApply: false
---
# General Rules for NeMo Agent Toolkit Setup and Installation

## Referenced Documentation

- **README**: [README.md](mdc:README.md) - Main project overview, features, and getting started guide
- **Installation Guide**: [installation.md](mdc:docs/source/quick-start/installation.md) - Comprehensive installation instructions and setup guide

## Rules

- For requests related to NeMo Agent Toolkit setup, installation, or getting started, provide detailed information using the relevant sections from the documentation listed in the Referenced Documentation section above. Encourage users to review the documentation themselves for a deeper understanding.

- If installation or setup procedures do not function as expected, refer back to the documentation in the Referenced Documentation section and update any discrepancies, as the documentation may have been updated without corresponding changes to the rules.

- When helping users with environment setup, dependency installation, or initial configuration, always reference the specific steps and prerequisites outlined in the Referenced Documentation section.

- For questions about supported frameworks, API integrations, or plugin installations, direct users to the appropriate sections in the Referenced Documentation section that cover these topics comprehensively.


================================================
FILE: .cursor/rules/nat-setup/nat-toolkit-installation.mdc
================================================
---
description: Follow these rules when the user's request involves installing, setting up, or configuring NeMo Agent Toolkit or its plugins
globs:
alwaysApply: false
---
# NeMo Agent Toolkit Installation Guide

This rule provides comprehensive instructions for installing NeMo Agent Toolkit from source, including prerequisites, installation options, and verification steps.

## Prerequisites Check

Before installing NeMo Agent Toolkit, verify all prerequisites are installed:

1. **Check Git installation:**
   ```bash
   git --version
   ```

2. **Check Git LFS installation:**
   ```bash
   git lfs version
   ```

3. **Check uv installation:**
   ```bash
   uv --version
   ```

If any prerequisite is missing, install them:
- [Git](mdc:https:/git-scm.com)
- [Git Large File Storage (LFS)](mdc:https:/git-lfs.github.com)
- [uv](mdc:https:/docs.astral.sh/uv/getting-started/installation)

## Installation Steps

### 1. Clone Repository and Setup

```bash
# Assuming the repository is cloned in the current directory. If not, ask user to input the path to the repository.
cd nemo-agent-toolkit

# Initialize, fetch, and update submodules
git submodule update --init --recursive

# Fetch LFS files
git lfs install
git lfs fetch
git lfs pull
```

### 2. Create Python Environment

```bash
# Create virtual environment with seed packages
uv venv --seed .venv

# For specific Python version (if multiple versions available):
uv venv --seed .venv --python 3.11
# or
uv venv --seed .venv --python 3.12
# or
uv venv --seed .venv --python 3.13

# Activate the environment
source .venv/bin/activate
```

### 3. Installation Options

Choose the appropriate installation option based on requirements:

#### Option A: Full Installation (Recommended for Development)
Install with most plugins and developer tools:
```bash
uv sync --all-groups --extra most
```

#### Option B: Core Only Installation
Install just the core NeMo Agent Toolkit without plugins:
```bash
uv sync
```

#### Option C: Core + Specific Plugins
Install core plus individual plugins as needed:
```bash
# First install core
uv sync

# Then install specific plugins (examples):
uv pip install -e '.[langchain]'
uv pip install -e '.[llama-index]'
uv pip install -e '.[crewai]'
uv pip install -e '.[mem0ai]'
```

#### Option D: Core + Profiling Tools
Install core with profiling dependencies:
```bash
uv sync
uv pip install -e '.[profiling]'
```

## Available Plugin Options

Inspect the root pyproject.toml file for extras as the following list may be incomplete.

When installing specific plugins, refer to the `[project.optional-dependencies]` section of the root `pyproject.toml` for the authoritative, up-to-date list of available extras/plugins.

To view all options, check the root `pyproject.toml` directly. Here is an example command you can run to see all available plugin options (extras):
```bash
uv pip show nvidia-nat | grep Provides-Extra
```
or simply open `pyproject.toml` and look for entries under `[project.optional-dependencies]`.

## Dependency Groups
When installing dependencies, you can use the following groups:
- `test` - Testing utilities
- `profiling` - Profiling tools

## Verification Steps

After installation, verify NeMo Agent Toolkit is properly installed:

```bash
# Check version
nat --version

# Check help
nat --help
```

Expected output should show version information and help text without errors.

## API Key Setup

For most workflows, set up the NVIDIA API key:

```bash
# Set NVIDIA API key (obtain from build.nvidia.com)
export NVIDIA_API_KEY=<your_api_key>

# Optionally add to shell profile for persistence:
echo 'export NVIDIA_API_KEY=<your_api_key>' >> ~/.bashrc
# or for zsh:
echo 'export NVIDIA_API_KEY=<your_api_key>' >> ~/.zshrc
```

## Quick Test - Hello World Example

Create a test workflow to verify installation:

```bash
# Create workflow.yaml
cat << 'EOF' > workflow.yaml
functions:
   wikipedia_search:
      _type: wiki_search
      max_results: 2

llms:
   nim_llm:
      _type: nim
      model_name: meta/llama-3.1-70b-instruct
      temperature: 0.0

workflow:
   _type: react_agent
   tool_names: [wikipedia_search]
   llm_name: nim_llm
   verbose: true
   parse_agent_response_max_retries: 3
EOF

# Test the workflow
nat run --config_file workflow.yaml --input "List five subspecies of Aardvarks"
```

## Ready State Checklist

NeMo Agent Toolkit is ready for development when:

- [ ] `nat --version` returns version information
- [ ] `nat --help` shows command options
- [ ] NVIDIA_API_KEY environment variable is set
- [ ] Virtual environment is activated
- [ ] Required plugins are installed for your use case
- [ ] Hello world example runs successfully (optional but recommended)

## Common Installation Issues

1. **Python version mismatch**: Ensure Python 3.11 or 3.12 or 3.13 is used
2. **Git LFS not installed**: Large files won't download properly
3. **Submodules not initialized**: Some dependencies will be missing
4. **Virtual environment not activated**: Commands may not work
5. **Missing API key**: Most workflows require NVIDIA_API_KEY

## Example Installation Commands for Different Use Cases

### For LangChain/LangGraph Development:
```bash
git clone git@github.com:NVIDIA/NeMo-Agent-Toolkit.git nemo-agent-toolkit && cd nemo-agent-toolkit
git submodule update --init --recursive
git lfs install && git lfs fetch && git lfs pull
uv venv --seed .venv && source .venv/bin/activate
uv sync
uv pip install -e '.[langchain]'
export NVIDIA_API_KEY=<your_key>
nat --version
```

### For Full Development Environment:
```bash
git clone git@github.com:NVIDIA/NeMo-Agent-Toolkit.git nemo-agent-toolkit && cd nemo-agent-toolkit
git submodule update --init --recursive
git lfs install && git lfs fetch && git lfs pull
uv venv --seed .venv && source .venv/bin/activate
uv sync --all-groups --extra most
export NVIDIA_API_KEY=<your_key>
nat --version
```

### For Testing Existing Workflows:
```bash
git clone git@github.com:NVIDIA/NeMo-Agent-Toolkit.git nemo-agent-toolkit && cd nemo-agent-toolkit
git submodule update --init --recursive
git lfs install && git lfs fetch && git lfs pull
uv venv --seed .venv && source .venv/bin/activate
uv sync
uv pip install -e examples/simple
export NVIDIA_API_KEY=<your_key>
nat run --config_file=examples/getting_started/simple_web_query/configs/config.yml --input "What is LangSmith"
```


================================================
FILE: .cursor/rules/nat-tests/general.mdc
================================================
---
description: Follow these rules when the user's request involves writing, creating, or modifying tests for NeMo Agent Toolkit
globs:
alwaysApply: false
---

# Testing Guidelines for NeMo Agent Toolkit

Follow these rules when writing, creating, or modifying tests for NeMo Agent Toolkit.

## Referenced Documentation

- **Running Tests Guide**: [running-tests.md](mdc:docs/source/resources/running-tests.md) - Complete guide for running unit and integration tests
- **Test Fixtures**: [plugin.py](mdc:packages/nvidia_nat_test/src/nat/test/plugin.py) - Test fixtures
- **Test Utilities**: [utils.py](mdc:packages/nvidia_nat_test/src/nat/test/utils.py) - Test utilities
- **Docker Services**: [docker-compose.services.yml](mdc:tests/test_data/docker-compose.services.yml) - Services for integration testing

## General Testing Rules

All tests in NeMo Agent Toolkit use pytest. See the general coding guidelines for basic testing requirements.

### Unit Tests

- Use `pytest` for all unit tests
- Name test files `test_*.py`
- Mock external services with `pytest_httpserver` or `unittest.mock`
- Maintain ≥ 80% code coverage
- Do NOT add `@pytest.mark.asyncio` to any test - async tests are automatically detected and run by the async runner

### Fixtures
- Use `@pytest.fixture(name="fixture_name")` decorator pattern
- Fixtures that are used in multiple tests should be defined in the `packages/nvidia_nat_test/src/nat/test/plugin.py` file, fixtures specific to a single package should be defined in a `conftest.py` file in the `tests` directory of the package, and fixtures that are specific to a single test can be defined in the test file itself.

#### Available Fixtures

**API Keys**: `nvidia_api_key`, `openai_api_key`, `tavily_api_key`, `mem0_api_key`

**Services**: `milvus_uri`, `redis_url`, `mysql_connection_info`, `phoenix_url`

**Directories**: `root_repo_dir`, `examples_dir` (NAT repo only)

**Mocked Objects**: `mock_httpx_async_client`, `mock_httpx_sync_client`, `mock_builder`

There are many more fixtures available, refer to the [plugin.py](mdc:packages/nvidia_nat_test/src/nat/test/plugin.py) file and any `conftest.py` files defined in the file hierarchy of the current test file for the complete list.

### Integration Tests

For workflows that require actual LLM services or external services, follow the integration testing guidelines:

**See**: [Integration Testing Guidelines](mdc:.cursor/rules/nat-tests/integration-tests.mdc)

Key requirements:

- Use `@pytest.mark.slow` and `@pytest.mark.integration` decorators
- Use API key fixtures from `nvidia-nat-test` package
- Use `locate_example_config()` and `run_workflow()` utilities
- Service fixtures ensure services are running before tests execute

### Test LLM (nat_test_llm)

For deterministic testing without requiring actual LLM API calls, use the `nat_test_llm`:

**See**: [Test LLM Guidelines](mdc:.cursor/rules/nat-tests/nat-test-llm.mdc)

Key features:

- Stub LLM responses with predictable sequences
- No API keys or external services required
- Configurable artificial latency for testing timing scenarios
- Works with all framework wrappers (LangChain, LlamaIndex, CrewAI, etc.)

### Running Tests

Always use the user's current virtual environment when running tests.

Always include a package subdirectory or multiple subdirectories when invoking pytest.

```bash
# Unit tests only (default)
pytest packages/nvidia_nat_core

# Include slow tests
pytest --run_slow packages/nvidia_nat_core packages/nvidia_nat_langchain

# Include integration tests
pytest --run_integration packages/nvidia_nat_core

# All tests
pytest --run_slow --run_integration packages/nvidia_nat_langchain
```

## Related Rules

- **Integration Tests**: [integration-tests.mdc](mdc:.cursor/rules/nat-tests/integration-tests.mdc) - Detailed integration testing guidelines
- **Test LLM**: [nat-test-llm.mdc](mdc:.cursor/rules/nat-tests/nat-test-llm.mdc) - Using nat_test_llm to simulate deterministic LLM responses
- **General Guidelines**: [general.mdc](mdc:.cursor/rules/general.mdc) - Overall coding and testing standards

## Quick Reference

### Test Decorators

- `@pytest.mark.slow` - Tests taking >30 seconds
- `@pytest.mark.integration` - Tests requiring external services
- `@pytest.mark.usefixtures("api_key_name")` - Test requires a specific API key to be set in the environment

### Test Utilities

- `locate_example_config(ConfigClass)` - Find config files
- `run_workflow(config_file, question, expected_answer)` - Run and validate workflows
- `load_config(config_file)` - Load configuration objects

### Test LLM

- `_type: nat_test_llm` - Use in YAML configs to stub LLM responses
- `TestLLMConfig(response_seq=[...], delay_ms=0)` - Programmatic test LLM configuration


================================================
FILE: .cursor/rules/nat-tests/integration-tests.mdc
================================================
---
description: Follow these rules when the user's request involves writing, creating, or modifying integration tests for NeMo Agent Toolkit workflows
globs:
alwaysApply: false
---

# Integration Testing Guidelines

Follow these rules when writing integration tests for NeMo Agent Toolkit workflows.

## Required Test Structure

Every integration test MUST include the decorators:

```python
@pytest.mark.integration
async def test_workflow():
    from nat.test.utils import locate_example_config, run_workflow
    from workflow_package.register import WorkflowConfig

    config_file = locate_example_config(WorkflowConfig)
    await run_workflow(config_file=config_file, question="test", expected_answer="answer")
```

### Decorator Purposes

- `@pytest.mark.slow` - Tests taking longer than 30 seconds
- `@pytest.mark.integration` - Tests requiring external services or API keys
- `@pytest.mark.usefixtures(...)` - Ensures required fixtures are available

## API Key Fixtures

Available from `nvidia-nat-test` package:

- `nvidia_api_key`, `openai_api_key`, `tavily_api_key`
- `mem0_api_key`, `azure_openai_api_key`
- `serp_api_key`, `serperdev_api_key`

Multiple fixtures: `@pytest.mark.usefixtures("nvidia_api_key", "tavily_api_key")`

## Test Utility Functions

### locate_example_config()

Locates configuration files relative to workflow configuration class:

```python
from nat.test.utils import locate_example_config

config_file = locate_example_config(WorkflowConfig)  # finds config.yml
config_file = locate_example_config(WorkflowConfig, "config-alt.yml")
```

### run_workflow()

Runs workflow and validates expected answer:

```python
from nat.test.utils import run_workflow

# Basic usage - case-insensitive matching
await run_workflow(
    config_file=config_file,
    question="What are LLMs?",
    expected_answer="Large Language Model"
)

# Custom validation
result = await run_workflow(
    config_file=config_file,
    question="What are LLMs?",
    expected_answer="",
    assert_expected_answer=False
)
assert "large language model" in result.lower()

# Using config object instead of file
from nat.runtime.loader import load_config
config = load_config(config_file)
config.retrievers['retriever'].uri = HttpUrl(url=service_uri)
await run_workflow(config=config, question="...", expected_answer="...")
```

## Workflows Without Configuration Classes

For YAML-only workflows:

```python
from pathlib import Path

config_file = Path(__file__).parent / "configs/config.yml"
await run_workflow(config_file=config_file, question="...", expected_answer="...")
```

## Service Fixtures

Available service fixtures that ensure services are running:

- `milvus_uri`, `etcd_url`, `redis_url`
- `mysql_connection_info`, `opensearch_url`
- `phoenix_url`, `minio_client`

Example:

```python
@pytest.mark.slow
@pytest.mark.integration
@pytest.mark.usefixtures("nvidia_api_key")
async def test_workflow(milvus_uri: str):
    from pydantic import HttpUrl
    from nat.runtime.loader import load_config
    from nat.test.utils import locate_example_config, run_workflow

    config_file = locate_example_config(WorkflowConfig)
    config = load_config(config_file)
    config.retrievers['retriever'].uri = HttpUrl(url=milvus_uri)

    await run_workflow(config=config, question="test", expected_answer="answer")
```

## Creating Custom Service Fixtures

Pattern for new service fixtures:

```python
import os
import pytest

@pytest.fixture(name="service_uri", scope="session")
def service_uri_fixture(fail_missing: bool = False) -> str:
    """Ensure service is running and provide connection URI."""
    host = os.getenv("NAT_CI_SERVICE_HOST", "localhost")
    port = os.getenv("NAT_CI_SERVICE_PORT", "1234")
    uri = f"http://{host}:{port}"

    try:
        # Lazy import - optional dependency
        from service_library import ServiceClient
        ServiceClient(uri=uri).ping()
        return uri
    except Exception:
        reason = f"Unable to connect to Service at {uri}"
        if fail_missing:
            raise RuntimeError(reason)
        pytest.skip(reason=reason)
```

Key practices:

- Use `scope="session"` for service fixtures
- Lazy import service libraries inside fixture
- Allow configuration via environment variables, prefixed with `NAT_CI_`
- Skip tests if service unavailable (unless `--fail_missing`)
- Add new services to `tests/test_data/docker-compose.services.yml`

## Best Practices

### DO

- Use `@pytest.mark.integration` decorator, and optionally the `@pytest.mark.slow` decorator for slow tests
- Use `@pytest.mark.usefixtures()` for required API keys
- Use `locate_example_config()` for workflows with config classes
- Use `run_workflow()` for consistent test execution
- Use simple, predictable questions and expected answers
- Override config values to use test service URIs from fixtures
- Import test utilities within test functions (not module level)
- Make tests async with `async def`
- Use session-scoped fixtures for services
- Use lazy imports in fixtures for optional dependencies

### DON'T

- Hard-code service URLs (use fixtures instead)
- Use complex questions with unpredictable LLM responses
- Import third-party service libraries at module level in fixtures
- Use function scope for service fixtures (use session scope)
- Fail tests when services are unavailable (skip them instead)
- Add `@pytest.mark.asyncio` decorator - async tests are automatically detected and run by the async runner

## Running Integration Tests

```bash
# Set API keys
export NVIDIA_API_KEY=<key>

# Start services
docker compose -f tests/test_data/docker-compose.services.yml up -d

# Run tests
pytest --run_slow --run_integration

# Clean up
docker compose -f tests/test_data/docker-compose.services.yml down
```

## Reference

- Test utilities and fixtures: `packages/nvidia_nat_test/src/nat/test/plugin.py`
- Docker Compose services: `tests/test_data/docker-compose.services.yml`
- Full documentation: [Running Tests](mdc:docs/source/resources/running-tests.md)


================================================
FILE: .cursor/rules/nat-tests/nat-test-llm.mdc
================================================
---
description: Follow these rules when the user's request involves using NAT test LLM (nat_test_llm) to simulate deterministic responses in workflows or tests
globs:
alwaysApply: false
---
# Test LLM (nat_test_llm)

- Use `_type: nat_test_llm` in `llms` to stub responses.
- Fields:
  - `response_seq`: list of strings; cycles per call; `[]` returns empty string.
  - `delay_ms`: per-call artificial latency in milliseconds.
- YAML example:
    ```yaml
    llms:
    main:
        _type: nat_test_llm
        response_seq: [alpha, 2, "gamma"]
        delay_ms: 0
    workflow:
    _type: chat_completion
    llm_name: main
    ```
- Programmatic (builder):
  - Create `TestLLMConfig(response_seq=[...], delay_ms=0)`, `add_llm("main", cfg)`, then `get_llm("main", wrapper_type=<LANGCHAIN|LLAMA_INDEX|CREWAI|SEMANTIC_KERNEL|AGNO>)` and call the wrapper’s method (`ainvoke`, `achat`, `call`, etc.).
  - Python example:
    ```python
    from nat.test.llm import TestLLMConfig
    from nat.builder.workflow_builder import WorkflowBuilder
    from nat.builder.framework_enum import LLMFrameworkEnum

    async def main():
        async with WorkflowBuilder() as builder:
            # 1) Add the test LLM with a deterministic cycle of responses
            await builder.add_llm(
                "main",
                TestLLMConfig(response_seq=["alpha", "beta", "gamma"], delay_ms=0),
            )
            # 2) Get a wrapper for the framework and call the test LLM
            llm = await builder.get_llm("main", wrapper_type=LLMFrameworkEnum.LANGCHAIN)
            print(await llm.ainvoke("hello"))  # alpha
            print(llm.invoke("world"))         # beta
    ```
- Registration:
  - Ensure `nat.test.llm` is importable (install the `nvidia-nat-test` package from `packages/` or import `nat.test.llm` once).
- Notes:
  - The `response_seq` cycle persists within a loaded workflow instance and resets on reload.
  - Returns plain strings; no NAT retry/thinking patches applied.


================================================
FILE: .cursor/rules/nat-workflows/add-functions.mdc
================================================
---
description: Follow these rules when the user's request involves implementing, adding, creating, or modifying functions within NeMo Agent Toolkit workflows
globs:
alwaysApply: false
---
# Creating NeMo Agent Toolkit Functions

This document provides rules and guidelines for creating functions (also referred to as tools) in the NeMo Agent Toolkit. Functions are the core building blocks for defining workflow logic.

## Core Concepts

- **Asynchronous**: All functions are asynchronous. Use `async`/`await`.
- **Type-Safe**: Use Python type hints for inputs and outputs. Pydantic is used for validation.
- **I/O Modes**: Functions can have a single output (`ainvoke`) and/or a streaming output (`astream`).
- **Registration**: Functions must be registered using the `@register_function` decorator to be available in the toolkit.
- **Configuration**: Each function has a Pydantic configuration class inheriting from `FunctionBaseConfig`.

## Step-by-Step Guide to Creating a Function

### 1. Define the Configuration Class

Every function needs a configuration class that inherits from `nat.data_models.function.FunctionBaseConfig`. This class defines the function's configuration parameters.

- The class must have a `name` attribute, which is the unique identifier for the function.
- Use Pydantic's `Field` to provide default values, descriptions, and validation for configuration options.

**Example:**
```python
from nat.data_models.function import FunctionBaseConfig
from pydantic import Field

class MyFunctionConfig(FunctionBaseConfig, name="my_function"):
    """Configuration for My Function."""
    greeting: str = Field("Hello", description="The greeting to use.")
    repeat_count: int = Field(1, description="Number of times to repeat the greeting.", gt=0)
```

### 2. Write the Function Logic

There are two primary ways to implement a function's logic:

#### A. As a Callable (Recommended for simplicity)

Implement the logic as an `async` Python function.

- The function's description is taken from its docstring.
- The input and output types are inferred from type annotations.
- For multiple arguments, a Pydantic model is automatically generated.

**Example (Single Output):**
```python
async def _my_simple_function(message: str) -> str:
    """
    A simple function that returns a greeting.
    """
    return f"Hello, {message}"
```

**Example (Streaming Output):**
```python
from typing import AsyncGenerator

async def _my_streaming_function(message: str) -> AsyncGenerator[str, None]:
    """
    A simple streaming function.
    """
    for i in range(3):
        yield f"Stream {i}: {message}"
```

#### B. As a `Function` Subclass (For complex state or logic)

Inherit from `nat.builder.function.Function` and implement `_ainvoke` and/or `_astream`.

- Generic parameters `Function[InputType, StreamOutputType, SingleOutputType]`. Use `None` or `NoneType` if an output type is not supported.

**Example:**
```python
from nat.builder.function import Function
from typing import AsyncGenerator, NoneType

class MyComplexFunction(Function[str, str, str]):
    async def _ainvoke(self, value: str) -> str:
        # Single output logic
        return f"Single output: {value}"

    async def _astream(self, value: str) -> AsyncGenerator[str, None]:
        # Streaming output logic
        for i in range(3):
            yield f"Stream {i}: {value}"
```

### 3. Register the Function

Use the `@register_function` decorator on an `async` generator function. This registration function `yield`s the actual function logic.

- The `config_type` in the decorator must match your configuration class.
- The registration function receives the `config` instance and a `builder` object.
- **IMPORTANT**: To avoid premature loading, define or import the function logic *inside* the registration function.

**Example (Registering a Callable):**
```python
from nat.cli.register_workflow import register_function
from nat.builder.builder import Builder

@register_function(config_type=MyFunctionConfig)
async def register_my_function(config: MyFunctionConfig, builder: Builder):
    # Initialization logic here (e.g., loading models)
    print("Initializing my function...")

    async def _my_function(message: str) -> str:
        """My function implementation."""
        # Access config: config.greeting, config.repeat_count
        return f"{config.greeting}, {message}" * config.repeat_count

    yield _my_function

    # Cleanup logic here
    print("Cleaning up my function...")
```

**Example (Registering a `Function` subclass):**
```python
@register_function(config_type=MyFunctionConfig)
async def register_my_complex_function(config: MyFunctionConfig, builder: Builder):
    # Import or define the class inside
    from .my_complex_function_module import MyComplexFunction

    yield MyComplexFunction(config=config)
```

### 4. Handling Multiple Arguments

If your callable has multiple arguments, an input schema is automatically created. You invoke it with a dictionary.

```python
async def multi_arg_fn(text: str, count: int) -> str:
    return text * count

# When invoking:
# await function.ainvoke({"text": "a", "count": 3})
```
The input schema will be `class MultiArgFnInput(BaseModel): text: str; count: int`.

### 5. Function Composition

To call other functions, use the `builder` object passed to the registration function.

- In the config class, declare references to other functions using `nat.data_models.component_ref.FunctionRef`.
- Use `builder.get_function()` inside the registration function to get instances of other functions.

**Example:**
```python
from nat.data_models.component_ref import FunctionRef

class MyCompositeConfig(FunctionBaseConfig, name="my_composite_function"):
    """Config for a composite function."""
    first_function: FunctionRef
    second_function: FunctionRef

@register_function(config_type=MyCompositeConfig)
async def register_composite_function(config: MyCompositeConfig, builder: Builder):
    """Registers a function that calls two other functions."""
    func1 = await builder.get_function(config.first_function)
    func2 = await builder.get_function(config.second_function)

    async def _composite_function(data: str) -> str:
        res1 = await func1.ainvoke(data)
        res2 = await func2.ainvoke(res1)
        return res2

    yield _composite_function
```

## Advanced Topics

### Overriding Schemas

You can provide custom Pydantic schemas for input/output validation and documentation by passing `input_schema` or `output_schema` to `FunctionInfo.from_fn`.

### Custom Type Converters

Provide a list of converter functions to `FunctionInfo.from_fn` via the `converters` argument. A converter is a function with type annotations for its input and output.

```python
def my_converter(value: int) -> str:
    return f"Converted from int: {value}"

# When creating FunctionInfo
yield FunctionInfo.from_fn(
    _my_function,
    description="...",
    converters=[my_converter]
)
```


================================================
FILE: .cursor/rules/nat-workflows/add-tools.mdc
================================================
---
description: Follow these rules when the user's request involves adding, integrating, implementing, or configuring tools for NeMo Agent Toolkit workflows
globs:
alwaysApply: false
---
# Adding Tools to NeMo Agent Toolkit Workflows

## Overview

Adding tools to workflows requires copying and modifying the workflow configuration file to include new tool definitions and update the tool names list.

## Step-by-Step Process

### 1. Identify Available Tools
```bash
# Query all available function types
nat info components -t function

# Query specific function details
nat info components -t function -q webpage_query
```

### 2. Update Configuration File

#### Adding Multiple Instances of Same Tool Type
When adding multiple instances of the same tool type, rename existing tools to be more specific:

```yaml
# Before - single tool
functions:
  webpage_query:
    _type: webpage_query
    webpage_url: https://docs.smith.langchain.com
    description: "Search for information about LangSmith..."
    embedder_name: nv-embedqa-e5-v5
    chunk_size: 512

# After - multiple tools
functions:
  langsmith_query:  # Renamed for clarity
    _type: webpage_query
    webpage_url: https://docs.smith.langchain.com
    description: "Search for information about LangSmith. For any questions about LangSmith, you must use this tool!"
    embedder_name: nv-embedqa-e5-v5
    chunk_size: 512
  langgraph_query:  # New tool
    _type: webpage_query
    webpage_url: https://langchain-ai.github.io/langgraph/tutorials/introduction
    description: "Search for information about LangGraph. For any questions about LangGraph, you must use this tool!"
    embedder_name: nv-embedqa-e5-v5
    chunk_size: 512
```

#### Update Workflow Tool Names
Always update the `workflow.tool_names` section to include new tools:

```yaml
# Before
workflow:
  _type: react_agent
  tool_names: [webpage_query, current_datetime]

# After
workflow:
  _type: react_agent
  tool_names: [langsmith_query, langgraph_query, current_datetime]
```

## Alternative: Using Web Search Tools

### Installing Web Search Dependencies
```bash
# Install LangChain/LangGraph integration for web search tools
uv pip install -e '.[langchain]'
```

### Using Tavily Internet Search
```yaml
functions:
  internet_search:
    _type: tavily_internet_search
  current_datetime:
    _type: current_datetime

workflow:
  _type: react_agent
  tool_names: [internet_search, current_datetime]
```

### Required Environment Variables
```bash
# Set up Tavily API key
export TAVILY_API_KEY=<YOUR_TAVILY_API_KEY>
```

## Common Tool Types and Patterns

### 1. Webpage Query Tools
```yaml
tool_name:
  _type: webpage_query
  webpage_url: https://example.com
  description: "Descriptive text for when to use this tool"
  embedder_name: nv-embedqa-e5-v5
  chunk_size: 512
```

### 2. Internet Search Tools
```yaml
search_tool:
  _type: tavily_internet_search
  # No additional parameters needed
```

### 3. Utility Tools
```yaml
datetime_tool:
  _type: current_datetime
  # No additional parameters needed
```

## Best Practices

1. **Tool Naming**:
   - Use descriptive names that indicate the tool's purpose
   - Avoid generic names when you have multiple similar tools
   - Example: `langsmith_query` vs `webpage_query`

2. **Descriptions**:
   - Be specific about when the tool should be used
   - Include the domain or type of information the tool provides
   - Use imperative language: "For any questions about X, you must use this tool!"

3. **Configuration Consistency**:
   - Use consistent `embedder_name` across similar tools
   - Set appropriate `chunk_size` based on content type
   - Maintain consistent parameter formatting

4. **Testing**:
   ```bash
   # Test the updated workflow
   nat run --config_file path/to/updated_config.yml --input "Test question"
   ```

## Common Issues and Solutions

1. **Tool Not Found**: Ensure the tool name in `workflow.tool_names` matches the key in `functions`
2. **Missing Dependencies**: Install required packages for specific tool types
3. **API Key Issues**: Set required environment variables before running
4. **Configuration Syntax**: Validate YAML syntax and indentation

## Example Complete Configuration

```yaml
functions:
  langsmith_docs:
    _type: webpage_query
    webpage_url: https://docs.smith.langchain.com
    description: "Search for information about LangSmith. For any questions about LangSmith, you must use this tool!"
    embedder_name: nv-embedqa-e5-v5
    chunk_size: 512
  langgraph_docs:
    _type: webpage_query
    webpage_url: https://langchain-ai.github.io/langgraph/tutorials/introduction
    description: "Search for information about LangGraph. For any questions about LangGraph, you must use this tool!"
    embedder_name: nv-embedqa-e5-v5
    chunk_size: 512
  current_datetime:
    _type: current_datetime

llms:
  nim_llm:
    _type: nim
    model_name: meta/llama-3.1-70b-instruct
    temperature: 0.0

embedders:
  nv-embedqa-e5-v5:
    _type: nim
    model_name: nvidia/nv-embedqa-e5-v5

workflow:
  _type: react_agent
  tool_names: [langsmith_docs, langgraph_docs, current_datetime]
  llm_name: nim_llm
  verbose: true
  parse_agent_response_max_retries: 3
```


================================================
FILE: .cursor/rules/nat-workflows/general.mdc
================================================
---
description: Follow these rules when the user's request involves adding functions or tools to NeMo Agent Toolkit workflows
globs:
alwaysApply: false
---
# General Rules for NeMo Agent Toolkit Workflows

## Referenced Documentation

- **Functions Overview**: [index.md](mdc:docs/source/workflows/functions/index.md) - Overview of functions as the main building blocks of NeMo Agent Toolkit workflows
- **Writing Custom Functions**: [functions.md](mdc:docs/source/extend/functions.md) - Comprehensive guide for creating and registering custom functions in NeMo Agent Toolkit workflows
- **Adding Tools Tutorial**: [add-tools-to-a-workflow.md](mdc:docs/source/tutorials/add-tools-to-a-workflow.md) - Tutorial on how to add new tools to existing NeMo Agent Toolkit workflows

## Rules

- For requests related to adding functions or tools to NeMo Agent Toolkit workflow, provide detailed information using the relevant sections from the workflow documentation listed in the Referenced Documentation section above. Encourage users to review the documentation themselves for a deeper understanding.

- When helping users create custom functions, refer to the Writing Custom Functions documentation in the Referenced Documentation section for comprehensive guidance on function registration, input/output types, and best practices.

- For requests about adding tools to workflows, reference the Adding Tools Tutorial documentation in the Referenced Documentation section and provide step-by-step guidance based on the tutorial examples.

- If workflow components do not function as expected, refer back to the workflow documentation in the Referenced Documentation section and update any discrepancies, as the documentation may have been updated without corresponding changes to the rules.


================================================
FILE: .dockerignore
================================================
# Ignore temporary folders
**/.*/*

# Ignore vscode folder
.vscode/

# Ignore git objects
.git/
.gitignore
.gitlab-ci.yml
.gitmodules

# Ignore all Dockerfiles
**/*Dockerfile*

# Ignore temperory volumes
**/volumes

# creating a docker image
.dockerignore

# Ignore all .env files
**/*.env

# Ignore any virtual environment configuration files
.venv/
env/

# Ignore python bytecode files
*.pyc
__pycache__/


================================================
FILE: .gitattributes
================================================
docs/source/_static/*.png filter=lfs diff=lfs merge=lfs -text
docs/source/_static/cursor_rules_demo/*.gif filter=lfs diff=lfs merge=lfs -text
examples/**/data/** filter=lfs diff=lfs merge=lfs -text


================================================
FILE: .github/CODEOWNERS
================================================
# Default Approval rule
* @nvidia/nat-developers

# Dependency changes
uv.lock @nvidia/nat-dep-approvers

# Dataset changes
examples/**/data/**/* @nvidia/nat-dep-approvers


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

name: Bug Report
description: File a bug report
type: "Bug"
labels: ["bug", "Needs Triage"]

body:
  - type: markdown
    attributes:
      value: |
        Thanks for taking the time to fill out this bug report!

  - type: input
    id: version
    attributes:
      label: Version
      description: What version of NeMo Agent Toolkit are you running?
      placeholder: "example: 0.1.0"
    validations:
      required: true

  - type: dropdown
    id: installation-method
    attributes:
      label: Which installation method(s) does this occur on?
      multiple: true
      options:
        - PyPi
        - Source

  - type: textarea
    id: description
    attributes:
      label: Describe the bug.
      description: Also tell us, what did you expect to happen?
      placeholder: XYZ occured, I expected QRS results
    validations:
      required: true

  - type: textarea
    id: mvr
    attributes:
      label: Minimum reproducible example
      description: Please supply a [minimum reproducible code example](https://matthewrocklin.com/blog/work/2018/02/28/minimal-bug-reports) here
      render: shell

  - type: textarea
    id: logs
    attributes:
      label: Relevant log output
      description: Please paste relevant error and log output here
      value: |
       <details><summary>Click here to see error details</summary><pre>

        [Paste the error here, it will be hidden by default]

       </pre></details>

  - type: textarea
    id: misc
    attributes:
      label: Other/Misc.
      description: Please enter any other helpful information here.

  - type: checkboxes
    id: terms
    attributes:
      label: Code of Conduct
      description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/NVIDIA/NeMo-Agent-Toolkit/blob/develop/CODE-OF-CONDUCT.md)
      options:
        - label: I agree to follow the NeMo Agent Toolkit Code of Conduct
          required: true
        - label: I have searched the [open bugs](https://github.com/NVIDIA/NeMo-Agent-Toolkit/issues?q=is%3Aopen+is%3Aissue+label%3Abug) and have found no duplicates for this bug report
          required: true


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

blank_issues_enabled: true


================================================
FILE: .github/ISSUE_TEMPLATE/documentation_request_correction.yml
================================================
# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

name: Documentation - Correction/Update Request
description: Request corrections or updates to existing documentation
type: "Documentation"
labels: ["doc", "Needs Triage"]

body:
  - type: markdown
    attributes:
      value: |
        Thanks for taking the time to improve our documentation!

  - type: dropdown
    id: criticality
    attributes:
      label: How would you describe the priority of this documentation request
      options:
        - Critical (currently preventing usage)
        - High
        - Medium
        - Low (would be nice)
    validations:
      required: true

  - type: input
    id: correction_location
    attributes:
      label: Please provide a link or source to the relevant docs
      placeholder: "ex: https://github.com/NVIDIA/NeMo-Agent-Toolkit/blob/main/README.md"
    validations:
      required: true

  - type: textarea
    id: problem
    attributes:
      label: Describe the problems in the documentation
      placeholder: The documents say to use foo.func(args) however an AttributeError is thrown
    validations:
      required: true

  - type: textarea
    id: correction
    attributes:
      label: (Optional) Propose a correction
      placeholder: foo.func() was deprecated, replace documentation with foo.new_func()

  - type: checkboxes
    id: terms
    attributes:
      label: Code of Conduct
      description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/NVIDIA/NeMo-Agent-Toolkit/blob/develop/CODE-OF-CONDUCT.md)
      options:
        - label: I agree to follow this project's Code of Conduct
          required: true
        - label: I have searched the [open documentation issues](https://github.com/NVIDIA/NeMo-Agent-Toolkit/issues?q=is%3Aopen+is%3Aissue+label%3Adocumentation) and have found no duplicates for this bug report
          required: true


================================================
FILE: .github/ISSUE_TEMPLATE/documentation_request_new.yml
================================================
# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

name: Documentation - New Documentation Request
description: Request additions to NeMo Agent Toolkit documentation
type: "Documentation"
labels: ["doc", "Needs Triage"]

body:
  - type: markdown
    attributes:
      value: |
        Thanks for taking the time to improve our documentation!

  - type: dropdown
    id: criticality
    attributes:
      label: How would you describe the priority of this documentation request
      options:
        - Critical (currently preventing usage)
        - High
        - Medium
        - Low (would be nice)
    validations:
      required: true

  - type: textarea
    id: problem
    attributes:
      label: Describe the future/missing documentation
      placeholder: A code snippet mentions function foo(args) but I cannot find any documentation on it.
    validations:
      required: true

  - type: textarea
    id: search_locs
    attributes:
      label: Where have you looked?
      placeholder: |
       https://github.com/NVIDIA/NeMo-Agent-Toolkit/blob/main/docs/README.md and
       https://github.com/NVIDIA/NeMo-Agent-Toolkit/blob/main/README.md

  - type: checkboxes
    id: terms
    attributes:
      label: Code of Conduct
      description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/NVIDIA/NeMo-Agent-Toolkit/blob/develop/CODE-OF-CONDUCT.md)
      options:
        - label: I agree to follow this project's Code of Conduct
          required: true
        - label: I have searched the [open documentation issues](https://github.com/NVIDIA/NeMo-Agent-Toolkit/issues?q=is%3Aopen+is%3Aissue+label%3Adocumentation) and have found no duplicates for this bug report
          required: true


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.yml
================================================
# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

name: Feature Request Form
description: Request new or improved functionality or changes to existing functionality
type: "Enhancement"
labels: ["feature request", "Needs Triage"]

body:
  - type: markdown
    attributes:
      value: |
        Thanks for taking the time to fill out this feature request!

  - type: dropdown
    id: new_or_improvement
    attributes:
      label: Is this a new feature, an improvement, or a change to existing functionality?
      options:
        - New Feature
        - Improvement
        - Change
    validations:
      required: true

  - type: dropdown
    id: criticality
    attributes:
      label: How would you describe the priority of this feature request
      options:
        - Critical (currently preventing usage)
        - High
        - Medium
        - Low (would be nice)
    validations:
      required: true

  - type: textarea
    id: problem
    attributes:
      label: Please provide a clear description of problem this feature solves
      description: Real usage examples are especially helpful, non-code.
      placeholder: I want NeMo Agent Toolkit to do _____, because I need to _____.
    validations:
      required: true

  - type: textarea
    id: solution
    attributes:
      label: Describe your ideal solution
      description: Please describe the functionality you would like added.
      placeholder: >
        A new function that takes in the information in this form, and triages the issue

        def feature_request(form_info):
            parse(form_info)
            return triage_outcome
    validations:
      required: true

  - type: textarea
    id: misc
    attributes:
      label: Additional context
      description: Add any other context, code examples, or references to existing implementations about the feature request here.

  - type: checkboxes
    id: terms
    attributes:
      label: Code of Conduct
      description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/NVIDIA/NeMo-Agent-Toolkit/blob/develop/CODE-OF-CONDUCT.md)
      options:
        - label: I agree to follow this project's Code of Conduct
          required: true
        - label: I have searched the [open feature requests](https://github.com/NVIDIA/NeMo-Agent-Toolkit/issues?q=is%3Aopen+is%3Aissue+label%3A%22feature+request%22%2Cimprovement%2Cenhancement) and have found no duplicates for this feature request
          required: true


================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
## Description
<!-- Note: The pull request title will be included in the CHANGELOG. -->
<!-- Provide a standalone description of changes in this PR. -->
<!-- Reference any issues closed by this PR with "closes #1234". All PRs should have an issue they close-->
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/index.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.


================================================
FILE: .github/copy-pr-bot.yaml
================================================
# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Configuration file for `copy-pr-bot` GitHub App
# https://docs.gha-runners.nvidia.com/apps/copy-pr-bot/

enabled: true


================================================
FILE: .github/ops-bot.yaml
================================================
# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# This file controls which features from the `ops-bot` repository below are enabled.
# - https://github.com/rapidsai/ops-bot

auto_merger: true
branch_checker: true
label_checker: true
release_drafter: true
forward_merger: true


================================================
FILE: .github/release.yml
================================================
# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

changelog:
  exclude:
    authors:
      - octocat
      - dependabot[bot]
      - dependabot-preview[bot]
  categories:
    - title: 🚨 Breaking Changes
      labels:
        - breaking
    - title: ✨ New Features
      labels:
        - "feature request"
    - title: 🔧 Improvements
      labels:
        - "improvement"
    - title: 🐛 Bug Fixes
      labels:
        - bug
    - title: 📝 Documentation Updates
      labels:
        - doc
    - title: Other Changes
      labels:
        - "*"


================================================
FILE: .github/workflows/ci_pipe.yml
================================================
# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

name: CI Pipeline
run-name: CI Pipeline

on:
  workflow_call:
    inputs:
      container:
        description: 'The default container to use for most CI stages'
        required: true
        type: string
      py_11_container:
        description: 'The Python 3.11 container to use for the test stage'
        required: true
        type: string
      py_12_container:
        description: 'The Python 3.12 container to use for the test stage'
        required: true
        type: string
      py_13_container:
        description: 'The Python 3.13 container to use for the test stage'
        required: true
        type: string
      pr_info:
        description: 'The JSON string containing the PR information'
        required: true
        type: string
      base_sha:
        description: 'The base SHA of the PR'
        required: true
        type: string
    secrets:
      CODECOV_TOKEN:
        required: true

# We only support ubuntu, so bash is the default
defaults:
  run:
    shell: bash

env:
  GIT_COMMIT: "${{ github.sha }}"
  BASE_SHA: "${{ inputs.base_sha }}"
  BUILD_NAT_COMPAT: "true"
  WORKSPACE: "${{ github.workspace }}/nat"
  WORKSPACE_TMP: "${{ github.workspace }}/tmp"
  UV_CACHE_DIR: .uv-cache

permissions:
  actions: none
  checks: none
  contents: read
  deployments: none
  discussions: none
  id-token: write
  issues: none
  packages: read
  pages: none
  pull-requests: read
  repository-projects: none
  security-events: none
  statuses: none

jobs:
  check:
    name: Check
    runs-on: linux-amd64-cpu4
    timeout-minutes: 30
    container:
      image: ${{ inputs.container }}
    strategy:
      fail-fast: true

    steps:
      - name: Checkout
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
        with:
          fetch-depth: 0
          path: 'nat'
          submodules: recursive

      - name: Check
        shell: bash
        run: ./nat/ci/scripts/github/checks.sh

  test:
    name: Test
    needs: [check]
    runs-on:  linux-${{ matrix.arch }}-cpu4
    timeout-minutes: 60
    container:
      image: ${{ matrix.container }}
    strategy:
      fail-fast: true
      matrix:
        arch: ["amd64", "arm64"]
        python-version: ["3.11", "3.12", "3.13"]
        include:
          - python-version: "3.11"
            container: ${{ inputs.py_11_container }}
          - python-version: "3.12"
            container: ${{ inputs.py_12_container }}
          - python-version: "3.13"
            container: ${{ inputs.py_13_container }}

    env:
      CI_PYTHON_VERSION: ${{ matrix.python-version }}
      CI_ARCH: ${{ matrix.arch }}

    steps:
      - name: Checkout
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
        with:
          fetch-depth: 0
          fetch-tags: true
          path: 'nat'
          submodules: recursive

      - name: Test:linux:${{ matrix.arch }}:py${{ matrix.python-version }}
        shell: bash
        run: ./nat/ci/scripts/github/tests.sh

      - name: Upload Test Results
        uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
        # Upload test results even if the tests fail
        if: ${{ always() }}
        with:
          name: "test-results-${{ matrix.arch }}-py${{ matrix.python-version }}"
          path: "${{ github.workspace }}/tmp/reports/*.xml"
          if-no-files-found: error
      - name: Upload coverage to Codecov
        uses: codecov/codecov-action@75cd11691c0faa626561e295848008c8a7dddffe # v5
        # Upload test results even if the tests fail
        if: ${{ always() }}
        with:
          directory: "${{ github.workspace }}/tmp/reports"
          env_vars: CI_ARCH,CI_PYTHON_VERSION
          fail_ci_if_error: true
          flags: unittests
          name: nat-code-cov-${{ matrix.arch }}-py${{ matrix.python-version }}
          token: ${{ secrets.CODECOV_TOKEN }}
          verbose: true

  documentation:
    name: Documentation
    needs: [check]
    runs-on: linux-amd64-cpu4
    timeout-minutes: 15
    container:
      image: ${{ inputs.container }}
    strategy:
      fail-fast: true

    steps:
      - name: Checkout
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
        with:
          fetch-tags: true
          path: 'nat'

      - name: build_docs
        shell: bash
        run: ./nat/ci/scripts/github/docs.sh

      - name: Upload Documentation
        uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
        with:
          name: "docs"
          path: "${{ github.workspace }}/tmp/docs.tar.bz2"
          if-no-files-found: error
          compression-level: 0


  package:
    name: Build Wheels
    needs: [check]
    runs-on: linux-amd64-cpu4
    timeout-minutes: 60
    container:
      image: ${{ inputs.container }}
    strategy:
      fail-fast: true

    steps:
      - name: Checkout
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
        with:
          fetch-depth: 0
          fetch-tags: true
          path: 'nat'

      - name: build_wheels
        shell: bash
        run: ./nat/ci/scripts/github/build_wheel.sh

      - name: Upload Package Reports
        uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
        if: ${{ always() }}
        with:
          name: "package_listings"
          path: "${{ github.workspace }}/tmp/package_listings.tar.bz2"
          if-no-files-found: error
          compression-level: 0

      - name: Upload Wheels
        uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
        with:
          name: "wheels"
          path: "${{ github.workspace }}/tmp/wheels/*.whl"
          if-no-files-found: error
          compression-level: 9


================================================
FILE: .github/workflows/pr.yaml
================================================
# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

name: Build pull request

on:
  push:
    branches:
      - 'pull-request/**'
      - 'develop'
      - 'main'
      - 'release/**'

# This allows a subsequently queued workflow run to interrupt previous runs
concurrency:
  group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
  cancel-in-progress: true

permissions:
  actions: none
  checks: none
  contents: read
  deployments: none
  discussions: none
  id-token: write
  issues: none
  packages: read
  pages: none
  pull-requests: read
  repository-projects: none
  security-events: none
  statuses: none

jobs:

  pr-builder:
    needs:
      - prepare
      - ci_pipe
    secrets: inherit
    uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@5fe52098676ca51435a73337131685e340658c51 # branch-25.04

  prepare:
    # Executes the get-pr-info action to determine if the PR has the skip-ci label, if the action fails we assume the
    # PR does not have the label
    name: Prepare
    runs-on: ubuntu-latest
    steps:
      - name: Get PR Info
        id: get-pr-info
        uses: nv-gha-runners/get-pr-info@090577647b8ddc4e06e809e264f7881650ecdccf # main
        if: ${{ startsWith(github.ref_name, 'pull-request/') }}
    outputs:
      is_pr: ${{ startsWith(github.ref_name, 'pull-request/') }}
      is_main_branch: ${{ github.ref_name == 'main' }}
      is_dev_branch: ${{ startsWith(github.ref_name, 'develop') }}
      is_release_branch: ${{ startsWith(github.ref_name, 'release/') }}
      has_skip_ci_label: ${{ steps.get-pr-info.outcome == 'success' && contains(fromJSON(steps.get-pr-info.outputs.pr-info).labels.*.name, 'skip-ci') || false }}
      pr_info: ${{ steps.get-pr-info.outcome == 'success' && steps.get-pr-info.outputs.pr-info || '' }}
      base_sha: ${{ steps.get-pr-info.outcome == 'success' && fromJSON(steps.get-pr-info.outputs.pr-info).base.sha || '' }}


  ci_pipe:
    name: CI Pipeline
    needs: [prepare]
    uses: ./.github/workflows/ci_pipe.yml
    if: ${{ ! fromJSON(needs.prepare.outputs.has_skip_ci_label) }}
    with:
      # CI container
      container: ghcr.io/astral-sh/uv:0.9.28-python3.13-bookworm
      py_11_container: ghcr.io/astral-sh/uv:0.9.28-python3.11-bookworm
      py_12_container: ghcr.io/astral-sh/uv:0.9.28-python3.12-bookworm
      py_13_container: ghcr.io/astral-sh/uv:0.9.28-python3.13-bookworm
      # Info about the PR. Empty for non PR branches. Useful for extracting PR number, title, etc.
      pr_info: ${{ needs.prepare.outputs.pr_info }}
      base_sha: ${{ needs.prepare.outputs.base_sha }}
    secrets:
      CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}


================================================
FILE: .github/workflows/stale.yaml
================================================
# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

name: 'Close stale issues and PRs'
on:
  schedule:
    - cron: '0 12 * * *'

jobs:
  stale:
    runs-on: ubuntu-latest
    permissions:
      actions: write
      issues: write
      pull-requests: write
    steps:
      - uses: actions/stale@v10
        with:
          stale-issue-message: 'This issue is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 7 days.'
          stale-pr-message: 'This PR is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 14 days.'
          close-issue-message: 'This issue was closed because it has been stalled for 7 days with no activity.'
          close-pr-message: 'This PR was closed because it has been stalled for 14 days with no activity.'
          days-before-issue-stale: 60
          days-before-issue-close: 7
          days-before-pr-stale: 30
          days-before-pr-close: 14
          exempt-issue-labels: 'Needs Triage'
          exempt-pr-labels: 'Under Review'
          operations-per-run: 100


================================================
FILE: .gitignore
================================================
###### Place new entries directly below this line! ######
/.codex

# auto-generated chainlit stuff
chainlit.md
.chainlit
build/
./build
.Dockerfile
blog-posts/new_post.md

# Ignore sphinx build intermediate files
docs/source/_modules

# Ignore autoapi intermediate files
docs/source/api

# Ignore public folder for artifact (required path for Gitlab Pages)
public/

# Ignore specific hidden folders
.benchmarks/
.tmp/
*.faiss
*.pkl
*.bin
*.sqlite
*.sqlite3
*.db

# Explicitly ignore .vscode/. Shared settings should go in .code-workspace
# and user settings will go in .vscode/
.vscode/

# Git worktrees
.worktrees/

##### Do not alter the items below this line! #####
########## They are managed by a script! ##########

# Created by https://www.gitignore.io/api/vim,c++,cmake,python,synology

### C++ ###
# Prerequisites
*.d

# Compiled Object files
*.slo
*.lo
*.o
*.obj

# Precompiled Headers
*.gch
*.pch

# Compiled Dynamic libraries
*.so
*.dylib
*.dll

# Fortran module files
*.mod
*.smod

# Compiled Static libraries
*.lai
*.la
*.a
*.lib

# Executables
*.exe
*.out
*.app

### CMake ###
CMakeCache.txt
CMakeFiles
CMakeScripts
Testing
cmake_install.cmake
install_manifest.txt
compile_commands.json
CTestTestfile.cmake

### Python ###
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# Jupyter Notebook
.ipynb_checkpoints

# pyenv
.python-version

# celery beat schedule file
celerybeat-schedule

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/

### Synology ###
# Thumbnails
@eaDir
# Recycle bin
\#recycle

### Vim ###
# Swap
[._]*.s[a-v][a-z]
[._]*.sw[a-p]
[._]s[a-rt-v][a-z]
[._]ss[a-gi-z]
[._]sw[a-p]

# Session
Session.vim

# Temporary
.netrwhist
*~
# Auto-generated tag files
tags
# Persistent undo
[._]*.un~

# Vector db files
**/deploy/compose/volumes
**/deploy/volumes
examples/notebooks/examples/retail_sales_agent/deploy/volumes/

# Mac Metadata
**/*.DS_Store

# End of https://www.gitignore.io/api/vim,c++,cmake,python,synology
/.idea


================================================
FILE: .gitlab-ci.yml
================================================

# SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

variables:
  GIT_SUBMODULE_STRATEGY: recursive
  GIT_SUBMODULE_FORCE_HTTPS: "true"

workflow:
  rules:
    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
    - if: $CI_COMMIT_TAG
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
    - if: $CI_COMMIT_BRANCH == 'main'
    - if: $CI_COMMIT_BRANCH =~ /^release\/.*$/

stages:
  - check
  - test
  - docs
  - package
  - upload

variables:
  BUILD_AIQ_COMPAT: "true"
  BUILD_NAT_COMPAT: "true"
  CLICKHOUSE_USER: clickhouse
  CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD}
  GIT_SUBMODULE_FORCE_HTTPS: "true"
  GIT_SUBMODULE_STRATEGY: recursive
  LANGFUSE_NEXTAUTH_SECRET: ${LANGFUSE_NEXTAUTH_SECRET}
  LANGFUSE_SALT: ${LANGFUSE_SALT}
  MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
  OPENAI_BASE_URL: "http://nginx-rewrite-models:8088"
  POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
  POSTGRES_USER: postgres
  POSTGRES_DB: postgres
  REDIS_PASSWORD: ${REDIS_PASSWORD}
  NAT_CI_SANDBOX_URL: "http://local-sandbox:6000"
  NAT_CI_ETCD_HOST: "etcd"
  NAT_CI_LANGFUSE_BUCKET: "langfuse"
  NAT_CI_LANGFUSE_HOST: "langfuse"
  NAT_CI_MILVUS_HOST: "milvus"
  NAT_CI_MINIO_HOST: "minio"
  NAT_CI_MYSQL_HOST: "mysql"
  NAT_CI_OAUTH2_HOST: "oauth2-server"
  NAT_CI_OAUTH2_PORT: "5000"
  NAT_CI_OPENSEARCH_URL: "http://opensearch:9200"
  NAT_CI_PHOENIX_URL: "http://phoenix:6006"
  NAT_CI_PISTON_URL: "http://piston:2000/api/v2"
  NAT_CI_PROXIED_OPENAI_BASE_URL: "${NAT_CI_PROXIED_OPENAI_BASE_URL}"
  NAT_CI_REDIS_HOST: "redis"
  UV_CACHE_DIR: .uv-cache
  WORKSPACE_TMP: "${CI_PROJECT_DIR}/.tmp"

default:
  image: ghcr.io/astral-sh/uv:0.9.28-python3.13-bookworm
  cache:
    - key: $CI_COMMIT_REF_SLUG
      paths:
        - $UV_CACHE_DIR
  before_script:
    - mkdir -p ${WORKSPACE_TMP}

  after_script:
    # Your `uv` commands
    - uv cache prune --ci

check:style:
  stage: check
  script:
    - echo "Runing checks"
    - ./ci/scripts/gitlab/checks.sh

  rules:
    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
  cache:
    key:
      files:
        - .pre-commit-config.yaml
    paths:
      - .cache/pre-commit

check:model_health:
  stage: check
  timeout: 10 minutes
  allow_failure: true
  script:
    - ./ci/scripts/gitlab/model_health_check.sh
  artifacts:
    when: always
    paths:
      - model_health_results.json
  rules:
    - if: $CI_CRON_NIGHTLY == "1"
      when: always

test:python_tests:
  stage: test
  timeout: 2 hours
  services:
    - name: clickhouse/clickhouse-server
      alias: clickhouse
      pull_policy: if-not-present
      variables:
        CLICKHOUSE_DB: default

    - name: $CI_REGISTRY_IMAGE/local-sandbox
      alias: local-sandbox
      pull_policy: if-not-present

    - name: minio/minio:RELEASE.2025-07-18T21-56-31Z
      alias: minio
      command: ["server", "/data", "--console-address", ":9001"]
      pull_policy: if-not-present

    - name: mysql:9.3
      alias: mysql
      pull_policy: if-not-present

    - name: arizephoenix/phoenix:13.22
      alias: phoenix
      pull_policy: if-not-present

    - name: $CI_REGISTRY_IMAGE/nginx-rewrite-models:20260303
      alias: nginx-rewrite-models
      pull_policy: if-not-present

    - name: postgres:17
      alias: postgres
      pull_policy: if-not-present
      variables:
        TZ: UTC
        PGTZ: UTC

    - name: redis:8.0
      alias: redis
      # Explicitly invoke the shell to expand the environment variable
      entrypoint: [ "sh", "-c", "/usr/local/bin/docker-entrypoint.sh --requirepass ${REDIS_PASSWORD}"]
      pull_policy: if-not-present

    - name: quay.io/coreos/etcd:v3.5.5
      alias: etcd
      command: ["etcd", "--advertise-client-urls", "http://0.0.0.0:2379", "--listen-client-urls", "http://0.0.0.0:2379"]
      pull_policy: if-not-present

    - name: milvusdb/milvus:v2.3.1
      alias: milvus
      variables:
        ETCD_ENDPOINTS: etcd:2379
        MINIO_ADDRESS: minio:9000
      command: ["milvus", "run", "standalone"]
      pull_policy: if-not-present

    - name: $CI_REGISTRY_IMAGE/oauth2_server:20251212
      alias: oauth2-server
      pull_policy: if-not-present
      variables:
        AUTHLIB_INSECURE_TRANSPORT: "1"
        FLASK_APP: app.py
        FLASK_ENV: development

    - name: opensearchproject/opensearch:2.11.1
      alias: opensearch
      pull_policy: if-not-present
      variables:
        discovery.type: "single-node"
        plugins.security.disabled: "true"

    - name: $CI_REGISTRY_IMAGE/piston:nat_test_20251212
      alias: piston
      pull_policy: if-not-present

    - name: langfuse/langfuse-worker:3
      alias: langfuse-worker
      pull_policy: if-not-present
      variables:
        CLICKHOUSE_MIGRATION_URL: clickhouse://clickhouse:9000
        CLICKHOUSE_URL: http://clickhouse:8123
        CLICKHOUSE_CLUSTER_ENABLED: false
        DATABASE_HOST: postgres
        DATABASE_USERNAME: ${POSTGRES_USER}
        DATABASE_PASSWORD: ${POSTGRES_PASSWORD}
        DATABASE_NAME: ${POSTGRES_DB}
        DATABASE_ARGS: ""
        LANGFUSE_USE_AZURE_BLOB: false
        LANGFUSE_S3_EVENT_UPLOAD_BUCKET: ${NAT_CI_LANGFUSE_BUCKET}
        LANGFUSE_S3_EVENT_UPLOAD_REGION: auto
        LANGFUSE_S3_EVENT_UPLOAD_ACCESS_KEY_ID: minioadmin
        LANGFUSE_S3_EVENT_UPLOAD_SECRET_ACCESS_KEY: minioadmin
        LANGFUSE_S3_EVENT_UPLOAD_ENDPOINT: http://minio:9000
        LANGFUSE_S3_EVENT_UPLOAD_FORCE_PATH_STYLE: true
        LANGFUSE_S3_EVENT_UPLOAD_PREFIX: events/
        LANGFUSE_S3_MEDIA_UPLOAD_BUCKET: ${NAT_CI_LANGFUSE_BUCKET}
        LANGFUSE_S3_MEDIA_UPLOAD_REGION: auto
        LANGFUSE_S3_MEDIA_UPLOAD_ACCESS_KEY_ID: minioadmin
        LANGFUSE_S3_MEDIA_UPLOAD_SECRET_ACCESS_KEY: minioadmin
        LANGFUSE_S3_MEDIA_UPLOAD_ENDPOINT: http://minio:9000
        LANGFUSE_S3_MEDIA_UPLOAD_FORCE_PATH_STYLE: true
        LANGFUSE_S3_MEDIA_UPLOAD_PREFIX: media/
        LANGFUSE_S3_BATCH_EXPORT_ENABLED: false
        LANGFUSE_S3_BATCH_EXPORT_BUCKET: ${NAT_CI_LANGFUSE_BUCKET}
        LANGFUSE_S3_BATCH_EXPORT_PREFIX: exports/
        LANGFUSE_S3_BATCH_EXPORT_REGION: auto
        LANGFUSE_S3_BATCH_EXPORT_ENDPOINT: http://minio:9000
        LANGFUSE_S3_BATCH_EXPORT_EXTERNAL_ENDPOINT: http://minio:9000
        LANGFUSE_S3_BATCH_EXPORT_ACCESS_KEY_ID: minioadmin
        LANGFUSE_S3_BATCH_EXPORT_SECRET_ACCESS_KEY: minioadmin
        LANGFUSE_S3_BATCH_EXPORT_FORCE_PATH_STYLE: true
        NEXTAUTH_SECRET: ${LANGFUSE_NEXTAUTH_SECRET}
        NEXTAUTH_URL: http://langfuse:3000
        REDIS_AUTH: ${REDIS_PASSWORD}
        REDIS_HOST: ${NAT_CI_REDIS_HOST}
        REDIS_PORT: 6379
        SALT: ${LANGFUSE_SALT}

    - name: langfuse/langfuse:3
      alias: langfuse
      pull_policy: if-not-present
      variables:
        CLICKHOUSE_MIGRATION_URL: clickhouse://clickhouse:9000
        CLICKHOUSE_URL: http://clickhouse:8123
        CLICKHOUSE_CLUSTER_ENABLED: false
        DATABASE_HOST: postgres
        DATABASE_USERNAME: ${POSTGRES_USER}
        DATABASE_PASSWORD: ${POSTGRES_PASSWORD}
        DATABASE_NAME: ${POSTGRES_DB}
        DATABASE_ARGS: ""
        LANGFUSE_USE_AZURE_BLOB: false
        LANGFUSE_S3_EVENT_UPLOAD_BUCKET: ${NAT_CI_LANGFUSE_BUCKET}
        LANGFUSE_S3_EVENT_UPLOAD_REGION: auto
        LANGFUSE_S3_EVENT_UPLOAD_ACCESS_KEY_ID: minioadmin
        LANGFUSE_S3_EVENT_UPLOAD_SECRET_ACCESS_KEY: minioadmin
        LANGFUSE_S3_EVENT_UPLOAD_ENDPOINT: http://minio:9000
        LANGFUSE_S3_EVENT_UPLOAD_FORCE_PATH_STYLE: true
        LANGFUSE_S3_EVENT_UPLOAD_PREFIX: events/
        LANGFUSE_S3_MEDIA_UPLOAD_BUCKET: ${NAT_CI_LANGFUSE_BUCKET}
        LANGFUSE_S3_MEDIA_UPLOAD_REGION: auto
        LANGFUSE_S3_MEDIA_UPLOAD_ACCESS_KEY_ID: minioadmin
        LANGFUSE_S3_MEDIA_UPLOAD_SECRET_ACCESS_KEY: minioadmin
        LANGFUSE_S3_MEDIA_UPLOAD_ENDPOINT: http://minio:9000
        LANGFUSE_S3_MEDIA_UPLOAD_FORCE_PATH_STYLE: true
        LANGFUSE_S3_MEDIA_UPLOAD_PREFIX: media/
        LANGFUSE_S3_BATCH_EXPORT_ENABLED: false
        LANGFUSE_S3_BATCH_EXPORT_BUCKET: ${NAT_CI_LANGFUSE_BUCKET}
        LANGFUSE_S3_BATCH_EXPORT_PREFIX: exports/
        LANGFUSE_S3_BATCH_EXPORT_REGION: auto
        LANGFUSE_S3_BATCH_EXPORT_ENDPOINT: http://minio:9000
        LANGFUSE_S3_BATCH_EXPORT_EXTERNAL_ENDPOINT: http://minio:9000
        LANGFUSE_S3_BATCH_EXPORT_ACCESS_KEY_ID: minioadmin
        LANGFUSE_S3_BATCH_EXPORT_SECRET_ACCESS_KEY: minioadmin
        LANGFUSE_S3_BATCH_EXPORT_FORCE_PATH_STYLE: true
        NEXTAUTH_SECRET: ${LANGFUSE_NEXTAUTH_SECRET}
        NEXTAUTH_URL: http://langfuse:3000
        REDIS_AUTH: ${REDIS_PASSWORD}
        REDIS_HOST: ${NAT_CI_REDIS_HOST}
        REDIS_PORT: 6379
        SALT: ${LANGFUSE_SALT}
        LANGFUSE_INIT_ORG_ID: test-org
        LANGFUSE_INIT_PROJECT_ID: test-project
        LANGFUSE_INIT_PROJECT_PUBLIC_KEY: ${LANGFUSE_PUBLIC_KEY}
        LANGFUSE_INIT_PROJECT_SECRET_KEY: ${LANGFUSE_SECRET_KEY}
        LANGFUSE_INIT_USER_EMAIL: test@localhost.dev
        LANGFUSE_INIT_USER_PASSWORD: ${LANGFUSE_USER_PW}
        HOSTNAME: 0.0.0.0

  script:
    - echo "Running tests"
    - ./ci/scripts/gitlab/tests.sh
  coverage: /TOTAL.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/
  artifacts:
    when: always
    reports:
      junit: pytest_junit_report*.xml
      coverage_report:
        coverage_format: cobertura  # or jacoco
        path: pytest_coverage_report*.xml

docs:build:
  stage: docs
  script:
    - echo "Building docs"
    - ./ci/scripts/gitlab/docs.sh
    # Copy the built docs to the public folder for artifact (required path for Gitlab Pages)
    - echo "Copying built docs to public folder for artifact"
    - cp -r docs/build/html public
  artifacts:
    paths:
      - public
    expire_in: 1 week

package:wheel:
  stage: package
  script:
    - echo "Building wheel"
    - ./ci/scripts/gitlab/build_wheel.sh
  artifacts:
    paths:
      # match the following wheels:
      # - root metapackage: .tmp/wheels/nvidia-nat/nvidia-nat/nvidia_nat-<VERSION>-py3-none-any.whl
      # - subpackages: .tmp/wheels/nvidia-nat/nvidia_nat_<PACKAGE>/nvidia_nat_<PACKAGE>-<VERSION>-py3-none-any.whl
      # - example wheels: .tmp/wheels/nvidia-nat/examples/*.whl
      - .tmp/wheels/nvidia-nat/*/*.whl
    expire_in: 1 week
  rules:
    - if: $CI_CRON_NIGHTLY == "1"
      when: always
    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
    - if: $CI_COMMIT_TAG
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
    - if: $CI_COMMIT_BRANCH == 'develop-test'
    - if: $CI_COMMIT_BRANCH == 'main'
    - if: $CI_COMMIT_BRANCH =~ /^release\/.*$/

upload:artifactory:
  # Container defined in ci/scripts/gitlab/artifactory/Dockerfile
  image: $CI_REGISTRY_IMAGE/artifactory:20260413
  stage: upload
  script:
    - echo "Uploading wheel to artifactory"
    - ./ci/scripts/gitlab/artifactory_upload.sh
  needs:
    - job: package:wheel
  rules:
    - if: $CI_COMMIT_TAG
    - if: $CI_CRON_NIGHTLY == "1"


================================================
FILE: .gitmodules
================================================
[submodule "external/nat-ui"]
	path = external/nat-ui
	url = https://github.com/NVIDIA/NeMo-Agent-Toolkit-UI.git
[submodule "external/lc-deepagents-quickstarts"]
	path = external/lc-deepagents-quickstarts
	url = https://github.com/langchain-ai/deepagents-quickstarts.git


================================================
FILE: .nspect-allowlist.toml
================================================
version = "1.2.0"

[oss]
[[pulse-trufflehog.files]]
file = "packages/nvidia_nat_mysql/tests/test_mysql_object_store.py"

[[pulse-trufflehog.files.secrets]]
# Fake password string used for unittests
type = "Password"
values = ["pas****************-pw\""]

[[pulse-trufflehog.files]]
file = "tests/nat/authentication/test_http_basic_auth_exchanger.py"

[[pulse-trufflehog.files.secrets]]
# Fake password string used for unittests
type = "Password"
values = ["\"pa***********ass\"", "\"pa******** \"b\""]

[[pulse-trufflehog.files]]
file = "tests/nat/authentication/test_data_models.py"

[[pulse-trufflehog.files.secrets]]
# Fake passwords and credentials used for unittests
type = "Password"
values = ["pas**************and\"", "\"pa******** \"p\""]


================================================
FILE: .pre-commit-config.yaml
================================================
# SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

repos:
  - repo: https://github.com/google/yapf
    rev: v0.43.0
    hooks:
      - id: yapf
        args: ["-i", "--style", "./pyproject.toml"]

  - repo: https://github.com/astral-sh/ruff-pre-commit
    rev: v0.15.0
    hooks:
      # Run the linter.
      - id: ruff-check
        args: [ --fix ]
  - repo: local
    hooks:
      - id: uv-lock-all-pyprojects
        name: Ensure `uv lock` is run for all pyproject.toml files
        entry: >-
          bash -ec '
            status=0
            while IFS= read -r -d "" pyproject; do
              (
                echo "Locking $(dirname "$pyproject")" &&
                cd "$(dirname "$pyproject")" &&
                uv lock
              ) || status=$?
            done < <(find . -name pyproject.toml -not -path "*/.*/*" -print0)
            exit "$status"
          '
        language: system
        files: "pyproject\\.toml$"
        pass_filenames: false
  - repo: local
    hooks:
      - id: clear-notebook-output-cells
        name: Clear Jupyter Notebook Output Cells
        entry: ci/scripts/clear_notebook_output_cells.sh
        files: "\\.ipynb$"
        language: python
        additional_dependencies: ["nbconvert"]

  - repo: https://github.com/tcort/markdown-link-check
    rev: v3.14.2
    hooks:
      - id: markdown-link-check
        args: ["-q", "--config", "ci/markdown-link-check-config.json"]
        exclude: "^(packages/nvidia_nat_core/src/nat/meta/pypi\\.md|CHANGELOG\\.md)$"

default_language_version:
  python: python3


================================================
FILE: .pytest.ini
================================================
[pytest]
# Ignore any package that isn't included in the "most" extra
# Users can still explicitly run tests in excluded packages, and these are explicitly executed by run_tests.py
addopts =
    --ignore=examples/
    --ignore=packages/nvidia_nat_openpipe_art
    --ignore=packages/nvidia_nat_rag
    --ignore=packages/nvidia_nat_ragaai
testpaths =
    tests
markers =
    benchmark: Benchmarks
    integration: Integration tests which do not use mocks and may require external services
    requires_cache: Tests that require a reverse-proxy cache to be running
    slow: Slow tests
asyncio_mode = auto
asyncio_default_fixture_loop_scope = session

# Global timeout of 5 minutes per test to catch hanging tests.
# Individual tests can override with @pytest.mark.timeout(seconds) or disable with @pytest.mark.timeout(0)
timeout = 300


================================================
FILE: .vale.ini
================================================
StylesPath = ci/vale/styles

MinAlertLevel = error

Vocab = nat

# Configs for markdown and reStructuredText files
[*{.md,.rst}]

BasedOnStyles = Vale

# Lower these checks to just 'suggestion' level.

# This check enforces usage of contractions (ex: "it is" -> "it's") lowering to suggestion to allow it
Microsoft.Contractions = suggestion

# This check disallows the use of "there is" and "there are" at the start of a sentence, I tried looking this up to
# determine the reasoning behind the rule but could not find one. Lowering to suggestion to allow it
write-good.ThereIs = suggestion

# Allow writing dates in numeric form 02/10/2022
Microsoft.DateOrder = suggestion

# reStructuredText specific configs
[*.rst]
# Ignore template items inside of curly braces
TokenIgnores = ({.*})


================================
Download .txt
gitextract_gihwybp3/

├── .coderabbit.yaml
├── .cursor/
│   └── rules/
│       ├── cursor-rules.mdc
│       ├── documentation/
│       │   ├── capitalization.mdc
│       │   ├── categories.mdc
│       │   ├── formatting.mdc
│       │   ├── general.mdc
│       │   ├── latinisms.mdc
│       │   ├── lists-and-tables.mdc
│       │   ├── numbers-and-dates.mdc
│       │   ├── punctuation.mdc
│       │   ├── voice-and-tone.mdc
│       │   └── writing-process.mdc
│       ├── general.mdc
│       ├── nat-agents/
│       │   └── general.mdc
│       ├── nat-cli/
│       │   ├── general.mdc
│       │   ├── nat-eval.mdc
│       │   ├── nat-info.mdc
│       │   ├── nat-run-serve.mdc
│       │   └── nat-workflow.mdc
│       ├── nat-setup/
│       │   ├── general.mdc
│       │   └── nat-toolkit-installation.mdc
│       ├── nat-tests/
│       │   ├── general.mdc
│       │   ├── integration-tests.mdc
│       │   └── nat-test-llm.mdc
│       └── nat-workflows/
│           ├── add-functions.mdc
│           ├── add-tools.mdc
│           └── general.mdc
├── .dockerignore
├── .gitattributes
├── .github/
│   ├── CODEOWNERS
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.yml
│   │   ├── config.yml
│   │   ├── documentation_request_correction.yml
│   │   ├── documentation_request_new.yml
│   │   └── feature_request.yml
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── copy-pr-bot.yaml
│   ├── ops-bot.yaml
│   ├── release.yml
│   └── workflows/
│       ├── ci_pipe.yml
│       ├── pr.yaml
│       └── stale.yaml
├── .gitignore
├── .gitlab-ci.yml
├── .gitmodules
├── .nspect-allowlist.toml
├── .pre-commit-config.yaml
├── .pytest.ini
├── .vale.ini
├── CHANGELOG.md
├── CODE-OF-CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE-3rd-party.txt
├── LICENSE.md
├── README.md
├── SECURITY.md
├── ci/
│   ├── markdown-link-check-config.json
│   ├── release/
│   │   ├── pr_code_freeze_template.md
│   │   ├── update-version.sh
│   │   └── update_doc_versions1.py
│   ├── scripts/
│   │   ├── bootstrap_local_ci.sh
│   │   ├── checks.sh
│   │   ├── clear_notebook_output_cells.sh
│   │   ├── common.sh
│   │   ├── copyright.py
│   │   ├── documentation_checks.sh
│   │   ├── github/
│   │   │   ├── build_wheel.sh
│   │   │   ├── checks.sh
│   │   │   ├── common.sh
│   │   │   ├── docs.sh
│   │   │   └── tests.sh
│   │   ├── gitlab/
│   │   │   ├── artifactory/
│   │   │   │   └── Dockerfile
│   │   │   ├── artifactory_upload.sh
│   │   │   ├── build_wheel.sh
│   │   │   ├── checks.sh
│   │   │   ├── common.sh
│   │   │   ├── docs.sh
│   │   │   ├── model_health_check.sh
│   │   │   ├── report_test_results.py
│   │   │   └── tests.sh
│   │   ├── gitutils.py
│   │   ├── license_diff.py
│   │   ├── model_health_check.py
│   │   ├── package_utils.py
│   │   ├── path_checks.py
│   │   ├── path_checks.sh
│   │   ├── run_ci_local.sh
│   │   ├── run_tests.py
│   │   └── sbom_list.py
│   └── vale/
│       └── styles/
│           └── config/
│               └── vocabularies/
│                   └── nat/
│                       ├── accept.txt
│                       └── reject.txt
├── conftest.py
├── docker/
│   ├── Dockerfile
│   └── build_container.sh
├── docs/
│   ├── Makefile
│   ├── README.md
│   └── source/
│       ├── _static/
│       │   └── css/
│       │       └── custom.css
│       ├── _templates/
│       │   └── sidebar-nav-bs.html
│       ├── build-workflows/
│       │   ├── a2a-client.md
│       │   ├── about-building-workflows.md
│       │   ├── advanced/
│       │   │   ├── index.md
│       │   │   ├── interactive-workflows.md
│       │   │   └── middleware.md
│       │   ├── embedders.md
│       │   ├── functions-and-function-groups/
│       │   │   ├── function-groups.md
│       │   │   ├── functions.md
│       │   │   └── index.md
│       │   ├── llms/
│       │   │   ├── index.md
│       │   │   └── using-local-llms.md
│       │   ├── mcp-client.md
│       │   ├── memory.md
│       │   ├── object-store.md
│       │   ├── retrievers.md
│       │   └── workflow-configuration.md
│       ├── components/
│       │   ├── agents/
│       │   │   ├── auto-memory-wrapper/
│       │   │   │   ├── auto-memory-wrapper.md
│       │   │   │   └── index.md
│       │   │   ├── index.md
│       │   │   ├── parallel-executor/
│       │   │   │   ├── index.md
│       │   │   │   └── parallel-executor.md
│       │   │   ├── react-agent/
│       │   │   │   ├── index.md
│       │   │   │   └── react-agent.md
│       │   │   ├── reasoning-agent/
│       │   │   │   ├── index.md
│       │   │   │   └── reasoning-agent.md
│       │   │   ├── responses-api-and-agent/
│       │   │   │   ├── index.md
│       │   │   │   └── responses-api-and-agent.md
│       │   │   ├── rewoo-agent/
│       │   │   │   ├── index.md
│       │   │   │   └── rewoo-agent.md
│       │   │   ├── router-agent/
│       │   │   │   ├── index.md
│       │   │   │   └── router-agent.md
│       │   │   ├── sequential-executor/
│       │   │   │   ├── index.md
│       │   │   │   └── sequential-executor.md
│       │   │   └── tool-calling-agent/
│       │   │       ├── index.md
│       │   │       └── tool-calling-agent.md
│       │   ├── auth/
│       │   │   ├── a2a-auth.md
│       │   │   ├── api-authentication.md
│       │   │   ├── index.md
│       │   │   ├── mcp-auth/
│       │   │   │   ├── index.md
│       │   │   │   ├── mcp-auth-token-storage.md
│       │   │   │   └── mcp-service-account-auth.md
│       │   │   └── user-identity.md
│       │   ├── functions/
│       │   │   ├── code-execution.md
│       │   │   ├── index.md
│       │   │   └── text-to-sql.md
│       │   ├── integrations/
│       │   │   ├── a2a.md
│       │   │   ├── frameworks.md
│       │   │   ├── index.md
│       │   │   ├── integrating-aws-bedrock-models.md
│       │   │   └── integrating-oci-generative-ai-models.md
│       │   └── sharing-components.md
│       ├── conf.py
│       ├── extend/
│       │   ├── custom-components/
│       │   │   ├── adding-a-retriever.md
│       │   │   ├── adding-an-authentication-provider.md
│       │   │   ├── adding-an-llm-provider.md
│       │   │   ├── custom-dataset-loader.md
│       │   │   ├── custom-evaluator.md
│       │   │   ├── custom-functions/
│       │   │   │   ├── function-groups.md
│       │   │   │   ├── functions.md
│       │   │   │   └── per-user-functions.md
│       │   │   ├── finetuning.md
│       │   │   ├── gated-fields.md
│       │   │   ├── index.md
│       │   │   ├── mcp-server.md
│       │   │   ├── memory.md
│       │   │   ├── object-store.md
│       │   │   ├── optimizer.md
│       │   │   └── telemetry-exporters.md
│       │   ├── plugins.md
│       │   └── testing/
│       │       ├── add-unit-tests-for-tools.md
│       │       ├── index.md
│       │       └── test-with-nat-test-llm.md
│       ├── get-started/
│       │   ├── installation.md
│       │   ├── quick-start.md
│       │   └── tutorials/
│       │       ├── add-tools-to-a-workflow.md
│       │       ├── build-a-demo-agent-workflow-using-cursor-rules.md
│       │       ├── create-a-new-workflow.md
│       │       ├── customize-a-workflow.md
│       │       └── index.md
│       ├── improve-workflows/
│       │   ├── about-improving-workflows.md
│       │   ├── evaluate.md
│       │   ├── finetuning/
│       │   │   ├── concepts.md
│       │   │   ├── dpo_with_nemo_customizer.md
│       │   │   ├── index.md
│       │   │   └── rl_with_openpipe.md
│       │   ├── optimizer.md
│       │   ├── profiler.md
│       │   ├── sizing-calc.md
│       │   └── test-time-compute.md
│       ├── index.md
│       ├── reference/
│       │   ├── cli.md
│       │   └── rest-api/
│       │       ├── api-server-endpoints.md
│       │       ├── evaluate-api.md
│       │       ├── http-interactive-execution.md
│       │       ├── index.md
│       │       └── websockets.md
│       ├── release-notes.md
│       ├── resources/
│       │   ├── contributing/
│       │   │   ├── code-of-conduct.md
│       │   │   ├── cursor/
│       │   │   │   ├── cursor-rules-developer-guide.md
│       │   │   │   ├── cursor-rules-reference.md
│       │   │   │   └── index.md
│       │   │   ├── index.md
│       │   │   ├── licensing.md
│       │   │   └── testing/
│       │   │       ├── index.md
│       │   │       ├── running-ci-locally.md
│       │   │       └── running-tests.md
│       │   ├── faq.md
│       │   ├── migration-guide.md
│       │   ├── security-considerations.md
│       │   ├── support.md
│       │   └── troubleshooting.md
│       ├── run-workflows/
│       │   ├── a2a-server.md
│       │   ├── about-running-workflows.md
│       │   ├── existing-agents/
│       │   │   ├── index.md
│       │   │   └── langgraph.md
│       │   ├── fastmcp-server.md
│       │   ├── launching-ui.md
│       │   ├── mcp-server.md
│       │   └── observe/
│       │       ├── observe-workflow-with-catalyst.md
│       │       ├── observe-workflow-with-data-flywheel.md
│       │       ├── observe-workflow-with-dbnl.md
│       │       ├── observe-workflow-with-dynatrace.md
│       │       ├── observe-workflow-with-galileo.md
│       │       ├── observe-workflow-with-langsmith.md
│       │       ├── observe-workflow-with-otel-collector.md
│       │       ├── observe-workflow-with-phoenix.md
│       │       ├── observe-workflow-with-weave.md
│       │       └── observe.md
│       └── versions1.json
├── examples/
│   ├── A2A/
│   │   ├── currency_agent_a2a/
│   │   │   ├── README.md
│   │   │   ├── configs/
│   │   │   │   └── config.yml
│   │   │   ├── data/
│   │   │   │   └── sample_queries.json
│   │   │   └── pyproject.toml
│   │   ├── math_assistant_a2a/
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   ├── src/
│   │   │   │   └── nat_math_assistant_a2a/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── configs/
│   │   │   │       │   └── config.yml
│   │   │   │       ├── data/
│   │   │   │       │   └── sample_queries.json
│   │   │   │       └── register.py
│   │   │   └── tests/
│   │   │       └── test_math_assistant_a2a.py
│   │   └── math_assistant_a2a_protected/
│   │       ├── README.md
│   │       ├── configs/
│   │       │   ├── config-client.yml
│   │       │   └── config-server.yml
│   │       └── pyproject.toml
│   ├── HITL/
│   │   ├── por_to_jiratickets/
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   └── src/
│   │   │       └── nat_por_to_jiratickets/
│   │   │           ├── __init__.py
│   │   │           ├── configs/
│   │   │           │   └── config.yml
│   │   │           ├── data/
│   │   │           │   └── por_requirements.txt
│   │   │           ├── extract_por_tool.py
│   │   │           ├── hitl_approval_tool.py
│   │   │           ├── jira_tickets_tool.py
│   │   │           └── register.py
│   │   └── simple_calculator_hitl/
│   │       ├── README.md
│   │       ├── pyproject.toml
│   │       ├── src/
│   │       │   └── nat_simple_calculator_hitl/
│   │       │       ├── __init__.py
│   │       │       ├── configs/
│   │       │       │   └── config-hitl.yml
│   │       │       ├── register.py
│   │       │       └── retry_react_agent.py
│   │       └── tests/
│   │           └── test_simple_calculator_hitl.py
│   ├── MCP/
│   │   ├── kaggle_mcp/
│   │   │   ├── README.md
│   │   │   ├── configs/
│   │   │   │   ├── config-per-user.yml
│   │   │   │   └── config.yml
│   │   │   └── pyproject.toml
│   │   ├── service_account_auth_mcp/
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   └── src/
│   │   │       └── nat_service_account_auth_mcp/
│   │   │           ├── __init__.py
│   │   │           ├── configs/
│   │   │           │   ├── config-mcp-service-account-jama.yml
│   │   │           │   ├── config-mcp-service-account-jira-function.yml
│   │   │           │   └── config-mcp-service-account-jira.yml
│   │   │           └── scripts/
│   │   │               ├── __init__.py
│   │   │               └── service_tokens.py
│   │   ├── simple_auth_mcp/
│   │   │   ├── README.md
│   │   │   ├── configs/
│   │   │   │   ├── config-mcp-auth-jira-per-user.yml
│   │   │   │   ├── config-mcp-auth-jira.yml
│   │   │   │   └── config-mcp-auth-outlook.yml
│   │   │   └── pyproject.toml
│   │   ├── simple_calculator_fastmcp/
│   │   │   ├── README.md
│   │   │   ├── configs/
│   │   │   │   └── config-mcp-client.yml
│   │   │   ├── pyproject.toml
│   │   │   └── tests/
│   │   │       └── test_simple_calculator_fastmcp.py
│   │   ├── simple_calculator_fastmcp_protected/
│   │   │   ├── README.md
│   │   │   ├── configs/
│   │   │   │   ├── config-client.yml
│   │   │   │   └── config-server.yml
│   │   │   ├── pyproject.toml
│   │   │   └── tests/
│   │   │       └── test_simple_calculator_fastmcp_protected.py
│   │   ├── simple_calculator_mcp/
│   │   │   ├── README.md
│   │   │   ├── configs/
│   │   │   │   ├── config-mcp-client.yml
│   │   │   │   └── config-per-user-mcp-client.yml
│   │   │   ├── pyproject.toml
│   │   │   └── tests/
│   │   │       └── test_simple_calculator_mcp.py
│   │   └── simple_calculator_mcp_protected/
│   │       ├── README.md
│   │       ├── configs/
│   │       │   ├── config-client.yml
│   │       │   └── config-server.yml
│   │       └── pyproject.toml
│   ├── RAG/
│   │   └── simple_rag/
│   │       ├── README.md
│   │       ├── configs/
│   │       │   ├── milvus_memory_rag_config.yml
│   │       │   ├── milvus_memory_rag_tools_config.yml
│   │       │   ├── milvus_rag_config.yml
│   │       │   ├── milvus_rag_config_ttc.yml
│   │       │   ├── milvus_rag_tools_config.yml
│   │       │   └── rag_library_mode_config.yml
│   │       ├── pyproject.toml
│   │       └── tests/
│   │           └── test_simple_rag_e2e.py
│   ├── README.md
│   ├── UI/
│   │   └── README.md
│   ├── advanced_agents/
│   │   ├── aiq_blueprint/
│   │   │   └── README.md
│   │   ├── alert_triage_agent/
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   ├── src/
│   │   │   │   └── nat_alert_triage_agent/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── categorizer.py
│   │   │   │       ├── classification_evaluator.py
│   │   │   │       ├── configs/
│   │   │   │       │   ├── config_live_mode.yml
│   │   │   │       │   ├── config_offline_atif.yml
│   │   │   │       │   ├── config_offline_llama_31.yml
│   │   │   │       │   ├── config_offline_llama_33.yml
│   │   │   │       │   └── config_offline_mode.yml
│   │   │   │       ├── data/
│   │   │   │       │   ├── benign_fallback_offline_data.json
│   │   │   │       │   ├── maintenance_static_dataset.csv
│   │   │   │       │   ├── offline_data.csv
│   │   │   │       │   ├── offline_data.json
│   │   │   │       │   └── output_samples/
│   │   │   │       │       ├── workflow_output.json
│   │   │   │       │       └── workflow_output_atif.json
│   │   │   │       ├── hardware_check_tool.py
│   │   │   │       ├── host_performance_check_tool.py
│   │   │   │       ├── maintenance_check.py
│   │   │   │       ├── monitoring_process_check_tool.py
│   │   │   │       ├── network_connectivity_check_tool.py
│   │   │   │       ├── playbooks.py
│   │   │   │       ├── prompts.py
│   │   │   │       ├── register.py
│   │   │   │       ├── run.py
│   │   │   │       ├── telemetry_metrics_analysis_agent.py
│   │   │   │       ├── telemetry_metrics_host_heartbeat_check_tool.py
│   │   │   │       ├── telemetry_metrics_host_performance_check_tool.py
│   │   │   │       └── utils.py
│   │   │   └── tests/
│   │   │       ├── test_alert_triage_agent_workflow.py
│   │   │       ├── test_categorizer.py
│   │   │       ├── test_hardware_check_tool.py
│   │   │       ├── test_host_performance_check_tool.py
│   │   │       ├── test_maintenance_check.py
│   │   │       ├── test_monitoring_process_check_tool.py
│   │   │       ├── test_network_connectivity_check_tool.py
│   │   │       ├── test_run.py
│   │   │       ├── test_telemetry_metrics_host_heartbeat_check_tool.py
│   │   │       ├── test_telemetry_metrics_host_performance_check_tool.py
│   │   │       └── test_utils.py
│   │   └── vulnerability_analysis_blueprint/
│   │       └── README.md
│   ├── agents/
│   │   ├── README.md
│   │   ├── auto_memory_wrapper/
│   │   │   ├── README.md
│   │   │   └── configs/
│   │   │       ├── config_mem0.yml
│   │   │       └── config_zep.yml
│   │   ├── data/
│   │   │   ├── rewoo.json
│   │   │   ├── wikipedia.csv
│   │   │   ├── wikipedia.json
│   │   │   ├── wikipedia.xlsx
│   │   │   └── wikipedia_generated.json
│   │   ├── mixture_of_agents/
│   │   │   ├── README.md
│   │   │   └── configs/
│   │   │       └── config.yml
│   │   ├── pyproject.toml
│   │   ├── react/
│   │   │   ├── README.md
│   │   │   └── configs/
│   │   │       ├── config-reasoning.yml
│   │   │       └── config.yml
│   │   ├── rewoo/
│   │   │   ├── README.md
│   │   │   └── configs/
│   │   │       └── config.yml
│   │   ├── tests/
│   │   │   ├── conftest.py
│   │   │   └── test_agents.py
│   │   └── tool_calling/
│   │       ├── README.md
│   │       └── configs/
│   │           ├── config-reasoning.yml
│   │           ├── config-responses-api.yml
│   │           └── config.yml
│   ├── config_inheritance/
│   │   ├── README.md
│   │   └── configs/
│   │       ├── base-config.yml
│   │       ├── config-debug.yml
│   │       ├── config-different-model.yml
│   │       ├── config-high-temp-debug.yml
│   │       ├── config-high-temp.yml
│   │       └── config-with-tracing.yml
│   ├── control_flow/
│   │   ├── hybrid_control_flow/
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   ├── src/
│   │   │   │   └── nat_hybrid_control_flow/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── configs/
│   │   │   │       │   └── config.yml
│   │   │   │       └── register.py
│   │   │   └── tests/
│   │   │       └── test_hybrid_control_flow.py
│   │   ├── parallel_executor/
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   ├── src/
│   │   │   │   └── nat_parallel_executor/
│   │   │   │       ├── __init__.py
│   │   │   │       └── configs/
│   │   │   │           └── config.yml
│   │   │   └── tests/
│   │   │       └── test_parallel_executor_example.py
│   │   ├── router_agent/
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   ├── src/
│   │   │   │   └── nat_router_agent/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── configs/
│   │   │   │       │   └── config.yml
│   │   │   │       └── register.py
│   │   │   └── tests/
│   │   │       └── test_control_flow_example_router_agent.py
│   │   └── sequential_executor/
│   │       ├── README.md
│   │       ├── pyproject.toml
│   │       ├── src/
│   │       │   └── nat_sequential_executor/
│   │       │       ├── __init__.py
│   │       │       ├── configs/
│   │       │       │   └── config.yml
│   │       │       └── register.py
│   │       └── tests/
│   │           └── test_example_sequential_executor.py
│   ├── custom_functions/
│   │   ├── automated_description_generation/
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   ├── src/
│   │   │   │   └── nat_automated_description_generation/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── configs/
│   │   │   │       │   ├── config.yml
│   │   │   │       │   └── config_no_auto.yml
│   │   │   │       ├── register.py
│   │   │   │       └── utils/
│   │   │   │           ├── __init__.py
│   │   │   │           ├── description_generation.py
│   │   │   │           ├── prompts.py
│   │   │   │           └── workflow_utils.py
│   │   │   └── tests/
│   │   │       └── test_auto_desc_generation.py
│   │   └── plot_charts/
│   │       ├── README.md
│   │       ├── example_data.json
│   │       ├── pyproject.toml
│   │       ├── src/
│   │       │   └── nat_plot_charts/
│   │       │       ├── __init__.py
│   │       │       ├── configs/
│   │       │       │   └── config.yml
│   │       │       ├── data/
│   │       │       │   └── plot_charts_questions.json
│   │       │       ├── plot_chat.py
│   │       │       └── register.py
│   │       └── tests/
│   │           └── test_plot_charts_workflow.py
│   ├── deploy/
│   │   ├── README.md
│   │   ├── docker-compose.memmachine.yml
│   │   ├── docker-compose.milvus.yml
│   │   ├── docker-compose.minio.yml
│   │   ├── docker-compose.mysql.yml
│   │   ├── docker-compose.phoenix.yml
│   │   └── docker-compose.redis.yml
│   ├── documentation_guides/
│   │   ├── README.md
│   │   ├── locally_hosted_llms/
│   │   │   ├── nim_config.yml
│   │   │   └── vllm_config.yml
│   │   ├── pyproject.toml
│   │   ├── tests/
│   │   │   ├── conftest.py
│   │   │   ├── test_custom_workflow.py
│   │   │   └── test_text_file_ingest.py
│   │   └── workflows/
│   │       ├── custom_workflow/
│   │       │   ├── custom_config.yml
│   │       │   └── search_config.yml
│   │       └── text_file_ingest/
│   │           ├── pyproject.toml
│   │           └── src/
│   │               └── text_file_ingest/
│   │                   ├── __init__.py
│   │                   ├── configs/
│   │                   │   └── config.yml
│   │                   ├── data/
│   │                   │   ├── doca_overview.txt
│   │                   │   ├── gpunetio_blog_post.txt
│   │                   │   └── gpunetio_programming_guide.txt
│   │                   ├── register.py
│   │                   └── text_file_ingest_function.py
│   ├── dynamo_integration/
│   │   ├── ARCHITECTURE.md
│   │   ├── README.md
│   │   ├── data/
│   │   │   └── raw/
│   │   │       └── banking/
│   │   │           └── tools.json
│   │   ├── latency_sensitivity_demo/
│   │   │   ├── INSTALL_LIBRARY.md
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   ├── src/
│   │   │   │   └── latency_sensitivity_demo/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── compare_sensitivity_perf.py
│   │   │   │       ├── configs/
│   │   │   │       │   ├── config_profile.yml
│   │   │   │       │   └── config_with_trie.yml
│   │   │   │       ├── data/
│   │   │   │       │   └── customer_queries.json
│   │   │   │       ├── register.py
│   │   │   │       ├── scripts/
│   │   │   │       │   ├── dynamo_stack.sh
│   │   │   │       │   └── dynamo_stack_sensitivity.sh
│   │   │   │       ├── sensitivity_report.py
│   │   │   │       └── workflow.py
│   │   │   └── tests/
│   │   │       └── test_workflow.py
│   │   ├── react_benchmark_agent/
│   │   │   ├── README.md
│   │   │   ├── README_PREDICTION_TRIE.md
│   │   │   ├── pyproject.toml
│   │   │   ├── src/
│   │   │   │   └── react_benchmark_agent/
│   │   │   │       ├── DEVELOPER_NOTES.md
│   │   │   │       ├── __init__.py
│   │   │   │       ├── banking_tools.py
│   │   │   │       ├── configs/
│   │   │   │       │   ├── config_dynamo_adk_e2e_test.yml
│   │   │   │       │   ├── config_dynamo_e2e_test.yml
│   │   │   │       │   ├── config_dynamo_prefix_e2e_test.yml
│   │   │   │       │   ├── eval_config_no_rethinking_full_test.yml
│   │   │   │       │   ├── eval_config_no_rethinking_minimal_test.yml
│   │   │   │       │   ├── eval_config_rethinking_full_test.yml
│   │   │   │       │   ├── optimize_rethinking_full_test.yml
│   │   │   │       │   ├── profile_rethinking_full_test.yml
│   │   │   │       │   └── run_with_prediction_trie.yml
│   │   │   │       ├── evaluators/
│   │   │   │       │   ├── __init__.py
│   │   │   │       │   ├── action_completion_evaluator.py
│   │   │   │       │   └── tsq_evaluator.py
│   │   │   │       ├── react_benchmark_agent.py
│   │   │   │       ├── register.py
│   │   │   │       ├── self_evaluating_agent_with_feedback.py
│   │   │   │       └── tool_intent_stubs.py
│   │   │   └── tests/
│   │   │       ├── test_self_evaluation.py
│   │   │       ├── test_tool_intent_buffer.py
│   │   │       └── test_tsq_formula.py
│   │   └── scripts/
│   │       ├── create_test_subset.py
│   │       ├── download_agent_leaderboard_v2.py
│   │       ├── plot_throughput_histograms_per_request.py
│   │       ├── plot_throughput_vs_tsq_per_request.py
│   │       ├── run_concurrency_benchmark.sh
│   │       └── throughput_analysis.py
│   ├── evaluation_and_profiling/
│   │   ├── email_phishing_analyzer/
│   │   │   ├── .dockerignore
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   ├── scripts/
│   │   │   │   └── run_phishing_evals_all.sh
│   │   │   ├── src/
│   │   │   │   └── nat_email_phishing_analyzer/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── configs/
│   │   │   │       │   ├── config-langsmith-eval.yml
│   │   │   │       │   ├── config-langsmith-optimize.yml
│   │   │   │       │   ├── config-llama-3.1-8b-instruct.yml
│   │   │   │       │   ├── config-llama-3.3-70b-instruct.yml
│   │   │   │       │   ├── config-mistral-large-3-675b-instruct-2512.yml
│   │   │   │       │   ├── config-mistral-small-4-119b-2603.yml
│   │   │   │       │   ├── config-nemotron-3-nano-30b-a3b.yml
│   │   │   │       │   ├── config-nemotron-3-super-120b-a12b.yml
│   │   │   │       │   ├── config-reasoning.yml
│   │   │   │       │   ├── config.yml
│   │   │   │       │   └── config_optimizer.yml
│   │   │   │       ├── data/
│   │   │   │       │   └── smaller_test.csv
│   │   │   │       ├── prompt.py
│   │   │   │       ├── register.py
│   │   │   │       └── utils.py
│   │   │   └── tests/
│   │   │       └── test_email_phishing_analyzer.py
│   │   ├── simple_calculator_eval/
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   ├── src/
│   │   │   │   └── nat_simple_calculator_eval/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── configs/
│   │   │   │       │   ├── config-branching-nested-trajectory-eval.yml
│   │   │   │       │   ├── config-custom-dataset-format.yml
│   │   │   │       │   ├── config-nested-trajectory-eval.yml
│   │   │   │       │   ├── config-sizing-calc.yml
│   │   │   │       │   ├── config-trajectory-eval.yml
│   │   │   │       │   ├── config-tunable-rag-eval-atif.yml
│   │   │   │       │   ├── config-tunable-rag-eval.yml
│   │   │   │       │   └── config-with-custom-post-process.yml
│   │   │   │       ├── data/
│   │   │   │       │   ├── output_samples/
│   │   │   │       │   │   ├── branching_nested_trajectory_eval/
│   │   │   │       │   │   │   ├── intermediate_step-vs-atif.md
│   │   │   │       │   │   │   ├── workflow_output.json
│   │   │   │       │   │   │   └── workflow_output_atif.json
│   │   │   │       │   │   ├── nested_trajectory_eval/
│   │   │   │       │   │   │   ├── intermediate_step-vs-atif.md
│   │   │   │       │   │   │   ├── workflow_output.json
│   │   │   │       │   │   │   └── workflow_output_atif.json
│   │   │   │       │   │   └── trajectory_eval/
│   │   │   │       │   │       ├── intermediate_step-vs-atif.md
│   │   │   │       │   │       ├── workflow_output.json
│   │   │   │       │   │       └── workflow_output_atif.json
│   │   │   │       │   ├── simple_calculator_nested.json
│   │   │   │       │   ├── simple_calculator_power_branch.json
│   │   │   │       │   └── simple_calculator_power_of_two.json
│   │   │   │       ├── register.py
│   │   │   │       └── scripts/
│   │   │   │           ├── __init__.py
│   │   │   │           ├── custom_dataset_parser.py
│   │   │   │           └── custom_post_process.py
│   │   │   └── tests/
│   │   │       ├── test_nested_trajectory_eval.py
│   │   │       └── test_simple_calculator_eval.py
│   │   └── simple_web_query_eval/
│   │       ├── README.md
│   │       ├── atif-eval-readme.md
│   │       ├── pyproject.toml
│   │       ├── src/
│   │       │   └── nat_simple_web_query_eval/
│   │       │       ├── __init__.py
│   │       │       ├── atif_only_evaluator_register.py
│   │       │       ├── configs/
│   │       │       │   ├── eval_config.yml
│   │       │       │   ├── eval_config_atif.yml
│   │       │       │   ├── eval_config_atif_custom_evaluator.yml
│   │       │       │   ├── eval_config_llama31.yml
│   │       │       │   ├── eval_config_llama31_atif.yml
│   │       │       │   ├── eval_config_llama33.yml
│   │       │       │   ├── eval_config_llama33_atif.yml
│   │       │       │   ├── eval_config_openai.yml
│   │       │       │   ├── eval_only_config.yml
│   │       │       │   └── eval_upload.yml
│   │       │       ├── data/
│   │       │       │   ├── langsmith.csv
│   │       │       │   ├── langsmith.json
│   │       │       │   ├── langsmith.xlsx
│   │       │       │   ├── langsmith_generated.json
│   │       │       │   └── simple_questions.json
│   │       │       ├── register.py
│   │       │       └── scripts/
│   │       │           ├── __init__.py
│   │       │           ├── evaluate_single_item.py
│   │       │           ├── evaluate_single_item_simple.py
│   │       │           └── workflow_to_csv.py
│   │       └── tests/
│   │           ├── test_atif_only_evaluator_register.py
│   │           └── test_simple_web_query_eval.py
│   ├── finetuning/
│   │   ├── dpo_tic_tac_toe/
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   └── src/
│   │   │       └── dpo_tic_tac_toe/
│   │   │           ├── __init__.py
│   │   │           ├── board_position_scorer.py
│   │   │           ├── choose_move_function.py
│   │   │           ├── configs/
│   │   │           │   ├── config.yml
│   │   │           │   └── config_after_training.yml
│   │   │           ├── core.py
│   │   │           ├── data/
│   │   │           │   └── data.json
│   │   │           ├── dpo_workflow.py
│   │   │           ├── evaluator.py
│   │   │           ├── evaluator_register.py
│   │   │           ├── llm_agents.py
│   │   │           ├── move_search_strategy.py
│   │   │           ├── register.py
│   │   │           └── ttc_move_selector_function.py
│   │   └── rl_with_openpipe_art/
│   │       ├── README.md
│   │       ├── pyproject.toml
│   │       └── src/
│   │           └── rl_with_openpipe_art/
│   │               ├── __init__.py
│   │               ├── accuracy_evaluator.py
│   │               ├── configs/
│   │               │   ├── config.yml
│   │               │   ├── config_post_train.yml
│   │               │   └── config_pre_train.yml
│   │               ├── core.py
│   │               ├── data/
│   │               │   ├── data.json
│   │               │   └── eval_data.json
│   │               ├── evaluator_register.py
│   │               ├── llm_agents.py
│   │               ├── register.py
│   │               └── rl_with_openpipe_art.py
│   ├── frameworks/
│   │   ├── adk_demo/
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   ├── src/
│   │   │   │   └── nat_adk_demo/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── agent.py
│   │   │   │       ├── configs/
│   │   │   │       │   ├── config.yml
│   │   │   │       │   ├── config_oai.yml
│   │   │   │       │   └── eval_config.yml
│   │   │   │       ├── data/
│   │   │   │       │   └── eval.json
│   │   │   │       ├── nat_time_tool.py
│   │   │   │       ├── register.py
│   │   │   │       └── weather_update_tool.py
│   │   │   └── tests/
│   │   │       └── test_adk_demo_e2e.py
│   │   ├── agno_personal_finance/
│   │   │   ├── .dockerignore
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   ├── src/
│   │   │   │   └── nat_agno_personal_finance/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── agno_personal_finance_function.py
│   │   │   │       ├── configs/
│   │   │   │       │   └── config.yml
│   │   │   │       └── register.py
│   │   │   └── tests/
│   │   │       └── test_agno_personal_finance_workflow.py
│   │   ├── auto_wrapper/
│   │   │   └── langchain_deep_research/
│   │   │       ├── README.md
│   │   │       ├── configs/
│   │   │       │   ├── config.yml
│   │   │       │   ├── config_with_eval.yml
│   │   │       │   ├── config_with_llms.yml
│   │   │       │   └── config_with_telemetry.yml
│   │   │       ├── data/
│   │   │       │   ├── DeepConsult_top1.csv
│   │   │       │   └── DeepConsult_top10.csv
│   │   │       ├── langgraph_deep_research.ipynb
│   │   │       └── src/
│   │   │           └── configurable_agent.py
│   │   ├── haystack_deep_research_agent/
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   ├── src/
│   │   │   │   └── nat_haystack_deep_research_agent/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── configs/
│   │   │   │       │   └── config.yml
│   │   │   │       ├── data/
│   │   │   │       │   ├── carbonara.md
│   │   │   │       │   └── sample_document.txt
│   │   │   │       ├── pipelines/
│   │   │   │       │   ├── __init__.py
│   │   │   │       │   ├── indexing.py
│   │   │   │       │   ├── rag.py
│   │   │   │       │   └── search.py
│   │   │   │       └── register.py
│   │   │   └── tests/
│   │   │       └── test_haystack_deep_research_agent.py
│   │   ├── multi_frameworks/
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   ├── src/
│   │   │   │   └── nat_multi_frameworks/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── configs/
│   │   │   │       │   └── config.yml
│   │   │   │       ├── haystack_agent.py
│   │   │   │       ├── langchain_research_tool.py
│   │   │   │       ├── llama_index_rag_tool.py
│   │   │   │       └── register.py
│   │   │   └── tests/
│   │   │       └── test_multi_frameworks_workflow.py
│   │   ├── nat_autogen_demo/
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   └── src/
│   │   │       └── nat_autogen_demo/
│   │   │           ├── __init__.py
│   │   │           ├── autogen_team.py
│   │   │           ├── configs/
│   │   │           │   ├── config-eval.yml
│   │   │           │   └── config.yml
│   │   │           ├── data/
│   │   │           │   └── toy_data.json
│   │   │           ├── register.py
│   │   │           └── traffic_status_tool.py
│   │   ├── semantic_kernel_demo/
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   ├── src/
│   │   │   │   └── nat_semantic_kernel_demo/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── configs/
│   │   │   │       │   └── config.yml
│   │   │   │       ├── data/
│   │   │   │       │   ├── hotel_prices.json
│   │   │   │       │   └── local_events.json
│   │   │   │       ├── hotel_price_tool.py
│   │   │   │       ├── local_events_tool.py
│   │   │   │       └── register.py
│   │   │   └── tests/
│   │   │       └── test_semantic_kernel_workflow.py
│   │   └── strands_demo/
│   │       ├── README.md
│   │       ├── bedrock_agentcore/
│   │       │   ├── .dockerignore
│   │       │   ├── Dockerfile
│   │       │   ├── README.md
│   │       │   └── scripts/
│   │       │       ├── deploy_nat.py
│   │       │       ├── get_agentcore_runtime_id.py
│   │       │       ├── run_nat_no_OTEL.sh
│   │       │       ├── run_nat_with_OTEL.sh
│   │       │       ├── update_nat.py
│   │       │       └── verify_nat.py
│   │       ├── pyproject.toml
│   │       └── src/
│   │           └── nat_strands_demo/
│   │               ├── __init__.py
│   │               ├── configs/
│   │               │   ├── agentcore_config.yml
│   │               │   ├── config.yml
│   │               │   ├── eval_config.yml
│   │               │   ├── optimizer_config.yml
│   │               │   └── sizing_config.yml
│   │               ├── data/
│   │               │   └── strands.json
│   │               ├── ping_tool.py
│   │               ├── register.py
│   │               └── url_directory.py
│   ├── front_ends/
│   │   ├── per_user_workflow/
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   └── src/
│   │   │       └── nat_per_user_workflow/
│   │   │           ├── __init__.py
│   │   │           ├── configs/
│   │   │           │   └── config.yml
│   │   │           ├── per_user_functions.py
│   │   │           ├── per_user_workflow.py
│   │   │           └── register.py
│   │   ├── simple_auth/
│   │   │   ├── Dockerfile
│   │   │   ├── README.md
│   │   │   ├── docker-compose.yml
│   │   │   ├── pyproject.toml
│   │   │   ├── src/
│   │   │   │   └── nat_simple_auth/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── configs/
│   │   │   │       │   └── config.yml
│   │   │   │       ├── ip_lookup.py
│   │   │   │       └── register.py
│   │   │   └── tests/
│   │   │       └── test_simple_auth.py
│   │   └── simple_calculator_custom_routes/
│   │       ├── README.md
│   │       ├── configs/
│   │       │   └── config-metadata.yml
│   │       ├── pyproject.toml
│   │       └── tests/
│   │           └── test_simple_calculator_custom_routes.py
│   ├── getting_started/
│   │   ├── scaffolding/
│   │   │   └── README.md
│   │   ├── simple_calculator/
│   │   │   ├── .dockerignore
│   │   │   ├── README.md
│   │   │   ├── pyproject.toml
│   │   │   ├── src/
│   │   │   │   └── nat_simple_calculator/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── configs/
│   │   │   │       │   ├── config-reasoning.yml
│   │   │   │       │   └── config.yml
│   │   │   │       ├── data/
│   │   │   │       │   ├── simple_calculator.json
│   │   │   │       │   └── simple_calculator_questions.json
│   │   │   │       └── register.py
│   │   │   └── tests/
│   │   │       └── test_simple_calculator_workflow.py
│   │   └── simple_web_query/
│   │       ├── README.md
│   │       ├── pyproject.toml
│   │       ├── src/
│   │       │   └── nat_simple_web_query/
│   │       │       ├── __init__.py
│   │       │       ├── configs/
│   │       │       │   └── config.yml
│   │       │       └── register.py
│   │       └── tests/
│   │           ├── test_simple_web_query_workflow.py
│   │           └── test_web_query_tool.py
│   ├── memory/
│   │   ├── memmachine/
│   │   │   ├── README.md
│   │   │   ├── configuration.yml
│   │   │   └── memmachine_memory_example.ipynb
│   │   └── redis/
│   │       ├── README.md
│   │       ├── configs/
│   │       │   └── config.yml
│   │       ├── pyproject.toml
│   │       └── tests/
│   │           └── test_memory_redis.py
│   ├── notebooks/
│   │   ├── README.md
│   │   ├── adding_tools_to_agents.ipynb
│   │   ├── bringing_your_own_agent.ipynb
│   │   ├── eval_atif_custom_evaluator.ipynb
│   │   ├── eval_atif_standalone.ipynb
│   │   ├── eval_harbor_atif_interop.ipynb
│   │   ├── getting_started_with_nat.ipynb
│   │   ├── hello_world.ipynb
│   │   ├── launchables/
│   │   │   ├── GPU_Cluster_Sizing_with_NeMo_Agent_Toolkit.ipynb
│   │   │   └── README.md
│   │   ├── mcp_setup_and_integration.ipynb
│   │   ├── multi_agent_orchestration.ipynb
│   │   ├── observability_evaluation_and_profiling.ipynb
│   │   ├── optimize_model_selection.ipynb
│   │   ├── pyproject.toml
│   │   └── tests/
│   │       └── test_notebooks_e2e.py
│   ├── object_store/
│   │   └── user_report/
│   │       ├── README.md
│   │       ├── configs/
│   │       │   ├── config_mem.yml
│   │       │   ├── config_mysql.yml
│   │       │   ├── config_redis.yml
│   │       │   └── config_s3.yml
│   │       ├── data/
│   │       │   └── object_store/
│   │       │       └── reports/
│   │       │           ├── 12345/
│   │       │           │   └── 2025-04-15.json
│   │       │           ├── 24680/
│   │       │           │   └── 2025-03-30.json
│   │       │           └── 67890/
│   │       │               └── latest.json
│   │       ├── pyproject.toml
│   │       ├── src/
│   │       │   └── nat_user_report/
│   │       │       ├── __init__.py
│   │       │       ├── register.py
│   │       │       └── user_report_tools.py
│   │       └── tests/
│   │           └── test_objext_store_example_user_report_tool.py
│   ├── observability/
│   │   └── simple_calculator_observability/
│   │       ├── README.md
│   │       ├── configs/
│   │       │   ├── config-catalyst.yml
│   │       │   ├── config-dbnl.yml
│   │       │   ├── config-galileo.yml
│   │       │   ├── config-langfuse.yml
│   │       │   ├── config-langsmith-eval.yml
│   │       │   ├── config-langsmith-optimize.yml
│   │       │   ├── config-langsmith.yml
│   │       │   ├── config-otel-file.yml
│   │       │   ├── config-patronus.yml
│   │       │   ├── config-phoenix-nested.yml
│   │       │   ├── config-phoenix.yml
│   │       │   └── config-weave.yml
│   │       ├── pyproject.toml
│   │       ├── src/
│   │       │   └── nat_simple_calculator_observability/
│   │       │       ├── __init__.py
│   │       │       └── register.py
│   │       └── tests/
│   │           └── test_simple_calc_observability.py
│   ├── prompt_from_file/
│   │   ├── README.md
│   │   ├── configs/
│   │   │   └── config.yml
│   │   ├── prompts/
│   │   │   └── system_prompt.txt
│   │   └── pyproject.toml
│   └── safety_and_security/
│       └── retail_agent/
│           ├── README.md
│           ├── pyproject.toml
│           ├── src/
│           │   └── nat_retail_agent/
│           │       ├── __init__.py
│           │       ├── configs/
│           │       │   ├── config-eval.yml
│           │       │   ├── config-with-defenses.yml
│           │       │   ├── config.yml
│           │       │   ├── red-teaming-with-defenses.yml
│           │       │   └── red-teaming.yml
│           │       ├── data/
│           │       │   ├── customers.json
│           │       │   ├── evalset-redteaming.json
│           │       │   ├── evalset.json
│           │       │   └── products.json
│           │       └── register.py
│           └── tests/
│               └── test_retail_agent.py
├── external/
│   └── dynamo/
│       ├── E2E_SEQUENCE.md
│       ├── README.md
│       ├── components/
│       │   ├── ARCHITECTURE.md
│       │   ├── README.md
│       │   ├── __init__.py
│       │   ├── config.yaml
│       │   ├── kv_indexer.py
│       │   ├── processor.py
│       │   └── router.py
│       ├── demo_priority_eviction.sh
│       ├── monitor_dynamo.sh
│       ├── monitoring/
│       │   ├── README.md
│       │   ├── docker-compose.yml
│       │   ├── grafana/
│       │   │   └── provisioning/
│       │   │       ├── dashboards/
│       │   │       │   ├── dashboards.yml
│       │   │       │   └── json/
│       │   │       │       └── dynamo-overview.json
│       │   │       └── datasources/
│       │   │           └── datasources.yml
│       │   ├── prometheus.yml
│       │   ├── rules/
│       │   │   ├── sglang-aliases.yml
│       │   │   └── vllm-aliases.yml
│       │   └── scripts/
│       │       └── kv_event_observer.py
│       ├── start_dynamo_disagg.sh
│       ├── start_dynamo_optimized_thompson_hints_sglang.sh
│       ├── start_dynamo_optimized_thompson_hints_vllm.sh
│       ├── start_dynamo_unified.sh
│       ├── stop_dynamo.sh
│       └── test_dynamo_integration.sh
├── nat.code-workspace
├── packages/
│   ├── nvidia_nat_a2a/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── a2a/
│   │   │               ├── __init__.py
│   │   │               ├── auth/
│   │   │               │   ├── __init__.py
│   │   │               │   └── credential_service.py
│   │   │               ├── cli/
│   │   │               │   ├── __init__.py
│   │   │               │   └── commands.py
│   │   │               ├── client/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── client_base.py
│   │   │               │   ├── client_config.py
│   │   │               │   └── client_impl.py
│   │   │               ├── register.py
│   │   │               └── server/
│   │   │                   ├── __init__.py
│   │   │                   ├── agent_executor_adapter.py
│   │   │                   ├── front_end_config.py
│   │   │                   ├── front_end_plugin.py
│   │   │                   ├── front_end_plugin_worker.py
│   │   │                   ├── oauth_middleware.py
│   │   │                   └── register_frontend.py
│   │   └── tests/
│   │       ├── auth/
│   │       │   └── test_credential_service.py
│   │       ├── cli/
│   │       │   └── test_cli.py
│   │       ├── client/
│   │       │   ├── conftest.py
│   │       │   ├── test_client_function_group.py
│   │       │   └── test_client_functionality.py
│   │       ├── conftest.py
│   │       └── server/
│   │           ├── conftest.py
│   │           ├── test_agent_card_generation.py
│   │           ├── test_oauth_middleware.py
│   │           └── test_server_functionality.py
│   ├── nvidia_nat_adk/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── adk/
│   │   │               ├── __init__.py
│   │   │               ├── adk_parser.py
│   │   │               ├── callback_handler.py
│   │   │               ├── llm.py
│   │   │               ├── register.py
│   │   │               └── tool_wrapper.py
│   │   └── tests/
│   │       ├── test_adk_callback_handler.py
│   │       ├── test_adk_llm.py
│   │       ├── test_adk_parser.py
│   │       └── test_adk_tool_wrapper.py
│   ├── nvidia_nat_agno/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── agno/
│   │   │               ├── __init__.py
│   │   │               ├── callback_handler.py
│   │   │               ├── llm.py
│   │   │               ├── register.py
│   │   │               ├── tool_wrapper.py
│   │   │               └── tools/
│   │   │                   ├── __init__.py
│   │   │                   ├── register.py
│   │   │                   └── serp_api_tool.py
│   │   └── tests/
│   │       ├── test_agno_callback_handler.py
│   │       ├── test_llm_agno.py
│   │       ├── test_tool_wrapper.py
│   │       └── tools/
│   │           └── test_serp_api_tool.py
│   ├── nvidia_nat_app/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   ├── meta/
│   │   │   │   └── pypi.md
│   │   │   └── nat_app/
│   │   │       ├── __init__.py
│   │   │       ├── api.py
│   │   │       ├── compiler/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── compilation_context.py
│   │   │       │   ├── compilation_stage.py
│   │   │       │   ├── compiler.py
│   │   │       │   ├── default_graph_compiler.py
│   │   │       │   ├── errors.py
│   │   │       │   ├── optimizer.py
│   │   │       │   └── pipelined_compiler.py
│   │   │       ├── constraints/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── decorators.py
│   │   │       │   ├── models.py
│   │   │       │   └── resolution.py
│   │   │       ├── executors/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── execution_state.py
│   │   │       │   ├── metrics.py
│   │   │       │   ├── result_handler.py
│   │   │       │   └── runner.py
│   │   │       ├── graph/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── access.py
│   │   │       │   ├── adapter.py
│   │   │       │   ├── analysis.py
│   │   │       │   ├── factory.py
│   │   │       │   ├── llm_detection.py
│   │   │       │   ├── models.py
│   │   │       │   ├── protocols.py
│   │   │       │   ├── scheduling.py
│   │   │       │   ├── static_analysis.py
│   │   │       │   ├── topology.py
│   │   │       │   └── types.py
│   │   │       ├── speculation/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── plan.py
│   │   │       │   ├── planner.py
│   │   │       │   ├── resolution.py
│   │   │       │   ├── safety.py
│   │   │       │   └── strategies/
│   │   │       │       ├── __init__.py
│   │   │       │       ├── base.py
│   │   │       │       └── router_branch.py
│   │   │       └── stages/
│   │   │           ├── __init__.py
│   │   │           ├── edge_classification.py
│   │   │           ├── extract.py
│   │   │           ├── llm_analysis.py
│   │   │           ├── node_analysis.py
│   │   │           ├── priority_assignment.py
│   │   │           ├── scheduling.py
│   │   │           ├── topology.py
│   │   │           └── validate.py
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── compiler/
│   │       │   ├── __init__.py
│   │       │   ├── test_compilation_context.py
│   │       │   ├── test_compilation_stage.py
│   │       │   ├── test_compiler.py
│   │       │   ├── test_default_graph_compiler.py
│   │       │   └── test_pipelined_compiler.py
│   │       ├── conftest.py
│   │       ├── constraints/
│   │       │   ├── __init__.py
│   │       │   ├── test_decorators.py
│   │       │   ├── test_models.py
│   │       │   └── test_resolution.py
│   │       ├── executors/
│   │       │   ├── __init__.py
│   │       │   ├── test_execution_state.py
│   │       │   ├── test_metrics.py
│   │       │   ├── test_result_handler.py
│   │       │   └── test_runner.py
│   │       ├── graph/
│   │       │   ├── __init__.py
│   │       │   ├── conftest.py
│   │       │   ├── test_access.py
│   │       │   ├── test_adapter.py
│   │       │   ├── test_analysis.py
│   │       │   ├── test_factory.py
│   │       │   ├── test_llm_detection.py
│   │       │   ├── test_models.py
│   │       │   ├── test_optimizer.py
│   │       │   ├── test_scheduling.py
│   │       │   ├── test_static_analysis.py
│   │       │   ├── test_topology.py
│   │       │   ├── test_types.py
│   │       │   └── test_uncertainty_invariants.py
│   │       ├── speculation/
│   │       │   ├── __init__.py
│   │       │   ├── test_plan.py
│   │       │   └── test_safety.py
│   │       ├── stages/
│   │       │   ├── __init__.py
│   │       │   ├── test_edge_classification.py
│   │       │   ├── test_extract.py
│   │       │   ├── test_llm_analysis.py
│   │       │   ├── test_node_analysis.py
│   │       │   ├── test_priority_assignment.py
│   │       │   ├── test_scheduling.py
│   │       │   ├── test_topology.py
│   │       │   └── test_validate.py
│   │       └── test_api.py
│   ├── nvidia_nat_atif/
│   │   ├── atif-step-extra-guide.md
│   │   ├── atof-event-format.md
│   │   ├── atof-to-atif-conversion-guide.md
│   │   ├── examples/
│   │   │   └── atof_to_atif/
│   │   │       ├── README.md
│   │   │       ├── convert_atof_examples_to_atif.py
│   │   │       ├── generate_atof_examples.py
│   │   │       └── output/
│   │   │           ├── exmp01_atif.json
│   │   │           ├── exmp01_atof.jsonl
│   │   │           ├── exmp02_atif.json
│   │   │           ├── exmp02_atof.jsonl
│   │   │           ├── exmp03_atif.json
│   │   │           ├── exmp03_atof.jsonl
│   │   │           ├── exmp04_atif.json
│   │   │           ├── exmp04_atof.jsonl
│   │   │           ├── exmp05_atif.json
│   │   │           ├── exmp05_atof.jsonl
│   │   │           ├── exmp06_atif.json
│   │   │           └── exmp06_atof.jsonl
│   │   ├── intermediate-step-to-atif-mapping.md
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── atif/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── agent.py
│   │   │       │   ├── atif_step_extra.py
│   │   │       │   ├── content.py
│   │   │       │   ├── final_metrics.py
│   │   │       │   ├── metrics.py
│   │   │       │   ├── observation.py
│   │   │       │   ├── observation_result.py
│   │   │       │   ├── scripts/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   └── generate_atif_trajectory.py
│   │   │       │   ├── step.py
│   │   │       │   ├── subagent_trajectory_ref.py
│   │   │       │   ├── tool_call.py
│   │   │       │   └── trajectory.py
│   │   │       ├── atof/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── category.py
│   │   │       │   ├── events.py
│   │   │       │   ├── extractors.py
│   │   │       │   ├── flags.py
│   │   │       │   ├── io.py
│   │   │       │   ├── schemas.py
│   │   │       │   └── scripts/
│   │   │       │       ├── __init__.py
│   │   │       │       └── atof_to_atif_converter.py
│   │   │       └── meta/
│   │   │           └── pypi.md
│   │   └── tests/
│   │       ├── test_atif_v17_validators.py
│   │       ├── test_data_schema_validation.py
│   │       ├── test_extractors.py
│   │       ├── test_schema_validation.py
│   │       ├── test_shape_mismatch.py
│   │       ├── test_spec_compliance.py
│   │       └── test_tier1_conversion.py
│   ├── nvidia_nat_autogen/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── autogen/
│   │   │               ├── __init__.py
│   │   │               ├── callback_handler.py
│   │   │               ├── llm.py
│   │   │               ├── register.py
│   │   │               └── tool_wrapper.py
│   │   └── tests/
│   │       ├── test_callback_handler_autogen.py
│   │       ├── test_callback_handler_integration.py
│   │       ├── test_llm_autogen.py
│   │       ├── test_register_autogen.py
│   │       └── test_tool_wrapper_autogen.py
│   ├── nvidia_nat_config_optimizer/
│   │   ├── README.md
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── config_optimizer/
│   │   │               ├── __init__.py
│   │   │               ├── cli/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── commands.py
│   │   │               │   └── optimize.py
│   │   │               ├── eval_runtime_loader.py
│   │   │               ├── optimizable_utils.py
│   │   │               ├── optimizer_runtime.py
│   │   │               ├── parameters/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── base.py
│   │   │               │   ├── optimizer.py
│   │   │               │   ├── pareto_visualizer.py
│   │   │               │   └── selection.py
│   │   │               ├── prompts/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── base.py
│   │   │               │   ├── ga_individual.py
│   │   │               │   ├── ga_prompt_optimizer.py
│   │   │               │   └── oracle_feedback.py
│   │   │               ├── register.py
│   │   │               └── update_helpers.py
│   │   └── tests/
│   │       ├── test_optimizable_utils.py
│   │       ├── test_optimizer_runtime_extra.py
│   │       ├── test_oracle_feedback.py
│   │       ├── test_parameter_optimizer.py
│   │       ├── test_parameter_selection_extra.py
│   │       ├── test_pareto_visualizer_extra.py
│   │       ├── test_prompt_optimizer.py
│   │       └── test_update_helpers.py
│   ├── nvidia_nat_core/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── authentication/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── api_key/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── api_key_auth_provider.py
│   │   │       │   │   ├── api_key_auth_provider_config.py
│   │   │       │   │   └── register.py
│   │   │       │   ├── credential_validator/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   └── bearer_token_validator.py
│   │   │       │   ├── exceptions/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   └── api_key_exceptions.py
│   │   │       │   ├── http_basic_auth/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── http_basic_auth_provider.py
│   │   │       │   │   └── register.py
│   │   │       │   ├── interfaces.py
│   │   │       │   ├── jwt_utils.py
│   │   │       │   ├── oauth2/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── oauth2_auth_code_flow_provider.py
│   │   │       │   │   ├── oauth2_auth_code_flow_provider_config.py
│   │   │       │   │   ├── oauth2_resource_server_config.py
│   │   │       │   │   └── register.py
│   │   │       │   ├── register.py
│   │   │       │   └── token_storage.py
│   │   │       ├── builder/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── builder.py
│   │   │       │   ├── child_builder.py
│   │   │       │   ├── component_utils.py
│   │   │       │   ├── context.py
│   │   │       │   ├── dataset_loader.py
│   │   │       │   ├── embedder.py
│   │   │       │   ├── evaluator.py
│   │   │       │   ├── framework_enum.py
│   │   │       │   ├── front_end.py
│   │   │       │   ├── function.py
│   │   │       │   ├── function_base.py
│   │   │       │   ├── function_info.py
│   │   │       │   ├── intermediate_step_manager.py
│   │   │       │   ├── llm.py
│   │   │       │   ├── per_user_workflow_builder.py
│   │   │       │   ├── retriever.py
│   │   │       │   ├── runtime_event_subscriber.py
│   │   │       │   ├── sync_builder.py
│   │   │       │   ├── user_interaction_manager.py
│   │   │       │   ├── workflow.py
│   │   │       │   └── workflow_builder.py
│   │   │       ├── cli/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── cli_utils/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── config_override.py
│   │   │       │   │   └── validation.py
│   │   │       │   ├── commands/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── configure/
│   │   │       │   │   │   ├── __init__.py
│   │   │       │   │   │   ├── channel/
│   │   │       │   │   │   │   ├── __init__.py
│   │   │       │   │   │   │   ├── add.py
│   │   │       │   │   │   │   ├── channel.py
│   │   │       │   │   │   │   ├── remove.py
│   │   │       │   │   │   │   └── update.py
│   │   │       │   │   │   └── configure.py
│   │   │       │   │   ├── finetune.py
│   │   │       │   │   ├── info/
│   │   │       │   │   │   ├── __init__.py
│   │   │       │   │   │   ├── info.py
│   │   │       │   │   │   ├── list_channels.py
│   │   │       │   │   │   └── list_components.py
│   │   │       │   │   ├── object_store/
│   │   │       │   │   │   ├── __init__.py
│   │   │       │   │   │   └── object_store.py
│   │   │       │   │   ├── registry/
│   │   │       │   │   │   ├── __init__.py
│   │   │       │   │   │   ├── publish.py
│   │   │       │   │   │   ├── pull.py
│   │   │       │   │   │   ├── registry.py
│   │   │       │   │   │   ├── remove.py
│   │   │       │   │   │   └── search.py
│   │   │       │   │   ├── start.py
│   │   │       │   │   ├── uninstall.py
│   │   │       │   │   ├── validate.py
│   │   │       │   │   └── workflow/
│   │   │       │   │       ├── __init__.py
│   │   │       │   │       ├── templates/
│   │   │       │   │       │   ├── __init__.py.j2
│   │   │       │   │       │   ├── config.yml.j2
│   │   │       │   │       │   ├── pyproject.toml.j2
│   │   │       │   │       │   ├── register.py.j2
│   │   │       │   │       │   └── workflow.py.j2
│   │   │       │   │       ├── workflow.py
│   │   │       │   │       └── workflow_commands.py
│   │   │       │   ├── entrypoint.py
│   │   │       │   ├── main.py
│   │   │       │   ├── plugin_loader.py
│   │   │       │   ├── register_workflow.py
│   │   │       │   └── type_registry.py
│   │   │       ├── data_models/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── agent.py
│   │   │       │   ├── api_server.py
│   │   │       │   ├── authentication.py
│   │   │       │   ├── common.py
│   │   │       │   ├── component.py
│   │   │       │   ├── component_ref.py
│   │   │       │   ├── config.py
│   │   │       │   ├── dataset_handler.py
│   │   │       │   ├── discovery_metadata.py
│   │   │       │   ├── embedder.py
│   │   │       │   ├── evaluate.py
│   │   │       │   ├── evaluate_config.py
│   │   │       │   ├── evaluate_runtime.py
│   │   │       │   ├── evaluator.py
│   │   │       │   ├── finetuning.py
│   │   │       │   ├── front_end.py
│   │   │       │   ├── function.py
│   │   │       │   ├── function_dependencies.py
│   │   │       │   ├── gated_field_mixin.py
│   │   │       │   ├── interactive.py
│   │   │       │   ├── interactive_http.py
│   │   │       │   ├── intermediate_step.py
│   │   │       │   ├── invocation_node.py
│   │   │       │   ├── llm.py
│   │   │       │   ├── logging.py
│   │   │       │   ├── memory.py
│   │   │       │   ├── middleware.py
│   │   │       │   ├── object_store.py
│   │   │       │   ├── openai_mcp.py
│   │   │       │   ├── optimizable.py
│   │   │       │   ├── optimizer.py
│   │   │       │   ├── profiler.py
│   │   │       │   ├── profiler_callback.py
│   │   │       │   ├── registry_handler.py
│   │   │       │   ├── retriever.py
│   │   │       │   ├── retry_mixin.py
│   │   │       │   ├── runtime_enum.py
│   │   │       │   ├── span.py
│   │   │       │   ├── ssl_verification_mixin.py
│   │   │       │   ├── step_adaptor.py
│   │   │       │   ├── streaming.py
│   │   │       │   ├── swe_bench_model.py
│   │   │       │   ├── telemetry_exporter.py
│   │   │       │   ├── thinking_mixin.py
│   │   │       │   ├── token_usage.py
│   │   │       │   ├── ttc_strategy.py
│   │   │       │   └── user_info.py
│   │   │       ├── embedder/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── azure_openai_embedder.py
│   │   │       │   ├── huggingface_embedder.py
│   │   │       │   ├── nim_embedder.py
│   │   │       │   ├── openai_embedder.py
│   │   │       │   └── register.py
│   │   │       ├── eval/
│   │   │       │   └── __init__.py
│   │   │       ├── experimental/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── decorators/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   └── experimental_warning_decorator.py
│   │   │       │   └── test_time_compute/
│   │   │       │       ├── __init__.py
│   │   │       │       ├── editing/
│   │   │       │       │   ├── __init__.py
│   │   │       │       │   ├── iterative_plan_refinement_editor.py
│   │   │       │       │   ├── llm_as_a_judge_editor.py
│   │   │       │       │   └── motivation_aware_summarization.py
│   │   │       │       ├── functions/
│   │   │       │       │   ├── __init__.py
│   │   │       │       │   ├── execute_score_select_function.py
│   │   │       │       │   ├── multi_llm_judge_function.py
│   │   │       │       │   ├── plan_select_execute_function.py
│   │   │       │       │   ├── ttc_tool_orchestration_function.py
│   │   │       │       │   └── ttc_tool_wrapper_function.py
│   │   │       │       ├── models/
│   │   │       │       │   ├── __init__.py
│   │   │       │       │   ├── editor_config.py
│   │   │       │       │   ├── scoring_config.py
│   │   │       │       │   ├── search_config.py
│   │   │       │       │   ├── selection_config.py
│   │   │       │       │   ├── stage_enums.py
│   │   │       │       │   ├── strategy_base.py
│   │   │       │       │   ├── tool_use_config.py
│   │   │       │       │   └── ttc_item.py
│   │   │       │       ├── register.py
│   │   │       │       ├── scoring/
│   │   │       │       │   ├── __init__.py
│   │   │       │       │   ├── llm_based_agent_scorer.py
│   │   │       │       │   ├── llm_based_plan_scorer.py
│   │   │       │       │   └── motivation_aware_scorer.py
│   │   │       │       ├── search/
│   │   │       │       │   ├── __init__.py
│   │   │       │       │   ├── multi_llm_generation.py
│   │   │       │       │   ├── multi_llm_planner.py
│   │   │       │       │   ├── multi_query_retrieval_search.py
│   │   │       │       │   └── single_shot_multi_plan_planner.py
│   │   │       │       └── selection/
│   │   │       │           ├── __init__.py
│   │   │       │           ├── best_of_n_selector.py
│   │   │       │           ├── llm_based_agent_output_selector.py
│   │   │       │           ├── llm_based_output_merging_selector.py
│   │   │       │           ├── llm_based_plan_selector.py
│   │   │       │           ├── llm_judge_selection.py
│   │   │       │           └── threshold_selector.py
│   │   │       ├── finetuning/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── finetuning_runtime.py
│   │   │       │   ├── interfaces/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── finetuning_runner.py
│   │   │       │   │   ├── trainer_adapter.py
│   │   │       │   │   └── trajectory_builder.py
│   │   │       │   └── utils/
│   │   │       │       ├── __init__.py
│   │   │       │       └── parsers/
│   │   │       │           ├── __init__.py
│   │   │       │           ├── base_parser.py
│   │   │       │           └── common.py
│   │   │       ├── front_ends/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── console/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── authentication_flow_handler.py
│   │   │       │   │   ├── console_front_end_config.py
│   │   │       │   │   ├── console_front_end_plugin.py
│   │   │       │   │   └── register.py
│   │   │       │   ├── cron/
│   │   │       │   │   └── __init__.py
│   │   │       │   ├── fastapi/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── async_jobs/
│   │   │       │   │   │   ├── __init__.py
│   │   │       │   │   │   ├── async_job.py
│   │   │       │   │   │   ├── dask_client_mixin.py
│   │   │       │   │   │   └── job_store.py
│   │   │       │   │   ├── auth_flow_handlers/
│   │   │       │   │   │   ├── __init__.py
│   │   │       │   │   │   ├── http_flow_handler.py
│   │   │       │   │   │   └── websocket_flow_handler.py
│   │   │       │   │   ├── execution_store.py
│   │   │       │   │   ├── fastapi_front_end_config.py
│   │   │       │   │   ├── fastapi_front_end_controller.py
│   │   │       │   │   ├── fastapi_front_end_plugin.py
│   │   │       │   │   ├── fastapi_front_end_plugin_worker.py
│   │   │       │   │   ├── html_snippets/
│   │   │       │   │   │   ├── __init__.py
│   │   │       │   │   │   └── auth_code_grant_success.py
│   │   │       │   │   ├── http_interactive_runner.py
│   │   │       │   │   ├── intermediate_steps_subscriber.py
│   │   │       │   │   ├── main.py
│   │   │       │   │   ├── message_handler.py
│   │   │       │   │   ├── message_validator.py
│   │   │       │   │   ├── register.py
│   │   │       │   │   ├── response_helpers.py
│   │   │       │   │   ├── routes/
│   │   │       │   │   │   ├── __init__.py
│   │   │       │   │   │   ├── async_generation.py
│   │   │       │   │   │   ├── auth.py
│   │   │       │   │   │   ├── chat.py
│   │   │       │   │   │   ├── common_utils.py
│   │   │       │   │   │   ├── execution.py
│   │   │       │   │   │   ├── generate.py
│   │   │       │   │   │   ├── health.py
│   │   │       │   │   │   ├── monitor.py
│   │   │       │   │   │   ├── static.py
│   │   │       │   │   │   ├── v1_chat_completions.py
│   │   │       │   │   │   └── websocket.py
│   │   │       │   │   ├── step_adaptor.py
│   │   │       │   │   └── utils.py
│   │   │       │   ├── register.py
│   │   │       │   └── simple_base/
│   │   │       │       ├── __init__.py
│   │   │       │       └── simple_front_end_plugin_base.py
│   │   │       ├── llm/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── aws_bedrock_llm.py
│   │   │       │   ├── azure_openai_llm.py
│   │   │       │   ├── dynamo_llm.py
│   │   │       │   ├── huggingface_inference_llm.py
│   │   │       │   ├── huggingface_llm.py
│   │   │       │   ├── litellm_llm.py
│   │   │       │   ├── nim_llm.py
│   │   │       │   ├── oci_llm.py
│   │   │       │   ├── openai_llm.py
│   │   │       │   ├── prediction_context.py
│   │   │       │   ├── register.py
│   │   │       │   └── utils/
│   │   │       │       ├── __init__.py
│   │   │       │       ├── constants.py
│   │   │       │       ├── env_config_value.py
│   │   │       │       ├── error.py
│   │   │       │       ├── hooks.py
│   │   │       │       ├── http_client.py
│   │   │       │       └── thinking.py
│   │   │       ├── memory/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── interfaces.py
│   │   │       │   └── models.py
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       ├── middleware/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── cache/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── cache_middleware.py
│   │   │       │   │   ├── cache_middleware_config.py
│   │   │       │   │   └── register.py
│   │   │       │   ├── common.py
│   │   │       │   ├── defense/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── defense_middleware.py
│   │   │       │   │   ├── defense_middleware_content_guard.py
│   │   │       │   │   ├── defense_middleware_data_models.py
│   │   │       │   │   ├── defense_middleware_output_verifier.py
│   │   │       │   │   ├── defense_middleware_pii.py
│   │   │       │   │   ├── defense_middleware_pre_tool_verifier.py
│   │   │       │   │   └── register.py
│   │   │       │   ├── dynamic/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── dynamic_function_middleware.py
│   │   │       │   │   ├── dynamic_middleware_config.py
│   │   │       │   │   └── register.py
│   │   │       │   ├── function_middleware.py
│   │   │       │   ├── logging/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── logging_middleware.py
│   │   │       │   │   ├── logging_middleware_config.py
│   │   │       │   │   └── register.py
│   │   │       │   ├── middleware.py
│   │   │       │   ├── red_teaming/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── red_teaming_middleware.py
│   │   │       │   │   ├── red_teaming_middleware_config.py
│   │   │       │   │   └── register.py
│   │   │       │   ├── register.py
│   │   │       │   ├── timeout/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── register.py
│   │   │       │   │   ├── timeout_middleware.py
│   │   │       │   │   └── timeout_middleware_config.py
│   │   │       │   └── utils/
│   │   │       │       ├── __init__.py
│   │   │       │       └── workflow_inventory.py
│   │   │       ├── object_store/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── in_memory_object_store.py
│   │   │       │   ├── interfaces.py
│   │   │       │   ├── models.py
│   │   │       │   └── register.py
│   │   │       ├── observability/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── exporter/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── base_exporter.py
│   │   │       │   │   ├── exporter.py
│   │   │       │   │   ├── file_exporter.py
│   │   │       │   │   ├── processing_exporter.py
│   │   │       │   │   ├── raw_exporter.py
│   │   │       │   │   └── span_exporter.py
│   │   │       │   ├── exporter_manager.py
│   │   │       │   ├── mixin/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── batch_config_mixin.py
│   │   │       │   │   ├── collector_config_mixin.py
│   │   │       │   │   ├── file_mixin.py
│   │   │       │   │   ├── file_mode.py
│   │   │       │   │   ├── redaction_config_mixin.py
│   │   │       │   │   ├── resource_conflict_mixin.py
│   │   │       │   │   ├── serialize_mixin.py
│   │   │       │   │   ├── tagging_config_mixin.py
│   │   │       │   │   └── type_introspection_mixin.py
│   │   │       │   ├── processor/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── batching_processor.py
│   │   │       │   │   ├── callback_processor.py
│   │   │       │   │   ├── falsy_batch_filter_processor.py
│   │   │       │   │   ├── intermediate_step_serializer.py
│   │   │       │   │   ├── processor.py
│   │   │       │   │   ├── processor_factory.py
│   │   │       │   │   ├── redaction/
│   │   │       │   │   │   ├── __init__.py
│   │   │       │   │   │   ├── contextual_redaction_processor.py
│   │   │       │   │   │   ├── contextual_span_redaction_processor.py
│   │   │       │   │   │   ├── redaction_processor.py
│   │   │       │   │   │   └── span_header_redaction_processor.py
│   │   │       │   │   └── span_tagging_processor.py
│   │   │       │   ├── register.py
│   │   │       │   └── utils/
│   │   │       │       ├── __init__.py
│   │   │       │       ├── dict_utils.py
│   │   │       │       ├── time_utils.py
│   │   │       │       └── tracing_utils.py
│   │   │       ├── parameter_optimization/
│   │   │       │   ├── __init__.py
│   │   │       │   └── eval_runtime_loader.py
│   │   │       ├── plugins/
│   │   │       │   └── .namespace
│   │   │       ├── profiler/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── callbacks/
│   │   │       │   │   └── __init__.py
│   │   │       │   ├── forecasting/
│   │   │       │   │   └── __init__.py
│   │   │       │   ├── inference_optimization/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── bottleneck_analysis/
│   │   │       │   │   │   └── __init__.py
│   │   │       │   │   └── experimental/
│   │   │       │   │       └── __init__.py
│   │   │       │   ├── parameter_optimization/
│   │   │       │   │   └── optimizer_callbacks.py
│   │   │       │   └── prediction_trie/
│   │   │       │       ├── __init__.py
│   │   │       │       ├── data_models.py
│   │   │       │       ├── metrics_accumulator.py
│   │   │       │       ├── serialization.py
│   │   │       │       ├── trie_builder.py
│   │   │       │       └── trie_lookup.py
│   │   │       ├── registry_handlers/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── local/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── local_handler.py
│   │   │       │   │   └── register_local.py
│   │   │       │   ├── metadata_factory.py
│   │   │       │   ├── package_utils.py
│   │   │       │   ├── pypi/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── pypi_handler.py
│   │   │       │   │   └── register_pypi.py
│   │   │       │   ├── register.py
│   │   │       │   ├── registry_handler_base.py
│   │   │       │   ├── rest/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── register_rest.py
│   │   │       │   │   └── rest_handler.py
│   │   │       │   └── schemas/
│   │   │       │       ├── __init__.py
│   │   │       │       ├── headers.py
│   │   │       │       ├── package.py
│   │   │       │       ├── publish.py
│   │   │       │       ├── pull.py
│   │   │       │       ├── remove.py
│   │   │       │       ├── search.py
│   │   │       │       └── status.py
│   │   │       ├── retriever/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── interface.py
│   │   │       │   ├── milvus/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── register.py
│   │   │       │   │   └── retriever.py
│   │   │       │   ├── models.py
│   │   │       │   ├── nemo_retriever/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── register.py
│   │   │       │   │   └── retriever.py
│   │   │       │   └── register.py
│   │   │       ├── runtime/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── loader.py
│   │   │       │   ├── metrics.py
│   │   │       │   ├── runner.py
│   │   │       │   ├── session.py
│   │   │       │   ├── user_manager.py
│   │   │       │   └── user_metadata.py
│   │   │       ├── settings/
│   │   │       │   ├── __init__.py
│   │   │       │   └── global_settings.py
│   │   │       ├── test/
│   │   │       │   └── .namespace
│   │   │       ├── tool/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── chat_completion.py
│   │   │       │   ├── code_execution/
│   │   │       │   │   ├── README.md
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── code_sandbox.py
│   │   │       │   │   ├── local_sandbox/
│   │   │       │   │   │   ├── .gitignore
│   │   │       │   │   │   ├── Dockerfile.sandbox
│   │   │       │   │   │   ├── __init__.py
│   │   │       │   │   │   ├── local_sandbox_server.py
│   │   │       │   │   │   ├── sandbox.requirements.txt
│   │   │       │   │   │   └── start_local_sandbox.sh
│   │   │       │   │   ├── register.py
│   │   │       │   │   └── utils.py
│   │   │       │   ├── datetime_tools.py
│   │   │       │   ├── document_search.py
│   │   │       │   ├── github_tools.py
│   │   │       │   ├── memory_tools/
│   │   │       │   │   ├── __init__.py
│   │   │       │   │   ├── add_memory_tool.py
│   │   │       │   │   ├── delete_memory_tool.py
│   │   │       │   │   └── get_memory_tool.py
│   │   │       │   ├── nvidia_rag.py
│   │   │       │   ├── register.py
│   │   │       │   ├── retriever.py
│   │   │       │   └── server_tools.py
│   │   │       └── utils/
│   │   │           ├── __init__.py
│   │   │           ├── atif_converter.py
│   │   │           ├── atif_message_utils.py
│   │   │           ├── callable_utils.py
│   │   │           ├── data_models/
│   │   │           │   ├── __init__.py
│   │   │           │   └── schema_validator.py
│   │   │           ├── debugging_utils.py
│   │   │           ├── decorators.py
│   │   │           ├── dump_distro_mapping.py
│   │   │           ├── exception_handlers/
│   │   │           │   ├── __init__.py
│   │   │           │   ├── automatic_retries.py
│   │   │           │   └── schemas.py
│   │   │           ├── io/
│   │   │           │   ├── __init__.py
│   │   │           │   ├── model_processing.py
│   │   │           │   ├── supress_logs.py
│   │   │           │   └── yaml_tools.py
│   │   │           ├── log_levels.py
│   │   │           ├── log_utils.py
│   │   │           ├── metadata_utils.py
│   │   │           ├── optional_imports.py
│   │   │           ├── producer_consumer_queue.py
│   │   │           ├── reactive/
│   │   │           │   ├── __init__.py
│   │   │           │   ├── base/
│   │   │           │   │   ├── __init__.py
│   │   │           │   │   ├── observable_base.py
│   │   │           │   │   ├── observer_base.py
│   │   │           │   │   └── subject_base.py
│   │   │           │   ├── observable.py
│   │   │           │   ├── observer.py
│   │   │           │   ├── subject.py
│   │   │           │   └── subscription.py
│   │   │           ├── responses_api.py
│   │   │           ├── settings/
│   │   │           │   ├── __init__.py
│   │   │           │   └── global_settings.py
│   │   │           ├── string_utils.py
│   │   │           ├── type_converter.py
│   │   │           ├── type_utils.py
│   │   │           └── url_utils.py
│   │   └── tests/
│   │       ├── eval/
│   │       │   └── test_eval_callbacks.py
│   │       ├── nat/
│   │       │   ├── authentication/
│   │       │   │   ├── test_api_key_auth.py
│   │       │   │   ├── test_bearer_token_validator.py
│   │       │   │   ├── test_data_models.py
│   │       │   │   ├── test_http_basic_auth_exchanger.py
│   │       │   │   ├── test_oauth_exchanger.py
│   │       │   │   └── test_oauth_resource_server_config.py
│   │       │   ├── builder/
│   │       │   │   ├── test_builder.py
│   │       │   │   ├── test_call_tracker_integration.py
│   │       │   │   ├── test_component_utils.py
│   │       │   │   ├── test_context.py
│   │       │   │   ├── test_evaluator.py
│   │       │   │   ├── test_function.py
│   │       │   │   ├── test_function_group.py
│   │       │   │   ├── test_function_info.py
│   │       │   │   ├── test_function_path_stack.py
│   │       │   │   ├── test_interactive.py
│   │       │   │   ├── test_intermediate_step_manager.py
│   │       │   │   └── test_per_user_builder.py
│   │       │   ├── cli/
│   │       │   │   ├── cli_utils/
│   │       │   │   │   ├── test_config_override.py
│   │       │   │   │   └── test_validation.py
│   │       │   │   ├── commands/
│   │       │   │   │   ├── test_validate.py
│   │       │   │   │   └── test_workflow_commands.py
│   │       │   │   ├── test_plugin_loader.py
│   │       │   │   ├── test_register_workflow.py
│   │       │   │   └── test_type_registry.py
│   │       │   ├── data_models/
│   │       │   │   ├── test_auth_payload.py
│   │       │   │   ├── test_common.py
│   │       │   │   ├── test_component_ref.py
│   │       │   │   ├── test_config.py
│   │       │   │   ├── test_gated_field_mixin.py
│   │       │   │   ├── test_interactive_http.py
│   │       │   │   ├── test_optimizable.py
│   │       │   │   ├── test_optimizer_oracle_feedback.py
│   │       │   │   ├── test_thinking_mixin.py
│   │       │   │   └── test_user_info.py
│   │       │   ├── experimental/
│   │       │   │   ├── test_decorator.py
│   │       │   │   └── test_test_time_compute.py
│   │       │   ├── finetuning/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── interfaces/
│   │       │   │   │   ├── __init__.py
│   │       │   │   │   ├── test_trainer.py
│   │       │   │   │   ├── test_trainer_adapter.py
│   │       │   │   │   └── test_trajectory_builder.py
│   │       │   │   └── utils/
│   │       │   │       ├── __init__.py
│   │       │   │       └── parsers/
│   │       │   │           ├── __init__.py
│   │       │   │           └── test_base_parser.py
│   │       │   ├── front_ends/
│   │       │   │   ├── auth_flow_handlers/
│   │       │   │   │   ├── mock_oauth2_server.py
│   │       │   │   │   ├── test_console_flow_handler.py
│   │       │   │   │   ├── test_http_flow_handler.py
│   │       │   │   │   ├── test_oauth_security_tests.py
│   │       │   │   │   └── test_websocket_flow_handler.py
│   │       │   │   ├── fastapi/
│   │       │   │   │   ├── conftest.py
│   │       │   │   │   ├── test_execution_store.py
│   │       │   │   │   ├── test_fastapi_front_end_config.py
│   │       │   │   │   ├── test_fastapi_front_end_plugin.py
│   │       │   │   │   ├── test_job_store.py
│   │       │   │   │   ├── test_openai_compatibility.py
│   │       │   │   │   ├── test_per_user_fastapi_integration.py
│   │       │   │   │   └── test_step_adaptor.py
│   │       │   │   └── test_message_validator.py
│   │       │   ├── llm/
│   │       │   │   ├── test_dynamic_prediction_hook.py
│   │       │   │   ├── test_dynamo_llm.py
│   │       │   │   ├── test_dynamo_prediction_trie.py
│   │       │   │   ├── test_oci_llm.py
│   │       │   │   ├── test_prediction_context.py
│   │       │   │   ├── test_runtime_prediction_e2e.py
│   │       │   │   └── utils/
│   │       │   │       ├── __init__.py
│   │       │   │       ├── _llm_configs.py
│   │       │   │       ├── test_hooks.py
│   │       │   │       ├── test_http_client.py
│   │       │   │       └── test_thinking.py
│   │       │   ├── middleware/
│   │       │   │   ├── test_cache_middleware.py
│   │       │   │   ├── test_defense_middleware.py
│   │       │   │   ├── test_defense_middleware_content_guard.py
│   │       │   │   ├── test_defense_middleware_output_verifier.py
│   │       │   │   ├── test_defense_middleware_pii.py
│   │       │   │   ├── test_defense_middleware_pre_tool_verifier.py
│   │       │   │   ├── test_dynamic_middleware.py
│   │       │   │   ├── test_middleware_components.py
│   │       │   │   ├── test_red_teaming_middleware.py
│   │       │   │   └── test_timeout_middleware.py
│   │       │   ├── object_store/
│   │       │   │   └── test_in_memory_object_store.py
│   │       │   ├── observability/
│   │       │   │   ├── exporter/
│   │       │   │   │   ├── test_base_exporter.py
│   │       │   │   │   ├── test_exporter.py
│   │       │   │   │   ├── test_file_exporter.py
│   │       │   │   │   ├── test_processing_exporter.py
│   │       │   │   │   ├── test_raw_exporter.py
│   │       │   │   │   └── test_span_exporter.py
│   │       │   │   ├── mixin/
│   │       │   │   │   ├── test_file_mixin.py
│   │       │   │   │   ├── test_serialize_mixin.py
│   │       │   │   │   └── test_type_introspection_mixin.py
│   │       │   │   ├── processor/
│   │       │   │   │   ├── redaction/
│   │       │   │   │   │   ├── test_contextual_redaction_processor.py
│   │       │   │   │   │   ├── test_contextual_span_redaction_processor.py
│   │       │   │   │   │   ├── test_redaction_processor.py
│   │       │   │   │   │   └── test_span_header_redaction_processor.py
│   │       │   │   │   ├── test_batching_processor.py
│   │       │   │   │   ├── test_intermediate_step_serializer.py
│   │       │   │   │   ├── test_processor.py
│   │       │   │   │   └── test_span_tagging_processor.py
│   │       │   │   ├── test_exporter_manager.py
│   │       │   │   └── utils/
│   │       │   │       ├── test_dict_utils.py
│   │       │   │       └── test_time_utils.py
│   │       │   ├── reactive/
│   │       │   │   ├── test_observable.py
│   │       │   │   ├── test_observer.py
│   │       │   │   ├── test_subject.py
│   │       │   │   └── test_subscription.py
│   │       │   ├── registry_handlers/
│   │       │   │   ├── test_local_handler.py
│   │       │   │   ├── test_metadata_factory.py
│   │       │   │   ├── test_package_utils.py
│   │       │   │   ├── test_pypi_handler.py
│   │       │   │   └── test_rest_handler.py
│   │       │   ├── retriever/
│   │       │   │   ├── test_configs.py
│   │       │   │   ├── test_models.py
│   │       │   │   └── test_retrievers.py
│   │       │   ├── runtime/
│   │       │   │   ├── test_runner.py
│   │       │   │   ├── test_runner_trace_ids.py
│   │       │   │   ├── test_session_manager.py
│   │       │   │   ├── test_session_traceparent.py
│   │       │   │   ├── test_user_manager.py
│   │       │   │   └── test_user_metadata.py
│   │       │   ├── server/
│   │       │   │   ├── config.yml
│   │       │   │   ├── legacy_server_config.yml
│   │       │   │   ├── server_config.yml
│   │       │   │   └── test_unified_api_server.py
│   │       │   ├── test_eval_deprecation_shim.py
│   │       │   ├── tools/
│   │       │   │   ├── test_chat_completion_error_response.py
│   │       │   │   ├── test_code_execution.py
│   │       │   │   ├── test_code_execution_sandbox.py
│   │       │   │   ├── test_datetime_tools.py
│   │       │   │   ├── test_retriever.py
│   │       │   │   └── test_tool_test_runner.py
│   │       │   └── utils/
│   │       │       ├── test_atif_converter.py
│   │       │       ├── test_converter.py
│   │       │       ├── test_decorators.py
│   │       │       ├── test_metadata_utils.py
│   │       │       ├── test_optional_imports.py
│   │       │       ├── test_retry_wrapper.py
│   │       │       ├── test_run_workflow.py
│   │       │       ├── test_string_utils.py
│   │       │       ├── test_type_utils.py
│   │       │       ├── test_url_utils.py
│   │       │       └── test_yaml_tools.py
│   │       ├── profiler/
│   │       │   └── parameter_optimization/
│   │       │       └── test_optimizer_callbacks.py
│   │       └── test_conftest.py
│   ├── nvidia_nat_crewai/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── crewai/
│   │   │               ├── __init__.py
│   │   │               ├── crewai_callback_handler.py
│   │   │               ├── llm.py
│   │   │               ├── register.py
│   │   │               └── tool_wrapper.py
│   │   └── tests/
│   │       ├── test_crewai_callback_handler.py
│   │       ├── test_crewai_choice_extraction.py
│   │       └── test_llm_crewai.py
│   ├── nvidia_nat_data_flywheel/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── data_flywheel/
│   │   │               └── observability/
│   │   │                   ├── __init__.py
│   │   │                   ├── exporter/
│   │   │                   │   ├── __init__.py
│   │   │                   │   ├── dfw_elasticsearch_exporter.py
│   │   │                   │   └── dfw_exporter.py
│   │   │                   ├── mixin/
│   │   │                   │   ├── __init__.py
│   │   │                   │   └── elasticsearch_mixin.py
│   │   │                   ├── processor/
│   │   │                   │   ├── __init__.py
│   │   │                   │   ├── dfw_record_processor.py
│   │   │                   │   └── trace_conversion/
│   │   │                   │       ├── __init__.py
│   │   │                   │       ├── adapter/
│   │   │                   │       │   ├── __init__.py
│   │   │                   │       │   ├── elasticsearch/
│   │   │                   │       │   │   ├── __init__.py
│   │   │                   │       │   │   ├── nim_converter.py
│   │   │                   │       │   │   └── openai_converter.py
│   │   │                   │       │   └── register.py
│   │   │                   │       ├── span_extractor.py
│   │   │                   │       ├── span_to_dfw.py
│   │   │                   │       └── trace_adapter_registry.py
│   │   │                   ├── register.py
│   │   │                   ├── schema/
│   │   │                   │   ├── __init__.py
│   │   │                   │   ├── provider/
│   │   │                   │   │   ├── __init__.py
│   │   │                   │   │   ├── nim_trace_source.py
│   │   │                   │   │   ├── openai_message.py
│   │   │                   │   │   └── openai_trace_source.py
│   │   │                   │   ├── register.py
│   │   │                   │   ├── schema_registry.py
│   │   │                   │   ├── sink/
│   │   │                   │   │   ├── __init__.py
│   │   │                   │   │   └── elasticsearch/
│   │   │                   │   │       ├── __init__.py
│   │   │                   │   │       ├── contract_version.py
│   │   │                   │   │       └── dfw_es_record.py
│   │   │                   │   ├── trace_container.py
│   │   │                   │   └── trace_source_base.py
│   │   │                   └── utils/
│   │   │                       ├── __init__.py
│   │   │                       └── deserialize.py
│   │   └── tests/
│   │       └── observability/
│   │           ├── exporter/
│   │           │   ├── test_dfw_elasticsearch_exporter.py
│   │           │   └── test_dfw_exporter.py
│   │           ├── mixin/
│   │           │   └── test_elasticsearch_mixin.py
│   │           ├── processor/
│   │           │   ├── test_dfw_record_processor.py
│   │           │   └── trace_conversion/
│   │           │       ├── adapter/
│   │           │       │   └── elasticsearch/
│   │           │       │       └── test_openai_converter.py
│   │           │       ├── test_span_extractor.py
│   │           │       ├── test_span_to_dfw_record.py
│   │           │       └── test_trace_adapter_registry.py
│   │           ├── schema/
│   │           │   ├── test_schema_registry.py
│   │           │   └── test_trace_container.py
│   │           └── utils/
│   │               └── test_deserialize.py
│   ├── nvidia_nat_eval/
│   │   ├── pyproject.toml
│   │   ├── scripts/
│   │   │   ├── compare_eval_runs.py
│   │   │   ├── print_atif_function_tree.py
│   │   │   └── print_ist_function_tree.py
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── eval/
│   │   │               ├── __init__.py
│   │   │               ├── cli/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── commands.py
│   │   │               │   └── evaluate.py
│   │   │               ├── data_models/
│   │   │               │   ├── __init__.py
│   │   │               │   └── evaluator_io.py
│   │   │               ├── dataset_handler/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── dataset_downloader.py
│   │   │               │   ├── dataset_filter.py
│   │   │               │   └── dataset_handler.py
│   │   │               ├── dataset_loader/
│   │   │               │   ├── __init__.py
│   │   │               │   └── register.py
│   │   │               ├── eval_callbacks.py
│   │   │               ├── evaluator/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── atif_base_evaluator.py
│   │   │               │   ├── atif_evaluator.py
│   │   │               │   ├── base_evaluator.py
│   │   │               │   └── evaluator_model.py
│   │   │               ├── exporters/
│   │   │               │   ├── __init__.py
│   │   │               │   └── file_eval_callback.py
│   │   │               ├── fastapi/
│   │   │               │   ├── __init__.py
│   │   │               │   └── routes.py
│   │   │               ├── register.py
│   │   │               ├── runners/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── config.py
│   │   │               │   └── multi_eval_runner.py
│   │   │               ├── runtime/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── atif_adapter.py
│   │   │               │   ├── builder.py
│   │   │               │   ├── eval_harness.py
│   │   │               │   ├── evaluate.py
│   │   │               │   ├── llm_validator.py
│   │   │               │   └── remote_workflow.py
│   │   │               └── utils/
│   │   │                   ├── __init__.py
│   │   │                   ├── intermediate_step_adapter.py
│   │   │                   ├── output_uploader.py
│   │   │                   └── tqdm_position_registry.py
│   │   └── tests/
│   │       ├── eval/
│   │       │   ├── conftest.py
│   │       │   ├── dataset_handler/
│   │       │   │   ├── test_dataset_downloader.py
│   │       │   │   ├── test_dataset_filter.py
│   │       │   │   └── test_dataset_handler.py
│   │       │   ├── dataset_loader/
│   │       │   │   ├── __init__.py
│   │       │   │   └── test_dataset_loader_registration.py
│   │       │   ├── evaluator/
│   │       │   │   ├── test_atif_base_evaluator.py
│   │       │   │   └── test_custom_evaluator.py
│   │       │   ├── resilience/
│   │       │   │   └── __init__.py
│   │       │   ├── runners/
│   │       │   │   ├── __init__.py
│   │       │   │   └── test_multi_eval_runner.py
│   │       │   ├── test_atif_adapter.py
│   │       │   ├── test_dependency_guidance.py
│   │       │   ├── test_eval_callback_builder.py
│   │       │   ├── test_eval_harness.py
│   │       │   ├── test_evaluate.py
│   │       │   ├── test_evaluate_callbacks.py
│   │       │   ├── test_file_eval_callback.py
│   │       │   ├── test_intermediate_step_adapter.py
│   │       │   ├── test_llm_retry.py
│   │       │   ├── test_llm_validator.py
│   │       │   ├── test_remote_evaluate.py
│   │       │   ├── test_workflow_eval_builder.py
│   │       │   └── utils/
│   │       │       ├── test_output_uploader.py
│   │       │       └── test_tqdm_position_registry_extra.py
│   │       └── fastapi/
│   │           └── test_evaluate_endpoints.py
│   ├── nvidia_nat_fastmcp/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── fastmcp/
│   │   │               ├── __init__.py
│   │   │               ├── cli/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── commands.py
│   │   │               │   └── utils.py
│   │   │               └── server/
│   │   │                   ├── __init__.py
│   │   │                   ├── front_end_config.py
│   │   │                   ├── front_end_plugin.py
│   │   │                   ├── front_end_plugin_worker.py
│   │   │                   ├── register_frontend.py
│   │   │                   └── tool_converter.py
│   │   └── tests/
│   │       └── test_fastmcp.py
│   ├── nvidia_nat_langchain/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── langchain/
│   │   │               ├── __init__.py
│   │   │               ├── agent/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── auto_memory_wrapper/
│   │   │               │   │   ├── __init__.py
│   │   │               │   │   ├── agent.py
│   │   │               │   │   ├── register.py
│   │   │               │   │   └── state.py
│   │   │               │   ├── base.py
│   │   │               │   ├── dual_node.py
│   │   │               │   ├── prompt_optimizer/
│   │   │               │   │   ├── __init__.py
│   │   │               │   │   ├── prompt.py
│   │   │               │   │   └── register.py
│   │   │               │   ├── react_agent/
│   │   │               │   │   ├── __init__.py
│   │   │               │   │   ├── agent.py
│   │   │               │   │   ├── output_parser.py
│   │   │               │   │   ├── prompt.py
│   │   │               │   │   ├── register.py
│   │   │               │   │   └── register_per_user_agent.py
│   │   │               │   ├── reasoning_agent/
│   │   │               │   │   ├── __init__.py
│   │   │               │   │   └── reasoning_agent.py
│   │   │               │   ├── register.py
│   │   │               │   ├── responses_api_agent/
│   │   │               │   │   ├── __init__.py
│   │   │               │   │   └── register.py
│   │   │               │   ├── rewoo_agent/
│   │   │               │   │   ├── __init__.py
│   │   │               │   │   ├── agent.py
│   │   │               │   │   ├── prompt.py
│   │   │               │   │   └── register.py
│   │   │               │   └── tool_calling_agent/
│   │   │               │       ├── __init__.py
│   │   │               │       ├── agent.py
│   │   │               │       └── register.py
│   │   │               ├── callback_handler.py
│   │   │               ├── control_flow/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── parallel_executor.py
│   │   │               │   ├── register.py
│   │   │               │   ├── router_agent/
│   │   │               │   │   ├── __init__.py
│   │   │               │   │   ├── agent.py
│   │   │               │   │   ├── prompt.py
│   │   │               │   │   └── register.py
│   │   │               │   └── sequential_executor.py
│   │   │               ├── dataset_loader/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── langsmith.py
│   │   │               │   └── register.py
│   │   │               ├── embedder.py
│   │   │               ├── eval/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── langsmith_custom_evaluator.py
│   │   │               │   ├── langsmith_evaluator.py
│   │   │               │   ├── langsmith_evaluator_adapter.py
│   │   │               │   ├── langsmith_judge.py
│   │   │               │   ├── register.py
│   │   │               │   ├── trajectory_evaluator.py
│   │   │               │   ├── tunable_rag_evaluator.py
│   │   │               │   └── utils.py
│   │   │               ├── langchain_parser.py
│   │   │               ├── langgraph_workflow.py
│   │   │               ├── langsmith/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── langsmith_evaluation_callback.py
│   │   │               │   ├── langsmith_optimization_callback.py
│   │   │               │   └── register.py
│   │   │               ├── llm.py
│   │   │               ├── register.py
│   │   │               ├── retriever.py
│   │   │               ├── tool_wrapper.py
│   │   │               └── tools/
│   │   │                   ├── __init__.py
│   │   │                   ├── code_generation_tool.py
│   │   │                   ├── exa_internet_search.py
│   │   │                   ├── register.py
│   │   │                   ├── tavily_internet_search.py
│   │   │                   └── wikipedia_search.py
│   │   └── tests/
│   │       ├── agent/
│   │       │   ├── prompt_optimizer/
│   │       │   │   ├── test_prompt_optimizer_register.py
│   │       │   │   └── test_prompt_templates.py
│   │       │   ├── test_auto_memory_wrapper.py
│   │       │   ├── test_base.py
│   │       │   ├── test_react.py
│   │       │   ├── test_reasoning_agent.py
│   │       │   ├── test_responses_api_agent.py
│   │       │   ├── test_rewoo.py
│   │       │   ├── test_router_agent.py
│   │       │   └── test_tool_calling.py
│   │       ├── control_flow/
│   │       │   ├── test_parallel_executor.py
│   │       │   └── test_sequential_executor.py
│   │       ├── dataset_loader/
│   │       │   └── test_langsmith_loader.py
│   │       ├── eval/
│   │       │   ├── __init__.py
│   │       │   ├── conftest.py
│   │       │   ├── test_langsmith_custom_evaluator.py
│   │       │   ├── test_langsmith_evaluator.py
│   │       │   ├── test_langsmith_judge.py
│   │       │   ├── test_trajectory_evaluate.py
│   │       │   ├── test_tunable_rag_evaluate.py
│   │       │   └── test_utils.py
│   │       ├── langsmith/
│   │       │   ├── test_langsmith_callback.py
│   │       │   ├── test_langsmith_integration.py
│   │       │   └── test_otel_matching.py
│   │       ├── test_dynamo_trie_loading.py
│   │       ├── test_embedder_langchain.py
│   │       ├── test_exa_internet_search.py
│   │       ├── test_finetuning_parser.py
│   │       ├── test_langchain_agents.py
│   │       ├── test_langchain_callback_handler.py
│   │       ├── test_langchain_parser.py
│   │       ├── test_langgraph_workflow.py
│   │       ├── test_llm_langchain.py
│   │       └── test_tavily_internet_search.py
│   ├── nvidia_nat_llama_index/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── llama_index/
│   │   │               ├── __init__.py
│   │   │               ├── callback_handler.py
│   │   │               ├── embedder.py
│   │   │               ├── llama_index_parser.py
│   │   │               ├── llm.py
│   │   │               ├── register.py
│   │   │               └── tool_wrapper.py
│   │   └── tests/
│   │       ├── test_embedder_llama_index.py
│   │       ├── test_llama_index_agents.py
│   │       ├── test_llama_index_callback_handler.py
│   │       ├── test_llama_index_parser.py
│   │       └── test_llm_llama_index.py
│   ├── nvidia_nat_mcp/
│   │   ├── pyproject.toml
│   │   ├── scripts/
│   │   │   ├── check_mcp_auth_cookie.py
│   │   │   └── check_mcp_auth_jwt.py
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── mcp/
│   │   │               ├── __init__.py
│   │   │               ├── auth/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── auth_flow_handler.py
│   │   │               │   ├── auth_provider.py
│   │   │               │   ├── auth_provider_config.py
│   │   │               │   ├── register.py
│   │   │               │   └── service_account/
│   │   │               │       ├── __init__.py
│   │   │               │       ├── provider.py
│   │   │               │       ├── provider_config.py
│   │   │               │       └── token_client.py
│   │   │               ├── cli/
│   │   │               │   ├── __init__.py
│   │   │               │   └── commands.py
│   │   │               ├── client/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── client_base.py
│   │   │               │   ├── client_config.py
│   │   │               │   ├── client_impl.py
│   │   │               │   └── fastapi_routes.py
│   │   │               ├── exception_handler.py
│   │   │               ├── exceptions.py
│   │   │               ├── register.py
│   │   │               ├── server/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── front_end_config.py
│   │   │               │   ├── front_end_plugin.py
│   │   │               │   ├── front_end_plugin_worker.py
│   │   │               │   ├── introspection_token_verifier.py
│   │   │               │   ├── memory_profiler.py
│   │   │               │   ├── register_frontend.py
│   │   │               │   └── tool_converter.py
│   │   │               └── utils.py
│   │   └── tests/
│   │       ├── cli/
│   │       │   └── test_mcp_cli.py
│   │       ├── client/
│   │       │   ├── test_mcp_auth_provider.py
│   │       │   ├── test_mcp_auth_timeout.py
│   │       │   ├── test_mcp_client_base.py
│   │       │   ├── test_mcp_client_impl.py
│   │       │   ├── test_mcp_schema.py
│   │       │   ├── test_mcp_service_account.py
│   │       │   ├── test_mcp_session_management.py
│   │       │   └── test_mcp_token_storage.py
│   │       └── server/
│   │           ├── test_add_root_level_routes.py
│   │           ├── test_main.py
│   │           ├── test_mcp_client_endpoint.py
│   │           ├── test_mcp_custom_routes.py
│   │           ├── test_mcp_debug_routes.py
│   │           ├── test_mcp_front_end_config.py
│   │           ├── test_mcp_front_end_plugin.py
│   │           ├── test_mcp_frontend_register.py
│   │           ├── test_memory_profiler.py
│   │           └── test_tool_converter.py
│   ├── nvidia_nat_mem0ai/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── mem0ai/
│   │   │               ├── __init__.py
│   │   │               ├── mem0_editor.py
│   │   │               ├── memory.py
│   │   │               └── register.py
│   │   └── tests/
│   │       └── test_mem0_editor.py
│   ├── nvidia_nat_memmachine/
│   │   ├── README.md
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           ├── __init__.py
│   │   │           └── memmachine/
│   │   │               ├── __init__.py
│   │   │               ├── memmachine_editor.py
│   │   │               ├── memory.py
│   │   │               └── register.py
│   │   └── tests/
│   │       ├── test_add_and_retrieve.py
│   │       ├── test_memmachine_api_calls.py
│   │       ├── test_memmachine_editor.py
│   │       ├── test_memmachine_integration.py
│   │       └── test_memory.py
│   ├── nvidia_nat_mysql/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       └── plugins/
│   │   │           └── mysql/
│   │   │               ├── __init__.py
│   │   │               ├── mysql_object_store.py
│   │   │               ├── object_store.py
│   │   │               └── register.py
│   │   └── tests/
│   │       └── test_mysql_object_store.py
│   ├── nvidia_nat_nemo_customizer/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── customizer/
│   │   │               ├── __init__.py
│   │   │               ├── dpo/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── config.py
│   │   │               │   ├── register.py
│   │   │               │   ├── trainer.py
│   │   │               │   ├── trainer_adapter.py
│   │   │               │   └── trajectory_builder.py
│   │   │               └── register.py
│   │   └── tests/
│   │       ├── conftest.py
│   │       ├── test_dpo_config.py
│   │       ├── test_dpo_trajectory_builder.py
│   │       └── test_nemo_customizer.py
│   ├── nvidia_nat_openpipe_art/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── openpipe/
│   │   │               ├── __init__.py
│   │   │               ├── config.py
│   │   │               ├── register.py
│   │   │               ├── trainer.py
│   │   │               ├── trainer_adapter.py
│   │   │               └── trajectory_builder.py
│   │   └── tests/
│   │       ├── __init__.py
│   │       ├── conftest.py
│   │       ├── test_trainer.py
│   │       ├── test_trainer_adapter.py
│   │       └── test_trajectory_builder.py
│   ├── nvidia_nat_opentelemetry/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── opentelemetry/
│   │   │               ├── __init__.py
│   │   │               ├── mixin/
│   │   │               │   ├── __init__.py
│   │   │               │   └── otlp_span_exporter_mixin.py
│   │   │               ├── otel_span.py
│   │   │               ├── otel_span_exporter.py
│   │   │               ├── otlp_span_adapter_exporter.py
│   │   │               ├── otlp_span_redaction_adapter_exporter.py
│   │   │               ├── register.py
│   │   │               └── span_converter.py
│   │   └── tests/
│   │       └── observability/
│   │           ├── test_otel_span_ids.py
│   │           ├── test_otlp_span_adapter_exporter.py
│   │           ├── test_otlp_span_adapter_integration.py
│   │           └── test_otlp_span_redaction_adapter_exporter.py
│   ├── nvidia_nat_phoenix/
│   │   ├── pyproject.toml
│   │   └── src/
│   │       └── nat/
│   │           ├── meta/
│   │           │   └── pypi.md
│   │           └── plugins/
│   │               └── phoenix/
│   │                   ├── __init__.py
│   │                   ├── mixin/
│   │                   │   ├── __init__.py
│   │                   │   └── phoenix_mixin.py
│   │                   ├── phoenix_exporter.py
│   │                   ├── register.py
│   │                   └── scripts/
│   │                       ├── __init__.py
│   │                       └── export_trajectory_to_phoenix/
│   │                           ├── README.md
│   │                           ├── __init__.py
│   │                           ├── atif_trajectory_exporter.py
│   │                           ├── atif_trajectory_phoenix_exporter.py
│   │                           └── export_atif_trajectory_to_phoenix.py
│   ├── nvidia_nat_profiler/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── profiler/
│   │   │               ├── __init__.py
│   │   │               ├── calc/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── calc_runner.py
│   │   │               │   ├── calculations.py
│   │   │               │   ├── data_models.py
│   │   │               │   └── plot.py
│   │   │               ├── callbacks/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── base_callback_class.py
│   │   │               │   └── token_usage_base_model.py
│   │   │               ├── cli/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── commands.py
│   │   │               │   └── sizing.py
│   │   │               ├── data_frame_row.py
│   │   │               ├── data_models.py
│   │   │               ├── decorators/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── framework_wrapper.py
│   │   │               │   ├── function_tracking.py
│   │   │               │   └── latency.py
│   │   │               ├── forecasting/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── config.py
│   │   │               │   ├── model_trainer.py
│   │   │               │   └── models/
│   │   │               │       ├── __init__.py
│   │   │               │       ├── forecasting_base_model.py
│   │   │               │       ├── linear_model.py
│   │   │               │       └── random_forest_regressor.py
│   │   │               ├── inference_metrics_model.py
│   │   │               ├── inference_optimization/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── bottleneck_analysis/
│   │   │               │   │   ├── __init__.py
│   │   │               │   │   ├── nested_stack_analysis.py
│   │   │               │   │   └── simple_stack_analysis.py
│   │   │               │   ├── data_models.py
│   │   │               │   ├── dynamo_metrics.py
│   │   │               │   ├── experimental/
│   │   │               │   │   ├── __init__.py
│   │   │               │   │   ├── concurrency_spike_analysis.py
│   │   │               │   │   └── prefix_span_analysis.py
│   │   │               │   ├── llm_metrics.py
│   │   │               │   ├── prompt_caching.py
│   │   │               │   ├── token_uniqueness.py
│   │   │               │   └── workflow_runtimes.py
│   │   │               ├── intermediate_property_adapter.py
│   │   │               ├── profile_runner.py
│   │   │               ├── register.py
│   │   │               ├── runtime_evaluator/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── atif_evaluate.py
│   │   │               │   ├── evaluate.py
│   │   │               │   └── register.py
│   │   │               └── utils.py
│   │   └── tests/
│   │       ├── calc/
│   │       │   └── test_calc_runner.py
│   │       ├── decorators/
│   │       │   ├── test_function_tracking.py
│   │       │   └── test_latency.py
│   │       ├── forecasting/
│   │       │   └── test_model_trainer.py
│   │       ├── metrics/
│   │       │   ├── test_common_prefixes.py
│   │       │   ├── test_concurrency_spike.py
│   │       │   ├── test_llm_metrics.py
│   │       │   ├── test_nested_bottleneck.py
│   │       │   ├── test_prefix_span.py
│   │       │   ├── test_simple_bottleneck.py
│   │       │   └── test_token_uniqueness.py
│   │       ├── profiler/
│   │       │   ├── prediction_trie/
│   │       │   │   ├── __init__.py
│   │       │   │   ├── test_data_models.py
│   │       │   │   ├── test_metrics_accumulator.py
│   │       │   │   ├── test_serialization.py
│   │       │   │   ├── test_trie_builder.py
│   │       │   │   └── test_trie_lookup.py
│   │       │   └── test_runtime_evaluator_atif.py
│   │       ├── test_percentile_interval_computation.py
│   │       ├── test_prediction_trie_e2e.py
│   │       ├── test_prediction_trie_integration.py
│   │       ├── test_producer_consumer_queue.py
│   │       └── test_profiler.py
│   ├── nvidia_nat_rag/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── rag/
│   │   │               ├── __init__.py
│   │   │               ├── client.py
│   │   │               ├── config.py
│   │   │               ├── models.py
│   │   │               └── register.py
│   │   └── tests/
│   │       ├── test_rag_function.py
│   │       ├── test_rag_models.py
│   │       └── test_tools.py
│   ├── nvidia_nat_ragaai/
│   │   ├── pyproject.toml
│   │   └── src/
│   │       └── nat/
│   │           ├── meta/
│   │           │   └── pypi.md
│   │           └── plugins/
│   │               └── ragaai/
│   │                   ├── __init__.py
│   │                   ├── mixin/
│   │                   │   ├── __init__.py
│   │                   │   └── ragaai_catalyst_mixin.py
│   │                   ├── ragaai_catalyst_exporter.py
│   │                   └── register.py
│   ├── nvidia_nat_ragas/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── ragas/
│   │   │               ├── __init__.py
│   │   │               ├── rag_evaluator/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── atif_evaluate.py
│   │   │               │   ├── data_models.py
│   │   │               │   ├── evaluate.py
│   │   │               │   ├── llm_adapter.py
│   │   │               │   ├── register.py
│   │   │               │   └── utils.py
│   │   │               └── register.py
│   │   └── tests/
│   │       ├── conftest.py
│   │       └── test_rag_evaluate.py
│   ├── nvidia_nat_redis/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── redis/
│   │   │               ├── __init__.py
│   │   │               ├── memory.py
│   │   │               ├── object_store.py
│   │   │               ├── redis_editor.py
│   │   │               ├── redis_object_store.py
│   │   │               ├── register.py
│   │   │               └── schema.py
│   │   └── tests/
│   │       ├── test_redis_editor.py
│   │       └── test_redis_object_store.py
│   ├── nvidia_nat_s3/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       └── plugins/
│   │   │           └── s3/
│   │   │               ├── __init__.py
│   │   │               ├── object_store.py
│   │   │               ├── register.py
│   │   │               └── s3_object_store.py
│   │   └── tests/
│   │       └── test_s3_object_store.py
│   ├── nvidia_nat_security/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── security/
│   │   │               ├── __init__.py
│   │   │               ├── cli/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── commands.py
│   │   │               │   └── red_teaming/
│   │   │               │       ├── __init__.py
│   │   │               │       ├── red_teaming.py
│   │   │               │       └── red_teaming_utils.py
│   │   │               ├── eval/
│   │   │               │   ├── __init__.py
│   │   │               │   ├── red_teaming_evaluator/
│   │   │               │   │   ├── __init__.py
│   │   │               │   │   ├── data_models.py
│   │   │               │   │   ├── evaluate.py
│   │   │               │   │   ├── filter_conditions.py
│   │   │               │   │   └── register.py
│   │   │               │   └── runners/
│   │   │               │       ├── __init__.py
│   │   │               │       └── red_teaming_runner/
│   │   │               │           ├── __init__.py
│   │   │               │           ├── config.py
│   │   │               │           ├── report_utils.py
│   │   │               │           └── runner.py
│   │   │               └── register.py
│   │   └── tests/
│   │       └── eval/
│   │           ├── red_teaming_evaluator/
│   │           │   ├── __init__.py
│   │           │   ├── fake_chat_models.py
│   │           │   ├── test_evaluate.py
│   │           │   └── test_filter_conditions.py
│   │           └── runners/
│   │               └── red_teaming_runner/
│   │                   ├── __init__.py
│   │                   ├── test_red_teaming_config.py
│   │                   └── test_red_teaming_runner.py
│   ├── nvidia_nat_semantic_kernel/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── semantic_kernel/
│   │   │               ├── __init__.py
│   │   │               ├── callback_handler.py
│   │   │               ├── llm.py
│   │   │               ├── register.py
│   │   │               └── tool_wrapper.py
│   │   └── tests/
│   │       ├── test_llm_sk.py
│   │       ├── test_sk_callback_handler.py
│   │       └── test_sk_decorator.py
│   ├── nvidia_nat_strands/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── strands/
│   │   │               ├── __init__.py
│   │   │               ├── callback_handler.py
│   │   │               ├── llm.py
│   │   │               ├── register.py
│   │   │               └── tool_wrapper.py
│   │   └── tests/
│   │       ├── test_callback_handler.py
│   │       ├── test_strands_callback_handler.py
│   │       ├── test_strands_integration.py
│   │       ├── test_strands_llm.py
│   │       └── test_strands_tool_wrapper.py
│   ├── nvidia_nat_test/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   ├── _utils/
│   │   │   │   ├── configs.py
│   │   │   │   └── dask_utils.py
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── test/
│   │   │           ├── __init__.py
│   │   │           ├── embedder.py
│   │   │           ├── functions.py
│   │   │           ├── llm.py
│   │   │           ├── memory.py
│   │   │           ├── object_store_tests.py
│   │   │           ├── observability.py
│   │   │           ├── plugin.py
│   │   │           ├── register.py
│   │   │           ├── tool_test_runner.py
│   │   │           └── utils.py
│   │   └── tests/
│   │       ├── test_env_fixtures.py
│   │       ├── test_test_llm.py
│   │       └── test_test_utils.py
│   ├── nvidia_nat_vanna/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── vanna/
│   │   │               ├── __init__.py
│   │   │               ├── db_utils.py
│   │   │               ├── execute_db_query.py
│   │   │               ├── register.py
│   │   │               ├── text2sql.py
│   │   │               ├── training_db_schema.py
│   │   │               └── vanna_utils.py
│   │   ├── tests/
│   │   │   └── test_vanna_db_utils.py
│   │   ├── text2sql_config.yml
│   │   └── text2sql_training_config.yml
│   ├── nvidia_nat_weave/
│   │   ├── pyproject.toml
│   │   ├── src/
│   │   │   └── nat/
│   │   │       ├── meta/
│   │   │       │   └── pypi.md
│   │   │       └── plugins/
│   │   │           └── weave/
│   │   │               ├── __init__.py
│   │   │               ├── fastapi_plugin_worker.py
│   │   │               ├── register.py
│   │   │               ├── weave_eval_callback.py
│   │   │               └── weave_exporter.py
│   │   └── tests/
│   │       ├── test_fastapi_plugin_worker.py
│   │       └── test_weave_eval_callback.py
│   └── nvidia_nat_zep_cloud/
│       ├── pyproject.toml
│       └── src/
│           └── nat/
│               ├── meta/
│               │   └── pypi.md
│               └── plugins/
│                   └── zep_cloud/
│                       ├── __init__.py
│                       ├── memory.py
│                       ├── register.py
│                       └── zep_editor.py
├── pyproject.toml
├── scripts/
│   ├── bootstrap_milvus.sh
│   ├── langchain_web_ingest.py
│   ├── sitemap_scraper.py
│   └── web_utils.py
└── test_data/
    ├── azure_openai_e2e.yaml
    ├── config.yaml
    ├── docker-compose.services.yml
    ├── echo.yaml
    ├── invalid_yaml.yaml
    ├── missing_section_config.yaml
    ├── missing_type_config.yaml
    ├── nginx/
    │   ├── Dockerfile
    │   └── nginx.conf
    └── piston/
        └── Dockerfile
Download .txt
Showing preview only (1,497K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (13975 symbols across 1217 files)

FILE: ci/release/update_doc_versions1.py
  function main (line 25) | def main(versions_file: str, new_version: str):

FILE: ci/scripts/copyright.py
  function is_file_empty (line 60) | def is_file_empty(f):
  function check_this_file (line 64) | def check_this_file(f):
  function get_copyright_years (line 79) | def get_copyright_years(line):
  function replace_current_year (line 89) | def replace_current_year(line, start, end):
  function insert_license (line 97) | def insert_license(f, this_year, first_line):
  function check_copyright (line 125) | def check_copyright(f,
  function _main (line 228) | def _main():

FILE: ci/scripts/gitlab/report_test_results.py
  class ReportMessages (line 34) | class ReportMessages(typing.NamedTuple):
  function get_testcase_name (line 41) | def get_testcase_name(testcase: ET.Element) -> str:
  function parse_junit (line 45) | def parse_junit(junit_file: str) -> dict[str, typing.Any]:
  function parse_coverage (line 85) | def parse_coverage(coverage_file: str) -> str:
  function get_error_string (line 92) | def get_error_string(num_errors: int, error_type: str) -> str:
  function text_to_block (line 99) | def text_to_block(text: str) -> dict:
  function add_text (line 103) | def add_text(text: str, blocks: list[dict], plain_text: list[str]) -> None:
  function chunk_items (line 111) | def chunk_items(items: list[typing.Any], chunk_size: int) -> list[list[t...
  function build_messages (line 115) | def build_messages(junit_data: dict[str, typing.Any], coverage_data: str...
  function parse_model_health (line 169) | def parse_model_health(json_path: str) -> dict[str, typing.Any]:
  function build_model_health_messages (line 175) | def build_model_health_messages(health_data: dict[str, typing.Any]) -> R...
  function main (line 242) | def main():

FILE: ci/scripts/gitutils.py
  function _run_cmd (line 32) | def _run_cmd(exe: str, *args: str):
  function _gh (line 62) | def _gh(*args):
  function _git (line 68) | def _git(*args):
  class GitWrapper (line 73) | class GitWrapper:
    method get_closest_tag (line 77) | def get_closest_tag():
    method get_repo_version (line 90) | def get_repo_version():
    method get_repo_owner_name (line 118) | def get_repo_owner_name():
    method get_repo_remote_name (line 124) | def get_repo_remote_name(repo_owner_and_name: str):
    method is_ref_valid (line 131) | def is_ref_valid(git_ref: str):
    method get_remote_branch (line 140) | def get_remote_branch(local_branch_ref: str, *, repo_owner_and_name: s...
    method get_target_remote_branch (line 162) | def get_target_remote_branch():
    method get_repo_dir (line 183) | def get_repo_dir():
    method get_current_branch (line 191) | def get_current_branch():
    method add_files (line 198) | def add_files(*files_to_add):
    method get_file_add_date (line 204) | def get_file_add_date(file_path):
    method get_uncommitted_files (line 210) | def get_uncommitted_files():
    method diff (line 228) | def diff(target_ref: str, base_ref: str, merge_base: bool = False, sta...
    method diff_index (line 246) | def diff_index(target_ref: str, merge_base: bool = False, staged: bool...
    method merge_base (line 263) | def merge_base(target_ref: str, base_ref: str = "HEAD"):
  class GithubWrapper (line 271) | class GithubWrapper:
    method has_cli (line 275) | def has_cli():
    method get_repo_owner_name (line 293) | def get_repo_owner_name():
    method get_pr_info (line 303) | def get_pr_info() -> dict | None:
    method is_pr (line 324) | def is_pr():
    method get_pr_number (line 330) | def get_pr_number():
    method get_pr_base_ref_name (line 341) | def get_pr_base_ref_name():
    method get_pr_target_remote_branch (line 352) | def get_pr_target_remote_branch():
  function _is_repo_relative (line 367) | def _is_repo_relative(f: str, git_root: str | None = None):
  function get_merge_target (line 378) | def get_merge_target():
  function determine_merge_commit (line 408) | def determine_merge_commit(current_branch: str = "HEAD"):
  function filter_files (line 434) | def filter_files(files: str | list[str], path_filter: Callable[[str], bo...
  function changed_files (line 469) | def changed_files(target_ref: str | None = None,
  function modified_files (line 511) | def modified_files(target_ref: str | None = None,
  function staged_files (line 551) | def staged_files(base_ref: str = "HEAD", *, path_filter: Callable[[str],...
  function all_files (line 574) | def all_files(*paths, base_ref: str = "HEAD", path_filter: Callable[[str...
  function add_files (line 600) | def add_files(*files_to_add):
  function get_file_add_date (line 612) | def get_file_add_date(filename: str):
  function _parse_args (line 630) | def _parse_args():
  function _main (line 638) | def _main():

FILE: ci/scripts/license_diff.py
  function main (line 40) | def main(base_branch: str) -> None:

FILE: ci/scripts/model_health_check.py
  function find_nim_models (line 60) | def find_nim_models(examples_dir: Path) -> tuple[dict[str, list[str]], d...
  function get_catalog_models (line 119) | def get_catalog_models(api_key: str) -> set[str]:
  function _nim_post (line 144) | def _nim_post(endpoint: str, payload: bytes, api_key: str) -> tuple[int,...
  function check_model (line 170) | def check_model(model: str, api_key: str) -> tuple[int, str]:
  function check_embedder (line 182) | def check_embedder(model: str, api_key: str) -> tuple[int, str]:
  function main (line 192) | def main() -> int:

FILE: ci/scripts/package_utils.py
  class Package (line 21) | class Package(typing.TypedDict):
  class UvLock (line 27) | class UvLock(typing.TypedDict):
  function package_variant_key (line 31) | def package_variant_key(pkg: Package) -> tuple[str, str]:
  function pypi_license (line 35) | def pypi_license(name: str, version: str | None = None) -> str:

FILE: ci/scripts/path_checks.py
  function list_broken_symlinks (line 319) | def list_broken_symlinks() -> list[str]:
  class PathInfo (line 335) | class PathInfo:
  function extract_paths_from_file (line 341) | def extract_paths_from_file(filename: str) -> list[PathInfo]:
  function check_files (line 417) | def check_files() -> list[tuple[str, PathInfo]]:
  function main (line 497) | def main():

FILE: ci/scripts/run_tests.py
  class TestFailure (line 38) | class TestFailure(Exception):
  function sh (line 42) | def sh(cmd: list[str], *, env: dict[str, str] | None = None) -> int:
  function slug (line 46) | def slug(path: Path) -> str:
  function discover_projects (line 51) | def discover_projects(max_depth: int = MAX_PROJECT_DEPTH, examples_only:...
  function resolve_project (line 72) | def resolve_project(project: str) -> Path:
  function make_env (line 102) | def make_env(project_dir: Path) -> dict[str, str]:
  function run_one (line 119) | def run_one(
  function main (line 211) | def main(junit_xml: str | None,

FILE: ci/scripts/sbom_list.py
  class SbomEntry (line 32) | class SbomEntry(typing.TypedDict):
  function process_uvlock (line 38) | def process_uvlock(uvlock: UvLock, output_path: Path) -> None:
  function main (line 73) | def main(uvlock_path: Path, output_path: Path) -> None:

FILE: conftest.py
  function project_dir_fixture (line 60) | def project_dir_fixture(root_repo_dir: Path) -> str:
  function test_data_dir_fixture (line 65) | def test_data_dir_fixture():
  function config_file_fixture (line 70) | def config_file_fixture(test_data_dir: str):
  function eval_config_file_fixture (line 75) | def eval_config_file_fixture() -> str:
  function simple_config_file_fixture (line 80) | def simple_config_file_fixture() -> str:
  function echo_config_file_fixture (line 85) | def echo_config_file_fixture(test_data_dir: str) -> str:
  function mock_aiohttp_session_fixture (line 90) | def mock_aiohttp_session_fixture():
  function set_test_api_keys_fixture (line 106) | def set_test_api_keys_fixture(restore_environ):
  function rapids_repo_names_fixture (line 112) | def rapids_repo_names_fixture() -> list[str]:
  function rapids_repo_urls_fixture (line 117) | def rapids_repo_urls_fixture(rapids_repo_names: list[str]) -> dict[str, ...
  function workflow_config_fixture (line 122) | def workflow_config_fixture():
  function tools_config_fixture (line 128) | def tools_config_fixture() -> dict[str, typing.Any]:
  function llms_config_fixture (line 143) | def llms_config_fixture() -> dict[str, typing.Any]:
  class StreamingOutputModel (line 147) | class StreamingOutputModel(BaseModel):
  class SingleOutputModel (line 151) | class SingleOutputModel(BaseModel):
  function test_workflow_fn_fixture (line 156) | def test_workflow_fn_fixture():
  function test_streaming_fn_fixture (line 165) | def test_streaming_fn_fixture():
  function register_test_workflow_fixture (line 174) | def register_test_workflow_fixture(test_workflow_fn) -> Callable[[], Cal...
  function reactive_stream_fixture (line 191) | def reactive_stream_fixture():
  function function_settings_fixture (line 214) | def function_settings_fixture():
  function pypi_registry_channel_fixture (line 228) | def pypi_registry_channel_fixture():
  function rest_registry_channel_fixture (line 247) | def rest_registry_channel_fixture():
  function local_registry_channel_fixture (line 267) | def local_registry_channel_fixture():
  function httpserver_listen_address (line 275) | def httpserver_listen_address():
  function mock_llm (line 281) | async def mock_llm():
  function mock_tool (line 351) | def mock_tool():
  function rag_user_inputs_fixture (line 381) | def rag_user_inputs_fixture() -> list[str]:
  function rag_generated_outputs_fixture (line 387) | def rag_generated_outputs_fixture() -> list[str]:
  function rag_intermediate_steps_fixture (line 393) | def rag_intermediate_steps_fixture(rag_user_inputs, rag_generated_output...
  function rag_intermediate_property_adaptor_fixture (line 473) | def rag_intermediate_property_adaptor_fixture(rag_intermediate_steps) ->...
  function dask_cluster_fixture (line 484) | def dask_cluster_fixture(fail_missing: bool) -> "LocalCluster":
  function dask_scheduler_address_fixture (line 508) | def dask_scheduler_address_fixture(dask_cluster: "LocalCluster") -> str:
  function dask_client_fixture (line 516) | def dask_client_fixture(dask_scheduler_address: str) -> Generator["DaskC...
  function db_engine_fixture (line 530) | def db_engine_fixture(fail_missing: bool, tmp_path: Path) -> Generator["...
  function setup_db_fixture (line 556) | async def setup_db_fixture(db_engine: "AsyncEngine"):
  function db_url_fixture (line 567) | def db_url_fixture(db_engine: "AsyncEngine") -> str:
  function fixture_set_nat_config_file_env_var (line 575) | def fixture_set_nat_config_file_env_var(restore_environ, echo_config_fil...
  function fixture_set_nat_dask_scheduler_env_var (line 585) | def fixture_set_nat_dask_scheduler_env_var(restore_environ, dask_schedul...
  function fixture_set_nat_job_store_db_url_env_var (line 595) | def fixture_set_nat_job_store_db_url_env_var(restore_environ, db_url: st...
  function register_empty_function_fixture (line 605) | def register_empty_function_fixture():
  function reset_global_type_converter_fixture (line 620) | def reset_global_type_converter_fixture():

FILE: docs/source/conf.py
  function _build_api_tree (line 46) | def _build_api_tree() -> Path:
  function _clean_inherited_docstring (line 519) | def _clean_inherited_docstring(docstring: str) -> str:
  function skip_pydantic_special_attrs (line 556) | def skip_pydantic_special_attrs(app: object,
  function clean_markdown_from_docstrings (line 574) | def clean_markdown_from_docstrings(app: object, docname: str, source: li...
  function setup (line 618) | def setup(sphinx):

FILE: examples/A2A/math_assistant_a2a/src/nat_math_assistant_a2a/register.py
  class LogicEvaluatorConfig (line 27) | class LogicEvaluatorConfig(FunctionGroupBaseConfig, name="logic_evaluato...
  function logic_evaluator (line 34) | async def logic_evaluator(_config: LogicEvaluatorConfig, _builder: Build...

FILE: examples/A2A/math_assistant_a2a/tests/test_math_assistant_a2a.py
  function nat_a2a_host_fixture (line 30) | def nat_a2a_host_fixture() -> str:
  function nat_a2a_port_fixture (line 35) | def nat_a2a_port_fixture() -> str:
  function nat_a2a_url_fixture (line 40) | def nat_a2a_url_fixture(nat_a2a_host: str, nat_a2a_port: str) -> str:
  function simple_calc_a2a_server_process_fixture (line 45) | async def simple_calc_a2a_server_process_fixture(nat_a2a_host: str, nat_...
  function simple_calc_a2a_server_avail_fixture (line 100) | async def simple_calc_a2a_server_avail_fixture(simple_calc_a2a_server_pr...
  function test_a2a_workflow (line 172) | async def test_a2a_workflow(root_repo_dir: Path, nat_a2a_url: str):

FILE: examples/HITL/por_to_jiratickets/src/nat_por_to_jiratickets/extract_por_tool.py
  function correct_json_format (line 95) | def correct_json_format(response):
  function process_input_text (line 115) | def process_input_text(input_text):
  class ExtractPORToolConfig (line 121) | class ExtractPORToolConfig(FunctionBaseConfig, name="extract_por_tool"):
  function extract_from_por_tool (line 127) | async def extract_from_por_tool(config: ExtractPORToolConfig, builder: B...
  class ShowTicketsToolConfig (line 182) | class ShowTicketsToolConfig(FunctionBaseConfig, name="show_jira_tickets"):
  function show_tickets_tool (line 187) | async def show_tickets_tool(config: ShowTicketsToolConfig, builder: Buil...

FILE: examples/HITL/por_to_jiratickets/src/nat_por_to_jiratickets/hitl_approval_tool.py
  class HITLApprovalFnConfig (line 32) | class HITLApprovalFnConfig(FunctionBaseConfig, name="hitl_approval_tool"):
    method validate_prompt (line 42) | def validate_prompt(cls, prompt: str) -> str:
  function hitl_approval_function (line 47) | async def hitl_approval_function(config: HITLApprovalFnConfig, builder: ...

FILE: examples/HITL/por_to_jiratickets/src/nat_por_to_jiratickets/jira_tickets_tool.py
  function get_epics_tool (line 34) | def get_epics_tool(root_path: str) -> str:
  class JiraTool (line 50) | class JiraTool:
    method __init__ (line 52) | def __init__(self, domain: str, project_key: str, ticket_type: str):
    method get_priority_name (line 60) | async def get_priority_name(self, priority: str):
    method create_epic (line 68) | async def create_epic(self, client: httpx.AsyncClient, ticket_data: di...
    method create_task (line 109) | async def create_task(self, client: httpx.AsyncClient, ticket_data: di...
    method create_bug (line 154) | async def create_bug(self, client: httpx.AsyncClient, ticket_data: dict):
    method create_feature (line 201) | async def create_feature(self, client: httpx.AsyncClient, ticket_data:...
  function process_input_text (line 249) | def process_input_text(input_text):
  class CreateJiraToolConfig (line 255) | class CreateJiraToolConfig(FunctionBaseConfig, name="create_jira_tickets...
  function create_jira_tickets_tool (line 265) | async def create_jira_tickets_tool(config: CreateJiraToolConfig, builder...
  class GetJiraToolConfig (line 325) | class GetJiraToolConfig(FunctionBaseConfig, name="get_jira_tickets_tool"):
  function get_jira_tickets_tool (line 332) | async def get_jira_tickets_tool(config: GetJiraToolConfig, builder: Buil...

FILE: examples/HITL/simple_calculator_hitl/src/nat_simple_calculator_hitl/retry_react_agent.py
  class RetryReactAgentConfig (line 36) | class RetryReactAgentConfig(FunctionBaseConfig, name="retry_react_agent"):
  function retry_react_agent (line 55) | async def retry_react_agent(config: RetryReactAgentConfig, builder: Buil...
  class TimeZonePromptConfig (line 230) | class TimeZonePromptConfig(FunctionBaseConfig, name="time_zone_prompt"):
  function time_zone_prompt (line 235) | async def time_zone_prompt(config: TimeZonePromptConfig, builder: Builder):

FILE: examples/HITL/simple_calculator_hitl/tests/test_simple_calculator_hitl.py
  function test_hitl_workflow (line 28) | def test_hitl_workflow(env_without_nat_log_level: dict[str, str], respon...

FILE: examples/MCP/service_account_auth_mcp/src/nat_service_account_auth_mcp/scripts/service_tokens.py
  function get_jira_service_token (line 28) | async def get_jira_service_token(**kwargs) -> tuple[str, str]:

FILE: examples/MCP/simple_calculator_fastmcp/tests/test_simple_calculator_fastmcp.py
  function nat_fastmcp_host_fixture (line 31) | def nat_fastmcp_host_fixture() -> str:
  function nat_fastmcp_port_fixture (line 36) | def nat_fastmcp_port_fixture() -> str:
  function nat_fastmcp_url_fixture (line 41) | def nat_fastmcp_url_fixture(nat_fastmcp_host: str, nat_fastmcp_port: str...
  function simple_calc_fastmcp_process_fixture (line 46) | async def simple_calc_fastmcp_process_fixture(
  function simple_calc_fastmcp_avail_fixture (line 87) | async def simple_calc_fastmcp_avail_fixture(simple_calc_fastmcp_process:...
  function test_fastmcp_workflow (line 120) | async def test_fastmcp_workflow(root_repo_dir: Path, nat_fastmcp_url: str):

FILE: examples/MCP/simple_calculator_fastmcp_protected/tests/test_simple_calculator_fastmcp_protected.py
  function nat_fastmcp_protected_host_fixture (line 31) | def nat_fastmcp_protected_host_fixture() -> str:
  function nat_fastmcp_protected_port_fixture (line 36) | def nat_fastmcp_protected_port_fixture() -> str:
  function fastmcp_protected_base_url_fixture (line 41) | def fastmcp_protected_base_url_fixture(
  function fastmcp_protected_process_fixture (line 49) | async def fastmcp_protected_process_fixture(
  function fastmcp_protected_ready_fixture (line 92) | async def fastmcp_protected_ready_fixture(
  function test_fastmcp_protected_requires_auth (line 115) | async def test_fastmcp_protected_requires_auth(fastmcp_protected_base_ur...

FILE: examples/MCP/simple_calculator_mcp/tests/test_simple_calculator_mcp.py
  function nat_mcp_host_fixture (line 26) | def nat_mcp_host_fixture() -> str:
  function nat_mcp_port_fixture (line 31) | def nat_mcp_port_fixture() -> str:
  function nat_mcp_url_fixture (line 36) | def nat_mcp_url_fixture(nat_mcp_host: str, nat_mcp_port: str) -> str:
  function simple_calc_mcp_process_fixture (line 41) | async def simple_calc_mcp_process_fixture(nat_mcp_host: str, nat_mcp_por...
  function simple_calc_mcp_avail_fixture (line 79) | async def simple_calc_mcp_avail_fixture(simple_calc_mcp_process: subproc...
  function test_mcp_workflow (line 111) | async def test_mcp_workflow(root_repo_dir: Path, nat_mcp_url: str):

FILE: examples/RAG/simple_rag/tests/test_simple_rag_e2e.py
  function _run_simple_rag_workflow (line 21) | async def _run_simple_rag_workflow(milvus_uri: str,
  function test_full_workflow (line 44) | async def test_full_workflow(milvus_uri: str, examples_dir: Path):
  function test_full_workflow_ttc (line 52) | async def test_full_workflow_ttc(milvus_uri: str, examples_dir: Path):
  function test_full_workflow_memory (line 60) | async def test_full_workflow_memory(milvus_uri: str, examples_dir: Path):
  function test_full_workflow_tools (line 68) | async def test_full_workflow_tools(milvus_uri: str, examples_dir: Path):
  function test_full_workflow_memory_tools (line 76) | async def test_full_workflow_memory_tools(milvus_uri: str, examples_dir:...

FILE: examples/advanced_agents/alert_triage_agent/src/nat_alert_triage_agent/categorizer.py
  class CategorizerToolConfig (line 31) | class CategorizerToolConfig(FunctionBaseConfig, name="categorizer"):
  function _extract_markdown_heading_level (line 37) | def _extract_markdown_heading_level(report: str) -> str:
  function categorizer_tool (line 45) | async def categorizer_tool(config: CategorizerToolConfig, builder: Build...

FILE: examples/advanced_agents/alert_triage_agent/src/nat_alert_triage_agent/classification_evaluator.py
  class ClassificationEvaluatorConfig (line 29) | class ClassificationEvaluatorConfig(EvaluatorBaseConfig, name="classific...
  function register_classification_evaluator (line 39) | async def register_classification_evaluator(config: ClassificationEvalua...
  class ClassificationEvaluator (line 54) | class ClassificationEvaluator(BaseEvaluator):
    method __init__ (line 56) | def __init__(
    method evaluate_item (line 63) | async def evaluate_item(self, item: EvalInputItem) -> EvalOutputItem:

FILE: examples/advanced_agents/alert_triage_agent/src/nat_alert_triage_agent/hardware_check_tool.py
  class HardwareCheckToolConfig (line 30) | class HardwareCheckToolConfig(FunctionBaseConfig, name="hardware_check"):
  function _get_ipmi_monitor_data (line 37) | def _get_ipmi_monitor_data(ip_address, username, password):
  function hardware_check_tool (line 69) | async def hardware_check_tool(config: HardwareCheckToolConfig, builder: ...

FILE: examples/advanced_agents/alert_triage_agent/src/nat_alert_triage_agent/host_performance_check_tool.py
  class HostPerformanceCheckToolConfig (line 29) | class HostPerformanceCheckToolConfig(FunctionBaseConfig, name="host_perf...
  function _run_ansible_playbook_for_host_performance_check (line 40) | async def _run_ansible_playbook_for_host_performance_check(config: HostP...
  function _parse_stdout_lines (line 87) | async def _parse_stdout_lines(config, builder, stdout_lines) -> str:
  function host_performance_check_tool (line 112) | async def host_performance_check_tool(config: HostPerformanceCheckToolCo...

FILE: examples/advanced_agents/alert_triage_agent/src/nat_alert_triage_agent/maintenance_check.py
  class MaintenanceCheckToolConfig (line 39) | class MaintenanceCheckToolConfig(FunctionBaseConfig, name="maintenance_c...
  function _load_maintenance_data (line 55) | def _load_maintenance_data(path: str) -> pd.DataFrame:
  function _parse_alert_data (line 100) | def _parse_alert_data(input_message: str) -> dict | None:
  function _get_active_maintenance (line 133) | def _get_active_maintenance(df: pd.DataFrame, host_id: str, alert_time: ...
  function _summarize_alert (line 174) | def _summarize_alert(llm, prompt_template, alert, maintenance_start_str,...
  function maintenance_check (line 199) | async def maintenance_check(config: MaintenanceCheckToolConfig, builder:...

FILE: examples/advanced_agents/alert_triage_agent/src/nat_alert_triage_agent/monitoring_process_check_tool.py
  class MonitoringProcessCheckToolConfig (line 29) | class MonitoringProcessCheckToolConfig(FunctionBaseConfig, name="monitor...
  function _run_ansible_playbook_for_monitor_process_check (line 38) | async def _run_ansible_playbook_for_monitor_process_check(ansible_host: ...
  function monitoring_process_check_tool (line 72) | async def monitoring_process_check_tool(config: MonitoringProcessCheckTo...

FILE: examples/advanced_agents/alert_triage_agent/src/nat_alert_triage_agent/network_connectivity_check_tool.py
  class NetworkConnectivityCheckToolConfig (line 31) | class NetworkConnectivityCheckToolConfig(FunctionBaseConfig, name="netwo...
  function _check_service_banner (line 40) | def _check_service_banner(host: str, port: int = 80, connect_timeout: fl...
  function network_connectivity_check_tool (line 69) | async def network_connectivity_check_tool(config: NetworkConnectivityChe...

FILE: examples/advanced_agents/alert_triage_agent/src/nat_alert_triage_agent/prompts.py
  class CategorizerPrompts (line 60) | class CategorizerPrompts:
  class MaintenanceCheckPrompts (line 85) | class MaintenanceCheckPrompts:
  class NetworkConnectivityCheckPrompts (line 107) | class NetworkConnectivityCheckPrompts:
  class MonitoringProcessCheckPrompts (line 131) | class MonitoringProcessCheckPrompts:
  class HostPerformanceCheckPrompts (line 150) | class HostPerformanceCheckPrompts:
  class HardwareCheckPrompts (line 185) | class HardwareCheckPrompts:
  class TelemetryMetricsAnalysisAgentPrompts (line 207) | class TelemetryMetricsAnalysisAgentPrompts:
  class TelemetryMetricsHostHeartbeatCheckPrompts (line 230) | class TelemetryMetricsHostHeartbeatCheckPrompts:
  class TelemetryMetricsHostPerformanceCheckPrompts (line 237) | class TelemetryMetricsHostPerformanceCheckPrompts:

FILE: examples/advanced_agents/alert_triage_agent/src/nat_alert_triage_agent/register.py
  class AlertTriageAgentWorkflowConfig (line 47) | class AlertTriageAgentWorkflowConfig(FunctionBaseConfig, OptimizableMixi...
  function alert_triage_agent_workflow (line 70) | async def alert_triage_agent_workflow(config: AlertTriageAgentWorkflowCo...

FILE: examples/advanced_agents/alert_triage_agent/src/nat_alert_triage_agent/run.py
  function apply_hsts (line 93) | def apply_hsts(response):
  function start_process (line 108) | def start_process(alert: dict, env_file: str) -> None:
  function receive_alert (line 137) | def receive_alert():
  function parse_args (line 166) | def parse_args():

FILE: examples/advanced_agents/alert_triage_agent/src/nat_alert_triage_agent/telemetry_metrics_analysis_agent.py
  class TelemetryMetricsAnalysisAgentConfig (line 29) | class TelemetryMetricsAnalysisAgentConfig(FunctionBaseConfig, name="tele...
  function telemetry_metrics_analysis_agent_tool (line 39) | async def telemetry_metrics_analysis_agent_tool(config: TelemetryMetrics...

FILE: examples/advanced_agents/alert_triage_agent/src/nat_alert_triage_agent/telemetry_metrics_host_heartbeat_check_tool.py
  class TelemetryMetricsHostHeartbeatCheckToolConfig (line 29) | class TelemetryMetricsHostHeartbeatCheckToolConfig(FunctionBaseConfig, n...
  function telemetry_metrics_host_heartbeat_check_tool (line 40) | async def telemetry_metrics_host_heartbeat_check_tool(config: TelemetryM...

FILE: examples/advanced_agents/alert_triage_agent/src/nat_alert_triage_agent/telemetry_metrics_host_performance_check_tool.py
  class TelemetryMetricsHostPerformanceCheckToolConfig (line 35) | class TelemetryMetricsHostPerformanceCheckToolConfig(FunctionBaseConfig,
  function _timeseries_stats (line 48) | def _timeseries_stats(ts):
  function _get_llm_analysis_input (line 77) | def _get_llm_analysis_input(timestamp_value_list):
  function telemetry_metrics_host_performance_check_tool (line 120) | async def telemetry_metrics_host_performance_check_tool(config: Telemetr...

FILE: examples/advanced_agents/alert_triage_agent/src/nat_alert_triage_agent/utils.py
  function _get_llm (line 38) | async def _get_llm(builder, llm_name, wrapper_type):
  function llm_ainvoke (line 56) | async def llm_ainvoke(config, builder, user_prompt, system_prompt=None) ...
  function log_header (line 75) | def log_header(log_str: str, dash_length: int = 100, level: int = loggin...
  function log_footer (line 83) | def log_footer(dash_length: int = 100, level: int = logging.DEBUG):
  function preload_offline_data (line 89) | def preload_offline_data(offline_data_path: str | None, benign_fallback_...
  function get_offline_data (line 111) | def get_offline_data() -> pd.DataFrame:
  function _get_static_data (line 118) | def _get_static_data():
  function load_column_or_static (line 125) | def load_column_or_static(df, host_id, column):
  function run_ansible_playbook (line 172) | async def run_ansible_playbook(playbook: list,

FILE: examples/advanced_agents/alert_triage_agent/tests/test_alert_triage_agent_workflow.py
  function test_full_workflow (line 25) | async def test_full_workflow(root_repo_dir: Path):

FILE: examples/advanced_agents/alert_triage_agent/tests/test_categorizer.py
  function test_extract_markdown_heading_level (line 34) | def test_extract_markdown_heading_level(test_input, expected):

FILE: examples/advanced_agents/alert_triage_agent/tests/test_hardware_check_tool.py
  function ipmi_args (line 27) | def ipmi_args():
  function expected_cmd (line 32) | def expected_cmd(ipmi_args):
  function mock_run (line 48) | def mock_run():
  function test_get_ipmi_monitor_data (line 66) | def test_get_ipmi_monitor_data(mock_run, ipmi_args, expected_cmd, stdout...

FILE: examples/advanced_agents/alert_triage_agent/tests/test_host_performance_check_tool.py
  function test_parse_stdout_lines_success (line 111) | async def test_parse_stdout_lines_success():
  function test_parse_stdout_lines_llm_error (line 142) | async def test_parse_stdout_lines_llm_error():

FILE: examples/advanced_agents/alert_triage_agent/tests/test_maintenance_check.py
  function test_load_maintenance_data (line 40) | def test_load_maintenance_data(root_repo_dir: Path):
  function test_parse_alert_data (line 115) | def test_parse_alert_data(input_msg, expected):
  function test_get_active_maintenance (line 120) | def test_get_active_maintenance():
  function test_maintenance_check_tool (line 175) | async def test_maintenance_check_tool(tmp_path: Path):

FILE: examples/advanced_agents/alert_triage_agent/tests/test_monitoring_process_check_tool.py
  function test_run_ansible_playbook_for_monitor_process_check (line 23) | async def test_run_ansible_playbook_for_monitor_process_check():

FILE: examples/advanced_agents/alert_triage_agent/tests/test_network_connectivity_check_tool.py
  function mock_sock (line 25) | def mock_sock():
  function test_successful_banner_read (line 32) | def test_successful_banner_read(mock_create_conn, mock_sock):
  function test_error_conditions (line 58) | def test_error_conditions(mock_create_conn, side_effect, port, conn_to, ...
  function test_reading_until_eof_without_banner (line 72) | def test_reading_until_eof_without_banner(mock_create_conn, mock_sock):

FILE: examples/advanced_agents/alert_triage_agent/tests/test_run.py
  function client (line 25) | def client():
  function reset_global_state (line 33) | def reset_global_state():
  function test_hsts_header (line 39) | def test_hsts_header(client):
  function test_receive_single_alert (line 64) | def test_receive_single_alert(client, alert):
  function test_receive_multiple_alerts (line 76) | def test_receive_multiple_alerts(client):
  function test_invalid_json (line 116) | def test_invalid_json(client, invalid_data, expected_error):
  function test_parse_args (line 139) | def test_parse_args(args, expected):

FILE: examples/advanced_agents/alert_triage_agent/tests/test_telemetry_metrics_host_heartbeat_check_tool.py
  function test_telemetry_metrics_host_heartbeat_check_tool (line 33) | async def test_telemetry_metrics_host_heartbeat_check_tool():

FILE: examples/advanced_agents/alert_triage_agent/tests/test_telemetry_metrics_host_performance_check_tool.py
  function test_telemetry_metrics_host_performance_check_tool (line 37) | async def test_telemetry_metrics_host_performance_check_tool():
  function test_timeseries_stats (line 158) | def test_timeseries_stats():
  function test_get_llm_analysis_input (line 194) | def test_get_llm_analysis_input():

FILE: examples/advanced_agents/alert_triage_agent/tests/test_utils.py
  function test_get_llm (line 36) | async def test_get_llm():
  function test_preload_offline_data (line 88) | def test_preload_offline_data(root_repo_dir: Path):
  function test_load_column_or_static (line 128) | def test_load_column_or_static():
  function _mock_ansible_runner (line 186) | def _mock_ansible_runner(status="successful", rc=0, events=None, stdout=...
  function test_run_ansible_playbook_various (line 253) | async def test_run_ansible_playbook_various(status, rc, events, stdout, ...

FILE: examples/agents/tests/conftest.py
  function fixture_agents_dir (line 37) | def fixture_agents_dir(examples_dir: Path) -> Path:
  function fixture_question (line 42) | def fixture_question() -> str:
  function fixture_answer (line 47) | def fixture_answer() -> str:
  function fixture_rewoo_data (line 52) | def fixture_rewoo_data(agents_dir: Path) -> list[dict]:
  function fixture_rewoo_session_manager (line 60) | async def fixture_rewoo_session_manager(agents_dir: Path):
  function _build_nat_client (line 66) | async def _build_nat_client(config_path: Path):
  function fixture_rewoo_nat_client (line 81) | async def fixture_rewoo_nat_client(agents_dir: Path):
  function fixture_tool_calling_responses_api_nat_client (line 89) | async def fixture_tool_calling_responses_api_nat_client(agents_dir: Path):
  function fixture_agent_session_manager (line 97) | async def fixture_agent_session_manager(request: pytest.FixtureRequest, ...
  function fixture_agent_nat_client (line 104) | async def fixture_agent_nat_client(request: pytest.FixtureRequest, agent...

FILE: examples/agents/tests/test_agents.py
  function _extract_serve_response_text (line 24) | def _extract_serve_response_text(response_json: dict) -> str:
  function _assert_expected_answer (line 38) | def _assert_expected_answer(result: str, expected_answer: str) -> None:
  class TestReWOONatRun (line 51) | class TestReWOONatRun:
    method test_question (line 54) | async def test_question(self, rewoo_session_manager, rewoo_data: list[...
  class TestReWOONatServe (line 64) | class TestReWOONatServe:
    method test_question (line 67) | async def test_question(self, rewoo_nat_client, rewoo_data: list[dict]...
  function test_tool_calling_responses_api (line 85) | async def test_tool_calling_responses_api(agents_dir: Path, question: st...
  function test_nat_run_tool_calling_responses_api (line 93) | async def test_nat_run_tool_calling_responses_api(tool_calling_responses...
  class TestAgentNatRun (line 108) | class TestAgentNatRun:
    method test_question (line 110) | async def test_question(self, agent_session_manager, question: str, an...
  class TestAgentNatServe (line 120) | class TestAgentNatServe:
    method test_question (line 122) | async def test_question(self, agent_nat_client, question: str, answer:...
  function test_react_agent_full_workflow (line 133) | async def test_react_agent_full_workflow(examples_dir: Path):
  function test_react_agent_full_workflow_validate_re (line 140) | async def test_react_agent_full_workflow_validate_re(examples_dir: Path):

FILE: examples/control_flow/hybrid_control_flow/src/nat_hybrid_control_flow/register.py
  class MockInputValidatorFunctionConfig (line 27) | class MockInputValidatorFunctionConfig(FunctionBaseConfig, name="mock_in...
  function mock_input_validator_function (line 32) | async def mock_input_validator_function(config: MockInputValidatorFuncti...
  class MockUppercaseConverterFunctionConfig (line 60) | class MockUppercaseConverterFunctionConfig(FunctionBaseConfig, name="moc...
  function mock_uppercase_converter_function (line 65) | async def mock_uppercase_converter_function(config: MockUppercaseConvert...
  class MockLowercaseConverterFunctionConfig (line 87) | class MockLowercaseConverterFunctionConfig(FunctionBaseConfig, name="moc...
  function mock_lowercase_converter_function (line 92) | async def mock_lowercase_converter_function(config: MockLowercaseConvert...
  class MockResultFormatterFunctionConfig (line 114) | class MockResultFormatterFunctionConfig(FunctionBaseConfig, name="mock_r...
  function mock_result_formatter_function (line 119) | async def mock_result_formatter_function(config: MockResultFormatterFunc...

FILE: examples/control_flow/hybrid_control_flow/tests/test_hybrid_control_flow.py
  function test_full_workflow (line 38) | async def test_full_workflow(question: str, expected_answer: str) -> None:

FILE: examples/control_flow/parallel_executor/tests/test_parallel_executor_example.py
  function test_parallel_executor_workflow (line 42) | async def test_parallel_executor_workflow(question: str, expected_elemen...

FILE: examples/control_flow/router_agent/src/nat_router_agent/register.py
  class MockFruitAdvisorFunctionConfig (line 27) | class MockFruitAdvisorFunctionConfig(FunctionBaseConfig, name="mock_frui...
  function mock_fruit_advisor_function (line 32) | async def mock_fruit_advisor_function(config: MockFruitAdvisorFunctionCo...
  class MockCityAdvisorFunctionConfig (line 61) | class MockCityAdvisorFunctionConfig(FunctionBaseConfig, name="mock_city_...
  function mock_city_advisor_function (line 66) | async def mock_city_advisor_function(config: MockCityAdvisorFunctionConf...
  class MockLiteratureAdvisorFunctionConfig (line 99) | class MockLiteratureAdvisorFunctionConfig(FunctionBaseConfig, name="mock...
  function mock_literature_advisor_function (line 104) | async def mock_literature_advisor_function(config: MockLiteratureAdvisor...

FILE: examples/control_flow/router_agent/tests/test_control_flow_example_router_agent.py
  function test_full_workflow (line 31) | async def test_full_workflow(question: str, expected_answer: str) -> None:

FILE: examples/control_flow/sequential_executor/src/nat_sequential_executor/register.py
  class TextProcessorFunctionConfig (line 29) | class TextProcessorFunctionConfig(FunctionBaseConfig, name="text_process...
  function text_processor_function (line 35) | async def text_processor_function(config: TextProcessorFunctionConfig, b...
  class DataAnalyzerFunctionConfig (line 83) | class DataAnalyzerFunctionConfig(FunctionBaseConfig, name="data_analyzer"):
  function data_analyzer_function (line 89) | async def data_analyzer_function(config: DataAnalyzerFunctionConfig, bui...
  class ReportGeneratorFunctionConfig (line 166) | class ReportGeneratorFunctionConfig(FunctionBaseConfig, name="report_gen...
  function report_generator_function (line 172) | async def report_generator_function(config: ReportGeneratorFunctionConfi...

FILE: examples/control_flow/sequential_executor/tests/test_example_sequential_executor.py
  function test_full_workflow (line 33) | async def test_full_workflow(input_text: str, expected_elements: list) -...

FILE: examples/custom_functions/automated_description_generation/src/nat_automated_description_generation/register.py
  class AutomatedDescriptionMilvusWorkflow (line 34) | class AutomatedDescriptionMilvusWorkflow(FunctionBaseConfig, name="autom...
  function automated_description_milvus_workflow (line 54) | async def automated_description_milvus_workflow(workflow_config: Automat...

FILE: examples/custom_functions/automated_description_generation/src/nat_automated_description_generation/utils/description_generation.py
  function generate_description (line 27) | async def generate_description(collection_name: str, top_k, field_name, ...

FILE: examples/custom_functions/automated_description_generation/src/nat_automated_description_generation/utils/workflow_utils.py
  class OverallState (line 27) | class OverallState(TypedDict):
  class BatchState (line 36) | class BatchState(TypedDict):
  class SummarizationWorkflow (line 40) | class SummarizationWorkflow:
    method __init__ (line 42) | def __init__(
    method get_num_tokens_for_strings (line 58) | def get_num_tokens_for_strings(self, contents: list[str]) -> int:
    method create_direct_summary (line 61) | async def create_direct_summary(self, state: OverallState) -> dict[str...
    method create_batches (line 67) | def create_batches(self, state: OverallState) -> dict[str, Any]:
    method create_batch_summary (line 78) | async def create_batch_summary(self, state: BatchState) -> dict[str, A...
    method collect_batch_summaries (line 84) | def collect_batch_summaries(self, state: OverallState) -> dict[str, Any]:
    method _reduce_step (line 87) | async def _reduce_step(self, input_prompt: dict) -> str:
    method merge_local_summaries (line 92) | async def merge_local_summaries(self, state: OverallState) -> dict[str...
    method should_collapse (line 121) | def should_collapse(self, state: OverallState) -> str:
    method check_bypass (line 128) | def check_bypass(self, state: OverallState) -> str:
    method create_full_summary (line 133) | async def create_full_summary(self, state: OverallState) -> dict[str, ...
    method map_batch_summaries (line 138) | async def map_batch_summaries(self, state: OverallState):

FILE: examples/custom_functions/automated_description_generation/tests/test_auto_desc_generation.py
  function test_full_workflow (line 22) | async def test_full_workflow(milvus_uri: str) -> None:

FILE: examples/custom_functions/plot_charts/src/nat_plot_charts/plot_chat.py
  function load_data_from_file (line 32) | def load_data_from_file(file_path: str) -> dict[str, Any]:
  function create_line_plot (line 60) | def create_line_plot(data: dict[str, Any], output_path: str, figure_size...
  function create_bar_plot (line 85) | def create_bar_plot(data: dict[str, Any], output_path: str, figure_size:...
  function create_scatter_plot (line 121) | def create_scatter_plot(data: dict[str, Any], output_path: str, figure_s...
  function determine_chart_type (line 153) | def determine_chart_type(user_request: str, available_types: list[str]) ...
  function generate_chart_description (line 172) | async def generate_chart_description(llm: BaseChatModel, data: dict[str,...

FILE: examples/custom_functions/plot_charts/src/nat_plot_charts/register.py
  class PlotChartsWorkflowConfig (line 31) | class PlotChartsWorkflowConfig(FunctionBaseConfig, name="plot_charts"):
  function plot_charts_function (line 43) | async def plot_charts_function(config: PlotChartsWorkflowConfig, builder...

FILE: examples/custom_functions/plot_charts/tests/test_plot_charts_workflow.py
  function test_full_workflow (line 24) | async def test_full_workflow(tmp_path: Path):

FILE: examples/documentation_guides/tests/conftest.py
  function doc_guides_dir_fixture (line 22) | def doc_guides_dir_fixture() -> Path:
  function workflows_dir_fixture (line 28) | def workflows_dir_fixture(doc_guides_dir: Path) -> Path:

FILE: examples/documentation_guides/tests/test_custom_workflow.py
  function custom_workflow_dir_fixture (line 27) | def custom_workflow_dir_fixture(workflows_dir: Path) -> Path:
  function question_fixture (line 32) | def question_fixture() -> str:
  function answer_fixture (line 37) | def answer_fixture() -> str:
  function test_custom_full_workflow (line 45) | async def test_custom_full_workflow(custom_workflow_dir: Path, question:...
  function test_search_full_workflow (line 53) | async def test_search_full_workflow(custom_workflow_dir: Path, question:...

FILE: examples/documentation_guides/tests/test_text_file_ingest.py
  function text_file_ingest_dir_fixture (line 30) | def text_file_ingest_dir_fixture(workflows_dir: Path) -> Path:
  function src_dir_fixture (line 37) | def src_dir_fixture(text_file_ingest_dir: Path) -> Path:
  function add_src_dir_to_path_fixture (line 45) | def add_src_dir_to_path_fixture(src_dir: Path) -> Generator[str]:
  function test_text_file_ingest_full_workflow (line 62) | async def test_text_file_ingest_full_workflow():

FILE: examples/documentation_guides/workflows/text_file_ingest/src/text_file_ingest/text_file_ingest_function.py
  class TextFileIngestFunctionConfig (line 29) | class TextFileIngestFunctionConfig(FunctionBaseConfig, name="text_file_i...
  function text_file_ingest_tool (line 37) | async def text_file_ingest_tool(config: TextFileIngestFunctionConfig, bu...

FILE: examples/dynamo_integration/latency_sensitivity_demo/src/latency_sensitivity_demo/compare_sensitivity_perf.py
  function _collect_sensitivity_map (line 70) | def _collect_sensitivity_map(node: PredictionTrieNode, path: str = "") -...
  function _parse_csv (line 89) | def _parse_csv(csv_path: Path) -> list[dict]:
  function _fmt_ms (line 145) | def _fmt_ms(value: float) -> str:
  function _fmt_tps (line 150) | def _fmt_tps(value: float) -> str:
  function _fmt_mspt (line 155) | def _fmt_mspt(value: float) -> str:
  function _pct_change (line 160) | def _pct_change(baseline: float, current: float) -> str:
  function _pct_change_higher_better (line 172) | def _pct_change_higher_better(baseline: float, current: float) -> str:
  function _group_by_fn (line 184) | def _group_by_fn(calls: list[dict]) -> dict[str, list[dict]]:
  function _percentile (line 192) | def _percentile(data: list[float], pct: int) -> float:
  function _sensitivity_str (line 204) | def _sensitivity_str(score: int, width: int = 14) -> str:
  function print_report (line 216) | def print_report(
  function _print_fn_header (line 266) | def _print_fn_header() -> str:
  function _print_single_run_table (line 272) | def _print_single_run_table(
  function _print_multi_run_table (line 294) | def _print_multi_run_table(
  function _print_fn_row (line 330) | def _print_fn_row(fn: str, sensitivity: int, fn_calls: list[dict], delta...
  function _print_priority_summary (line 350) | def _print_priority_summary(enriched_datasets: list[tuple[str, list[dict...
  function _print_priority_ratio_comparison (line 382) | def _print_priority_ratio_comparison(enriched_datasets: list[tuple[str, ...
  function main (line 446) | def main() -> None:

FILE: examples/dynamo_integration/latency_sensitivity_demo/src/latency_sensitivity_demo/sensitivity_report.py
  function _sensitivity_str (line 54) | def _sensitivity_str(score: int | None, width: int = 16) -> str:
  function _percentile (line 65) | def _percentile(data: list[float], pct: int) -> float:
  function _fmt_ms (line 77) | def _fmt_ms(seconds: float) -> str:
  function parse_latency_from_csv (line 86) | def parse_latency_from_csv(csv_path: Path) -> dict[str, list[dict]]:
  function _collect_rows (line 130) | def _collect_rows(node: PredictionTrieNode, path: str, rows: list[dict])...
  function print_report (line 168) | def print_report(
  function main (line 250) | def main() -> None:

FILE: examples/dynamo_integration/latency_sensitivity_demo/src/latency_sensitivity_demo/workflow.py
  class ClassifyConfig (line 60) | class ClassifyConfig(FunctionBaseConfig, name="classify_query"):
  function classify_query_function (line 65) | async def classify_query_function(config: ClassifyConfig, builder: Build...
  class ResearchContextConfig (line 89) | class ResearchContextConfig(FunctionBaseConfig, name="research_context"):
  function research_context_function (line 94) | async def research_context_function(config: ResearchContextConfig, build...
  class LookupPolicyConfig (line 129) | class LookupPolicyConfig(FunctionBaseConfig, name="lookup_policy"):
  function lookup_policy_function (line 134) | async def lookup_policy_function(config: LookupPolicyConfig, builder: Bu...
  class CheckComplianceConfig (line 171) | class CheckComplianceConfig(FunctionBaseConfig, name="check_compliance"):
  function check_compliance_function (line 176) | async def check_compliance_function(config: CheckComplianceConfig, build...
  class AnalyzeSentimentConfig (line 215) | class AnalyzeSentimentConfig(FunctionBaseConfig, name="analyze_sentiment"):
  function analyze_sentiment_function (line 220) | async def analyze_sentiment_function(config: AnalyzeSentimentConfig, bui...
  class DraftResponseConfig (line 264) | class DraftResponseConfig(FunctionBaseConfig, name="draft_response"):
  function draft_response_function (line 269) | async def draft_response_function(config: DraftResponseConfig, builder: ...
  class ReviewConfig (line 309) | class ReviewConfig(FunctionBaseConfig, name="review_response"):
  function review_response_function (line 314) | async def review_response_function(config: ReviewConfig, builder: Builder):
  class SupportState (line 344) | class SupportState(TypedDict):
  class LatencySensitivityDemoConfig (line 357) | class LatencySensitivityDemoConfig(FunctionBaseConfig, name="latency_sen...
  function latency_sensitivity_demo_function (line 373) | async def latency_sensitivity_demo_function(config: LatencySensitivityDe...

FILE: examples/dynamo_integration/latency_sensitivity_demo/tests/test_workflow.py
  class TestConfigFiles (line 24) | class TestConfigFiles:
    method test_config_profile_exists (line 27) | def test_config_profile_exists(self):
    method test_config_with_trie_exists (line 30) | def test_config_with_trie_exists(self):
    method test_config_profile_has_prediction_trie (line 33) | def test_config_profile_has_prediction_trie(self):
    method test_config_profile_has_sensitivity_weights (line 40) | def test_config_profile_has_sensitivity_weights(self):
    method test_config_declares_sub_functions (line 49) | def test_config_declares_sub_functions(self):
    method test_config_workflow_references_sub_functions (line 68) | def test_config_workflow_references_sub_functions(self):
  class TestDataset (line 82) | class TestDataset:
    method test_dataset_exists (line 85) | def test_dataset_exists(self):
    method test_dataset_has_entries (line 90) | def test_dataset_has_entries(self):
  class TestWorkflowRegistration (line 103) | class TestWorkflowRegistration:
    method test_module_imports (line 106) | def test_module_imports(self):
    method test_orchestrator_config_exists (line 110) | def test_orchestrator_config_exists(self):
    method test_orchestrator_function_exists (line 114) | def test_orchestrator_function_exists(self):
    method test_sub_function_configs_exist (line 118) | def test_sub_function_configs_exist(self):
    method test_sub_function_registrations_exist (line 134) | def test_sub_function_registrations_exist(self):
    method test_orchestrator_has_function_refs (line 150) | def test_orchestrator_has_function_refs(self):
  class TestSensitivityReport (line 162) | class TestSensitivityReport:
    method test_report_module_imports (line 165) | def test_report_module_imports(self):
    method test_print_report_with_empty_trie (line 169) | def test_print_report_with_empty_trie(self, capsys):
    method test_print_report_with_sample_trie (line 179) | def test_print_report_with_sample_trie(self, capsys):

FILE: examples/dynamo_integration/react_benchmark_agent/src/react_benchmark_agent/banking_tools.py
  class BankingToolsGroupConfig (line 40) | class BankingToolsGroupConfig(FunctionGroupBaseConfig, name="banking_too...
  function banking_tools_group_function (line 60) | async def banking_tools_group_function(config: BankingToolsGroupConfig, ...

FILE: examples/dynamo_integration/react_benchmark_agent/src/react_benchmark_agent/evaluators/action_completion_evaluator.py
  class ActionCompletionEvaluatorConfig (line 40) | class ActionCompletionEvaluatorConfig(EvaluatorBaseConfig, name="action_...
  function action_completion_evaluator_function (line 54) | async def action_completion_evaluator_function(config: ActionCompletionE...

FILE: examples/dynamo_integration/react_benchmark_agent/src/react_benchmark_agent/evaluators/tsq_evaluator.py
  class TSQEvaluatorConfig (line 43) | class TSQEvaluatorConfig(EvaluatorBaseConfig, name="tsq_evaluator"):
  function tsq_evaluator_function (line 65) | async def tsq_evaluator_function(config: TSQEvaluatorConfig, builder: Ev...

FILE: examples/dynamo_integration/react_benchmark_agent/src/react_benchmark_agent/react_benchmark_agent.py
  class ReactBenchmarkAgentFunctionConfig (line 29) | class ReactBenchmarkAgentFunctionConfig(FunctionBaseConfig, name="react_...
  function react_benchmark_agent_function (line 50) | async def react_benchmark_agent_function(config: ReactBenchmarkAgentFunc...

FILE: examples/dynamo_integration/react_benchmark_agent/src/react_benchmark_agent/self_evaluating_agent_with_feedback.py
  function _get_scenario_id_for_question (line 54) | def _get_scenario_id_for_question(question: str) -> str:
  class SelfEvaluatingAgentConfig (line 64) | class SelfEvaluatingAgentConfig(FunctionBaseConfig, name="self_evaluatin...
  class SelfEvaluatingAgentWithFeedbackConfig (line 142) | class SelfEvaluatingAgentWithFeedbackConfig(FunctionBaseConfig, name="se...
  function self_evaluating_agent_with_feedback_function (line 213) | async def self_evaluating_agent_with_feedback_function(config: SelfEvalu...
  function self_evaluating_agent_function (line 428) | async def self_evaluating_agent_function(config: SelfEvaluatingAgentConf...
  function _evaluate_tool_sequence (line 622) | async def _evaluate_tool_sequence(

FILE: examples/dynamo_integration/react_benchmark_agent/src/react_benchmark_agent/tool_intent_stubs.py
  function set_current_scenario_id (line 44) | def set_current_scenario_id(scenario_id: str) -> contextvars.Token:
  function get_current_scenario_id (line 66) | def get_current_scenario_id() -> str:
  class ToolIntentBuffer (line 76) | class ToolIntentBuffer:
    method __init__ (line 88) | def __init__(self) -> None:
    method record (line 92) | def record(self, tool_name: str, parameters: dict[str, Any]) -> None:
    method get_intents (line 111) | def get_intents(self) -> list[dict[str, Any]]:
    method clear (line 120) | def clear(self) -> None:
  function get_global_intents (line 129) | def get_global_intents(scenario_id: str = "current") -> list[dict[str, A...
  function clear_global_intents (line 144) | def clear_global_intents(scenario_id: str = "current") -> None:
  class PermissiveToolInput (line 156) | class PermissiveToolInput(BaseModel):
    method parse_string_to_dict (line 167) | def parse_string_to_dict(cls, v: Any) -> dict[str, Any]:
  function create_tool_stub_function (line 184) | def create_tool_stub_function(tool_schema: dict[str, Any],
  function _generate_mock_response (line 242) | def _generate_mock_response(response_schema: dict[str, Any]) -> dict[str...

FILE: examples/dynamo_integration/react_benchmark_agent/tests/test_self_evaluation.py
  class TestSelfEvaluatingAgentConfig (line 33) | class TestSelfEvaluatingAgentConfig:
    method test_config_file_exists (line 36) | def test_config_file_exists(self):
    method test_profile_config_file_exists (line 41) | def test_profile_config_file_exists(self):
    method test_config_contains_self_evaluating_agent (line 46) | def test_config_contains_self_evaluating_agent(self):
    method test_config_has_required_parameters (line 58) | def test_config_has_required_parameters(self):
    method test_config_max_retries_in_range (line 72) | def test_config_max_retries_in_range(self):
    method test_config_confidence_threshold_in_range (line 83) | def test_config_confidence_threshold_in_range(self):
  class TestSelfEvaluatingAgentModule (line 95) | class TestSelfEvaluatingAgentModule:
    method test_module_imports (line 98) | def test_module_imports(self):
    method test_config_class_exists (line 104) | def test_config_class_exists(self):
  class TestEvaluationResponseParsing (line 111) | class TestEvaluationResponseParsing:
    method parse_evaluation_response (line 115) | def parse_evaluation_response(response_text: str) -> dict:
    method test_parse_valid_json (line 141) | def test_parse_valid_json(self):
    method test_parse_insufficient_response (line 158) | def test_parse_insufficient_response(self):
    method test_parse_malformed_json (line 174) | def test_parse_malformed_json(self):
    method test_parse_partial_json (line 181) | def test_parse_partial_json(self):
  class TestDecisionLogic (line 195) | class TestDecisionLogic:
    method should_accept (line 199) | def should_accept(is_sufficient: bool, confidence: float, threshold: f...
    method should_retry (line 207) | def should_retry(is_sufficient: bool, confidence: float, threshold: fl...
    method test_accept_sufficient_and_confident (line 215) | def test_accept_sufficient_and_confident(self):
    method test_reject_sufficient_but_not_confident (line 219) | def test_reject_sufficient_but_not_confident(self):
    method test_reject_not_sufficient (line 223) | def test_reject_not_sufficient(self):
    method test_accept_at_exact_threshold (line 227) | def test_accept_at_exact_threshold(self):
    method test_retry_when_not_sufficient (line 231) | def test_retry_when_not_sufficient(self):
    method test_retry_when_not_confident (line 235) | def test_retry_when_not_confident(self):
    method test_no_retry_when_accepted (line 239) | def test_no_retry_when_accepted(self):
    method test_no_retry_when_exhausted (line 243) | def test_no_retry_when_exhausted(self):
  class TestFeedbackGeneration (line 248) | class TestFeedbackGeneration:
    method generate_feedback (line 252) | def generate_feedback(
    method test_generate_basic_feedback (line 287) | def test_generate_basic_feedback(self):
    method test_generate_feedback_empty_missing_steps (line 298) | def test_generate_feedback_empty_missing_steps(self):
    method test_generate_feedback_multiple_missing_steps (line 303) | def test_generate_feedback_multiple_missing_steps(self):
    method test_generate_feedback_custom_template (line 314) | def test_generate_feedback_custom_template(self):
  class TestSelfEvaluatingAgentWithNIM (line 329) | class TestSelfEvaluatingAgentWithNIM:
    method fixture_nim_self_eval_config (line 338) | def fixture_nim_self_eval_config(self, nvidia_api_key, tmp_path):
    method test_self_evaluation_workflow_loads_with_nim (line 374) | async def test_self_evaluation_workflow_loads_with_nim(self, nim_self_...
    method test_self_evaluation_rethinking_with_nim (line 385) | async def test_self_evaluation_rethinking_with_nim(self, nim_self_eval...
    method test_self_evaluation_complex_question_with_nim (line 411) | async def test_self_evaluation_complex_question_with_nim(self, nim_sel...

FILE: examples/dynamo_integration/react_benchmark_agent/tests/test_tool_intent_buffer.py
  function clean_global_registry (line 36) | def clean_global_registry():
  class TestToolIntentBuffer (line 46) | class TestToolIntentBuffer:
    method test_init_creates_empty_buffer (line 49) | def test_init_creates_empty_buffer(self):
    method test_record_single_intent (line 55) | def test_record_single_intent(self):
    method test_record_multiple_intents (line 65) | def test_record_multiple_intents(self):
    method test_get_intents_returns_copy (line 76) | def test_get_intents_returns_copy(self):
    method test_clear_empties_local_buffer (line 87) | def test_clear_empties_local_buffer(self):
  class TestScenarioIdContextVar (line 99) | class TestScenarioIdContextVar:
    method test_default_scenario_id (line 102) | def test_default_scenario_id(self):
    method test_set_and_get_scenario_id (line 106) | def test_set_and_get_scenario_id(self):
    method test_set_scenario_id_returns_token (line 111) | def test_set_scenario_id_returns_token(self):
    method test_set_scenario_id_initializes_registry (line 116) | def test_set_scenario_id_initializes_registry(self):
  class TestGlobalRegistryIntegration (line 125) | class TestGlobalRegistryIntegration:
    method test_record_stores_in_global_registry (line 128) | def test_record_stores_in_global_registry(self):
    method test_clear_clears_global_registry_for_current_scenario (line 141) | def test_clear_clears_global_registry_for_current_scenario(self):
    method test_record_and_clear_use_same_scenario_id (line 165) | def test_record_and_clear_use_same_scenario_id(self):
    method test_multiple_scenarios_isolation (line 190) | def test_multiple_scenarios_isolation(self):
  class TestGlobalIntentFunctions (line 213) | class TestGlobalIntentFunctions:
    method test_get_global_intents_returns_copy (line 216) | def test_get_global_intents_returns_copy(self):
    method test_get_global_intents_missing_scenario (line 230) | def test_get_global_intents_missing_scenario(self):
    method test_clear_global_intents (line 235) | def test_clear_global_intents(self):
    method test_clear_global_intents_nonexistent_scenario (line 249) | def test_clear_global_intents_nonexistent_scenario(self):
  class TestPermissiveToolInput (line 255) | class TestPermissiveToolInput:
    method test_parse_dict_input (line 258) | def test_parse_dict_input(self):
    method test_parse_json_string_input (line 265) | def test_parse_json_string_input(self):
    method test_parse_single_quote_json_string (line 272) | def test_parse_single_quote_json_string(self):
    method test_parse_invalid_string_returns_empty_dict (line 279) | def test_parse_invalid_string_returns_empty_dict(self):
  class TestCreateToolStubFunction (line 287) | class TestCreateToolStubFunction:
    method test_stub_records_intent (line 290) | async def test_stub_records_intent(self):
    method test_stub_filters_none_values (line 317) | async def test_stub_filters_none_values(self):
    method test_stub_handles_nested_params (line 332) | async def test_stub_handles_nested_params(self):
  class TestMockResponseGeneration (line 348) | class TestMockResponseGeneration:
    method test_generate_string_mock (line 351) | def test_generate_string_mock(self):
    method test_generate_integer_mock (line 359) | def test_generate_integer_mock(self):
    method test_generate_number_mock (line 367) | def test_generate_number_mock(self):
    method test_generate_boolean_mock (line 375) | def test_generate_boolean_mock(self):
    method test_generate_array_mock (line 383) | def test_generate_array_mock(self):
    method test_generate_object_mock (line 391) | def test_generate_object_mock(self):
    method test_generate_multiple_fields_mock (line 399) | def test_generate_multiple_fields_mock(self):

FILE: examples/dynamo_integration/react_benchmark_agent/tests/test_tsq_formula.py
  function normalize_tool_name (line 27) | def normalize_tool_name(tool_name: str) -> str:
  function calculate_tool_accuracy (line 40) | def calculate_tool_accuracy(actual: list[dict], expected: list[dict]) ->...
  function calculate_tsq_score (line 62) | def calculate_tsq_score(tool_accuracy: float,
  class TestF1Formula (line 70) | class TestF1Formula:
    method test_perfect_match (line 73) | def test_perfect_match(self):
    method test_no_overlap (line 82) | def test_no_overlap(self):
    method test_empty_actual (line 91) | def test_empty_actual(self):
    method test_empty_expected (line 100) | def test_empty_expected(self):
    method test_both_empty (line 109) | def test_both_empty(self):
    method test_high_precision_low_recall (line 118) | def test_high_precision_low_recall(self):
    method test_low_precision_high_recall (line 130) | def test_low_precision_high_recall(self):
    method test_scenario_000_exact_case (line 143) | def test_scenario_000_exact_case(self):
  class TestTSQScore (line 158) | class TestTSQScore:
    method test_scenario_000_score (line 161) | def test_scenario_000_score(self):
    method test_zero_tools_score (line 173) | def test_zero_tools_score(self):
    method test_perfect_score (line 181) | def test_perfect_score(self):
    method test_only_tools_correct (line 189) | def test_only_tools_correct(self):
    method test_only_params_correct (line 197) | def test_only_params_correct(self):
  class TestNormalization (line 206) | class TestNormalization:
    method test_underscore_removal (line 209) | def test_underscore_removal(self):
    method test_dash_removal (line 213) | def test_dash_removal(self):
    method test_case_insensitive (line 217) | def test_case_insensitive(self):
    method test_matching_with_normalization (line 221) | def test_matching_with_normalization(self):
    method test_module_prefix_stripping (line 230) | def test_module_prefix_stripping(self):
    method test_module_prefix_matching (line 236) | def test_module_prefix_matching(self):
    method test_empty_tool_name (line 244) | def test_empty_tool_name(self):
  class TestDuplicateHandling (line 250) | class TestDuplicateHandling:
    method test_duplicates_in_actual (line 253) | def test_duplicates_in_actual(self):
    method test_many_duplicates_scenario (line 264) | def test_many_duplicates_scenario(self):
  class TestAverageScoreCalculation (line 286) | class TestAverageScoreCalculation:
    method test_average_with_mostly_zeros (line 289) | def test_average_with_mostly_zeros(self):
    method test_output_matches_expected_average (line 297) | def test_output_matches_expected_average(self):
  class TestTrajectoryExtraction (line 304) | class TestTrajectoryExtraction:
    method extract_tool_calls_from_trajectory (line 308) | def extract_tool_calls_from_trajectory(trajectory: list) -> list:
    method test_nested_payload_format (line 352) | def test_nested_payload_format(self):
    method test_flat_legacy_format (line 376) | def test_flat_legacy_format(self):
    method test_langchain_action_format (line 389) | def test_langchain_action_format(self):
    method test_mixed_formats (line 398) | def test_mixed_formats(self):
    method test_empty_trajectory (line 435) | def test_empty_trajectory(self):
    method test_no_tool_events (line 440) | def test_no_tool_events(self):
    method test_real_profiler_data_structure (line 458) | def test_real_profiler_data_structure(self):

FILE: examples/dynamo_integration/scripts/create_test_subset.py
  function create_test_subset (line 30) | def create_test_subset(input_file: Path, output_file: Path, num_scenario...

FILE: examples/dynamo_integration/scripts/download_agent_leaderboard_v2.py
  function convert_tool_json_strings (line 31) | def convert_tool_json_strings(tool_record: dict) -> dict:
  function derive_expected_tool_calls (line 46) | def derive_expected_tool_calls(user_goals: list[str], tools: list[dict[s...
  function transform_scenario_to_nat_format (line 141) | def transform_scenario_to_nat_format(
  function download_and_transform_v2_dataset (line 200) | def download_and_transform_v2_dataset(

FILE: examples/dynamo_integration/scripts/plot_throughput_histograms_per_request.py
  function get_job_label (line 56) | def get_job_label(job_dir_name: str) -> str:
  function get_experiment_label (line 61) | def get_experiment_label(dir_path: Path) -> str:
  function extract_per_request_tsq_scores (line 66) | def extract_per_request_tsq_scores(job_dir: Path) -> dict[int, dict] | N...
  function calculate_per_request_throughput_metrics (line 112) | def calculate_per_request_throughput_metrics(csv_path: Path) -> tuple[di...
  function collect_job_data_from_dir (line 224) | def collect_job_data_from_dir(jobs_dir: Path, experiment_label: str | No...
  function collect_job_data (line 301) | def collect_job_data(input_dirs: list[Path]) -> tuple[pd.DataFrame, pd.D...
  function _add_job_stats_table (line 332) | def _add_job_stats_table(ax, job_stats: dict, job_labels: dict, job_colo...
  function _add_job_stats_table_compact (line 401) | def _add_job_stats_table_compact(ax, job_stats: dict, job_labels: dict, ...
  function create_histogram_plots (line 461) | def create_histogram_plots(df: pd.DataFrame, output_dir: Path, llm_call_...
  function create_summary_histogram_plot (line 631) | def create_summary_histogram_plot(df: pd.DataFrame, output_dir: Path, ll...
  function main (line 796) | def main():

FILE: examples/dynamo_integration/scripts/plot_throughput_vs_tsq_per_request.py
  function get_job_label (line 59) | def get_job_label(job_dir_name: str) -> str:
  function get_experiment_label (line 64) | def get_experiment_label(dir_path: Path) -> str:
  function load_optimizer_trials (line 69) | def load_optimizer_trials(experiment_dir: Path) -> pd.DataFrame | None:
  function match_job_to_trial (line 112) | def match_job_to_trial(job_avg_score: float, trials_df: pd.DataFrame, to...
  function get_job_average_tsq (line 143) | def get_job_average_tsq(job_dir: Path) -> float | None:
  function extract_per_request_tsq_scores (line 157) | def extract_per_request_tsq_scores(job_dir: Path) -> dict[int, dict] | N...
  function _build_empty_first_tokens (line 203) | def _build_empty_first_tokens(job_dir: Path) -> set[tuple[str, float]]:
  function calculate_per_request_throughput_metrics (line 242) | def calculate_per_request_throughput_metrics(csv_path: Path) -> tuple[di...
  function collect_job_data_from_dir (line 372) | def collect_job_data_from_dir(jobs_dir: Path,
  function collect_job_data (line 472) | def collect_job_data(input_dirs: list[Path]) -> tuple[pd.DataFrame, pd.D...
  function create_scatter_plots (line 509) | def create_scatter_plots(df: pd.DataFrame,
  function create_summary_plot (line 639) | def create_summary_plot(df: pd.DataFrame,
  function main (line 848) | def main():

FILE: examples/dynamo_integration/scripts/throughput_analysis.py
  function calculate_tokens_per_second (line 85) | def calculate_tokens_per_second(

FILE: examples/evaluation_and_profiling/email_phishing_analyzer/src/nat_email_phishing_analyzer/register.py
  class EmailPhishingAnalyzerConfig (line 38) | class EmailPhishingAnalyzerConfig(FunctionBaseConfig, OptimizableMixin, ...
  function email_phishing_analyzer (line 50) | async def email_phishing_analyzer(config: EmailPhishingAnalyzerConfig, b...

FILE: examples/evaluation_and_profiling/email_phishing_analyzer/src/nat_email_phishing_analyzer/utils.py
  function smart_parse (line 20) | def smart_parse(text: str) -> dict:

FILE: examples/evaluation_and_profiling/email_phishing_analyzer/tests/test_email_phishing_analyzer.py
  function test_run_full_workflow (line 29) | async def test_run_full_workflow():
  function test_optimize_full_workflow (line 49) | async def test_optimize_full_workflow(capsys):

FILE: examples/evaluation_and_profiling/simple_calculator_eval/src/nat_simple_calculator_eval/register.py
  class PowerOfTwoConfig (line 31) | class PowerOfTwoConfig(FunctionBaseConfig, name="power_of_two"):
  function power_of_two_function (line 41) | async def power_of_two_function(config: PowerOfTwoConfig, builder: Build...
  class SquareViaMultiplyConfig (line 57) | class SquareViaMultiplyConfig(FunctionBaseConfig, name="square_via_multi...
  function square_via_multiply_function (line 67) | async def square_via_multiply_function(config: SquareViaMultiplyConfig, ...
  class CubeViaMultiplyChainConfig (line 82) | class CubeViaMultiplyChainConfig(FunctionBaseConfig, name="cube_via_mult...
  function cube_via_multiply_chain_function (line 92) | async def cube_via_multiply_chain_function(config: CubeViaMultiplyChainC...
  class PowerBranchConfig (line 108) | class PowerBranchConfig(FunctionBaseConfig, name="power_branch"):
  function power_branch_function (line 122) | async def power_branch_function(config: PowerBranchConfig, builder: Buil...

FILE: examples/evaluation_and_profiling/simple_calculator_eval/src/nat_simple_calculator_eval/scripts/custom_dataset_parser.py
  function extract_nested_questions (line 23) | def extract_nested_questions(file_path: Path, difficulty: str | None = N...

FILE: examples/evaluation_and_profiling/simple_calculator_eval/src/nat_simple_calculator_eval/scripts/custom_post_process.py
  function add_metadata_and_filter (line 25) | def add_metadata_and_filter(item: EvalInputItem) -> EvalInputItem:
  function normalize_calculator_outputs (line 61) | def normalize_calculator_outputs(item: EvalInputItem) -> EvalInputItem:

FILE: examples/evaluation_and_profiling/simple_calculator_eval/tests/test_nested_trajectory_eval.py
  function test_nested_trajectory_eval_emits_power_of_two_and_multiply (line 29) | async def test_nested_trajectory_eval_emits_power_of_two_and_multiply(tm...
  function test_trajectory_eval_emits_single_item_with_expected_tools (line 107) | async def test_trajectory_eval_emits_single_item_with_expected_tools(tmp...
  function test_branching_nested_trajectory_eval_emits_branching_lineage (line 180) | async def test_branching_nested_trajectory_eval_emits_branching_lineage(...

FILE: examples/evaluation_and_profiling/simple_calculator_eval/tests/test_simple_calculator_eval.py
  function test_eval (line 31) | async def test_eval():

FILE: examples/evaluation_and_profiling/simple_web_query_eval/src/nat_simple_web_query_eval/atif_only_evaluator_register.py
  class AtifCosineSimilarityEvaluatorConfig (line 31) | class AtifCosineSimilarityEvaluatorConfig(EvaluatorBaseConfig, name="ati...
  class AtifCosineSimilarityEvaluator (line 40) | class AtifCosineSimilarityEvaluator(AtifBaseEvaluator):
    method __init__ (line 49) | def __init__(self, normalize_case: bool = True, max_concurrency: int =...
    method _normalize (line 53) | def _normalize(self, value: object) -> str:
    method _count_tool_calls (line 57) | def _count_tool_calls(self, sample) -> int:
    method _cosine_similarity (line 61) | def _cosine_similarity(self, text_a: str, text_b: str) -> float:
    method evaluate_atif_item (line 77) | async def evaluate_atif_item(self, sample: AtifEvalSample) -> EvalOutp...
  function register_atif_cosine_similarity_evaluator (line 94) | async def register_atif_cosine_similarity_evaluator(config: AtifCosineSi...

FILE: examples/evaluation_and_profiling/simple_web_query_eval/src/nat_simple_web_query_eval/scripts/evaluate_single_item.py
  function run_workflow_and_evaluate (line 114) | async def run_workflow_and_evaluate(base_url: str, input_message: str, e...
  function main (line 267) | async def main() -> int:

FILE: examples/evaluation_and_profiling/simple_web_query_eval/src/nat_simple_web_query_eval/scripts/evaluate_single_item_simple.py
  function run_and_evaluate_simple (line 82) | async def run_and_evaluate_simple(base_url: str, input_message: str, exp...
  function main (line 208) | async def main() -> int:

FILE: examples/evaluation_and_profiling/simple_web_query_eval/src/nat_simple_web_query_eval/scripts/workflow_to_csv.py
  function customize_workflow_json (line 25) | def customize_workflow_json(output_dir: Path, input_path: Path, output_p...
  function parse_args (line 56) | def parse_args():

FILE: examples/evaluation_and_profiling/simple_web_query_eval/tests/test_atif_only_evaluator_register.py
  function test_register_atif_cosine_similarity_evaluator_exposes_only_atif_lane (line 26) | async def test_register_atif_cosine_similarity_evaluator_exposes_only_at...
  function test_atif_cosine_similarity_evaluator_scores_items (line 35) | async def test_atif_cosine_similarity_evaluator_scores_items():

FILE: examples/evaluation_and_profiling/simple_web_query_eval/tests/test_simple_web_query_eval.py
  function validate_rag_accuracy (line 30) | def validate_rag_accuracy(rag_metric_output_file: Path, score: float):
  function validate_trajectory_accuracy (line 53) | def validate_trajectory_accuracy(trajectory_output_file: Path):
  function test_eval (line 80) | async def test_eval(tmp_path: Path, root_repo_dir: Path):

FILE: examples/finetuning/dpo_tic_tac_toe/src/dpo_tic_tac_toe/board_position_scorer.py
  class BoardPositionScorerConfig (line 41) | class BoardPositionScorerConfig(TTCStrategyBaseConfig, name="board_posit...
  class BoardPositionScorer (line 53) | class BoardPositionScorer(StrategyBase):
    method __init__ (line 65) | def __init__(self, config: BoardPositionScorerConfig):
    method build_components (line 68) | async def build_components(self, builder: Builder) -> None:
    method supported_pipeline_types (line 72) | def supported_pipeline_types(self) -> list[PipelineTypeEnum]:
    method stage_type (line 76) | def stage_type(self) -> StageTypeEnum:
    method ainvoke (line 80) | async def ainvoke(
  function register_board_position_scorer (line 142) | async def register_board_position_scorer(config: BoardPositionScorerConf...

FILE: examples/finetuning/dpo_tic_tac_toe/src/dpo_tic_tac_toe/choose_move_function.py
  class ChooseMoveInput (line 55) | class ChooseMoveInput(BaseModel):
  class ChooseMoveOutput (line 62) | class ChooseMoveOutput(BaseModel):
  class ChooseMoveConfig (line 72) | class ChooseMoveConfig(FunctionBaseConfig, name="choose_move"):
  function choose_move_function (line 87) | async def choose_move_function(config: ChooseMoveConfig, builder: Builder):

FILE: examples/finetuning/dpo_tic_tac_toe/src/dpo_tic_tac_toe/core.py
  function new_board (line 46) | def new_board() -> np.ndarray:
  function board_to_str (line 50) | def board_to_str(board: np.ndarray) -> str:
  function board_to_list (line 63) | def board_to_list(board: np.ndarray) -> list[list[int]]:
  function available_moves (line 68) | def available_moves(board: np.ndarray) -> list[tuple[int, int]]:
  function check_winner (line 74) | def check_winner(board: np.ndarray) -> int:
  function is_draw (line 111) | def is_draw(board: np.ndarray) -> bool:
  function evaluate_board_for_player (line 115) | def evaluate_board_for_player(board: np.ndarray, player_val: int) -> float:

FILE: examples/finetuning/dpo_tic_tac_toe/src/dpo_tic_tac_toe/dpo_workflow.py
  class DPOTicTacToeConfig (line 53) | class DPOTicTacToeConfig(FunctionBaseConfig, name="dpo_tic_tac_toe"):
  function dpo_tic_tac_toe_workflow (line 68) | async def dpo_tic_tac_toe_workflow(config: DPOTicTacToeConfig, builder: ...

FILE: examples/finetuning/dpo_tic_tac_toe/src/dpo_tic_tac_toe/evaluator.py
  class GameOutcomeEvaluator (line 29) | class GameOutcomeEvaluator(BaseEvaluator):
    method __init__ (line 39) | def __init__(self, max_concurrency: int = 4):
    method evaluate_item (line 43) | async def evaluate_item(self, item: EvalInputItem) -> EvalOutputItem:
  class DPODataCollectorEvaluator (line 71) | class DPODataCollectorEvaluator(BaseEvaluator):
    method __init__ (line 83) | def __init__(self, max_concurrency: int = 4):
    method evaluate_item (line 87) | async def evaluate_item(self, item: EvalInputItem) -> EvalOutputItem:

FILE: examples/finetuning/dpo_tic_tac_toe/src/dpo_tic_tac_toe/evaluator_register.py
  class GameOutcomeEvaluatorConfig (line 25) | class GameOutcomeEvaluatorConfig(EvaluatorBaseConfig, name="dpo_game_out...
  function register_game_outcome_evaluator (line 32) | async def register_game_outcome_evaluator(config: GameOutcomeEvaluatorCo...
  class DPODataCollectorEvaluatorConfig (line 45) | class DPODataCollectorEvaluatorConfig(EvaluatorBaseConfig, name="dpo_dat...
  function register_dpo_data_collector_evaluator (line 52) | async def register_dpo_data_collector_evaluator(config: DPODataCollector...

FILE: examples/finetuning/dpo_tic_tac_toe/src/dpo_tic_tac_toe/llm_agents.py
  function parse_move_xml (line 39) | def parse_move_xml(text: str) -> tuple[int, int] | None:
  function parse_move_any (line 61) | def parse_move_any(text: str) -> tuple[int, int] | None:
  function make_random_move (line 70) | def make_random_move(board: np.ndarray) -> tuple[int, int, str]:
  function get_system_prompt (line 133) | def get_system_prompt(player_symbol: str) -> str:
  function format_prompt_for_dpo (line 138) | def format_prompt_for_dpo(
  function build_player_chain (line 172) | def build_player_chain(model, player_symbol: str) -> Any:

FILE: examples/finetuning/dpo_tic_tac_toe/src/dpo_tic_tac_toe/move_search_strategy.py
  class MultiCandidateMoveSearchConfig (line 40) | class MultiCandidateMoveSearchConfig(TTCStrategyBaseConfig, name="multi_...
  class MultiCandidateMoveSearcher (line 52) | class MultiCandidateMoveSearcher(StrategyBase):
    method __init__ (line 65) | def __init__(self, config: MultiCandidateMoveSearchConfig):
    method build_components (line 70) | async def build_components(self, builder: Builder) -> None:
    method supported_pipeline_types (line 74) | def supported_pipeline_types(self) -> list[PipelineTypeEnum]:
    method stage_type (line 78) | def stage_type(self) -> StageTypeEnum:
    method ainvoke (line 82) | async def ainvoke(
  function register_multi_candidate_move_search (line 156) | async def register_multi_candidate_move_search(config: MultiCandidateMov...

FILE: examples/finetuning/dpo_tic_tac_toe/src/dpo_tic_tac_toe/ttc_move_selector_function.py
  class TTCMoveSelectorInput (line 50) | class TTCMoveSelectorInput(BaseModel):
  class TTCMoveSelectorOutput (line 58) | class TTCMoveSelectorOutput(BaseModel):
  class TTCMoveSelectorConfig (line 68) | class TTCMoveSelectorConfig(FunctionBaseConfig, name="ttc_move_selector"):
  function ttc_move_selector_function (line 84) | async def ttc_move_selector_function(config: TTCMoveSelectorConfig, buil...

FILE: examples/finetuning/rl_with_openpipe_art/src/rl_with_openpipe_art/accuracy_evaluator.py
  class AccuracyEvaluator (line 26) | class AccuracyEvaluator(BaseEvaluator):
    method __init__ (line 35) | def __init__(self, max_concurrency: int = 4, use_intermediate_steps: b...
    method episode_value_from_states (line 40) | def episode_value_from_states(
    method _eval_with_steps (line 82) | async def _eval_with_steps(item: EvalInputItem) -> EvalOutputItem:
    method evaluate_item (line 106) | async def evaluate_item(self, item: EvalInputItem) -> EvalOutputItem:

FILE: examples/finetuning/rl_with_openpipe_art/src/rl_with_openpipe_art/core.py
  function new_board (line 46) | def new_board() -> np.ndarray:
  function board_to_str (line 50) | def board_to_str(board: np.ndarray) -> str:
  function available_moves (line 63) | def available_moves(board: np.ndarray) -> list[tuple[int, int]]:
  function check_winner (line 69) | def check_winner(board: np.ndarray) -> int:
  function is_draw (line 106) | def is_draw(board: np.ndarray) -> bool:
  function evaluate_board_for_player (line 110) | def evaluate_board_for_player(board: np.ndarray, player_val: int) -> float:

FILE: examples/finetuning/rl_with_openpipe_art/src/rl_with_openpipe_art/evaluator_register.py
  class AccuracyEvaluatorConfig (line 22) | class AccuracyEvaluatorConfig(EvaluatorBaseConfig, name="percent_games_w...
  function register_accuracy_evaluator (line 28) | async def register_accuracy_evaluator(config: AccuracyEvaluatorConfig, b...
  class AccuracyEvaluatorConfig (line 39) | class AccuracyEvaluatorConfig(EvaluatorBaseConfig, name="step_value_comp...
  function register_accuracy_evaluator_penalty (line 45) | async def register_accuracy_evaluator_penalty(config: AccuracyEvaluatorC...

FILE: examples/finetuning/rl_with_openpipe_art/src/rl_with_openpipe_art/llm_agents.py
  function parse_move_xml (line 40) | def parse_move_xml(text: str) -> tuple[int, int] | None:
  function parse_move_any (line 62) | def parse_move_any(text: str) -> tuple[int, int] | None:
  class LLMTicTacToePlayer (line 72) | class LLMTicTacToePlayer:
    method choose_move (line 82) | def choose_move(self, board) -> tuple[int, int, str]:
  function build_player_chain (line 161) | def build_player_chain(model, player_symbol: str) -> Any:

FILE: examples/finetuning/rl_with_openpipe_art/src/rl_with_openpipe_art/rl_with_openpipe_art.py
  class MoveRecord (line 48) | class MoveRecord:
  class TicTacToeGame (line 58) | class TicTacToeGame:
    method __init__ (line 64) | def __init__(self, player_x: LLMTicTacToePlayer, player_o: LLMTicTacTo...
    method play (line 77) | def play(self) -> int:
  class RlWithOpenpipeArtFunctionConfig (line 162) | class RlWithOpenpipeArtFunctionConfig(FunctionBaseConfig, name="rl_with_...
  function rl_with_openpipe_art_function (line 172) | async def rl_with_openpipe_art_function(config: RlWithOpenpipeArtFunctio...

FILE: examples/frameworks/adk_demo/src/nat_adk_demo/agent.py
  class ADKFunctionConfig (line 31) | class ADKFunctionConfig(FunctionBaseConfig, name="adk"):
  function adk_agent (line 44) | async def adk_agent(config: ADKFunctionConfig, builder: Builder):

FILE: examples/frameworks/adk_demo/src/nat_adk_demo/nat_time_tool.py
  class TimeMCPToolConfig (line 30) | class TimeMCPToolConfig(FunctionBaseConfig, name="get_city_time_tool"):
  function get_city_time (line 35) | async def get_city_time(_config: TimeMCPToolConfig, _builder: Builder) -...

FILE: examples/frameworks/adk_demo/src/nat_adk_demo/weather_update_tool.py
  class WeatherToolConfig (line 26) | class WeatherToolConfig(FunctionBaseConfig, name="weather_update"):
  function weather_update (line 31) | async def weather_update(_config: WeatherToolConfig, _builder: Builder) ...

FILE: examples/frameworks/adk_demo/tests/test_adk_demo_e2e.py
  function test_full_workflow (line 23) | async def test_full_workflow():

FILE: examples/frameworks/agno_personal_finance/src/nat_agno_personal_finance/agno_personal_finance_function.py
  class AgnoPersonalFinanceFunctionConfig (line 32) | class AgnoPersonalFinanceFunctionConfig(FunctionBaseConfig, name="agno_p...
  function agno_personal_finance_function (line 39) | async def agno_personal_finance_function(config: AgnoPersonalFinanceFunc...

FILE: examples/frameworks/agno_personal_finance/tests/test_agno_personal_finance_workflow.py
  function test_full_workflow (line 23) | async def test_full_workflow():

FILE: examples/frameworks/haystack_deep_research_agent/src/nat_haystack_deep_research_agent/pipelines/indexing.py
  function _gather_sources (line 29) | def _gather_sources(base_dir: Path) -> tuple[list[Path], list[Path]]:
  function _build_indexing_pipeline (line 35) | def _build_indexing_pipeline(document_store, embedder_model: str) -> Pip...
  function run_startup_indexing (line 54) | def run_startup_indexing(

FILE: examples/frameworks/haystack_deep_research_agent/src/nat_haystack_deep_research_agent/pipelines/rag.py
  function create_rag_tool (line 26) | def create_rag_tool(

FILE: examples/frameworks/haystack_deep_research_agent/src/nat_haystack_deep_research_agent/pipelines/search.py
  function create_search_tool (line 25) | def create_search_tool(top_k: int = 10) -> ComponentTool:

FILE: examples/frameworks/haystack_deep_research_agent/src/nat_haystack_deep_research_agent/register.py
  class HaystackDeepResearchWorkflowConfig (line 27) | class HaystackDeepResearchWorkflowConfig(FunctionBaseConfig, name="hayst...
  function haystack_deep_research_agent_workflow (line 54) | async def haystack_deep_research_agent_workflow(config: HaystackDeepRese...

FILE: examples/frameworks/haystack_deep_research_agent/tests/test_haystack_deep_research_agent.py
  function opensearch_url_fixture (line 24) | def opensearch_url_fixture(fail_missing: bool) -> str:
  function test_full_workflow_e2e (line 38) | async def test_full_workflow_e2e(opensearch_url: str) -> None:
  function test_config_yaml_loads_and_has_keys (line 57) | def test_config_yaml_loads_and_has_keys() -> None:

FILE: examples/frameworks/multi_frameworks/src/nat_multi_frameworks/haystack_agent.py
  class HaystackChitchatConfig (line 27) | class HaystackChitchatConfig(FunctionBaseConfig, name="haystack_chitchat...
  function haystack_chitchat_agent_as_tool (line 32) | async def haystack_chitchat_agent_as_tool(tool_config: HaystackChitchatC...

FILE: examples/frameworks/multi_frameworks/src/nat_multi_frameworks/langchain_research_tool.py
  class LangChainResearchConfig (line 30) | class LangChainResearchConfig(FunctionBaseConfig, name="langchain_resear...
  function langchain_research (line 36) | async def langchain_research(tool_config: LangChainResearchConfig, build...

FILE: examples/frameworks/multi_frameworks/src/nat_multi_frameworks/llama_index_rag_tool.py
  class LlamaIndexRAGConfig (line 33) | class LlamaIndexRAGConfig(FunctionBaseConfig, name="llama_index_rag"):
  function llama_index_rag_tool (line 45) | async def llama_index_rag_tool(tool_config: LlamaIndexRAGConfig, builder...

FILE: examples/frameworks/multi_frameworks/src/nat_multi_frameworks/register.py
  class MultiFrameworksWorkflowConfig (line 32) | class MultiFrameworksWorkflowConfig(FunctionBaseConfig, name="multi_fram...
  function multi_frameworks_workflow (line 42) | async def multi_frameworks_workflow(config: MultiFrameworksWorkflowConfi...

FILE: examples/frameworks/multi_frameworks/tests/test_multi_frameworks_workflow.py
  function test_full_workflow (line 22) | async def test_full_workflow():

FILE: examples/frameworks/nat_autogen_demo/src/nat_autogen_demo/autogen_team.py
  class AutoGenFunctionConfig (line 31) | class AutoGenFunctionConfig(FunctionBaseConfig, name="autogen_team"):
  function autogen_team (line 43) | async def autogen_team(config: AutoGenFunctionConfig, builder: Builder) ...

FILE: examples/frameworks/nat_autogen_demo/src/nat_autogen_demo/traffic_status_tool.py
  class TrafficStatusToolConfig (line 26) | class TrafficStatusToolConfig(FunctionBaseConfig, name="traffic_status_a...
  function _get_time_period (line 30) | def _get_time_period(hour: int) -> str:
  function traffic_status (line 95) | async def traffic_status(_config: TrafficStatusToolConfig, _builder: Bui...

FILE: examples/frameworks/semantic_kernel_demo/src/nat_semantic_kernel_demo/hotel_price_tool.py
  class HotelPriceToolConfig (line 24) | class HotelPriceToolConfig(FunctionBaseConfig, name="hotel_price"):
  class HotelOffer (line 29) | class HotelOffer(BaseModel):
  class HotelOffersResponse (line 38) | class HotelOffersResponse(BaseModel):
  function hotel_price (line 43) | async def hotel_price(tool_config: HotelPriceToolConfig, builder: Builder):

FILE: examples/frameworks/semantic_kernel_demo/src/nat_semantic_kernel_demo/local_events_tool.py
  class LocalEvent (line 24) | class LocalEvent(BaseModel):
  class LocalEventsResponse (line 30) | class LocalEventsResponse(BaseModel):
  class LocalEventsToolConfig (line 34) | class LocalEventsToolConfig(FunctionBaseConfig, name="local_events"):
  function local_events (line 39) | async def local_events(tool_config: LocalEventsToolConfig, builder: Buil...

FILE: examples/frameworks/semantic_kernel_demo/src/nat_semantic_kernel_demo/register.py
  class SKTravelPlanningWorkflowConfig (line 34) | class SKTravelPlanningWorkflowConfig(FunctionBaseConfig, name="semantic_...
  function semantic_kernel_travel_planning_workflow (line 50) | async def semantic_kernel_travel_planning_workflow(config: SKTravelPlann...

FILE: examples/frameworks/semantic_kernel_demo/tests/test_semantic_kernel_workflow.py
  function test_full_workflow (line 23) | async def test_full_workflow():

FILE: examples/frameworks/strands_demo/src/nat_strands_demo/ping_tool.py
  class PingConfig (line 26) | class PingConfig(FunctionBaseConfig, name="simple_agentcore_ping"):
  function simple_agentcore_ping (line 31) | async def simple_agentcore_ping(_: PingConfig, __: Builder):

FILE: examples/frameworks/strands_demo/src/nat_strands_demo/register.py
  class StrandsDemoConfig (line 36) | class StrandsDemoConfig(FunctionBaseConfig, OptimizableMixin, name="stra...
  function strands_demo (line 55) | async def strands_demo(config: StrandsDemoConfig, builder: Builder) -> A...

FILE: examples/frameworks/strands_demo/src/nat_strands_demo/url_directory.py
  class URLDirectoryConfig (line 31) | class URLDirectoryConfig(FunctionBaseConfig, name="url_directory"):
    method validate_urls (line 46) | def validate_urls(cls, v: dict[str, str]) -> dict[str, str]:
  function url_directory (line 58) | async def url_directory(config: URLDirectoryConfig, _: Builder) -> Async...

FILE: examples/front_ends/per_user_workflow/src/nat_per_user_workflow/per_user_functions.py
  class NoteInput (line 38) | class NoteInput(BaseModel):
  class NoteOutput (line 44) | class NoteOutput(BaseModel):
  class PreferenceInput (line 52) | class PreferenceInput(BaseModel):
  class PreferenceOutput (line 59) | class PreferenceOutput(BaseModel):
  class PerUserNotepadConfig (line 68) | class PerUserNotepadConfig(FunctionBaseConfig, name="per_user_notepad"):
  class PerUserPreferencesConfig (line 73) | class PerUserPreferencesConfig(FunctionBaseConfig, name="per_user_prefer...
  function per_user_notepad (line 83) | async def per_user_notepad(config: PerUserNotepadConfig, builder: Builder):
  function per_user_preferences (line 135) | async def per_user_preferences(config: PerUserPreferencesConfig, builder...

FILE: examples/front_ends/per_user_workflow/src/nat_per_user_workflow/per_user_workflow.py
  class UserAssistantInput (line 41) | class UserAssistantInput(BaseModel):
  class UserAssistantOutput (line 49) | class UserAssistantOutput(BaseModel):
  class PerUserAssistantConfig (line 57) | class PerUserAssistantConfig(FunctionBaseConfig, name="per_user_assistan...
  function per_user_assistant_workflow (line 67) | async def per_user_assistant_workflow(config: PerUserAssistantConfig, bu...

FILE: examples/front_ends/simple_auth/src/nat_simple_auth/ip_lookup.py
  class WhoAmIConfig (line 32) | class WhoAmIConfig(FunctionBaseConfig, name="who_am_i"):
  function who_am_i_function (line 44) | async def who_am_i_function(config: WhoAmIConfig, builder: Builder):

FILE: examples/front_ends/simple_auth/tests/test_simple_auth.py
  function _auth_callback (line 30) | async def _auth_callback(cookies: "requests.cookies.RequestsCookieJar",
  function test_full_workflow (line 93) | async def test_full_workflow(oauth2_client_credentials: dict[str, str]):

FILE: examples/front_ends/simple_calculator_custom_routes/tests/test_simple_calculator_custom_routes.py
  function simple_calculator_config_file_fixture (line 23) | def simple_calculator_config_file_fixture() -> Path:
  function fixture_set_nat_config_file_env_var (line 32) | def fixture_set_nat_config_file_env_var(restore_environ, simple_calculat...
  function test_full_workflow (line 40) | async def test_full_workflow(simple_calculator_config_file: Path):

FILE: examples/getting_started/simple_calculator/src/nat_simple_calculator/register.py
  class CalculatorToolConfig (line 26) | class CalculatorToolConfig(FunctionGroupBaseConfig, name="calculator"):
  function calculator (line 32) | async def calculator(_config: CalculatorToolConfig, _builder: Builder) -...

FILE: examples/getting_started/simple_calculator/tests/test_simple_calculator_workflow.py
  function workflow_fixture (line 27) | async def workflow_fixture():
  function run_calculator_tool (line 37) | async def run_calculator_tool(workflow: "Workflow", workflow_input: str,...
  function test_inequality_less_than_tool_workflow (line 50) | async def test_inequality_less_than_tool_workflow(workflow: "Workflow", ...
  function test_inequality_greater_than_tool_workflow (line 58) | async def test_inequality_greater_than_tool_workflow(workflow: "Workflow...
  function test_inequality_equal_to_tool_workflow (line 66) | async def test_inequality_equal_to_tool_workflow(workflow: "Workflow", w...
  function test_add_tool_workflow (line 79) | async def test_add_tool_workflow(workflow: "Workflow", workflow_input: s...
  function test_subtract_tool_workflow (line 89) | async def test_subtract_tool_workflow(workflow: "Workflow", workflow_inp...
  function test_multiply_tool_workflow (line 103) | async def test_multiply_tool_workflow(workflow: "Workflow", workflow_inp...
  function test_division_tool_workflow (line 117) | async def test_division_tool_workflow(workflow: "Workflow", workflow_inp...

FILE: examples/getting_started/simple_web_query/src/nat_simple_web_query/register.py
  class WebQueryToolConfig (line 28) | class WebQueryToolConfig(FunctionBaseConfig, name="webpage_query"):
  function webquery_tool (line 36) | async def webquery_tool(config: WebQueryToolConfig, builder: Builder):

FILE: examples/getting_started/simple_web_query/tests/test_simple_web_query_workflow.py
  function test_full_workflow (line 23) | async def test_full_workflow():

FILE: examples/getting_started/simple_web_query/tests/test_web_query_tool.py
  function test_web_query_config (line 21) | async def test_web_query_config():
  function test_web_query_tool (line 38) | async def test_web_query_tool():

FILE: examples/memory/redis/tests/test_memory_redis.py
  function test_full_workflow (line 23) | async def test_full_workflow(redis_server: dict[str, str | int], phoenix...

FILE: examples/notebooks/tests/test_notebooks_e2e.py
  function notebooks_dir_fixture (line 66) | def notebooks_dir_fixture() -> Path:
  function _is_installed (line 70) | def _is_installed(package_name: str) -> bool:
  function _delete_workflow (line 84) | def _delete_workflow(notebooks_dir: Path, workflow_name: str, check: boo...
  function _delete_all_workflows (line 99) | def _delete_all_workflows(notebooks_dir: Path):
  function _delete_other_files (line 104) | def _delete_other_files(notebooks_dir: Path):
  function _cleanup_all (line 111) | def _cleanup_all(notebooks_dir: Path):
  function workflow_cleanups_fixture (line 117) | def workflow_cleanups_fixture(notebooks_dir: Path):
  function _run_notebook (line 125) | def _run_notebook(notebook_path: Path, expected_packages: list[str], tim...
  function test_notebooks (line 161) | def test_notebooks(notebooks_dir: Path, notebook_file_name: str, expecte...
  function test_2_bringing_your_own_agent (line 170) | def test_2_bringing_your_own_agent(notebooks_dir: Path):

FILE: examples/object_store/user_report/src/nat_user_report/user_report_tools.py
  class UserReportConfig (line 31) | class UserReportConfig(FunctionGroupBaseConfig, name="user_report"):
  function user_report_group (line 47) | async def user_report_group(config: UserReportConfig, builder: Builder):

FILE: examples/object_store/user_report/tests/test_objext_store_example_user_report_tool.py
  function builder (line 29) | async def builder():
  function object_store (line 44) | async def object_store(builder):
  function group (line 50) | async def group(builder):
  class TestUserReportTools (line 56) | class TestUserReportTools:
    method test_get_user_report_valid_case (line 60) | async def test_get_user_report_valid_case(self, object_store, group):
    method test_get_user_report_with_date (line 73) | async def test_get_user_report_with_date(self, object_store, group):
    method test_get_user_report_not_found (line 86) | async def test_get_user_report_not_found(self, group):
    method test_put_user_report_valid_case (line 94) | async def test_put_user_report_valid_case(self, object_store, group):
    method test_put_user_report_with_date (line 106) | async def test_put_user_report_with_date(self, object_store, group):
    method test_put_user_report_already_exists (line 116) | async def test_put_user_report_already_exists(self, object_store, group):
    method test_update_user_report_new_report (line 130) | async def test_update_user_report_new_report(self, object_store, group):
    method test_update_user_report_existing_report (line 140) | async def test_update_user_report_existing_report(self, object_store, ...
    method test_update_user_report_with_date (line 155) | async def test_update_user_report_with_date(self, object_store, group):
    method test_delete_user_report_valid_case (line 168) | async def test_delete_user_report_valid_case(self, object_store, group):
    method test_delete_user_report_with_date (line 182) | async def test_delete_user_report_with_date(self, object_store, group):
    method test_delete_user_report_not_found (line 198) | async def test_delete_user_report_not_found(self, group):
    method test_integration_full_workflow (line 206) | async def test_integration_full_workflow(self, group):

FILE: examples/observability/simple_calculator_observability/src/nat_simple_calculator_observability/register.py
  class PowerOfTwoConfig (line 36) | class PowerOfTwoConfig(FunctionBaseConfig, name="power_of_two"):
  function power_of_two_function (line 46) | async def power_of_two_function(config: PowerOfTwoConfig, builder: Build...

FILE: examples/observability/simple_calculator_observability/tests/test_simple_calc_observability.py
  function config_dir_fixture (line 39) | def config_dir_fixture(examples_dir: Path) -> Path:
  function nvidia_api_key_fixture (line 44) | def nvidia_api_key_fixture(nvidia_api_key):
  function question_fixture (line 49) | def question_fixture() -> str:
  function expected_answer_fixture (line 54) | def expected_answer_fixture() -> str:
  function weave_attribute_key_fixture (line 59) | def weave_attribute_key_fixture() -> str:
  function weave_identifier_fixture (line 65) | def weave_identifier_fixture() -> str:
  function fixture_weave_project_name (line 71) | def fixture_weave_project_name() -> str:
  function fixture_weave_query (line 76) | def fixture_weave_query(weave_attribute_key: str, weave_identifier: str)...
  function aiq_compatibility_span_prefix_fixture (line 81) | def aiq_compatibility_span_prefix_fixture():
  function fixture_weave_client (line 104) | def fixture_weave_client(weave: types.ModuleType, weave_project_name: st...
  function test_weave_full_workflow (line 118) | async def test_weave_full_workflow(config_dir: Path,
  function test_phoenix_full_workflow (line 142) | async def test_phoenix_full_workflow(config_dir: Path, phoenix_trace_url...
  function test_otel_full_workflow (line 151) | async def test_otel_full_workflow(tmp_path: Path, config_dir: Path, ques...
  function test_langfuse_full_workflow (line 178) | async def test_langfuse_full_workflow(config_dir: Path, langfuse_trace_u...
  function test_langsmith_full_workflow (line 189) | async def test_langsmith_full_workflow(config_dir: Path,
  function test_galileo_full_workflow (line 214) | async def test_galileo_full_workflow(config_dir: Path,
  function test_catalyst_full_workflow (line 247) | async def test_catalyst_full_workflow(config_dir: Path,
  function test_nested_span_parent_child_lineage (line 277) | async def test_nested_span_parent_child_lineage(tmp_path: Path, config_d...

FILE: examples/safety_and_security/retail_agent/src/nat_retail_agent/register.py
  class PastOrder (line 33) | class PastOrder(BaseModel):
  class Customer (line 43) | class Customer(BaseModel):
  class ProductReview (line 59) | class ProductReview(BaseModel):
  class Product (line 68) | class Product(BaseModel):
  class ProductSummary (line 79) | class ProductSummary(BaseModel):
  class ReviewDetails (line 97) | class ReviewDetails(BaseModel):
  class WriteReviewResponse (line 106) | class WriteReviewResponse(BaseModel):
  class EmailDetails (line 115) | class EmailDetails(BaseModel):
  class SendEmailResponse (line 124) | class SendEmailResponse(BaseModel):
  class OrderDetails (line 133) | class OrderDetails(BaseModel):
  class UpdateCustomerInfoResponse (line 147) | class UpdateCustomerInfoResponse(BaseModel):
  class RetailToolsConfig (line 161) | class RetailToolsConfig(FunctionGroupBaseConfig, name="retail_tools"):
  class WriteReviewParams (line 181) | class WriteReviewParams(BaseModel):
  class SendEmailParams (line 190) | class SendEmailParams(BaseModel):
  class UpdateCustomerInfoParams (line 198) | class UpdateCustomerInfoParams(BaseModel):
  function retail_tools (line 207) | async def retail_tools(_config: RetailToolsConfig, _builder: Builder) ->...

FILE: examples/safety_and_security/retail_agent/tests/test_retail_agent.py
  function workflow_fixture (line 27) | async def workflow_fixture():
  function run_retail_agent (line 38) | async def run_retail_agent(workflow: "Workflow", email_input: dict[str, ...
  function test_product_inquiry (line 63) | async def test_product_inquiry(workflow: "Workflow"):
  function test_review_submission (line 81) | async def test_review_submission(workflow: "Workflow"):
  function test_order_placement (line 101) | async def test_order_placement(workflow: "Workflow"):
  function test_customer_history_lookup (line 119) | async def test_customer_history_lookup(workflow: "Workflow"):
  function test_product_comparison (line 137) | async def test_product_comparison(workflow: "Workflow"):

FILE: external/dynamo/components/kv_indexer.py
  class OverlapScores (line 94) | class OverlapScores:
    method __init__ (line 102) | def __init__(self, scores: dict[int, float] | None = None):
    method __repr__ (line 105) | def __repr__(self) -> str:
  class KvIndexer (line 112) | class KvIndexer:
    method __init__ (line 131) | def __init__(self, engine: Any, block_size: int):
    method add_worker (line 149) | def add_worker(self, worker_id: int, zmq_endpoint: str) -> None:
    method discover_workers (line 168) | def discover_workers(self, kv_event_base_port: int | None = None) -> N...
    method start_background_drain (line 199) | def start_background_drain(self, interval: float = 0.1) -> None:
    method _drain_loop (line 210) | async def _drain_loop(self, interval: float) -> None:
    method _drain_events (line 219) | async def _drain_events(self) -> int:
    method find_matches_for_request (line 250) | async def find_matches_for_request(self, tokens: list[int], min_overla...
    method shutdown (line 294) | def shutdown(self) -> None:

FILE: external/dynamo/components/processor.py
  class RouterRequest (line 132) | class RouterRequest(BaseModel):
  class RouterFeedbackRequest (line 142) | class RouterFeedbackRequest(BaseModel):
  class KVEfficiencyData (line 154) | class KVEfficiencyData:
    method __init__ (line 164) | def __init__(self):
    method has_data (line 171) | def has_data(self) -> bool:
    method from_response (line 176) | def from_response(cls, data: dict[str, Any]) -> "KVEfficiencyData":
  class ProcessorMetrics (line 214) | class ProcessorMetrics:
    method __init__ (line 226) | def __init__(self, endpoint):
    method _generate_metrics (line 328) | def _generate_metrics(self) -> str:
  class ProcessorRequestHandler (line 334) | class ProcessorRequestHandler:
    method __init__ (line 341) | def __init__(
    method initialize (line 374) | async def initialize(self):
    method _extract_annotation (line 407) | def _extract_annotation(annotations: list[str], key: str, default: str...
    method _to_category (line 416) | def _to_category(
    method _extract_hints (line 448) | def _extract_hints(self, request: dict[str, Any]) -> tuple[str, int, s...
    method _update_prefix_state (line 484) | async def _update_prefix_state(self, prefix_id: str, total_requests: i...
    method _pick_worker (line 509) | async def _pick_worker(
    method _send_feedback_safely (line 567) | async def _send_feedback_safely(
    method _update_kve_metrics_sync (line 600) | def _update_kve_metrics_sync(self, kve: KVEfficiencyData) -> None:
    method _update_kve_metrics_async (line 631) | async def _update_kve_metrics_async(self, kve: KVEfficiencyData) -> None:
    method _stream_from_engine (line 644) | async def _stream_from_engine(
    method generate (line 733) | async def generate(self, raw: dict[str, Any]):
  function parse_args (line 793) | def parse_args() -> argparse.Namespace:
  function worker (line 831) | async def worker(runtime: DistributedRuntime):

FILE: external/dynamo/components/router.py
  function get_default_config_path (line 71) | def get_default_config_path() -> Path:
  function load_config (line 76) | def load_config(config_path: str | Path | None = None) -> dict[str, Any]:
  function get_builtin_defaults (line 100) | def get_builtin_defaults() -> dict[str, Any]:
  function get_nested (line 157) | def get_nested(config: dict, dotted_key: str, default: Any = None) -> Any:
  function set_nested (line 177) | def set_nested(config: dict, dotted_key: str, value: Any) -> None:
  function auto_cast (line 194) | def auto_cast(value_str: str) -> Any:
  function apply_cli_overrides (line 225) | def apply_cli_overrides(config: dict, args: argparse.Namespace) -> dict:
  function _init_prometheus_metrics (line 262) | def _init_prometheus_metrics():
  class RouterRequest (line 359) | class RouterRequest(BaseModel):
  class RouterResponse (line 367) | class RouterResponse(BaseModel):
  class FeedbackRequest (line 373) | class FeedbackRequest(BaseModel):
  class FeedbackAck (line 382) | class FeedbackAck(BaseModel):
  function safe_update (line 391) | def safe_update(lock_name: str):
  class WorkloadAwareRouter (line 407) | class WorkloadAwareRouter:
    method __init__ (line 412) | def __init__(
    method _emit_trace (line 543) | def _emit_trace(self, kind: str, payload: dict[str, Any]):
    method _norm_level (line 557) | def _norm_level(s: str | None, default: str = "MEDIUM") -> str:
    method _decode_cost (line 564) | def _decode_cost(osl: str) -> float:
    method _iat_factor (line 568) | def _iat_factor(iat: str) -> float:
    method initialize (line 572) | async def initialize(self):
    method _initialize_bandits (line 666) | def _initialize_bandits(self):
    method _initialize_contextual (line 677) | def _initialize_contextual(self):
    method _ensure_worker_context (line 684) | def _ensure_worker_context(self, worker_id: int):
    method _get_prefix (line 693) | def _get_prefix(self, pid: str) -> tuple[int | None, int]:
    method _set_prefix (line 700) | def _set_prefix(
    method _worker_outstanding (line 725) | def _worker_outstanding(self, wid: int) -> tuple[int, float]:
    method _start_metrics_scraper (line 756) | def _start_metrics_scraper(self, worker_ids: list[int], interval: floa...
    method _build_internal_metrics (line 803) | def _build_internal_metrics(self, worker_ids: list[int]) -> dict[str, ...
    method _linTS_sample (line 844) | def _linTS_sample(self, wid: int, x: np.ndarray) -> float:
    method _update_contextual (line 877) | def _update_contextual(self, wid: int, x: np.ndarray, reward: float):
    method _ts_sample (line 891) | def _ts_sample(self, worker_id: int) -> float:
    method _update_bandit (line 896) | def _update_bandit(self, worker_id: int, reward: float):
    method _prefill_cost_for_worker (line 911) | def _prefill_cost_for_worker(self, tokens: list[int], overlap: float) ...
    method _prefill_bin (line 918) | def _prefill_bin(prefill_cost: float) -> str:
    method _feature_vector (line 925) | def _feature_vector(
    method _load_score (line 969) | def _load_score(self, wid: int, metrics: dict[str, Any] | None, job_co...
    method _softmax (line 985) | def _softmax(self, scores: list[float], temp: float) -> list[float]:
    method _select_worker (line 995) | def _select_worker(
    method _ema_update (line 1081) | def _ema_update(self, old: float | None, new: float) -> float:
    method _get_latency_baseline (line 1085) | def _get_latency_baseline(self, wid: int, osl: str, prefill_bin: str, ...
    method _update_latency_baselines (line 1096) | def _update_latency_baselines(self, wid: int, osl: str, prefill_bin: s...
    method _latency_metric (line 1105) | def _latency_metric(latency_ms: float, tokens_out: int | None) -> tupl...
    method _metric_to_reward (line 1111) | def _metric_to_reward(metric: float, baseline: float, success: bool) -...
    method _sweep_pending (line 1119) | def _sweep_pending(self, now: float):
    method generate (line 1158) | async def generate(self, request: dict):
    method feedback (line 1285) | async def feedback(self, request: dict):
    method _get_underloaded (line 1364) | def _get_underloaded(self, metrics: dict[str, Any] | None):
  function parse_args (line 1375) | def parse_args():
  function worker (line 1446) | async def worker(runtime: DistributedRuntime):

FILE: external/dynamo/monitoring/scripts/kv_event_observer.py
  function format_hash (line 80) | def format_hash(block_hash: Any) -> str:
  class KVCacheStats (line 90) | class KVCacheStats:
    method record_stored (line 102) | def record_stored(self, block_hashes: list[Any], parent_hash: Any = No...
    method record_removed (line 110) | def record_removed(self, block_hashes: list[Any]):
    method record_cleared (line 118) | def record_cleared(self):
    method record_cache_hit (line 124) | def record_cache_hit(self, hit_tokens: int, query_tokens: int):
    method summary (line 129) | def summary(self) -> dict:
  class EfficiencySample (line 146) | class EfficiencySample:
  class SlidingWindowEfficiency (line 153) | class SlidingWindowEfficiency:
    method __init__ (line 170) | def __init__(self, window_seconds: float = 30.0):
    method add_sample (line 174) | def add_sample(self, hit_tokens: int, query_tokens: int, timestamp: fl...
    method _evict_old (line 180) | def _evict_old(self, now: float):
    method get_efficiency (line 186) | def get_efficiency(self) -> float:
    method sample_count (line 199) | def sample_count(self) -> int:
    method reset (line 204) | def reset(self):
  class KVEventObserver (line 209) | class KVEventObserver:
    method __init__ (line 219) | def __init__(
    method _parse_metric (line 253) | def _parse_metric(self, metrics_text: str, metric_name: str) -> float:
    method _poll_metrics (line 267) | def _poll_metrics(self):
    method connect (line 334) | def connect(self):
    method parse_multipart (line 368) | def parse_multipart(self, parts: list[bytes]) -> dict | None:
    method handle_event (line 425) | def handle_event(self, event_data: dict):
    method run (line 528) | def run(self, duration: float | None = None):
    method stop (line 578) | def stop(self):
  function run_self_test (line 598) | def run_self_test():
  function run_live_test (line 727) | def run_live_test(api_url: str, metrics_url: str, model: str, num_unique...
  function main (line 907) | def main():

FILE: packages/nvidia_nat_a2a/src/nat/plugins/a2a/auth/credential_service.py
  class A2ACredentialService (line 40) | class A2ACredentialService(CredentialService):
    method __init__ (line 59) | def __init__(
    method get_credentials (line 72) | async def get_credentials(
    method _authenticate (line 119) | async def _authenticate(self, user_id: str | None) -> AuthResult | None:
    method _extract_credential_for_scheme (line 167) | def _extract_credential_for_scheme(self, auth_result: AuthResult, secu...
    method _get_scheme_definition (line 215) | def _get_scheme_definition(self, scheme_name: str) -> SecurityScheme |...
    method _validate_provider_compatibility (line 229) | def _validate_provider_compatibility(self) -> None:
    method _is_provider_compatible_with_scheme (line 271) | def _is_provider_compatible_with_scheme(self, scheme: SecurityScheme) ...
    method _is_bearer_compatible (line 305) | def _is_bearer_compatible(scheme_def: SecurityScheme | None) -> bool:
    method _is_header_compatible (line 334) | def _is_header_compatible(scheme_def: SecurityScheme | None, header_na...
    method _is_query_compatible (line 357) | def _is_query_compatible(scheme_def: SecurityScheme | None, param_name...
    method _is_cookie_compatible (line 379) | def _is_cookie_compatible(scheme_def: SecurityScheme | None, cookie_na...
    method _is_basic_compatible (line 401) | def _is_basic_compatible(scheme_def: SecurityScheme | None) -> bool:

FILE: packages/nvidia_nat_a2a/src/nat/plugins/a2a/cli/commands.py
  function a2a_command (line 30) | def a2a_command():
  function a2a_client_command (line 45) | def a2a_client_command():
  function discover_agent (line 58) | async def discover_agent(url: str, timeout: int = 30):
  function format_agent_card_display (line 91) | def format_agent_card_display(agent_card, verbose: bool = False):
  function a2a_client_discover (line 181) | def a2a_client_discover(url: str, json_output: bool, verbose: bool, save...
  function _create_bearer_token_auth (line 239) | async def _create_bearer_token_auth(
  function _load_auth_from_config (line 273) | async def _load_auth_from_config(
  function _create_auth_from_json (line 311) | async def _create_auth_from_json(
  function get_a2a_function_group (line 336) | async def get_a2a_function_group(
  function format_info_display (line 398) | def format_info_display(info: dict):
  function format_skills_display (line 420) | def format_skills_display(skills_data: dict):
  function format_call_response_display (line 451) | def format_call_response_display(message: str, response: str, elapsed: f...
  function a2a_client_get_info (line 470) | def a2a_client_get_info(url: str, json_output: bool, timeout: int, user_...
  function a2a_client_get_skills (line 524) | def a2a_client_get_skills(url: str, json_output: bool, timeout: int, use...
  function a2a_client_call (line 587) | def a2a_client_call(url: str,

FILE: packages/nvidia_nat_a2a/src/nat/plugins/a2a/client/client_base.py
  class A2ABaseClient (line 44) | class A2ABaseClient:
    method __init__ (line 56) | def __init__(
    method base_url (line 75) | def base_url(self) -> str:
    method agent_card (line 79) | def agent_card(self) -> AgentCard | None:
    method __aenter__ (line 82) | async def __aenter__(self):
    method __aexit__ (line 122) | async def __aexit__(self, exc_type, exc_value, traceback):
    method _resolve_agent_card (line 143) | async def _resolve_agent_card(self):
    method send_message (line 160) | async def send_message(self,
    method get_task (line 190) | async def get_task(self, task_id: str, history_length: int | None = No...
    method cancel_task (line 210) | async def cancel_task(self, task_id: str) -> Task:
    method send_message_streaming (line 229) | async def send_message_streaming(self,
    method extract_text_from_parts (line 250) | def extract_text_from_parts(self, parts: list) -> list[str]:
    method extract_text_from_task (line 274) | def extract_text_from_task(self, task) -> str:
    method extract_text_from_events (line 324) | def extract_text_from_events(self, events: list) -> str:

FILE: packages/nvidia_nat_a2a/src/nat/plugins/a2a/client/client_config.py
  class A2AClientConfig (line 25) | class A2AClientConfig(FunctionGroupBaseConfig, name="a2a_client"):

FILE: packages/nvidia_nat_a2a/src/nat/plugins/a2a/client/client_impl.py
  class GetTaskInput (line 37) | class GetTaskInput(BaseModel):
  class CancelTaskInput (line 43) | class CancelTaskInput(BaseModel):
  class SendMessageInput (line 48) | class SendMessageInput(BaseModel):
  class A2AClientFunctionGroup (line 55) | class A2AClientFunctionGroup(FunctionGroup):
    method __init__ (line 62) | def __init__(self, config: A2AClientConfig, builder: Builder):
    method __aenter__ (line 68) | async def __aenter__(self):
    method _register_functions (line 109) | def _register_functions(self):
    method __aexit__ (line 175) | async def __aexit__(self, exc_type, exc_value, traceback):
    method _format_main_function_description (line 182) | def _format_main_function_description(self, agent_card) -> str:
    method _create_high_level_function (line 204) | def _create_high_level_function(self):
    method _get_skills (line 226) | async def _get_skills(self, params: dict | None = None) -> dict:
    method _get_agent_info (line 244) | async def _get_agent_info(self, params: dict | None = None) -> dict:
    method _wrap_get_task (line 262) | async def _wrap_get_task(self, params: GetTaskInput) -> Any:
    method _wrap_cancel_task (line 268) | async def _wrap_cancel_task(self, params: CancelTaskInput) -> Any:
    method _send_message_advanced (line 274) | async def _send_message_advanced(self, params: SendMessageInput) -> list:
    method _send_message_streaming (line 292) | async def _send_message_streaming(self, params: SendMessageInput) -> A...
  function a2a_client_function_group (line 312) | async def a2a_client_function_group(config: A2AClientConfig, _builder: B...

FILE: packages/nvidia_nat_a2a/src/nat/plugins/a2a/server/agent_executor_adapter.py
  class NATWorkflowAgentExecutor (line 36) | class NATWorkflowAgentExecutor(AgentExecutor):
    method __init__ (line 52) | def __init__(self, session_manager: SessionManager):
    method execute (line 63) | async def execute(
    method _validate_request (line 138) | def _validate_request(self, context: RequestContext) -> bool:
    method cancel (line 154) | async def cancel(

FILE: packages/nvidia_nat_a2a/src/nat/plugins/a2a/server/front_end_config.py
  class A2ACapabilitiesConfig (line 29) | class A2ACapabilitiesConfig(BaseModel):
  class A2AFrontEndConfig (line 42) | class A2AFrontEndConfig(FrontEndBaseConfig, name="a2a"):
    method validate_security_configuration (line 125) | def validate_security_configuration(self):

FILE: packages/nvidia_nat_a2a/src/nat/plugins/a2a/server/front_end_plugin.py
  class A2AFrontEndPlugin (line 28) | class A2AFrontEndPlugin(FrontEndBase[A2AFrontEndConfig]):
    method run (line 35) | async def run(self) -> None:
    method _get_worker_instance (line 107) | def _get_worker_instance(self) -> A2AFrontEndPluginWorker:

FILE: packages/nvidia_nat_a2a/src/nat/plugins/a2a/server/front_end_plugin_worker.py
  class A2AFrontEndPluginWorker (line 40) | class A2AFrontEndPluginWorker:
    method __init__ (line 43) | def __init__(self, config: Config):
    method _get_all_functions (line 59) | async def _get_all_functions(self, workflow: Workflow) -> dict[str, Fu...
    method _generate_security_schemes (line 77) | async def _generate_security_schemes(
    method _resolve_oauth_endpoints (line 116) | async def _resolve_oauth_endpoints(self, server_auth_config) -> tuple[...
    method create_agent_card (line 152) | async def create_agent_card(self, workflow: Workflow) -> AgentCard:
    method _resolve_agent_url (line 227) | def _resolve_agent_url(self) -> str:
    method create_agent_executor (line 234) | def create_agent_executor(self, workflow: Workflow, builder: WorkflowB...
    method create_a2a_server (line 259) | def create_a2a_server(
    method cleanup (line 305) | async def cleanup(self) -> None:

FILE: packages/nvidia_nat_a2a/src/nat/plugins/a2a/server/oauth_middleware.py
  class OAuth2ValidationMiddleware (line 29) | class OAuth2ValidationMiddleware(BaseHTTPMiddleware):
    method __init__ (line 42) | def __init__(self, app, config: OAuth2ResourceServerConfig):
    method dispatch (line 70) | async def dispatch(self, request: Request, call_next):

FILE: packages/nvidia_nat_a2a/src/nat/plugins/a2a/server/register_frontend.py
  function register_a2a_front_end (line 25) | async def register_a2a_front_end(_config: A2AFrontEndConfig, full_config...

FILE: packages/nvidia_nat_a2a/tests/auth/test_credential_service.py
  class MockAuthProvider (line 50) | class MockAuthProvider(AuthProviderBase):
    method __init__ (line 53) | def __init__(self, auth_result: AuthResult | None = None):
    method authenticate (line 58) | async def authenticate(self, user_id: str | None = None, **kwargs) -> ...
  function mock_auth_provider (line 66) | def mock_auth_provider():
  function oauth2_scheme (line 93) | def oauth2_scheme():
  function oidc_scheme (line 106) | def oidc_scheme():
  function http_bearer_scheme (line 115) | def http_bearer_scheme():
  function api_key_scheme (line 121) | def api_key_scheme():
  function http_basic_scheme (line 131) | def http_basic_scheme():
  function sample_agent_card (line 137) | def sample_agent_card():
  function test_bearer_token_mapping (line 170) | async def test_bearer_token_mapping(
  function test_header_credential_with_api_key_scheme (line 199) | async def test_header_credential_with_api_key_scheme(api_key_scheme, moc...
  function test_token_expiration_triggers_reauthentication (line 221) | async def test_token_expiration_triggers_reauthentication(oauth2_scheme,...
  function test_credential_caching (line 258) | async def test_credential_caching(oauth2_scheme, mock_auth_provider, sam...
  function test_user_id_from_context (line 284) | async def test_user_id_from_context(oauth2_scheme, mock_auth_provider, s...
  function test_missing_security_scheme_returns_none (line 314) | async def test_missing_security_scheme_returns_none(mock_auth_provider, ...
  function test_authentication_failure_returns_none (line 330) | async def test_authentication_failure_returns_none(oauth2_scheme, mock_a...
  function test_provider_validation (line 360) | def test_provider_validation(provider_name,
  function test_validation_skipped_when_no_schemes (line 398) | def test_validation_skipped_when_no_schemes(agent_card_config, mock_auth...

FILE: packages/nvidia_nat_a2a/tests/cli/test_cli.py
  function test_a2a_plugin_discovered (line 19) | def test_a2a_plugin_discovered():

FILE: packages/nvidia_nat_a2a/tests/client/conftest.py
  function fixture_sample_agent_card (line 32) | def fixture_sample_agent_card() -> AgentCard:
  function fixture_mock_a2a_client (line 77) | def fixture_mock_a2a_client(sample_agent_card: AgentCard) -> AsyncMock:
  function fixture_a2a_function_group (line 110) | async def fixture_a2a_function_group(

FILE: packages/nvidia_nat_a2a/tests/client/test_client_function_group.py
  class TestA2AClientFunctionGroup (line 20) | class TestA2AClientFunctionGroup:
    method test_all_api_levels_registered (line 23) | async def test_all_api_levels_registered(self, a2a_function_group):
    method test_function_naming_conventions (line 49) | async def test_function_naming_conventions(self, a2a_function_group):
    method test_function_group_in_workflow (line 79) | async def test_function_group_in_workflow(self, a2a_function_group):
    method test_function_signatures_correct (line 99) | async def test_function_signatures_correct(self, a2a_function_group):
    method test_helper_functions_return_correct_types (line 126) | async def test_helper_functions_return_correct_types(self, a2a_functio...

FILE: packages/nvidia_nat_a2a/tests/client/test_client_functionality.py
  class TestA2AClientFunctionality (line 25) | class TestA2AClientFunctionality:
    method test_client_discovers_agent_skills (line 28) | async def test_client_discovers_agent_skills(self, a2a_function_group):
    method test_client_invokes_high_level_call (line 66) | async def test_client_invokes_high_level_call(self, a2a_function_group):
    method test_skills_embedded_when_enabled (line 91) | async def test_skills_embedded_when_enabled(self, sample_agent_card, m...
    method test_skills_not_embedded_when_disabled (line 126) | async def test_skills_not_embedded_when_disabled(self, sample_agent_ca...
    method test_get_info_returns_agent_metadata (line 159) | async def test_get_info_returns_agent_metadata(self, a2a_function_group):
    method test_client_connection_configuration (line 190) | async def test_client_connection_configuration(self, sample_agent_card...
    method test_client_timeout_configuration (line 223) | async def test_client_timeout_configuration(self, sample_agent_card, m...
    method test_multiple_functions_accessible (line 254) | async def test_multiple_functions_accessible(self, a2a_function_group):

FILE: packages/nvidia_nat_a2a/tests/conftest.py
  class MockUserContext (line 20) | class MockUserContext:
  function fixture_mock_user_context (line 31) | def fixture_mock_user_context() -> MockUserContext:

FILE: packages/nvidia_nat_a2a/tests/server/conftest.py
  function fixture_mock_workflow_builder (line 27) | def fixture_mock_workflow_builder() -> MagicMock:
  function fixture_mock_workflow_with_functions (line 33) | def fixture_mock_workflow_with_functions() -> MagicMock:
  function fixture_a2a_server_config (line 63) | def fixture_a2a_server_config() -> Config:

FILE: packages/nvidia_nat_a2a/tests/server/test_agent_card_generation.py
  class TestAgentCardGeneration (line 23) | class TestAgentCardGeneration:
    method test_agent_card_includes_all_functions (line 30) | async def test_agent_card_includes_all_functions(self, mock_workflow_w...
    method test_skill_names_formatted_correctly (line 48) | async def test_skill_names_formatted_correctly(self, mock_workflow_wit...
    method test_skill_descriptions_from_functions (line 70) | async def test_skill_descriptions_from_functions(self, mock_workflow_w...
    method test_agent_card_metadata_from_config (line 86) | async def test_agent_card_metadata_from_config(self, mock_workflow_wit...
    method test_agent_card_url_generation (line 99) | async def test_agent_card_url_generation(self, mock_workflow_with_func...
    method test_agent_card_url_uses_public_base_url_when_configured (line 111) | async def test_agent_card_url_uses_public_base_url_when_configured(sel...
    method test_agent_card_capabilities_from_config (line 127) | async def test_agent_card_capabilities_from_config(self, mock_workflow...
    method test_empty_workflow_creates_valid_card (line 141) | async def test_empty_workflow_creates_valid_card(self, a2a_server_conf...

FILE: packages/nvidia_nat_a2a/tests/server/test_oauth_middleware.py
  function rsa_private_pem (line 46) | def rsa_private_pem() -> str:
  function jwks_dict (line 58) | def jwks_dict(rsa_private_pem: str) -> dict[str, Any]:
  function make_jwt (line 77) | def make_jwt(
  function oauth_config (line 106) | def oauth_config() -> OAuth2ResourceServerConfig:
  function protected_app (line 117) | def protected_app(oauth_config: OAuth2ResourceServerConfig):
  class TestPublicEndpoints (line 149) | class TestPublicEndpoints:
    method test_agent_card_accessible_without_token (line 152) | def test_agent_card_accessible_without_token(self, protected_app):
    method test_agent_card_accessible_with_invalid_token (line 160) | def test_agent_card_accessible_with_invalid_token(self, protected_app):
  class TestProtectedEndpoints (line 177) | class TestProtectedEndpoints:
    method test_missing_authorization_header (line 180) | def test_missing_authorization_header(self, protected_app):
    method test_invalid_authorization_format (line 189) | def test_invalid_authorization_format(self, protected_app):
    method test_empty_bearer_token (line 197) | def test_empty_bearer_token(self, protected_app):
  class TestTokenValidation (line 211) | class TestTokenValidation:
    method test_valid_token_accepted (line 215) | async def test_valid_token_accepted(self, mock_verify, protected_app, ...
    method test_expired_token_rejected (line 238) | async def test_expired_token_rejected(self, mock_verify, protected_app...
    method test_invalid_signature_rejected (line 254) | async def test_invalid_signature_rejected(self, mock_verify, protected...
    method test_wrong_issuer_rejected (line 268) | async def test_wrong_issuer_rejected(self, mock_verify, protected_app,...
    method test_inactive_token_rejected (line 283) | async def test_inactive_token_rejected(self, mock_verify, protected_ap...
  class TestScopeAndAudienceValidation (line 310) | class TestScopeAndAudienceValidation:
    method test_missing_required_scopes_rejected (line 314) | async def test_missing_required_scopes_rejected(self, mock_verify, pro...
    method test_wrong_audience_rejected (line 337) | async def test_wrong_audience_rejected(self, mock_verify, protected_ap...
    method test_correct_scopes_and_audience_accepted (line 350) | async def test_correct_scopes_and_audience_accepted(self, mock_verify,...
  class TestRequestStatePopulation (line 376) | class TestRequestStatePopulation:
    method test_request_state_populated_correctly (line 380) | async def test_request_state_populated_correctly(self, mock_verify, pr...
    method test_request_state_with_no_scopes (line 413) | async def test_request_state_with_no_scopes(self, mock_verify, protect...
  class TestConfigurationVariations (line 440) | class TestConfigurationVariations:
    method test_middleware_without_audience_validation (line 444) | async def test_middleware_without_audience_validation(self, mock_verif...
    method test_middleware_without_scope_validation (line 478) | async def test_middleware_without_scope_validation(self, mock_verify, ...

FILE: packages/nvidia_nat_a2a/tests/server/test_server_functionality.py
  class TestA2AServerFunctionality (line 21) | class TestA2AServerFunctionality:
    method test_server_plugin_initialization (line 29) | async def test_server_plugin_initialization(self, a2a_server_config):
    method test_worker_extracts_all_functions (line 42) | async def test_worker_extracts_all_functions(self, mock_workflow_with_...
    method test_agent_executor_creation (line 61) | async def test_agent_executor_creation(self, mock_workflow_with_functi...
    method test_a2a_server_creation (line 78) | async def test_a2a_server_creation(self, mock_workflow_with_functions,...
    method test_worker_config_access (line 99) | async def test_worker_config_access(self, a2a_server_config):
    method test_function_to_skill_transformation (line 111) | async def test_function_to_skill_transformation(self, mock_workflow_wi...
    method test_agent_protocol_version (line 130) | async def test_agent_protocol_version(self, mock_workflow_with_functio...

FILE: packages/nvidia_nat_adk/src/nat/plugins/adk/adk_parser.py
  function parse_to_openai_message (line 31) | def parse_to_openai_message(message: IntermediateStep) -> dict:  # noqa:...
  function _parse_input_message (line 61) | def _parse_input_message(message: IntermediateStep) -> dict | list[dict]:
  function _parse_assistant_message (line 88) | def _parse_assistant_message(message: IntermediateStep) -> dict:
  function _parse_tool_message (line 122) | def _parse_tool_message(message: IntermediateStep) -> dict:

FILE: packages/nvidia_nat_adk/src/nat/plugins/adk/callback_handler.py
  class ADKProfilerHandler (line 36) | class ADKProfilerHandler(BaseProfilerCallback):
    method __new__ (line 48) | def __new__(cls):
    method __init__ (line 54) | def __init__(self):
    method instrument (line 64) | def instrument(self) -> None:
    method uninstrument (line 95) | def uninstrument(self) -> None:
    method ensure_last_call_ts_initialized (line 116) | def ensure_last_call_ts_initialized(self) -> float:
    method _tool_use_monkey_patch (line 125) | def _tool_use_monkey_patch(self) -> Callable[..., Any]:
    method _llm_call_monkey_patch (line 209) | def _llm_call_monkey_patch(self) -> Callable[..., Any]:

FILE: packages/nvidia_nat_adk/src/nat/plugins/adk/llm.py
  function azure_openai_adk (line 34) | async def azure_openai_adk(config: AzureOpenAIModelConfig, _builder: Bui...
  function litellm_adk (line 74) | async def litellm_adk(litellm_config: LiteLlmModelConfig, _builder: Buil...
  function nim_adk (line 89) | async def nim_adk(config: NIMModelConfig, _builder: Builder):
  function openai_adk (line 123) | async def openai_adk(config: OpenAIModelConfig, _builder: Builder):
  function dynamo_adk (line 164) | async def dynamo_adk(config: DynamoModelConfig, _builder: Builder):

FILE: packages/nvidia_nat_adk/src/nat/plugins/adk/tool_wrapper.py
  function resolve_type (line 35) | def resolve_type(t: Any) -> Any:
  function google_adk_tool_wrapper (line 55) | def google_adk_tool_wrapper(

FILE: packages/nvidia_nat_adk/tests/test_adk_callback_handler.py
  function reset_patches (line 34) | def reset_patches():
  function mock_context (line 50) | def mock_context():
  function handler (line 61) | def handler(mock_context: MagicMock) -> ADKProfilerHandler:
  function test_no_double_patching (line 71) | def test_no_double_patching():
  function test_uninstrument_restores_originals (line 80) | def test_uninstrument_restores_originals():
  function test_adk_profiler_handler_initialization (line 99) | def test_adk_profiler_handler_initialization(handler, mock_context):
  function test_instrument_patches_litellm (line 109) | def test_instrument_patches_litellm(mock_acompletion, handler):
  function test_llm_call_monkey_patch (line 127) | async def test_llm_call_monkey_patch(mock_acompletion, handler, mock_con...
  function test_tool_use_monkey_patch_functionality (line 177) | async def test_tool_use_monkey_patch_functionality(handler, mock_context):
  function test_tool_use_monkey_patch_with_exception (line 221) | async def test_tool_use_monkey_patch_with_exception(handler, mock_context):
  function test_tool_use_monkey_patch_tool_name_error (line 248) | async def test_tool_use_monkey_patch_tool_name_error(handler, mock_conte...
  function test_llm_call_monkey_patch_with_multiple_messages (line 276) | async def test_llm_call_monkey_patch_with_multiple_messages(mock_acomple...
  function test_handler_inheritance (line 327) | def test_handler_inheritance(handler):
  function test_handler_thread_safety (line 332) | def test_handler_thread_safety(handler):
  function test_last_call_timestamp_initialization (line 339) | def test_last_call_timestamp_initialization(handler):

FILE: packages/nvidia_nat_adk/tests/test_adk_llm.py
  function litellm_config (line 33) | def litellm_config():
  function minimal_litellm_config (line 42) | def minimal_litellm_config():
  function test_litellm_adk_with_full_config (line 53) | async def test_litellm_adk_with_full_config(mock_litellm_class, litellm_...
  function test_litellm_adk_config_exclusion (line 73) | async def test_litellm_adk_config_exclusion(mock_litellm_class, mock_bui...
  function test_litellm_adk_is_generator (line 103) | async def test_litellm_adk_is_generator(mock_litellm_class, litellm_conf...
  function test_litellm_verify_ssl (line 126) | async def test_litellm_verify_ssl(mock_litellm_class, mock_handle_verify...
  function test_litellm_adk_decorator_registration (line 136) | async def test_litellm_adk_decorator_registration():
  class TestDynamoAdk (line 164) | class TestDynamoAdk:
    method dynamo_cfg_no_prefix (line 168) | def dynamo_cfg_no_prefix(self) -> DynamoModelConfig:
    method dynamo_cfg_with_prefix (line 177) | def dynamo_cfg_with_prefix(self) -> DynamoModelConfig:
    method test_basic_creation_without_prefix (line 190) | async def test_basic_creation_without_prefix(self,
    method test_creation_with_nvext_hints_enabled (line 213) | async def test_creation_with_nvext_hints_enabled(self,
    method test_dynamo_verify_ssl (line 232) | async def test_dynamo_verify_ssl(self, mock_httpx_async_client, verify...
    method test_excludes_dynamo_specific_fields (line 247) | async def test_excludes_dynamo_specific_fields(self,
    method test_client_passed_per_instance (line 280) | async def test_client_passed_per_instance(self, mock_litellm_class, mo...
    method test_dynamo_adk_decorator_registration (line 296) | async def test_dynamo_adk_decorator_registration(self):

FILE: packages/nvidia_nat_adk/tests/test_adk_parser.py
  function create_intermediate_step (line 32) | def create_intermediate_step(
  class TestParseToOpenAIMessage (line 55) | class TestParseToOpenAIMessage:
    method test_routes_llm_end_to_assistant_parser (line 58) | def test_routes_llm_end_to_assistant_parser(self):
    method test_routes_tool_end_to_tool_parser (line 75) | def test_routes_tool_end_to_tool_parser(self):
    method test_routes_llm_start_to_input_parser (line 85) | def test_routes_llm_start_to_input_parser(self):
    method test_routes_other_types_to_generic_parser (line 94) | def test_routes_other_types_to_generic_parser(self):
  class TestParseInputMessage (line 104) | class TestParseInputMessage:
    method test_parse_empty_payload (line 107) | def test_parse_empty_payload(self):
    method test_parse_single_dict_message_with_role_and_content (line 115) | def test_parse_single_dict_message_with_role_and_content(self):
    method test_parse_single_dict_message_missing_role (line 123) | def test_parse_single_dict_message_missing_role(self):
    method test_parse_single_non_dict_message (line 132) | def test_parse_single_non_dict_message(self):
    method test_parse_multiple_messages (line 140) | def test_parse_multiple_messages(self):
    method test_parse_multiple_mixed_messages (line 158) | def test_parse_multiple_mixed_messages(self):
  class TestParseAssistantMessage (line 179) | class TestParseAssistantMessage:
    method test_parse_assistant_with_content (line 182) | def test_parse_assistant_with_content(self):
    method test_parse_assistant_with_tool_calls (line 196) | def test_parse_assistant_with_tool_calls(self):
    method test_parse_assistant_with_logprobs (line 211) | def test_parse_assistant_with_logprobs(self):
    method test_parse_assistant_with_none_content (line 227) | def test_parse_assistant_with_none_content(self):
    method test_parse_assistant_no_payload (line 241) | def test_parse_assistant_no_payload(self):
    method test_parse_assistant_empty_data (line 248) | def test_parse_assistant_empty_data(self):
  class TestParseToolMessage (line 257) | class TestParseToolMessage:
    method test_parse_tool_with_output (line 260) | def test_parse_tool_with_output(self):
    method test_parse_tool_with_payload_fallback (line 270) | def test_parse_tool_with_payload_fallback(self):
    method test_parse_tool_no_content (line 280) | def test_parse_tool_no_content(self):
    method test_parse_tool_no_name (line 290) | def test_parse_tool_no_name(self):
    method test_parse_tool_no_data (line 300) | def test_parse_tool_no_data(self):
  class TestParseGenericMessage (line 309) | class TestParseGenericMessage:
    method test_parse_generic_with_output (line 312) | def test_parse_generic_with_output(self):
    method test_parse_generic_with_input_fallback (line 321) | def test_parse_generic_with_input_fallback(self):
    method test_parse_generic_with_chunk_fallback (line 330) | def test_parse_generic_with_chunk_fallback(self):
    method test_parse_generic_no_content (line 339) | def test_parse_generic_no_content(self):
    method test_parse_generic_no_data (line 348) | def test_parse_generic_no_data(self):
  class TestExtractContent (line 357) | class TestExtractContent:
    method test_extract_string (line 360) | def test_extract_string(self):
    method test_extract_empty_string (line 364) | def test_extract_empty_string(self):
    method test_extract_from_dict_with_content (line 368) | def test_extract_from_dict_with_content(self):
    method test_extract_from_dict_with_text (line 373) | def test_extract_from_dict_with_text(self):
    method test_extract_from_dict_with_message (line 378) | def test_extract_from_dict_with_message(self):
    method test_extract_from_dict_with_output (line 383) | def test_extract_from_dict_with_output(self):
    method test_extract_from_dict_fallback_to_json (line 388) | def test_extract_from_dict_fallback_to_json(self):
    method test_extract_from_dict_with_blocks (line 395) | def test_extract_from_dict_with_blocks(self):
    method test_extract_from_dict_with_mixed_blocks (line 401) | def test_extract_from_dict_with_mixed_blocks(self):
    method test_extract_from_string_list (line 408) | def test_extract_from_string_list(self):
    method test_extract_from_mixed_list (line 414) | def test_extract_from_mixed_list(self):
    method test_extract_from_object_with_content_attr (line 423) | def test_extract_from_object_with_content_attr(self):
    method test_extract_from_object_with_text_attr (line 430) | def test_extract_from_object_with_text_attr(self):
    method test_extract_fallback_to_str (line 436) | def test_extract_fallback_to_str(self):
    method test_extract_none (line 441) | def test_extract_none(self):
    method test_extract_boolean (line 445) | def test_extract_boolean(self):
    method test_extract_nested_dict_content (line 450) | def test_extract_nested_dict_content(self):

FILE: packages/nvidia_nat_adk/tests/test_adk_tool_wrapper.py
  class DummyInput (line 31) | class DummyInput(BaseModel):
  class DummyOutput (line 35) | class DummyOutput(BaseModel):
  class InnerModel (line 39) | class InnerModel(BaseModel):
  class OuterModel (line 43) | class OuterModel(BaseModel):
  class NestedOutput (line 48) | class NestedOutput(BaseModel):
  class DummyFunction (line 57) | class DummyFunction:
    method __init__ (line 60) | def __init__(self):
    method acall_invoke (line 69) | async def acall_invoke(self, *args, **_kwargs):
  class DummyNestedFunction (line 74) | class DummyNestedFunction:
    method __init__ (line 77) | def __init__(self):
    method acall_invoke (line 86) | async def acall_invoke(self, *args, **_kwargs):
  class DummyStreamingFunction (line 91) | class DummyStreamingFunction:
    method __init__ (line 94) | def __init__(self):
    method acall_stream (line 103) | async def acall_stream(self, *args, **_kwargs):
    method _astream (line 116) | async def _astream(self, value: Any):
  function test_resolve_type (line 133) | def test_resolve_type():
  function test_google_adk_tool_wrapper_simple_function (line 153) | async def test_google_adk_tool_wrapper_simple_function(mock_function_tool):
  function test_google_adk_tool_wrapper_nested_function (line 176) | async def test_google_adk_tool_wrapper_nested_function(mock_function_tool):
  function test_google_adk_tool_wrapper_streaming_function (line 199) | async def test_google_adk_tool_wrapper_streaming_function(mock_function_...
  function test_callable_ainvoke_functionality (line 221) | async def test_callable_ainvoke_functionality():

FILE: packages/nvidia_nat_agno/src/nat/plugins/agno/callback_handler.py
  class AgnoProfilerHandler (line 39) | class AgnoProfilerHandler(BaseProfilerCallback):
    method __init__ (line 50) | def __init__(self) -> None:
    method instrument (line 60) | def instrument(self) -> None:
    method _tool_execute_monkey_patch (line 92) | def _tool_execute_monkey_patch(self) -> Callable[..., Any]:
    method _llm_call_monkey_patch (line 152) | def _llm_call_monkey_patch(self) -> Callable[..., Any]:

FILE: packages/nvidia_nat_agno/src/nat/plugins/agno/llm.py
  function _patch_llm_based_on_config (line 41) | def _patch_llm_based_on_config(client: ModelType, llm_config: LLMBaseCon...
  function nim_agno (line 84) | async def nim_agno(llm_config: NIMModelConfig, _builder: Builder):
  function openai_agno (line 116) | async def openai_agno(llm_config: OpenAIModelConfig, _builder: Builder):
  function litellm_agno (line 158) | async def litellm_agno(llm_config: LiteLlmModelConfig, _builder: Builder):

FILE: packages/nvidia_nat_agno/src/nat/plugins/agno/tool_wrapper.py
  function process_result (line 42) | async def process_result(result: Any, name: str) -> str:
  function execute_agno_tool (line 133) | def execute_agno_tool(name: str,
  function agno_tool_wrapper (line 293) | def agno_tool_wrapper(name: str, fn: Function, builder: Builder):

FILE: packages/nvidia_nat_agno/src/nat/plugins/agno/tools/serp_api_tool.py
  class SerpApiToolConfig (line 32) | class SerpApiToolConfig(FunctionBaseConfig, name="serp_api_tool"):
  function serp_api_tool (line 42) | async def serp_api_tool(tool_config: SerpApiToolConfig, builder: Builder):

FILE: packages/nvidia_nat_agno/tests/test_agno_callback_handler.py
  function test_agno_handler_llm_call (line 30) | async def test_agno_handler_llm_call(reactive_stream: Subject):
  function test_agno_handler_tool_execution (line 222) | async def test_agno_handler_tool_execution(reactive_stream: Subject):

FILE: packages/nvidia_nat_agno/tests/test_llm_agno.py
  class TestNimAgno (line 31) | class TestNimAgno:
    method nim_config (line 35) | def nim_config(self):
    method nim_config_responses (line 40) | def nim_config_responses(self):
    method test_nim_agno_basic (line 45) | async def test_nim_agno_basic(self, mock_nvidia, nim_config, mock_buil...
    method test_nim_agno_responses (line 58) | async def test_nim_agno_responses(self, mock_nvidia, nim_config_respon...
    method test_nim_agno_with_base_url (line 69) | async def test_nim_agno_with_base_url(self, mock_nvidia, nim_config, m...
    method test_nim_agno_with_env_var (line 88) | async def test_nim_agno_with_env_var(self, mock_nvidia, nim_config, mo...
    method test_nim_agno_with_existing_env_var (line 107) | async def test_nim_agno_with_existing_env_var(self, mock_nvidia, nim_c...
    method test_nim_agno_without_api_key (line 123) | async def test_nim_agno_without_api_key(self, mock_nvidia, nim_config,...
    method test_nim_agno_verify_ssl_passed_to_client (line 136) | async def test_nim_agno_verify_ssl_passed_to_client(self,
  class TestOpenAIAgno (line 149) | class TestOpenAIAgno:
    method openai_config (line 153) | def openai_config(self):
    method openai_responses_config (line 158) | def openai_responses_config(self):
    method test_openai_agno (line 163) | async def test_openai_agno(self, mock_openai_chat, openai_config, mock...
    method test_openai_agno_responses (line 178) | async def test_openai_agno_responses(self, mock_openai_responses, open...
    method test_openai_agno_with_additional_params (line 193) | async def test_openai_agno_with_additional_params(self, mock_openai_ch...
    method test_registration_decorators (line 216) | def test_registration_decorators(self, mock_global_registry):
    method test_openai_agno_without_model_field (line 237) | async def test_openai_agno_without_model_field(self, mock_openai_chat,...
    method test_openai_agno_verify_ssl_passed_to_client (line 253) | async def test_openai_agno_verify_ssl_passed_to_client(self,

FILE: packages/nvidia_nat_agno/tests/test_tool_wrapper.py
  function fixture_run_loop_thread (line 34) | def fixture_run_loop_thread():
  class TestToolWrapper (line 67) | class TestToolWrapper:
    method mock_event_loop (line 71) | def mock_event_loop(self):
    method mock_function (line 77) | def mock_function(self):
    method mock_model_schema_function (line 91) | def mock_model_schema_function(self):
    method test_agno_tool_wrapper (line 117) | def test_agno_tool_wrapper(self, mock_tool, mock_function, mock_builder):
    method test_agno_tool_wrapper_with_schema_description (line 133) | def test_agno_tool_wrapper_with_schema_description(self, mock_tool, mo...
    method test_wrapper_function (line 151) | def test_wrapper_function(self, mock_tool, mock_execute_agno_tool, moc...
    method test_event_loop_is_accessed (line 172) | def test_event_loop_is_accessed(self, mock_get_running_loop, mock_func...
    method test_create_event_loop_if_none_available (line 191) | def test_create_event_loop_if_none_available(self,
    method test_registration_decorator (line 212) | def test_registration_decorator(self):
    method test_input_schema_validation (line 224) | def test_input_schema_validation(self, mock_builder):
    method test_execute_agno_tool_initialization (line 243) | def test_execute_agno_tool_initialization(self, run_loop_thread: async...
    method test_execute_agno_tool_search_api_empty_query (line 267) | def test_execute_agno_tool_search_api_empty_query(self, run_loop_thread):
    method test_execute_agno_tool_filtered_kwargs (line 284) | def test_execute_agno_tool_filtered_kwargs(self, run_loop_thread: asyn...
    method test_execute_agno_tool_wrapped_kwargs (line 307) | def test_execute_agno_tool_wrapped_kwargs(self, run_loop_thread: async...
    method test_execute_agno_tool_infinite_loop_detection (line 329) | def test_execute_agno_tool_infinite_loop_detection(self, run_loop_thre...
    method test_process_result_string (line 351) | async def test_process_result_string(self):
    method test_process_result_none (line 357) | async def test_process_result_none(self):
    method test_process_result_dict (line 363) | async def test_process_result_dict(self):
    method test_process_result_list_of_dicts (line 373) | async def test_process_result_list_of_dicts(self):
    method test_process_result_object_with_content (line 383) | async def test_process_result_object_with_content(self):
    method test_process_result_openai_style_response (line 393) | async def test_process_result_openai_style_response(self):
    method test_different_calling_styles (line 419) | def test_different_calling_styles(self,

FILE: packages/nvidia_nat_agno/tests/tools/test_serp_api_tool.py
  class MockSerpApiTools (line 32) | class MockSerpApiTools:
    method __init__ (line 34) | def __init__(self, api_key):
    method search_google (line 37) | async def search_google(self, query, num_results):
  class TestSerpApiTool (line 46) | class TestSerpApiTool:
    method tool_config (line 50) | def tool_config(self):
    method mock_serpapi_tools (line 55) | def mock_serpapi_tools(self):
    method mock_search_results (line 62) | def mock_search_results(self):
    method mock_incomplete_search_results (line 78) | def mock_incomplete_search_results(self):
    method test_serp_api_tool_creation (line 96) | async def test_serp_api_tool_creation(self, tool_config, mock_builder):
    method test_serp_api_tool_env_api_key (line 115) | async def test_serp_api_tool_env_api_key(self, mock_builder):
    method test_serp_api_tool_missing_api_key (line 137) | async def test_serp_api_tool_missing_api_key(self, mock_builder):
    method test_serp_api_search_with_query (line 149) | async def test_serp_api_search_with_query(self, tool_config, mock_buil...
    method test_serp_api_search_exception_handling (line 179) | async def test_serp_api_search_exception_handling(self, tool_config, m...
    method test_serp_api_search_result_formatting (line 205) | async def test_serp_api_search_result_formatting(self, tool_config, mo...
    method test_serp_api_search_empty_results (line 239) | async def test_serp_api_search_empty_results(self, tool_config, mock_b...
    method test_serp_api_tool_max_results (line 266) | async def test_serp_api_tool_max_results(self, mock_builder, mock_sear...

FILE: packages/nvidia_nat_app/src/nat_app/__init__.py
  class ExperimentalWarning (line 32) | class ExperimentalWarning(UserWarning):

FILE: packages/nvidia_nat_app/src/nat_app/api.py
  function quick_optimize (line 58) | def quick_optimize(
  function analyze_function (line 105) | def analyze_function(
  function classify_edge (line 168) | def classify_edge(
  function find_parallel_stages (line 205) | def find_parallel_stages(
  function benchmark (line 262) | async def benchmark(
  function speculative_opportunities (line 406) | def speculative_opportunities(

FILE: packages/nvidia_nat_app/src/nat_app/compiler/compilation_context.py
  class CompilationContext (line 57) | class CompilationContext(Generic[_CompiledArtifactType]):
    method graph (line 69) | def graph(self) -> Graph | None:
    method topology (line 74) | def topology(self) -> GraphTopology | None:
    method node_analyses (line 79) | def node_analyses(self) -> dict[str, NodeAnalysis] | None:
    method optimized_order (line 84) | def optimized_order(self) -> list[set[str]] | None:
    method necessary_edges (line 89) | def necessary_edges(self) -> set[tuple[str, str]] | None:
    method unnecessary_edges (line 94) | def unnecessary_edges(self) -> set[tuple[str, str]] | None:

FILE: packages/nvidia_nat_app/src/nat_app/compiler/compilation_stage.py
  class CompilationStage (line 35) | class CompilationStage(Protocol[_CompiledArtifactType]):
    method name (line 44) | def name(self) -> str:
    method apply (line 48) | def apply(

FILE: packages/nvidia_nat_app/src/nat_app/compiler/compiler.py
  class UnsupportedSourceError (line 36) | class UnsupportedSourceError(ValueError):
  class AbstractCompiler (line 45) | class AbstractCompiler(ABC, Generic[_SourceArtifactType, _CompiledArtifa...
    method compile (line 55) | def compile(self, source: _SourceArtifactType, **kwargs: Any) -> _Comp...
    method validate (line 66) | def validate(self, source: _SourceArtifactType) -> bool:
    method export (line 81) | def export(self, compiled: _CompiledArtifactType, path: str | Path, **...
  function compile_with (line 93) | def compile_with(

FILE: packages/nvidia_nat_app/src/nat_app/compiler/default_graph_compiler.py
  class DefaultGraphCompiler (line 64) | class DefaultGraphCompiler(AbstractPipelinedCompiler[Any, Any]):
    method __init__ (line 91) | def __init__(
    method default_stages (line 101) | def default_stages(self) -> Sequence[CompilationStage]:
    method prepare (line 116) | def prepare(self, source: Any, **kwargs: Any) -> Any:
    method finalize (line 129) | def finalize(
    method compile_to_result (line 146) | def compile_to_result(self, source: Any, **kwargs: Any) -> Any:
    method append_stage (line 162) | def append_stage(self, stage: CompilationStage) -> None:
    method insert_stage_after (line 173) | def insert_stage_after(self, after_name: str, stage: CompilationStage)...
  function context_to_result (line 191) | def context_to_result(context: CompilationContext) -> TransformationResult:

FILE: packages/nvidia_nat_app/src/nat_app/compiler/errors.py
  class GraphValidationError (line 20) | class GraphValidationError(ValueError):
    method __init__ (line 23) | def __init__(self, issues: list[str]) -> None:

FILE: packages/nvidia_nat_app/src/nat_app/compiler/optimizer.py
  class GraphOptimizer (line 49) | class GraphOptimizer:
    method __init__ (line 64) | def __init__(
    method optimize (line 72) | def optimize(self, source: Any) -> TransformationResult:
    method optimize_and_build (line 92) | def optimize_and_build(self, source: Any) -> Any:

FILE: packages/nvidia_nat_app/src/nat_app/compiler/pipelined_compiler.py
  class AbstractPipelinedCompiler (line 37) | class AbstractPipelinedCompiler(
    method __init__ (line 53) | def __init__(
    method default_stages (line 62) | def default_stages(self) -> Sequence[CompilationStage[_CompiledArtifac...
    method prepare (line 71) | def prepare(
    method seed_context (line 88) | def seed_context(
    method finalize (line 101) | def finalize(
    method stages (line 119) | def stages(self) -> tuple[CompilationStage[_CompiledArtifactType], ...]:
    method last_context (line 124) | def last_context(self) -> CompilationContext[_CompiledArtifactType] | ...
    method compile (line 128) | def compile(

FILE: packages/nvidia_nat_app/src/nat_app/constraints/decorators.py
  function _get_or_create_constraints (line 24) | def _get_or_create_constraints(func: Callable) -> NodeConstraints:
  function sequential (line 29) | def sequential(reason: str | None = None) -> Callable:
  function depends_on (line 60) | def depends_on(*node_names: str, reason: str | None = None) -> Callable:
  function has_side_effects (line 91) | def has_side_effects(reason: str | None = None) -> Callable:

FILE: packages/nvidia_nat_app/src/nat_app/constraints/models.py
  class NodeConstraints (line 24) | class NodeConstraints:
  class ResolvedConstraints (line 35) | class ResolvedConstraints:
  class OptimizationConfig (line 47) | class OptimizationConfig:
    method conservative (line 88) | def conservative(cls) -> OptimizationConfig:
    method aggressive (line 97) | def aggressive(cls) -> OptimizationConfig:

FILE: packages/nvidia_nat_app/src/nat_app/constraints/resolution.py
  function get_constraints (line 30) | def get_constraints(func: Callable) -> NodeConstraints | None:
  function resolve_constraints (line 42) | def resolve_constraints(
  function apply_constraints_to_analysis (line 111) | def apply_constraints_to_analysis(
  function merge_dependencies (line 142) | def merge_dependencies(

FILE: packages/nvidia_nat_app/src/nat_app/executors/execution_state.py
  class ExecutionState (line 35) | class ExecutionState:
    method mark_node_ready (line 95) | def mark_node_ready(self, node_name: str) -> None:
    method mark_node_completed (line 103) | def mark_node_completed(self, node_name: str, result: dict[str, Any] |...
    method mark_node_cancelled (line 114) | def mark_node_cancelled(self, node_name: str) -> None:
    method record_decision (line 123) | def record_decision(self, decision_node: str, chosen_target: str, iter...
    method clear_for_reexecution (line 135) | def clear_for_reexecution(self, node_name: str) -> None:
    method record_timeline_event (line 146) | def record_timeline_event(
    method record_node_duration (line 171) | def record_node_duration(self, node_name: str, duration: float) -> None:

FILE: packages/nvidia_nat_app/src/nat_app/executors/metrics.py
  function _estimate_sequential_time_ms (line 35) | def _estimate_sequential_time_ms(execution_state: ExecutionState) -> float:
  class ExecutionMetrics (line 60) | class ExecutionMetrics:
    method speedup_ratio (line 82) | def speedup_ratio(self) -> float:
    method speedup_pct (line 87) | def speedup_pct(self) -> float:
    method from_execution_state (line 92) | def from_execution_state(
    method to_dict (line 119) | def to_dict(self) -> dict[str, Any]:

FILE: packages/nvidia_nat_app/src/nat_app/executors/result_handler.py
  class ResultHandler (line 34) | class ResultHandler:
    method __init__ (line 42) | def __init__(self, command_checker: Callable[[Any], bool] | None = Non...
    method should_merge (line 51) | def should_merge(self, result: Any) -> tuple[bool, str]:
    method log_result (line 77) | def log_result(self, node_name: str, result: Any, should_merge: bool, ...

FILE: packages/nvidia_nat_app/src/nat_app/executors/runner.py
  class SpeculativeResult (line 45) | class SpeculativeResult:
  function run_speculation (line 69) | async def run_speculation(

FILE: packages/nvidia_nat_app/src/nat_app/graph/access.py
  function reducer_set (line 40) | def reducer_set(*fields: str, obj: str = _DEFAULT_OBJ) -> ReducerSet:
  function _paths_overlap (line 53) | def _paths_overlap(a: str, b: str) -> bool:
  class AccessSet (line 66) | class AccessSet:
    method __init__ (line 94) | def __init__(self) -> None:
    method add (line 100) | def add(self, obj: str, path: str) -> None:
    method add_flat (line 111) | def add_flat(self, field: str) -> None:
    method overlaps (line 121) | def overlaps(self, other: AccessSet, exclude_reducers: ReducerSet | No...
    method _flat_overlaps (line 138) | def _flat_overlaps(self, other: AccessSet, exclude_reducers: ReducerSe...
    method _nested_overlaps (line 149) | def _nested_overlaps(self, other: AccessSet, exclude_reducers: Reducer...
    method __and__ (line 168) | def __and__(self, other: AccessSet) -> AccessSet:
    method __sub__ (line 197) | def __sub__(self, other: AccessSet | ReducerSet) -> AccessSet:
    method __bool__ (line 225) | def __bool__(self) -> bool:
    method __len__ (line 228) | def __len__(self) -> int:
    method __iter__ (line 231) | def __iter__(self) -> Iterator[tuple[str, str]]:
    method __eq__ (line 237) | def __eq__(self, other: object) -> bool:
    method __repr__ (line 244) | def __repr__(self) -> str:
    method from_fields (line 255) | def from_fields(cls, *fields: str, obj: str = _DEFAULT_OBJ) -> AccessSet:
    method from_set (line 280) | def from_set(cls, fields: set[str], obj: str = _DEFAULT_OBJ) -> Access...
    method objects (line 300) | def objects(self) -> set[str]:
    method fields (line 304) | def fields(self, obj: str = _DEFAULT_OBJ) -> set[str]:
    method all_fields_flat (line 316) | def all_fields_flat(self) -> set[str]:
    method is_flat (line 328) | def is_flat(self) -> bool:

FILE: packages/nvidia_nat_app/src/nat_app/graph/adapter.py
  class AbstractFrameworkAdapter (line 61) | class AbstractFrameworkAdapter(ABC):
    method extract (line 84) | def extract(self, source: Any) -> Graph:
    method build (line 97) | def build(self, original: Any, result: CompilationResult) -> Any:
    method get_node_func (line 113) | def get_node_func(self, node_id: str) -> Callable | None:
    method get_state_schema (line 128) | def get_state_schema(self) -> type | None:
    method get_reducer_fields (line 138) | def get_reducer_fields(self) -> ReducerSet:
    method get_all_schema_fields (line 151) | def get_all_schema_fields(self) -> set[str] | None:
    method get_special_call_names (line 161) | def get_special_call_names(self) -> set[str]:
    method get_param_to_obj (line 174) | def get_param_to_obj(self) -> dict[str, str] | None:
    method get_self_state_attrs (line 190) | def get_self_state_attrs(self) -> dict[str, str] | None:
    method get_llm_detector (line 208) | def get_llm_detector(self) -> LLMDetector | None:
    method map_profiler_function_to_node (line 221) | def map_profiler_function_to_node(self, function_name: str) -> str | N...
    method analyze_node (line 238) | def analyze_node(

FILE: packages/nvidia_nat_app/src/nat_app/graph/analysis.py
  class NodeAnalysis (line 40) | class NodeAnalysis:
    method state_reads (line 92) | def state_reads(self) -> set[str]:
    method state_reads (line 97) | def state_reads(self, value: set[str]) -> None:
    method state_writes (line 101) | def state_writes(self) -> set[str]:
    method state_writes (line 106) | def state_writes(self, value: set[str]) -> None:
    method conflicts_with (line 111) | def conflicts_with(
    method __repr__ (line 150) | def __repr__(self) -> str:
  function build_dependency_graph (line 163) | def build_dependency_graph(
  function find_parallel_groups (line 199) | def find_parallel_groups(
  function _merge_into_groups (line 245) | def _merge_into_groups(
  function _group_is_compatible (line 290) | def _group_is_compatible(
  class ParallelizationOpportunity (line 331) | class ParallelizationOpportunity:
  class GraphAnalysisResult (line 341) | class GraphAnalysisResult:
    method get_execution_order (line 352) | def get_execution_order(self) -> list[set[str]]:

FILE: packages/nvidia_nat_app/src/nat_app/graph/factory.py
  function build_graph_and_adapter (line 30) | def build_graph_and_adapter(

FILE: packages/nvidia_nat_app/src/nat_app/graph/llm_detection.py
  class LLMCallInfo (line 56) | class LLMCallInfo:
  function discover_llm_names (line 78) | def discover_llm_names(func: Callable, detector: LLMDetector) -> dict[st...
  function _scan_namespace (line 117) | def _scan_namespace(
  function count_llm_calls (line 166) | def count_llm_calls(func: Callable, detector: LLMDetector) -> LLMCallInfo:
  class _LLMCallCounter (line 238) | class _LLMCallCounter:
    method __init__ (line 241) | def __init__(
    method count_in_body (line 250) | def count_in_body(self, stmts: list[ast.stmt]) -> int:
    method _count_stmt (line 264) | def _count_stmt(self, node: ast.stmt) -> int:
    method _count_if (line 277) | def _count_if(self, node: ast.If) -> int:
    method _count_loop (line 283) | def _count_loop(self, node: ast.For | ast.AsyncFor | ast.While) -> int:
    method _count_try (line 293) | def _count_try(self, node: ast.Try | ast.TryStar) -> int:
    method _count_with (line 301) | def _count_with(self, node: ast.With | ast.AsyncWith) -> int:
    method _count_match (line 305) | def _count_match(self, node: ast.Match) -> int:
    method _count_calls_in_node (line 311) | def _count_calls_in_node(self, node: ast.AST) -> int:
    method _is_llm_call (line 326) | def _is_llm_call(self, node: ast.expr) -> bool:
    method _resolve_receiver (line 348) | def _resolve_receiver(self, node: ast.expr) -> str | None:

FILE: packages/nvidia_nat_app/src/nat_app/graph/models.py
  class EdgeType (line 41) | class EdgeType(Enum):
  class EdgeAnalysis (line 51) | class EdgeAnalysis:
  class BranchInfo (line 62) | class BranchInfo:
  class CompilationResult (line 83) | class CompilationResult:
    method stages (line 107) | def stages(self) -> list[set[str]]:
    method speedup_estimate (line 116) | def speedup_estimate(self) -> float:
  class TransformationResult (line 128) | class TransformationResult(CompilationResult):

FILE: packages/nvidia_nat_app/src/nat_app/graph/protocols.py
  class GraphExtractor (line 49) | class GraphExtractor(Protocol):
    method extract (line 64) | def extract(self, source: Any) -> Graph:
  class NodeIntrospector (line 78) | class NodeIntrospector(Protocol):
    method get_node_func (line 86) | def get_node_func(self, node_id: str) -> Callable | None:
    method get_state_schema (line 97) | def get_state_schema(self) -> type | None:
    method get_reducer_fields (line 105) | def get_reducer_fields(self) -> ReducerSet:
    method get_all_schema_fields (line 113) | def get_all_schema_fields(self) -> set[str] | None:
    method get_special_call_names (line 121) | def get_special_call_names(self) -> set[str]:
  class LLMDetector (line 133) | class LLMDetector(Protocol):
    method is_llm (line 155) | def is_llm(self, obj: Any) -> bool:
    method invocation_methods (line 167) | def invocation_methods(self) -> frozenset[str]:
  class GraphBuilder (line 180) | class GraphBuilder(Protocol):
    method build (line 189) | def build(self, original: Any, result: Any) -> Any:

FILE: packages/nvidia_nat_app/src/nat_app/graph/scheduling.py
  function classify_edges (line 70) | def classify_edges(
  function compute_branch_info (line 141) | def compute_branch_info(
  function analyze_cycle_body (line 221) | def analyze_cycle_body(
  function _build_data_dependencies (line 364) | def _build_data_dependencies(
  function _apply_confidence_fallbacks (line 398) | def _apply_confidence_fallbacks(
  function _apply_constraints (line 414) | def _apply_constraints(
  function _apply_cycle_body_ordering (line 436) | def _apply_cycle_body_ordering(
  function _apply_cycle_boundary_and_conditional (line 472) | def _apply_cycle_boundary_and_conditional(
  function _apply_branch_dependencies (line 493) | def _apply_branch_dependencies(
  function _apply_post_cycle_ordering (line 506) | def _apply_post_cycle_ordering(
  function _build_parallel_stages (line 539) | def _build_parallel_stages(
  function compute_optimized_order (line 580) | def compute_optimized_order(
  function _split_by_branch (line 663) | def _split_by_branch(
  function _sequential_stages (line 709) | def _sequential_stages(
  function _stage_order_with_entry_first (line 736) | def _stage_order_with_entry_first(nodes: set[str], entry_point: str) -> ...

FILE: packages/nvidia_nat_app/src/nat_app/graph/static_analysis.py
  class StaticAnalysisResult (line 78) | class StaticAnalysisResult:
    method all_writes (line 114) | def all_writes(self) -> AccessSet:
  class _NodeASTVisitor (line 133) | class _NodeASTVisitor(ast.NodeVisitor):
    method __init__ (line 140) | def __init__(
    method _get_base_name_from_subscript (line 189) | def _get_base_name_from_subscript(node: ast.expr) -> str | None:
    method _get_obj_for_node (line 198) | def _get_obj_for_node(self, node: ast.expr) -> str | None:
    method _is_state (line 218) | def _is_state(self, node: ast.expr) -> bool:
    method _extract_string_key (line 221) | def _extract_string_key(self, node: ast.expr) -> str | None:
    method _is_alias (line 231) | def _is_alias(self, node: ast.expr) -> tuple[str, str] | None:
    method _extract_nested_path (line 244) | def _extract_nested_path(self, node: ast.expr) -> tuple[str | None, st...
    method _get_callee_name (line 301) | def _get_callee_name(self, node: ast.Call) -> str | None:
    method visit_Call (line 308) | def visit_Call(self, node: ast.Call):  # pylint: disable=invalid-name
    method _check_special_calls (line 344) | def _check_special_calls(self, node: ast.Call):
    method visit_Subscript (line 356) | def visit_Subscript(self, node: ast.Subscript):  # pylint: disable=inv...
    method visit_Attribute (line 374) | def visit_Attribute(self, node: ast.Attribute):  # pylint: disable=inv...
    method visit_Assign (line 384) | def visit_Assign(self, node: ast.Assign):  # pylint: disable=invalid-name
    method visit_AugAssign (line 389) | def visit_AugAssign(self, node: ast.AugAssign):  # pylint: disable=inv...
    method visit_Return (line 407) | def visit_Return(self, node: ast.Return):
    method visit_Delete (line 415) | def visit_Delete(self, node: ast.Delete):
    method _handle_assign_target (line 433) | def _handle_assign_target(self, target: ast.expr, value: ast.expr):
    method _resolve_state_source (line 492) | def _resolve_state_source(self, node: ast.expr) -> tuple[str, str] | N...
    method _extract_writes_from_expr (line 516) | def _extract_writes_from_expr(self, node: ast.expr):
    method _lambda_references_state (line 553) | def _lambda_references_state(self, node: ast.Lambda) -> bool:
    method _extract_dict_keys_as_writes (line 564) | def _extract_dict_keys_as_writes(self, node: ast.Dict, obj: str):
    method _check_special_in_return (line 579) | def _check_special_in_return(self, node: ast.expr):
    method _check_state_passed_to_call (line 595) | def _check_state_passed_to_call(self, node: ast.Call):
    method _resolve_callee (line 699) | def _resolve_callee(self, func_node: ast.expr) -> Callable | None:
    method _resolve_name (line 720) | def _resolve_name(self, name: str) -> object | None:
    method _resolve_subscript_container (line 760) | def _resolve_subscript_container(self, node: ast.expr) -> object | None:
    method _resolve_subscript_key (line 773) | def _resolve_subscript_key(self, node: ast.expr) -> object | None:
    method _callee_name (line 789) | def _callee_name(func_node: ast.expr) -> str:
  function _analyze_callee (line 802) | def _analyze_callee(
  function analyze_function_ast (line 935) | def analyze_function_ast(
  function _extract_lambda_source (line 1101) | def _extract_lambda_source(source: str) -> str | None:
  function _get_lambda_param_name (line 1121) | def _get_lambda_param_name(lambda_node: ast.Lambda) -> str | None:
  function _get_state_param_name (line 1137) | def _get_state_param_name(func_def: ast.FunctionDef | ast.AsyncFunctionD...

FILE: packages/nvidia_nat_app/src/nat_app/graph/topology.py
  class NodeType (line 45) | class NodeType(Enum):
  class CycleBodyAnalysis (line 57) | class CycleBodyAnalysis:
  class CycleInfo (line 84) | class CycleInfo:
  class RouterInfo (line 100) | class RouterInfo:
  class GraphTopology (line 109) | class GraphTopology:
  function _build_adj (line 128) | def _build_adj(
  function detect_cycles (line 148) | def detect_cycles(graph: Graph) -> list[CycleInfo]:
  function _find_scc_back_edges (line 268) | def _find_scc_back_edges(
  function _cycle_path_nodes (line 339) | def _cycle_path_nodes(
  function cycle_node_order (line 391) | def cycle_node_order(cycle: CycleInfo, edges: list[tuple[str, str]]) -> ...
  function detect_routers (line 423) | def detect_routers(graph: Graph) -> list[RouterInfo]:
  function analyze_graph_topology (line 450) | def analyze_graph_topology(graph: Graph) -> GraphTopology:
  function find_router_chains (line 519) | def find_router_chains(topology: GraphTopology) -> list[list[str]]:
  function get_safe_parallelization_groups (line 571) | def get_safe_parallelization_groups(

FILE: packages/nvidia_nat_app/src/nat_app/graph/types.py
  class PriorityLevel (line 35) | class PriorityLevel(Enum):
  class ProfiledNodeCost (line 52) | class ProfiledNodeCost:
  class CostMetric (line 80) | class CostMetric(Enum):
  class BranchGroupType (line 100) | class BranchGroupType(Enum):
  class BranchGroup (line 109) | class BranchGroup:
  class EdgeKind (line 124) | class EdgeKind(Enum):
  class Edge (line 132) | class Edge:
  class NodeInfo (line 143) | class NodeInfo:
  class Graph (line 159) | class Graph:
    method __init__ (line 197) | def __init__(self) -> None:
    method minimal (line 213) | def minimal(
    method add_node (line 253) | def add_node(
    method has_node (line 272) | def has_node(self, name: str) -> bool:
    method get_node (line 283) | def get_node(self, name: str) -> NodeInfo:
    method node_names (line 298) | def node_names(self) -> set[str]:
    method node_count (line 307) | def node_count(self) -> int:
    method nodes (line 315) | def nodes(self) -> Iterator[tuple[str, NodeInfo]]:
    method add_edge (line 325) | def add_edge(self, source: str, target: str, **metadata: Any) -> None:
    method _remove_conditional_edges_for_source (line 342) | def _remove_conditional_edges_for_source(self, source: str) -> None:
    method add_conditional_edges (line 354) | def add_conditional_edges(
    method edges (line 394) | def edges(self) -> list[Edge]:
    method edge_pairs (line 403) | def edge_pairs(self) -> list[tuple[str, str]]:
    method edge_count (line 412) | def edge_count(self) -> int:
    method get_conditional_targets (line 420) | def get_conditional_targets(self, node: str) -> dict[str, list[str]] |...
    method conditional_edge_sources (line 432) | def conditional_edge_sources(self) -> dict[str, dict[str, list[str]]]:
    method successors (line 442) | def successors(self, node: str) -> list[str]:
    method predecessors (line 453) | def predecessors(self, node: str) -> list[str]:
    method to_adjacency (line 464) | def to_adjacency(self) -> dict[str, list[str]]:
    method subgraph (line 474) | def subgraph(self, nodes: set[str]) -> Graph:
    method validate (line 510) | def validate(self) -> list[str]:
    method _compute_reachable (line 547) | def _compute_reachable(self, start: str) -> set[str]:
    method structure_hash (line 571) | def structure_hash(self) -> str:
    method __repr__ (line 587) | def __repr__(self) -> str:
    method __len__ (line 590) | def __len__(self) -> int:

FILE: packages/nvidia_nat_app/src/nat_app/speculation/plan.py
  class SpeculationPlan (line 34) | class SpeculationPlan:
  function plan_speculation (line 76) | def plan_speculation(
  function partition_targets (line 117) | def partition_targets(plan: SpeculationPlan, ) -> tuple[frozenset[str], ...

FILE: packages/nvidia_nat_app/src/nat_app/speculation/planner.py
  class SpeculationPlanner (line 37) | class SpeculationPlanner:
    method __init__ (line 54) | def __init__(self, strategies: list[SpeculationStrategy]) -> None:
    method plan (line 57) | def plan(

FILE: packages/nvidia_nat_app/src/nat_app/speculation/resolution.py
  class Resolution (line 35) | class Resolution:
  class ResolutionPolicy (line 52) | class ResolutionPolicy(Protocol):
    method resolve (line 60) | def resolve(self, decision_result: Any) -> Resolution:
    method is_on_chosen_path (line 72) | def is_on_chosen_path(self, node: str, decision_result: Any) -> bool:
    method get_cancel_set (line 84) | def get_cancel_set(self, decision_result: Any) -> frozenset[str]:

FILE: packages/nvidia_nat_app/src/nat_app/speculation/safety.py
  function speculation_unsafe (line 42) | def speculation_unsafe(cls_or_func: T) -> T:
  function is_marked_speculation_unsafe (line 71) | def is_marked_speculation_unsafe(obj: Any) -> bool:
  class SpeculationSafetyConfig (line 89) | class SpeculationSafetyConfig:
  class RouterDescriptor (line 110) | class RouterDescriptor:

FILE: packages/nvidia_nat_app/src/nat_app/speculation/strategies/base.py
  class SpeculationOpportunity (line 36) | class SpeculationOpportunity:
  class SpeculationStrategy (line 60) | class SpeculationStrategy(Protocol):
    method name (line 69) | def name(self) -> str:
    method priority (line 74) | def priority(self) -> int:
    method identify (line 78) | def identify(
    method plan (line 94) | def plan(

FILE: packages/nvidia_nat_app/src/nat_app/speculation/strategies/router_branch.py
  class RouterBranchResolution (line 43) | class RouterBranchResolution:
    method _resolve_label (line 59) | def _resolve_label(self, chosen: str) -> str:
    method resolve (line 69) | def resolve(self, decision_result: Any) -> Resolution:
    method is_on_chosen_path (line 84) | def is_on_chosen_path(self, node: str, decision_result: Any) -> bool:
    method get_cancel_set (line 99) | def get_cancel_set(self, decision_result: Any) -> frozenset[str]:
  class RouterBranchStrategy (line 120) | class RouterBranchStrategy:
    method name (line 129) | def name(self) -> str:
    method priority (line 134) | def priority(self) -> int:
    method identify (line 138) | def identify(
    method plan (line 181) | def plan(
  function _is_excluded (line 262) | def _is_excluded(

FILE: packages/nvidia_nat_app/src/nat_app/stages/edge_classification.py
  class EdgeClassificationStage (line 30) | class EdgeClassificationStage:
    method name (line 38) | def name(self) -> str:
    method apply (line 41) | def apply(self, context: CompilationContext, **kwargs: Any) -> Compila...

FILE: packages/nvidia_nat_app/src/nat_app/stages/extract.py
  class ExtractStage (line 28) | class ExtractStage:
    method __init__ (line 35) | def __init__(self, adapter: AbstractFrameworkAdapter) -> None:
    method name (line 39) | def name(self) -> str:
    method apply (line 42) | def apply(self, context: CompilationContext, **kwargs: Any) -> Compila...

FILE: packages/nvidia_nat_app/src/nat_app/stages/llm_analysis.py
  class LLMAnalysisStage (line 30) | class LLMAnalysisStage:
    method __init__ (line 40) | def __init__(self, adapter: AbstractFrameworkAdapter) -> None:
    method name (line 44) | def name(self) -> str:
    method apply (line 47) | def apply(self, context: CompilationContext, **kwargs: Any) -> Compila...

FILE: packages/nvidia_nat_app/src/nat_app/stages/node_analysis.py
  class NodeAnalysisStage (line 31) | class NodeAnalysisStage:
    method __init__ (line 38) | def __init__(
    method name (line 47) | def name(self) -> str:
    method apply (line 50) | def apply(self, context: CompilationContext, **kwargs: Any) -> Compila...

FILE: packages/nvidia_nat_app/src/nat_app/stages/priority_assignment.py
  class PriorityStrategy (line 114) | class PriorityStrategy(Protocol):
    method assign_group_priorities (line 121) | def assign_group_priorities(self, group: BranchGroup, ceiling: Priorit...
  class SJFPriorityStrategy (line 135) | class SJFPriorityStrategy:
    method __init__ (line 146) | def __init__(
    method assign_group_priorities (line 159) | def assign_group_priorities(self, group: BranchGroup, ceiling: Priorit...
    method _assign_with_ceiling (line 178) | def _assign_with_ceiling(
    method _cap_priority (line 188) | def _cap_priority(self, priority: PriorityLevel, ceiling: PriorityLeve...
    method _active_tier_count (line 193) | def _active_tier_count(self, ratio: float) -> int:
    method _cost_to_rank (line 203) | def _cost_to_rank(cost: float, mn: float, mx: float, active_tiers: int...
    method _auto_assign_priority (line 218) | def _auto_assign_priority(self, subtree_costs: list[float]) -> list[Pr...
  class PriorityAssignmentStage (line 231) | class PriorityAssignmentStage:
    method __init__ (line 251) | def __init__(
    method name (line 264) | def name(self) -> str:
    method apply (line 271) | def apply(self, context: CompilationContext, **kwargs: Any) -> Compila...
    method _resolve_cost_source (line 343) | def _resolve_cost_source(
    method _extract_branch_groups (line 388) | def _extract_branch_groups(
    method _compute_subtree_cost (line 492) | def _compute_subtree_cost(
    method _extract_group_source (line 551) | def _extract_group_source(group_name: str) -> str | None:
    method _resolve_group_ceiling (line 568) | def _resolve_group_ceiling(
    method _build_group_order (line 605) | def _build_group_order(

FILE: packages/nvidia_nat_app/src/nat_app/stages/scheduling.py
  class SchedulingStage (line 32) | class SchedulingStage:
    method __init__ (line 40) | def __init__(self, config: OptimizationConfig | None = None) -> None:
    method name (line 44) | def name(self) -> str:
    method apply (line 47) | def apply(self, context: CompilationContext, **kwargs: Any) -> Compila...

FILE: packages/nvidia_nat_app/src/nat_app/stages/topology.py
  class TopologyStage (line 28) | class TopologyStage:
    method name (line 36) | def name(self) -> str:
    method apply (line 39) | def apply(self, context: CompilationContext, **kwargs: Any) -> Compila...

FILE: packages/nvidia_nat_app/src/nat_app/stages/validate.py
  class ValidateStage (line 25) | class ValidateStage:
    method name (line 33) | def name(self) -> str:
    method apply (line 36) | def apply(self, context: CompilationContext, **kwargs: Any) -> Compila...

FILE: packages/nvidia_nat_app/tests/compiler/test_compilation_context.py
  class TestConstruction (line 22) | class TestConstruction:
    method test_compiled_stored (line 24) | def test_compiled_stored(self):
    method test_metadata_default_empty (line 28) | def test_metadata_default_empty(self):
    method test_metadata_provided (line 32) | def test_metadata_provided(self):
  class TestPropertyAccessors (line 37) | class TestPropertyAccessors:
    method test_graph_none_when_missing (line 39) | def test_graph_none_when_missing(self):
    method test_graph_returns_value (line 43) | def test_graph_returns_value(self):
    method test_topology_none_when_missing (line 48) | def test_topology_none_when_missing(self):
    method test_topology_returns_value (line 52) | def test_topology_returns_value(self):
    method test_node_analyses_none_when_missing (line 57) | def test_node_analyses_none_when_missing(self):
    method test_node_analyses_returns_value (line 61) | def test_node_analyses_returns_value(self):
    method test_optimized_order_none_when_missing (line 66) | def test_optimized_order_none_when_missing(self):
    method test_optimized_order_returns_value (line 70) | def test_optimized_order_returns_value(self):
    method test_necessary_edges_none_when_missing (line 75) | def test_necessary_edges_none_when_missing(self):
    method test_necessary_edges_returns_value (line 79) | def test_necessary_edges_returns_value(self):
    method test_unnecessary_edges_none_when_missing (line 84) | def test_unnecessary_edges_none_when_missing(self):
    method test_unnecessary_edges_returns_value (line 88) | def test_unnecessary_edges_returns_value(self):
  class TestMutability (line 94) | class TestMutability:
    method test_compiled_reassignment (line 96) | def test_compiled_reassignment(self):
    method test_metadata_mutation_reflected (line 101) | def test_metadata_mutation_reflected(self):
    method test_metadata_update_changes_property (line 106) | def test_metadata_update_changes_property(self):
    method test_instance_isolation (line 112) | def test_instance_isolation(self):

FILE: packages/nvidia_nat_app/tests/compiler/test_compilation_stage.py
  class _ConformingStage (line 23) | class _ConformingStage:
    method name (line 26) | def name(self) -> str:
    method apply (line 29) | def apply(self, context, **kwargs):
  class _MissingName (line 33) | class _MissingName:
    method apply (line 35) | def apply(self, context, **kwargs):
  class _MissingApply (line 39) | class _MissingApply:
    method name (line 42) | def name(self) -> str:
  class TestProtocolConformance (line 46) | class TestProtocolConformance:
    method test_conforming_is_instance (line 48) | def test_conforming_is_instance(self):
    method test_missing_name_not_instance (line 52) | def test_missing_name_not_instance(self):
    method test_missing_apply_not_instance (line 56) | def test_missing_apply_not_instance(self):
    method test_apply_returns_context (line 60) | def test_apply_returns_context(self):
    method test_name_property (line 66) | def test_name_property(self):

FILE: packages/nvidia_nat_app/tests/compiler/test_compiler.py
  class _ConcreteCompiler (line 24) | class _ConcreteCompiler(AbstractCompiler):
    method compile (line 26) | def compile(self, source, **kwargs):
  class _RejectingCompiler (line 30) | class _RejectingCompiler(_ConcreteCompiler):
    method validate (line 32) | def validate(self, source):
  class TestUnsupportedSourceError (line 36) | class TestUnsupportedSourceError:
    method test_is_value_error (line 38) | def test_is_value_error(self):
    method test_message (line 41) | def test_message(self):
  class TestAbstractCompiler (line 46) | class TestAbstractCompiler:
    method test_cannot_instantiate (line 48) | def test_cannot_instantiate(self):
    method test_validate_default_true (line 52) | def test_validate_default_true(self):
    method test_export_default_not_implemented (line 56) | def test_export_default_not_implemented(self):
    method test_compile (line 61) | def test_compile(self):
  class TestCompileWith (line 66) | class TestCompileWith:
    method test_success (line 68) | def test_success(self):
    method test_validation_fails (line 73) | def test_validation_fails(self):
    method test_kwargs_forwarded (line 78) | def test_kwargs_forwarded(self):

FILE: packages/nvidia_nat_app/tests/compiler/test_default_graph_compiler.py
  class _DummyStage (line 26) | class _DummyStage:
    method __init__ (line 28) | def __init__(self, name_val):
    method name (line 32) | def name(self):
    method apply (line 35) | def apply(self, context, **kwargs):
  class TestDefaultStages (line 40) | class TestDefaultStages:
    method test_six_default_stages (line 42) | def test_six_default_stages(self):
    method test_stage_names (line 46) | def test_stage_names(self):
  class TestPrepareFinalize (line 59) | class TestPrepareFinalize:
    method test_prepare_returns_source (line 61) | def test_prepare_returns_source(self):
    method test_finalize_returns_context (line 65) | def test_finalize_returns_context(self):
  class TestAppendInsert (line 71) | class TestAppendInsert:
    method test_append_stage (line 73) | def test_append_stage(self):
    method test_insert_stage_after (line 79) | def test_insert_stage_after(self):
    method test_insert_after_nonexistent_appends (line 86) | def test_insert_after_nonexistent_appends(self):
  class TestCompileToResult (line 94) | class TestCompileToResult:
    method test_returns_transformation_result (line 96) | def test_returns_transformation_result(self):
  class TestEndToEnd (line 106) | class TestEndToEnd:
    method test_compile_simple_graph (line 108) | def test_compile_simple_graph(self):

FILE: packages/nvidia_nat_app/tests/compiler/test_pipelined_compiler.py
  class _TrackingStage (line 22) | class _TrackingStage:
    method __init__ (line 24) | def __init__(self, name_val, key="visited"):
    method name (line 29) | def name(self):
    method apply (line 32) | def apply(self, context, **kwargs):
  class _TestPipelinedCompiler (line 37) | class _TestPipelinedCompiler(AbstractPipelinedCompiler):
    method default_stages (line 39) | def default_stages(self):
    method prepare (line 42) | def prepare(self, source, **kwargs):
  class TestStageInitialization (line 46) | class TestStageInitialization:
    method test_uses_provided_stages (line 48) | def test_uses_provided_stages(self):
    method test_uses_default_stages (line 54) | def test_uses_default_stages(self):
    method test_stages_is_tuple (line 59) | def test_stages_is_tuple(self):
  class TestCompilePipeline (line 64) | class TestCompilePipeline:
    method test_stages_run_in_order (line 66) | def test_stages_run_in_order(self):
    method test_last_context_stored (line 72) | def test_last_context_stored(self):
    method test_prepare_called (line 78) | def test_prepare_called(self):
    method test_finalize_returns_compiled (line 83) | def test_finalize_returns_compiled(self):
  class TestSeedContext (line 89) | class TestSeedContext:
    method test_seed_context_called (line 91) | def test_seed_context_called(self):
  class TestFinalize (line 103) | class TestFinalize:
    method test_finalize_override (line 105) | def test_finalize_override(self):

FILE: packages/nvidia_nat_app/tests/conftest.py
  function _suppress_experimental_warning (line 27) | def _suppress_experimental_warning():
  class MinimalAdapter (line 38) | class MinimalAdapter(AbstractFrameworkAdapter):
    method extract (line 41) | def extract(self, source):
    method build (line 44) | def build(self, original, result):
  function make_node (line 48) | def make_node(

FILE: packages/nvidia_nat_app/tests/constraints/test_decorators.py
  class TestSequential (line 25) | class TestSequential:
    method test_sets_force_sequential (line 27) | def test_sets_force_sequential(self):
    method test_sets_has_side_effects (line 36) | def test_sets_has_side_effects(self):
    method test_stores_reason (line 44) | def test_stores_reason(self):
    method test_default_reason_when_omitted (line 52) | def test_default_reason_when_omitted(self):
    method test_returns_original_function (line 60) | def test_returns_original_function(self):
    method test_constraints_type (line 68) | def test_constraints_type(self):
  class TestDependsOn (line 77) | class TestDependsOn:
    method test_populates_depends_on_set (line 79) | def test_populates_depends_on_set(self):
    method test_single_dependency (line 88) | def test_single_dependency(self):
    method test_stores_reason (line 96) | def test_stores_reason(self):
    method test_no_reason_leaves_none (line 104) | def test_no_reason_leaves_none(self):
    method test_does_not_set_force_sequential (line 112) | def test_does_not_set_force_sequential(self):
    method test_returns_original_function (line 120) | def test_returns_original_function(self):
  class TestHasSideEffects (line 129) | class TestHasSideEffects:
    method test_sets_has_side_effects (line 131) | def test_sets_has_side_effects(self):
    method test_does_not_set_force_sequential (line 139) | def test_does_not_set_force_sequential(self):
    method test_stores_reason (line 147) | def test_stores_reason(self):
    method test_default_reason_when_omitted (line 155) | def test_default_reason_when_omitted(self):
    method test_returns_original_function (line 163) | def test_returns_original_function(self):
  class TestDecoratorStacking (line 172) | class TestDecoratorStacking:
    method test_sequential_plus_depends_on (line 174) | def test_sequential_plus_depends_on(self):
    method test_has_side_effects_plus_depends_on (line 185) | def test_has_side_effects_plus_depends_on(self):
    method test_multiple_depends_on_accumulate (line 197) | def test_multiple_depends_on_accumulate(self):

FILE: packages/nvidia_nat_app/tests/constraints/test_models.py
  class TestNodeConstraints (line 24) | class TestNodeConstraints:
    method test_defaults (line 26) | def test_defaults(self):
    method test_mutable_depends_on (line 34) | def test_mutable_depends_on(self):
    method test_instances_do_not_share_depends_on (line 39) | def test_instances_do_not_share_depends_on(self):
  class TestResolvedConstraints (line 46) | class TestResolvedConstraints:
    method test_defaults (line 48) | def test_defaults(self):
    method test_instances_do_not_share_reasons (line 57) | def test_instances_do_not_share_reasons(self):
  class TestOptimizationConfig (line 64) | class TestOptimizationConfig:
    method test_defaults (line 66) | def test_defaults(self):
    method test_default_keywords_contain_common_terms (line 75) | def test_default_keywords_contain_common_terms(self):
    method test_conservative_factory (line 81) | def test_conservative_factory(self):
    method test_aggressive_factory (line 86) | def test_aggressive_factory(self):
    method test_instances_do_not_share_sets (line 91) | def test_instances_do_not_share_sets(self):

FILE: packages/nvidia_nat_app/tests/constraints/test_resolution.py
  function plain_fn (line 32) | def plain_fn(state):
  function sequential_fn (line 37) | def sequential_fn(state):
  function dependent_fn (line 42) | def dependent_fn(state):
  function side_effect_fn (line 47) | def side_effect_fn(state):
  class TestGetConstraints (line 54) | class TestGetConstraints:
    method test_returns_none_for_undecorated (line 56) | def test_returns_none_for_undecorated(self):
    method test_returns_constraints_for_decorated (line 59) | def test_returns_constraints_for_decorated(self):
    method test_returns_depends_on (line 64) | def test_returns_depends_on(self):
  class TestResolveConstraints (line 73) | class TestResolveConstraints:
    method test_undecorated_with_default_config (line 75) | def test_undecorated_with_default_config(self):
    method test_decorator_sets_force_sequential (line 81) | def test_decorator_sets_force_sequential(self):
    method test_decorator_sets_side_effects (line 87) | def test_decorator_sets_side_effects(self):
    method test_config_force_sequential (line 92) | def test_config_force_sequential(self):
    method test_config_explicit_dependencies (line 98) | def test_config_explicit_dependencies(self):
    method test_config_side_effect_nodes (line 103) | def test_config_side_effect_nodes(self):
    method test_heuristic_keyword_match (line 108) | def test_heuristic_keyword_match(self):
    method test_trust_analysis_suppresses_heuristic (line 114) | def test_trust_analysis_suppresses_heuristic(self):
    method test_disable_parallelization_forces_sequential (line 119) | def test_disable_parallelization_forces_sequential(self):
    method test_none_func_skips_decorator_check (line 124) | def test_none_func_skips_decorator_check(self):
    method test_decorator_priority_over_config (line 129) | def test_decorator_priority_over_config(self):
    method test_decorator_depends_on_merged (line 134) | def test_decorator_depends_on_merged(self):
  class TestApplyConstraintsToAnalysis (line 143) | class TestApplyConstraintsToAnalysis:
    method test_builds_per_node_constraints (line 145) | def test_builds_per_node_constraints(self):
    method test_warns_for_side_effect_nodes (line 156) | def test_warns_for_side_effect_nodes(self):
    method test_no_warning_for_sequential_side_effect (line 166) | def test_no_warning_for_sequential_side_effect(self):
  class TestMergeDependencies (line 180) | class TestMergeDependencies:
    method test_merges_data_and_constraint_deps (line 182) | def test_merges_data_and_constraint_deps(self):
    method test_preserves_original_data_deps (line 193) | def test_preserves_original_data_deps(self):
    method test_adds_missing_nodes (line 202) | def test_adds_missing_nodes(self):

FILE: packages/nvidia_nat_app/tests/executors/test_execution_state.py
  class TestExecutionStateDefaults (line 22) | class TestExecutionStateDefaults:
    method test_fresh_state_has_zeroed_counters (line 24) | def test_fresh_state_has_zeroed_counters(self):
    method test_fresh_state_has_empty_collections (line 30) | def test_fresh_state_has_empty_collections(self):
    method test_execution_start_time_defaults_to_zero (line 40) | def test_execution_start_time_defaults_to_zero(self):
  class TestMarkNodeReady (line 45) | class TestMarkNodeReady:
    method test_adds_to_ready_nodes (line 47) | def test_adds_to_ready_nodes(self):
    method test_multiple_nodes (line 52) | def test_multiple_nodes(self):
    method test_idempotent (line 58) | def test_idempotent(self):
  class TestMarkNodeCompleted (line 65) | class TestMarkNodeCompleted:
    method test_stores_result (line 67) | def test_stores_result(self):
    method test_increments_tools_completed (line 72) | def test_increments_tools_completed(self):
    method test_increments_execution_count (line 77) | def test_increments_execution_count(self):
    method test_none_result_stores_empty_dict (line 83) | def test_none_result_stores_empty_dict(self):
  class TestMarkNodeCancelled (line 89) | class TestMarkNodeCancelled:
    method test_adds_to_cancelled_nodes (line 91) | def test_adds_to_cancelled_nodes(self):
    method test_increments_tools_cancelled (line 96) | def test_increments_tools_cancelled(self):
  class TestRecordDecision (line 102) | class TestRecordDecision:
    method test_stores_decision (line 104) | def test_stores_decision(self):
    method test_stores_iteration (line 109) | def test_stores_iteration(self):
    method test_stores_in_completed_nodes (line 114) | def test_stores_in_completed_nodes(self):
  class TestClearForReexecution (line 120) | class TestClearForReexecution:
    method test_removes_from_completed (line 122) | def test_removes_from_completed(self):
    method test_removes_speculation_decision (line 128) | def test_removes_speculation_decision(self):
    method test_no_error_if_not_present (line 134) | def test_no_error_if_not_present(self):
  class TestRecordTimelineEvent (line 139) | class TestRecordTimelineEvent:
    method test_appends_event (line 141) | def test_appends_event(self):
    method test_event_shape (line 147) | def test_event_shape(self):
    method test_cancelled_status (line 159) | def test_cancelled_status(self):
  class TestRecordNodeDuration (line 166) | class TestRecordNodeDuration:
    method test_appends_duration (line 168) | def test_appends_duration(self):
    method test_multiple_durations (line 173) | def test_multiple_durations(self):

FILE: packages/nvidia_nat_app/tests/executors/test_metrics.py
  class TestSpeedupProperties (line 23) | class TestSpeedupProperties:
    method test_speedup_ratio (line 25) | def test_speedup_ratio(self):
    method test_speedup_pct (line 35) | def test_speedup_pct(self):
    method test_speedup_ratio_when_total_is_zero (line 45) | def test_speedup_ratio_when_total_is_zero(self):
    method test_no_speedup (line 55) | def test_no_speedup(self):
  class TestToDict (line 67) | class TestToDict:
    method test_includes_required_keys (line 69) | def test_includes_required_keys(self):
    method test_includes_speedup_when_sequential_positive (line 84) | def test_includes_speedup_when_sequential_positive(self):
    method test_omits_speedup_when_sequential_zero (line 96) | def test_omits_speedup_when_sequential_zero(self):
    method test_omits_iterations_when_zero (line 107) | def test_omits_iterations_when_zero(self):
    method test_includes_iterations_when_nonzero (line 119) | def test_includes_iterations_when_nonzero(self):
    method test_omits_profiling_when_empty (line 131) | def test_omits_profiling_when_empty(self):
    method test_includes_profiling_when_present (line 142) | def test_includes_profiling_when_present(self):
  class TestFromExecutionState (line 155) | class TestFromExecutionState:
    method fixture_populated_state (line 158) | def fixture_populated_state(self):
    method test_basic_fields (line 170) | def test_basic_fields(self, populated_state):
    method test_speculation_decisions_copied (line 177) | def test_speculation_decisions_copied(self, populated_state):
    method test_timeline_copied (line 181) | def test_timeline_copied(self, populated_state):
    method test_sequential_time_estimated (line 185) | def test_sequential_time_estimated(self, populated_state):
    method test_iterations_st
Copy disabled (too large) Download .json
Condensed preview — 2280 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (18,552K chars).
[
  {
    "path": ".coderabbit.yaml",
    "chars": 13277,
    "preview": "# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-"
  },
  {
    "path": ".cursor/rules/cursor-rules.mdc",
    "chars": 4512,
    "preview": "---\ndescription: Follow these rules when the user's request involves creating, modifying, organizing, or structuring Cur"
  },
  {
    "path": ".cursor/rules/documentation/capitalization.mdc",
    "chars": 6413,
    "preview": "---\ndescription:\nglobs: **/*.md\nalwaysApply: false\n---\n# Capitalization Guidelines\n\nCapitalize proper names of products,"
  },
  {
    "path": ".cursor/rules/documentation/categories.mdc",
    "chars": 3868,
    "preview": "---\ndescription: Guidelines for placing documentation in the correct category within the docs/source directory\nglobs: do"
  },
  {
    "path": ".cursor/rules/documentation/formatting.mdc",
    "chars": 5508,
    "preview": "---\ndescription: \nglobs: **/*.md\nalwaysApply: false\n---\n# Formatting Guidelines\n\nUse consistent formatting to help conve"
  },
  {
    "path": ".cursor/rules/documentation/general.mdc",
    "chars": 5086,
    "preview": "---\ndescription:\nglobs: **/*.md\nalwaysApply: false\n---\n# General Documentation Rules\n\nFollow these rules when working wi"
  },
  {
    "path": ".cursor/rules/documentation/latinisms.mdc",
    "chars": 4654,
    "preview": "---\ndescription: Guidelines for avoiding Latin phrases in documentation to simplify content for a global audience\nglobs:"
  },
  {
    "path": ".cursor/rules/documentation/lists-and-tables.mdc",
    "chars": 6478,
    "preview": "---\ndescription: \nglobs: **/*.md\nalwaysApply: false\n---\n# Lists and Tables Guidelines\n\nLists organize information for fa"
  },
  {
    "path": ".cursor/rules/documentation/numbers-and-dates.mdc",
    "chars": 6248,
    "preview": "---\ndescription: \nglobs: **/*.md\nalwaysApply: false\n---\n# Numbers and Dates Guidelines\n\nBe consistent with number usage "
  },
  {
    "path": ".cursor/rules/documentation/punctuation.mdc",
    "chars": 6237,
    "preview": "---\ndescription:\nglobs: **/*.md\nalwaysApply: false\n---\n# Punctuation Guidelines\n\nUse punctuation to provide vital clues "
  },
  {
    "path": ".cursor/rules/documentation/voice-and-tone.mdc",
    "chars": 4790,
    "preview": "---\ndescription: \nglobs: **/*.md\nalwaysApply: false\n---\n# Voice and Tone Guidelines\n\nWrite in a friendly, straightforwar"
  },
  {
    "path": ".cursor/rules/documentation/writing-process.mdc",
    "chars": 3803,
    "preview": "---\ndescription: \nglobs: **/*.md\nalwaysApply: false\n---\n# Writing Process Guidelines\n\nFollow the structured 8-step writi"
  },
  {
    "path": ".cursor/rules/general.mdc",
    "chars": 10355,
    "preview": "---\ndescription: Follow these rules when creating, modifying, or generating any code, tests, documentation, or configura"
  },
  {
    "path": ".cursor/rules/nat-agents/general.mdc",
    "chars": 4211,
    "preview": "---\ndescription: Follow these rules when the user's request involves integrating or selecting ReAct, Tool-Calling, Reaso"
  },
  {
    "path": ".cursor/rules/nat-cli/general.mdc",
    "chars": 862,
    "preview": "---\ndescription: Follow these rules when the user's request involves NAT CLI commands, operations, or functionality\nglob"
  },
  {
    "path": ".cursor/rules/nat-cli/nat-eval.mdc",
    "chars": 10375,
    "preview": "---\ndescription: Follow these rules when the user requests to evaluate a workflow\nglobs:\nalwaysApply: false\n---\n# NeMo A"
  },
  {
    "path": ".cursor/rules/nat-cli/nat-info.mdc",
    "chars": 6462,
    "preview": "---\ndescription: Follow these rules when the user requests information about NeMo Agent Toolkit components, including: f"
  },
  {
    "path": ".cursor/rules/nat-cli/nat-run-serve.mdc",
    "chars": 5289,
    "preview": "---\ndescription: Follow these rules when the user's request involves running, serving, or executing NeMo Agent Toolkit w"
  },
  {
    "path": ".cursor/rules/nat-cli/nat-workflow.mdc",
    "chars": 3028,
    "preview": "---\ndescription: Follow these rules when the user's request involves creating, reinstalling, or deleting NeMo Agent Tool"
  },
  {
    "path": ".cursor/rules/nat-setup/general.mdc",
    "chars": 1525,
    "preview": "---\ndescription: Follow these rules when the user's request involves NeMo Agent Toolkit installation, setup, environment"
  },
  {
    "path": ".cursor/rules/nat-setup/nat-toolkit-installation.mdc",
    "chars": 6359,
    "preview": "---\ndescription: Follow these rules when the user's request involves installing, setting up, or configuring NeMo Agent T"
  },
  {
    "path": ".cursor/rules/nat-tests/general.mdc",
    "chars": 4752,
    "preview": "---\ndescription: Follow these rules when the user's request involves writing, creating, or modifying tests for NeMo Agen"
  },
  {
    "path": ".cursor/rules/nat-tests/integration-tests.mdc",
    "chars": 6013,
    "preview": "---\ndescription: Follow these rules when the user's request involves writing, creating, or modifying integration tests f"
  },
  {
    "path": ".cursor/rules/nat-tests/nat-test-llm.mdc",
    "chars": 1989,
    "preview": "---\ndescription: Follow these rules when the user's request involves using NAT test LLM (nat_test_llm) to simulate deter"
  },
  {
    "path": ".cursor/rules/nat-workflows/add-functions.mdc",
    "chars": 6987,
    "preview": "---\ndescription: Follow these rules when the user's request involves implementing, adding, creating, or modifying functi"
  },
  {
    "path": ".cursor/rules/nat-workflows/add-tools.mdc",
    "chars": 5196,
    "preview": "---\ndescription: Follow these rules when the user's request involves adding, integrating, implementing, or configuring t"
  },
  {
    "path": ".cursor/rules/nat-workflows/general.mdc",
    "chars": 1786,
    "preview": "---\ndescription: Follow these rules when the user's request involves adding functions or tools to NeMo Agent Toolkit wor"
  },
  {
    "path": ".dockerignore",
    "chars": 407,
    "preview": "# Ignore temporary folders\n**/.*/*\n\n# Ignore vscode folder\n.vscode/\n\n# Ignore git objects\n.git/\n.gitignore\n.gitlab-ci.ym"
  },
  {
    "path": ".gitattributes",
    "chars": 198,
    "preview": "docs/source/_static/*.png filter=lfs diff=lfs merge=lfs -text\ndocs/source/_static/cursor_rules_demo/*.gif filter=lfs dif"
  },
  {
    "path": ".github/CODEOWNERS",
    "chars": 172,
    "preview": "# Default Approval rule\n* @nvidia/nat-developers\n\n# Dependency changes\nuv.lock @nvidia/nat-dep-approvers\n\n# Dataset chan"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yml",
    "chars": 2843,
    "preview": "# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 713,
    "preview": "# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/documentation_request_correction.yml",
    "chars": 2551,
    "preview": "# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/documentation_request_new.yml",
    "chars": 2380,
    "preview": "# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.yml",
    "chars": 3136,
    "preview": "# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 920,
    "preview": "## Description\n<!-- Note: The pull request title will be included in the CHANGELOG. -->\n<!-- Provide a standalone descri"
  },
  {
    "path": ".github/copy-pr-bot.yaml",
    "chars": 807,
    "preview": "# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-"
  },
  {
    "path": ".github/ops-bot.yaml",
    "chars": 914,
    "preview": "# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-"
  },
  {
    "path": ".github/release.yml",
    "chars": 1181,
    "preview": "# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-"
  },
  {
    "path": ".github/workflows/ci_pipe.yml",
    "chars": 6468,
    "preview": "# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-"
  },
  {
    "path": ".github/workflows/pr.yaml",
    "chars": 3343,
    "preview": "# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-"
  },
  {
    "path": ".github/workflows/stale.yaml",
    "chars": 1765,
    "preview": "# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-"
  },
  {
    "path": ".gitignore",
    "chars": 2938,
    "preview": "###### Place new entries directly below this line! ######\n/.codex\n\n# auto-generated chainlit stuff\nchainlit.md\n.chainlit"
  },
  {
    "path": ".gitlab-ci.yml",
    "chars": 11482,
    "preview": "\n# SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License"
  },
  {
    "path": ".gitmodules",
    "chars": 271,
    "preview": "[submodule \"external/nat-ui\"]\n\tpath = external/nat-ui\n\turl = https://github.com/NVIDIA/NeMo-Agent-Toolkit-UI.git\n[submod"
  },
  {
    "path": ".nspect-allowlist.toml",
    "chars": 748,
    "preview": "version = \"1.2.0\"\n\n[oss]\n[[pulse-trufflehog.files]]\nfile = \"packages/nvidia_nat_mysql/tests/test_mysql_object_store.py\"\n"
  },
  {
    "path": ".pre-commit-config.yaml",
    "chars": 2199,
    "preview": "# SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-"
  },
  {
    "path": ".pytest.ini",
    "chars": 833,
    "preview": "[pytest]\n# Ignore any package that isn't included in the \"most\" extra\n# Users can still explicitly run tests in excluded"
  },
  {
    "path": ".vale.ini",
    "chars": 788,
    "preview": "StylesPath = ci/vale/styles\n\nMinAlertLevel = error\n\nVocab = nat\n\n# Configs for markdown and reStructuredText files\n[*{.m"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 167619,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "CODE-OF-CONDUCT.md",
    "chars": 781,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 774,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "LICENSE-3rd-party.txt",
    "chars": 296211,
    "preview": "--- LICENSE FOR agno ---\nCopyright (c) Agno, Inc.\n\nMozilla Public License Version 2.0\n=================================="
  },
  {
    "path": "LICENSE.md",
    "chars": 11356,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "README.md",
    "chars": 13878,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "SECURITY.md",
    "chars": 2404,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "ci/markdown-link-check-config.json",
    "chars": 682,
    "preview": "{\n    \"ignorePatterns\": [\n        {\n            \"pattern\": \"^https?://localhost:.*$\"\n        },\n        {\n            \"p"
  },
  {
    "path": "ci/release/pr_code_freeze_template.md",
    "chars": 1060,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "ci/release/update-version.sh",
    "chars": 2928,
    "preview": "#!/bin/bash\n# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# S"
  },
  {
    "path": "ci/release/update_doc_versions1.py",
    "chars": 1732,
    "preview": "#!/usr/bin/env python\n# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights res"
  },
  {
    "path": "ci/scripts/bootstrap_local_ci.sh",
    "chars": 1744,
    "preview": "#!/bin/bash\n# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# S"
  },
  {
    "path": "ci/scripts/checks.sh",
    "chars": 1640,
    "preview": "#!/bin/bash\n\n# SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# "
  },
  {
    "path": "ci/scripts/clear_notebook_output_cells.sh",
    "chars": 901,
    "preview": "#!/bin/bash\n\n# SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-"
  },
  {
    "path": "ci/scripts/common.sh",
    "chars": 6262,
    "preview": "# SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-"
  },
  {
    "path": "ci/scripts/copyright.py",
    "chars": 18082,
    "preview": "#!/usr/bin/env python3\n# SPDX-FileCopyrightText: Copyright (c) 2019-2026, NVIDIA CORPORATION & AFFILIATES. All rights re"
  },
  {
    "path": "ci/scripts/documentation_checks.sh",
    "chars": 1664,
    "preview": "#!/bin/bash\n# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# S"
  },
  {
    "path": "ci/scripts/github/build_wheel.sh",
    "chars": 5426,
    "preview": "#!/bin/bash\n# SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# S"
  },
  {
    "path": "ci/scripts/github/checks.sh",
    "chars": 901,
    "preview": "#!/bin/bash\n# SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# S"
  },
  {
    "path": "ci/scripts/github/common.sh",
    "chars": 1100,
    "preview": "# SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-"
  },
  {
    "path": "ci/scripts/github/docs.sh",
    "chars": 1115,
    "preview": "#!/bin/bash\n# SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# S"
  },
  {
    "path": "ci/scripts/github/tests.sh",
    "chars": 1373,
    "preview": "#!/bin/bash\n# SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# S"
  },
  {
    "path": "ci/scripts/gitlab/artifactory/Dockerfile",
    "chars": 797,
    "preview": "# SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-Ident"
  },
  {
    "path": "ci/scripts/gitlab/artifactory_upload.sh",
    "chars": 5205,
    "preview": "#!/bin/bash\n# SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# S"
  },
  {
    "path": "ci/scripts/gitlab/build_wheel.sh",
    "chars": 2372,
    "preview": "#!/bin/bash\n# SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# S"
  },
  {
    "path": "ci/scripts/gitlab/checks.sh",
    "chars": 1198,
    "preview": "#!/bin/bash\n# SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# S"
  },
  {
    "path": "ci/scripts/gitlab/common.sh",
    "chars": 2708,
    "preview": "# SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-"
  },
  {
    "path": "ci/scripts/gitlab/docs.sh",
    "chars": 935,
    "preview": "#!/bin/bash\n# SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# S"
  },
  {
    "path": "ci/scripts/gitlab/model_health_check.sh",
    "chars": 1352,
    "preview": "#!/bin/bash\n# SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-L"
  },
  {
    "path": "ci/scripts/gitlab/report_test_results.py",
    "chars": 11735,
    "preview": "#!/usr/bin/env python\n# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights res"
  },
  {
    "path": "ci/scripts/gitlab/tests.sh",
    "chars": 1976,
    "preview": "#!/bin/bash\n# SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# S"
  },
  {
    "path": "ci/scripts/gitutils.py",
    "chars": 19875,
    "preview": "#!/usr/bin/env python3\n# SPDX-FileCopyrightText: Copyright (c) 2019-2026, NVIDIA CORPORATION & AFFILIATES. All rights re"
  },
  {
    "path": "ci/scripts/license_diff.py",
    "chars": 6939,
    "preview": "#!/usr/bin/env python3\n# SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserve"
  },
  {
    "path": "ci/scripts/model_health_check.py",
    "chars": 13672,
    "preview": "#!/usr/bin/env python3\n# SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserve"
  },
  {
    "path": "ci/scripts/package_utils.py",
    "chars": 2327,
    "preview": "# SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-Ident"
  },
  {
    "path": "ci/scripts/path_checks.py",
    "chars": 19305,
    "preview": "# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-"
  },
  {
    "path": "ci/scripts/path_checks.sh",
    "chars": 1137,
    "preview": "#!/bin/bash\n\n# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# "
  },
  {
    "path": "ci/scripts/run_ci_local.sh",
    "chars": 3771,
    "preview": "#!/bin/bash\n# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# S"
  },
  {
    "path": "ci/scripts/run_tests.py",
    "chars": 12097,
    "preview": "#!/usr/bin/env python3\n# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights re"
  },
  {
    "path": "ci/scripts/sbom_list.py",
    "chars": 3552,
    "preview": "#!/usr/bin/env python3\n# SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserve"
  },
  {
    "path": "ci/vale/styles/config/vocabularies/nat/accept.txt",
    "chars": 3141,
    "preview": "# List of case-sensitive regular expressions matching words that should be accepted by Vale. For product names like\n# \"c"
  },
  {
    "path": "ci/vale/styles/config/vocabularies/nat/reject.txt",
    "chars": 274,
    "preview": "# List of regular expressions matching words we want to reject.\n# Regular expressions are parsed according to the Go syn"
  },
  {
    "path": "conftest.py",
    "chars": 23276,
    "preview": "# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-"
  },
  {
    "path": "docker/Dockerfile",
    "chars": 2093,
    "preview": "# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-"
  },
  {
    "path": "docker/build_container.sh",
    "chars": 2232,
    "preview": "#!/bin/bash\n# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# S"
  },
  {
    "path": "docs/Makefile",
    "chars": 771,
    "preview": "# Minimal makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line.\nSPHINXOPTS    = -j 4"
  },
  {
    "path": "docs/README.md",
    "chars": 2207,
    "preview": "<!--\n SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n SPDX-Licen"
  },
  {
    "path": "docs/source/_static/css/custom.css",
    "chars": 1127,
    "preview": "/*\n * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n * SPDX-Lic"
  },
  {
    "path": "docs/source/_templates/sidebar-nav-bs.html",
    "chars": 1475,
    "preview": "{#\nSPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License-Identi"
  },
  {
    "path": "docs/source/build-workflows/a2a-client.md",
    "chars": 12326,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/build-workflows/about-building-workflows.md",
    "chars": 4400,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/build-workflows/advanced/index.md",
    "chars": 793,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/build-workflows/advanced/interactive-workflows.md",
    "chars": 3419,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/build-workflows/advanced/middleware.md",
    "chars": 29527,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/build-workflows/embedders.md",
    "chars": 5506,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/build-workflows/functions-and-function-groups/function-groups.md",
    "chars": 30177,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/build-workflows/functions-and-function-groups/functions.md",
    "chars": 3990,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/build-workflows/functions-and-function-groups/index.md",
    "chars": 770,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/build-workflows/llms/index.md",
    "chars": 14206,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/build-workflows/llms/using-local-llms.md",
    "chars": 10342,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/build-workflows/mcp-client.md",
    "chars": 17747,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/build-workflows/memory.md",
    "chars": 5188,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/build-workflows/object-store.md",
    "chars": 7805,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/build-workflows/retrievers.md",
    "chars": 9046,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/build-workflows/workflow-configuration.md",
    "chars": 11992,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/components/agents/auto-memory-wrapper/auto-memory-wrapper.md",
    "chars": 10294,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/components/agents/auto-memory-wrapper/index.md",
    "chars": 1586,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/components/agents/index.md",
    "chars": 2333,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/components/agents/parallel-executor/index.md",
    "chars": 1155,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License-Iden"
  },
  {
    "path": "docs/source/components/agents/parallel-executor/parallel-executor.md",
    "chars": 4526,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License-Iden"
  },
  {
    "path": "docs/source/components/agents/react-agent/index.md",
    "chars": 1279,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/components/agents/react-agent/react-agent.md",
    "chars": 10840,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/components/agents/reasoning-agent/index.md",
    "chars": 1359,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/components/agents/reasoning-agent/reasoning-agent.md",
    "chars": 5797,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/components/agents/responses-api-and-agent/index.md",
    "chars": 1711,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/components/agents/responses-api-and-agent/responses-api-and-agent.md",
    "chars": 4446,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/components/agents/rewoo-agent/index.md",
    "chars": 2722,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/components/agents/rewoo-agent/rewoo-agent.md",
    "chars": 6836,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/components/agents/router-agent/index.md",
    "chars": 1718,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/components/agents/router-agent/router-agent.md",
    "chars": 6729,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/components/agents/sequential-executor/index.md",
    "chars": 1468,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/components/agents/sequential-executor/sequential-executor.md",
    "chars": 6855,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/components/agents/tool-calling-agent/index.md",
    "chars": 1456,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/components/agents/tool-calling-agent/tool-calling-agent.md",
    "chars": 5115,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/components/auth/a2a-auth.md",
    "chars": 11590,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/components/auth/api-authentication.md",
    "chars": 12249,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/components/auth/index.md",
    "chars": 895,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/components/auth/mcp-auth/index.md",
    "chars": 15293,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/components/auth/mcp-auth/mcp-auth-token-storage.md",
    "chars": 7058,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/components/auth/mcp-auth/mcp-service-account-auth.md",
    "chars": 13490,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/components/auth/user-identity.md",
    "chars": 5810,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License-Iden"
  },
  {
    "path": "docs/source/components/functions/code-execution.md",
    "chars": 5048,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/components/functions/index.md",
    "chars": 1215,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/components/functions/text-to-sql.md",
    "chars": 18942,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/components/integrations/a2a.md",
    "chars": 4880,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/components/integrations/frameworks.md",
    "chars": 15339,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/components/integrations/index.md",
    "chars": 854,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/components/integrations/integrating-aws-bedrock-models.md",
    "chars": 3028,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/components/integrations/integrating-oci-generative-ai-models.md",
    "chars": 4193,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/components/sharing-components.md",
    "chars": 9829,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/conf.py",
    "chars": 24612,
    "preview": "# SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n# SPDX-License-"
  },
  {
    "path": "docs/source/extend/custom-components/adding-a-retriever.md",
    "chars": 3163,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/extend/custom-components/adding-an-authentication-provider.md",
    "chars": 6168,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/extend/custom-components/adding-an-llm-provider.md",
    "chars": 13871,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/extend/custom-components/custom-dataset-loader.md",
    "chars": 6164,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/extend/custom-components/custom-evaluator.md",
    "chars": 16512,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/extend/custom-components/custom-functions/function-groups.md",
    "chars": 25638,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/extend/custom-components/custom-functions/functions.md",
    "chars": 24493,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/extend/custom-components/custom-functions/per-user-functions.md",
    "chars": 12263,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/extend/custom-components/finetuning.md",
    "chars": 19568,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/extend/custom-components/gated-fields.md",
    "chars": 3090,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/extend/custom-components/index.md",
    "chars": 1365,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/extend/custom-components/mcp-server.md",
    "chars": 11769,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/extend/custom-components/memory.md",
    "chars": 11532,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/extend/custom-components/object-store.md",
    "chars": 14229,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/extend/custom-components/optimizer.md",
    "chars": 8678,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License-Iden"
  },
  {
    "path": "docs/source/extend/custom-components/telemetry-exporters.md",
    "chars": 58476,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/extend/plugins.md",
    "chars": 13734,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/extend/testing/add-unit-tests-for-tools.md",
    "chars": 5583,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/extend/testing/index.md",
    "chars": 769,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/extend/testing/test-with-nat-test-llm.md",
    "chars": 2225,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/get-started/installation.md",
    "chars": 9925,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/get-started/quick-start.md",
    "chars": 3950,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/get-started/tutorials/add-tools-to-a-workflow.md",
    "chars": 9054,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/get-started/tutorials/build-a-demo-agent-workflow-using-cursor-rules.md",
    "chars": 7221,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/get-started/tutorials/create-a-new-workflow.md",
    "chars": 15124,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/get-started/tutorials/customize-a-workflow.md",
    "chars": 4534,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/get-started/tutorials/index.md",
    "chars": 1451,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/improve-workflows/about-improving-workflows.md",
    "chars": 2179,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/improve-workflows/evaluate.md",
    "chars": 58965,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/improve-workflows/finetuning/concepts.md",
    "chars": 26121,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/improve-workflows/finetuning/dpo_with_nemo_customizer.md",
    "chars": 40232,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/improve-workflows/finetuning/index.md",
    "chars": 5015,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/improve-workflows/finetuning/rl_with_openpipe.md",
    "chars": 25916,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/improve-workflows/optimizer.md",
    "chars": 43482,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/improve-workflows/profiler.md",
    "chars": 36504,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/improve-workflows/sizing-calc.md",
    "chars": 20620,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/improve-workflows/test-time-compute.md",
    "chars": 11044,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/index.md",
    "chars": 9911,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/reference/cli.md",
    "chars": 63053,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/reference/rest-api/api-server-endpoints.md",
    "chars": 39442,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/reference/rest-api/evaluate-api.md",
    "chars": 8266,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/reference/rest-api/http-interactive-execution.md",
    "chars": 16476,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/reference/rest-api/index.md",
    "chars": 911,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/reference/rest-api/websockets.md",
    "chars": 15648,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/release-notes.md",
    "chars": 1346,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/resources/contributing/code-of-conduct.md",
    "chars": 826,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/resources/contributing/cursor/cursor-rules-developer-guide.md",
    "chars": 8183,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/resources/contributing/cursor/cursor-rules-reference.md",
    "chars": 8953,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/resources/contributing/cursor/index.md",
    "chars": 772,
    "preview": "<!--\nSPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\nSPDX-License"
  },
  {
    "path": "docs/source/resources/contributing/index.md",
    "chars": 19569,
    "preview": "<!--\n    SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n    SPDX"
  }
]

// ... and 2080 more files (download for full content)

About this extraction

This page contains the full source code of the NVIDIA/AIQToolkit GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 2280 files (16.8 MB), approximately 4.5M tokens, and a symbol index with 13975 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!