aiqtoolkit 1.2.0.dev0__py3-none-any.whl → 1.2.0rc2__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.
Potentially problematic release.
This version of aiqtoolkit might be problematic. Click here for more details.
- aiq/agent/base.py +170 -8
- aiq/agent/dual_node.py +1 -1
- aiq/agent/react_agent/agent.py +146 -112
- aiq/agent/react_agent/prompt.py +1 -6
- aiq/agent/react_agent/register.py +36 -35
- aiq/agent/rewoo_agent/agent.py +36 -35
- aiq/agent/rewoo_agent/register.py +2 -2
- aiq/agent/tool_calling_agent/agent.py +3 -7
- aiq/agent/tool_calling_agent/register.py +1 -1
- aiq/authentication/__init__.py +14 -0
- aiq/authentication/api_key/__init__.py +14 -0
- aiq/authentication/api_key/api_key_auth_provider.py +92 -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/exceptions/auth_code_grant_exceptions.py +86 -0
- aiq/authentication/exceptions/call_back_exceptions.py +38 -0
- aiq/authentication/exceptions/request_exceptions.py +54 -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/builder.py +64 -2
- aiq/builder/component_utils.py +16 -3
- aiq/builder/context.py +37 -0
- aiq/builder/eval_builder.py +43 -2
- aiq/builder/function.py +44 -12
- aiq/builder/function_base.py +1 -1
- aiq/builder/intermediate_step_manager.py +6 -8
- aiq/builder/user_interaction_manager.py +3 -0
- aiq/builder/workflow.py +23 -18
- aiq/builder/workflow_builder.py +421 -61
- aiq/cli/commands/info/list_mcp.py +103 -16
- aiq/cli/commands/sizing/__init__.py +14 -0
- aiq/cli/commands/sizing/calc.py +294 -0
- aiq/cli/commands/sizing/sizing.py +27 -0
- aiq/cli/commands/start.py +2 -1
- aiq/cli/entrypoint.py +2 -0
- aiq/cli/register_workflow.py +80 -0
- aiq/cli/type_registry.py +151 -30
- aiq/data_models/api_server.py +124 -12
- aiq/data_models/authentication.py +231 -0
- aiq/data_models/common.py +35 -7
- aiq/data_models/component.py +17 -9
- aiq/data_models/component_ref.py +33 -0
- aiq/data_models/config.py +60 -3
- aiq/data_models/dataset_handler.py +2 -1
- aiq/data_models/embedder.py +1 -0
- aiq/data_models/evaluate.py +23 -0
- aiq/data_models/function_dependencies.py +8 -0
- aiq/data_models/interactive.py +10 -1
- aiq/data_models/intermediate_step.py +38 -5
- aiq/data_models/its_strategy.py +30 -0
- aiq/data_models/llm.py +1 -0
- aiq/data_models/memory.py +1 -0
- aiq/data_models/object_store.py +44 -0
- aiq/data_models/profiler.py +1 -0
- aiq/data_models/retry_mixin.py +35 -0
- aiq/data_models/span.py +187 -0
- aiq/data_models/telemetry_exporter.py +2 -2
- aiq/embedder/nim_embedder.py +2 -1
- aiq/embedder/openai_embedder.py +2 -1
- aiq/eval/config.py +19 -1
- aiq/eval/dataset_handler/dataset_handler.py +87 -2
- aiq/eval/evaluate.py +208 -27
- aiq/eval/evaluator/base_evaluator.py +73 -0
- aiq/eval/evaluator/evaluator_model.py +1 -0
- aiq/eval/intermediate_step_adapter.py +11 -5
- aiq/eval/rag_evaluator/evaluate.py +55 -15
- aiq/eval/rag_evaluator/register.py +6 -1
- aiq/eval/remote_workflow.py +7 -2
- 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/trajectory_evaluator/evaluate.py +22 -65
- aiq/eval/tunable_rag_evaluator/evaluate.py +150 -168
- aiq/eval/tunable_rag_evaluator/register.py +2 -0
- aiq/eval/usage_stats.py +41 -0
- aiq/eval/utils/output_uploader.py +10 -1
- 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/inference_time_scaling/__init__.py +0 -0
- aiq/experimental/inference_time_scaling/editing/__init__.py +0 -0
- aiq/experimental/inference_time_scaling/editing/iterative_plan_refinement_editor.py +147 -0
- aiq/experimental/inference_time_scaling/editing/llm_as_a_judge_editor.py +204 -0
- aiq/experimental/inference_time_scaling/editing/motivation_aware_summarization.py +107 -0
- aiq/experimental/inference_time_scaling/functions/__init__.py +0 -0
- aiq/experimental/inference_time_scaling/functions/execute_score_select_function.py +105 -0
- aiq/experimental/inference_time_scaling/functions/its_tool_orchestration_function.py +205 -0
- aiq/experimental/inference_time_scaling/functions/its_tool_wrapper_function.py +146 -0
- aiq/experimental/inference_time_scaling/functions/plan_select_execute_function.py +224 -0
- aiq/experimental/inference_time_scaling/models/__init__.py +0 -0
- aiq/experimental/inference_time_scaling/models/editor_config.py +132 -0
- aiq/experimental/inference_time_scaling/models/its_item.py +48 -0
- aiq/experimental/inference_time_scaling/models/scoring_config.py +112 -0
- aiq/experimental/inference_time_scaling/models/search_config.py +120 -0
- aiq/experimental/inference_time_scaling/models/selection_config.py +154 -0
- aiq/experimental/inference_time_scaling/models/stage_enums.py +43 -0
- aiq/experimental/inference_time_scaling/models/strategy_base.py +66 -0
- aiq/experimental/inference_time_scaling/models/tool_use_config.py +41 -0
- aiq/experimental/inference_time_scaling/register.py +36 -0
- aiq/experimental/inference_time_scaling/scoring/__init__.py +0 -0
- aiq/experimental/inference_time_scaling/scoring/llm_based_agent_scorer.py +168 -0
- aiq/experimental/inference_time_scaling/scoring/llm_based_plan_scorer.py +168 -0
- aiq/experimental/inference_time_scaling/scoring/motivation_aware_scorer.py +111 -0
- aiq/experimental/inference_time_scaling/search/__init__.py +0 -0
- aiq/experimental/inference_time_scaling/search/multi_llm_planner.py +128 -0
- aiq/experimental/inference_time_scaling/search/multi_query_retrieval_search.py +122 -0
- aiq/experimental/inference_time_scaling/search/single_shot_multi_plan_planner.py +128 -0
- aiq/experimental/inference_time_scaling/selection/__init__.py +0 -0
- aiq/experimental/inference_time_scaling/selection/best_of_n_selector.py +63 -0
- aiq/experimental/inference_time_scaling/selection/llm_based_agent_output_selector.py +131 -0
- aiq/experimental/inference_time_scaling/selection/llm_based_output_merging_selector.py +159 -0
- aiq/experimental/inference_time_scaling/selection/llm_based_plan_selector.py +128 -0
- aiq/experimental/inference_time_scaling/selection/threshold_selector.py +58 -0
- aiq/front_ends/console/authentication_flow_handler.py +233 -0
- aiq/front_ends/console/console_front_end_plugin.py +11 -2
- 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 +93 -9
- aiq/front_ends/fastapi/fastapi_front_end_controller.py +68 -0
- aiq/front_ends/fastapi/fastapi_front_end_plugin.py +14 -1
- aiq/front_ends/fastapi/fastapi_front_end_plugin_worker.py +537 -52
- 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/job_store.py +47 -25
- aiq/front_ends/fastapi/main.py +2 -0
- aiq/front_ends/fastapi/message_handler.py +108 -89
- aiq/front_ends/fastapi/step_adaptor.py +2 -1
- aiq/llm/aws_bedrock_llm.py +57 -0
- aiq/llm/nim_llm.py +2 -1
- aiq/llm/openai_llm.py +3 -2
- aiq/llm/register.py +1 -0
- aiq/meta/pypi.md +12 -12
- aiq/object_store/__init__.py +20 -0
- aiq/object_store/in_memory_object_store.py +74 -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 +269 -0
- aiq/observability/exporter/raw_exporter.py +52 -0
- aiq/observability/exporter/span_exporter.py +264 -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 +316 -0
- aiq/observability/processor/intermediate_step_serializer.py +28 -0
- aiq/observability/processor/processor.py +68 -0
- aiq/observability/register.py +36 -39
- aiq/observability/utils/__init__.py +14 -0
- aiq/observability/utils/dict_utils.py +236 -0
- aiq/observability/utils/time_utils.py +31 -0
- aiq/profiler/calc/__init__.py +14 -0
- aiq/profiler/calc/calc_runner.py +623 -0
- aiq/profiler/calc/calculations.py +288 -0
- aiq/profiler/calc/data_models.py +176 -0
- aiq/profiler/calc/plot.py +345 -0
- aiq/profiler/callbacks/langchain_callback_handler.py +22 -10
- aiq/profiler/data_models.py +24 -0
- aiq/profiler/inference_metrics_model.py +3 -0
- aiq/profiler/inference_optimization/bottleneck_analysis/nested_stack_analysis.py +8 -0
- aiq/profiler/inference_optimization/data_models.py +2 -2
- aiq/profiler/inference_optimization/llm_metrics.py +2 -2
- aiq/profiler/profile_runner.py +61 -21
- aiq/runtime/loader.py +9 -3
- aiq/runtime/runner.py +23 -9
- aiq/runtime/session.py +25 -7
- aiq/runtime/user_metadata.py +2 -3
- aiq/tool/chat_completion.py +74 -0
- aiq/tool/code_execution/README.md +152 -0
- aiq/tool/code_execution/code_sandbox.py +151 -72
- aiq/tool/code_execution/local_sandbox/.gitignore +1 -0
- aiq/tool/code_execution/local_sandbox/local_sandbox_server.py +139 -24
- aiq/tool/code_execution/local_sandbox/sandbox.requirements.txt +3 -1
- aiq/tool/code_execution/local_sandbox/start_local_sandbox.sh +27 -2
- aiq/tool/code_execution/register.py +7 -3
- aiq/tool/code_execution/test_code_execution_sandbox.py +414 -0
- aiq/tool/mcp/exceptions.py +142 -0
- aiq/tool/mcp/mcp_client.py +41 -6
- aiq/tool/mcp/mcp_tool.py +3 -2
- aiq/tool/register.py +1 -0
- aiq/tool/server_tools.py +6 -3
- aiq/utils/exception_handlers/automatic_retries.py +289 -0
- aiq/utils/exception_handlers/mcp.py +211 -0
- aiq/utils/io/model_processing.py +28 -0
- aiq/utils/log_utils.py +37 -0
- aiq/utils/string_utils.py +38 -0
- aiq/utils/type_converter.py +18 -2
- aiq/utils/type_utils.py +87 -0
- {aiqtoolkit-1.2.0.dev0.dist-info → aiqtoolkit-1.2.0rc2.dist-info}/METADATA +53 -21
- aiqtoolkit-1.2.0rc2.dist-info/RECORD +436 -0
- {aiqtoolkit-1.2.0.dev0.dist-info → aiqtoolkit-1.2.0rc2.dist-info}/WHEEL +1 -1
- {aiqtoolkit-1.2.0.dev0.dist-info → aiqtoolkit-1.2.0rc2.dist-info}/entry_points.txt +3 -0
- aiq/front_ends/fastapi/websocket.py +0 -148
- aiq/observability/async_otel_listener.py +0 -429
- aiqtoolkit-1.2.0.dev0.dist-info/RECORD +0 -316
- {aiqtoolkit-1.2.0.dev0.dist-info → aiqtoolkit-1.2.0rc2.dist-info}/licenses/LICENSE-3rd-party.txt +0 -0
- {aiqtoolkit-1.2.0.dev0.dist-info → aiqtoolkit-1.2.0rc2.dist-info}/licenses/LICENSE.md +0 -0
- {aiqtoolkit-1.2.0.dev0.dist-info → aiqtoolkit-1.2.0rc2.dist-info}/top_level.txt +0 -0
aiq/utils/type_converter.py
CHANGED
|
@@ -70,7 +70,7 @@ class TypeConverter:
|
|
|
70
70
|
self._converters.setdefault(to_type, OrderedDict())[from_type] = converter
|
|
71
71
|
# to do(MDD): If needed, sort by specificity here.
|
|
72
72
|
|
|
73
|
-
def
|
|
73
|
+
def _convert(self, data, to_type: type[_T]) -> _T | None:
|
|
74
74
|
"""
|
|
75
75
|
Attempts to convert `data` into `to_type`. Returns None if no path is found.
|
|
76
76
|
"""
|
|
@@ -100,7 +100,7 @@ class TypeConverter:
|
|
|
100
100
|
Converts or raises ValueError if no path is found.
|
|
101
101
|
We also give the parent a chance if self fails.
|
|
102
102
|
"""
|
|
103
|
-
result = self.
|
|
103
|
+
result = self._convert(data, to_type)
|
|
104
104
|
if result is None and self._parent:
|
|
105
105
|
# fallback on parent entirely
|
|
106
106
|
return self._parent.convert(data, to_type)
|
|
@@ -109,6 +109,18 @@ class TypeConverter:
|
|
|
109
109
|
return result
|
|
110
110
|
raise ValueError(f"Cannot convert type {type(data)} to {to_type}. No match found.")
|
|
111
111
|
|
|
112
|
+
def try_convert(self, data, to_type: type[_T]) -> _T:
|
|
113
|
+
"""
|
|
114
|
+
Converts with graceful error handling. If conversion fails, returns the original data
|
|
115
|
+
and continues processing.
|
|
116
|
+
"""
|
|
117
|
+
try:
|
|
118
|
+
return self.convert(data, to_type)
|
|
119
|
+
except ValueError:
|
|
120
|
+
logger.warning("Type conversion failed, using original value. From %s to %s", type(data), to_type)
|
|
121
|
+
# Return original data, let downstream code handle it
|
|
122
|
+
return data
|
|
123
|
+
|
|
112
124
|
# -------------------------------------------------
|
|
113
125
|
# INTERNAL DIRECT CONVERSION (with parent fallback)
|
|
114
126
|
# -------------------------------------------------
|
|
@@ -221,6 +233,10 @@ class GlobalTypeConverter:
|
|
|
221
233
|
def convert(data, to_type: type[_T]) -> _T:
|
|
222
234
|
return GlobalTypeConverter._global_converter.convert(data, to_type)
|
|
223
235
|
|
|
236
|
+
@staticmethod
|
|
237
|
+
def try_convert(data, to_type: type[_T]) -> _T:
|
|
238
|
+
return GlobalTypeConverter._global_converter.try_convert(data, to_type)
|
|
239
|
+
|
|
224
240
|
|
|
225
241
|
TypeConverter._global_initialized = True
|
|
226
242
|
|
aiq/utils/type_utils.py
CHANGED
|
@@ -395,3 +395,90 @@ class DecomposedType:
|
|
|
395
395
|
converters.append(_convert_to_schema)
|
|
396
396
|
|
|
397
397
|
return schema
|
|
398
|
+
|
|
399
|
+
@staticmethod
|
|
400
|
+
def extract_generic_parameters_from_class(target_class: type,
|
|
401
|
+
expected_param_count: int | None = None) -> tuple[type, ...]:
|
|
402
|
+
"""
|
|
403
|
+
Extract generic type parameters from a class's inheritance chain.
|
|
404
|
+
|
|
405
|
+
This method searches through __orig_bases__ to find generic parameters,
|
|
406
|
+
which is useful for classes that inherit from generic base classes.
|
|
407
|
+
|
|
408
|
+
Parameters
|
|
409
|
+
----------
|
|
410
|
+
target_class : type
|
|
411
|
+
The class to extract parameters from
|
|
412
|
+
expected_param_count : int | None, optional
|
|
413
|
+
Expected number of parameters. If specified, only matches with this count are considered.
|
|
414
|
+
|
|
415
|
+
Returns
|
|
416
|
+
-------
|
|
417
|
+
tuple[type, ...]
|
|
418
|
+
Tuple of generic type parameters found
|
|
419
|
+
|
|
420
|
+
Raises
|
|
421
|
+
------
|
|
422
|
+
ValueError
|
|
423
|
+
If no generic parameters matching the expected count are found
|
|
424
|
+
|
|
425
|
+
Examples
|
|
426
|
+
--------
|
|
427
|
+
>>> class MyClass(SomeGeneric[int, str, bool]):
|
|
428
|
+
... pass
|
|
429
|
+
>>> DecomposedType.extract_generic_parameters_from_class(MyClass, 3)
|
|
430
|
+
(int, str, bool)
|
|
431
|
+
"""
|
|
432
|
+
for base_cls in getattr(target_class, '__orig_bases__', []):
|
|
433
|
+
base_cls_args = typing.get_args(base_cls)
|
|
434
|
+
|
|
435
|
+
if expected_param_count is None or len(base_cls_args) == expected_param_count:
|
|
436
|
+
if base_cls_args: # Only return if we actually found parameters
|
|
437
|
+
return base_cls_args
|
|
438
|
+
|
|
439
|
+
if expected_param_count is not None:
|
|
440
|
+
raise ValueError(
|
|
441
|
+
f"Could not find generic parameters with count {expected_param_count} for class {target_class}")
|
|
442
|
+
raise ValueError(f"Could not find any generic parameters for class {target_class}")
|
|
443
|
+
|
|
444
|
+
@staticmethod
|
|
445
|
+
def is_type_compatible(source_type: type, target_type: type) -> bool:
|
|
446
|
+
"""
|
|
447
|
+
Check if a source type is compatible with a target type.
|
|
448
|
+
|
|
449
|
+
This handles direct compatibility and special cases like batch compatibility
|
|
450
|
+
where list[T] can be compatible with targets that expect T.
|
|
451
|
+
|
|
452
|
+
Parameters
|
|
453
|
+
----------
|
|
454
|
+
source_type : type
|
|
455
|
+
The source type to check
|
|
456
|
+
target_type : type
|
|
457
|
+
The target type to check compatibility with
|
|
458
|
+
|
|
459
|
+
Returns
|
|
460
|
+
-------
|
|
461
|
+
bool
|
|
462
|
+
True if types are compatible, False otherwise
|
|
463
|
+
"""
|
|
464
|
+
# Direct compatibility check
|
|
465
|
+
try:
|
|
466
|
+
if issubclass(source_type, target_type):
|
|
467
|
+
return True
|
|
468
|
+
except TypeError:
|
|
469
|
+
# Handle generic types that can't use issubclass
|
|
470
|
+
pass
|
|
471
|
+
|
|
472
|
+
# Check if source outputs list[T] and target expects T
|
|
473
|
+
source_decomposed = DecomposedType(source_type)
|
|
474
|
+
if source_decomposed.origin is list and source_decomposed.args:
|
|
475
|
+
inner_type = source_decomposed.args[0]
|
|
476
|
+
try:
|
|
477
|
+
if issubclass(inner_type, target_type):
|
|
478
|
+
return True
|
|
479
|
+
except TypeError:
|
|
480
|
+
# If we can't use issubclass, check type equality
|
|
481
|
+
if inner_type == target_type:
|
|
482
|
+
return True
|
|
483
|
+
|
|
484
|
+
return False
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: aiqtoolkit
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.0rc2
|
|
4
4
|
Summary: NVIDIA Agent Intelligence toolkit
|
|
5
5
|
Author: NVIDIA Corporation
|
|
6
6
|
Maintainer: NVIDIA Corporation
|
|
@@ -212,18 +212,21 @@ Description-Content-Type: text/markdown
|
|
|
212
212
|
License-File: LICENSE-3rd-party.txt
|
|
213
213
|
License-File: LICENSE.md
|
|
214
214
|
Requires-Dist: aioboto3>=11.0.0
|
|
215
|
+
Requires-Dist: authlib~=1.3.1
|
|
215
216
|
Requires-Dist: click~=8.1
|
|
216
217
|
Requires-Dist: colorama~=0.4.6
|
|
218
|
+
Requires-Dist: datasets~=4.0
|
|
217
219
|
Requires-Dist: expandvars~=1.0
|
|
218
220
|
Requires-Dist: fastapi~=0.115.5
|
|
219
221
|
Requires-Dist: httpx~=0.27
|
|
220
222
|
Requires-Dist: jinja2~=3.1
|
|
221
223
|
Requires-Dist: jsonpath-ng~=1.7
|
|
222
|
-
Requires-Dist: mcp
|
|
224
|
+
Requires-Dist: mcp~=1.10
|
|
223
225
|
Requires-Dist: networkx~=3.4
|
|
224
226
|
Requires-Dist: numpy~=1.26
|
|
225
227
|
Requires-Dist: openinference-semantic-conventions~=0.1.14
|
|
226
228
|
Requires-Dist: openpyxl~=3.1
|
|
229
|
+
Requires-Dist: pkce==1.0.3
|
|
227
230
|
Requires-Dist: pkginfo~=1.12
|
|
228
231
|
Requires-Dist: platformdirs~=4.3
|
|
229
232
|
Requires-Dist: pydantic==2.10.*
|
|
@@ -231,44 +234,73 @@ Requires-Dist: pymilvus~=2.4
|
|
|
231
234
|
Requires-Dist: PyYAML~=6.0
|
|
232
235
|
Requires-Dist: ragas~=0.2.14
|
|
233
236
|
Requires-Dist: rich~=13.9
|
|
237
|
+
Requires-Dist: tabulate~=0.9
|
|
234
238
|
Requires-Dist: uvicorn[standard]~=0.32.0
|
|
235
239
|
Requires-Dist: wikipedia~=1.4
|
|
236
240
|
Provides-Extra: agno
|
|
237
241
|
Requires-Dist: aiqtoolkit-agno; extra == "agno"
|
|
238
242
|
Provides-Extra: crewai
|
|
239
243
|
Requires-Dist: aiqtoolkit-crewai; extra == "crewai"
|
|
244
|
+
Provides-Extra: ingestion
|
|
245
|
+
Requires-Dist: lxml~=5.4; extra == "ingestion"
|
|
240
246
|
Provides-Extra: langchain
|
|
241
247
|
Requires-Dist: aiqtoolkit-langchain; extra == "langchain"
|
|
242
248
|
Provides-Extra: llama-index
|
|
243
249
|
Requires-Dist: aiqtoolkit-llama-index; extra == "llama-index"
|
|
244
250
|
Provides-Extra: mem0ai
|
|
245
251
|
Requires-Dist: aiqtoolkit-mem0ai; extra == "mem0ai"
|
|
252
|
+
Provides-Extra: opentelemetry
|
|
253
|
+
Requires-Dist: aiqtoolkit-opentelemetry; extra == "opentelemetry"
|
|
254
|
+
Provides-Extra: phoenix
|
|
255
|
+
Requires-Dist: aiqtoolkit-phoenix; extra == "phoenix"
|
|
256
|
+
Provides-Extra: ragaai
|
|
257
|
+
Requires-Dist: aiqtoolkit-ragaai; extra == "ragaai"
|
|
258
|
+
Provides-Extra: mysql
|
|
259
|
+
Requires-Dist: aiqtoolkit-mysql; extra == "mysql"
|
|
260
|
+
Provides-Extra: redis
|
|
261
|
+
Requires-Dist: aiqtoolkit-redis; extra == "redis"
|
|
262
|
+
Provides-Extra: s3
|
|
263
|
+
Requires-Dist: aiqtoolkit-s3; extra == "s3"
|
|
246
264
|
Provides-Extra: semantic-kernel
|
|
247
265
|
Requires-Dist: aiqtoolkit-semantic-kernel; extra == "semantic-kernel"
|
|
248
266
|
Provides-Extra: telemetry
|
|
249
|
-
Requires-Dist:
|
|
250
|
-
Requires-Dist:
|
|
251
|
-
Requires-Dist:
|
|
267
|
+
Requires-Dist: aiqtoolkit-opentelemetry; extra == "telemetry"
|
|
268
|
+
Requires-Dist: aiqtoolkit-phoenix; extra == "telemetry"
|
|
269
|
+
Requires-Dist: aiqtoolkit-weave; extra == "telemetry"
|
|
270
|
+
Requires-Dist: aiqtoolkit-ragaai; extra == "telemetry"
|
|
252
271
|
Provides-Extra: weave
|
|
253
272
|
Requires-Dist: aiqtoolkit-weave; extra == "weave"
|
|
254
273
|
Provides-Extra: zep-cloud
|
|
255
274
|
Requires-Dist: aiqtoolkit-zep-cloud; extra == "zep-cloud"
|
|
256
275
|
Provides-Extra: examples
|
|
276
|
+
Requires-Dist: aiq_agno_personal_finance; extra == "examples"
|
|
257
277
|
Requires-Dist: aiq_alert_triage_agent; extra == "examples"
|
|
278
|
+
Requires-Dist: aiq_automated_description_generation; extra == "examples"
|
|
258
279
|
Requires-Dist: aiq_email_phishing_analyzer; extra == "examples"
|
|
259
280
|
Requires-Dist: aiq_multi_frameworks; extra == "examples"
|
|
260
281
|
Requires-Dist: aiq_plot_charts; extra == "examples"
|
|
282
|
+
Requires-Dist: aiq_por_to_jiratickets; extra == "examples"
|
|
283
|
+
Requires-Dist: aiq_profiler_agent; extra == "examples"
|
|
284
|
+
Requires-Dist: aiq_redact_pii; extra == "examples"
|
|
261
285
|
Requires-Dist: aiq_semantic_kernel_demo; extra == "examples"
|
|
286
|
+
Requires-Dist: aiq_simple_auth; extra == "examples"
|
|
287
|
+
Requires-Dist: aiq_simple_web_query; extra == "examples"
|
|
288
|
+
Requires-Dist: aiq_simple_web_query_eval; extra == "examples"
|
|
262
289
|
Requires-Dist: aiq_simple_calculator; extra == "examples"
|
|
263
|
-
Requires-Dist:
|
|
290
|
+
Requires-Dist: aiq_simple_calculator_custom_routes; extra == "examples"
|
|
291
|
+
Requires-Dist: aiq_simple_calculator_eval; extra == "examples"
|
|
292
|
+
Requires-Dist: aiq_simple_calculator_mcp; extra == "examples"
|
|
293
|
+
Requires-Dist: aiq_simple_calculator_observability; extra == "examples"
|
|
294
|
+
Requires-Dist: aiq_simple_calculator_hitl; extra == "examples"
|
|
295
|
+
Requires-Dist: aiq_simple_rag; extra == "examples"
|
|
264
296
|
Requires-Dist: aiq_swe_bench; extra == "examples"
|
|
265
|
-
Requires-Dist:
|
|
266
|
-
Requires-Dist: aiq_agno_personal_finance; extra == "examples"
|
|
267
|
-
Requires-Dist: aiq_profiler_agent; extra == "examples"
|
|
297
|
+
Requires-Dist: aiq_user_report; extra == "examples"
|
|
268
298
|
Provides-Extra: profiling
|
|
269
299
|
Requires-Dist: matplotlib~=3.9; extra == "profiling"
|
|
270
300
|
Requires-Dist: prefixspan~=0.5.2; extra == "profiling"
|
|
271
301
|
Requires-Dist: scikit-learn~=1.6; extra == "profiling"
|
|
302
|
+
Provides-Extra: gunicorn
|
|
303
|
+
Requires-Dist: gunicorn~=23.0; extra == "gunicorn"
|
|
272
304
|
Dynamic: license-file
|
|
273
305
|
|
|
274
306
|
<!--
|
|
@@ -288,7 +320,7 @@ See the License for the specific language governing permissions and
|
|
|
288
320
|
limitations under the License.
|
|
289
321
|
-->
|
|
290
322
|
|
|
291
|
-

|
|
292
324
|
|
|
293
325
|
# NVIDIA Agent Intelligence Toolkit
|
|
294
326
|
|
|
@@ -296,26 +328,26 @@ AIQ toolkit is a flexible library designed to seamlessly integrate your enterpri
|
|
|
296
328
|
|
|
297
329
|
## Key Features
|
|
298
330
|
|
|
299
|
-
- [**Framework Agnostic:**](https://docs.nvidia.com/aiqtoolkit/
|
|
300
|
-
- [**Reusability:**](https://docs.nvidia.com/aiqtoolkit/
|
|
301
|
-
- [**Rapid Development:**](https://docs.nvidia.com/aiqtoolkit/
|
|
302
|
-
- [**Profiling:**](https://docs.nvidia.com/aiqtoolkit/
|
|
303
|
-
- [**Observability:**](https://docs.nvidia.com/aiqtoolkit/
|
|
304
|
-
- [**Evaluation System:**](https://docs.nvidia.com/aiqtoolkit/
|
|
305
|
-
- [**User Interface:**](https://docs.nvidia.com/aiqtoolkit/
|
|
306
|
-
- [**MCP Compatibility**](https://docs.nvidia.com/aiqtoolkit/
|
|
331
|
+
- [**Framework Agnostic:**](https://docs.nvidia.com/aiqtoolkit/1.2.0/extend/plugins.html) Works with any agentic framework, so you can use your current technology stack without replatforming.
|
|
332
|
+
- [**Reusability:**](https://docs.nvidia.com/aiqtoolkit/1.2.0/extend/sharing-components.html) Every agent, tool, or workflow can be combined and repurposed, allowing developers to leverage existing work in new scenarios.
|
|
333
|
+
- [**Rapid Development:**](https://docs.nvidia.com/aiqtoolkit/1.2.0/tutorials/index.html) Start with a pre-built agent, tool, or workflow, and customize it to your needs.
|
|
334
|
+
- [**Profiling:**](https://docs.nvidia.com/aiqtoolkit/1.2.0/workflows/profiler.html) Profile entire workflows down to the tool and agent level, track input/output tokens and timings, and identify bottlenecks.
|
|
335
|
+
- [**Observability:**](https://docs.nvidia.com/aiqtoolkit/1.2.0/workflows/observe/observe-workflow-with-phoenix.html) Monitor and debug your workflows with any OpenTelemetry-compatible observability tool, with examples using [Phoenix](https://docs.nvidia.com/aiqtoolkit/1.2.0/workflows/observe/observe-workflow-with-phoenix.html) and [W&B Weave](https://docs.nvidia.com/aiqtoolkit/1.2.0/workflows/observe/observe-workflow-with-weave.html).
|
|
336
|
+
- [**Evaluation System:**](https://docs.nvidia.com/aiqtoolkit/1.2.0/workflows/evaluate.html) Validate and maintain accuracy of agentic workflows with built-in evaluation tools.
|
|
337
|
+
- [**User Interface:**](https://docs.nvidia.com/aiqtoolkit/1.2.0/quick-start/launching-ui.html) Use the AIQ toolkit UI chat interface to interact with your agents, visualize output, and debug workflows.
|
|
338
|
+
- [**MCP Compatibility**](https://docs.nvidia.com/aiqtoolkit/1.2.0/workflows/mcp/mcp-client.html) Compatible with Model Context Protocol (MCP), allowing tools served by MCP Servers to be used as AIQ toolkit functions.
|
|
307
339
|
|
|
308
340
|
With AIQ toolkit, you can move quickly, experiment freely, and ensure reliability across all your agent-driven projects.
|
|
309
341
|
|
|
310
342
|
## Links
|
|
311
|
-
* [Documentation](https://docs.nvidia.com/aiqtoolkit/
|
|
343
|
+
* [Documentation](https://docs.nvidia.com/aiqtoolkit/1.2.0/index.html): Explore the full documentation for AIQ toolkit.
|
|
312
344
|
|
|
313
345
|
## First time user?
|
|
314
|
-
If this is your first time using AIQ toolkit, it is recommended to install the latest version from the [source repository](https://github.com/NVIDIA/
|
|
346
|
+
If this is your first time using AIQ toolkit, it is recommended to install the latest version from the [source repository](https://github.com/NVIDIA/NeMo-Agent-Toolkit?tab=readme-ov-file#quick-start) on GitHub. This package is intended for users who are familiar with AIQ toolkit applications and need to add AIQ toolkit as a dependency to their project.
|
|
315
347
|
|
|
316
348
|
## Feedback
|
|
317
349
|
|
|
318
|
-
We would love to hear from you! Please file an issue on [GitHub](https://github.com/NVIDIA/
|
|
350
|
+
We would love to hear from you! Please file an issue on [GitHub](https://github.com/NVIDIA/NeMo-Agent-Toolkit/issues) if you have any feedback or feature requests.
|
|
319
351
|
|
|
320
352
|
## Acknowledgements
|
|
321
353
|
|