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,174 @@
|
|
|
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 dataclasses
|
|
17
|
+
import logging
|
|
18
|
+
import typing
|
|
19
|
+
|
|
20
|
+
from nat.data_models.intermediate_step import IntermediateStep
|
|
21
|
+
from nat.data_models.intermediate_step import IntermediateStepPayload
|
|
22
|
+
from nat.data_models.intermediate_step import IntermediateStepState
|
|
23
|
+
from nat.utils.reactive.observable import OnComplete
|
|
24
|
+
from nat.utils.reactive.observable import OnError
|
|
25
|
+
from nat.utils.reactive.observable import OnNext
|
|
26
|
+
from nat.utils.reactive.subscription import Subscription
|
|
27
|
+
|
|
28
|
+
if typing.TYPE_CHECKING:
|
|
29
|
+
from nat.builder.context import ContextState
|
|
30
|
+
|
|
31
|
+
logger = logging.getLogger(__name__)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
@dataclasses.dataclass
|
|
35
|
+
class OpenStep:
|
|
36
|
+
step_id: str
|
|
37
|
+
step_name: str
|
|
38
|
+
step_type: str
|
|
39
|
+
step_parent_id: str
|
|
40
|
+
prev_stack: list[str]
|
|
41
|
+
active_stack: list[str]
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class IntermediateStepManager:
|
|
45
|
+
"""
|
|
46
|
+
Manages updates to the NAT Event Stream for intermediate steps
|
|
47
|
+
"""
|
|
48
|
+
|
|
49
|
+
def __init__(self, context_state: "ContextState"): # noqa: F821
|
|
50
|
+
self._context_state = context_state
|
|
51
|
+
|
|
52
|
+
self._outstanding_start_steps: dict[str, OpenStep] = {}
|
|
53
|
+
|
|
54
|
+
def push_intermediate_step(self, payload: IntermediateStepPayload) -> None:
|
|
55
|
+
"""
|
|
56
|
+
Pushes an intermediate step to the NAT Event Stream
|
|
57
|
+
"""
|
|
58
|
+
|
|
59
|
+
if not isinstance(payload, IntermediateStepPayload):
|
|
60
|
+
raise TypeError(f"Payload must be of type IntermediateStepPayload, not {type(payload)}")
|
|
61
|
+
|
|
62
|
+
active_span_id_stack = self._context_state.active_span_id_stack.get()
|
|
63
|
+
|
|
64
|
+
if (payload.event_state == IntermediateStepState.START):
|
|
65
|
+
|
|
66
|
+
prev_stack = active_span_id_stack
|
|
67
|
+
|
|
68
|
+
parent_step_id = active_span_id_stack[-1]
|
|
69
|
+
|
|
70
|
+
# Note, this must not mutate the active_span_id_stack in place
|
|
71
|
+
active_span_id_stack = active_span_id_stack + [payload.UUID]
|
|
72
|
+
self._context_state.active_span_id_stack.set(active_span_id_stack)
|
|
73
|
+
|
|
74
|
+
self._outstanding_start_steps[payload.UUID] = OpenStep(step_id=payload.UUID,
|
|
75
|
+
step_name=payload.name or payload.UUID,
|
|
76
|
+
step_type=payload.event_type,
|
|
77
|
+
step_parent_id=parent_step_id,
|
|
78
|
+
prev_stack=prev_stack,
|
|
79
|
+
active_stack=active_span_id_stack)
|
|
80
|
+
|
|
81
|
+
logger.debug("Pushed start step %s, name %s, type %s, parent %s, stack id %s",
|
|
82
|
+
payload.UUID,
|
|
83
|
+
payload.name,
|
|
84
|
+
payload.event_type,
|
|
85
|
+
parent_step_id,
|
|
86
|
+
id(active_span_id_stack))
|
|
87
|
+
|
|
88
|
+
elif (payload.event_state == IntermediateStepState.END):
|
|
89
|
+
|
|
90
|
+
# Remove the current step from the outstanding steps
|
|
91
|
+
open_step = self._outstanding_start_steps.pop(payload.UUID, None)
|
|
92
|
+
|
|
93
|
+
if (open_step is None):
|
|
94
|
+
logger.warning("Step id %s not found in outstanding start steps", payload.UUID)
|
|
95
|
+
return
|
|
96
|
+
|
|
97
|
+
parent_step_id = open_step.step_parent_id
|
|
98
|
+
|
|
99
|
+
# Get the current and previous active span id stack.
|
|
100
|
+
curr_stack = open_step.active_stack
|
|
101
|
+
prev_stack = open_step.prev_stack
|
|
102
|
+
|
|
103
|
+
# To restore the stack, we need to handle two scenarios:
|
|
104
|
+
# 1. This function is called from a coroutine. In this case, the context variable will be the same as the
|
|
105
|
+
# one used in START. So we can just set the context variable to the previous stack.
|
|
106
|
+
# 2. This function is called from a task. In this case, the context variable will be separate from the one
|
|
107
|
+
# used in START so calling set() will have no effect. However, we still have a reference to the list used
|
|
108
|
+
# in START. So we update the reference to be equal to the old one.. So we need to update the current
|
|
109
|
+
# reference stack to be equal to the previous stack.
|
|
110
|
+
|
|
111
|
+
# Scenario 1: Restore the previous active span id stack in case we are in a coroutine. Dont use reset here
|
|
112
|
+
# since we can be in different contexts
|
|
113
|
+
self._context_state.active_span_id_stack.set(prev_stack)
|
|
114
|
+
|
|
115
|
+
pop_count = 0
|
|
116
|
+
|
|
117
|
+
# Scenario 2: Remove all steps from the current stack until we reach the parent step id to make it equal to
|
|
118
|
+
# the previous stack. In the coroutine case, this will not have any effect.
|
|
119
|
+
while (curr_stack[-1] != parent_step_id):
|
|
120
|
+
curr_stack.pop()
|
|
121
|
+
pop_count += 1
|
|
122
|
+
|
|
123
|
+
if (pop_count != 1):
|
|
124
|
+
logger.warning(
|
|
125
|
+
"Step id %s not the last step in the stack. "
|
|
126
|
+
"Removing it from the stack but this is likely an error",
|
|
127
|
+
payload.UUID)
|
|
128
|
+
|
|
129
|
+
# Verify that the stack is now equal to the previous stack
|
|
130
|
+
if (curr_stack != prev_stack):
|
|
131
|
+
logger.warning("Current span ID stack is not equal to the previous stack. "
|
|
132
|
+
"This is likely an error. Report this to the NeMo Agent toolkit team.")
|
|
133
|
+
|
|
134
|
+
logger.debug("Popped end step %s, name %s, type %s, parent %s, stack id %s",
|
|
135
|
+
payload.UUID,
|
|
136
|
+
payload.name,
|
|
137
|
+
payload.event_type,
|
|
138
|
+
parent_step_id,
|
|
139
|
+
id(curr_stack))
|
|
140
|
+
|
|
141
|
+
elif (payload.event_state == IntermediateStepState.CHUNK):
|
|
142
|
+
|
|
143
|
+
# Get the current step from the outstanding steps
|
|
144
|
+
open_step = self._outstanding_start_steps.get(payload.UUID, None)
|
|
145
|
+
|
|
146
|
+
# Generate a warning if the parent step id is not set to the current step id
|
|
147
|
+
if (open_step is None):
|
|
148
|
+
logger.warning(
|
|
149
|
+
"Created a chunk for step %s, but no matching start step was found. "
|
|
150
|
+
"Chunks must be created with the same ID as the start step.",
|
|
151
|
+
payload.UUID)
|
|
152
|
+
return
|
|
153
|
+
|
|
154
|
+
parent_step_id = open_step.step_parent_id
|
|
155
|
+
else:
|
|
156
|
+
assert False, "Invalid event state"
|
|
157
|
+
|
|
158
|
+
active_function = self._context_state.active_function.get()
|
|
159
|
+
|
|
160
|
+
intermediate_step = IntermediateStep(parent_id=parent_step_id,
|
|
161
|
+
function_ancestry=active_function,
|
|
162
|
+
payload=payload)
|
|
163
|
+
|
|
164
|
+
self._context_state.event_stream.get().on_next(intermediate_step)
|
|
165
|
+
|
|
166
|
+
def subscribe(self,
|
|
167
|
+
on_next: OnNext[IntermediateStep],
|
|
168
|
+
on_error: OnError = None,
|
|
169
|
+
on_complete: OnComplete = None) -> Subscription:
|
|
170
|
+
"""
|
|
171
|
+
Subscribes to the NAT Event Stream for intermediate steps
|
|
172
|
+
"""
|
|
173
|
+
|
|
174
|
+
return self._context_state.event_stream.get().subscribe(on_next, on_error, on_complete)
|
nat/builder/llm.py
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2024-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
|
+
from nat.data_models.llm import LLMBaseConfig
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class LLMProviderInfo:
|
|
20
|
+
|
|
21
|
+
def __init__(self, *, config: LLMBaseConfig, description: str):
|
|
22
|
+
|
|
23
|
+
self.config = config
|
|
24
|
+
self.provider_type = type(config).static_type()
|
|
25
|
+
self.description = description
|
nat/builder/retriever.py
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
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
|
+
from nat.data_models.retriever import RetrieverBaseConfig
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class RetrieverProviderInfo:
|
|
20
|
+
|
|
21
|
+
def __init__(self, *, config: RetrieverBaseConfig, description: str):
|
|
22
|
+
|
|
23
|
+
self.config = config
|
|
24
|
+
self.provider_type = type(config).static_type()
|
|
25
|
+
self.description = description
|
|
@@ -0,0 +1,78 @@
|
|
|
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
|
+
import time
|
|
18
|
+
import uuid
|
|
19
|
+
|
|
20
|
+
from nat.data_models.interactive import HumanPrompt
|
|
21
|
+
from nat.data_models.interactive import HumanResponse
|
|
22
|
+
from nat.data_models.interactive import InteractionPrompt
|
|
23
|
+
from nat.data_models.interactive import InteractionResponse
|
|
24
|
+
from nat.data_models.interactive import InteractionStatus
|
|
25
|
+
|
|
26
|
+
logger = logging.getLogger(__name__)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class UserInteractionManager:
|
|
30
|
+
"""
|
|
31
|
+
UserInteractionManager is responsible for requesting user input
|
|
32
|
+
at runtime. It delegates the actual prompting to a callback function
|
|
33
|
+
stored in ContextState.user_input_callback.
|
|
34
|
+
|
|
35
|
+
Type is not imported in __init__ to prevent partial import.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
def __init__(self, context_state: "ContextState") -> None: # noqa: F821
|
|
39
|
+
self._context_state = context_state
|
|
40
|
+
|
|
41
|
+
@staticmethod
|
|
42
|
+
async def default_callback_handler(prompt: InteractionPrompt) -> HumanResponse:
|
|
43
|
+
"""
|
|
44
|
+
Default callback handler for user input. This is a no-op function
|
|
45
|
+
that simply returns the input text from the Interaction Content
|
|
46
|
+
object.
|
|
47
|
+
|
|
48
|
+
Args:
|
|
49
|
+
prompt (InteractionPrompt): The interaction to process.
|
|
50
|
+
"""
|
|
51
|
+
raise NotImplementedError("No human prompt callback was registered. Unable to handle requested prompt.")
|
|
52
|
+
|
|
53
|
+
async def prompt_user_input(self, content: HumanPrompt) -> InteractionResponse:
|
|
54
|
+
"""
|
|
55
|
+
Ask the user a question and wait for input. This calls out to
|
|
56
|
+
the callback from user_input_callback, which is typically
|
|
57
|
+
set by SessionManager.
|
|
58
|
+
|
|
59
|
+
Returns the user's typed-in answer as a string.
|
|
60
|
+
"""
|
|
61
|
+
|
|
62
|
+
uuid_req = str(uuid.uuid4())
|
|
63
|
+
status = InteractionStatus.IN_PROGRESS
|
|
64
|
+
timestamp = time.strftime("%Y-%m-%dT%H:%M:%SZ")
|
|
65
|
+
sys_human_interaction = InteractionPrompt(id=uuid_req, status=status, timestamp=timestamp, content=content)
|
|
66
|
+
|
|
67
|
+
resp = await self._context_state.user_input_callback.get()(sys_human_interaction)
|
|
68
|
+
|
|
69
|
+
# Rebuild a InteractionResponse object with the response
|
|
70
|
+
timestamp = time.strftime("%Y-%m-%dT%H:%M:%SZ")
|
|
71
|
+
status = InteractionStatus.COMPLETED
|
|
72
|
+
sys_human_interaction = InteractionResponse(id=uuid_req, status=status, timestamp=timestamp, content=resp)
|
|
73
|
+
|
|
74
|
+
return sys_human_interaction
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
# Compatibility aliases with previous releases
|
|
78
|
+
AIQUserInteractionManager = UserInteractionManager
|
nat/builder/workflow.py
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2024-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
|
+
from contextlib import asynccontextmanager
|
|
17
|
+
from contextvars import ContextVar
|
|
18
|
+
from typing import Any
|
|
19
|
+
|
|
20
|
+
from nat.builder.context import ContextState
|
|
21
|
+
from nat.builder.embedder import EmbedderProviderInfo
|
|
22
|
+
from nat.builder.function import Function
|
|
23
|
+
from nat.builder.function_base import FunctionBase
|
|
24
|
+
from nat.builder.function_base import InputT
|
|
25
|
+
from nat.builder.function_base import SingleOutputT
|
|
26
|
+
from nat.builder.function_base import StreamingOutputT
|
|
27
|
+
from nat.builder.llm import LLMProviderInfo
|
|
28
|
+
from nat.builder.retriever import RetrieverProviderInfo
|
|
29
|
+
from nat.data_models.config import Config
|
|
30
|
+
from nat.experimental.test_time_compute.models.strategy_base import StrategyBase
|
|
31
|
+
from nat.memory.interfaces import MemoryEditor
|
|
32
|
+
from nat.object_store.interfaces import ObjectStore
|
|
33
|
+
from nat.observability.exporter.base_exporter import BaseExporter
|
|
34
|
+
from nat.observability.exporter_manager import ExporterManager
|
|
35
|
+
from nat.runtime.runner import Runner
|
|
36
|
+
|
|
37
|
+
callback_handler_var: ContextVar[Any | None] = ContextVar("callback_handler_var", default=None)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class Workflow(FunctionBase[InputT, StreamingOutputT, SingleOutputT]):
|
|
41
|
+
|
|
42
|
+
def __init__(self,
|
|
43
|
+
*,
|
|
44
|
+
config: Config,
|
|
45
|
+
entry_fn: Function[InputT, StreamingOutputT, SingleOutputT],
|
|
46
|
+
functions: dict[str, Function] | None = None,
|
|
47
|
+
llms: dict[str, LLMProviderInfo] | None = None,
|
|
48
|
+
embeddings: dict[str, EmbedderProviderInfo] | None = None,
|
|
49
|
+
memory: dict[str, MemoryEditor] | None = None,
|
|
50
|
+
object_stores: dict[str, ObjectStore] | None = None,
|
|
51
|
+
telemetry_exporters: dict[str, BaseExporter] | None = None,
|
|
52
|
+
retrievers: dict[str | None, RetrieverProviderInfo] | None = None,
|
|
53
|
+
ttc_strategies: dict[str, StrategyBase] | None = None,
|
|
54
|
+
context_state: ContextState):
|
|
55
|
+
|
|
56
|
+
super().__init__(input_schema=entry_fn.input_schema,
|
|
57
|
+
streaming_output_schema=entry_fn.streaming_output_schema,
|
|
58
|
+
single_output_schema=entry_fn.single_output_schema)
|
|
59
|
+
|
|
60
|
+
self.config = config
|
|
61
|
+
self.functions = functions or {}
|
|
62
|
+
self.llms = llms or {}
|
|
63
|
+
self.embeddings = embeddings or {}
|
|
64
|
+
self.memory = memory or {}
|
|
65
|
+
self.telemetry_exporters = telemetry_exporters or {}
|
|
66
|
+
self.object_stores = object_stores or {}
|
|
67
|
+
self.retrievers = retrievers or {}
|
|
68
|
+
|
|
69
|
+
self._exporter_manager = ExporterManager.from_exporters(self.telemetry_exporters)
|
|
70
|
+
self.ttc_strategies = ttc_strategies or {}
|
|
71
|
+
|
|
72
|
+
self._entry_fn = entry_fn
|
|
73
|
+
|
|
74
|
+
self._context_state = context_state
|
|
75
|
+
|
|
76
|
+
@property
|
|
77
|
+
def has_streaming_output(self) -> bool:
|
|
78
|
+
|
|
79
|
+
return self._entry_fn.has_streaming_output
|
|
80
|
+
|
|
81
|
+
@property
|
|
82
|
+
def has_single_output(self) -> bool:
|
|
83
|
+
|
|
84
|
+
return self._entry_fn.has_single_output
|
|
85
|
+
|
|
86
|
+
@asynccontextmanager
|
|
87
|
+
async def run(self, message: InputT):
|
|
88
|
+
"""
|
|
89
|
+
Called each time we start a new workflow run. We'll create
|
|
90
|
+
a new top-level workflow span here.
|
|
91
|
+
"""
|
|
92
|
+
|
|
93
|
+
async with Runner(input_message=message,
|
|
94
|
+
entry_fn=self._entry_fn,
|
|
95
|
+
context_state=self._context_state,
|
|
96
|
+
exporter_manager=self._exporter_manager.get()) as runner:
|
|
97
|
+
|
|
98
|
+
# The caller can `yield runner` so they can do `runner.result()` or `runner.result_stream()`
|
|
99
|
+
yield runner
|
|
100
|
+
|
|
101
|
+
async def result_with_steps(self, message: InputT, to_type: type | None = None):
|
|
102
|
+
|
|
103
|
+
async with self.run(message) as runner:
|
|
104
|
+
|
|
105
|
+
from nat.eval.runtime_event_subscriber import pull_intermediate
|
|
106
|
+
|
|
107
|
+
# Start the intermediate stream
|
|
108
|
+
pull_done, intermediate_steps = pull_intermediate()
|
|
109
|
+
|
|
110
|
+
# Wait on the result
|
|
111
|
+
result = await runner.result(to_type=to_type)
|
|
112
|
+
|
|
113
|
+
await pull_done.wait()
|
|
114
|
+
|
|
115
|
+
return result, intermediate_steps
|
|
116
|
+
|
|
117
|
+
@staticmethod
|
|
118
|
+
def from_entry_fn(*,
|
|
119
|
+
config: Config,
|
|
120
|
+
entry_fn: Function[InputT, StreamingOutputT, SingleOutputT],
|
|
121
|
+
functions: dict[str, Function] | None = None,
|
|
122
|
+
llms: dict[str, LLMProviderInfo] | None = None,
|
|
123
|
+
embeddings: dict[str, EmbedderProviderInfo] | None = None,
|
|
124
|
+
memory: dict[str, MemoryEditor] | None = None,
|
|
125
|
+
object_stores: dict[str, ObjectStore] | None = None,
|
|
126
|
+
telemetry_exporters: dict[str, BaseExporter] | None = None,
|
|
127
|
+
retrievers: dict[str | None, RetrieverProviderInfo] | None = None,
|
|
128
|
+
ttc_strategies: dict[str, StrategyBase] | None = None,
|
|
129
|
+
context_state: ContextState) -> 'Workflow[InputT, StreamingOutputT, SingleOutputT]':
|
|
130
|
+
|
|
131
|
+
input_type: type = entry_fn.input_type
|
|
132
|
+
streaming_output_type = entry_fn.streaming_output_type
|
|
133
|
+
single_output_type = entry_fn.single_output_type
|
|
134
|
+
|
|
135
|
+
class WorkflowImpl(Workflow[input_type, streaming_output_type, single_output_type]):
|
|
136
|
+
pass
|
|
137
|
+
|
|
138
|
+
return WorkflowImpl(config=config,
|
|
139
|
+
entry_fn=entry_fn,
|
|
140
|
+
functions=functions,
|
|
141
|
+
llms=llms,
|
|
142
|
+
embeddings=embeddings,
|
|
143
|
+
memory=memory,
|
|
144
|
+
object_stores=object_stores,
|
|
145
|
+
telemetry_exporters=telemetry_exporters,
|
|
146
|
+
retrievers=retrievers,
|
|
147
|
+
ttc_strategies=ttc_strategies,
|
|
148
|
+
context_state=context_state)
|