nvidia-nat 1.2.0rc5__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/agent/__init__.py +0 -0
- aiq/agent/base.py +239 -0
- aiq/agent/dual_node.py +67 -0
- aiq/agent/react_agent/__init__.py +0 -0
- aiq/agent/react_agent/agent.py +355 -0
- aiq/agent/react_agent/output_parser.py +104 -0
- aiq/agent/react_agent/prompt.py +41 -0
- aiq/agent/react_agent/register.py +149 -0
- aiq/agent/reasoning_agent/__init__.py +0 -0
- aiq/agent/reasoning_agent/reasoning_agent.py +225 -0
- aiq/agent/register.py +23 -0
- aiq/agent/rewoo_agent/__init__.py +0 -0
- aiq/agent/rewoo_agent/agent.py +411 -0
- aiq/agent/rewoo_agent/prompt.py +108 -0
- aiq/agent/rewoo_agent/register.py +158 -0
- aiq/agent/tool_calling_agent/__init__.py +0 -0
- aiq/agent/tool_calling_agent/agent.py +119 -0
- aiq/agent/tool_calling_agent/register.py +106 -0
- aiq/authentication/__init__.py +14 -0
- aiq/authentication/api_key/__init__.py +14 -0
- aiq/authentication/api_key/api_key_auth_provider.py +96 -0
- aiq/authentication/api_key/api_key_auth_provider_config.py +124 -0
- aiq/authentication/api_key/register.py +26 -0
- aiq/authentication/exceptions/__init__.py +14 -0
- aiq/authentication/exceptions/api_key_exceptions.py +38 -0
- aiq/authentication/http_basic_auth/__init__.py +0 -0
- aiq/authentication/http_basic_auth/http_basic_auth_provider.py +81 -0
- aiq/authentication/http_basic_auth/register.py +30 -0
- aiq/authentication/interfaces.py +93 -0
- aiq/authentication/oauth2/__init__.py +14 -0
- aiq/authentication/oauth2/oauth2_auth_code_flow_provider.py +107 -0
- aiq/authentication/oauth2/oauth2_auth_code_flow_provider_config.py +39 -0
- aiq/authentication/oauth2/register.py +25 -0
- aiq/authentication/register.py +21 -0
- aiq/builder/__init__.py +0 -0
- aiq/builder/builder.py +285 -0
- aiq/builder/component_utils.py +316 -0
- aiq/builder/context.py +264 -0
- aiq/builder/embedder.py +24 -0
- aiq/builder/eval_builder.py +161 -0
- aiq/builder/evaluator.py +29 -0
- aiq/builder/framework_enum.py +24 -0
- aiq/builder/front_end.py +73 -0
- aiq/builder/function.py +344 -0
- aiq/builder/function_base.py +380 -0
- aiq/builder/function_info.py +627 -0
- aiq/builder/intermediate_step_manager.py +174 -0
- aiq/builder/llm.py +25 -0
- aiq/builder/retriever.py +25 -0
- aiq/builder/user_interaction_manager.py +74 -0
- aiq/builder/workflow.py +148 -0
- aiq/builder/workflow_builder.py +1117 -0
- aiq/cli/__init__.py +14 -0
- aiq/cli/cli_utils/__init__.py +0 -0
- aiq/cli/cli_utils/config_override.py +231 -0
- aiq/cli/cli_utils/validation.py +37 -0
- aiq/cli/commands/__init__.py +0 -0
- aiq/cli/commands/configure/__init__.py +0 -0
- aiq/cli/commands/configure/channel/__init__.py +0 -0
- aiq/cli/commands/configure/channel/add.py +28 -0
- aiq/cli/commands/configure/channel/channel.py +36 -0
- aiq/cli/commands/configure/channel/remove.py +30 -0
- aiq/cli/commands/configure/channel/update.py +30 -0
- aiq/cli/commands/configure/configure.py +33 -0
- aiq/cli/commands/evaluate.py +139 -0
- aiq/cli/commands/info/__init__.py +14 -0
- aiq/cli/commands/info/info.py +39 -0
- aiq/cli/commands/info/list_channels.py +32 -0
- aiq/cli/commands/info/list_components.py +129 -0
- aiq/cli/commands/info/list_mcp.py +213 -0
- aiq/cli/commands/registry/__init__.py +14 -0
- aiq/cli/commands/registry/publish.py +88 -0
- aiq/cli/commands/registry/pull.py +118 -0
- aiq/cli/commands/registry/registry.py +38 -0
- aiq/cli/commands/registry/remove.py +108 -0
- aiq/cli/commands/registry/search.py +155 -0
- aiq/cli/commands/sizing/__init__.py +14 -0
- aiq/cli/commands/sizing/calc.py +297 -0
- aiq/cli/commands/sizing/sizing.py +27 -0
- aiq/cli/commands/start.py +246 -0
- aiq/cli/commands/uninstall.py +81 -0
- aiq/cli/commands/validate.py +47 -0
- aiq/cli/commands/workflow/__init__.py +14 -0
- aiq/cli/commands/workflow/templates/__init__.py.j2 +0 -0
- aiq/cli/commands/workflow/templates/config.yml.j2 +16 -0
- aiq/cli/commands/workflow/templates/pyproject.toml.j2 +22 -0
- aiq/cli/commands/workflow/templates/register.py.j2 +5 -0
- aiq/cli/commands/workflow/templates/workflow.py.j2 +36 -0
- aiq/cli/commands/workflow/workflow.py +37 -0
- aiq/cli/commands/workflow/workflow_commands.py +313 -0
- aiq/cli/entrypoint.py +135 -0
- aiq/cli/main.py +44 -0
- aiq/cli/register_workflow.py +488 -0
- aiq/cli/type_registry.py +1000 -0
- aiq/data_models/__init__.py +14 -0
- aiq/data_models/api_server.py +694 -0
- aiq/data_models/authentication.py +231 -0
- aiq/data_models/common.py +171 -0
- aiq/data_models/component.py +54 -0
- aiq/data_models/component_ref.py +168 -0
- aiq/data_models/config.py +406 -0
- aiq/data_models/dataset_handler.py +123 -0
- aiq/data_models/discovery_metadata.py +335 -0
- aiq/data_models/embedder.py +27 -0
- aiq/data_models/evaluate.py +127 -0
- aiq/data_models/evaluator.py +26 -0
- aiq/data_models/front_end.py +26 -0
- aiq/data_models/function.py +30 -0
- aiq/data_models/function_dependencies.py +72 -0
- aiq/data_models/interactive.py +246 -0
- aiq/data_models/intermediate_step.py +302 -0
- aiq/data_models/invocation_node.py +38 -0
- aiq/data_models/llm.py +27 -0
- aiq/data_models/logging.py +26 -0
- aiq/data_models/memory.py +27 -0
- aiq/data_models/object_store.py +44 -0
- aiq/data_models/profiler.py +54 -0
- aiq/data_models/registry_handler.py +26 -0
- aiq/data_models/retriever.py +30 -0
- aiq/data_models/retry_mixin.py +35 -0
- aiq/data_models/span.py +187 -0
- aiq/data_models/step_adaptor.py +64 -0
- aiq/data_models/streaming.py +33 -0
- aiq/data_models/swe_bench_model.py +54 -0
- aiq/data_models/telemetry_exporter.py +26 -0
- aiq/data_models/ttc_strategy.py +30 -0
- aiq/embedder/__init__.py +0 -0
- aiq/embedder/langchain_client.py +41 -0
- aiq/embedder/nim_embedder.py +59 -0
- aiq/embedder/openai_embedder.py +43 -0
- aiq/embedder/register.py +24 -0
- aiq/eval/__init__.py +14 -0
- aiq/eval/config.py +60 -0
- aiq/eval/dataset_handler/__init__.py +0 -0
- aiq/eval/dataset_handler/dataset_downloader.py +106 -0
- aiq/eval/dataset_handler/dataset_filter.py +52 -0
- aiq/eval/dataset_handler/dataset_handler.py +254 -0
- aiq/eval/evaluate.py +506 -0
- aiq/eval/evaluator/__init__.py +14 -0
- aiq/eval/evaluator/base_evaluator.py +73 -0
- aiq/eval/evaluator/evaluator_model.py +45 -0
- aiq/eval/intermediate_step_adapter.py +99 -0
- aiq/eval/rag_evaluator/__init__.py +0 -0
- aiq/eval/rag_evaluator/evaluate.py +178 -0
- aiq/eval/rag_evaluator/register.py +143 -0
- aiq/eval/register.py +23 -0
- aiq/eval/remote_workflow.py +133 -0
- aiq/eval/runners/__init__.py +14 -0
- aiq/eval/runners/config.py +39 -0
- aiq/eval/runners/multi_eval_runner.py +54 -0
- aiq/eval/runtime_event_subscriber.py +52 -0
- aiq/eval/swe_bench_evaluator/__init__.py +0 -0
- aiq/eval/swe_bench_evaluator/evaluate.py +215 -0
- aiq/eval/swe_bench_evaluator/register.py +36 -0
- aiq/eval/trajectory_evaluator/__init__.py +0 -0
- aiq/eval/trajectory_evaluator/evaluate.py +75 -0
- aiq/eval/trajectory_evaluator/register.py +40 -0
- aiq/eval/tunable_rag_evaluator/__init__.py +0 -0
- aiq/eval/tunable_rag_evaluator/evaluate.py +245 -0
- aiq/eval/tunable_rag_evaluator/register.py +52 -0
- aiq/eval/usage_stats.py +41 -0
- aiq/eval/utils/__init__.py +0 -0
- aiq/eval/utils/output_uploader.py +140 -0
- aiq/eval/utils/tqdm_position_registry.py +40 -0
- aiq/eval/utils/weave_eval.py +184 -0
- aiq/experimental/__init__.py +0 -0
- aiq/experimental/decorators/__init__.py +0 -0
- aiq/experimental/decorators/experimental_warning_decorator.py +130 -0
- aiq/experimental/test_time_compute/__init__.py +0 -0
- aiq/experimental/test_time_compute/editing/__init__.py +0 -0
- aiq/experimental/test_time_compute/editing/iterative_plan_refinement_editor.py +147 -0
- aiq/experimental/test_time_compute/editing/llm_as_a_judge_editor.py +204 -0
- aiq/experimental/test_time_compute/editing/motivation_aware_summarization.py +107 -0
- aiq/experimental/test_time_compute/functions/__init__.py +0 -0
- aiq/experimental/test_time_compute/functions/execute_score_select_function.py +105 -0
- aiq/experimental/test_time_compute/functions/its_tool_orchestration_function.py +205 -0
- aiq/experimental/test_time_compute/functions/its_tool_wrapper_function.py +146 -0
- aiq/experimental/test_time_compute/functions/plan_select_execute_function.py +224 -0
- aiq/experimental/test_time_compute/models/__init__.py +0 -0
- aiq/experimental/test_time_compute/models/editor_config.py +132 -0
- aiq/experimental/test_time_compute/models/scoring_config.py +112 -0
- aiq/experimental/test_time_compute/models/search_config.py +120 -0
- aiq/experimental/test_time_compute/models/selection_config.py +154 -0
- aiq/experimental/test_time_compute/models/stage_enums.py +43 -0
- aiq/experimental/test_time_compute/models/strategy_base.py +66 -0
- aiq/experimental/test_time_compute/models/tool_use_config.py +41 -0
- aiq/experimental/test_time_compute/models/ttc_item.py +48 -0
- aiq/experimental/test_time_compute/register.py +36 -0
- aiq/experimental/test_time_compute/scoring/__init__.py +0 -0
- aiq/experimental/test_time_compute/scoring/llm_based_agent_scorer.py +168 -0
- aiq/experimental/test_time_compute/scoring/llm_based_plan_scorer.py +168 -0
- aiq/experimental/test_time_compute/scoring/motivation_aware_scorer.py +111 -0
- aiq/experimental/test_time_compute/search/__init__.py +0 -0
- aiq/experimental/test_time_compute/search/multi_llm_planner.py +128 -0
- aiq/experimental/test_time_compute/search/multi_query_retrieval_search.py +122 -0
- aiq/experimental/test_time_compute/search/single_shot_multi_plan_planner.py +128 -0
- aiq/experimental/test_time_compute/selection/__init__.py +0 -0
- aiq/experimental/test_time_compute/selection/best_of_n_selector.py +63 -0
- aiq/experimental/test_time_compute/selection/llm_based_agent_output_selector.py +131 -0
- aiq/experimental/test_time_compute/selection/llm_based_output_merging_selector.py +159 -0
- aiq/experimental/test_time_compute/selection/llm_based_plan_selector.py +128 -0
- aiq/experimental/test_time_compute/selection/threshold_selector.py +58 -0
- aiq/front_ends/__init__.py +14 -0
- aiq/front_ends/console/__init__.py +14 -0
- aiq/front_ends/console/authentication_flow_handler.py +233 -0
- aiq/front_ends/console/console_front_end_config.py +32 -0
- aiq/front_ends/console/console_front_end_plugin.py +96 -0
- aiq/front_ends/console/register.py +25 -0
- aiq/front_ends/cron/__init__.py +14 -0
- aiq/front_ends/fastapi/__init__.py +14 -0
- aiq/front_ends/fastapi/auth_flow_handlers/__init__.py +0 -0
- aiq/front_ends/fastapi/auth_flow_handlers/http_flow_handler.py +27 -0
- aiq/front_ends/fastapi/auth_flow_handlers/websocket_flow_handler.py +107 -0
- aiq/front_ends/fastapi/fastapi_front_end_config.py +234 -0
- aiq/front_ends/fastapi/fastapi_front_end_controller.py +68 -0
- aiq/front_ends/fastapi/fastapi_front_end_plugin.py +116 -0
- aiq/front_ends/fastapi/fastapi_front_end_plugin_worker.py +1092 -0
- aiq/front_ends/fastapi/html_snippets/__init__.py +14 -0
- aiq/front_ends/fastapi/html_snippets/auth_code_grant_success.py +35 -0
- aiq/front_ends/fastapi/intermediate_steps_subscriber.py +80 -0
- aiq/front_ends/fastapi/job_store.py +183 -0
- aiq/front_ends/fastapi/main.py +72 -0
- aiq/front_ends/fastapi/message_handler.py +298 -0
- aiq/front_ends/fastapi/message_validator.py +345 -0
- aiq/front_ends/fastapi/register.py +25 -0
- aiq/front_ends/fastapi/response_helpers.py +195 -0
- aiq/front_ends/fastapi/step_adaptor.py +321 -0
- aiq/front_ends/mcp/__init__.py +14 -0
- aiq/front_ends/mcp/mcp_front_end_config.py +32 -0
- aiq/front_ends/mcp/mcp_front_end_plugin.py +93 -0
- aiq/front_ends/mcp/register.py +27 -0
- aiq/front_ends/mcp/tool_converter.py +242 -0
- aiq/front_ends/register.py +22 -0
- aiq/front_ends/simple_base/__init__.py +14 -0
- aiq/front_ends/simple_base/simple_front_end_plugin_base.py +54 -0
- aiq/llm/__init__.py +0 -0
- aiq/llm/aws_bedrock_llm.py +57 -0
- aiq/llm/nim_llm.py +46 -0
- aiq/llm/openai_llm.py +46 -0
- aiq/llm/register.py +23 -0
- aiq/llm/utils/__init__.py +14 -0
- aiq/llm/utils/env_config_value.py +94 -0
- aiq/llm/utils/error.py +17 -0
- aiq/memory/__init__.py +20 -0
- aiq/memory/interfaces.py +183 -0
- aiq/memory/models.py +112 -0
- aiq/meta/module_to_distro.json +3 -0
- aiq/meta/pypi.md +58 -0
- aiq/object_store/__init__.py +20 -0
- aiq/object_store/in_memory_object_store.py +76 -0
- aiq/object_store/interfaces.py +84 -0
- aiq/object_store/models.py +36 -0
- aiq/object_store/register.py +20 -0
- aiq/observability/__init__.py +14 -0
- aiq/observability/exporter/__init__.py +14 -0
- aiq/observability/exporter/base_exporter.py +449 -0
- aiq/observability/exporter/exporter.py +78 -0
- aiq/observability/exporter/file_exporter.py +33 -0
- aiq/observability/exporter/processing_exporter.py +322 -0
- aiq/observability/exporter/raw_exporter.py +52 -0
- aiq/observability/exporter/span_exporter.py +265 -0
- aiq/observability/exporter_manager.py +335 -0
- aiq/observability/mixin/__init__.py +14 -0
- aiq/observability/mixin/batch_config_mixin.py +26 -0
- aiq/observability/mixin/collector_config_mixin.py +23 -0
- aiq/observability/mixin/file_mixin.py +288 -0
- aiq/observability/mixin/file_mode.py +23 -0
- aiq/observability/mixin/resource_conflict_mixin.py +134 -0
- aiq/observability/mixin/serialize_mixin.py +61 -0
- aiq/observability/mixin/type_introspection_mixin.py +183 -0
- aiq/observability/processor/__init__.py +14 -0
- aiq/observability/processor/batching_processor.py +310 -0
- aiq/observability/processor/callback_processor.py +42 -0
- aiq/observability/processor/intermediate_step_serializer.py +28 -0
- aiq/observability/processor/processor.py +71 -0
- aiq/observability/register.py +96 -0
- aiq/observability/utils/__init__.py +14 -0
- aiq/observability/utils/dict_utils.py +236 -0
- aiq/observability/utils/time_utils.py +31 -0
- aiq/plugins/.namespace +1 -0
- aiq/profiler/__init__.py +0 -0
- aiq/profiler/calc/__init__.py +14 -0
- aiq/profiler/calc/calc_runner.py +627 -0
- aiq/profiler/calc/calculations.py +288 -0
- aiq/profiler/calc/data_models.py +188 -0
- aiq/profiler/calc/plot.py +345 -0
- aiq/profiler/callbacks/__init__.py +0 -0
- aiq/profiler/callbacks/agno_callback_handler.py +295 -0
- aiq/profiler/callbacks/base_callback_class.py +20 -0
- aiq/profiler/callbacks/langchain_callback_handler.py +290 -0
- aiq/profiler/callbacks/llama_index_callback_handler.py +205 -0
- aiq/profiler/callbacks/semantic_kernel_callback_handler.py +238 -0
- aiq/profiler/callbacks/token_usage_base_model.py +27 -0
- aiq/profiler/data_frame_row.py +51 -0
- aiq/profiler/data_models.py +24 -0
- aiq/profiler/decorators/__init__.py +0 -0
- aiq/profiler/decorators/framework_wrapper.py +131 -0
- aiq/profiler/decorators/function_tracking.py +254 -0
- aiq/profiler/forecasting/__init__.py +0 -0
- aiq/profiler/forecasting/config.py +18 -0
- aiq/profiler/forecasting/model_trainer.py +75 -0
- aiq/profiler/forecasting/models/__init__.py +22 -0
- aiq/profiler/forecasting/models/forecasting_base_model.py +40 -0
- aiq/profiler/forecasting/models/linear_model.py +196 -0
- aiq/profiler/forecasting/models/random_forest_regressor.py +268 -0
- aiq/profiler/inference_metrics_model.py +28 -0
- aiq/profiler/inference_optimization/__init__.py +0 -0
- aiq/profiler/inference_optimization/bottleneck_analysis/__init__.py +0 -0
- aiq/profiler/inference_optimization/bottleneck_analysis/nested_stack_analysis.py +460 -0
- aiq/profiler/inference_optimization/bottleneck_analysis/simple_stack_analysis.py +258 -0
- aiq/profiler/inference_optimization/data_models.py +386 -0
- aiq/profiler/inference_optimization/experimental/__init__.py +0 -0
- aiq/profiler/inference_optimization/experimental/concurrency_spike_analysis.py +468 -0
- aiq/profiler/inference_optimization/experimental/prefix_span_analysis.py +405 -0
- aiq/profiler/inference_optimization/llm_metrics.py +212 -0
- aiq/profiler/inference_optimization/prompt_caching.py +163 -0
- aiq/profiler/inference_optimization/token_uniqueness.py +107 -0
- aiq/profiler/inference_optimization/workflow_runtimes.py +72 -0
- aiq/profiler/intermediate_property_adapter.py +102 -0
- aiq/profiler/profile_runner.py +473 -0
- aiq/profiler/utils.py +184 -0
- aiq/registry_handlers/__init__.py +0 -0
- aiq/registry_handlers/local/__init__.py +0 -0
- aiq/registry_handlers/local/local_handler.py +176 -0
- aiq/registry_handlers/local/register_local.py +37 -0
- aiq/registry_handlers/metadata_factory.py +60 -0
- aiq/registry_handlers/package_utils.py +567 -0
- aiq/registry_handlers/pypi/__init__.py +0 -0
- aiq/registry_handlers/pypi/pypi_handler.py +251 -0
- aiq/registry_handlers/pypi/register_pypi.py +40 -0
- aiq/registry_handlers/register.py +21 -0
- aiq/registry_handlers/registry_handler_base.py +157 -0
- aiq/registry_handlers/rest/__init__.py +0 -0
- aiq/registry_handlers/rest/register_rest.py +56 -0
- aiq/registry_handlers/rest/rest_handler.py +237 -0
- aiq/registry_handlers/schemas/__init__.py +0 -0
- aiq/registry_handlers/schemas/headers.py +42 -0
- aiq/registry_handlers/schemas/package.py +68 -0
- aiq/registry_handlers/schemas/publish.py +63 -0
- aiq/registry_handlers/schemas/pull.py +82 -0
- aiq/registry_handlers/schemas/remove.py +36 -0
- aiq/registry_handlers/schemas/search.py +91 -0
- aiq/registry_handlers/schemas/status.py +47 -0
- aiq/retriever/__init__.py +0 -0
- aiq/retriever/interface.py +37 -0
- aiq/retriever/milvus/__init__.py +14 -0
- aiq/retriever/milvus/register.py +81 -0
- aiq/retriever/milvus/retriever.py +228 -0
- aiq/retriever/models.py +74 -0
- aiq/retriever/nemo_retriever/__init__.py +14 -0
- aiq/retriever/nemo_retriever/register.py +60 -0
- aiq/retriever/nemo_retriever/retriever.py +190 -0
- aiq/retriever/register.py +22 -0
- aiq/runtime/__init__.py +14 -0
- aiq/runtime/loader.py +215 -0
- aiq/runtime/runner.py +190 -0
- aiq/runtime/session.py +158 -0
- aiq/runtime/user_metadata.py +130 -0
- aiq/settings/__init__.py +0 -0
- aiq/settings/global_settings.py +318 -0
- aiq/test/.namespace +1 -0
- aiq/tool/__init__.py +0 -0
- aiq/tool/chat_completion.py +74 -0
- aiq/tool/code_execution/README.md +151 -0
- aiq/tool/code_execution/__init__.py +0 -0
- aiq/tool/code_execution/code_sandbox.py +267 -0
- aiq/tool/code_execution/local_sandbox/.gitignore +1 -0
- aiq/tool/code_execution/local_sandbox/Dockerfile.sandbox +60 -0
- aiq/tool/code_execution/local_sandbox/__init__.py +13 -0
- aiq/tool/code_execution/local_sandbox/local_sandbox_server.py +198 -0
- aiq/tool/code_execution/local_sandbox/sandbox.requirements.txt +6 -0
- aiq/tool/code_execution/local_sandbox/start_local_sandbox.sh +50 -0
- aiq/tool/code_execution/register.py +74 -0
- aiq/tool/code_execution/test_code_execution_sandbox.py +414 -0
- aiq/tool/code_execution/utils.py +100 -0
- aiq/tool/datetime_tools.py +42 -0
- aiq/tool/document_search.py +141 -0
- aiq/tool/github_tools/__init__.py +0 -0
- aiq/tool/github_tools/create_github_commit.py +133 -0
- aiq/tool/github_tools/create_github_issue.py +87 -0
- aiq/tool/github_tools/create_github_pr.py +106 -0
- aiq/tool/github_tools/get_github_file.py +106 -0
- aiq/tool/github_tools/get_github_issue.py +166 -0
- aiq/tool/github_tools/get_github_pr.py +256 -0
- aiq/tool/github_tools/update_github_issue.py +100 -0
- aiq/tool/mcp/__init__.py +14 -0
- aiq/tool/mcp/exceptions.py +142 -0
- aiq/tool/mcp/mcp_client.py +255 -0
- aiq/tool/mcp/mcp_tool.py +96 -0
- aiq/tool/memory_tools/__init__.py +0 -0
- aiq/tool/memory_tools/add_memory_tool.py +79 -0
- aiq/tool/memory_tools/delete_memory_tool.py +67 -0
- aiq/tool/memory_tools/get_memory_tool.py +72 -0
- aiq/tool/nvidia_rag.py +95 -0
- aiq/tool/register.py +38 -0
- aiq/tool/retriever.py +89 -0
- aiq/tool/server_tools.py +66 -0
- aiq/utils/__init__.py +0 -0
- aiq/utils/data_models/__init__.py +0 -0
- aiq/utils/data_models/schema_validator.py +58 -0
- aiq/utils/debugging_utils.py +43 -0
- aiq/utils/dump_distro_mapping.py +32 -0
- aiq/utils/exception_handlers/__init__.py +0 -0
- aiq/utils/exception_handlers/automatic_retries.py +289 -0
- aiq/utils/exception_handlers/mcp.py +211 -0
- aiq/utils/exception_handlers/schemas.py +114 -0
- aiq/utils/io/__init__.py +0 -0
- aiq/utils/io/model_processing.py +28 -0
- aiq/utils/io/yaml_tools.py +119 -0
- aiq/utils/log_utils.py +37 -0
- aiq/utils/metadata_utils.py +74 -0
- aiq/utils/optional_imports.py +142 -0
- aiq/utils/producer_consumer_queue.py +178 -0
- aiq/utils/reactive/__init__.py +0 -0
- aiq/utils/reactive/base/__init__.py +0 -0
- aiq/utils/reactive/base/observable_base.py +65 -0
- aiq/utils/reactive/base/observer_base.py +55 -0
- aiq/utils/reactive/base/subject_base.py +79 -0
- aiq/utils/reactive/observable.py +59 -0
- aiq/utils/reactive/observer.py +76 -0
- aiq/utils/reactive/subject.py +131 -0
- aiq/utils/reactive/subscription.py +49 -0
- aiq/utils/settings/__init__.py +0 -0
- aiq/utils/settings/global_settings.py +197 -0
- aiq/utils/string_utils.py +38 -0
- aiq/utils/type_converter.py +290 -0
- aiq/utils/type_utils.py +484 -0
- aiq/utils/url_utils.py +27 -0
- nvidia_nat-1.2.0rc5.dist-info/METADATA +363 -0
- nvidia_nat-1.2.0rc5.dist-info/RECORD +435 -0
- nvidia_nat-1.2.0rc5.dist-info/WHEEL +5 -0
- nvidia_nat-1.2.0rc5.dist-info/entry_points.txt +20 -0
- nvidia_nat-1.2.0rc5.dist-info/licenses/LICENSE-3rd-party.txt +3686 -0
- nvidia_nat-1.2.0rc5.dist-info/licenses/LICENSE.md +201 -0
- nvidia_nat-1.2.0rc5.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,246 @@
|
|
|
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 re
|
|
17
|
+
import typing
|
|
18
|
+
from enum import Enum
|
|
19
|
+
|
|
20
|
+
from pydantic import BaseModel
|
|
21
|
+
from pydantic import Discriminator
|
|
22
|
+
from pydantic import Field
|
|
23
|
+
from pydantic import field_validator
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class HumanPromptModelType(str, Enum):
|
|
27
|
+
"""
|
|
28
|
+
Represents the type of an interaction model.
|
|
29
|
+
"""
|
|
30
|
+
TEXT = "text"
|
|
31
|
+
NOTIFICATION = "notification"
|
|
32
|
+
BINARY_CHOICE = "binary_choice"
|
|
33
|
+
RADIO = "radio"
|
|
34
|
+
CHECKBOX = "checkbox"
|
|
35
|
+
DROPDOWN = "dropdown"
|
|
36
|
+
OAUTH_CONSENT = "oauth_consent"
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class BinaryChoiceOptionsType(str, Enum):
|
|
40
|
+
"""
|
|
41
|
+
Represents the types of system interaction binary choice content
|
|
42
|
+
"""
|
|
43
|
+
CONTINUE = "continue"
|
|
44
|
+
CANCEL = "cancel"
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class MultipleChoiceOptionType(str, Enum):
|
|
48
|
+
"""
|
|
49
|
+
Represents the types of system interaction multiple choice content
|
|
50
|
+
"""
|
|
51
|
+
EMAIL = "email"
|
|
52
|
+
SMS = "sms"
|
|
53
|
+
PUSH = "push"
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class BinaryHumanPromptOption(BaseModel):
|
|
57
|
+
"""
|
|
58
|
+
Represents a choice for a binary interaction.
|
|
59
|
+
"""
|
|
60
|
+
id: str = Field(default="default", description="The ID of the choice.")
|
|
61
|
+
label: str = Field(default="default", description="Label of the choice")
|
|
62
|
+
value: typing.Any = Field(default="default", description="The value of the choice.")
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class MultipleChoiceOption(BaseModel):
|
|
66
|
+
id: str = Field(default="default", description="The ID of the choice.")
|
|
67
|
+
label: str = Field(default="default", description="The label for the multiple choice interaction.")
|
|
68
|
+
value: str = Field(default="default", description="The value for the multiple choice interaction.")
|
|
69
|
+
description: str = Field(default="default", description="The description for the multiple choice interaction.")
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class HumanResponseText(BaseModel):
|
|
73
|
+
"""
|
|
74
|
+
Represents a text response to an interaction.
|
|
75
|
+
"""
|
|
76
|
+
type: typing.Literal[HumanPromptModelType.TEXT] = HumanPromptModelType.TEXT
|
|
77
|
+
text: str = Field(description="The text of the response.")
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
class HumanResponseNotification(BaseModel):
|
|
81
|
+
"""
|
|
82
|
+
Represents a notification response to an interaction.
|
|
83
|
+
"""
|
|
84
|
+
type: typing.Literal[HumanPromptModelType.NOTIFICATION] = HumanPromptModelType.NOTIFICATION
|
|
85
|
+
text: str = Field(default="Notification acknowledgement.", description="Default notification response text.")
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
class HumanResponseBinary(BaseModel):
|
|
89
|
+
"""
|
|
90
|
+
Represents a binary response to an interaction.
|
|
91
|
+
"""
|
|
92
|
+
type: typing.Literal[HumanPromptModelType.BINARY_CHOICE] = HumanPromptModelType.BINARY_CHOICE
|
|
93
|
+
selected_option: BinaryHumanPromptOption = Field(description="The selected binary response.")
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
class HumanResponseRadio(BaseModel):
|
|
97
|
+
"""
|
|
98
|
+
Represents a multiple choice radio response to an interaction.
|
|
99
|
+
"""
|
|
100
|
+
type: typing.Literal[HumanPromptModelType.RADIO] = HumanPromptModelType.RADIO
|
|
101
|
+
selected_option: MultipleChoiceOption = Field(description="The selected multiple choice radio response.")
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
class HumanResponseCheckbox(BaseModel):
|
|
105
|
+
"""
|
|
106
|
+
Represents a multiple choice checkbox response to an interaction.
|
|
107
|
+
"""
|
|
108
|
+
type: typing.Literal[HumanPromptModelType.CHECKBOX] = HumanPromptModelType.CHECKBOX
|
|
109
|
+
selected_option: MultipleChoiceOption = Field(description="The selected multiple choice checkbox response.")
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
class HumanResponseDropdown(BaseModel):
|
|
113
|
+
"""
|
|
114
|
+
Represents a multiple choice dropdown response to an interaction.
|
|
115
|
+
"""
|
|
116
|
+
type: typing.Literal[HumanPromptModelType.DROPDOWN] = HumanPromptModelType.DROPDOWN
|
|
117
|
+
selected_option: MultipleChoiceOption = Field(description="The selected multiple choice dropdown response.")
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
HumanResponse = typing.Annotated[HumanResponseText | HumanResponseBinary | HumanResponseNotification
|
|
121
|
+
| HumanResponseRadio | HumanResponseCheckbox
|
|
122
|
+
| HumanResponseDropdown,
|
|
123
|
+
Discriminator("type")]
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
class HumanPromptBase(BaseModel):
|
|
127
|
+
"""
|
|
128
|
+
Base interaction model to derive from
|
|
129
|
+
"""
|
|
130
|
+
text: str = Field(description="Text prompt that will be displayed to the user.")
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
class HumanPromptText(HumanPromptBase):
|
|
134
|
+
"""
|
|
135
|
+
Represents a text interaction.
|
|
136
|
+
"""
|
|
137
|
+
input_type: typing.Literal[HumanPromptModelType.TEXT] = HumanPromptModelType.TEXT
|
|
138
|
+
placeholder: str | None = Field(description="The placeholder for the text.")
|
|
139
|
+
required: bool = Field(default=True, description="Whether the interaction is required.")
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
class HumanPromptNotification(HumanPromptBase):
|
|
143
|
+
"""
|
|
144
|
+
Represents a notification interaction.
|
|
145
|
+
"""
|
|
146
|
+
input_type: typing.Literal[HumanPromptModelType.NOTIFICATION] = HumanPromptModelType.NOTIFICATION
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
class _HumanPromptOAuthConsent(HumanPromptBase):
|
|
150
|
+
"""
|
|
151
|
+
Represents an OAuth consent prompt interaction used to notify the UI to open the authentication page for completing
|
|
152
|
+
the consent flow.
|
|
153
|
+
"""
|
|
154
|
+
input_type: typing.Literal[HumanPromptModelType.OAUTH_CONSENT] = HumanPromptModelType.OAUTH_CONSENT
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
class HumanPromptBinary(HumanPromptBase):
|
|
158
|
+
"""
|
|
159
|
+
Represents a binary interaction.
|
|
160
|
+
"""
|
|
161
|
+
input_type: typing.Literal[HumanPromptModelType.BINARY_CHOICE] = HumanPromptModelType.BINARY_CHOICE
|
|
162
|
+
options: list[BinaryHumanPromptOption] = Field(description="The options for the binary interaction.")
|
|
163
|
+
|
|
164
|
+
# Field validator to make sure len(options) == 2
|
|
165
|
+
@field_validator("options", mode="before")
|
|
166
|
+
@classmethod
|
|
167
|
+
def validate_options(cls, options):
|
|
168
|
+
if len(options) != 2:
|
|
169
|
+
raise ValueError("Binary interactions must have exactly two options.")
|
|
170
|
+
return options
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
class HumanPromptMultipleChoiceBase(HumanPromptBase):
|
|
174
|
+
"""
|
|
175
|
+
Represents a multiple choice interaction.
|
|
176
|
+
"""
|
|
177
|
+
options: list[MultipleChoiceOption] = Field(description="The options for the multiple choice interaction.")
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
class HumanPromptRadio(HumanPromptMultipleChoiceBase):
|
|
181
|
+
"""
|
|
182
|
+
Represents a radio interaction.
|
|
183
|
+
"""
|
|
184
|
+
input_type: typing.Literal[HumanPromptModelType.RADIO] = HumanPromptModelType.RADIO
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
class HumanPromptCheckbox(HumanPromptMultipleChoiceBase):
|
|
188
|
+
"""
|
|
189
|
+
Represents a checkbox interaction.
|
|
190
|
+
"""
|
|
191
|
+
input_type: typing.Literal[HumanPromptModelType.CHECKBOX] = HumanPromptModelType.CHECKBOX
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
class HumanPromptDropdown(HumanPromptMultipleChoiceBase):
|
|
195
|
+
"""
|
|
196
|
+
Represents a dropdown interaction.
|
|
197
|
+
"""
|
|
198
|
+
input_type: typing.Literal[HumanPromptModelType.DROPDOWN] = HumanPromptModelType.DROPDOWN
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
HumanPrompt = typing.Annotated[HumanPromptText | HumanPromptNotification | HumanPromptBinary | HumanPromptRadio
|
|
202
|
+
| HumanPromptCheckbox | HumanPromptDropdown | _HumanPromptOAuthConsent,
|
|
203
|
+
Discriminator("input_type")]
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
class InteractionStatus(str, Enum):
|
|
207
|
+
"""
|
|
208
|
+
Represents the status of an interaction.
|
|
209
|
+
"""
|
|
210
|
+
PENDING = "pending"
|
|
211
|
+
IN_PROGRESS = "in_progress"
|
|
212
|
+
COMPLETED = "completed"
|
|
213
|
+
FAILED = "failed"
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
class InteractionBase(BaseModel):
|
|
217
|
+
"""
|
|
218
|
+
Represents a system-human interaction.
|
|
219
|
+
"""
|
|
220
|
+
id: str = Field(description="The ID of the interaction.")
|
|
221
|
+
type: str = Field(default="system_human_interaction", description="The type of the interaction.")
|
|
222
|
+
thread_id: str | None = Field(description="The thread ID of the interaction.", default=None)
|
|
223
|
+
parent_id: str | None = Field(description="The parent ID of the interaction.", default=None)
|
|
224
|
+
status: InteractionStatus = Field(description="The status of the interaction.", default=InteractionStatus.PENDING)
|
|
225
|
+
timestamp: str = Field(description="The timestamp of the interaction.")
|
|
226
|
+
|
|
227
|
+
@field_validator("timestamp", mode="before")
|
|
228
|
+
@classmethod
|
|
229
|
+
def validate_timestamp(cls, timestamp):
|
|
230
|
+
if not re.match(r"\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z", timestamp):
|
|
231
|
+
raise ValueError("Timestamp must be in the format 2025-01-13T10:00:03Z")
|
|
232
|
+
return timestamp
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
class InteractionPrompt(InteractionBase):
|
|
236
|
+
"""
|
|
237
|
+
Represents a system-human interaction with a prompt.
|
|
238
|
+
"""
|
|
239
|
+
content: HumanPrompt = Field(description="The content of the interaction.")
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
class InteractionResponse(InteractionBase):
|
|
243
|
+
"""
|
|
244
|
+
Represents a system-human interaction with a response.
|
|
245
|
+
"""
|
|
246
|
+
content: HumanResponse = Field(description="The content of the interaction.")
|
|
@@ -0,0 +1,302 @@
|
|
|
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 time
|
|
17
|
+
import typing
|
|
18
|
+
import uuid
|
|
19
|
+
from enum import Enum
|
|
20
|
+
from typing import Literal
|
|
21
|
+
|
|
22
|
+
from pydantic import BaseModel
|
|
23
|
+
from pydantic import ConfigDict
|
|
24
|
+
from pydantic import Field
|
|
25
|
+
from pydantic import model_validator
|
|
26
|
+
|
|
27
|
+
from aiq.builder.framework_enum import LLMFrameworkEnum
|
|
28
|
+
from aiq.data_models.invocation_node import InvocationNode
|
|
29
|
+
from aiq.profiler.callbacks.token_usage_base_model import TokenUsageBaseModel
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class IntermediateStepCategory(str, Enum):
|
|
33
|
+
LLM = "LLM"
|
|
34
|
+
TOOL = "TOOL"
|
|
35
|
+
WORKFLOW = "WORKFLOW"
|
|
36
|
+
TASK = "TASK"
|
|
37
|
+
FUNCTION = "FUNCTION"
|
|
38
|
+
CUSTOM = "CUSTOM"
|
|
39
|
+
SPAN = "SPAN"
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class IntermediateStepType(str, Enum):
|
|
43
|
+
LLM_START = "LLM_START"
|
|
44
|
+
LLM_END = "LLM_END"
|
|
45
|
+
LLM_NEW_TOKEN = "LLM_NEW_TOKEN"
|
|
46
|
+
TOOL_START = "TOOL_START"
|
|
47
|
+
TOOL_END = "TOOL_END"
|
|
48
|
+
WORKFLOW_START = "WORKFLOW_START"
|
|
49
|
+
WORKFLOW_END = "WORKFLOW_END"
|
|
50
|
+
TASK_START = "TASK_START"
|
|
51
|
+
TASK_END = "TASK_END"
|
|
52
|
+
FUNCTION_START = "FUNCTION_START"
|
|
53
|
+
FUNCTION_END = "FUNCTION_END"
|
|
54
|
+
CUSTOM_START = "CUSTOM_START"
|
|
55
|
+
CUSTOM_END = "CUSTOM_END"
|
|
56
|
+
SPAN_START = "SPAN_START"
|
|
57
|
+
SPAN_CHUNK = "SPAN_CHUNK"
|
|
58
|
+
SPAN_END = "SPAN_END"
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class IntermediateStepState(str, Enum):
|
|
62
|
+
START = "START"
|
|
63
|
+
CHUNK = "CHUNK"
|
|
64
|
+
END = "END"
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
class StreamEventData(BaseModel):
|
|
68
|
+
"""
|
|
69
|
+
AIQStreamEventData is a data model that represents the data field in an streaming event.
|
|
70
|
+
"""
|
|
71
|
+
|
|
72
|
+
# Allow extra fields in the model_config to support derived models
|
|
73
|
+
model_config = ConfigDict(extra="allow")
|
|
74
|
+
|
|
75
|
+
input: typing.Any | None = None
|
|
76
|
+
output: typing.Any | None = None
|
|
77
|
+
chunk: typing.Any | None = None
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
class UsageInfo(BaseModel):
|
|
81
|
+
token_usage: TokenUsageBaseModel = TokenUsageBaseModel()
|
|
82
|
+
num_llm_calls: int = 0
|
|
83
|
+
seconds_between_calls: int = 0
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
class ToolParameters(BaseModel):
|
|
87
|
+
properties: dict[str, typing.Any] = Field(..., description="The properties of the function parameters.")
|
|
88
|
+
required: list[str] = Field(default_factory=list, description="The required properties of the function parameters.")
|
|
89
|
+
type_: Literal["object"] = Field(default="object", description="The type of the function parameters.", alias="type")
|
|
90
|
+
additionalProperties: bool = Field(default=False,
|
|
91
|
+
description="Enable function parameters allow additional properties.")
|
|
92
|
+
strict: bool = Field(default=True, description="Ensure function calls reliably adhere to the function schema.")
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
class ToolDetails(BaseModel):
|
|
96
|
+
name: str = Field(..., description="The name of the function.")
|
|
97
|
+
description: str = Field(..., description="The description of the function.")
|
|
98
|
+
parameters: ToolParameters = Field(..., description="The parameters of the function.")
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
class ToolSchema(BaseModel):
|
|
102
|
+
type: Literal["function"] = Field(..., description="The type of the tool.")
|
|
103
|
+
function: ToolDetails = Field(..., description="The function details.")
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
class TraceMetadata(BaseModel):
|
|
107
|
+
chat_responses: typing.Any | None = None
|
|
108
|
+
chat_inputs: typing.Any | None = None
|
|
109
|
+
tool_inputs: typing.Any | None = None
|
|
110
|
+
tool_outputs: typing.Any | None = None
|
|
111
|
+
tool_info: typing.Any | None = None
|
|
112
|
+
span_inputs: typing.Any | None = None
|
|
113
|
+
span_outputs: typing.Any | None = None
|
|
114
|
+
provided_metadata: typing.Any | None = None
|
|
115
|
+
tools_schema: list[ToolSchema] = Field(default_factory=list,
|
|
116
|
+
description="The schema of tools used in a tool calling request.")
|
|
117
|
+
|
|
118
|
+
# Allow extra fields in the model_config to support derived models
|
|
119
|
+
model_config = ConfigDict(extra="allow")
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
class IntermediateStepPayload(BaseModel):
|
|
123
|
+
"""
|
|
124
|
+
AIQIntermediateStep is a data model that represents an intermediate step in the AIQ Toolkit. Intermediate steps are
|
|
125
|
+
captured while a request is running and can be used to show progress or to evaluate the path a workflow took to get
|
|
126
|
+
a response.
|
|
127
|
+
"""
|
|
128
|
+
|
|
129
|
+
# Allow extra fields in the model_config to support derived models
|
|
130
|
+
model_config = ConfigDict(extra="allow")
|
|
131
|
+
|
|
132
|
+
event_type: IntermediateStepType
|
|
133
|
+
# Create an event timestamp field with the default being a lambda that returns the current time
|
|
134
|
+
event_timestamp: float = Field(default_factory=lambda: time.time())
|
|
135
|
+
span_event_timestamp: float | None = None # Used for tracking the start time of a task if this is end
|
|
136
|
+
framework: LLMFrameworkEnum | None = None
|
|
137
|
+
name: str | None = None
|
|
138
|
+
tags: list[str] | None = None
|
|
139
|
+
metadata: dict[str, typing.Any] | TraceMetadata | None = None
|
|
140
|
+
data: StreamEventData | None = None
|
|
141
|
+
usage_info: UsageInfo | None = None
|
|
142
|
+
UUID: str = Field(default_factory=lambda: str(uuid.uuid4()))
|
|
143
|
+
|
|
144
|
+
@property
|
|
145
|
+
def event_category(self) -> IntermediateStepCategory: # pylint: disable=too-many-return-statements
|
|
146
|
+
match self.event_type:
|
|
147
|
+
case IntermediateStepType.LLM_START:
|
|
148
|
+
return IntermediateStepCategory.LLM
|
|
149
|
+
case IntermediateStepType.LLM_END:
|
|
150
|
+
return IntermediateStepCategory.LLM
|
|
151
|
+
case IntermediateStepType.LLM_NEW_TOKEN:
|
|
152
|
+
return IntermediateStepCategory.LLM
|
|
153
|
+
case IntermediateStepType.TOOL_START:
|
|
154
|
+
return IntermediateStepCategory.TOOL
|
|
155
|
+
case IntermediateStepType.TOOL_END:
|
|
156
|
+
return IntermediateStepCategory.TOOL
|
|
157
|
+
case IntermediateStepType.WORKFLOW_START:
|
|
158
|
+
return IntermediateStepCategory.WORKFLOW
|
|
159
|
+
case IntermediateStepType.WORKFLOW_END:
|
|
160
|
+
return IntermediateStepCategory.WORKFLOW
|
|
161
|
+
case IntermediateStepType.TASK_START:
|
|
162
|
+
return IntermediateStepCategory.TASK
|
|
163
|
+
case IntermediateStepType.TASK_END:
|
|
164
|
+
return IntermediateStepCategory.TASK
|
|
165
|
+
case IntermediateStepType.FUNCTION_START:
|
|
166
|
+
return IntermediateStepCategory.FUNCTION
|
|
167
|
+
case IntermediateStepType.FUNCTION_END:
|
|
168
|
+
return IntermediateStepCategory.FUNCTION
|
|
169
|
+
case IntermediateStepType.CUSTOM_START:
|
|
170
|
+
return IntermediateStepCategory.CUSTOM
|
|
171
|
+
case IntermediateStepType.CUSTOM_END:
|
|
172
|
+
return IntermediateStepCategory.CUSTOM
|
|
173
|
+
case IntermediateStepType.SPAN_START:
|
|
174
|
+
return IntermediateStepCategory.SPAN
|
|
175
|
+
case IntermediateStepType.SPAN_CHUNK:
|
|
176
|
+
return IntermediateStepCategory.SPAN
|
|
177
|
+
case IntermediateStepType.SPAN_END:
|
|
178
|
+
return IntermediateStepCategory.SPAN
|
|
179
|
+
case _:
|
|
180
|
+
raise ValueError(f"Unknown event type: {self.event_type}")
|
|
181
|
+
|
|
182
|
+
@property
|
|
183
|
+
def event_state(self) -> IntermediateStepState: # pylint: disable=too-many-return-statements
|
|
184
|
+
match self.event_type:
|
|
185
|
+
case IntermediateStepType.LLM_START:
|
|
186
|
+
return IntermediateStepState.START
|
|
187
|
+
case IntermediateStepType.LLM_END:
|
|
188
|
+
return IntermediateStepState.END
|
|
189
|
+
case IntermediateStepType.LLM_NEW_TOKEN:
|
|
190
|
+
return IntermediateStepState.CHUNK
|
|
191
|
+
case IntermediateStepType.TOOL_START:
|
|
192
|
+
return IntermediateStepState.START
|
|
193
|
+
case IntermediateStepType.TOOL_END:
|
|
194
|
+
return IntermediateStepState.END
|
|
195
|
+
case IntermediateStepType.WORKFLOW_START:
|
|
196
|
+
return IntermediateStepState.START
|
|
197
|
+
case IntermediateStepType.WORKFLOW_END:
|
|
198
|
+
return IntermediateStepState.END
|
|
199
|
+
case IntermediateStepType.TASK_START:
|
|
200
|
+
return IntermediateStepState.START
|
|
201
|
+
case IntermediateStepType.TASK_END:
|
|
202
|
+
return IntermediateStepState.END
|
|
203
|
+
case IntermediateStepType.FUNCTION_START:
|
|
204
|
+
return IntermediateStepState.START
|
|
205
|
+
case IntermediateStepType.FUNCTION_END:
|
|
206
|
+
return IntermediateStepState.END
|
|
207
|
+
case IntermediateStepType.CUSTOM_START:
|
|
208
|
+
return IntermediateStepState.START
|
|
209
|
+
case IntermediateStepType.CUSTOM_END:
|
|
210
|
+
return IntermediateStepState.END
|
|
211
|
+
case IntermediateStepType.SPAN_START:
|
|
212
|
+
return IntermediateStepState.START
|
|
213
|
+
case IntermediateStepType.SPAN_CHUNK:
|
|
214
|
+
return IntermediateStepState.CHUNK
|
|
215
|
+
case IntermediateStepType.SPAN_END:
|
|
216
|
+
return IntermediateStepState.END
|
|
217
|
+
case _:
|
|
218
|
+
raise ValueError(f"Unknown event type: {self.event_type}")
|
|
219
|
+
|
|
220
|
+
@model_validator(mode="after")
|
|
221
|
+
def check_span_event_timestamp(self) -> "IntermediateStepPayload":
|
|
222
|
+
if self.event_state != IntermediateStepState.END and self.span_event_timestamp is not None:
|
|
223
|
+
raise ValueError("span_event_timestamp can only be provided for events with an END state")
|
|
224
|
+
return self
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
class IntermediateStep(BaseModel):
|
|
228
|
+
"""
|
|
229
|
+
AIQIntermediateStep is a data model that represents an intermediate step in the AIQ Toolkit. Intermediate steps are
|
|
230
|
+
captured while a request is running and can be used to show progress or to evaluate the path a workflow took to get
|
|
231
|
+
a response.
|
|
232
|
+
"""
|
|
233
|
+
|
|
234
|
+
# Allow extra fields in the model_config to support derived models
|
|
235
|
+
model_config = ConfigDict(extra="forbid")
|
|
236
|
+
|
|
237
|
+
parent_id: str
|
|
238
|
+
"""
|
|
239
|
+
The parent step ID for the current step. The parent ID is the ID of the last START step which has a different UUID
|
|
240
|
+
than the current step. This value is different from the function_ancestry.parent_id value which tracks the last
|
|
241
|
+
parent FUNCTION step. For the first START step, the parent_id is 'root'.
|
|
242
|
+
"""
|
|
243
|
+
|
|
244
|
+
function_ancestry: InvocationNode
|
|
245
|
+
"""
|
|
246
|
+
The function ancestry for the current step showing the current AIQ function that was being executed when the step
|
|
247
|
+
was created.
|
|
248
|
+
"""
|
|
249
|
+
|
|
250
|
+
payload: IntermediateStepPayload
|
|
251
|
+
"""
|
|
252
|
+
The payload for the current step.
|
|
253
|
+
"""
|
|
254
|
+
|
|
255
|
+
# ===== Payload Properties =====
|
|
256
|
+
@property
|
|
257
|
+
def event_type(self) -> IntermediateStepType:
|
|
258
|
+
return self.payload.event_type
|
|
259
|
+
|
|
260
|
+
@property
|
|
261
|
+
def event_timestamp(self) -> float:
|
|
262
|
+
return self.payload.event_timestamp
|
|
263
|
+
|
|
264
|
+
@property
|
|
265
|
+
def span_event_timestamp(self) -> float | None:
|
|
266
|
+
return self.payload.span_event_timestamp
|
|
267
|
+
|
|
268
|
+
@property
|
|
269
|
+
def framework(self) -> LLMFrameworkEnum | None:
|
|
270
|
+
return self.payload.framework
|
|
271
|
+
|
|
272
|
+
@property
|
|
273
|
+
def name(self) -> str | None:
|
|
274
|
+
return self.payload.name
|
|
275
|
+
|
|
276
|
+
@property
|
|
277
|
+
def tags(self) -> list[str] | None:
|
|
278
|
+
return self.payload.tags
|
|
279
|
+
|
|
280
|
+
@property
|
|
281
|
+
def metadata(self) -> dict[str, typing.Any] | TraceMetadata | None:
|
|
282
|
+
return self.payload.metadata
|
|
283
|
+
|
|
284
|
+
@property
|
|
285
|
+
def data(self) -> StreamEventData | None:
|
|
286
|
+
return self.payload.data
|
|
287
|
+
|
|
288
|
+
@property
|
|
289
|
+
def usage_info(self) -> UsageInfo | None:
|
|
290
|
+
return self.payload.usage_info
|
|
291
|
+
|
|
292
|
+
@property
|
|
293
|
+
def UUID(self) -> str: # pylint: disable=invalid-name
|
|
294
|
+
return self.payload.UUID
|
|
295
|
+
|
|
296
|
+
@property
|
|
297
|
+
def event_category(self) -> IntermediateStepCategory:
|
|
298
|
+
return self.payload.event_category
|
|
299
|
+
|
|
300
|
+
@property
|
|
301
|
+
def event_state(self) -> IntermediateStepState:
|
|
302
|
+
return self.payload.event_state
|
|
@@ -0,0 +1,38 @@
|
|
|
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 pydantic import BaseModel
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class InvocationNode(BaseModel):
|
|
20
|
+
"""
|
|
21
|
+
Represents a node in an invocation call graph.
|
|
22
|
+
|
|
23
|
+
The InvocationNode class encapsulates the details of a specific function
|
|
24
|
+
invocation within a call graph. It stores the unique identifier of the
|
|
25
|
+
invocation, the function name, and optional details about the parent
|
|
26
|
+
node (if any). This class is useful for tracing the execution flow
|
|
27
|
+
in a system or application.
|
|
28
|
+
|
|
29
|
+
Attributes:
|
|
30
|
+
function_id (str): Unique identifier for the function invocation.
|
|
31
|
+
function_name (str): Name of the function invoked.
|
|
32
|
+
parent_id (str | None): Unique identifier of the parent invocation, if applicable. Defaults to None.
|
|
33
|
+
parent_name (str | None): Name of the parent function invoked, if applicable. Defaults to None.
|
|
34
|
+
"""
|
|
35
|
+
function_id: str
|
|
36
|
+
function_name: str
|
|
37
|
+
parent_id: str | None = None
|
|
38
|
+
parent_name: str | None = None
|
aiq/data_models/llm.py
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
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
|
+
import typing
|
|
17
|
+
|
|
18
|
+
from .common import BaseModelRegistryTag
|
|
19
|
+
from .common import TypedBaseModel
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class LLMBaseConfig(TypedBaseModel, BaseModelRegistryTag):
|
|
23
|
+
"""Base configuration for LLM providers."""
|
|
24
|
+
pass
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
LLMBaseConfigT = typing.TypeVar("LLMBaseConfigT", bound=LLMBaseConfig)
|
|
@@ -0,0 +1,26 @@
|
|
|
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
|
+
import typing
|
|
17
|
+
|
|
18
|
+
from .common import BaseModelRegistryTag
|
|
19
|
+
from .common import TypedBaseModel
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class LoggingBaseConfig(TypedBaseModel, BaseModelRegistryTag):
|
|
23
|
+
pass
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
LoggingMethodConfigT = typing.TypeVar("LoggingMethodConfigT", bound=LoggingBaseConfig)
|
|
@@ -0,0 +1,27 @@
|
|
|
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
|
+
import typing
|
|
17
|
+
|
|
18
|
+
from .common import BaseModelRegistryTag
|
|
19
|
+
from .common import TypedBaseModel
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class MemoryBaseConfig(TypedBaseModel, BaseModelRegistryTag):
|
|
23
|
+
""" The base level config object for a memory object. Memories provide an interface for storing and retrieving. """
|
|
24
|
+
pass
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
MemoryBaseConfigT = typing.TypeVar("MemoryBaseConfigT", bound=MemoryBaseConfig)
|