aip-agents-binary 0.5.24__py3-none-any.whl → 0.5.25b1__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 +6 -0
- aip_agents/agent/base_langgraph_agent.pyi +232 -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 +96 -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.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__.py +83 -0
- aip_agents/guardrails/__init__.pyi +6 -0
- aip_agents/guardrails/engines/__init__.py +69 -0
- aip_agents/guardrails/engines/__init__.pyi +4 -0
- aip_agents/guardrails/engines/base.py +90 -0
- aip_agents/guardrails/engines/base.pyi +61 -0
- aip_agents/guardrails/engines/nemo.py +101 -0
- aip_agents/guardrails/engines/nemo.pyi +46 -0
- aip_agents/guardrails/engines/phrase_matcher.py +113 -0
- aip_agents/guardrails/engines/phrase_matcher.pyi +48 -0
- aip_agents/guardrails/exceptions.py +39 -0
- aip_agents/guardrails/exceptions.pyi +23 -0
- aip_agents/guardrails/manager.py +163 -0
- aip_agents/guardrails/manager.pyi +42 -0
- aip_agents/guardrails/middleware.py +199 -0
- aip_agents/guardrails/middleware.pyi +87 -0
- aip_agents/guardrails/schemas.py +63 -0
- aip_agents/guardrails/schemas.pyi +43 -0
- aip_agents/guardrails/utils.py +45 -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.pyi +48 -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.pyi +113 -0
- aip_agents/mcp/client/session_pool.pyi +101 -0
- aip_agents/mcp/client/transports.pyi +123 -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.py +8 -0
- aip_agents/middleware/base.pyi +75 -0
- aip_agents/middleware/manager.py +22 -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.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.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.pyi +56 -0
- aip_agents/utils/langgraph/tool_output_management.pyi +292 -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.24.dist-info → aip_agents_binary-0.5.25b1.dist-info}/METADATA +49 -49
- aip_agents_binary-0.5.25b1.dist-info/RECORD +566 -0
- {aip_agents_binary-0.5.24.dist-info → aip_agents_binary-0.5.25b1.dist-info}/WHEEL +1 -1
- aip_agents_binary-0.5.24.dist-info/RECORD +0 -280
- {aip_agents_binary-0.5.24.dist-info → aip_agents_binary-0.5.25b1.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
from langchain_core.tools import BaseTool
|
|
2
|
+
from pydantic import BaseModel
|
|
3
|
+
|
|
4
|
+
class CurrencyConfig(BaseModel):
|
|
5
|
+
"""Tool configuration schema."""
|
|
6
|
+
tenant_id: str
|
|
7
|
+
auth_key: str
|
|
8
|
+
|
|
9
|
+
class CurrencyInput(BaseModel):
|
|
10
|
+
"""Input schema for currency exchange."""
|
|
11
|
+
amount: float
|
|
12
|
+
from_currency: str
|
|
13
|
+
to_currency: str
|
|
14
|
+
|
|
15
|
+
class CurrencyExchangeTool(BaseTool):
|
|
16
|
+
"""Simple currency exchange tool with SDK auto-injection configuration."""
|
|
17
|
+
name: str
|
|
18
|
+
description: str
|
|
19
|
+
args_schema: type[BaseModel]
|
|
20
|
+
tool_config_schema: type[BaseModel]
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
from aip_agents.a2a.types import MimeType as MimeType
|
|
2
|
+
from aip_agents.utils.artifact_helpers import create_artifact_command as create_artifact_command
|
|
3
|
+
from langchain_core.tools import BaseTool
|
|
4
|
+
from pydantic import BaseModel
|
|
5
|
+
|
|
6
|
+
PIL_AVAILABLE: bool
|
|
7
|
+
|
|
8
|
+
class GraphCommandInput(BaseModel):
|
|
9
|
+
"""Input schema for a tiny bar/line chart artifact tool.
|
|
10
|
+
|
|
11
|
+
Note: width/height are clamped to a small size to keep artifacts lightweight.
|
|
12
|
+
"""
|
|
13
|
+
chart_type: str
|
|
14
|
+
labels: list[str]
|
|
15
|
+
values: list[float]
|
|
16
|
+
title: str
|
|
17
|
+
width: int
|
|
18
|
+
height: int
|
|
19
|
+
image_name: str
|
|
20
|
+
|
|
21
|
+
class GraphArtifactCommandTool(BaseTool):
|
|
22
|
+
"""Generate a very small PNG chart and return it as a Command artifact."""
|
|
23
|
+
name: str
|
|
24
|
+
description: str
|
|
25
|
+
args_schema: type[BaseModel]
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from aip_agents.utils.logger import get_logger as get_logger
|
|
3
|
+
from pydantic import BaseModel
|
|
4
|
+
|
|
5
|
+
logger: Incomplete
|
|
6
|
+
|
|
7
|
+
class WeatherToolInputSchema(BaseModel):
|
|
8
|
+
"""Schema for weather tool input."""
|
|
9
|
+
city: str
|
|
10
|
+
|
|
11
|
+
def weather_tool(city: str) -> str:
|
|
12
|
+
"""Gets the weather for a specified city.
|
|
13
|
+
|
|
14
|
+
Args:
|
|
15
|
+
city: The name of the city to get weather for.
|
|
16
|
+
|
|
17
|
+
Returns:
|
|
18
|
+
A string describing the weather conditions.
|
|
19
|
+
"""
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
from aip_agents.agent.langgraph_react_agent import LangGraphReactAgent as LangGraphReactAgent
|
|
2
|
+
from aip_agents.examples.tools.langchain_weather_tool import weather_tool as weather_tool
|
|
3
|
+
from aip_agents.examples.tools.time_tool import TimeTool as TimeTool
|
|
4
|
+
from langchain_core.runnables import RunnableConfig
|
|
5
|
+
from langchain_core.tools import BaseTool
|
|
6
|
+
from pydantic import BaseModel
|
|
7
|
+
from typing import Any
|
|
8
|
+
|
|
9
|
+
class StreamingToolConfig(BaseModel):
|
|
10
|
+
"""Tool configuration schema for the LangGraph streaming tool."""
|
|
11
|
+
time_format: str
|
|
12
|
+
|
|
13
|
+
class LangGraphStreamingToolInput(BaseModel):
|
|
14
|
+
"""Input schema for the LangGraphStreamingTool."""
|
|
15
|
+
query: str
|
|
16
|
+
|
|
17
|
+
class LangGraphStreamingTool(BaseTool):
|
|
18
|
+
"""Tool that wraps a LangGraph agent with time and weather forecast capabilities."""
|
|
19
|
+
name: str
|
|
20
|
+
description: str
|
|
21
|
+
args_schema: type[BaseModel]
|
|
22
|
+
tool_config_schema: type[BaseModel]
|
|
23
|
+
def __init__(self, model: Any = None, **kwargs) -> None:
|
|
24
|
+
"""Initialize the LangGraphStreamingTool.
|
|
25
|
+
|
|
26
|
+
Args:
|
|
27
|
+
model: The model to use for the agent.
|
|
28
|
+
**kwargs: Additional keyword arguments.
|
|
29
|
+
"""
|
|
30
|
+
@property
|
|
31
|
+
def agent(self):
|
|
32
|
+
"""Access the internal agent."""
|
|
33
|
+
async def arun_streaming(self, query: str = None, config: RunnableConfig = None, **kwargs):
|
|
34
|
+
"""Execute the LangGraph agent asynchronously with A2A streaming output.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
query: The query to execute.
|
|
38
|
+
config: Tool configuration containing user context and preferences.
|
|
39
|
+
**kwargs: Additional keyword arguments.
|
|
40
|
+
|
|
41
|
+
Returns:
|
|
42
|
+
An async generator that yields streaming events.
|
|
43
|
+
"""
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from langchain_core.tools import BaseTool
|
|
2
|
+
from pydantic import BaseModel
|
|
3
|
+
|
|
4
|
+
class MockRetrievalInput(BaseModel):
|
|
5
|
+
"""Input schema for the MockRetrievalTool."""
|
|
6
|
+
query: str
|
|
7
|
+
|
|
8
|
+
class MockRetrievalTool(BaseTool):
|
|
9
|
+
"""Mock tool that returns hardcoded references for testing."""
|
|
10
|
+
name: str
|
|
11
|
+
description: str
|
|
12
|
+
args_schema: type[BaseModel]
|
|
13
|
+
save_output_history: bool
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from aip_agents.utils.logger import LoggerManager as LoggerManager
|
|
3
|
+
from pydantic import BaseModel
|
|
4
|
+
|
|
5
|
+
logger: Incomplete
|
|
6
|
+
|
|
7
|
+
class CustomerIdSchema(BaseModel):
|
|
8
|
+
"""Schema for customer ID input."""
|
|
9
|
+
customer_id: str
|
|
10
|
+
|
|
11
|
+
class EmployeeIdSchema(BaseModel):
|
|
12
|
+
"""Schema for employee ID input."""
|
|
13
|
+
employee_id: str
|
|
14
|
+
|
|
15
|
+
class UserIdSchema(BaseModel):
|
|
16
|
+
"""Schema for user ID input."""
|
|
17
|
+
user_id: str
|
|
18
|
+
|
|
19
|
+
def get_customer_info(customer_id: str) -> str:
|
|
20
|
+
"""Gets customer information including email and phone number.
|
|
21
|
+
|
|
22
|
+
This tool demonstrates PII handling by returning sensitive customer data
|
|
23
|
+
that will be automatically anonymized by the PII handler.
|
|
24
|
+
|
|
25
|
+
Args:
|
|
26
|
+
customer_id: The ID of the customer to retrieve information for.
|
|
27
|
+
|
|
28
|
+
Returns:
|
|
29
|
+
A string containing customer information with PII.
|
|
30
|
+
"""
|
|
31
|
+
def get_employee_data(employee_id: str) -> str:
|
|
32
|
+
"""Gets employee data including name, email, and salary information.
|
|
33
|
+
|
|
34
|
+
This tool demonstrates PII handling with employee-specific data that includes
|
|
35
|
+
sensitive information like salary and personal email addresses.
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
employee_id: The ID of the employee to retrieve data for.
|
|
39
|
+
|
|
40
|
+
Returns:
|
|
41
|
+
A string containing employee information with PII.
|
|
42
|
+
"""
|
|
43
|
+
def get_user_profile(user_id: str) -> str:
|
|
44
|
+
"""Gets user profile information with personal details.
|
|
45
|
+
|
|
46
|
+
This tool demonstrates PII handling with user profile data that includes
|
|
47
|
+
personal information like email, phone, and date of birth.
|
|
48
|
+
|
|
49
|
+
Args:
|
|
50
|
+
user_id: The ID of the user to retrieve profile for.
|
|
51
|
+
|
|
52
|
+
Returns:
|
|
53
|
+
A string containing user profile information with PII.
|
|
54
|
+
"""
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
from aip_agents.a2a.types import MimeType as MimeType
|
|
2
|
+
from aip_agents.utils.artifact_helpers import create_artifact_command as create_artifact_command
|
|
3
|
+
from langchain_core.tools import BaseTool
|
|
4
|
+
from pydantic import BaseModel
|
|
5
|
+
|
|
6
|
+
DEFAULT_RANDOM_CHART_TITLE: str
|
|
7
|
+
PIL_AVAILABLE: bool
|
|
8
|
+
|
|
9
|
+
class RandomChartInput(BaseModel):
|
|
10
|
+
"""Input schema for random chart generation."""
|
|
11
|
+
title: str
|
|
12
|
+
num_bars: int
|
|
13
|
+
min_value: int
|
|
14
|
+
max_value: int
|
|
15
|
+
|
|
16
|
+
class RandomChartTool(BaseTool):
|
|
17
|
+
"""Generate random bar chart images without relying on upstream data."""
|
|
18
|
+
name: str
|
|
19
|
+
description: str
|
|
20
|
+
args_schema: type[BaseModel]
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from _typeshed import Incomplete
|
|
2
|
+
from langchain_core.tools import BaseTool
|
|
3
|
+
from pydantic import BaseModel
|
|
4
|
+
|
|
5
|
+
logger: Incomplete
|
|
6
|
+
|
|
7
|
+
class GoogleSerperInput(BaseModel):
|
|
8
|
+
"""Input schema for the GoogleSerperTool."""
|
|
9
|
+
query: str
|
|
10
|
+
|
|
11
|
+
class MockGoogleSerperTool(BaseTool):
|
|
12
|
+
"""Mock Tool to simulate Google Serper API results for testing."""
|
|
13
|
+
name: str
|
|
14
|
+
description: str
|
|
15
|
+
save_output_history: bool
|
|
16
|
+
args_schema: type[BaseModel]
|
|
@@ -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,83 @@
|
|
|
1
|
+
# flake8: noqa: F401
|
|
2
|
+
"""Guardrails package for content filtering and safety checks.
|
|
3
|
+
|
|
4
|
+
This package provides modular guardrail engines and managers for filtering
|
|
5
|
+
harmful content in AI agent interactions. All components support lazy loading
|
|
6
|
+
to work with optional dependencies.
|
|
7
|
+
|
|
8
|
+
Example:
|
|
9
|
+
Basic usage with a phrase matcher engine:
|
|
10
|
+
|
|
11
|
+
.. code-block:: python
|
|
12
|
+
|
|
13
|
+
from aip_agents.guardrails import GuardrailManager, GuardrailMiddleware
|
|
14
|
+
from aip_agents.guardrails.engines import PhraseMatcherEngine
|
|
15
|
+
from aip_agents.guardrails.schemas import GuardrailMode
|
|
16
|
+
|
|
17
|
+
# Create a guardrail engine
|
|
18
|
+
engine = PhraseMatcherEngine(
|
|
19
|
+
banned_phrases=["spam", "inappropriate"]
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
# Create a manager
|
|
23
|
+
manager = GuardrailManager(engines=[engine])
|
|
24
|
+
|
|
25
|
+
# Create middleware for agent integration
|
|
26
|
+
middleware = GuardrailMiddleware(guardrail_manager=manager)
|
|
27
|
+
|
|
28
|
+
# Use with agent (components are lazy-loaded)
|
|
29
|
+
from aip_agents.agent import LangGraphReactAgent
|
|
30
|
+
agent = LangGraphReactAgent(
|
|
31
|
+
name="my_agent",
|
|
32
|
+
guardrail=manager,
|
|
33
|
+
# ... other agent config
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
Authors:
|
|
37
|
+
Reinhart Linanda (reinhart.linanda@gdplabs.id)
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
from typing import TYPE_CHECKING, Any
|
|
41
|
+
|
|
42
|
+
if TYPE_CHECKING:
|
|
43
|
+
from aip_agents.guardrails.exceptions import GuardrailViolationError
|
|
44
|
+
from aip_agents.guardrails.manager import GuardrailManager
|
|
45
|
+
from aip_agents.guardrails.middleware import GuardrailMiddleware
|
|
46
|
+
from aip_agents.guardrails.schemas import (
|
|
47
|
+
BaseGuardrailEngineConfig,
|
|
48
|
+
GuardrailInput,
|
|
49
|
+
GuardrailMode,
|
|
50
|
+
GuardrailResult,
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
_IMPORT_MAP = {
|
|
55
|
+
"GuardrailViolationError": "aip_agents.guardrails.exceptions",
|
|
56
|
+
"GuardrailManager": "aip_agents.guardrails.manager",
|
|
57
|
+
"GuardrailMiddleware": "aip_agents.guardrails.middleware",
|
|
58
|
+
"BaseGuardrailEngineConfig": "aip_agents.guardrails.schemas",
|
|
59
|
+
"GuardrailMode": "aip_agents.guardrails.schemas",
|
|
60
|
+
"GuardrailInput": "aip_agents.guardrails.schemas",
|
|
61
|
+
"GuardrailResult": "aip_agents.guardrails.schemas",
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
_cache: dict[str, Any] = {}
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def __getattr__(name: str) -> Any:
|
|
68
|
+
"""Lazy import components on first access."""
|
|
69
|
+
if name in _cache:
|
|
70
|
+
return _cache[name]
|
|
71
|
+
|
|
72
|
+
if name in _IMPORT_MAP:
|
|
73
|
+
try:
|
|
74
|
+
module = __import__(_IMPORT_MAP[name], fromlist=[name])
|
|
75
|
+
_cache[name] = getattr(module, name)
|
|
76
|
+
return _cache[name]
|
|
77
|
+
except ImportError as e:
|
|
78
|
+
raise ImportError(f"Failed to import {name}. Optional dependencies may be missing: {e}") from e
|
|
79
|
+
|
|
80
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
__all__ = list(_IMPORT_MAP.keys())
|
|
@@ -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']
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# flake8: noqa: F401
|
|
2
|
+
"""Guardrail engines package with lazy loading support.
|
|
3
|
+
|
|
4
|
+
This package provides guardrail engines that wrap GL SDK implementations.
|
|
5
|
+
Engines are loaded lazily to support optional dependencies.
|
|
6
|
+
|
|
7
|
+
Example:
|
|
8
|
+
Import and use guardrail engines:
|
|
9
|
+
|
|
10
|
+
.. code-block:: python
|
|
11
|
+
|
|
12
|
+
# Lazy import - works even if gllm-guardrail is not installed
|
|
13
|
+
from aip_agents.guardrails.engines import PhraseMatcherEngine, NemoGuardrailEngine
|
|
14
|
+
|
|
15
|
+
# Create a phrase matcher engine
|
|
16
|
+
phrase_engine = PhraseMatcherEngine(
|
|
17
|
+
banned_phrases=["spam", "inappropriate"]
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
# Create a NeMo guardrail engine (requires gllm-guardrail)
|
|
21
|
+
nemo_engine = NemoGuardrailEngine(
|
|
22
|
+
# NeMo-specific configuration
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
# Use with GuardrailManager
|
|
26
|
+
from aip_agents.guardrails import GuardrailManager
|
|
27
|
+
manager = GuardrailManager(engines=[phrase_engine, nemo_engine])
|
|
28
|
+
|
|
29
|
+
Note:
|
|
30
|
+
All engines support lazy loading. If `gllm-guardrail` is not installed,
|
|
31
|
+
importing these engines will raise an ImportError only when actually
|
|
32
|
+
instantiated, not at import time.
|
|
33
|
+
|
|
34
|
+
Authors:
|
|
35
|
+
Reinhart Linanda (reinhart.linanda@gdplabs.id)
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
from typing import TYPE_CHECKING, Any
|
|
39
|
+
|
|
40
|
+
if TYPE_CHECKING:
|
|
41
|
+
from aip_agents.guardrails.engines.nemo import NemoGuardrailEngine
|
|
42
|
+
from aip_agents.guardrails.engines.phrase_matcher import PhraseMatcherEngine
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
_IMPORT_MAP = {
|
|
46
|
+
"NemoGuardrailEngine": "aip_agents.guardrails.engines.nemo",
|
|
47
|
+
"PhraseMatcherEngine": "aip_agents.guardrails.engines.phrase_matcher",
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
_cache: dict[str, Any] = {}
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def __getattr__(name: str) -> Any:
|
|
54
|
+
"""Lazy import engines on first access."""
|
|
55
|
+
if name in _cache:
|
|
56
|
+
return _cache[name]
|
|
57
|
+
|
|
58
|
+
if name in _IMPORT_MAP:
|
|
59
|
+
try:
|
|
60
|
+
module = __import__(_IMPORT_MAP[name], fromlist=[name])
|
|
61
|
+
_cache[name] = getattr(module, name)
|
|
62
|
+
return _cache[name]
|
|
63
|
+
except ImportError as e:
|
|
64
|
+
raise ImportError(f"Failed to import {name}. Optional dependencies may be missing: {e}") from e
|
|
65
|
+
|
|
66
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
__all__ = list(_IMPORT_MAP.keys())
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"""Base interfaces and protocols for guardrail engines.
|
|
2
|
+
|
|
3
|
+
This module defines the base protocol that all guardrail engines must implement,
|
|
4
|
+
providing a consistent interface for content safety checking.
|
|
5
|
+
|
|
6
|
+
Authors:
|
|
7
|
+
Reinhart Linanda (reinhart.linanda@gdplabs.id)
|
|
8
|
+
Christian Trisno Sen Long Chen (christian.t.s.l.chen@gdplabs.id)
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from abc import ABC, abstractmethod
|
|
12
|
+
from typing import Protocol
|
|
13
|
+
|
|
14
|
+
from aip_agents.guardrails.schemas import (
|
|
15
|
+
BaseGuardrailEngineConfig,
|
|
16
|
+
GuardrailResult,
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class GuardrailEngine(Protocol):
|
|
21
|
+
"""Protocol defining the interface for guardrail engines.
|
|
22
|
+
|
|
23
|
+
All guardrail engines must implement this protocol to be compatible
|
|
24
|
+
with GuardrailManager. Engines check content for safety violations.
|
|
25
|
+
|
|
26
|
+
Attributes:
|
|
27
|
+
config: Configuration for this engine's behavior
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
config: BaseGuardrailEngineConfig
|
|
31
|
+
|
|
32
|
+
@abstractmethod
|
|
33
|
+
async def check_input(self, content: str) -> GuardrailResult:
|
|
34
|
+
"""Check user input content for safety violations.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
content: The user input content to check
|
|
38
|
+
|
|
39
|
+
Returns:
|
|
40
|
+
GuardrailResult indicating if content is safe
|
|
41
|
+
"""
|
|
42
|
+
...
|
|
43
|
+
|
|
44
|
+
@abstractmethod
|
|
45
|
+
async def check_output(self, content: str) -> GuardrailResult:
|
|
46
|
+
"""Check AI output content for safety violations.
|
|
47
|
+
|
|
48
|
+
Args:
|
|
49
|
+
content: The AI output content to check
|
|
50
|
+
|
|
51
|
+
Returns:
|
|
52
|
+
GuardrailResult indicating if content is safe
|
|
53
|
+
"""
|
|
54
|
+
...
|
|
55
|
+
|
|
56
|
+
@abstractmethod
|
|
57
|
+
def model_dump(self) -> dict:
|
|
58
|
+
"""Serialize engine configuration into a JSON-compatible dictionary."""
|
|
59
|
+
...
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class BaseGuardrailEngine(ABC):
|
|
63
|
+
"""Abstract base class for guardrail engines.
|
|
64
|
+
|
|
65
|
+
Provides common functionality and ensures proper configuration handling.
|
|
66
|
+
Concrete engines should inherit from this class.
|
|
67
|
+
"""
|
|
68
|
+
|
|
69
|
+
def __init__(self, config: BaseGuardrailEngineConfig | None = None) -> None:
|
|
70
|
+
"""Initialize the engine with configuration.
|
|
71
|
+
|
|
72
|
+
Args:
|
|
73
|
+
config: Engine configuration. Uses defaults if None provided.
|
|
74
|
+
"""
|
|
75
|
+
self.config = config or BaseGuardrailEngineConfig()
|
|
76
|
+
|
|
77
|
+
@abstractmethod
|
|
78
|
+
async def check_input(self, content: str) -> GuardrailResult:
|
|
79
|
+
"""Check user input content for safety violations."""
|
|
80
|
+
...
|
|
81
|
+
|
|
82
|
+
@abstractmethod
|
|
83
|
+
async def check_output(self, content: str) -> GuardrailResult:
|
|
84
|
+
"""Check AI output content for safety violations."""
|
|
85
|
+
...
|
|
86
|
+
|
|
87
|
+
@abstractmethod
|
|
88
|
+
def model_dump(self) -> dict:
|
|
89
|
+
"""Serialize engine configuration into a JSON-compatible dictionary."""
|
|
90
|
+
...
|
|
@@ -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."""
|