- Move shared extraction metrics (duration, triples, entities, empty)
to a module-level extract_metrics.py to prevent DuplicateTimeseries
when extractors run in the same ProcessGroup
- Fix tg-dump-queues losing messages by replacing asyncio.wait_for
(which cancels Pulsar futures) with asyncio.wait
- Fix graph/document embeddings store batch metrics referencing
wrong schema attributes (.vectors -> .entities/.chunks)
- Add null guard in prompt_manager for LLM returning no response
- Add null check in text_completion_client for empty LLM responses
- Add auth failure metric for malformed credentials in gateway