nvidia-nat 1.2.0__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 +66 -0
- nat/agent/__init__.py +0 -0
- nat/agent/base.py +256 -0
- nat/agent/dual_node.py +67 -0
- nat/agent/react_agent/__init__.py +0 -0
- nat/agent/react_agent/agent.py +363 -0
- nat/agent/react_agent/output_parser.py +104 -0
- nat/agent/react_agent/prompt.py +44 -0
- nat/agent/react_agent/register.py +149 -0
- nat/agent/reasoning_agent/__init__.py +0 -0
- nat/agent/reasoning_agent/reasoning_agent.py +225 -0
- nat/agent/register.py +23 -0
- nat/agent/rewoo_agent/__init__.py +0 -0
- nat/agent/rewoo_agent/agent.py +415 -0
- nat/agent/rewoo_agent/prompt.py +110 -0
- nat/agent/rewoo_agent/register.py +157 -0
- nat/agent/tool_calling_agent/__init__.py +0 -0
- nat/agent/tool_calling_agent/agent.py +119 -0
- nat/agent/tool_calling_agent/register.py +106 -0
- nat/authentication/__init__.py +14 -0
- nat/authentication/api_key/__init__.py +14 -0
- nat/authentication/api_key/api_key_auth_provider.py +96 -0
- nat/authentication/api_key/api_key_auth_provider_config.py +124 -0
- nat/authentication/api_key/register.py +26 -0
- nat/authentication/exceptions/__init__.py +14 -0
- nat/authentication/exceptions/api_key_exceptions.py +38 -0
- nat/authentication/http_basic_auth/__init__.py +0 -0
- nat/authentication/http_basic_auth/http_basic_auth_provider.py +81 -0
- nat/authentication/http_basic_auth/register.py +30 -0
- nat/authentication/interfaces.py +93 -0
- nat/authentication/oauth2/__init__.py +14 -0
- nat/authentication/oauth2/oauth2_auth_code_flow_provider.py +107 -0
- nat/authentication/oauth2/oauth2_auth_code_flow_provider_config.py +39 -0
- nat/authentication/oauth2/register.py +25 -0
- nat/authentication/register.py +21 -0
- nat/builder/__init__.py +0 -0
- nat/builder/builder.py +285 -0
- nat/builder/component_utils.py +316 -0
- nat/builder/context.py +270 -0
- nat/builder/embedder.py +24 -0
- nat/builder/eval_builder.py +161 -0
- nat/builder/evaluator.py +29 -0
- nat/builder/framework_enum.py +24 -0
- nat/builder/front_end.py +73 -0
- nat/builder/function.py +344 -0
- nat/builder/function_base.py +380 -0
- nat/builder/function_info.py +627 -0
- nat/builder/intermediate_step_manager.py +174 -0
- nat/builder/llm.py +25 -0
- nat/builder/retriever.py +25 -0
- nat/builder/user_interaction_manager.py +78 -0
- nat/builder/workflow.py +148 -0
- nat/builder/workflow_builder.py +1117 -0
- nat/cli/__init__.py +14 -0
- nat/cli/cli_utils/__init__.py +0 -0
- nat/cli/cli_utils/config_override.py +231 -0
- nat/cli/cli_utils/validation.py +37 -0
- nat/cli/commands/__init__.py +0 -0
- nat/cli/commands/configure/__init__.py +0 -0
- nat/cli/commands/configure/channel/__init__.py +0 -0
- nat/cli/commands/configure/channel/add.py +28 -0
- nat/cli/commands/configure/channel/channel.py +34 -0
- nat/cli/commands/configure/channel/remove.py +30 -0
- nat/cli/commands/configure/channel/update.py +30 -0
- nat/cli/commands/configure/configure.py +33 -0
- nat/cli/commands/evaluate.py +139 -0
- nat/cli/commands/info/__init__.py +14 -0
- nat/cli/commands/info/info.py +37 -0
- nat/cli/commands/info/list_channels.py +32 -0
- nat/cli/commands/info/list_components.py +129 -0
- nat/cli/commands/info/list_mcp.py +304 -0
- nat/cli/commands/registry/__init__.py +14 -0
- nat/cli/commands/registry/publish.py +88 -0
- nat/cli/commands/registry/pull.py +118 -0
- nat/cli/commands/registry/registry.py +36 -0
- nat/cli/commands/registry/remove.py +108 -0
- nat/cli/commands/registry/search.py +155 -0
- nat/cli/commands/sizing/__init__.py +14 -0
- nat/cli/commands/sizing/calc.py +297 -0
- nat/cli/commands/sizing/sizing.py +27 -0
- nat/cli/commands/start.py +246 -0
- nat/cli/commands/uninstall.py +81 -0
- nat/cli/commands/validate.py +47 -0
- nat/cli/commands/workflow/__init__.py +14 -0
- nat/cli/commands/workflow/templates/__init__.py.j2 +0 -0
- nat/cli/commands/workflow/templates/config.yml.j2 +16 -0
- nat/cli/commands/workflow/templates/pyproject.toml.j2 +22 -0
- nat/cli/commands/workflow/templates/register.py.j2 +5 -0
- nat/cli/commands/workflow/templates/workflow.py.j2 +36 -0
- nat/cli/commands/workflow/workflow.py +37 -0
- nat/cli/commands/workflow/workflow_commands.py +317 -0
- nat/cli/entrypoint.py +135 -0
- nat/cli/main.py +57 -0
- nat/cli/register_workflow.py +488 -0
- nat/cli/type_registry.py +1000 -0
- nat/data_models/__init__.py +14 -0
- nat/data_models/api_server.py +716 -0
- nat/data_models/authentication.py +231 -0
- nat/data_models/common.py +171 -0
- nat/data_models/component.py +58 -0
- nat/data_models/component_ref.py +168 -0
- nat/data_models/config.py +410 -0
- nat/data_models/dataset_handler.py +169 -0
- nat/data_models/discovery_metadata.py +305 -0
- nat/data_models/embedder.py +27 -0
- nat/data_models/evaluate.py +127 -0
- nat/data_models/evaluator.py +26 -0
- nat/data_models/front_end.py +26 -0
- nat/data_models/function.py +30 -0
- nat/data_models/function_dependencies.py +72 -0
- nat/data_models/interactive.py +246 -0
- nat/data_models/intermediate_step.py +302 -0
- nat/data_models/invocation_node.py +38 -0
- nat/data_models/llm.py +27 -0
- nat/data_models/logging.py +26 -0
- nat/data_models/memory.py +27 -0
- nat/data_models/object_store.py +44 -0
- nat/data_models/profiler.py +54 -0
- nat/data_models/registry_handler.py +26 -0
- nat/data_models/retriever.py +30 -0
- nat/data_models/retry_mixin.py +35 -0
- nat/data_models/span.py +190 -0
- nat/data_models/step_adaptor.py +64 -0
- nat/data_models/streaming.py +33 -0
- nat/data_models/swe_bench_model.py +54 -0
- nat/data_models/telemetry_exporter.py +26 -0
- nat/data_models/ttc_strategy.py +30 -0
- nat/embedder/__init__.py +0 -0
- nat/embedder/nim_embedder.py +59 -0
- nat/embedder/openai_embedder.py +43 -0
- nat/embedder/register.py +22 -0
- nat/eval/__init__.py +14 -0
- nat/eval/config.py +60 -0
- nat/eval/dataset_handler/__init__.py +0 -0
- nat/eval/dataset_handler/dataset_downloader.py +106 -0
- nat/eval/dataset_handler/dataset_filter.py +52 -0
- nat/eval/dataset_handler/dataset_handler.py +367 -0
- nat/eval/evaluate.py +510 -0
- nat/eval/evaluator/__init__.py +14 -0
- nat/eval/evaluator/base_evaluator.py +77 -0
- nat/eval/evaluator/evaluator_model.py +45 -0
- nat/eval/intermediate_step_adapter.py +99 -0
- nat/eval/rag_evaluator/__init__.py +0 -0
- nat/eval/rag_evaluator/evaluate.py +178 -0
- nat/eval/rag_evaluator/register.py +143 -0
- nat/eval/register.py +23 -0
- nat/eval/remote_workflow.py +133 -0
- nat/eval/runners/__init__.py +14 -0
- nat/eval/runners/config.py +39 -0
- nat/eval/runners/multi_eval_runner.py +54 -0
- nat/eval/runtime_event_subscriber.py +52 -0
- nat/eval/swe_bench_evaluator/__init__.py +0 -0
- nat/eval/swe_bench_evaluator/evaluate.py +215 -0
- nat/eval/swe_bench_evaluator/register.py +36 -0
- nat/eval/trajectory_evaluator/__init__.py +0 -0
- nat/eval/trajectory_evaluator/evaluate.py +75 -0
- nat/eval/trajectory_evaluator/register.py +40 -0
- nat/eval/tunable_rag_evaluator/__init__.py +0 -0
- nat/eval/tunable_rag_evaluator/evaluate.py +245 -0
- nat/eval/tunable_rag_evaluator/register.py +52 -0
- nat/eval/usage_stats.py +41 -0
- nat/eval/utils/__init__.py +0 -0
- nat/eval/utils/output_uploader.py +140 -0
- nat/eval/utils/tqdm_position_registry.py +40 -0
- nat/eval/utils/weave_eval.py +184 -0
- nat/experimental/__init__.py +0 -0
- nat/experimental/decorators/__init__.py +0 -0
- nat/experimental/decorators/experimental_warning_decorator.py +134 -0
- nat/experimental/test_time_compute/__init__.py +0 -0
- nat/experimental/test_time_compute/editing/__init__.py +0 -0
- nat/experimental/test_time_compute/editing/iterative_plan_refinement_editor.py +147 -0
- nat/experimental/test_time_compute/editing/llm_as_a_judge_editor.py +204 -0
- nat/experimental/test_time_compute/editing/motivation_aware_summarization.py +107 -0
- nat/experimental/test_time_compute/functions/__init__.py +0 -0
- nat/experimental/test_time_compute/functions/execute_score_select_function.py +105 -0
- nat/experimental/test_time_compute/functions/plan_select_execute_function.py +224 -0
- nat/experimental/test_time_compute/functions/ttc_tool_orchestration_function.py +205 -0
- nat/experimental/test_time_compute/functions/ttc_tool_wrapper_function.py +146 -0
- nat/experimental/test_time_compute/models/__init__.py +0 -0
- nat/experimental/test_time_compute/models/editor_config.py +132 -0
- nat/experimental/test_time_compute/models/scoring_config.py +112 -0
- nat/experimental/test_time_compute/models/search_config.py +120 -0
- nat/experimental/test_time_compute/models/selection_config.py +154 -0
- nat/experimental/test_time_compute/models/stage_enums.py +43 -0
- nat/experimental/test_time_compute/models/strategy_base.py +66 -0
- nat/experimental/test_time_compute/models/tool_use_config.py +41 -0
- nat/experimental/test_time_compute/models/ttc_item.py +48 -0
- nat/experimental/test_time_compute/register.py +36 -0
- nat/experimental/test_time_compute/scoring/__init__.py +0 -0
- nat/experimental/test_time_compute/scoring/llm_based_agent_scorer.py +168 -0
- nat/experimental/test_time_compute/scoring/llm_based_plan_scorer.py +168 -0
- nat/experimental/test_time_compute/scoring/motivation_aware_scorer.py +111 -0
- nat/experimental/test_time_compute/search/__init__.py +0 -0
- nat/experimental/test_time_compute/search/multi_llm_planner.py +128 -0
- nat/experimental/test_time_compute/search/multi_query_retrieval_search.py +122 -0
- nat/experimental/test_time_compute/search/single_shot_multi_plan_planner.py +128 -0
- nat/experimental/test_time_compute/selection/__init__.py +0 -0
- nat/experimental/test_time_compute/selection/best_of_n_selector.py +63 -0
- nat/experimental/test_time_compute/selection/llm_based_agent_output_selector.py +131 -0
- nat/experimental/test_time_compute/selection/llm_based_output_merging_selector.py +159 -0
- nat/experimental/test_time_compute/selection/llm_based_plan_selector.py +128 -0
- nat/experimental/test_time_compute/selection/threshold_selector.py +58 -0
- nat/front_ends/__init__.py +14 -0
- nat/front_ends/console/__init__.py +14 -0
- nat/front_ends/console/authentication_flow_handler.py +233 -0
- nat/front_ends/console/console_front_end_config.py +32 -0
- nat/front_ends/console/console_front_end_plugin.py +96 -0
- nat/front_ends/console/register.py +25 -0
- nat/front_ends/cron/__init__.py +14 -0
- nat/front_ends/fastapi/__init__.py +14 -0
- nat/front_ends/fastapi/auth_flow_handlers/__init__.py +0 -0
- nat/front_ends/fastapi/auth_flow_handlers/http_flow_handler.py +27 -0
- nat/front_ends/fastapi/auth_flow_handlers/websocket_flow_handler.py +107 -0
- nat/front_ends/fastapi/fastapi_front_end_config.py +241 -0
- nat/front_ends/fastapi/fastapi_front_end_controller.py +68 -0
- nat/front_ends/fastapi/fastapi_front_end_plugin.py +116 -0
- nat/front_ends/fastapi/fastapi_front_end_plugin_worker.py +1087 -0
- nat/front_ends/fastapi/html_snippets/__init__.py +14 -0
- nat/front_ends/fastapi/html_snippets/auth_code_grant_success.py +35 -0
- nat/front_ends/fastapi/intermediate_steps_subscriber.py +80 -0
- nat/front_ends/fastapi/job_store.py +183 -0
- nat/front_ends/fastapi/main.py +72 -0
- nat/front_ends/fastapi/message_handler.py +320 -0
- nat/front_ends/fastapi/message_validator.py +352 -0
- nat/front_ends/fastapi/register.py +25 -0
- nat/front_ends/fastapi/response_helpers.py +195 -0
- nat/front_ends/fastapi/step_adaptor.py +319 -0
- nat/front_ends/mcp/__init__.py +14 -0
- nat/front_ends/mcp/mcp_front_end_config.py +36 -0
- nat/front_ends/mcp/mcp_front_end_plugin.py +81 -0
- nat/front_ends/mcp/mcp_front_end_plugin_worker.py +143 -0
- nat/front_ends/mcp/register.py +27 -0
- nat/front_ends/mcp/tool_converter.py +241 -0
- nat/front_ends/register.py +22 -0
- nat/front_ends/simple_base/__init__.py +14 -0
- nat/front_ends/simple_base/simple_front_end_plugin_base.py +54 -0
- nat/llm/__init__.py +0 -0
- nat/llm/aws_bedrock_llm.py +57 -0
- nat/llm/nim_llm.py +46 -0
- nat/llm/openai_llm.py +46 -0
- nat/llm/register.py +23 -0
- nat/llm/utils/__init__.py +14 -0
- nat/llm/utils/env_config_value.py +94 -0
- nat/llm/utils/error.py +17 -0
- nat/memory/__init__.py +20 -0
- nat/memory/interfaces.py +183 -0
- nat/memory/models.py +112 -0
- nat/meta/pypi.md +58 -0
- nat/object_store/__init__.py +20 -0
- nat/object_store/in_memory_object_store.py +76 -0
- nat/object_store/interfaces.py +84 -0
- nat/object_store/models.py +38 -0
- nat/object_store/register.py +20 -0
- nat/observability/__init__.py +14 -0
- nat/observability/exporter/__init__.py +14 -0
- nat/observability/exporter/base_exporter.py +449 -0
- nat/observability/exporter/exporter.py +78 -0
- nat/observability/exporter/file_exporter.py +33 -0
- nat/observability/exporter/processing_exporter.py +322 -0
- nat/observability/exporter/raw_exporter.py +52 -0
- nat/observability/exporter/span_exporter.py +288 -0
- nat/observability/exporter_manager.py +335 -0
- nat/observability/mixin/__init__.py +14 -0
- nat/observability/mixin/batch_config_mixin.py +26 -0
- nat/observability/mixin/collector_config_mixin.py +23 -0
- nat/observability/mixin/file_mixin.py +288 -0
- nat/observability/mixin/file_mode.py +23 -0
- nat/observability/mixin/resource_conflict_mixin.py +134 -0
- nat/observability/mixin/serialize_mixin.py +61 -0
- nat/observability/mixin/type_introspection_mixin.py +183 -0
- nat/observability/processor/__init__.py +14 -0
- nat/observability/processor/batching_processor.py +310 -0
- nat/observability/processor/callback_processor.py +42 -0
- nat/observability/processor/intermediate_step_serializer.py +28 -0
- nat/observability/processor/processor.py +71 -0
- nat/observability/register.py +96 -0
- nat/observability/utils/__init__.py +14 -0
- nat/observability/utils/dict_utils.py +236 -0
- nat/observability/utils/time_utils.py +31 -0
- nat/plugins/.namespace +1 -0
- nat/profiler/__init__.py +0 -0
- nat/profiler/calc/__init__.py +14 -0
- nat/profiler/calc/calc_runner.py +627 -0
- nat/profiler/calc/calculations.py +288 -0
- nat/profiler/calc/data_models.py +188 -0
- nat/profiler/calc/plot.py +345 -0
- nat/profiler/callbacks/__init__.py +0 -0
- nat/profiler/callbacks/agno_callback_handler.py +295 -0
- nat/profiler/callbacks/base_callback_class.py +20 -0
- nat/profiler/callbacks/langchain_callback_handler.py +290 -0
- nat/profiler/callbacks/llama_index_callback_handler.py +205 -0
- nat/profiler/callbacks/semantic_kernel_callback_handler.py +238 -0
- nat/profiler/callbacks/token_usage_base_model.py +27 -0
- nat/profiler/data_frame_row.py +51 -0
- nat/profiler/data_models.py +24 -0
- nat/profiler/decorators/__init__.py +0 -0
- nat/profiler/decorators/framework_wrapper.py +131 -0
- nat/profiler/decorators/function_tracking.py +254 -0
- nat/profiler/forecasting/__init__.py +0 -0
- nat/profiler/forecasting/config.py +18 -0
- nat/profiler/forecasting/model_trainer.py +75 -0
- nat/profiler/forecasting/models/__init__.py +22 -0
- nat/profiler/forecasting/models/forecasting_base_model.py +40 -0
- nat/profiler/forecasting/models/linear_model.py +197 -0
- nat/profiler/forecasting/models/random_forest_regressor.py +269 -0
- nat/profiler/inference_metrics_model.py +28 -0
- nat/profiler/inference_optimization/__init__.py +0 -0
- nat/profiler/inference_optimization/bottleneck_analysis/__init__.py +0 -0
- nat/profiler/inference_optimization/bottleneck_analysis/nested_stack_analysis.py +460 -0
- nat/profiler/inference_optimization/bottleneck_analysis/simple_stack_analysis.py +258 -0
- nat/profiler/inference_optimization/data_models.py +386 -0
- nat/profiler/inference_optimization/experimental/__init__.py +0 -0
- nat/profiler/inference_optimization/experimental/concurrency_spike_analysis.py +468 -0
- nat/profiler/inference_optimization/experimental/prefix_span_analysis.py +405 -0
- nat/profiler/inference_optimization/llm_metrics.py +212 -0
- nat/profiler/inference_optimization/prompt_caching.py +163 -0
- nat/profiler/inference_optimization/token_uniqueness.py +107 -0
- nat/profiler/inference_optimization/workflow_runtimes.py +72 -0
- nat/profiler/intermediate_property_adapter.py +102 -0
- nat/profiler/profile_runner.py +473 -0
- nat/profiler/utils.py +184 -0
- nat/registry_handlers/__init__.py +0 -0
- nat/registry_handlers/local/__init__.py +0 -0
- nat/registry_handlers/local/local_handler.py +176 -0
- nat/registry_handlers/local/register_local.py +37 -0
- nat/registry_handlers/metadata_factory.py +60 -0
- nat/registry_handlers/package_utils.py +571 -0
- nat/registry_handlers/pypi/__init__.py +0 -0
- nat/registry_handlers/pypi/pypi_handler.py +251 -0
- nat/registry_handlers/pypi/register_pypi.py +40 -0
- nat/registry_handlers/register.py +21 -0
- nat/registry_handlers/registry_handler_base.py +157 -0
- nat/registry_handlers/rest/__init__.py +0 -0
- nat/registry_handlers/rest/register_rest.py +56 -0
- nat/registry_handlers/rest/rest_handler.py +237 -0
- nat/registry_handlers/schemas/__init__.py +0 -0
- nat/registry_handlers/schemas/headers.py +42 -0
- nat/registry_handlers/schemas/package.py +68 -0
- nat/registry_handlers/schemas/publish.py +68 -0
- nat/registry_handlers/schemas/pull.py +82 -0
- nat/registry_handlers/schemas/remove.py +36 -0
- nat/registry_handlers/schemas/search.py +91 -0
- nat/registry_handlers/schemas/status.py +47 -0
- nat/retriever/__init__.py +0 -0
- nat/retriever/interface.py +41 -0
- nat/retriever/milvus/__init__.py +14 -0
- nat/retriever/milvus/register.py +81 -0
- nat/retriever/milvus/retriever.py +228 -0
- nat/retriever/models.py +77 -0
- nat/retriever/nemo_retriever/__init__.py +14 -0
- nat/retriever/nemo_retriever/register.py +60 -0
- nat/retriever/nemo_retriever/retriever.py +190 -0
- nat/retriever/register.py +22 -0
- nat/runtime/__init__.py +14 -0
- nat/runtime/loader.py +220 -0
- nat/runtime/runner.py +195 -0
- nat/runtime/session.py +162 -0
- nat/runtime/user_metadata.py +130 -0
- nat/settings/__init__.py +0 -0
- nat/settings/global_settings.py +318 -0
- nat/test/.namespace +1 -0
- nat/tool/__init__.py +0 -0
- nat/tool/chat_completion.py +74 -0
- nat/tool/code_execution/README.md +151 -0
- nat/tool/code_execution/__init__.py +0 -0
- nat/tool/code_execution/code_sandbox.py +267 -0
- nat/tool/code_execution/local_sandbox/.gitignore +1 -0
- nat/tool/code_execution/local_sandbox/Dockerfile.sandbox +60 -0
- nat/tool/code_execution/local_sandbox/__init__.py +13 -0
- nat/tool/code_execution/local_sandbox/local_sandbox_server.py +198 -0
- nat/tool/code_execution/local_sandbox/sandbox.requirements.txt +6 -0
- nat/tool/code_execution/local_sandbox/start_local_sandbox.sh +50 -0
- nat/tool/code_execution/register.py +74 -0
- nat/tool/code_execution/test_code_execution_sandbox.py +414 -0
- nat/tool/code_execution/utils.py +100 -0
- nat/tool/datetime_tools.py +42 -0
- nat/tool/document_search.py +141 -0
- nat/tool/github_tools/__init__.py +0 -0
- nat/tool/github_tools/create_github_commit.py +133 -0
- nat/tool/github_tools/create_github_issue.py +87 -0
- nat/tool/github_tools/create_github_pr.py +106 -0
- nat/tool/github_tools/get_github_file.py +106 -0
- nat/tool/github_tools/get_github_issue.py +166 -0
- nat/tool/github_tools/get_github_pr.py +256 -0
- nat/tool/github_tools/update_github_issue.py +100 -0
- nat/tool/mcp/__init__.py +14 -0
- nat/tool/mcp/exceptions.py +142 -0
- nat/tool/mcp/mcp_client.py +255 -0
- nat/tool/mcp/mcp_tool.py +96 -0
- nat/tool/memory_tools/__init__.py +0 -0
- nat/tool/memory_tools/add_memory_tool.py +79 -0
- nat/tool/memory_tools/delete_memory_tool.py +67 -0
- nat/tool/memory_tools/get_memory_tool.py +72 -0
- nat/tool/nvidia_rag.py +95 -0
- nat/tool/register.py +38 -0
- nat/tool/retriever.py +94 -0
- nat/tool/server_tools.py +66 -0
- nat/utils/__init__.py +0 -0
- nat/utils/data_models/__init__.py +0 -0
- nat/utils/data_models/schema_validator.py +58 -0
- nat/utils/debugging_utils.py +43 -0
- nat/utils/dump_distro_mapping.py +32 -0
- nat/utils/exception_handlers/__init__.py +0 -0
- nat/utils/exception_handlers/automatic_retries.py +289 -0
- nat/utils/exception_handlers/mcp.py +211 -0
- nat/utils/exception_handlers/schemas.py +114 -0
- nat/utils/io/__init__.py +0 -0
- nat/utils/io/model_processing.py +28 -0
- nat/utils/io/yaml_tools.py +119 -0
- nat/utils/log_utils.py +37 -0
- nat/utils/metadata_utils.py +74 -0
- nat/utils/optional_imports.py +142 -0
- nat/utils/producer_consumer_queue.py +178 -0
- nat/utils/reactive/__init__.py +0 -0
- nat/utils/reactive/base/__init__.py +0 -0
- nat/utils/reactive/base/observable_base.py +65 -0
- nat/utils/reactive/base/observer_base.py +55 -0
- nat/utils/reactive/base/subject_base.py +79 -0
- nat/utils/reactive/observable.py +59 -0
- nat/utils/reactive/observer.py +76 -0
- nat/utils/reactive/subject.py +131 -0
- nat/utils/reactive/subscription.py +49 -0
- nat/utils/settings/__init__.py +0 -0
- nat/utils/settings/global_settings.py +197 -0
- nat/utils/string_utils.py +38 -0
- nat/utils/type_converter.py +290 -0
- nat/utils/type_utils.py +484 -0
- nat/utils/url_utils.py +27 -0
- nvidia_nat-1.2.0.dist-info/METADATA +365 -0
- nvidia_nat-1.2.0.dist-info/RECORD +435 -0
- nvidia_nat-1.2.0.dist-info/WHEEL +5 -0
- nvidia_nat-1.2.0.dist-info/entry_points.txt +21 -0
- nvidia_nat-1.2.0.dist-info/licenses/LICENSE-3rd-party.txt +5478 -0
- nvidia_nat-1.2.0.dist-info/licenses/LICENSE.md +201 -0
- nvidia_nat-1.2.0.dist-info/top_level.txt +2 -0
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2025, 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 base64
|
|
17
|
+
import logging
|
|
18
|
+
import os
|
|
19
|
+
import shutil
|
|
20
|
+
import subprocess
|
|
21
|
+
from collections.abc import AsyncGenerator
|
|
22
|
+
from contextlib import asynccontextmanager
|
|
23
|
+
|
|
24
|
+
import httpx
|
|
25
|
+
|
|
26
|
+
from nat.registry_handlers.registry_handler_base import AbstractRegistryHandler
|
|
27
|
+
from nat.registry_handlers.schemas.headers import RequestHeaders
|
|
28
|
+
from nat.registry_handlers.schemas.package import PackageNameVersionList
|
|
29
|
+
from nat.registry_handlers.schemas.publish import Artifact
|
|
30
|
+
from nat.registry_handlers.schemas.publish import PublishResponse
|
|
31
|
+
from nat.registry_handlers.schemas.pull import PullRequestPackages
|
|
32
|
+
from nat.registry_handlers.schemas.pull import PullResponse
|
|
33
|
+
from nat.registry_handlers.schemas.remove import RemoveResponse
|
|
34
|
+
from nat.registry_handlers.schemas.search import SearchQuery
|
|
35
|
+
from nat.registry_handlers.schemas.search import SearchResponse
|
|
36
|
+
from nat.registry_handlers.schemas.status import ActionEnum
|
|
37
|
+
from nat.registry_handlers.schemas.status import StatusEnum
|
|
38
|
+
|
|
39
|
+
logger = logging.getLogger(__name__)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class RestRegistryHandler(AbstractRegistryHandler):
|
|
43
|
+
"""A registry handler for interactions with a remote REST registry."""
|
|
44
|
+
|
|
45
|
+
def __init__( # pylint: disable=R0917
|
|
46
|
+
self,
|
|
47
|
+
endpoint: str,
|
|
48
|
+
token: str,
|
|
49
|
+
timeout: int = 30,
|
|
50
|
+
publish_route: str = "",
|
|
51
|
+
pull_route: str = "",
|
|
52
|
+
search_route: str = "",
|
|
53
|
+
remove_route: str = ""):
|
|
54
|
+
super().__init__()
|
|
55
|
+
self._endpoint = endpoint.rstrip("/")
|
|
56
|
+
self._timeout = timeout
|
|
57
|
+
self._publish_route = publish_route.strip("/")
|
|
58
|
+
self._pull_route = pull_route.strip("/")
|
|
59
|
+
self._search_route = search_route.strip("/")
|
|
60
|
+
self._remove_route = remove_route.strip("/")
|
|
61
|
+
self._headers = RequestHeaders(Authorization=f"Bearer: {token}").model_dump(by_alias=True)
|
|
62
|
+
|
|
63
|
+
@asynccontextmanager
|
|
64
|
+
async def publish(self, artifact: Artifact) -> AsyncGenerator[PublishResponse]:
|
|
65
|
+
"""Publishes a NAT artifact to a remote REST registry.
|
|
66
|
+
|
|
67
|
+
Args:
|
|
68
|
+
artifact (Artifact): An artifact that contain NAT plugin wheel and it's corrosponding discovery
|
|
69
|
+
metadata.
|
|
70
|
+
|
|
71
|
+
Yields:
|
|
72
|
+
Iterator[AsyncGenerator[PublishResponse]]: A response message that includes a completion status message.
|
|
73
|
+
"""
|
|
74
|
+
|
|
75
|
+
try:
|
|
76
|
+
|
|
77
|
+
async with httpx.AsyncClient(headers=self._headers, timeout=self._timeout) as client:
|
|
78
|
+
response = await client.post(f"{self._endpoint}/{self._publish_route}",
|
|
79
|
+
content=artifact.artifact.model_dump_json())
|
|
80
|
+
response.raise_for_status()
|
|
81
|
+
response_dict = response.json()
|
|
82
|
+
|
|
83
|
+
validated_publish_response = PublishResponse(**response_dict)
|
|
84
|
+
|
|
85
|
+
yield validated_publish_response
|
|
86
|
+
|
|
87
|
+
except Exception as e:
|
|
88
|
+
msg = f"Error publishing package: {e}"
|
|
89
|
+
validated_publish_response = PublishResponse(status={
|
|
90
|
+
"status": StatusEnum.ERROR, "message": msg, "action": ActionEnum.PUBLISH
|
|
91
|
+
})
|
|
92
|
+
logger.exception(validated_publish_response.status.message, exc_info=True)
|
|
93
|
+
|
|
94
|
+
yield validated_publish_response
|
|
95
|
+
|
|
96
|
+
finally:
|
|
97
|
+
logger.info("Execution complete.")
|
|
98
|
+
|
|
99
|
+
@asynccontextmanager
|
|
100
|
+
async def pull(self, packages: PullRequestPackages) -> AsyncGenerator[PullResponse]:
|
|
101
|
+
"""Download and install NAT artifacts from a remote REST registry.
|
|
102
|
+
|
|
103
|
+
Args:
|
|
104
|
+
packages (PullRequestPackages): Parameters used to pull the NAT artifact.
|
|
105
|
+
|
|
106
|
+
Yields:
|
|
107
|
+
Iterator[AsyncGenerator[PullResponse]]: A response message that includes a the pulled packages and a
|
|
108
|
+
completion status message.
|
|
109
|
+
"""
|
|
110
|
+
|
|
111
|
+
tmp_dir = "./.tmp/nat-pull"
|
|
112
|
+
|
|
113
|
+
try:
|
|
114
|
+
async with httpx.AsyncClient(headers=self._headers, timeout=self._timeout) as client:
|
|
115
|
+
packages_json = packages.model_dump_json()
|
|
116
|
+
response = await client.post(f"{self._endpoint}/{self._pull_route}", content=packages_json)
|
|
117
|
+
response.raise_for_status()
|
|
118
|
+
|
|
119
|
+
response_dict = response.json()
|
|
120
|
+
validated_pull_response = PullResponse(**response_dict)
|
|
121
|
+
|
|
122
|
+
if (validated_pull_response.status.status == StatusEnum.ERROR):
|
|
123
|
+
logger.error(validated_pull_response.status.message)
|
|
124
|
+
raise ValueError(f"Server error: {validated_pull_response.status.message}")
|
|
125
|
+
|
|
126
|
+
if (not os.path.exists(tmp_dir)):
|
|
127
|
+
os.mkdir(tmp_dir)
|
|
128
|
+
|
|
129
|
+
whl_paths = []
|
|
130
|
+
|
|
131
|
+
for package in validated_pull_response.packages:
|
|
132
|
+
whl_bytes = base64.b64decode(package.whl)
|
|
133
|
+
whl_path = os.path.join(tmp_dir, package.whl_name)
|
|
134
|
+
|
|
135
|
+
with open(whl_path, "wb") as f:
|
|
136
|
+
f.write(whl_bytes)
|
|
137
|
+
|
|
138
|
+
whl_paths.append(whl_path)
|
|
139
|
+
|
|
140
|
+
cmd = ["uv", "pip", "install"]
|
|
141
|
+
cmd.extend(whl_paths)
|
|
142
|
+
result = subprocess.run(cmd, check=True)
|
|
143
|
+
result.check_returncode()
|
|
144
|
+
|
|
145
|
+
if (os.path.exists(tmp_dir)):
|
|
146
|
+
shutil.rmtree(tmp_dir)
|
|
147
|
+
|
|
148
|
+
yield validated_pull_response
|
|
149
|
+
|
|
150
|
+
except Exception as e:
|
|
151
|
+
msg = f"Error occured when installing packages: {e}"
|
|
152
|
+
logger.error(msg)
|
|
153
|
+
if (os.path.exists(tmp_dir)):
|
|
154
|
+
shutil.rmtree(tmp_dir)
|
|
155
|
+
|
|
156
|
+
validated_pull_response = PullResponse(status={
|
|
157
|
+
"status": StatusEnum.ERROR, "message": msg, "action": ActionEnum.PULL
|
|
158
|
+
})
|
|
159
|
+
logger.exception(validated_pull_response.status.message, exc_info=True)
|
|
160
|
+
|
|
161
|
+
yield validated_pull_response
|
|
162
|
+
|
|
163
|
+
finally:
|
|
164
|
+
logger.info("Execution complete.")
|
|
165
|
+
|
|
166
|
+
@asynccontextmanager
|
|
167
|
+
async def search(self, query: SearchQuery) -> AsyncGenerator[SearchResponse]:
|
|
168
|
+
"""Searches a remote REST registry for relevant NAT components.
|
|
169
|
+
|
|
170
|
+
Args:
|
|
171
|
+
query (SearchQuery): Parameters of the search to be performed.
|
|
172
|
+
|
|
173
|
+
Yields:
|
|
174
|
+
Iterator[AsyncGenerator[SearchResponse]]: A response message that includes search
|
|
175
|
+
parameters and a completion status message.
|
|
176
|
+
"""
|
|
177
|
+
|
|
178
|
+
try:
|
|
179
|
+
async with httpx.AsyncClient(headers=self._headers, timeout=self._timeout) as client:
|
|
180
|
+
query_json = query.model_dump_json()
|
|
181
|
+
response = await client.post(url=f"{self._endpoint}/{self._search_route}", content=query_json)
|
|
182
|
+
response.raise_for_status()
|
|
183
|
+
|
|
184
|
+
response_dict = response.json()
|
|
185
|
+
validated_search_response = SearchResponse(**response_dict)
|
|
186
|
+
|
|
187
|
+
yield validated_search_response
|
|
188
|
+
|
|
189
|
+
except Exception as e:
|
|
190
|
+
msg = f"Error searching for artifacts: {e}"
|
|
191
|
+
validated_search_response = SearchResponse(params=query,
|
|
192
|
+
status={
|
|
193
|
+
"status": StatusEnum.ERROR,
|
|
194
|
+
"message": msg,
|
|
195
|
+
"action": ActionEnum.SEARCH
|
|
196
|
+
})
|
|
197
|
+
logger.exception(validated_search_response.status.message, exc_info=True)
|
|
198
|
+
|
|
199
|
+
yield validated_search_response
|
|
200
|
+
|
|
201
|
+
finally:
|
|
202
|
+
logger.info("Execution complete.")
|
|
203
|
+
|
|
204
|
+
@asynccontextmanager
|
|
205
|
+
async def remove(self, packages: PackageNameVersionList) -> AsyncGenerator[RemoveResponse]:
|
|
206
|
+
"""Removes packages from a remote REST registry.
|
|
207
|
+
|
|
208
|
+
Args:
|
|
209
|
+
packages (PackageNameVersionList): The list of packages to remove.
|
|
210
|
+
|
|
211
|
+
Yields:
|
|
212
|
+
Iterator[AsyncGenerator[RemoveResponse]]: A response message that includes the packages and a
|
|
213
|
+
completion status message.
|
|
214
|
+
"""
|
|
215
|
+
|
|
216
|
+
try:
|
|
217
|
+
async with httpx.AsyncClient(headers=self._headers, timeout=self._timeout) as client:
|
|
218
|
+
remove_json = packages.model_dump_json()
|
|
219
|
+
response = await client.post(url=f"{self._endpoint}/{self._remove_route}", content=remove_json)
|
|
220
|
+
response.raise_for_status()
|
|
221
|
+
|
|
222
|
+
response_dict = response.json()
|
|
223
|
+
validated_remove_response = RemoveResponse(**response_dict)
|
|
224
|
+
|
|
225
|
+
yield validated_remove_response
|
|
226
|
+
|
|
227
|
+
except Exception as e:
|
|
228
|
+
msg = f"Error removing artifacts: {e}"
|
|
229
|
+
validated_remove_response = RemoveResponse(status={
|
|
230
|
+
"status": StatusEnum.ERROR, "message": msg, "action": ActionEnum.REMOVE
|
|
231
|
+
})
|
|
232
|
+
logger.exception(validated_remove_response.status.message, exc_info=True)
|
|
233
|
+
|
|
234
|
+
yield validated_remove_response
|
|
235
|
+
|
|
236
|
+
finally:
|
|
237
|
+
logger.info("Execution complete.")
|
|
File without changes
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2025, 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 logging
|
|
17
|
+
|
|
18
|
+
from pydantic import BaseModel
|
|
19
|
+
from pydantic import Field
|
|
20
|
+
|
|
21
|
+
logger = logging.getLogger(__name__)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class RequestHeaders(BaseModel):
|
|
25
|
+
"""Represents a data model for REST registry handler request headers.
|
|
26
|
+
|
|
27
|
+
Args:
|
|
28
|
+
accept (str): Specifies the media types the client can accept. Defaults to 'application/json'
|
|
29
|
+
content_type (str): Describes the format of the request body data. Defaults to 'application/json'
|
|
30
|
+
authorization (str): Contains authentication credentials for accessing a protected resource.
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
accept: str = Field("application/json", alias="Accept")
|
|
34
|
+
content_type: str = Field("application/json", alias="Content-Type")
|
|
35
|
+
authorization: str = Field(..., alias="Authorization")
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class ResponseHeaders(BaseModel):
|
|
39
|
+
"""Placehoder data model for REST registry handler resopnse headers.
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
pass
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2025, 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 logging
|
|
17
|
+
|
|
18
|
+
from pydantic import BaseModel
|
|
19
|
+
|
|
20
|
+
logger = logging.getLogger(__name__)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class WheelData(BaseModel):
|
|
24
|
+
"""Data model containing a built python wheel and its corresponding metadata.
|
|
25
|
+
|
|
26
|
+
Args:
|
|
27
|
+
package_root (str): The path to the package root directory containing the pyproject.toml file.
|
|
28
|
+
package_name (str): The name of the python package.
|
|
29
|
+
toml_project (dict): A dictionary containing data about the python project.
|
|
30
|
+
toml_dependencies (set): The list of dependencies provided in the pyproject.toml file.
|
|
31
|
+
toml_nat_packages (set): The NAT plugins listed in the pyproject.toml.
|
|
32
|
+
union_dependencies (set): The union of toml_dependencies and toml_nat_packages.
|
|
33
|
+
whl_path (str): The path to the package wheel file.
|
|
34
|
+
whl_base64 (str): Base64 encoded string of the wheel file.
|
|
35
|
+
whl_version (str): The version representing the wheel file.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
package_root: str
|
|
39
|
+
package_name: str
|
|
40
|
+
toml_project: dict
|
|
41
|
+
toml_dependencies: set
|
|
42
|
+
toml_nat_packages: set
|
|
43
|
+
union_dependencies: set
|
|
44
|
+
whl_path: str
|
|
45
|
+
whl_base64: str
|
|
46
|
+
whl_version: str
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class PackageNameVersion(BaseModel):
|
|
50
|
+
"""Represents a data model containing a package name and version.
|
|
51
|
+
|
|
52
|
+
Args:
|
|
53
|
+
name (str): Package name, excluding the version.
|
|
54
|
+
version (str | None): The package version, excluding the name. Defaults to None.
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
name: str
|
|
58
|
+
version: str | None = None
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class PackageNameVersionList(BaseModel):
|
|
62
|
+
"""Represents a data model containing a list of `PackageNameVersion` packages.
|
|
63
|
+
|
|
64
|
+
Args:
|
|
65
|
+
packages (list[PackageNameVersion]): A list of `PackageNameVersion` models. Defaults to `[]`
|
|
66
|
+
"""
|
|
67
|
+
|
|
68
|
+
packages: list[PackageNameVersion] = []
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2025, 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 logging
|
|
17
|
+
|
|
18
|
+
from pydantic import BaseModel
|
|
19
|
+
|
|
20
|
+
from nat.data_models.component import ComponentEnum
|
|
21
|
+
from nat.data_models.discovery_metadata import DiscoveryMetadata
|
|
22
|
+
from nat.registry_handlers.schemas.status import StatusMessage
|
|
23
|
+
|
|
24
|
+
logger = logging.getLogger(__name__)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class BuiltArtifact(BaseModel):
|
|
28
|
+
"""A NAT artifact including base64 encoded string of wheel package and corrosponding discovery metadata.
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
whl (str): A base64 encoded string of a NAT package wheel (.whl).
|
|
32
|
+
|
|
33
|
+
metadata (dict[ComponentEnum, list[DiscoveryMetadata]]): Provides rich discover metadata for developers to
|
|
34
|
+
quickly find useful components.
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
whl: str
|
|
38
|
+
metadata: dict[ComponentEnum, list[DiscoveryMetadata]]
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class Artifact(BaseModel):
|
|
42
|
+
"""A NAT artifact including base64 encoded string of wheel package and corrosponding discovery metadata.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
artifact (BuiltArtifact): A NAT artifact including base64 encoded string of wheel package and
|
|
46
|
+
corrosponding discovery metadata.
|
|
47
|
+
|
|
48
|
+
whl_path (str): A local path to the built wheel package.
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
artifact: BuiltArtifact | None = None
|
|
52
|
+
whl_path: str
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
class PublishResponse(BaseModel):
|
|
56
|
+
"""The expected response from a publish request denoting status information.
|
|
57
|
+
|
|
58
|
+
Args:
|
|
59
|
+
status (StatusMessage): Provides metadata describing the success or errors that occurred when
|
|
60
|
+
making a publish request.
|
|
61
|
+
"""
|
|
62
|
+
|
|
63
|
+
status: StatusMessage
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
# Compatibility aliases with previous releases
|
|
67
|
+
BuiltAIQArtifact = BuiltArtifact
|
|
68
|
+
AIQArtifact = Artifact
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2025, 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 logging
|
|
17
|
+
|
|
18
|
+
from pydantic import BaseModel
|
|
19
|
+
|
|
20
|
+
from nat.registry_handlers.schemas.package import PackageNameVersion
|
|
21
|
+
from nat.registry_handlers.schemas.status import StatusMessage
|
|
22
|
+
|
|
23
|
+
logger = logging.getLogger(__name__)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class PulledPackage(BaseModel):
|
|
27
|
+
"""Represents a data model of a pulled package containing the package wheel and its name.
|
|
28
|
+
|
|
29
|
+
Args:
|
|
30
|
+
whl (str): Base64 encoded string of the NAT python package wheel (.whl).
|
|
31
|
+
whl_name (str): A string representing the wheel filename.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
whl: str
|
|
35
|
+
whl_name: str
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class PullResponse(BaseModel):
|
|
39
|
+
"""
|
|
40
|
+
Represents a data model of the expected respones from a NAT pull request, including detailed status
|
|
41
|
+
information.
|
|
42
|
+
|
|
43
|
+
Args:
|
|
44
|
+
packages (list[PulledPackage]): A list of pulled packages included in the pull request.
|
|
45
|
+
status (StatusMessage): Provides metadata describing the success or errors that occurred when making to pull in
|
|
46
|
+
a package.
|
|
47
|
+
"""
|
|
48
|
+
|
|
49
|
+
packages: list[PulledPackage] = []
|
|
50
|
+
status: StatusMessage
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class PullPackageWhl(BaseModel):
|
|
54
|
+
"""Local path to wheel (.whl) file.
|
|
55
|
+
|
|
56
|
+
Args:
|
|
57
|
+
whl_path (str): The local path the wheel (.whl) file.
|
|
58
|
+
"""
|
|
59
|
+
|
|
60
|
+
whl_path: str
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class PullRequestPackage(BaseModel):
|
|
64
|
+
"""Represents all data for a single package needed to download an install its components.
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
package (typing.Union[PackageNameVersion, PullPackageWhl]): Attributes of a single package necessary
|
|
68
|
+
to download and install its components.
|
|
69
|
+
"""
|
|
70
|
+
|
|
71
|
+
package: PackageNameVersion | PullPackageWhl
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
class PullRequestPackages(BaseModel):
|
|
75
|
+
"""Represents a list of all packages th download and install in the local NAT environment.
|
|
76
|
+
|
|
77
|
+
Args:
|
|
78
|
+
packages (list[typing.Union[PackageNameVersion, PullPackageWhl]]): A list of packages that can be
|
|
79
|
+
downloaded and installed in the local NAT environment.
|
|
80
|
+
"""
|
|
81
|
+
|
|
82
|
+
packages: list[PackageNameVersion | PullPackageWhl]
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2025, 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 logging
|
|
17
|
+
|
|
18
|
+
from pydantic import BaseModel
|
|
19
|
+
|
|
20
|
+
from nat.registry_handlers.schemas.package import PackageNameVersion
|
|
21
|
+
from nat.registry_handlers.schemas.status import StatusMessage
|
|
22
|
+
|
|
23
|
+
logger = logging.getLogger(__name__)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class RemoveResponse(BaseModel):
|
|
27
|
+
"""Represents a data model for the expected response from a remove request, including packages and status metadata.
|
|
28
|
+
|
|
29
|
+
Args:
|
|
30
|
+
packages (list[PackageNameVersion]): A list of packages that are to be removed from a remote registry.
|
|
31
|
+
status (StatusMessage): Provides metadata describing the success or errors that occurred when making a remove
|
|
32
|
+
request.
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
packages: list[PackageNameVersion] = []
|
|
36
|
+
status: StatusMessage
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2025, 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 logging
|
|
17
|
+
from enum import Enum
|
|
18
|
+
|
|
19
|
+
from pydantic import BaseModel
|
|
20
|
+
|
|
21
|
+
from nat.data_models.component import ComponentEnum
|
|
22
|
+
from nat.registry_handlers.schemas.status import StatusMessage
|
|
23
|
+
|
|
24
|
+
logger = logging.getLogger(__name__)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class SearchFields(str, Enum):
|
|
28
|
+
ALL = "all"
|
|
29
|
+
PACKAGE = "package"
|
|
30
|
+
VERSION = "version"
|
|
31
|
+
COMPONENT_NAME = "component_name"
|
|
32
|
+
DESCRIPTION = "description"
|
|
33
|
+
DEVELOPER_NOTES = "developer_notes"
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class VisualizeFields(str, Enum):
|
|
37
|
+
PACKAGE = "package"
|
|
38
|
+
VERSION = "version"
|
|
39
|
+
COMPONENT_TYPE = "component_type"
|
|
40
|
+
COMPONENT_NAME = "component_name"
|
|
41
|
+
DESCRIPTION = "description"
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class SearchQuery(BaseModel):
|
|
45
|
+
"""Represents the search criteria that will be used to discover useful NAT components.
|
|
46
|
+
|
|
47
|
+
Args:
|
|
48
|
+
query (str): A query string used to find useful NAT components.
|
|
49
|
+
fields (list[SearchFields]): The list of fields used when applying the query string.
|
|
50
|
+
component_types (list[ComponentEnum]): NAT components types to filter search results.
|
|
51
|
+
top_k (int): Specifies the number of search results to provide.
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
query: str = "*"
|
|
55
|
+
fields: list[SearchFields] = [SearchFields.ALL]
|
|
56
|
+
component_types: list[ComponentEnum]
|
|
57
|
+
top_k: int = 10
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
class SearchResponseItem(BaseModel):
|
|
61
|
+
"""Represents an individual item in the search response, including elements of it's discovery metadata.
|
|
62
|
+
|
|
63
|
+
Args:
|
|
64
|
+
package (str): The name of the NAT package that includes the component.
|
|
65
|
+
version (str): The version of the NAT package that includes the component.
|
|
66
|
+
component_type (ComponentEnum): Type of NAT component this item represents.
|
|
67
|
+
description (str): A description of this NAT component.
|
|
68
|
+
developer_notes (str): Additional details that would help a developer use this component.
|
|
69
|
+
"""
|
|
70
|
+
|
|
71
|
+
package: str
|
|
72
|
+
version: str
|
|
73
|
+
component_type: ComponentEnum
|
|
74
|
+
component_name: str
|
|
75
|
+
description: str
|
|
76
|
+
developer_notes: str
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
class SearchResponse(BaseModel):
|
|
80
|
+
"""Represents a data model of the expected search response.
|
|
81
|
+
|
|
82
|
+
Args:
|
|
83
|
+
results (list[SearchResponseItem]): A list of results that matched the search criteria.
|
|
84
|
+
params (SearchQuery): The search criterial that produced these search results.
|
|
85
|
+
status (StatusMessage): Provides metadata describing the success or errors that occurred when making the search
|
|
86
|
+
request.
|
|
87
|
+
"""
|
|
88
|
+
|
|
89
|
+
results: list[SearchResponseItem] = []
|
|
90
|
+
params: SearchQuery
|
|
91
|
+
status: StatusMessage
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2025, 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 logging
|
|
17
|
+
from enum import Enum
|
|
18
|
+
|
|
19
|
+
from pydantic import BaseModel
|
|
20
|
+
|
|
21
|
+
logger = logging.getLogger(__name__)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class ActionEnum(str, Enum):
|
|
25
|
+
PUBLISH = "publish"
|
|
26
|
+
PULL = "pull"
|
|
27
|
+
REMOVE = "remove"
|
|
28
|
+
SEARCH = "search"
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class StatusEnum(str, Enum):
|
|
32
|
+
SUCCESS = "success"
|
|
33
|
+
ERROR = "error"
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class StatusMessage(BaseModel):
|
|
37
|
+
"""Represents a data model to record success or error when performing registry interactions.
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
status (StatusEnum): Represents the outcome (success or error) of the registry interaction.
|
|
41
|
+
action: (ActionEnum): Represents the type of registry action that was taken.
|
|
42
|
+
message: (str): Provides a more detailed status message for the registry interaction.
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
status: StatusEnum
|
|
46
|
+
action: ActionEnum
|
|
47
|
+
message: str
|
|
File without changes
|