Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

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

Ouverte Adaptée aux débutants
#9,529 3 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

@its-amann y travaille déjà.

Depuis le 19/10/2026.

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
78/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
python
Domaine
api, backend

Piste de recherche

Commencez dans agent_framework_foundry_hosting/_responses.py et suivez _handle_response jusqu’à _create_response_event_stream ; l’issue indique que l’argument de requête manque pour les nouvelles réponses. Vérifiez comment ResponseEventStream initialise les champs à partir d’une requête et ajoutez ou mettez à jour un test ciblé sur les métadonnées de la réponse créée et stockée. Le travail est terminé lorsque les métadonnées envoyées avec POST sont conservées dans les événements de réponse et dans GET /responses/{id}.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

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
Langage dominant
Python
Étoiles
14.2k
Forks
2.5k
Merge moyen
2 j 13 h
PR mergées (30 j)
371

Préparer son environnement

Ouvrir dans Codespaces

Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de microsoft/agent-framework

Toutes les issues de microsoft/agent-framework

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

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