google / google/adk-python

sample: Model Armor tool-output screening via after_tool_callback

Đang mở
#6,964 1 bình luận 0 reaction 1 người được giao Được @sanketpatil06 nhận Xem trên GitHub
needs review tools
Ngôn ngữ chính
Python
Star
21.5k
Fork
4k
Merge trung bình
1 ngày 14 giờ
Pull request đã merge (30 ngày)
37

Mô tả

### Is your feature request related to a specific problem?

The first-party `ModelArmorPlugin` documents that **tool output is not screened**:

https://github.com/google/adk-python/blob/main/docs/guides/integrations/model_armor/index.md#limitations

Tool results arrive as `user` content whose only part is a `function_response`, which the plugin does not send to Model Armor. Agentic pipelines that ingest external text via tools (issues, email, web search, MCP) often need screening on **tool output**, not just user prompts and model replies.

### Describe the Solution You'd Like

Add a minimal sample under `contributing/samples/integrations/model_armor_tool_output/` demonstrating a companion plugin on `after_tool_callback` that stringifies tool results and calls Model Armor's `SanitizeUserPrompt` API, registered alongside `ModelArmorPlugin` on the same `App`.

### Impact on your work

We run a multi-tool agent control plane where the primary injection vector is hostile content returned as tool output. We use a custom `after_tool_callback` plugin today; a first-party sample would reduce unsafe copy-paste from older adk-samples safety-plugins code.

No critical deadline.

### Willingness to contribute

Yes

### Describe Alternatives You've Considered

- Using `ModelArmorSafetyFilterPlugin` from adk-samples: older callback shapes; not the ADK 2.8 first-party integration path.
- Waiting for core plugin extension: larger API design (tracked separately as a follow-up feature request).

### Proposed API / Implementation

```python
class ToolOutputModelArmorPlugin(BasePlugin):
async def after_tool_callback(
self, *, tool, tool_args, tool_context, result, **kwargs
):
text = stringify(result)
if not text:
return None
# Call modelarmor SanitizeUserPrompt on text; return error dict if MATCH_FOUND
```

Sample registers `[ModelArmorPlugin(...), ToolOutputModelArmorPlugin(...)]` on one `App`.

### Additional context

- The limitation is documented in the adk-python integration guide under **Limitations**.
- I will open a PR referencing this issue the same day if maintainers are open to the approach.

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.