aip-agents-binary 0.5.25b8__py3-none-any.whl → 0.6.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.
- aip_agents/__init__.pyi +19 -0
- aip_agents/a2a/__init__.pyi +3 -0
- aip_agents/a2a/server/__init__.pyi +4 -0
- aip_agents/a2a/server/base_executor.pyi +73 -0
- aip_agents/a2a/server/google_adk_executor.pyi +51 -0
- aip_agents/a2a/server/langflow_executor.pyi +43 -0
- aip_agents/a2a/server/langgraph_executor.pyi +47 -0
- aip_agents/a2a/types.pyi +132 -0
- aip_agents/agent/__init__.pyi +9 -0
- aip_agents/agent/base_agent.pyi +221 -0
- aip_agents/agent/base_langgraph_agent.py +137 -68
- aip_agents/agent/base_langgraph_agent.pyi +233 -0
- aip_agents/agent/google_adk_agent.pyi +141 -0
- aip_agents/agent/google_adk_constants.pyi +3 -0
- aip_agents/agent/hitl/__init__.pyi +6 -0
- aip_agents/agent/hitl/config.pyi +15 -0
- aip_agents/agent/hitl/langgraph_hitl_mixin.pyi +42 -0
- aip_agents/agent/hitl/manager.pyi +200 -0
- aip_agents/agent/hitl/models.pyi +3 -0
- aip_agents/agent/hitl/prompt/__init__.pyi +4 -0
- aip_agents/agent/hitl/prompt/base.pyi +24 -0
- aip_agents/agent/hitl/prompt/deferred.pyi +30 -0
- aip_agents/agent/hitl/registry.pyi +101 -0
- aip_agents/agent/interface.pyi +81 -0
- aip_agents/agent/interfaces.pyi +44 -0
- aip_agents/agent/langflow_agent.pyi +133 -0
- aip_agents/agent/langgraph_memory_enhancer_agent.pyi +49 -0
- aip_agents/agent/langgraph_react_agent.py +58 -14
- aip_agents/agent/langgraph_react_agent.pyi +131 -0
- aip_agents/agent/system_instruction_context.pyi +13 -0
- aip_agents/clients/__init__.pyi +4 -0
- aip_agents/clients/langflow/__init__.pyi +4 -0
- aip_agents/clients/langflow/client.pyi +140 -0
- aip_agents/clients/langflow/types.pyi +7 -0
- aip_agents/constants.pyi +7 -0
- aip_agents/examples/__init__.pyi +0 -0
- aip_agents/examples/compare_streaming_client.py +2 -2
- aip_agents/examples/compare_streaming_client.pyi +48 -0
- aip_agents/examples/compare_streaming_server.py +1 -1
- aip_agents/examples/compare_streaming_server.pyi +18 -0
- aip_agents/examples/demo_memory_recall.pyi +58 -0
- aip_agents/examples/hello_world_a2a_google_adk_client.pyi +9 -0
- aip_agents/examples/hello_world_a2a_google_adk_client_agent.pyi +9 -0
- aip_agents/examples/hello_world_a2a_google_adk_client_streaming.pyi +9 -0
- aip_agents/examples/hello_world_a2a_google_adk_server.pyi +15 -0
- aip_agents/examples/hello_world_a2a_langchain_client.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langchain_client_agent.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langchain_client_lm_invoker.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langchain_client_streaming.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langchain_reference_client_streaming.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langchain_reference_server.pyi +15 -0
- aip_agents/examples/hello_world_a2a_langchain_server.pyi +15 -0
- aip_agents/examples/hello_world_a2a_langchain_server_lm_invoker.pyi +15 -0
- aip_agents/examples/hello_world_a2a_langflow_client.pyi +9 -0
- aip_agents/examples/hello_world_a2a_langflow_server.pyi +14 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_client.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_client_streaming.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langgraph_artifact_server.pyi +16 -0
- aip_agents/examples/hello_world_a2a_langgraph_client.pyi +9 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_agent.pyi +9 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_agent_lm_invoker.pyi +2 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_streaming.pyi +9 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_streaming_lm_invoker.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langgraph_client_streaming_tool_streaming.pyi +5 -0
- aip_agents/examples/hello_world_a2a_langgraph_server.pyi +14 -0
- aip_agents/examples/hello_world_a2a_langgraph_server_lm_invoker.pyi +15 -0
- aip_agents/examples/hello_world_a2a_langgraph_server_tool_streaming.pyi +15 -0
- aip_agents/examples/hello_world_a2a_mcp_langgraph.pyi +48 -0
- aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_client.pyi +48 -0
- aip_agents/examples/hello_world_a2a_three_level_agent_hierarchy_server.pyi +45 -0
- aip_agents/examples/hello_world_a2a_with_metadata_langchain_client.pyi +5 -0
- aip_agents/examples/hello_world_a2a_with_metadata_langchain_server_lm_invoker.pyi +15 -0
- aip_agents/examples/hello_world_google_adk.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_http.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_http_stream.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_sse.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_sse_stream.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_stdio.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_mcp_stdio_stream.pyi +5 -0
- aip_agents/examples/hello_world_google_adk_stream.pyi +5 -0
- aip_agents/examples/hello_world_langchain.pyi +5 -0
- aip_agents/examples/hello_world_langchain_lm_invoker.pyi +2 -0
- aip_agents/examples/hello_world_langchain_mcp_http.pyi +5 -0
- aip_agents/examples/hello_world_langchain_mcp_http_interactive.pyi +16 -0
- aip_agents/examples/hello_world_langchain_mcp_http_stream.pyi +5 -0
- aip_agents/examples/hello_world_langchain_mcp_multi_server.pyi +18 -0
- aip_agents/examples/hello_world_langchain_mcp_sse.pyi +5 -0
- aip_agents/examples/hello_world_langchain_mcp_sse_stream.pyi +5 -0
- aip_agents/examples/hello_world_langchain_mcp_stdio.pyi +5 -0
- aip_agents/examples/hello_world_langchain_mcp_stdio_stream.pyi +5 -0
- aip_agents/examples/hello_world_langchain_stream.pyi +5 -0
- aip_agents/examples/hello_world_langchain_stream_lm_invoker.pyi +5 -0
- aip_agents/examples/hello_world_langflow_agent.pyi +35 -0
- aip_agents/examples/hello_world_langgraph.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_gl_connector_twitter.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_http.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_http_stream.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_sse.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_sse_stream.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_stdio.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_mcp_stdio_stream.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_stream.pyi +5 -0
- aip_agents/examples/hello_world_langgraph_stream_lm_invoker.pyi +5 -0
- aip_agents/examples/hello_world_model_switch_cli.pyi +30 -0
- aip_agents/examples/hello_world_multi_agent_adk.pyi +6 -0
- aip_agents/examples/hello_world_multi_agent_langchain.pyi +5 -0
- aip_agents/examples/hello_world_multi_agent_langgraph.pyi +5 -0
- aip_agents/examples/hello_world_multi_agent_langgraph_lm_invoker.pyi +5 -0
- aip_agents/examples/hello_world_pii_logger.pyi +5 -0
- aip_agents/examples/hello_world_sentry.pyi +21 -0
- aip_agents/examples/hello_world_step_limits.pyi +17 -0
- aip_agents/examples/hello_world_stock_a2a_server.pyi +17 -0
- aip_agents/examples/hello_world_tool_output_client.py +9 -0
- aip_agents/examples/hello_world_tool_output_client.pyi +5 -0
- aip_agents/examples/hello_world_tool_output_server.pyi +19 -0
- aip_agents/examples/hitl_demo.pyi +67 -0
- aip_agents/examples/pii_demo_langgraph_client.pyi +5 -0
- aip_agents/examples/pii_demo_langgraph_server.pyi +20 -0
- aip_agents/examples/pii_demo_multi_agent_client.pyi +5 -0
- aip_agents/examples/pii_demo_multi_agent_server.pyi +40 -0
- aip_agents/examples/todolist_planning_a2a_langchain_client.py +2 -2
- aip_agents/examples/todolist_planning_a2a_langchain_client.pyi +5 -0
- aip_agents/examples/todolist_planning_a2a_langgraph_server.py +1 -1
- aip_agents/examples/todolist_planning_a2a_langgraph_server.pyi +19 -0
- aip_agents/examples/tools/__init__.pyi +9 -0
- aip_agents/examples/tools/adk_arithmetic_tools.pyi +24 -0
- aip_agents/examples/tools/adk_weather_tool.pyi +18 -0
- aip_agents/examples/tools/data_generator_tool.pyi +15 -0
- aip_agents/examples/tools/data_visualization_tool.pyi +19 -0
- aip_agents/examples/tools/image_artifact_tool.pyi +26 -0
- aip_agents/examples/tools/langchain_arithmetic_tools.pyi +17 -0
- aip_agents/examples/tools/langchain_currency_exchange_tool.pyi +20 -0
- aip_agents/examples/tools/langchain_graph_artifact_tool.pyi +25 -0
- aip_agents/examples/tools/langchain_weather_tool.pyi +19 -0
- aip_agents/examples/tools/langgraph_streaming_tool.pyi +43 -0
- aip_agents/examples/tools/mock_retrieval_tool.pyi +13 -0
- aip_agents/examples/tools/pii_demo_tools.pyi +54 -0
- aip_agents/examples/tools/random_chart_tool.pyi +20 -0
- aip_agents/examples/tools/serper_tool.pyi +16 -0
- aip_agents/examples/tools/stock_tools.pyi +36 -0
- aip_agents/examples/tools/table_generator_tool.pyi +22 -0
- aip_agents/examples/tools/time_tool.pyi +15 -0
- aip_agents/examples/tools/weather_forecast_tool.pyi +14 -0
- aip_agents/guardrails/__init__.pyi +6 -0
- aip_agents/guardrails/engines/__init__.pyi +4 -0
- aip_agents/guardrails/engines/base.py +6 -6
- aip_agents/guardrails/engines/base.pyi +61 -0
- aip_agents/guardrails/engines/nemo.pyi +46 -0
- aip_agents/guardrails/engines/phrase_matcher.pyi +48 -0
- aip_agents/guardrails/exceptions.pyi +23 -0
- aip_agents/guardrails/manager.pyi +42 -0
- aip_agents/guardrails/middleware.pyi +87 -0
- aip_agents/guardrails/schemas.pyi +43 -0
- aip_agents/guardrails/utils.pyi +19 -0
- aip_agents/mcp/__init__.pyi +0 -0
- aip_agents/mcp/client/__init__.pyi +5 -0
- aip_agents/mcp/client/base_mcp_client.pyi +148 -0
- aip_agents/mcp/client/connection_manager.py +36 -1
- aip_agents/mcp/client/connection_manager.pyi +51 -0
- aip_agents/mcp/client/google_adk/__init__.pyi +3 -0
- aip_agents/mcp/client/google_adk/client.pyi +75 -0
- aip_agents/mcp/client/langchain/__init__.pyi +3 -0
- aip_agents/mcp/client/langchain/client.pyi +48 -0
- aip_agents/mcp/client/persistent_session.py +318 -68
- aip_agents/mcp/client/persistent_session.pyi +122 -0
- aip_agents/mcp/client/session_pool.pyi +101 -0
- aip_agents/mcp/client/transports.py +33 -2
- aip_agents/mcp/client/transports.pyi +132 -0
- aip_agents/mcp/utils/__init__.pyi +0 -0
- aip_agents/mcp/utils/config_validator.pyi +82 -0
- aip_agents/memory/__init__.pyi +5 -0
- aip_agents/memory/adapters/__init__.pyi +4 -0
- aip_agents/memory/adapters/base_adapter.pyi +150 -0
- aip_agents/memory/adapters/mem0.pyi +22 -0
- aip_agents/memory/base.pyi +60 -0
- aip_agents/memory/constants.pyi +25 -0
- aip_agents/memory/factory.pyi +24 -0
- aip_agents/memory/guidance.pyi +3 -0
- aip_agents/memory/simple_memory.pyi +23 -0
- aip_agents/middleware/__init__.pyi +5 -0
- aip_agents/middleware/base.pyi +75 -0
- aip_agents/middleware/manager.pyi +84 -0
- aip_agents/middleware/todolist.pyi +125 -0
- aip_agents/schema/__init__.pyi +9 -0
- aip_agents/schema/a2a.pyi +40 -0
- aip_agents/schema/agent.pyi +65 -0
- aip_agents/schema/hitl.pyi +89 -0
- aip_agents/schema/langgraph.pyi +28 -0
- aip_agents/schema/model_id.pyi +54 -0
- aip_agents/schema/step_limit.pyi +63 -0
- aip_agents/schema/storage.pyi +21 -0
- aip_agents/sentry/__init__.pyi +3 -0
- aip_agents/sentry/sentry.pyi +48 -0
- aip_agents/storage/__init__.pyi +8 -0
- aip_agents/storage/base.pyi +58 -0
- aip_agents/storage/clients/__init__.pyi +3 -0
- aip_agents/storage/clients/minio_client.pyi +137 -0
- aip_agents/storage/config.pyi +29 -0
- aip_agents/storage/providers/__init__.pyi +5 -0
- aip_agents/storage/providers/base.pyi +88 -0
- aip_agents/storage/providers/memory.pyi +79 -0
- aip_agents/storage/providers/object_storage.pyi +98 -0
- aip_agents/tools/__init__.pyi +9 -0
- aip_agents/tools/browser_use/__init__.pyi +14 -0
- aip_agents/tools/browser_use/action_parser.pyi +18 -0
- aip_agents/tools/browser_use/browser_use_tool.py +8 -0
- aip_agents/tools/browser_use/browser_use_tool.pyi +50 -0
- aip_agents/tools/browser_use/llm_config.pyi +52 -0
- aip_agents/tools/browser_use/minio_storage.pyi +109 -0
- aip_agents/tools/browser_use/schemas.pyi +32 -0
- aip_agents/tools/browser_use/session.pyi +4 -0
- aip_agents/tools/browser_use/session_errors.pyi +53 -0
- aip_agents/tools/browser_use/steel_session_recording.pyi +63 -0
- aip_agents/tools/browser_use/streaming.py +2 -0
- aip_agents/tools/browser_use/streaming.pyi +81 -0
- aip_agents/tools/browser_use/structured_data_parser.pyi +86 -0
- aip_agents/tools/browser_use/structured_data_recovery.pyi +43 -0
- aip_agents/tools/browser_use/types.pyi +45 -0
- aip_agents/tools/code_sandbox/__init__.pyi +3 -0
- aip_agents/tools/code_sandbox/constant.pyi +4 -0
- aip_agents/tools/code_sandbox/e2b_cloud_sandbox_extended.pyi +102 -0
- aip_agents/tools/code_sandbox/e2b_sandbox_tool.pyi +29 -0
- aip_agents/tools/constants.pyi +138 -0
- aip_agents/tools/document_loader/__init__.pyi +7 -0
- aip_agents/tools/document_loader/base_reader.pyi +75 -0
- aip_agents/tools/document_loader/docx_reader_tool.pyi +10 -0
- aip_agents/tools/document_loader/excel_reader_tool.pyi +26 -0
- aip_agents/tools/document_loader/pdf_reader_tool.pyi +11 -0
- aip_agents/tools/document_loader/pdf_splitter.pyi +18 -0
- aip_agents/tools/gl_connector/__init__.pyi +3 -0
- aip_agents/tools/gl_connector/tool.pyi +74 -0
- aip_agents/tools/gl_connector_tools.pyi +39 -0
- aip_agents/tools/memory_search/__init__.pyi +5 -0
- aip_agents/tools/memory_search/base.pyi +69 -0
- aip_agents/tools/memory_search/mem0.pyi +19 -0
- aip_agents/tools/memory_search/schema.pyi +15 -0
- aip_agents/tools/memory_search_tool.pyi +3 -0
- aip_agents/tools/time_tool.pyi +16 -0
- aip_agents/tools/tool_config_injector.pyi +26 -0
- aip_agents/tools/web_search/__init__.pyi +3 -0
- aip_agents/tools/web_search/serper_tool.pyi +19 -0
- aip_agents/types/__init__.pyi +36 -0
- aip_agents/types/a2a_events.pyi +3 -0
- aip_agents/utils/__init__.pyi +11 -0
- aip_agents/utils/a2a_connector.pyi +146 -0
- aip_agents/utils/artifact_helpers.pyi +203 -0
- aip_agents/utils/constants.pyi +10 -0
- aip_agents/utils/datetime/__init__.pyi +4 -0
- aip_agents/utils/datetime/normalization.pyi +95 -0
- aip_agents/utils/datetime/timezone.pyi +48 -0
- aip_agents/utils/env_loader.pyi +10 -0
- aip_agents/utils/event_handler_registry.pyi +23 -0
- aip_agents/utils/file_prompt_utils.pyi +21 -0
- aip_agents/utils/final_response_builder.pyi +34 -0
- aip_agents/utils/formatter_llm_client.pyi +71 -0
- aip_agents/utils/langgraph/__init__.pyi +3 -0
- aip_agents/utils/langgraph/converter.pyi +49 -0
- aip_agents/utils/langgraph/tool_managers/__init__.pyi +5 -0
- aip_agents/utils/langgraph/tool_managers/a2a_tool_manager.pyi +35 -0
- aip_agents/utils/langgraph/tool_managers/base_tool_manager.pyi +48 -0
- aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.py +26 -1
- aip_agents/utils/langgraph/tool_managers/delegation_tool_manager.pyi +56 -0
- aip_agents/utils/langgraph/tool_output_management.py +80 -0
- aip_agents/utils/langgraph/tool_output_management.pyi +329 -0
- aip_agents/utils/logger.pyi +60 -0
- aip_agents/utils/metadata/__init__.pyi +5 -0
- aip_agents/utils/metadata/activity_metadata_helper.pyi +25 -0
- aip_agents/utils/metadata/activity_narrative/__init__.pyi +7 -0
- aip_agents/utils/metadata/activity_narrative/builder.pyi +35 -0
- aip_agents/utils/metadata/activity_narrative/constants.pyi +10 -0
- aip_agents/utils/metadata/activity_narrative/context.pyi +32 -0
- aip_agents/utils/metadata/activity_narrative/formatters.pyi +48 -0
- aip_agents/utils/metadata/activity_narrative/utils.pyi +12 -0
- aip_agents/utils/metadata/schemas/__init__.pyi +4 -0
- aip_agents/utils/metadata/schemas/activity_schema.pyi +18 -0
- aip_agents/utils/metadata/schemas/thinking_schema.pyi +20 -0
- aip_agents/utils/metadata/thinking_metadata_helper.pyi +4 -0
- aip_agents/utils/metadata_helper.pyi +117 -0
- aip_agents/utils/name_preprocessor/__init__.pyi +6 -0
- aip_agents/utils/name_preprocessor/base_name_preprocessor.pyi +52 -0
- aip_agents/utils/name_preprocessor/google_name_preprocessor.pyi +38 -0
- aip_agents/utils/name_preprocessor/name_preprocessor.pyi +41 -0
- aip_agents/utils/name_preprocessor/openai_name_preprocessor.pyi +34 -0
- aip_agents/utils/pii/__init__.pyi +5 -0
- aip_agents/utils/pii/pii_handler.pyi +96 -0
- aip_agents/utils/pii/pii_helper.pyi +78 -0
- aip_agents/utils/pii/uuid_deanonymizer_mapping.pyi +73 -0
- aip_agents/utils/reference_helper.pyi +81 -0
- aip_agents/utils/sse_chunk_transformer.pyi +166 -0
- aip_agents/utils/step_limit_manager.pyi +112 -0
- aip_agents/utils/token_usage_helper.pyi +60 -0
- {aip_agents_binary-0.5.25b8.dist-info → aip_agents_binary-0.6.0.dist-info}/METADATA +51 -48
- aip_agents_binary-0.6.0.dist-info/RECORD +566 -0
- aip_agents_binary-0.5.25b8.dist-info/RECORD +0 -290
- {aip_agents_binary-0.5.25b8.dist-info → aip_agents_binary-0.6.0.dist-info}/WHEEL +0 -0
- {aip_agents_binary-0.5.25b8.dist-info → aip_agents_binary-0.6.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from aip_agents.utils.logger import get_logger as get_logger
|
|
3
|
+
from pydantic import BaseModel
|
|
4
|
+
from typing import Any
|
|
5
|
+
|
|
6
|
+
logger: Incomplete
|
|
7
|
+
|
|
8
|
+
class StockPriceInput(BaseModel):
|
|
9
|
+
"""Input for the stock price tool."""
|
|
10
|
+
symbol: str
|
|
11
|
+
|
|
12
|
+
def get_stock_price(symbol: str) -> dict[str, Any]:
|
|
13
|
+
"""Get current stock price and performance data for a given symbol.
|
|
14
|
+
|
|
15
|
+
Args:
|
|
16
|
+
symbol (str): The stock symbol (e.g., AAPL, MSFT) to get the price for.
|
|
17
|
+
|
|
18
|
+
Returns:
|
|
19
|
+
dict[str, Any]: Dictionary containing stock price and performance data.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
class StockNewsInput(BaseModel):
|
|
23
|
+
"""Input for the stock news tool."""
|
|
24
|
+
symbol: str
|
|
25
|
+
days: int
|
|
26
|
+
|
|
27
|
+
def get_stock_news(symbol: str, days: int = 7) -> dict[str, Any]:
|
|
28
|
+
"""Get recent news for a stock for a specified number of days.
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
symbol (str): The stock symbol (e.g., AAPL, MSFT) to get news for.
|
|
32
|
+
days (int, optional): Number of days of news to retrieve. Defaults to 7.
|
|
33
|
+
|
|
34
|
+
Returns:
|
|
35
|
+
dict[str, Any]: Dictionary containing stock news data.
|
|
36
|
+
"""
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
from aip_agents.a2a.types import MimeType as MimeType
|
|
2
|
+
from aip_agents.utils.artifact_helpers import create_artifact_response as create_artifact_response
|
|
3
|
+
from langchain_core.tools import BaseTool
|
|
4
|
+
from pydantic import BaseModel
|
|
5
|
+
|
|
6
|
+
class TableGeneratorInput(BaseModel):
|
|
7
|
+
"""Input schema for table generator tool."""
|
|
8
|
+
rows: int
|
|
9
|
+
columns: list[str]
|
|
10
|
+
table_name: str
|
|
11
|
+
|
|
12
|
+
class TableGeneratorTool(BaseTool):
|
|
13
|
+
"""Tool that generates sample data tables with artifact support.
|
|
14
|
+
|
|
15
|
+
This tool demonstrates the standardized artifact format by:
|
|
16
|
+
1. Generating sample data
|
|
17
|
+
2. Creating a markdown table for the agent's context
|
|
18
|
+
3. Creating a CSV file artifact for the user
|
|
19
|
+
"""
|
|
20
|
+
name: str
|
|
21
|
+
description: str
|
|
22
|
+
args_schema: type[BaseModel]
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from langchain_core.tools import BaseTool
|
|
2
|
+
from pydantic import BaseModel
|
|
3
|
+
|
|
4
|
+
FORMAT_STRING: str
|
|
5
|
+
|
|
6
|
+
class TimeToolInput(BaseModel):
|
|
7
|
+
"""Input schema for the TimeTool."""
|
|
8
|
+
datetime_format: str
|
|
9
|
+
|
|
10
|
+
class TimeTool(BaseTool):
|
|
11
|
+
"""Tool to get the current time."""
|
|
12
|
+
name: str
|
|
13
|
+
description: str
|
|
14
|
+
save_output_history: bool
|
|
15
|
+
args_schema: type[BaseModel]
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
|
|
3
|
+
DAILY_WEATHER: Incomplete
|
|
4
|
+
DayOfWeek: Incomplete
|
|
5
|
+
|
|
6
|
+
def get_weather_forecast(day: DayOfWeek) -> str:
|
|
7
|
+
"""Get the weather forecast for a specific day of the week.
|
|
8
|
+
|
|
9
|
+
Args:
|
|
10
|
+
day: The day of the week (monday, tuesday, wednesday, etc.)
|
|
11
|
+
|
|
12
|
+
Returns:
|
|
13
|
+
str: A weather forecast message including conditions and temperature.
|
|
14
|
+
"""
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
from aip_agents.guardrails.exceptions import GuardrailViolationError as GuardrailViolationError
|
|
2
|
+
from aip_agents.guardrails.manager import GuardrailManager as GuardrailManager
|
|
3
|
+
from aip_agents.guardrails.middleware import GuardrailMiddleware as GuardrailMiddleware
|
|
4
|
+
from aip_agents.guardrails.schemas import BaseGuardrailEngineConfig as BaseGuardrailEngineConfig, GuardrailInput as GuardrailInput, GuardrailMode as GuardrailMode, GuardrailResult as GuardrailResult
|
|
5
|
+
|
|
6
|
+
__all__ = ['GuardrailViolationError', 'GuardrailManager', 'GuardrailMiddleware', 'BaseGuardrailEngineConfig', 'GuardrailMode', 'GuardrailInput', 'GuardrailResult']
|
|
@@ -39,7 +39,7 @@ class GuardrailEngine(Protocol):
|
|
|
39
39
|
Returns:
|
|
40
40
|
GuardrailResult indicating if content is safe
|
|
41
41
|
"""
|
|
42
|
-
...
|
|
42
|
+
... # pragma: no cover
|
|
43
43
|
|
|
44
44
|
@abstractmethod
|
|
45
45
|
async def check_output(self, content: str) -> GuardrailResult:
|
|
@@ -51,12 +51,12 @@ class GuardrailEngine(Protocol):
|
|
|
51
51
|
Returns:
|
|
52
52
|
GuardrailResult indicating if content is safe
|
|
53
53
|
"""
|
|
54
|
-
...
|
|
54
|
+
... # pragma: no cover
|
|
55
55
|
|
|
56
56
|
@abstractmethod
|
|
57
57
|
def model_dump(self) -> dict:
|
|
58
58
|
"""Serialize engine configuration into a JSON-compatible dictionary."""
|
|
59
|
-
...
|
|
59
|
+
... # pragma: no cover
|
|
60
60
|
|
|
61
61
|
|
|
62
62
|
class BaseGuardrailEngine(ABC):
|
|
@@ -77,14 +77,14 @@ class BaseGuardrailEngine(ABC):
|
|
|
77
77
|
@abstractmethod
|
|
78
78
|
async def check_input(self, content: str) -> GuardrailResult:
|
|
79
79
|
"""Check user input content for safety violations."""
|
|
80
|
-
...
|
|
80
|
+
... # pragma: no cover
|
|
81
81
|
|
|
82
82
|
@abstractmethod
|
|
83
83
|
async def check_output(self, content: str) -> GuardrailResult:
|
|
84
84
|
"""Check AI output content for safety violations."""
|
|
85
|
-
...
|
|
85
|
+
... # pragma: no cover
|
|
86
86
|
|
|
87
87
|
@abstractmethod
|
|
88
88
|
def model_dump(self) -> dict:
|
|
89
89
|
"""Serialize engine configuration into a JSON-compatible dictionary."""
|
|
90
|
-
...
|
|
90
|
+
... # pragma: no cover
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from abc import ABC, abstractmethod
|
|
3
|
+
from aip_agents.guardrails.schemas import BaseGuardrailEngineConfig as BaseGuardrailEngineConfig, GuardrailResult as GuardrailResult
|
|
4
|
+
from typing import Protocol
|
|
5
|
+
|
|
6
|
+
class GuardrailEngine(Protocol):
|
|
7
|
+
"""Protocol defining the interface for guardrail engines.
|
|
8
|
+
|
|
9
|
+
All guardrail engines must implement this protocol to be compatible
|
|
10
|
+
with GuardrailManager. Engines check content for safety violations.
|
|
11
|
+
|
|
12
|
+
Attributes:
|
|
13
|
+
config: Configuration for this engine's behavior
|
|
14
|
+
"""
|
|
15
|
+
config: BaseGuardrailEngineConfig
|
|
16
|
+
@abstractmethod
|
|
17
|
+
async def check_input(self, content: str) -> GuardrailResult:
|
|
18
|
+
"""Check user input content for safety violations.
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
content: The user input content to check
|
|
22
|
+
|
|
23
|
+
Returns:
|
|
24
|
+
GuardrailResult indicating if content is safe
|
|
25
|
+
"""
|
|
26
|
+
@abstractmethod
|
|
27
|
+
async def check_output(self, content: str) -> GuardrailResult:
|
|
28
|
+
"""Check AI output content for safety violations.
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
content: The AI output content to check
|
|
32
|
+
|
|
33
|
+
Returns:
|
|
34
|
+
GuardrailResult indicating if content is safe
|
|
35
|
+
"""
|
|
36
|
+
@abstractmethod
|
|
37
|
+
def model_dump(self) -> dict:
|
|
38
|
+
"""Serialize engine configuration into a JSON-compatible dictionary."""
|
|
39
|
+
|
|
40
|
+
class BaseGuardrailEngine(ABC):
|
|
41
|
+
"""Abstract base class for guardrail engines.
|
|
42
|
+
|
|
43
|
+
Provides common functionality and ensures proper configuration handling.
|
|
44
|
+
Concrete engines should inherit from this class.
|
|
45
|
+
"""
|
|
46
|
+
config: Incomplete
|
|
47
|
+
def __init__(self, config: BaseGuardrailEngineConfig | None = None) -> None:
|
|
48
|
+
"""Initialize the engine with configuration.
|
|
49
|
+
|
|
50
|
+
Args:
|
|
51
|
+
config: Engine configuration. Uses defaults if None provided.
|
|
52
|
+
"""
|
|
53
|
+
@abstractmethod
|
|
54
|
+
async def check_input(self, content: str) -> GuardrailResult:
|
|
55
|
+
"""Check user input content for safety violations."""
|
|
56
|
+
@abstractmethod
|
|
57
|
+
async def check_output(self, content: str) -> GuardrailResult:
|
|
58
|
+
"""Check AI output content for safety violations."""
|
|
59
|
+
@abstractmethod
|
|
60
|
+
def model_dump(self) -> dict:
|
|
61
|
+
"""Serialize engine configuration into a JSON-compatible dictionary."""
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
from aip_agents.guardrails.engines.base import BaseGuardrailEngine as BaseGuardrailEngine
|
|
2
|
+
from aip_agents.guardrails.schemas import BaseGuardrailEngineConfig as BaseGuardrailEngineConfig, GuardrailResult as GuardrailResult
|
|
3
|
+
from aip_agents.guardrails.utils import convert_guardrail_mode_to_gl_sdk as convert_guardrail_mode_to_gl_sdk
|
|
4
|
+
from typing import Any
|
|
5
|
+
|
|
6
|
+
class NemoGuardrailEngine(BaseGuardrailEngine):
|
|
7
|
+
"""Wrapper for GL SDK NemoGuardrailEngine with aip-agents interface.
|
|
8
|
+
|
|
9
|
+
This engine provides advanced LLM-based content filtering using NVIDIA's
|
|
10
|
+
NeMo Guardrails. It can detect more complex safety violations beyond
|
|
11
|
+
simple phrase matching.
|
|
12
|
+
|
|
13
|
+
Note: Import of gllm_guardrail is deferred to __init__ to support
|
|
14
|
+
lazy loading when guardrails are optional dependency.
|
|
15
|
+
"""
|
|
16
|
+
def __init__(self, config: BaseGuardrailEngineConfig | None = None, **nemo_config: dict[str, Any]) -> None:
|
|
17
|
+
"""Initialize the NemoGuardrailEngine.
|
|
18
|
+
|
|
19
|
+
Args:
|
|
20
|
+
config: Engine configuration. Uses defaults if None provided.
|
|
21
|
+
**nemo_config: Additional configuration passed to the underlying
|
|
22
|
+
NeMo engine (e.g., model paths, thresholds, etc.)
|
|
23
|
+
|
|
24
|
+
Raises:
|
|
25
|
+
ImportError: If gllm-guardrail is not installed.
|
|
26
|
+
"""
|
|
27
|
+
async def check_input(self, content: str) -> GuardrailResult:
|
|
28
|
+
"""Check user input content using wrapped GL SDK NeMo engine.
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
content: The user input content to check
|
|
32
|
+
|
|
33
|
+
Returns:
|
|
34
|
+
GuardrailResult indicating if content is safe
|
|
35
|
+
"""
|
|
36
|
+
async def check_output(self, content: str) -> GuardrailResult:
|
|
37
|
+
"""Check AI output content using wrapped GL SDK NeMo engine.
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
content: The AI output content to check
|
|
41
|
+
|
|
42
|
+
Returns:
|
|
43
|
+
GuardrailResult indicating if content is safe
|
|
44
|
+
"""
|
|
45
|
+
def model_dump(self) -> dict:
|
|
46
|
+
"""Serialize engine configuration into a JSON-compatible dictionary."""
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
from aip_agents.guardrails.engines.base import BaseGuardrailEngine as BaseGuardrailEngine
|
|
2
|
+
from aip_agents.guardrails.schemas import BaseGuardrailEngineConfig as BaseGuardrailEngineConfig, GuardrailResult as GuardrailResult
|
|
3
|
+
from aip_agents.guardrails.utils import convert_guardrail_mode_to_gl_sdk as convert_guardrail_mode_to_gl_sdk
|
|
4
|
+
|
|
5
|
+
class PhraseMatcherEngine(BaseGuardrailEngine):
|
|
6
|
+
"""Wrapper for GL SDK PhraseMatcherEngine with aip-agents interface.
|
|
7
|
+
|
|
8
|
+
This engine performs rule-based banned phrase detection using the
|
|
9
|
+
GL SDK's PhraseMatcherEngine. It checks for exact phrase matches
|
|
10
|
+
and blocks content containing banned phrases.
|
|
11
|
+
|
|
12
|
+
Note: Import of gllm_guardrail is deferred to __init__ to support
|
|
13
|
+
lazy loading when guardrails are optional dependency.
|
|
14
|
+
"""
|
|
15
|
+
def __init__(self, config: BaseGuardrailEngineConfig | None = None, banned_phrases: list[str] | None = None) -> None:
|
|
16
|
+
"""Initialize the PhraseMatcherEngine.
|
|
17
|
+
|
|
18
|
+
Args:
|
|
19
|
+
config: Engine configuration. Uses defaults if None provided.
|
|
20
|
+
banned_phrases: List of phrases that should trigger blocking.
|
|
21
|
+
Defaults to empty list if None provided.
|
|
22
|
+
|
|
23
|
+
Raises:
|
|
24
|
+
ImportError: If gllm-guardrail is not installed.
|
|
25
|
+
"""
|
|
26
|
+
@property
|
|
27
|
+
def banned_phrases(self) -> list[str]:
|
|
28
|
+
"""Get the list of banned phrases."""
|
|
29
|
+
async def check_input(self, content: str) -> GuardrailResult:
|
|
30
|
+
"""Check user input content using wrapped GL SDK engine.
|
|
31
|
+
|
|
32
|
+
Args:
|
|
33
|
+
content: The user input content to check
|
|
34
|
+
|
|
35
|
+
Returns:
|
|
36
|
+
GuardrailResult indicating if content is safe
|
|
37
|
+
"""
|
|
38
|
+
async def check_output(self, content: str) -> GuardrailResult:
|
|
39
|
+
"""Check AI output content using wrapped GL SDK engine.
|
|
40
|
+
|
|
41
|
+
Args:
|
|
42
|
+
content: The AI output content to check
|
|
43
|
+
|
|
44
|
+
Returns:
|
|
45
|
+
GuardrailResult indicating if content is safe
|
|
46
|
+
"""
|
|
47
|
+
def model_dump(self) -> dict:
|
|
48
|
+
"""Serialize engine configuration into a JSON-compatible dictionary."""
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from aip_agents.guardrails.schemas import GuardrailResult as GuardrailResult
|
|
3
|
+
|
|
4
|
+
class GuardrailViolationError(Exception):
|
|
5
|
+
"""Exception raised when unsafe content is detected by guardrails.
|
|
6
|
+
|
|
7
|
+
This exception is raised by GuardrailMiddleware when content violates
|
|
8
|
+
safety policies. It contains the GuardrailResult with details about
|
|
9
|
+
why the content was blocked.
|
|
10
|
+
|
|
11
|
+
Attributes:
|
|
12
|
+
result: The GuardrailResult containing safety check details
|
|
13
|
+
message: Human-readable error message
|
|
14
|
+
"""
|
|
15
|
+
result: Incomplete
|
|
16
|
+
message: Incomplete
|
|
17
|
+
def __init__(self, result: GuardrailResult, message: str | None = None) -> None:
|
|
18
|
+
"""Initialize the exception.
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
result: The GuardrailResult from the failed safety check
|
|
22
|
+
message: Optional custom error message
|
|
23
|
+
"""
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from aip_agents.guardrails.engines.base import GuardrailEngine as GuardrailEngine
|
|
3
|
+
from aip_agents.guardrails.schemas import GuardrailInput as GuardrailInput, GuardrailMode as GuardrailMode, GuardrailResult as GuardrailResult
|
|
4
|
+
from typing import Any
|
|
5
|
+
|
|
6
|
+
class GuardrailManager:
|
|
7
|
+
"""Orchestrates multiple guardrail engines with fail-fast behavior.
|
|
8
|
+
|
|
9
|
+
The manager accepts one or more guardrail engines and runs them in sequence.
|
|
10
|
+
If any engine reports unsafe content, execution stops immediately (fail-fast)
|
|
11
|
+
and returns the violation result.
|
|
12
|
+
|
|
13
|
+
Attributes:
|
|
14
|
+
engines: List of guardrail engines to orchestrate
|
|
15
|
+
"""
|
|
16
|
+
enabled: bool
|
|
17
|
+
engines: Incomplete
|
|
18
|
+
def __init__(self, engine: GuardrailEngine | list[GuardrailEngine] | None = None, engines: list[GuardrailEngine] | None = None) -> None:
|
|
19
|
+
"""Initialize the GuardrailManager.
|
|
20
|
+
|
|
21
|
+
Args:
|
|
22
|
+
engine: Single guardrail engine to use
|
|
23
|
+
engines: List of guardrail engines to use
|
|
24
|
+
|
|
25
|
+
Raises:
|
|
26
|
+
ValueError: If both engine and engines are provided
|
|
27
|
+
"""
|
|
28
|
+
def model_dump(self) -> dict[str, Any]:
|
|
29
|
+
"""Serialize manager configuration into a JSON-compatible dictionary."""
|
|
30
|
+
async def check_content(self, content: str | GuardrailInput) -> GuardrailResult:
|
|
31
|
+
"""Check content against all registered engines.
|
|
32
|
+
|
|
33
|
+
Executes engines in order with fail-fast behavior. If any engine
|
|
34
|
+
reports unsafe content, returns immediately with that result.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
content: Content to check. Can be a string (treated as input-only)
|
|
38
|
+
or GuardrailInput with input/output fields.
|
|
39
|
+
|
|
40
|
+
Returns:
|
|
41
|
+
GuardrailResult indicating if content passed all checks
|
|
42
|
+
"""
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from aip_agents.guardrails.exceptions import GuardrailViolationError as GuardrailViolationError
|
|
3
|
+
from aip_agents.guardrails.manager import GuardrailManager as GuardrailManager
|
|
4
|
+
from aip_agents.guardrails.schemas import GuardrailInput as GuardrailInput
|
|
5
|
+
from aip_agents.middleware.base import AgentMiddleware as AgentMiddleware, ModelRequest as ModelRequest
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
class GuardrailMiddleware(AgentMiddleware):
|
|
9
|
+
"""Middleware that integrates guardrails into agent execution.
|
|
10
|
+
|
|
11
|
+
This middleware wraps a GuardrailManager and automatically checks content
|
|
12
|
+
at appropriate points during agent execution:
|
|
13
|
+
|
|
14
|
+
- Before model invocation: checks user input from messages
|
|
15
|
+
- After model invocation: checks AI output from messages
|
|
16
|
+
|
|
17
|
+
If unsafe content is detected, raises GuardrailViolationError to stop execution.
|
|
18
|
+
|
|
19
|
+
Attributes:
|
|
20
|
+
guardrail_manager: The GuardrailManager to use for content checking
|
|
21
|
+
"""
|
|
22
|
+
guardrail_manager: Incomplete
|
|
23
|
+
def __init__(self, guardrail_manager: GuardrailManager) -> None:
|
|
24
|
+
"""Initialize the GuardrailMiddleware.
|
|
25
|
+
|
|
26
|
+
Args:
|
|
27
|
+
guardrail_manager: GuardrailManager instance to use for checking
|
|
28
|
+
"""
|
|
29
|
+
@property
|
|
30
|
+
def tools(self) -> list:
|
|
31
|
+
"""Guardrails are passive filters and don't contribute tools."""
|
|
32
|
+
@property
|
|
33
|
+
def system_prompt_additions(self) -> str | None:
|
|
34
|
+
"""Guardrails are passive filters and don't modify system prompts."""
|
|
35
|
+
async def abefore_model(self, state: dict[str, Any]) -> dict[str, Any]:
|
|
36
|
+
"""Asynchronously check user input before model invocation.
|
|
37
|
+
|
|
38
|
+
Extracts the last user message from state and checks it with guardrails.
|
|
39
|
+
If unsafe, raises GuardrailViolationError to stop execution.
|
|
40
|
+
|
|
41
|
+
Args:
|
|
42
|
+
state: Current agent state containing messages and context
|
|
43
|
+
|
|
44
|
+
Returns:
|
|
45
|
+
Empty dict (no state modifications needed)
|
|
46
|
+
|
|
47
|
+
Raises:
|
|
48
|
+
GuardrailViolationError: If user input violates safety policies
|
|
49
|
+
"""
|
|
50
|
+
def before_model(self, state: dict[str, Any]) -> dict[str, Any]:
|
|
51
|
+
"""Check user input before model invocation (synchronous wrapper).
|
|
52
|
+
|
|
53
|
+
Note:
|
|
54
|
+
This is a synchronous wrapper for the async `abefore_model()` method.
|
|
55
|
+
LangGraph agents primarily use `abefore_model()` in async contexts.
|
|
56
|
+
This method should rarely be called directly. If called from an async
|
|
57
|
+
context with a running event loop, it will attempt to handle it,
|
|
58
|
+
but `abefore_model()` should be preferred.
|
|
59
|
+
|
|
60
|
+
Args:
|
|
61
|
+
state: Current agent state containing messages and context
|
|
62
|
+
|
|
63
|
+
Returns:
|
|
64
|
+
Empty dict (no state modifications needed)
|
|
65
|
+
|
|
66
|
+
Raises:
|
|
67
|
+
GuardrailViolationError: If user input violates safety policies
|
|
68
|
+
"""
|
|
69
|
+
def modify_model_request(self, request: ModelRequest, state: dict[str, Any]) -> ModelRequest:
|
|
70
|
+
"""Guardrails don't modify model requests."""
|
|
71
|
+
async def aafter_model(self, state: dict[str, Any]) -> dict[str, Any]:
|
|
72
|
+
"""Asynchronously check AI output after model invocation.
|
|
73
|
+
|
|
74
|
+
Extracts the last AI message from state and checks it with guardrails.
|
|
75
|
+
If unsafe, raises GuardrailViolationError to stop execution.
|
|
76
|
+
|
|
77
|
+
Args:
|
|
78
|
+
state: Current agent state after model invocation
|
|
79
|
+
|
|
80
|
+
Returns:
|
|
81
|
+
Empty dict (no state modifications needed)
|
|
82
|
+
|
|
83
|
+
Raises:
|
|
84
|
+
GuardrailViolationError: If AI output violates safety policies
|
|
85
|
+
"""
|
|
86
|
+
def after_model(self, state: dict[str, Any]) -> dict[str, Any]:
|
|
87
|
+
"""Check AI output after model invocation (synchronous wrapper)."""
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from enum import StrEnum
|
|
3
|
+
from pydantic import BaseModel
|
|
4
|
+
|
|
5
|
+
class GuardrailMode(StrEnum):
|
|
6
|
+
"""Modes determining what content an engine checks."""
|
|
7
|
+
INPUT_ONLY: str
|
|
8
|
+
OUTPUT_ONLY: str
|
|
9
|
+
INPUT_OUTPUT: str
|
|
10
|
+
DISABLED: str
|
|
11
|
+
|
|
12
|
+
class GuardrailInput(BaseModel):
|
|
13
|
+
"""Input schema for guardrail checks.
|
|
14
|
+
|
|
15
|
+
Attributes:
|
|
16
|
+
input: User input content to check (queries, prompts, context)
|
|
17
|
+
output: AI output content to check (responses, generated text)
|
|
18
|
+
"""
|
|
19
|
+
model_config: Incomplete
|
|
20
|
+
input: str | None
|
|
21
|
+
output: str | None
|
|
22
|
+
|
|
23
|
+
class GuardrailResult(BaseModel):
|
|
24
|
+
"""Result schema returned by guardrail engines and managers.
|
|
25
|
+
|
|
26
|
+
Attributes:
|
|
27
|
+
is_safe: Whether the content passed all checks
|
|
28
|
+
reason: Explanation when content is blocked (None if safe)
|
|
29
|
+
filtered_content: Cleaned/sanitized content if engine provides it
|
|
30
|
+
"""
|
|
31
|
+
model_config: Incomplete
|
|
32
|
+
is_safe: bool
|
|
33
|
+
reason: str | None
|
|
34
|
+
filtered_content: str | None
|
|
35
|
+
|
|
36
|
+
class BaseGuardrailEngineConfig(BaseModel):
|
|
37
|
+
"""Base configuration for guardrail engines.
|
|
38
|
+
|
|
39
|
+
Attributes:
|
|
40
|
+
guardrail_mode: What content this engine should check
|
|
41
|
+
"""
|
|
42
|
+
model_config: Incomplete
|
|
43
|
+
guardrail_mode: GuardrailMode
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from aip_agents.guardrails.schemas import GuardrailMode as GuardrailMode
|
|
2
|
+
from typing import Any
|
|
3
|
+
|
|
4
|
+
def convert_guardrail_mode_to_gl_sdk(mode: GuardrailMode) -> Any:
|
|
5
|
+
"""Convert aip-agents GuardrailMode to gllm-guardrail GuardrailMode.
|
|
6
|
+
|
|
7
|
+
This function performs lazy import of gllm-guardrail to support optional
|
|
8
|
+
dependencies. The conversion is necessary because we maintain our own
|
|
9
|
+
GuardrailMode enum for API consistency while wrapping the external library.
|
|
10
|
+
|
|
11
|
+
Args:
|
|
12
|
+
mode: The aip-agents GuardrailMode to convert
|
|
13
|
+
|
|
14
|
+
Returns:
|
|
15
|
+
The corresponding gllm-guardrail GuardrailMode enum value
|
|
16
|
+
|
|
17
|
+
Raises:
|
|
18
|
+
ImportError: If gllm-guardrail is not installed
|
|
19
|
+
"""
|
|
File without changes
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
from aip_agents.mcp.client.base_mcp_client import BaseMCPClient as BaseMCPClient
|
|
2
|
+
from aip_agents.mcp.client.google_adk.client import GoogleADKMCPClient as GoogleADKMCPClient
|
|
3
|
+
from aip_agents.mcp.client.langchain.client import LangchainMCPClient as LangchainMCPClient
|
|
4
|
+
|
|
5
|
+
__all__ = ['GoogleADKMCPClient', 'LangchainMCPClient', 'BaseMCPClient']
|