anthropics / anthropics/anthropic-sdk-python
Managed Agents event stream doesn't surface model refusal stop_reason / stop_details
- Ngôn ngữ chính
- Python
- Star
- 3.9k
- Fork
- 853
- Merge trung bình
- 1 ngày 18 giờ
- Pull request đã merge (30 ngày)
- 11
Mô tả
## Summary
On the Messages API, a safety refusal is reported via `stop_reason="refusal"` plus
`stop_details` (`RefusalStopDetails`, with `category` = `bio` | `cyber`). The Managed
Agents session event stream appears to have no equivalent, so a consumer can't tell
that a turn ended due to a model refusal (or which category).
## Details
Verified against `main` and the latest release (`v0.107.1`):
- `BetaManagedAgentsSessionStatusIdleEvent.stop_reason` is a union of only
`BetaManagedAgentsSessionEndTurn | BetaManagedAgentsSessionRequiresAction |
BetaManagedAgentsSessionRetriesExhausted` — no `refusal` variant.
(`src/anthropic/types/beta/sessions/beta_managed_agents_session_status_idle_event.py`)
- `BetaManagedAgentsSpanModelRequestEndEvent` exposes `is_error` and `model_usage`
but no `stop_reason` / `stop_details`.
(`src/anthropic/types/beta/sessions/beta_managed_agents_span_model_request_end_event.py`)
For comparison, the Messages API `Message` carries `stop_reason` (includes `"refusal"`)
and `stop_details` (`RefusalStopDetails`). The `BetaStopReason` enum also lists
`"refusal"`, but the session-idle event's `stop_reason` union does not include it.
## Initial analysis — needs confirmation
A prompt that triggers a refusal on the Messages API appears, in a Managed Agents
session, to produce a turn with little/no text after which the session goes idle,
with no event field indicating a refusal occurred.
Possible resolution: include a `refusal` variant in the `session.status_idle`
`stop_reason` union, and/or surface the underlying model `stop_reason` / `stop_details`
on `span.model_request_end`.
Hướng dẫn đóng góp
Đánh giá
Issue này chưa được đánh giá.