google / google/adk-python

sample: Model Armor tool-output screening via after_tool_callback

Abierto
#6,964 1 comentario 0 reacciones 1 asignado Reclamado por @sanketpatil06 Ver en GitHub
needs review tools
Lenguaje dominante
Python
Estrellas
21.5k
Forks
4k
Merge medio
1 d 14 h
PR fusionados (30 d)
37

Descripción

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

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.