Stream wrappers cannot finalize telemetry for generator-backed streams
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 48/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Stack tecnologico
- python
- Ambito
- observability
Direzione di ricerca
Inizia leggendo le implementazioni di SyncStreamWrapper e AsyncStreamWrapper in opentelemetry.util.genai.stream, quindi esamina l'utilizzo basato su generatori descritto per qwen-agent e il pacchetto qwenpaw proposto in #311. Il lavoro è completato quando gli stream basati su generatori finalizzano la telemetria quando il consumo si interrompe prematuramente, preservando al contempo la forma originale di async_generator e gestendo il comportamento di chiusura degli async generator.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
SyncStreamWrapper / AsyncStreamWrapper are wrapt proxies that finalize telemetry from close() / __exit__ / __aexit__ and from iteration reaching its end. When the wrapped stream is a generator and the caller stops consuming it early, none of those run: the caller drops the proxy, and GC finalizes the underlying generator directly, so the span is never ended.
This is normal traffic for agent instrumentations that wrap generator-returning APIs. For example QwenPaw's ACP server breaks out of the async for when the client cancels a turn:
async for msg, _is_last in runner.query_handler(msgs, request=request):
if cancel_event.is_set():
break
Effects: the invoke_agent span is never exported and never recorded in gen_ai.client.operation.duration, and because the invocation attached its context at start and only detaches on finalize, later spans in the same task become children of the span that never ended.
Two related gaps:
AsyncStreamWrapperexpects the stream to exposeasync close(), but async generators exposeaclose(). Instrumentations have to overrideaclose/close/__aexit__to bridge that.- No proxy-based wrapper can catch GC teardown at all. Catching it requires the wrapper to itself be an async generator, so
GeneratorExitreaches afinally:
async def _driver():
try:
async for item in gen:
yield item
finally:
...finalize telemetry...
await gen.aclose()
This shape does finalize on the break path above, and it keeps the returned object an async_generator, which is closer to the SDK's original type than a proxy is.
Suggest a generator-aware wrapper in opentelemetry.util.genai.stream so instrumentations wrapping generator APIs (qwen-agent, the proposed qwenpaw package in #311) get correct finalization instead of each working around it.
- Lingua principale
- Python
- Stelle
- 47
- Fork
- 102
- Merge medio
- 2g 13h
- PR unite (30g)
- 111
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di open-telemetry/opentelemetry-python-genai
-
`opentelemetry-instrumentation-openai-v2` instrumentor entry point fails to loadForse già presa @lmolkova l’ha presa 1 giorno fa. Apertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
open-telemetry/opentelemetry-python-genai#997 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Support disabling OpenAI Agents native trace export through an environment variableForse già presa @123liuziming l’ha presa 10 giorni fa. Apertaenhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
open-telemetry/opentelemetry-python-genai#922 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
fix(smolagents): accept tuple inputs for messages, content, and task imagesForse già presa @SAMurai-16 l’ha presa 13 giorni fa. Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 82/100
open-telemetry/opentelemetry-python-genai#905 ·
I maintainer di solito rispondono entro 1 giorno
-
documentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
open-telemetry/opentelemetry-python-genai#857 · 1 commento · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
-
[genai-bedrock] invoke_model body passed as a file-like object: no request parameters or input messages are recordedForse già presa @SyedTashfin l’ha presa 20 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
open-telemetry/opentelemetry-python-genai#848 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di open-telemetry/opentelemetry-python-genai
Issue simili
-
infrastructure
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
NatLabRockies/H2Integrate#977 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
topoteretes/cognee#6470 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
-
area:docs priority:p2 type:docs wave:9
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 84/100
jejjohnson/radtrax#293 ·
I maintainer di solito rispondono entro 1 giorno
-
bug core plugins
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
bunkerity/bunkerweb#4121 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno