Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

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

Aperta Adatta ai principianti
#9,529 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

@its-amann ci sta già lavorando.

Dal 19/10/2026.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
78/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
python
Ambito
api, backend

Direzione di ricerca

Inizia da agent_framework_foundry_hosting/_responses.py e segui _handle_response fino a _create_response_event_stream; la issue segnala che manca l’argomento della richiesta per le nuove risposte. Controlla come ResponseEventStream inizializza i campi a partire da una richiesta e aggiungi o aggiorna un test mirato per i metadati della risposta creata e memorizzata. Il lavoro è completato quando i metadati inviati con POST vengono mantenuti negli eventi della risposta e in GET /responses/{id}.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

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
Lingua principale
Python
Stelle
14.2k
Fork
2.5k
Merge medio
2g 9h
PR unite (30g)
369

Preparare l'ambiente

Apri in Codespaces

Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di microsoft/agent-framework

Tutte le issue di microsoft/agent-framework

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.