Python: foundry-hosting drops request `metadata` from the stored response — `_create_response_event_stream` never passes `request` to `ResponseEventStream`
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
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
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:
GetProjectConversationItemsAsync(conversationId)to enumerate message items (items carry no metadata, onlyResponseId).GetResponseAsync(new GetResponseOptions(responseId))and readresult.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
- Host any agent or workflow with
ResponsesHostServer. POST /responseswith"metadata": {"foo": "bar"}and"store": true.- Inspect the
response.createdevent, orGET /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-hosting1.0.0b260903 (also verified onmain)agent-framework1.18.xazure-ai-agentserver-responses2.2.0b1,azure-ai-agentserver-core2.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
Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de microsoft/agent-framework
-
Python: [Bug]: A non-positive MCP request timeout silently disables the timeoutPeut-être pris @jpalvarezl l’a pris il y a 11 jours. Ouvertepython
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
microsoft/agent-framework#9313 · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
-
.NET: Proposal: add an llms.txtOuverte.NET python triage
Difficulté 1/5 Moins d'une heure Accessibilité débutants 85/100
microsoft/agent-framework#9092 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Python: raw-data content mappings lose annotations and attachment metadataPeut-être pris @moonbox3 l’a pris il y a 25 jours. Ouvertepython triage
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
microsoft/agent-framework#8632 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
Python: Clarify when to use platformPeut-être pris @eavanvalkenburg l’a pris il y a 24 jours. Ouvertepython triage
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
microsoft/agent-framework#8599 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
.NET compaction documentation
Difficulté 1/5 Moins d'une heure Accessibilité débutants 82/100
microsoft/agent-framework#4629 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de microsoft/agent-framework
Issues similaires
-
Project submission:Ouverte
Difficulté 1/5 Moins d'une heure Accessibilité débutants 72/100
slavakurilyak/awesome-ai-agents#845 ·
Les mainteneurs répondent en général sous 1 jour
-
tests: pin that the atomic writers in utils/paths.py stage the temporary file in the target's directoryPeut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouvertedifficulty:2 enhancement good first issue
Difficulté 1/5 1-3 heures Accessibilité débutants 92/100
MakazhanAlpamys/Soup#2178 ·
Les mainteneurs répondent en général sous 1 jour
-
[BUG] dcg.waggr permutation p-values are folded twice, so near-zero scores get the smallest p-valuesOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
scverse/rapids-singlecell#854 ·
Les mainteneurs répondent en général sous 1 jour
-
Slang input: int8_t4_packed and uint8_t4_packed are copied into CrossGLPeut-être pris @ninglinLiu l’a pris aujourd’hui. Ouvertearea:frontend backend:slang bug direction:input
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
Les mainteneurs répondent en général sous 1 jour
-
random_elements(unique=True) on an OrderedDict: ZeroDivisionError once only zero weights remain, AssertionError with use_weighting=FalsePeut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
Les mainteneurs répondent en général sous 13 jours