google / google/adk-python

sample: Model Armor tool-output screening via after_tool_callback

Ouverte
#6,964 1 commentaire 0 réactions 1 personne assignée Réclamée par @sanketpatil06 Voir sur GitHub
needs review tools
Langage dominant
Python
Étoiles
21.5k
Forks
4k
Merge moyen
1 j 14 h
PR mergées (30 j)
37

Description

### 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.

Guide de contribution

Ouvrir le guide de contribution

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.