nvidia-nat 1.4.0a20251112__py3-none-any.whl → 1.4.0a20260113__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- aiq/__init__.py +1 -1
- nat/{front_ends/mcp → agent/auto_memory_wrapper}/__init__.py +1 -1
- nat/agent/auto_memory_wrapper/agent.py +278 -0
- nat/agent/auto_memory_wrapper/register.py +227 -0
- nat/agent/auto_memory_wrapper/state.py +30 -0
- nat/agent/base.py +1 -1
- nat/agent/dual_node.py +1 -1
- nat/agent/prompt_optimizer/prompt.py +1 -1
- nat/agent/prompt_optimizer/register.py +1 -1
- nat/agent/react_agent/agent.py +16 -9
- nat/agent/react_agent/output_parser.py +2 -2
- nat/agent/react_agent/prompt.py +3 -2
- nat/agent/react_agent/register.py +2 -2
- nat/agent/react_agent/register_per_user_agent.py +104 -0
- nat/agent/reasoning_agent/reasoning_agent.py +1 -1
- nat/agent/register.py +3 -1
- nat/agent/responses_api_agent/__init__.py +1 -1
- nat/agent/responses_api_agent/register.py +1 -1
- nat/agent/rewoo_agent/agent.py +9 -4
- nat/agent/rewoo_agent/prompt.py +1 -1
- nat/agent/rewoo_agent/register.py +1 -1
- nat/agent/tool_calling_agent/agent.py +5 -4
- nat/agent/tool_calling_agent/register.py +1 -1
- nat/authentication/__init__.py +1 -1
- nat/authentication/api_key/__init__.py +1 -1
- nat/authentication/api_key/api_key_auth_provider.py +1 -1
- nat/authentication/api_key/api_key_auth_provider_config.py +22 -7
- nat/authentication/api_key/register.py +1 -1
- nat/authentication/credential_validator/__init__.py +1 -1
- nat/authentication/credential_validator/bearer_token_validator.py +1 -1
- nat/authentication/exceptions/__init__.py +1 -1
- nat/authentication/exceptions/api_key_exceptions.py +1 -1
- nat/authentication/http_basic_auth/http_basic_auth_provider.py +1 -1
- nat/authentication/http_basic_auth/register.py +1 -1
- nat/authentication/interfaces.py +1 -1
- nat/authentication/oauth2/__init__.py +1 -1
- nat/authentication/oauth2/oauth2_auth_code_flow_provider.py +1 -1
- nat/authentication/oauth2/oauth2_auth_code_flow_provider_config.py +1 -1
- nat/authentication/oauth2/oauth2_resource_server_config.py +1 -1
- nat/authentication/oauth2/register.py +1 -1
- nat/authentication/register.py +1 -1
- nat/builder/builder.py +563 -1
- nat/builder/child_builder.py +385 -0
- nat/builder/component_utils.py +34 -4
- nat/builder/context.py +34 -1
- nat/builder/embedder.py +1 -1
- nat/builder/eval_builder.py +19 -7
- nat/builder/evaluator.py +1 -1
- nat/builder/framework_enum.py +3 -1
- nat/builder/front_end.py +1 -1
- nat/builder/function.py +113 -5
- nat/builder/function_base.py +1 -1
- nat/builder/function_info.py +1 -1
- nat/builder/intermediate_step_manager.py +1 -1
- nat/builder/llm.py +1 -1
- nat/builder/per_user_workflow_builder.py +843 -0
- nat/builder/retriever.py +1 -1
- nat/builder/sync_builder.py +571 -0
- nat/builder/user_interaction_manager.py +1 -1
- nat/builder/workflow.py +5 -3
- nat/builder/workflow_builder.py +619 -378
- nat/cli/__init__.py +1 -1
- nat/cli/cli_utils/config_override.py +1 -1
- nat/cli/cli_utils/validation.py +32 -1
- nat/cli/commands/configure/channel/add.py +1 -1
- nat/cli/commands/configure/channel/channel.py +1 -1
- nat/cli/commands/configure/channel/remove.py +1 -1
- nat/cli/commands/configure/channel/update.py +1 -1
- nat/cli/commands/configure/configure.py +1 -1
- nat/cli/commands/evaluate.py +87 -13
- nat/cli/commands/finetune.py +132 -0
- nat/cli/commands/info/__init__.py +1 -1
- nat/cli/commands/info/info.py +1 -1
- nat/cli/commands/info/list_channels.py +1 -1
- nat/cli/commands/info/list_components.py +1 -1
- nat/cli/commands/object_store/__init__.py +1 -1
- nat/cli/commands/object_store/object_store.py +1 -1
- nat/cli/commands/optimize.py +1 -1
- nat/cli/commands/{mcp → red_teaming}/__init__.py +1 -1
- nat/cli/commands/red_teaming/red_teaming.py +138 -0
- nat/cli/commands/red_teaming/red_teaming_utils.py +73 -0
- nat/cli/commands/registry/__init__.py +1 -1
- nat/cli/commands/registry/publish.py +1 -1
- nat/cli/commands/registry/pull.py +1 -1
- nat/cli/commands/registry/registry.py +1 -1
- nat/cli/commands/registry/remove.py +1 -1
- nat/cli/commands/registry/search.py +1 -1
- nat/cli/commands/sizing/__init__.py +1 -1
- nat/cli/commands/sizing/calc.py +1 -1
- nat/cli/commands/sizing/sizing.py +1 -1
- nat/cli/commands/start.py +1 -1
- nat/cli/commands/uninstall.py +1 -1
- nat/cli/commands/validate.py +1 -1
- nat/cli/commands/workflow/__init__.py +1 -1
- nat/cli/commands/workflow/workflow.py +1 -1
- nat/cli/commands/workflow/workflow_commands.py +3 -2
- nat/cli/entrypoint.py +15 -37
- nat/cli/main.py +2 -2
- nat/cli/plugin_loader.py +69 -0
- nat/cli/register_workflow.py +233 -5
- nat/cli/type_registry.py +237 -3
- nat/control_flow/register.py +1 -1
- nat/control_flow/router_agent/agent.py +1 -1
- nat/control_flow/router_agent/prompt.py +1 -1
- nat/control_flow/router_agent/register.py +1 -1
- nat/control_flow/sequential_executor.py +28 -7
- nat/data_models/__init__.py +1 -1
- nat/data_models/agent.py +1 -1
- nat/data_models/api_server.py +38 -3
- nat/data_models/authentication.py +1 -1
- nat/data_models/common.py +1 -1
- nat/data_models/component.py +9 -1
- nat/data_models/component_ref.py +45 -1
- nat/data_models/config.py +78 -1
- nat/data_models/dataset_handler.py +15 -2
- nat/data_models/discovery_metadata.py +1 -1
- nat/data_models/embedder.py +1 -1
- nat/data_models/evaluate.py +6 -1
- nat/data_models/evaluator.py +1 -1
- nat/data_models/finetuning.py +260 -0
- nat/data_models/front_end.py +1 -1
- nat/data_models/function.py +15 -2
- nat/data_models/function_dependencies.py +1 -1
- nat/data_models/gated_field_mixin.py +1 -1
- nat/data_models/interactive.py +1 -1
- nat/data_models/intermediate_step.py +29 -2
- nat/data_models/invocation_node.py +1 -1
- nat/data_models/llm.py +1 -1
- nat/data_models/logging.py +1 -1
- nat/data_models/memory.py +1 -1
- nat/data_models/middleware.py +37 -0
- nat/data_models/object_store.py +1 -1
- nat/data_models/openai_mcp.py +1 -1
- nat/data_models/optimizable.py +1 -1
- nat/data_models/optimizer.py +1 -1
- nat/data_models/profiler.py +1 -1
- nat/data_models/registry_handler.py +1 -1
- nat/data_models/retriever.py +1 -1
- nat/data_models/retry_mixin.py +1 -1
- nat/data_models/runtime_enum.py +26 -0
- nat/data_models/span.py +1 -1
- nat/data_models/step_adaptor.py +1 -1
- nat/data_models/streaming.py +1 -1
- nat/data_models/swe_bench_model.py +1 -1
- nat/data_models/telemetry_exporter.py +1 -1
- nat/data_models/thinking_mixin.py +1 -1
- nat/data_models/ttc_strategy.py +1 -1
- nat/embedder/azure_openai_embedder.py +1 -1
- nat/embedder/nim_embedder.py +1 -1
- nat/embedder/openai_embedder.py +1 -1
- nat/embedder/register.py +1 -1
- nat/eval/__init__.py +1 -1
- nat/eval/config.py +8 -1
- nat/eval/dataset_handler/dataset_downloader.py +1 -1
- nat/eval/dataset_handler/dataset_filter.py +1 -1
- nat/eval/dataset_handler/dataset_handler.py +4 -2
- nat/eval/evaluate.py +226 -81
- nat/eval/evaluator/__init__.py +1 -1
- nat/eval/evaluator/base_evaluator.py +2 -2
- nat/eval/evaluator/evaluator_model.py +3 -2
- nat/eval/intermediate_step_adapter.py +1 -1
- nat/eval/llm_validator.py +336 -0
- nat/eval/rag_evaluator/evaluate.py +17 -10
- nat/eval/rag_evaluator/register.py +1 -1
- nat/eval/red_teaming_evaluator/__init__.py +14 -0
- nat/eval/red_teaming_evaluator/data_models.py +66 -0
- nat/eval/red_teaming_evaluator/evaluate.py +327 -0
- nat/eval/red_teaming_evaluator/filter_conditions.py +75 -0
- nat/eval/red_teaming_evaluator/register.py +55 -0
- nat/eval/register.py +2 -1
- nat/eval/remote_workflow.py +1 -1
- nat/eval/runners/__init__.py +1 -1
- nat/eval/runners/config.py +1 -1
- nat/eval/runners/multi_eval_runner.py +1 -1
- nat/eval/runners/red_teaming_runner/__init__.py +24 -0
- nat/eval/runners/red_teaming_runner/config.py +282 -0
- nat/eval/runners/red_teaming_runner/report_utils.py +707 -0
- nat/eval/runners/red_teaming_runner/runner.py +867 -0
- nat/eval/runtime_evaluator/__init__.py +1 -1
- nat/eval/runtime_evaluator/evaluate.py +1 -1
- nat/eval/runtime_evaluator/register.py +1 -1
- nat/eval/runtime_event_subscriber.py +1 -1
- nat/eval/swe_bench_evaluator/evaluate.py +1 -1
- nat/eval/swe_bench_evaluator/register.py +1 -1
- nat/eval/trajectory_evaluator/evaluate.py +2 -2
- nat/eval/trajectory_evaluator/register.py +1 -1
- nat/eval/tunable_rag_evaluator/evaluate.py +5 -5
- nat/eval/tunable_rag_evaluator/register.py +1 -1
- nat/eval/usage_stats.py +1 -1
- nat/eval/utils/eval_trace_ctx.py +1 -1
- nat/eval/utils/output_uploader.py +1 -1
- nat/eval/utils/tqdm_position_registry.py +1 -1
- nat/eval/utils/weave_eval.py +1 -1
- nat/experimental/decorators/experimental_warning_decorator.py +1 -1
- nat/experimental/test_time_compute/editing/iterative_plan_refinement_editor.py +1 -1
- nat/experimental/test_time_compute/editing/llm_as_a_judge_editor.py +1 -1
- nat/experimental/test_time_compute/editing/motivation_aware_summarization.py +1 -1
- nat/experimental/test_time_compute/functions/execute_score_select_function.py +1 -1
- nat/experimental/test_time_compute/functions/multi_llm_judge_function.py +88 -0
- nat/experimental/test_time_compute/functions/plan_select_execute_function.py +1 -1
- nat/experimental/test_time_compute/functions/ttc_tool_orchestration_function.py +1 -1
- nat/experimental/test_time_compute/functions/ttc_tool_wrapper_function.py +1 -1
- nat/experimental/test_time_compute/models/editor_config.py +1 -1
- nat/experimental/test_time_compute/models/scoring_config.py +1 -1
- nat/experimental/test_time_compute/models/search_config.py +20 -2
- nat/experimental/test_time_compute/models/selection_config.py +33 -2
- nat/experimental/test_time_compute/models/stage_enums.py +1 -1
- nat/experimental/test_time_compute/models/strategy_base.py +1 -1
- nat/experimental/test_time_compute/models/tool_use_config.py +1 -1
- nat/experimental/test_time_compute/models/ttc_item.py +1 -1
- nat/experimental/test_time_compute/register.py +4 -1
- nat/experimental/test_time_compute/scoring/llm_based_agent_scorer.py +1 -1
- nat/experimental/test_time_compute/scoring/llm_based_plan_scorer.py +1 -1
- nat/experimental/test_time_compute/scoring/motivation_aware_scorer.py +1 -1
- nat/experimental/test_time_compute/search/multi_llm_generation.py +115 -0
- nat/experimental/test_time_compute/search/multi_llm_planner.py +1 -1
- nat/experimental/test_time_compute/search/multi_query_retrieval_search.py +1 -1
- nat/experimental/test_time_compute/search/single_shot_multi_plan_planner.py +1 -1
- nat/experimental/test_time_compute/selection/best_of_n_selector.py +1 -1
- nat/experimental/test_time_compute/selection/llm_based_agent_output_selector.py +1 -1
- nat/experimental/test_time_compute/selection/llm_based_output_merging_selector.py +1 -1
- nat/experimental/test_time_compute/selection/llm_based_plan_selector.py +1 -1
- nat/experimental/test_time_compute/selection/llm_judge_selection.py +127 -0
- nat/experimental/test_time_compute/selection/threshold_selector.py +1 -1
- nat/finetuning/__init__.py +24 -0
- nat/finetuning/finetuning_runtime.py +143 -0
- nat/finetuning/interfaces/__init__.py +24 -0
- nat/finetuning/interfaces/finetuning_runner.py +261 -0
- nat/finetuning/interfaces/trainer_adapter.py +103 -0
- nat/finetuning/interfaces/trajectory_builder.py +115 -0
- nat/finetuning/utils/__init__.py +15 -0
- nat/finetuning/utils/parsers/__init__.py +15 -0
- nat/finetuning/utils/parsers/adk_parser.py +141 -0
- nat/finetuning/utils/parsers/base_parser.py +238 -0
- nat/finetuning/utils/parsers/common.py +91 -0
- nat/finetuning/utils/parsers/langchain_parser.py +267 -0
- nat/finetuning/utils/parsers/llama_index_parser.py +218 -0
- nat/front_ends/__init__.py +1 -1
- nat/front_ends/console/__init__.py +1 -1
- nat/front_ends/console/authentication_flow_handler.py +1 -1
- nat/front_ends/console/console_front_end_config.py +4 -1
- nat/front_ends/console/console_front_end_plugin.py +5 -4
- nat/front_ends/console/register.py +1 -1
- nat/front_ends/cron/__init__.py +1 -1
- nat/front_ends/fastapi/__init__.py +1 -1
- nat/front_ends/fastapi/async_job.py +128 -0
- nat/front_ends/fastapi/auth_flow_handlers/http_flow_handler.py +1 -1
- nat/front_ends/fastapi/auth_flow_handlers/websocket_flow_handler.py +13 -9
- nat/front_ends/fastapi/dask_client_mixin.py +1 -1
- nat/front_ends/fastapi/fastapi_front_end_config.py +23 -1
- nat/front_ends/fastapi/fastapi_front_end_controller.py +1 -1
- nat/front_ends/fastapi/fastapi_front_end_plugin.py +25 -30
- nat/front_ends/fastapi/fastapi_front_end_plugin_worker.py +318 -59
- nat/front_ends/fastapi/html_snippets/__init__.py +1 -1
- nat/front_ends/fastapi/html_snippets/auth_code_grant_success.py +1 -1
- nat/front_ends/fastapi/intermediate_steps_subscriber.py +12 -1
- nat/front_ends/fastapi/job_store.py +23 -11
- nat/front_ends/fastapi/main.py +1 -1
- nat/front_ends/fastapi/message_handler.py +27 -4
- nat/front_ends/fastapi/message_validator.py +54 -2
- nat/front_ends/fastapi/register.py +1 -1
- nat/front_ends/fastapi/response_helpers.py +16 -15
- nat/front_ends/fastapi/step_adaptor.py +1 -1
- nat/front_ends/fastapi/utils.py +1 -1
- nat/front_ends/register.py +1 -2
- nat/front_ends/simple_base/__init__.py +1 -1
- nat/front_ends/simple_base/simple_front_end_plugin_base.py +6 -4
- nat/llm/aws_bedrock_llm.py +1 -1
- nat/llm/azure_openai_llm.py +10 -1
- nat/llm/dynamo_llm.py +363 -0
- nat/llm/huggingface_llm.py +177 -0
- nat/llm/litellm_llm.py +1 -1
- nat/llm/nim_llm.py +1 -1
- nat/llm/openai_llm.py +1 -1
- nat/llm/register.py +3 -1
- nat/llm/utils/__init__.py +1 -1
- nat/llm/utils/env_config_value.py +1 -1
- nat/llm/utils/error.py +1 -1
- nat/llm/utils/thinking.py +1 -1
- nat/memory/__init__.py +1 -1
- nat/memory/interfaces.py +1 -1
- nat/memory/models.py +1 -1
- nat/meta/pypi.md +1 -1
- nat/middleware/__init__.py +35 -0
- nat/middleware/cache/__init__.py +14 -0
- nat/middleware/cache/cache_middleware.py +253 -0
- nat/middleware/cache/cache_middleware_config.py +44 -0
- nat/middleware/cache/register.py +33 -0
- nat/middleware/defense/__init__.py +14 -0
- nat/middleware/defense/defense_middleware.py +362 -0
- nat/middleware/defense/defense_middleware_content_guard.py +455 -0
- nat/middleware/defense/defense_middleware_data_models.py +91 -0
- nat/middleware/defense/defense_middleware_output_verifier.py +440 -0
- nat/middleware/defense/defense_middleware_pii.py +356 -0
- nat/middleware/defense/register.py +82 -0
- nat/middleware/dynamic/__init__.py +14 -0
- nat/middleware/dynamic/dynamic_function_middleware.py +962 -0
- nat/middleware/dynamic/dynamic_middleware_config.py +132 -0
- nat/middleware/dynamic/register.py +34 -0
- nat/middleware/function_middleware.py +370 -0
- nat/middleware/logging/__init__.py +14 -0
- nat/middleware/logging/logging_middleware.py +67 -0
- nat/middleware/logging/logging_middleware_config.py +28 -0
- nat/middleware/logging/register.py +33 -0
- nat/middleware/middleware.py +298 -0
- nat/middleware/red_teaming/__init__.py +14 -0
- nat/middleware/red_teaming/red_teaming_middleware.py +344 -0
- nat/middleware/red_teaming/red_teaming_middleware_config.py +112 -0
- nat/middleware/red_teaming/register.py +47 -0
- nat/middleware/register.py +22 -0
- nat/middleware/utils/__init__.py +14 -0
- nat/middleware/utils/workflow_inventory.py +155 -0
- nat/object_store/__init__.py +1 -1
- nat/object_store/in_memory_object_store.py +1 -1
- nat/object_store/interfaces.py +1 -1
- nat/object_store/models.py +1 -1
- nat/object_store/register.py +1 -1
- nat/observability/__init__.py +1 -1
- nat/observability/exporter/__init__.py +1 -1
- nat/observability/exporter/base_exporter.py +1 -1
- nat/observability/exporter/exporter.py +1 -1
- nat/observability/exporter/file_exporter.py +1 -1
- nat/observability/exporter/processing_exporter.py +1 -1
- nat/observability/exporter/raw_exporter.py +1 -1
- nat/observability/exporter/span_exporter.py +7 -1
- nat/observability/exporter_manager.py +1 -1
- nat/observability/mixin/__init__.py +1 -1
- nat/observability/mixin/batch_config_mixin.py +1 -1
- nat/observability/mixin/collector_config_mixin.py +1 -1
- nat/observability/mixin/file_mixin.py +1 -1
- nat/observability/mixin/file_mode.py +1 -1
- nat/observability/mixin/redaction_config_mixin.py +1 -1
- nat/observability/mixin/resource_conflict_mixin.py +1 -1
- nat/observability/mixin/serialize_mixin.py +1 -1
- nat/observability/mixin/tagging_config_mixin.py +1 -1
- nat/observability/mixin/type_introspection_mixin.py +1 -1
- nat/observability/processor/__init__.py +1 -1
- nat/observability/processor/batching_processor.py +1 -1
- nat/observability/processor/callback_processor.py +1 -1
- nat/observability/processor/falsy_batch_filter_processor.py +1 -1
- nat/observability/processor/intermediate_step_serializer.py +1 -1
- nat/observability/processor/processor.py +1 -1
- nat/observability/processor/processor_factory.py +1 -1
- nat/observability/processor/redaction/__init__.py +1 -1
- nat/observability/processor/redaction/contextual_redaction_processor.py +1 -1
- nat/observability/processor/redaction/contextual_span_redaction_processor.py +1 -1
- nat/observability/processor/redaction/redaction_processor.py +1 -1
- nat/observability/processor/redaction/span_header_redaction_processor.py +1 -1
- nat/observability/processor/span_tagging_processor.py +1 -1
- nat/observability/register.py +1 -1
- nat/observability/utils/__init__.py +1 -1
- nat/observability/utils/dict_utils.py +1 -1
- nat/observability/utils/time_utils.py +1 -1
- nat/profiler/calc/__init__.py +1 -1
- nat/profiler/calc/calc_runner.py +3 -3
- nat/profiler/calc/calculations.py +1 -1
- nat/profiler/calc/data_models.py +1 -1
- nat/profiler/calc/plot.py +30 -3
- nat/profiler/callbacks/agno_callback_handler.py +1 -1
- nat/profiler/callbacks/base_callback_class.py +1 -1
- nat/profiler/callbacks/langchain_callback_handler.py +33 -3
- nat/profiler/callbacks/llama_index_callback_handler.py +13 -10
- nat/profiler/callbacks/semantic_kernel_callback_handler.py +1 -1
- nat/profiler/callbacks/token_usage_base_model.py +1 -1
- nat/profiler/data_frame_row.py +1 -1
- nat/profiler/data_models.py +1 -1
- nat/profiler/decorators/framework_wrapper.py +32 -1
- nat/profiler/decorators/function_tracking.py +1 -1
- nat/profiler/forecasting/config.py +1 -1
- nat/profiler/forecasting/model_trainer.py +1 -1
- nat/profiler/forecasting/models/__init__.py +1 -1
- nat/profiler/forecasting/models/forecasting_base_model.py +1 -1
- nat/profiler/forecasting/models/linear_model.py +1 -1
- nat/profiler/forecasting/models/random_forest_regressor.py +1 -1
- nat/profiler/inference_metrics_model.py +1 -1
- nat/profiler/inference_optimization/bottleneck_analysis/nested_stack_analysis.py +1 -1
- nat/profiler/inference_optimization/bottleneck_analysis/simple_stack_analysis.py +1 -1
- nat/profiler/inference_optimization/data_models.py +1 -1
- nat/profiler/inference_optimization/experimental/concurrency_spike_analysis.py +1 -1
- nat/profiler/inference_optimization/experimental/prefix_span_analysis.py +1 -1
- nat/profiler/inference_optimization/llm_metrics.py +1 -1
- nat/profiler/inference_optimization/prompt_caching.py +1 -1
- nat/profiler/inference_optimization/token_uniqueness.py +1 -1
- nat/profiler/inference_optimization/workflow_runtimes.py +1 -1
- nat/profiler/intermediate_property_adapter.py +1 -1
- nat/profiler/parameter_optimization/optimizable_utils.py +1 -1
- nat/profiler/parameter_optimization/optimizer_runtime.py +1 -1
- nat/profiler/parameter_optimization/parameter_optimizer.py +1 -1
- nat/profiler/parameter_optimization/parameter_selection.py +1 -1
- nat/profiler/parameter_optimization/pareto_visualizer.py +1 -1
- nat/profiler/parameter_optimization/prompt_optimizer.py +1 -1
- nat/profiler/parameter_optimization/update_helpers.py +1 -1
- nat/profiler/profile_runner.py +1 -1
- nat/profiler/utils.py +1 -1
- nat/registry_handlers/local/local_handler.py +1 -1
- nat/registry_handlers/local/register_local.py +1 -1
- nat/registry_handlers/metadata_factory.py +1 -1
- nat/registry_handlers/package_utils.py +1 -1
- nat/registry_handlers/pypi/pypi_handler.py +1 -1
- nat/registry_handlers/pypi/register_pypi.py +1 -1
- nat/registry_handlers/register.py +1 -1
- nat/registry_handlers/registry_handler_base.py +1 -1
- nat/registry_handlers/rest/register_rest.py +1 -1
- nat/registry_handlers/rest/rest_handler.py +1 -1
- nat/registry_handlers/schemas/headers.py +1 -1
- nat/registry_handlers/schemas/package.py +1 -1
- nat/registry_handlers/schemas/publish.py +1 -1
- nat/registry_handlers/schemas/pull.py +1 -1
- nat/registry_handlers/schemas/remove.py +1 -1
- nat/registry_handlers/schemas/search.py +1 -1
- nat/registry_handlers/schemas/status.py +1 -1
- nat/retriever/interface.py +1 -1
- nat/retriever/milvus/__init__.py +1 -1
- nat/retriever/milvus/register.py +12 -4
- nat/retriever/milvus/retriever.py +103 -41
- nat/retriever/models.py +1 -1
- nat/retriever/nemo_retriever/__init__.py +1 -1
- nat/retriever/nemo_retriever/register.py +1 -1
- nat/retriever/nemo_retriever/retriever.py +5 -5
- nat/retriever/register.py +1 -1
- nat/runtime/__init__.py +1 -1
- nat/runtime/loader.py +10 -3
- nat/runtime/metrics.py +180 -0
- nat/runtime/runner.py +13 -6
- nat/runtime/session.py +458 -32
- nat/runtime/user_metadata.py +1 -1
- nat/settings/global_settings.py +1 -1
- nat/tool/chat_completion.py +1 -1
- nat/tool/code_execution/README.md +1 -1
- nat/tool/code_execution/code_sandbox.py +2 -2
- nat/tool/code_execution/local_sandbox/Dockerfile.sandbox +1 -1
- nat/tool/code_execution/local_sandbox/__init__.py +1 -1
- nat/tool/code_execution/local_sandbox/local_sandbox_server.py +1 -1
- nat/tool/code_execution/local_sandbox/start_local_sandbox.sh +1 -1
- nat/tool/code_execution/register.py +1 -1
- nat/tool/code_execution/utils.py +1 -1
- nat/tool/datetime_tools.py +1 -1
- nat/tool/document_search.py +1 -1
- nat/tool/github_tools.py +1 -1
- nat/tool/memory_tools/add_memory_tool.py +1 -1
- nat/tool/memory_tools/delete_memory_tool.py +1 -1
- nat/tool/memory_tools/get_memory_tool.py +1 -1
- nat/tool/nvidia_rag.py +2 -2
- nat/tool/register.py +1 -1
- nat/tool/retriever.py +1 -1
- nat/tool/server_tools.py +1 -1
- nat/utils/__init__.py +8 -5
- nat/utils/callable_utils.py +1 -1
- nat/utils/data_models/schema_validator.py +1 -1
- nat/utils/debugging_utils.py +1 -1
- nat/utils/decorators.py +1 -1
- nat/utils/dump_distro_mapping.py +1 -1
- nat/utils/exception_handlers/automatic_retries.py +3 -3
- nat/utils/exception_handlers/schemas.py +1 -1
- nat/utils/io/model_processing.py +1 -1
- nat/utils/io/supress_logs.py +33 -0
- nat/utils/io/yaml_tools.py +1 -1
- nat/utils/log_levels.py +1 -1
- nat/utils/log_utils.py +13 -1
- nat/utils/metadata_utils.py +1 -1
- nat/utils/optional_imports.py +1 -1
- nat/utils/producer_consumer_queue.py +1 -1
- nat/utils/reactive/base/observable_base.py +1 -1
- nat/utils/reactive/base/observer_base.py +1 -1
- nat/utils/reactive/base/subject_base.py +1 -1
- nat/utils/reactive/observable.py +1 -1
- nat/utils/reactive/observer.py +1 -1
- nat/utils/reactive/subject.py +1 -1
- nat/utils/reactive/subscription.py +1 -1
- nat/utils/responses_api.py +1 -1
- nat/utils/settings/global_settings.py +1 -1
- nat/utils/string_utils.py +1 -1
- nat/utils/type_converter.py +18 -5
- nat/utils/type_utils.py +1 -1
- nat/utils/url_utils.py +1 -1
- {nvidia_nat-1.4.0a20251112.dist-info → nvidia_nat-1.4.0a20260113.dist-info}/METADATA +46 -15
- nvidia_nat-1.4.0a20260113.dist-info/RECORD +547 -0
- nvidia_nat-1.4.0a20260113.dist-info/entry_points.txt +38 -0
- nat/cli/commands/mcp/mcp.py +0 -986
- nat/front_ends/mcp/introspection_token_verifier.py +0 -73
- nat/front_ends/mcp/mcp_front_end_config.py +0 -109
- nat/front_ends/mcp/mcp_front_end_plugin.py +0 -151
- nat/front_ends/mcp/mcp_front_end_plugin_worker.py +0 -362
- nat/front_ends/mcp/memory_profiler.py +0 -320
- nat/front_ends/mcp/register.py +0 -27
- nat/front_ends/mcp/tool_converter.py +0 -321
- nvidia_nat-1.4.0a20251112.dist-info/RECORD +0 -481
- nvidia_nat-1.4.0a20251112.dist-info/entry_points.txt +0 -22
- {nvidia_nat-1.4.0a20251112.dist-info → nvidia_nat-1.4.0a20260113.dist-info}/WHEEL +0 -0
- {nvidia_nat-1.4.0a20251112.dist-info → nvidia_nat-1.4.0a20260113.dist-info}/licenses/LICENSE-3rd-party.txt +0 -0
- {nvidia_nat-1.4.0a20251112.dist-info → nvidia_nat-1.4.0a20260113.dist-info}/licenses/LICENSE.md +0 -0
- {nvidia_nat-1.4.0a20251112.dist-info → nvidia_nat-1.4.0a20260113.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
import typing
|
|
17
|
+
from collections.abc import Generator
|
|
18
|
+
from collections.abc import Sequence
|
|
19
|
+
from contextlib import contextmanager
|
|
20
|
+
|
|
21
|
+
from nat.authentication.interfaces import AuthProviderBase
|
|
22
|
+
from nat.builder.builder import Builder
|
|
23
|
+
from nat.builder.builder import UserManagerHolder
|
|
24
|
+
from nat.builder.builder import _current_builder_context
|
|
25
|
+
from nat.builder.framework_enum import LLMFrameworkEnum
|
|
26
|
+
from nat.builder.function import Function
|
|
27
|
+
from nat.builder.function import FunctionGroup
|
|
28
|
+
from nat.builder.sync_builder import SyncBuilder
|
|
29
|
+
from nat.data_models.authentication import AuthProviderBaseConfig
|
|
30
|
+
from nat.data_models.common import TypedBaseModel
|
|
31
|
+
from nat.data_models.component_ref import FunctionGroupRef
|
|
32
|
+
from nat.data_models.component_ref import FunctionRef
|
|
33
|
+
from nat.data_models.component_ref import MiddlewareRef
|
|
34
|
+
from nat.data_models.component_ref import TrainerAdapterRef
|
|
35
|
+
from nat.data_models.component_ref import TrainerRef
|
|
36
|
+
from nat.data_models.component_ref import TrajectoryBuilderRef
|
|
37
|
+
from nat.data_models.component_ref import TTCStrategyRef
|
|
38
|
+
from nat.data_models.embedder import EmbedderBaseConfig
|
|
39
|
+
from nat.data_models.finetuning import TrainerAdapterConfig
|
|
40
|
+
from nat.data_models.finetuning import TrainerConfig
|
|
41
|
+
from nat.data_models.finetuning import TrajectoryBuilderConfig
|
|
42
|
+
from nat.data_models.function import FunctionBaseConfig
|
|
43
|
+
from nat.data_models.function import FunctionGroupBaseConfig
|
|
44
|
+
from nat.data_models.function_dependencies import FunctionDependencies
|
|
45
|
+
from nat.data_models.llm import LLMBaseConfig
|
|
46
|
+
from nat.data_models.memory import MemoryBaseConfig
|
|
47
|
+
from nat.data_models.middleware import MiddlewareBaseConfig
|
|
48
|
+
from nat.data_models.object_store import ObjectStoreBaseConfig
|
|
49
|
+
from nat.data_models.retriever import RetrieverBaseConfig
|
|
50
|
+
from nat.data_models.ttc_strategy import TTCStrategyBaseConfig
|
|
51
|
+
from nat.experimental.decorators.experimental_warning_decorator import experimental
|
|
52
|
+
from nat.experimental.test_time_compute.models.stage_enums import PipelineTypeEnum
|
|
53
|
+
from nat.experimental.test_time_compute.models.stage_enums import StageTypeEnum
|
|
54
|
+
from nat.experimental.test_time_compute.models.strategy_base import StrategyBase
|
|
55
|
+
from nat.finetuning.interfaces.finetuning_runner import Trainer
|
|
56
|
+
from nat.finetuning.interfaces.trainer_adapter import TrainerAdapter
|
|
57
|
+
from nat.finetuning.interfaces.trajectory_builder import TrajectoryBuilder
|
|
58
|
+
from nat.memory.interfaces import MemoryEditor
|
|
59
|
+
from nat.middleware.middleware import Middleware
|
|
60
|
+
from nat.object_store.interfaces import ObjectStore
|
|
61
|
+
from nat.retriever.interface import Retriever
|
|
62
|
+
from nat.utils.type_utils import override
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class ChildBuilder(Builder):
|
|
66
|
+
|
|
67
|
+
def __init__(self, workflow_builder: Builder) -> None:
|
|
68
|
+
|
|
69
|
+
self._workflow_builder = workflow_builder
|
|
70
|
+
|
|
71
|
+
self._dependencies = FunctionDependencies()
|
|
72
|
+
|
|
73
|
+
@override
|
|
74
|
+
@property
|
|
75
|
+
def sync_builder(self) -> SyncBuilder:
|
|
76
|
+
return SyncBuilder(self)
|
|
77
|
+
|
|
78
|
+
@property
|
|
79
|
+
def dependencies(self) -> FunctionDependencies:
|
|
80
|
+
return self._dependencies
|
|
81
|
+
|
|
82
|
+
@override
|
|
83
|
+
async def add_function(self, name: str, config: FunctionBaseConfig) -> Function:
|
|
84
|
+
return await self._workflow_builder.add_function(name, config)
|
|
85
|
+
|
|
86
|
+
@override
|
|
87
|
+
async def add_function_group(self, name: str, config: FunctionGroupBaseConfig) -> FunctionGroup:
|
|
88
|
+
return await self._workflow_builder.add_function_group(name, config)
|
|
89
|
+
|
|
90
|
+
@override
|
|
91
|
+
async def get_function(self, name: str) -> Function:
|
|
92
|
+
# If a function tries to get another function, we assume it uses it
|
|
93
|
+
fn = await self._workflow_builder.get_function(name)
|
|
94
|
+
|
|
95
|
+
self._dependencies.add_function(name)
|
|
96
|
+
|
|
97
|
+
return fn
|
|
98
|
+
|
|
99
|
+
@override
|
|
100
|
+
async def get_function_group(self, name: str) -> FunctionGroup:
|
|
101
|
+
# If a function tries to get a function group, we assume it uses it
|
|
102
|
+
function_group = await self._workflow_builder.get_function_group(name)
|
|
103
|
+
|
|
104
|
+
self._dependencies.add_function_group(name)
|
|
105
|
+
|
|
106
|
+
return function_group
|
|
107
|
+
|
|
108
|
+
@override
|
|
109
|
+
def get_function_config(self, name: str) -> FunctionBaseConfig:
|
|
110
|
+
return self._workflow_builder.get_function_config(name)
|
|
111
|
+
|
|
112
|
+
@override
|
|
113
|
+
def get_function_group_config(self, name: str) -> FunctionGroupBaseConfig:
|
|
114
|
+
return self._workflow_builder.get_function_group_config(name)
|
|
115
|
+
|
|
116
|
+
@override
|
|
117
|
+
async def set_workflow(self, config: FunctionBaseConfig) -> Function:
|
|
118
|
+
return await self._workflow_builder.set_workflow(config)
|
|
119
|
+
|
|
120
|
+
@override
|
|
121
|
+
def get_workflow(self) -> Function:
|
|
122
|
+
return self._workflow_builder.get_workflow()
|
|
123
|
+
|
|
124
|
+
@override
|
|
125
|
+
def get_workflow_config(self) -> FunctionBaseConfig:
|
|
126
|
+
return self._workflow_builder.get_workflow_config()
|
|
127
|
+
|
|
128
|
+
@override
|
|
129
|
+
async def get_tools(self,
|
|
130
|
+
tool_names: Sequence[str | FunctionRef | FunctionGroupRef],
|
|
131
|
+
wrapper_type: LLMFrameworkEnum | str) -> list[typing.Any]:
|
|
132
|
+
# Import here to avoid cyclic import
|
|
133
|
+
from nat.builder.per_user_workflow_builder import PerUserWorkflowBuilder
|
|
134
|
+
from nat.builder.workflow_builder import WorkflowBuilder
|
|
135
|
+
|
|
136
|
+
tools = await self._workflow_builder.get_tools(tool_names, wrapper_type)
|
|
137
|
+
for tool_name in tool_names:
|
|
138
|
+
if isinstance(self._workflow_builder, WorkflowBuilder):
|
|
139
|
+
function_groups = self._workflow_builder._function_groups
|
|
140
|
+
elif isinstance(self._workflow_builder, PerUserWorkflowBuilder):
|
|
141
|
+
# Per-user components can have dependencies on both shared and per-user function groups
|
|
142
|
+
function_groups = {
|
|
143
|
+
**self._workflow_builder._shared_builder._function_groups,
|
|
144
|
+
**self._workflow_builder._per_user_function_groups
|
|
145
|
+
}
|
|
146
|
+
else:
|
|
147
|
+
raise TypeError(f"Invalid workflow builder type: {type(self._workflow_builder)}")
|
|
148
|
+
if tool_name in function_groups:
|
|
149
|
+
self._dependencies.add_function_group(tool_name)
|
|
150
|
+
else:
|
|
151
|
+
self._dependencies.add_function(tool_name)
|
|
152
|
+
return tools
|
|
153
|
+
|
|
154
|
+
@override
|
|
155
|
+
async def get_tool(self, fn_name: str | FunctionRef, wrapper_type: LLMFrameworkEnum | str):
|
|
156
|
+
# If a function tries to get another function as a tool, we assume it uses it
|
|
157
|
+
fn = await self._workflow_builder.get_tool(fn_name, wrapper_type)
|
|
158
|
+
|
|
159
|
+
self._dependencies.add_function(fn_name)
|
|
160
|
+
|
|
161
|
+
return fn
|
|
162
|
+
|
|
163
|
+
@override
|
|
164
|
+
async def add_llm(self, name: str, config: LLMBaseConfig) -> None:
|
|
165
|
+
return await self._workflow_builder.add_llm(name, config)
|
|
166
|
+
|
|
167
|
+
@experimental(feature_name="Authentication")
|
|
168
|
+
@override
|
|
169
|
+
async def add_auth_provider(self, name: str, config: AuthProviderBaseConfig) -> AuthProviderBase:
|
|
170
|
+
return await self._workflow_builder.add_auth_provider(name, config)
|
|
171
|
+
|
|
172
|
+
@override
|
|
173
|
+
async def get_auth_provider(self, auth_provider_name: str):
|
|
174
|
+
return await self._workflow_builder.get_auth_provider(auth_provider_name)
|
|
175
|
+
|
|
176
|
+
@override
|
|
177
|
+
async def get_llm(self, llm_name: str, wrapper_type: LLMFrameworkEnum | str) -> typing.Any:
|
|
178
|
+
llm = await self._workflow_builder.get_llm(llm_name, wrapper_type)
|
|
179
|
+
|
|
180
|
+
self._dependencies.add_llm(llm_name)
|
|
181
|
+
|
|
182
|
+
return llm
|
|
183
|
+
|
|
184
|
+
@override
|
|
185
|
+
def get_llm_config(self, llm_name: str) -> LLMBaseConfig:
|
|
186
|
+
return self._workflow_builder.get_llm_config(llm_name)
|
|
187
|
+
|
|
188
|
+
@override
|
|
189
|
+
async def add_embedder(self, name: str, config: EmbedderBaseConfig) -> None:
|
|
190
|
+
await self._workflow_builder.add_embedder(name, config)
|
|
191
|
+
|
|
192
|
+
@override
|
|
193
|
+
async def get_embedder(self, embedder_name: str, wrapper_type: LLMFrameworkEnum | str) -> typing.Any:
|
|
194
|
+
embedder = await self._workflow_builder.get_embedder(embedder_name, wrapper_type)
|
|
195
|
+
|
|
196
|
+
self._dependencies.add_embedder(embedder_name)
|
|
197
|
+
|
|
198
|
+
return embedder
|
|
199
|
+
|
|
200
|
+
@override
|
|
201
|
+
def get_embedder_config(self, embedder_name: str) -> EmbedderBaseConfig:
|
|
202
|
+
return self._workflow_builder.get_embedder_config(embedder_name)
|
|
203
|
+
|
|
204
|
+
@override
|
|
205
|
+
async def add_memory_client(self, name: str, config: MemoryBaseConfig) -> MemoryEditor:
|
|
206
|
+
return await self._workflow_builder.add_memory_client(name, config)
|
|
207
|
+
|
|
208
|
+
@override
|
|
209
|
+
async def get_memory_client(self, memory_name: str) -> MemoryEditor:
|
|
210
|
+
"""
|
|
211
|
+
Return the instantiated memory client for the given name.
|
|
212
|
+
"""
|
|
213
|
+
memory_client = await self._workflow_builder.get_memory_client(memory_name)
|
|
214
|
+
|
|
215
|
+
self._dependencies.add_memory_client(memory_name)
|
|
216
|
+
|
|
217
|
+
return memory_client
|
|
218
|
+
|
|
219
|
+
@override
|
|
220
|
+
def get_memory_client_config(self, memory_name: str) -> MemoryBaseConfig:
|
|
221
|
+
return self._workflow_builder.get_memory_client_config(memory_name=memory_name)
|
|
222
|
+
|
|
223
|
+
@override
|
|
224
|
+
async def add_object_store(self, name: str, config: ObjectStoreBaseConfig):
|
|
225
|
+
return await self._workflow_builder.add_object_store(name, config)
|
|
226
|
+
|
|
227
|
+
@override
|
|
228
|
+
async def get_object_store_client(self, object_store_name: str) -> ObjectStore:
|
|
229
|
+
"""
|
|
230
|
+
Return the instantiated object store client for the given name.
|
|
231
|
+
"""
|
|
232
|
+
object_store_client = await self._workflow_builder.get_object_store_client(object_store_name)
|
|
233
|
+
|
|
234
|
+
self._dependencies.add_object_store(object_store_name)
|
|
235
|
+
|
|
236
|
+
return object_store_client
|
|
237
|
+
|
|
238
|
+
@override
|
|
239
|
+
def get_object_store_config(self, object_store_name: str) -> ObjectStoreBaseConfig:
|
|
240
|
+
return self._workflow_builder.get_object_store_config(object_store_name)
|
|
241
|
+
|
|
242
|
+
@override
|
|
243
|
+
@experimental(feature_name="Finetuning")
|
|
244
|
+
async def add_trainer(self, name: str | TrainerRef, config: TrainerConfig) -> Trainer:
|
|
245
|
+
return await self._workflow_builder.add_trainer(name, config)
|
|
246
|
+
|
|
247
|
+
@override
|
|
248
|
+
@experimental(feature_name="Finetuning")
|
|
249
|
+
async def add_trainer_adapter(self, name: str | TrainerAdapterRef, config: TrainerAdapterConfig) -> TrainerAdapter:
|
|
250
|
+
return await self._workflow_builder.add_trainer_adapter(name, config)
|
|
251
|
+
|
|
252
|
+
@override
|
|
253
|
+
@experimental(feature_name="Finetuning")
|
|
254
|
+
async def add_trajectory_builder(self, name: str | TrajectoryBuilderRef,
|
|
255
|
+
config: TrajectoryBuilderConfig) -> TrajectoryBuilder:
|
|
256
|
+
return await self._workflow_builder.add_trajectory_builder(name, config)
|
|
257
|
+
|
|
258
|
+
@override
|
|
259
|
+
async def get_trainer(self,
|
|
260
|
+
trainer_name: str | TrainerRef,
|
|
261
|
+
trajectory_builder: TrajectoryBuilder,
|
|
262
|
+
trainer_adapter: TrainerAdapter) -> Trainer:
|
|
263
|
+
return await self._workflow_builder.get_trainer(trainer_name, trajectory_builder, trainer_adapter)
|
|
264
|
+
|
|
265
|
+
@override
|
|
266
|
+
async def get_trainer_config(self, trainer_name: str | TrainerRef) -> TrainerConfig:
|
|
267
|
+
return await self._workflow_builder.get_trainer_config(trainer_name)
|
|
268
|
+
|
|
269
|
+
@override
|
|
270
|
+
async def get_trainer_adapter_config(self, trainer_adapter_name: str | TrainerAdapterRef) -> TrainerAdapterConfig:
|
|
271
|
+
return await self._workflow_builder.get_trainer_adapter_config(trainer_adapter_name)
|
|
272
|
+
|
|
273
|
+
@override
|
|
274
|
+
async def get_trajectory_builder_config(
|
|
275
|
+
self, trajectory_builder_name: str | TrajectoryBuilderRef) -> (TrajectoryBuilderConfig):
|
|
276
|
+
return await self._workflow_builder.get_trajectory_builder_config(trajectory_builder_name)
|
|
277
|
+
|
|
278
|
+
@override
|
|
279
|
+
async def get_trainer_adapter(self, trainer_adapter_name: str | TrainerAdapterRef) -> TrainerAdapter:
|
|
280
|
+
return await self._workflow_builder.get_trainer_adapter(trainer_adapter_name)
|
|
281
|
+
|
|
282
|
+
@override
|
|
283
|
+
async def get_trajectory_builder(self, trajectory_builder_name: str | TrajectoryBuilderRef) -> TrajectoryBuilder:
|
|
284
|
+
return await self._workflow_builder.get_trajectory_builder(trajectory_builder_name)
|
|
285
|
+
|
|
286
|
+
@override
|
|
287
|
+
@experimental(feature_name="TTC")
|
|
288
|
+
async def add_ttc_strategy(self, name: str, config: TTCStrategyBaseConfig) -> None:
|
|
289
|
+
await self._workflow_builder.add_ttc_strategy(name, config)
|
|
290
|
+
|
|
291
|
+
@override
|
|
292
|
+
async def get_ttc_strategy(self,
|
|
293
|
+
strategy_name: str | TTCStrategyRef,
|
|
294
|
+
pipeline_type: PipelineTypeEnum,
|
|
295
|
+
stage_type: StageTypeEnum) -> StrategyBase:
|
|
296
|
+
return await self._workflow_builder.get_ttc_strategy(strategy_name=strategy_name,
|
|
297
|
+
pipeline_type=pipeline_type,
|
|
298
|
+
stage_type=stage_type)
|
|
299
|
+
|
|
300
|
+
@override
|
|
301
|
+
async def get_ttc_strategy_config(self,
|
|
302
|
+
strategy_name: str | TTCStrategyRef,
|
|
303
|
+
pipeline_type: PipelineTypeEnum,
|
|
304
|
+
stage_type: StageTypeEnum) -> TTCStrategyBaseConfig:
|
|
305
|
+
return await self._workflow_builder.get_ttc_strategy_config(strategy_name=strategy_name,
|
|
306
|
+
pipeline_type=pipeline_type,
|
|
307
|
+
stage_type=stage_type)
|
|
308
|
+
|
|
309
|
+
@override
|
|
310
|
+
async def add_retriever(self, name: str, config: RetrieverBaseConfig) -> None:
|
|
311
|
+
await self._workflow_builder.add_retriever(name, config)
|
|
312
|
+
|
|
313
|
+
@override
|
|
314
|
+
async def get_retriever(self, retriever_name: str, wrapper_type: LLMFrameworkEnum | str | None = None) -> Retriever:
|
|
315
|
+
if not wrapper_type:
|
|
316
|
+
return await self._workflow_builder.get_retriever(retriever_name=retriever_name)
|
|
317
|
+
return await self._workflow_builder.get_retriever(retriever_name=retriever_name, wrapper_type=wrapper_type)
|
|
318
|
+
|
|
319
|
+
@override
|
|
320
|
+
async def get_retriever_config(self, retriever_name: str) -> RetrieverBaseConfig:
|
|
321
|
+
return await self._workflow_builder.get_retriever_config(retriever_name=retriever_name)
|
|
322
|
+
|
|
323
|
+
@override
|
|
324
|
+
def get_user_manager(self) -> UserManagerHolder:
|
|
325
|
+
return self._workflow_builder.get_user_manager()
|
|
326
|
+
|
|
327
|
+
@override
|
|
328
|
+
def get_function_dependencies(self, fn_name: str) -> FunctionDependencies:
|
|
329
|
+
return self._workflow_builder.get_function_dependencies(fn_name)
|
|
330
|
+
|
|
331
|
+
@override
|
|
332
|
+
def get_function_group_dependencies(self, fn_name: str) -> FunctionDependencies:
|
|
333
|
+
return self._workflow_builder.get_function_group_dependencies(fn_name)
|
|
334
|
+
|
|
335
|
+
@override
|
|
336
|
+
async def add_middleware(self, name: str | MiddlewareRef, config: MiddlewareBaseConfig) -> Middleware:
|
|
337
|
+
"""Add middleware to the builder."""
|
|
338
|
+
return await self._workflow_builder.add_middleware(name, config)
|
|
339
|
+
|
|
340
|
+
@override
|
|
341
|
+
async def get_middleware(self, middleware_name: str | MiddlewareRef) -> Middleware:
|
|
342
|
+
"""Get built middleware by name."""
|
|
343
|
+
return await self._workflow_builder.get_middleware(middleware_name)
|
|
344
|
+
|
|
345
|
+
@override
|
|
346
|
+
def get_middleware_config(self, middleware_name: str | MiddlewareRef) -> MiddlewareBaseConfig:
|
|
347
|
+
"""Get the configuration for middleware."""
|
|
348
|
+
return self._workflow_builder.get_middleware_config(middleware_name)
|
|
349
|
+
|
|
350
|
+
@staticmethod
|
|
351
|
+
@contextmanager
|
|
352
|
+
def use(config: TypedBaseModel, builder: Builder) -> Generator["ChildBuilder", None, None]:
|
|
353
|
+
"""
|
|
354
|
+
Context manager for temporarily setting the Builder object.
|
|
355
|
+
|
|
356
|
+
Parameters
|
|
357
|
+
----------
|
|
358
|
+
config : TypedBaseModel
|
|
359
|
+
The configuration to use within the context. Note: Not used for now, but required by the interface
|
|
360
|
+
and will be used in the future.
|
|
361
|
+
builder : Builder
|
|
362
|
+
The Builder instance to use within the context.
|
|
363
|
+
|
|
364
|
+
Yields
|
|
365
|
+
------
|
|
366
|
+
ChildBuilder
|
|
367
|
+
The Builder instance that was set.
|
|
368
|
+
|
|
369
|
+
Examples
|
|
370
|
+
--------
|
|
371
|
+
>>> with ChildBuilder.use(config, my_builder) as builder:
|
|
372
|
+
... # builder is active in this context
|
|
373
|
+
... assert Builder.current() == builder
|
|
374
|
+
>>> # Original builder is restored here
|
|
375
|
+
|
|
376
|
+
"""
|
|
377
|
+
|
|
378
|
+
inner_builder = ChildBuilder(workflow_builder=builder)
|
|
379
|
+
|
|
380
|
+
previous = _current_builder_context.get()
|
|
381
|
+
_current_builder_context.set(inner_builder)
|
|
382
|
+
try:
|
|
383
|
+
yield inner_builder
|
|
384
|
+
finally:
|
|
385
|
+
_current_builder_context.set(previous)
|
nat/builder/component_utils.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
2
|
# SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -29,18 +29,25 @@ from nat.data_models.component_ref import ComponentRefNode
|
|
|
29
29
|
from nat.data_models.component_ref import generate_instance_id
|
|
30
30
|
from nat.data_models.config import Config
|
|
31
31
|
from nat.data_models.embedder import EmbedderBaseConfig
|
|
32
|
+
from nat.data_models.finetuning import TrainerAdapterConfig
|
|
33
|
+
from nat.data_models.finetuning import TrainerConfig
|
|
34
|
+
from nat.data_models.finetuning import TrajectoryBuilderConfig
|
|
32
35
|
from nat.data_models.function import FunctionBaseConfig
|
|
33
36
|
from nat.data_models.function import FunctionGroupBaseConfig
|
|
34
37
|
from nat.data_models.llm import LLMBaseConfig
|
|
35
38
|
from nat.data_models.memory import MemoryBaseConfig
|
|
39
|
+
from nat.data_models.middleware import MiddlewareBaseConfig
|
|
36
40
|
from nat.data_models.object_store import ObjectStoreBaseConfig
|
|
37
41
|
from nat.data_models.retriever import RetrieverBaseConfig
|
|
38
42
|
from nat.data_models.ttc_strategy import TTCStrategyBaseConfig
|
|
39
43
|
from nat.utils.type_utils import DecomposedType
|
|
40
44
|
|
|
45
|
+
WORKFLOW_COMPONENT_NAME = "<workflow>"
|
|
46
|
+
|
|
41
47
|
logger = logging.getLogger(__name__)
|
|
42
48
|
|
|
43
49
|
# Order in which we want to process the component groups
|
|
50
|
+
# IMPORTANT: MIDDLEWARE must be built before FUNCTIONS
|
|
44
51
|
_component_group_order = [
|
|
45
52
|
ComponentGroup.AUTHENTICATION,
|
|
46
53
|
ComponentGroup.EMBEDDERS,
|
|
@@ -49,8 +56,12 @@ _component_group_order = [
|
|
|
49
56
|
ComponentGroup.OBJECT_STORES,
|
|
50
57
|
ComponentGroup.RETRIEVERS,
|
|
51
58
|
ComponentGroup.TTC_STRATEGIES,
|
|
59
|
+
ComponentGroup.MIDDLEWARE,
|
|
52
60
|
ComponentGroup.FUNCTION_GROUPS,
|
|
53
61
|
ComponentGroup.FUNCTIONS,
|
|
62
|
+
ComponentGroup.TRAINER_ADAPTERS,
|
|
63
|
+
ComponentGroup.TRAJECTORY_BUILDERS,
|
|
64
|
+
ComponentGroup.TRAINERS
|
|
54
65
|
]
|
|
55
66
|
|
|
56
67
|
|
|
@@ -107,10 +118,18 @@ def group_from_component(component: TypedBaseModel) -> ComponentGroup | None:
|
|
|
107
118
|
return ComponentGroup.AUTHENTICATION
|
|
108
119
|
if (isinstance(component, EmbedderBaseConfig)):
|
|
109
120
|
return ComponentGroup.EMBEDDERS
|
|
121
|
+
if (isinstance(component, TrainerConfig)):
|
|
122
|
+
return ComponentGroup.TRAINERS
|
|
123
|
+
if (isinstance(component, TrainerAdapterConfig)):
|
|
124
|
+
return ComponentGroup.TRAINER_ADAPTERS
|
|
125
|
+
if (isinstance(component, TrajectoryBuilderConfig)):
|
|
126
|
+
return ComponentGroup.TRAJECTORY_BUILDERS
|
|
110
127
|
if (isinstance(component, FunctionBaseConfig)):
|
|
111
128
|
return ComponentGroup.FUNCTIONS
|
|
112
129
|
if (isinstance(component, FunctionGroupBaseConfig)):
|
|
113
130
|
return ComponentGroup.FUNCTION_GROUPS
|
|
131
|
+
if (isinstance(component, MiddlewareBaseConfig)):
|
|
132
|
+
return ComponentGroup.MIDDLEWARE
|
|
114
133
|
if (isinstance(component, LLMBaseConfig)):
|
|
115
134
|
return ComponentGroup.LLMS
|
|
116
135
|
if (isinstance(component, MemoryBaseConfig)):
|
|
@@ -158,7 +177,16 @@ def recursive_componentref_discovery(cls: TypedBaseModel, value: typing.Any,
|
|
|
158
177
|
yield from recursive_componentref_discovery(cls, field_data, field_info.annotation)
|
|
159
178
|
if (decomposed_type.is_union):
|
|
160
179
|
for arg in decomposed_type.args:
|
|
161
|
-
if
|
|
180
|
+
# Check if value matches this union arg type
|
|
181
|
+
# TypedDict and some other types don't support isinstance checks,
|
|
182
|
+
# so we catch the TypeError and skip them
|
|
183
|
+
try:
|
|
184
|
+
is_match = arg is typing.Any or DecomposedType(arg).is_instance(value)
|
|
185
|
+
except TypeError:
|
|
186
|
+
# Skip types that don't support isinstance (e.g., TypedDict)
|
|
187
|
+
continue
|
|
188
|
+
|
|
189
|
+
if is_match:
|
|
162
190
|
yield from recursive_componentref_discovery(cls, value, arg)
|
|
163
191
|
else:
|
|
164
192
|
for arg in decomposed_type.args:
|
|
@@ -236,7 +264,7 @@ def config_to_dependency_objects(config: "Config") -> tuple[dict[str, ComponentI
|
|
|
236
264
|
dependency_map[workflow_instance_id] = ComponentInstanceData(
|
|
237
265
|
component_group=ComponentGroup.FUNCTIONS,
|
|
238
266
|
instance_id=workflow_instance_id,
|
|
239
|
-
name=
|
|
267
|
+
name=WORKFLOW_COMPONENT_NAME, # type: ignore
|
|
240
268
|
config=config.workflow,
|
|
241
269
|
is_root=True)
|
|
242
270
|
|
|
@@ -260,7 +288,9 @@ def build_dependency_sequence(config: "Config") -> list[ComponentInstanceData]:
|
|
|
260
288
|
|
|
261
289
|
total_node_count = (len(config.embedders) + len(config.functions) + len(config.function_groups) + len(config.llms) +
|
|
262
290
|
len(config.memory) + len(config.object_stores) + len(config.retrievers) +
|
|
263
|
-
len(config.ttc_strategies) + len(config.authentication) +
|
|
291
|
+
len(config.ttc_strategies) + len(config.authentication) + len(config.middleware) +
|
|
292
|
+
len(config.trainers) + len(config.trajectory_builders) + len(config.trainer_adapters) + 1
|
|
293
|
+
) # +1 for the workflow
|
|
264
294
|
|
|
265
295
|
dependency_map: dict
|
|
266
296
|
dependency_graph: nx.DiGraph
|
nat/builder/context.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
2
|
# SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -34,6 +34,7 @@ from nat.data_models.intermediate_step import IntermediateStepType
|
|
|
34
34
|
from nat.data_models.intermediate_step import StreamEventData
|
|
35
35
|
from nat.data_models.intermediate_step import TraceMetadata
|
|
36
36
|
from nat.data_models.invocation_node import InvocationNode
|
|
37
|
+
from nat.data_models.runtime_enum import RuntimeTypeEnum
|
|
37
38
|
from nat.runtime.user_metadata import RequestAttributes
|
|
38
39
|
from nat.utils.reactive.subject import Subject
|
|
39
40
|
|
|
@@ -68,10 +69,14 @@ class ContextState(metaclass=Singleton):
|
|
|
68
69
|
def __init__(self):
|
|
69
70
|
self.conversation_id: ContextVar[str | None] = ContextVar("conversation_id", default=None)
|
|
70
71
|
self.user_message_id: ContextVar[str | None] = ContextVar("user_message_id", default=None)
|
|
72
|
+
self.user_id: ContextVar[str | None] = ContextVar("user_id", default=None)
|
|
71
73
|
self.workflow_run_id: ContextVar[str | None] = ContextVar("workflow_run_id", default=None)
|
|
72
74
|
self.workflow_trace_id: ContextVar[int | None] = ContextVar("workflow_trace_id", default=None)
|
|
75
|
+
self.observability_trace_id: ContextVar[str | None] = ContextVar("observability_trace_id", default=None)
|
|
73
76
|
self.input_message: ContextVar[typing.Any] = ContextVar("input_message", default=None)
|
|
74
77
|
self.user_manager: ContextVar[typing.Any] = ContextVar("user_manager", default=None)
|
|
78
|
+
self.runtime_type: ContextVar[RuntimeTypeEnum] = ContextVar("runtime_type",
|
|
79
|
+
default=RuntimeTypeEnum.RUN_OR_SERVE)
|
|
75
80
|
self._metadata: ContextVar[RequestAttributes | None] = ContextVar("request_attributes", default=None)
|
|
76
81
|
self._event_stream: ContextVar[Subject[IntermediateStep] | None] = ContextVar("event_stream", default=None)
|
|
77
82
|
self._active_function: ContextVar[InvocationNode | None] = ContextVar("active_function", default=None)
|
|
@@ -199,6 +204,13 @@ class Context:
|
|
|
199
204
|
"""
|
|
200
205
|
return self._context_state.user_message_id.get()
|
|
201
206
|
|
|
207
|
+
@property
|
|
208
|
+
def user_id(self) -> str | None:
|
|
209
|
+
"""
|
|
210
|
+
This property retrieves the user ID which is the unique identifier for the current user.
|
|
211
|
+
"""
|
|
212
|
+
return self._context_state.user_id.get()
|
|
213
|
+
|
|
202
214
|
@property
|
|
203
215
|
def workflow_run_id(self) -> str | None:
|
|
204
216
|
"""
|
|
@@ -213,6 +225,13 @@ class Context:
|
|
|
213
225
|
"""
|
|
214
226
|
return self._context_state.workflow_trace_id.get()
|
|
215
227
|
|
|
228
|
+
@property
|
|
229
|
+
def observability_trace_id(self) -> str | None:
|
|
230
|
+
"""
|
|
231
|
+
Returns the root observability trace identifier for the current run.
|
|
232
|
+
"""
|
|
233
|
+
return self._context_state.observability_trace_id.get()
|
|
234
|
+
|
|
216
235
|
@contextmanager
|
|
217
236
|
def push_active_function(self,
|
|
218
237
|
function_name: str,
|
|
@@ -302,6 +321,20 @@ class Context:
|
|
|
302
321
|
raise RuntimeError("User authentication callback is not set in the context.")
|
|
303
322
|
return callback
|
|
304
323
|
|
|
324
|
+
@property
|
|
325
|
+
def is_evaluating(self) -> bool:
|
|
326
|
+
"""
|
|
327
|
+
Indicates whether the current context is in evaluation mode.
|
|
328
|
+
|
|
329
|
+
This property checks the context state to determine if the current
|
|
330
|
+
operation is being performed in evaluation mode. It returns a boolean
|
|
331
|
+
value indicating the evaluation status.
|
|
332
|
+
|
|
333
|
+
Returns:
|
|
334
|
+
bool: True if in evaluation mode, False otherwise.
|
|
335
|
+
"""
|
|
336
|
+
return self._context_state.runtime_type.get() == RuntimeTypeEnum.EVALUATE
|
|
337
|
+
|
|
305
338
|
@staticmethod
|
|
306
339
|
def get() -> "Context":
|
|
307
340
|
"""
|
nat/builder/embedder.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
2
|
# SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
nat/builder/eval_builder.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
2
|
# SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -22,7 +22,9 @@ from pathlib import Path
|
|
|
22
22
|
from nat.builder.builder import EvalBuilder
|
|
23
23
|
from nat.builder.evaluator import EvaluatorInfo
|
|
24
24
|
from nat.builder.framework_enum import LLMFrameworkEnum
|
|
25
|
+
from nat.builder.function import FunctionGroup
|
|
25
26
|
from nat.builder.workflow_builder import WorkflowBuilder
|
|
27
|
+
from nat.builder.workflow_builder import _log_build_failure
|
|
26
28
|
from nat.cli.type_registry import TypeRegistry
|
|
27
29
|
from nat.data_models.config import Config
|
|
28
30
|
from nat.data_models.config import GeneralConfig
|
|
@@ -95,6 +97,16 @@ class WorkflowEvalBuilder(WorkflowBuilder, EvalBuilder):
|
|
|
95
97
|
tool_wrapper_reg = self._registry.get_tool_wrapper(llm_framework=wrapper_type)
|
|
96
98
|
|
|
97
99
|
async def get_tool(fn_name: str):
|
|
100
|
+
# Maintain backwards compatibility with the old function group name format
|
|
101
|
+
new_fn_name = fn_name.replace(FunctionGroup.LEGACY_SEPARATOR, FunctionGroup.SEPARATOR)
|
|
102
|
+
if (fn_name not in self._functions) and (new_fn_name in self._functions):
|
|
103
|
+
logger.warning(
|
|
104
|
+
f"Function `{fn_name}` is deprecated and will be removed in a future release." + \
|
|
105
|
+
f"Use `{new_fn_name}` instead."
|
|
106
|
+
)
|
|
107
|
+
fn_name = new_fn_name
|
|
108
|
+
# end of backwards compatibility check
|
|
109
|
+
|
|
98
110
|
fn = await self.get_function(fn_name)
|
|
99
111
|
try:
|
|
100
112
|
return tool_wrapper_reg.build_fn(fn_name, fn, self)
|
|
@@ -124,12 +136,12 @@ class WorkflowEvalBuilder(WorkflowBuilder, EvalBuilder):
|
|
|
124
136
|
completed_components = [(name, "evaluator") for name in completed_evaluators]
|
|
125
137
|
remaining_components = [(name, "evaluator") for name in remaining_evaluators]
|
|
126
138
|
|
|
127
|
-
# Use the
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
139
|
+
# Use the common logging function from workflow_builder
|
|
140
|
+
_log_build_failure(failing_evaluator_name,
|
|
141
|
+
"evaluator",
|
|
142
|
+
completed_components,
|
|
143
|
+
remaining_components,
|
|
144
|
+
original_error)
|
|
133
145
|
|
|
134
146
|
@override
|
|
135
147
|
async def populate_builder(self, config: Config, skip_workflow: bool = False):
|
nat/builder/evaluator.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
2
|
# SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
nat/builder/framework_enum.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# SPDX-FileCopyrightText: Copyright (c)
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
2
|
# SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -23,3 +23,5 @@ class LLMFrameworkEnum(str, Enum):
|
|
|
23
23
|
SEMANTIC_KERNEL = "semantic_kernel"
|
|
24
24
|
AGNO = "agno"
|
|
25
25
|
ADK = "adk"
|
|
26
|
+
STRANDS = "strands"
|
|
27
|
+
AUTOGEN = "autogen"
|
nat/builder/front_end.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
2
|
# SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|