Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Python: foundry-hosting drops request `metadata` from the stored response — `_create_response_event_stream` never passes `request` to `ResponseEventStream`

Abierto Apto para principiantes
#9,529 1 comentario 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

@its-amann ya está trabajando en esto.

Desde el 19/10/2026.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
78/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
python
Área
api, backend

Línea de trabajo

Empieza en agent_framework_foundry_hosting/_responses.py y sigue _handle_response hasta _create_response_event_stream; el issue señala que falta el argumento de solicitud para las respuestas nuevas. Comprueba cómo ResponseEventStream inicializa campos a partir de una solicitud y añade o actualiza una prueba específica para los metadatos de la respuesta creada y almacenada. El trabajo está terminado cuando los metadatos enviados con POST se conservan en los eventos de respuesta y en GET /responses/{id}.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

python triage
Description

When a client calls POST /responses on a ResponsesHostServer with a metadata object, that metadata is not present on the response object that is emitted (response.created / terminal events) or persisted, so GET /responses/{id} returns metadata: null.

This breaks the standard OpenAI Responses contract, where request metadata is echoed onto the response, and prevents clients from using response metadata to label/correlate turns (for example, recording per-turn settings and reading them back when listing conversation history).

Client impact (.NET SDK)

Our client is a .NET service using Azure.AI.Projects / Azure.AI.Extensions.OpenAI (2.1.0-beta.4). It sends the metadata when creating the response (CreateResponseOptions.Metadata), and when listing conversation history it reads it back per turn:

  1. GetProjectConversationItemsAsync(conversationId) to enumerate message items (items carry no metadata, only ResponseId).
  2. GetResponseAsync(new GetResponseOptions(responseId)) and read result.Value.Metadata.

Because the hosted agent never seeds metadata onto the response, result.Value.Metadata is always empty for responses produced by a ResponsesHostServer-hosted agent, so the .NET client has no way to recover the per-turn values it sent.

Root cause

azure-ai-agentserver-responses already supports this: ResponseEventStream(request=...) seeds metadata, background, previous_response_id, conversation, model and agent_reference from the request.

However, in agent_framework_foundry_hosting/_responses.py the stream is created without the request:

def _create_response_event_stream(context: ResponseContext) -> ResponseEventStream:
    """Create a response stream seeded from recovery state when available."""
    if context.is_recovery:
        persisted_response = context.persisted_response
        if persisted_response is not None:
            return ResponseEventStream(response=persisted_response, response_id=context.response_id)
    return ResponseEventStream(response_id=context.response_id)

and ResponsesHostServer._handle_response(self, request, context, cancellation_signal) calls _create_response_event_stream(context) even though request is in scope. The same code is still present on main.

Steps to reproduce
  1. Host any agent or workflow with ResponsesHostServer.
  2. POST /responses with "metadata": {"foo": "bar"} and "store": true.
  3. Inspect the response.created event, or GET /responses/{id}.

Expected: metadata == {"foo": "bar"}
Actual: metadata is null / missing.

Suggested fix

Pass the request through for fresh (non-recovery) responses:

def _create_response_event_stream(context: ResponseContext, request: CreateResponse) -> ResponseEventStream:
    if context.is_recovery:
        persisted_response = context.persisted_response
        if persisted_response is not None:
            return ResponseEventStream(response=persisted_response, response_id=context.response_id)
    return ResponseEventStream(request=request, response_id=context.response_id)

and call _create_response_event_stream(context, request) from _handle_response.

Current workaround

Monkey-patching the private agent_framework_foundry_hosting._responses._create_response_event_stream to stamp metadata onto stream.response["metadata"] before response.created is emitted. This depends on a private symbol and breaks on upgrade.

Related: #9265 (public per-request / stream-wrapping hooks).

Versions
  • agent-framework-foundry-hosting 1.0.0b260903 (also verified on main)
  • agent-framework 1.18.x
  • azure-ai-agentserver-responses 2.2.0b1, azure-ai-agentserver-core 2.1.0
  • Python 3.14
Lenguaje dominante
Python
Estrellas
14.2k
Forks
2.5k
Merge medio
2 d 9 h
PR fusionados (30 d)
392

Preparar el entorno

Abrir en Codespaces

Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de microsoft/agent-framework

Todos los issues de microsoft/agent-framework

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.