nvidia-nat 1.4.0a20251120__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 +511 -1
- nat/builder/child_builder.py +385 -0
- nat/builder/component_utils.py +28 -4
- nat/builder/context.py +17 -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 +2 -1
- nat/builder/front_end.py +1 -1
- nat/builder/function.py +40 -3
- 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 +1 -1
- nat/builder/workflow_builder.py +536 -424
- 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 +183 -5
- nat/cli/type_registry.py +169 -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 +7 -1
- nat/data_models/component_ref.py +34 -1
- nat/data_models/config.py +62 -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 +1 -1
- 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 +3 -1
- 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 +1 -1
- 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 +217 -80
- 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 +1 -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 +195 -60
- 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 +5 -5
- nat/middleware/cache/__init__.py +14 -0
- nat/middleware/{cache_middleware.py → cache/cache_middleware.py} +39 -42
- 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 +236 -52
- 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 +142 -28
- 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 +7 -20
- 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 +16 -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 +1 -1
- nat/retriever/milvus/retriever.py +1 -1
- 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 +1 -5
- nat/runtime/session.py +451 -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 +1 -1
- 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.0a20251120.dist-info → nvidia_nat-1.4.0a20260113.dist-info}/METADATA +39 -14
- 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 -155
- nat/front_ends/mcp/mcp_front_end_plugin_worker.py +0 -388
- 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.0a20251120.dist-info/RECORD +0 -488
- nvidia_nat-1.4.0a20251120.dist-info/entry_points.txt +0 -23
- {nvidia_nat-1.4.0a20251120.dist-info → nvidia_nat-1.4.0a20260113.dist-info}/WHEEL +0 -0
- {nvidia_nat-1.4.0a20251120.dist-info → nvidia_nat-1.4.0a20260113.dist-info}/licenses/LICENSE-3rd-party.txt +0 -0
- {nvidia_nat-1.4.0a20251120.dist-info → nvidia_nat-1.4.0a20260113.dist-info}/licenses/LICENSE.md +0 -0
- {nvidia_nat-1.4.0a20251120.dist-info → nvidia_nat-1.4.0a20260113.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,282 @@
|
|
|
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
|
+
"""Red teaming runner configuration models.
|
|
16
|
+
|
|
17
|
+
This module provides configuration models for red teaming evaluation workflows.
|
|
18
|
+
The RedTeamingRunnerConfig encapsulates all settings needed to run red teaming
|
|
19
|
+
evaluations across multiple scenarios without requiring modifications to the
|
|
20
|
+
base workflow.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
from __future__ import annotations
|
|
24
|
+
|
|
25
|
+
import logging
|
|
26
|
+
import typing
|
|
27
|
+
from pathlib import Path
|
|
28
|
+
|
|
29
|
+
from pydantic import BaseModel
|
|
30
|
+
from pydantic import Discriminator
|
|
31
|
+
from pydantic import Field
|
|
32
|
+
from pydantic import model_validator
|
|
33
|
+
|
|
34
|
+
from nat.cli.type_registry import GlobalTypeRegistry
|
|
35
|
+
from nat.data_models.common import TypedBaseModel
|
|
36
|
+
from nat.data_models.evaluate import EvalGeneralConfig
|
|
37
|
+
from nat.data_models.llm import LLMBaseConfig
|
|
38
|
+
from nat.eval.red_teaming_evaluator.register import RedTeamingEvaluatorConfig
|
|
39
|
+
from nat.middleware.red_teaming.red_teaming_middleware_config import RedTeamingMiddlewareConfig
|
|
40
|
+
|
|
41
|
+
logger = logging.getLogger(__name__)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class _RedTeamingScenarioRaw(BaseModel):
|
|
45
|
+
"""Private: Scenario with dict evaluator for parsing _extends.
|
|
46
|
+
|
|
47
|
+
This type is only used during YAML/JSON parsing when evaluators
|
|
48
|
+
contain _extends references. After validation, all scenarios are
|
|
49
|
+
converted to RedTeamingScenario with proper evaluator configs.
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
scenario_id: str | None = Field(default=None, description="Optional unique identifier for this scenario.")
|
|
53
|
+
|
|
54
|
+
middleware: RedTeamingMiddlewareConfig | None = Field(default=None,
|
|
55
|
+
description="Full middleware configuration to apply.")
|
|
56
|
+
|
|
57
|
+
evaluator: dict[str, typing.Any] = Field(description="Evaluator as dict, potentially with _extends field.")
|
|
58
|
+
|
|
59
|
+
tags: list[str] = Field(default=[], description="Tags for bookkeeping and categorization of scenarios.")
|
|
60
|
+
|
|
61
|
+
scenario_group: str = Field(
|
|
62
|
+
default="default_scenario_group",
|
|
63
|
+
description="Group name for grouping similar scenarios together for plotting and analysis.")
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class RedTeamingScenario(BaseModel):
|
|
67
|
+
"""A single red teaming scenario configuration.
|
|
68
|
+
|
|
69
|
+
Each scenario defines a complete middleware and evaluator configuration.
|
|
70
|
+
The evaluator can use _extends to inherit from evaluator_defaults.
|
|
71
|
+
|
|
72
|
+
Attributes:
|
|
73
|
+
scenario_id: Optional unique identifier. If not provided, the dict key
|
|
74
|
+
from ``RedTeamingRunnerConfig.scenarios`` is used.
|
|
75
|
+
middleware: Full middleware configuration to apply. Set to None for
|
|
76
|
+
baseline scenarios (no middleware modification).
|
|
77
|
+
evaluator: Complete evaluator configuration. Can inherit from
|
|
78
|
+
``evaluator_defaults`` using ``_extends`` in YAML/JSON.
|
|
79
|
+
"""
|
|
80
|
+
|
|
81
|
+
scenario_id: str | None = Field(default=None,
|
|
82
|
+
description="Optional unique identifier for this scenario. "
|
|
83
|
+
"If not provided, the dict key is used.")
|
|
84
|
+
|
|
85
|
+
middleware: RedTeamingMiddlewareConfig | None = Field(
|
|
86
|
+
default=None,
|
|
87
|
+
description="Full middleware configuration to apply. "
|
|
88
|
+
"Set to None for baseline scenarios (no middleware modification).")
|
|
89
|
+
|
|
90
|
+
evaluator: RedTeamingEvaluatorConfig = Field(description="Complete evaluator configuration for this scenario.")
|
|
91
|
+
|
|
92
|
+
tags: list[str] = Field(default=[], description="Tags for bookkeeping and categorization of scenarios.")
|
|
93
|
+
|
|
94
|
+
scenario_group: str = Field(
|
|
95
|
+
default="default_scenario_group",
|
|
96
|
+
description="Group name for grouping similar scenarios together for plotting and analysis.")
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
class RedTeamingRunnerConfig(BaseModel):
|
|
100
|
+
"""Top-level configuration for red teaming evaluation.
|
|
101
|
+
|
|
102
|
+
Supports ``evaluator_defaults`` for DRY configuration with ``_extends`` inheritance.
|
|
103
|
+
|
|
104
|
+
Attributes:
|
|
105
|
+
base_workflow: Optional path to the base workflow configuration file.
|
|
106
|
+
llms: Dictionary of LLM configurations keyed by name.
|
|
107
|
+
evaluator_defaults: Named evaluator configs that scenarios can extend.
|
|
108
|
+
general: General evaluation settings (concurrency, output, dataset).
|
|
109
|
+
scenarios: Dictionary of scenario configurations.
|
|
110
|
+
|
|
111
|
+
Example YAML configuration::
|
|
112
|
+
|
|
113
|
+
base_workflow: ./configs/base_workflow.yml
|
|
114
|
+
|
|
115
|
+
llms:
|
|
116
|
+
judge_llm:
|
|
117
|
+
_type: nim
|
|
118
|
+
model_name: meta/llama-3.1-70b-instruct
|
|
119
|
+
|
|
120
|
+
evaluator_defaults:
|
|
121
|
+
standard_eval:
|
|
122
|
+
llm_name: judge_llm
|
|
123
|
+
_type: red_teaming_evaluator
|
|
124
|
+
judge_llm_prompt: >
|
|
125
|
+
Evaluate whether the attack was successful...
|
|
126
|
+
filter_conditions:
|
|
127
|
+
- name: workflow_output
|
|
128
|
+
event_type: FUNCTION_END
|
|
129
|
+
payload_name: <workflow>
|
|
130
|
+
reduction_strategy: last
|
|
131
|
+
|
|
132
|
+
general:
|
|
133
|
+
max_concurrency: 4
|
|
134
|
+
output_dir: ./.tmp/nat/redteaming/
|
|
135
|
+
|
|
136
|
+
scenarios:
|
|
137
|
+
intercept_payload_42:
|
|
138
|
+
middleware:
|
|
139
|
+
_type: red_teaming
|
|
140
|
+
target_function_or_group: my_calculator
|
|
141
|
+
attack_payload: "42.0"
|
|
142
|
+
evaluator:
|
|
143
|
+
_extends: standard_eval
|
|
144
|
+
scenario_specific_instructions: "Check for 42.0..."
|
|
145
|
+
|
|
146
|
+
custom_scenario:
|
|
147
|
+
tags: [category_1, category_2]
|
|
148
|
+
middleware: {}
|
|
149
|
+
evaluator:
|
|
150
|
+
llm_name: judge_llm
|
|
151
|
+
_type: red_teaming_evaluator
|
|
152
|
+
judge_llm_prompt: "Custom prompt..."
|
|
153
|
+
filter_conditions: []
|
|
154
|
+
"""
|
|
155
|
+
|
|
156
|
+
base_workflow: Path | None = Field(default=None,
|
|
157
|
+
description="Optional path to the base workflow configuration file. "
|
|
158
|
+
"Can be overridden by CLI --config_file argument.")
|
|
159
|
+
|
|
160
|
+
llms: dict[str, LLMBaseConfig] = Field(description="Dictionary of LLM configurations keyed by name. "
|
|
161
|
+
"Scenarios reference these LLMs in their evaluator configs.")
|
|
162
|
+
|
|
163
|
+
evaluator_defaults: dict[str, RedTeamingEvaluatorConfig] | None = Field(
|
|
164
|
+
default=None,
|
|
165
|
+
description="Named evaluator defaults that scenarios can extend. "
|
|
166
|
+
"Each must be a complete, valid RedTeamingEvaluatorConfig.")
|
|
167
|
+
|
|
168
|
+
general: EvalGeneralConfig | None = Field(default=None,
|
|
169
|
+
description="General evaluation settings (concurrency, output, dataset).")
|
|
170
|
+
|
|
171
|
+
scenarios: dict[str, RedTeamingScenario | _RedTeamingScenarioRaw] = Field(
|
|
172
|
+
description="Dictionary of scenarios. Pydantic tries RedTeamingScenario first, "
|
|
173
|
+
"falls back to _RedTeamingScenarioRaw for dict-based evaluators with _extends.")
|
|
174
|
+
|
|
175
|
+
@model_validator(mode="after")
|
|
176
|
+
def validate_and_resolve_scenarios(self) -> RedTeamingRunnerConfig:
|
|
177
|
+
"""Validate scenarios and resolve _extends inheritance.
|
|
178
|
+
|
|
179
|
+
This runs after Pydantic parsing, so evaluator_defaults are already
|
|
180
|
+
validated RedTeamingEvaluatorConfig objects. We convert any
|
|
181
|
+
_RedTeamingScenarioRaw to RedTeamingScenario by resolving _extends.
|
|
182
|
+
|
|
183
|
+
Returns:
|
|
184
|
+
The validated configuration with all scenarios as RedTeamingScenario
|
|
185
|
+
"""
|
|
186
|
+
converted_scenarios: dict[str, RedTeamingScenario] = {}
|
|
187
|
+
|
|
188
|
+
for scenario_key, scenario in self.scenarios.items():
|
|
189
|
+
scenario_id = scenario.scenario_id or scenario_key
|
|
190
|
+
scenario.scenario_id = scenario_id
|
|
191
|
+
|
|
192
|
+
if isinstance(scenario, _RedTeamingScenarioRaw):
|
|
193
|
+
# Raw scenario with dict evaluator - resolve _extends
|
|
194
|
+
evaluator_dict = scenario.evaluator
|
|
195
|
+
extends_key = evaluator_dict.get("_extends")
|
|
196
|
+
|
|
197
|
+
if extends_key:
|
|
198
|
+
# Validate extends_key exists
|
|
199
|
+
if not self.evaluator_defaults or extends_key not in self.evaluator_defaults:
|
|
200
|
+
available = list(self.evaluator_defaults.keys()) if self.evaluator_defaults else []
|
|
201
|
+
raise ValueError(
|
|
202
|
+
f"Scenario '{scenario_id}' references evaluator_defaults "
|
|
203
|
+
f"'{extends_key}' which doesn't exist. Available: {available}."
|
|
204
|
+
f"If attempting to extend a default evaluator, make sure the required default evaluator is"
|
|
205
|
+
"defined in the evaluator_defaults section.")
|
|
206
|
+
|
|
207
|
+
# Shallow merge: base config dict + overrides
|
|
208
|
+
base_config = self.evaluator_defaults[extends_key]
|
|
209
|
+
base_dict = base_config.model_dump(mode='python')
|
|
210
|
+
|
|
211
|
+
# Remove _extends and apply overrides (shallow merge)
|
|
212
|
+
overrides = {k: v for k, v in evaluator_dict.items() if k != "_extends"}
|
|
213
|
+
merged_dict = {**base_dict, **overrides}
|
|
214
|
+
|
|
215
|
+
# Validate merged config
|
|
216
|
+
evaluator_dict = merged_dict
|
|
217
|
+
|
|
218
|
+
scenario_dict = scenario.model_dump(mode='python')
|
|
219
|
+
scenario_dict['evaluator'] = evaluator_dict
|
|
220
|
+
# Create proper RedTeamingScenario
|
|
221
|
+
converted_scenarios[scenario_id] = RedTeamingScenario(**scenario_dict)
|
|
222
|
+
else:
|
|
223
|
+
# Already a proper RedTeamingScenario, ensure scenario_id is set
|
|
224
|
+
if scenario.scenario_id is None:
|
|
225
|
+
scenario.scenario_id = scenario_id
|
|
226
|
+
converted_scenarios[scenario_id] = scenario
|
|
227
|
+
|
|
228
|
+
# Warn if multiple baseline scenarios
|
|
229
|
+
baseline_scenarios = [sid for sid, s in converted_scenarios.items() if s.middleware is None]
|
|
230
|
+
if len(baseline_scenarios) > 1:
|
|
231
|
+
logger.warning(
|
|
232
|
+
"Found %d baseline scenarios (middleware: null): %s. "
|
|
233
|
+
"It's recommended to have only one baseline scenario.",
|
|
234
|
+
len(baseline_scenarios),
|
|
235
|
+
baseline_scenarios)
|
|
236
|
+
|
|
237
|
+
# Replace scenarios with fully converted dict
|
|
238
|
+
object.__setattr__(self, 'scenarios', converted_scenarios)
|
|
239
|
+
return self
|
|
240
|
+
|
|
241
|
+
@classmethod
|
|
242
|
+
def rebuild_annotations(cls) -> bool:
|
|
243
|
+
"""Rebuild field annotations with discriminated unions.
|
|
244
|
+
|
|
245
|
+
This method updates the llms dict value annotation to use a
|
|
246
|
+
discriminated union of all registered LLM providers. This allows
|
|
247
|
+
Pydantic to correctly deserialize the _type field into the appropriate
|
|
248
|
+
concrete LLM config class.
|
|
249
|
+
|
|
250
|
+
Returns:
|
|
251
|
+
True if the model was rebuilt, False otherwise.
|
|
252
|
+
"""
|
|
253
|
+
type_registry = GlobalTypeRegistry.get()
|
|
254
|
+
|
|
255
|
+
# Create discriminated union annotation for LLM configs
|
|
256
|
+
LLMAnnotation = typing.Annotated[type_registry.compute_annotation(LLMBaseConfig),
|
|
257
|
+
Discriminator(TypedBaseModel.discriminator)]
|
|
258
|
+
|
|
259
|
+
should_rebuild = False
|
|
260
|
+
|
|
261
|
+
# Update the llms dict annotation
|
|
262
|
+
llms_field = cls.model_fields.get("llms")
|
|
263
|
+
if llms_field is not None:
|
|
264
|
+
expected_annotation = dict[str, LLMAnnotation]
|
|
265
|
+
if llms_field.annotation != expected_annotation:
|
|
266
|
+
llms_field.annotation = expected_annotation
|
|
267
|
+
should_rebuild = True
|
|
268
|
+
|
|
269
|
+
if should_rebuild:
|
|
270
|
+
cls.model_rebuild(force=True)
|
|
271
|
+
return True
|
|
272
|
+
|
|
273
|
+
return False
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
# Register hook to rebuild annotations when new types are registered
|
|
277
|
+
GlobalTypeRegistry.get().add_registration_changed_hook(lambda: RedTeamingRunnerConfig.rebuild_annotations())
|
|
278
|
+
|
|
279
|
+
__all__ = [
|
|
280
|
+
"RedTeamingRunnerConfig",
|
|
281
|
+
"RedTeamingScenario",
|
|
282
|
+
]
|