Skip to content

Python: Core observability cannot safely serialize workflow request_info payloads #5733

Description

@zhenbzha

Description

PR microsoft/agent-framework#3275 fixed the JSON serialization problem in the Agent Framework AG-UI integration, closing microsoft/agent-framework#3239, by serializing tool-call arguments with make_json_safe() before json.dumps().

However, the same unsafe serialization pattern still appears to exist in agent-framework-core observability. In latest agent-framework-core==1.3.0, agent_framework/observability.py::_capture_messages() still serializes OpenTelemetry message payloads with raw json.dumps(...), and the function-call branch keeps raw content.arguments.

I confirmed this is still an issue in the core workflow/request-info path: a workflow request_info event can be converted into function-call arguments containing a dataclass payload, and core observability then fails when _capture_messages() tries to serialize it with raw json.dumps(...).

Evidence from latest release

Package checked:

agent-framework-core==1.3.0
agent-framework-foundry==1.3.0
agent-framework-foundry-hosting==1.0.0a260507

In agent_framework/observability.py:

span.set_attribute(
    OtelAttr.OUTPUT_MESSAGES if output else OtelAttr.INPUT_MESSAGES,
    json.dumps(otel_messages, ensure_ascii=False),
)

The function_call branch preserves raw arguments:

case "function_call":
    return {
        "type": "tool_call",
        "id": content.call_id,
        "name": content.name,
        "arguments": content.arguments,
    }

There is no make_json_safe(...) and no default=... encoder in this path.

Why this matters

Workflow request_info events can contain framework or dataclass payloads. When those are surfaced as function-call arguments and telemetry captures messages, core observability can raise:

TypeError: Object of type HandoffAgentUserRequest is not JSON serializable

This affects Handoff/workflow scenarios outside the AG-UI adapter path, including Foundry-hosted agent scenarios where telemetry captures messages.

Expected behavior

Core observability should safely serialize message/tool-call payloads that contain dataclasses or framework objects emitted by workflow/handoff request-info flows.

Actual behavior

Core observability still passes raw function-call arguments into json.dumps(...), which can fail for dataclass/framework payloads.

Related issues / PRs

  • microsoft/agent-framework#3239 reported the AG-UI serialization failure.
  • microsoft/agent-framework#3275 fixed the AG-UI path by serializing arguments with make_json_safe(content.arguments).
  • This issue is about the remaining core observability path in agent-framework-core.

Metadata

Metadata

Assignees

Labels

bugUsage: [Issues], Target: all issues (Legacy, prefer issue type: bug)pythonUsage: [Issues, PRs], Target: PythonreproducedUsage: [Issues], Target: all issues that can be reproduced by the triage workflow

Type

Fields

No fields configured for Bug.

Projects

Status
Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions