open-webui/backend/open_webui
Claude cffe1537ec
fix(stream): preserve ack cb on buffered frames, fail-closed on DB, per-message lock
- chatEventHandler queue now stores {event, cb} pairs. Live frames
  buffered during a replay fence used to lose their Socket.IO ack
  callback because we only pushed the event. When replayed, callback-
  style events (confirmation / execute / input) would silently never
  respond. Now we preserve cb and pass it through to chatEventHandler
  on flush.

- resume_stream ownership check is now fail-CLOSED on DB exception.
  Previous fail-open skipped the check precisely when infra was
  unstable. Client still gets a deterministic reply (empty envelopes)
  so the fence clears; it just can't resume in that specific failure
  mode. Absent chat_id still falls through to the user-scoped key
  guarantee.

- Added per-message asyncio.Lock via a WeakValueDictionary keyed by
  (user_id, message_id). Serializes seq-alloc + log-append + emit so
  concurrent emitters for the same message_id within a worker can't
  interleave and produce out-of-seq live frames. WeakValueDictionary
  cleans up automatically once no coroutine holds the lock.
  Cross-worker concurrency is still unprotected (would need a
  distributed lock) but that's an even rarer scenario.
2026-04-15 07:32:50 +00:00
..
data refac: mv backend files to /open_webui dir 2024-09-04 16:54:48 +02:00
internal refac 2026-04-12 19:41:02 -05:00
migrations refac 2026-04-01 18:26:46 -05:00
models refac 2026-04-13 21:29:03 -05:00
retrieval fix(retrieval): offload Loader.load to a worker thread so file uploads stop blocking the event loop (#23705) 2026-04-14 10:55:46 -05:00
routers fix(retrieval): offload Loader.load to a worker thread so file uploads stop blocking the event loop (#23705) 2026-04-14 10:55:46 -05:00
socket fix(stream): preserve ack cb on buffered frames, fail-closed on DB, per-message lock 2026-04-15 07:32:50 +00:00
static refac 2026-03-23 23:39:52 -05:00
storage refac 2026-04-12 19:08:30 -05:00
test refac 2026-03-17 17:58:01 -05:00
tools fix(retrieval): offload sync VECTOR_DB_CLIENT calls in async paths via AsyncVectorDBClient (#23706) 2026-04-14 10:50:18 -05:00
utils refac 2026-04-14 10:55:11 -05:00
__init__.py refac (#22987) 2026-03-24 15:41:26 -05:00
alembic.ini fix: Alembic CLI commands from failing 2025-08-15 04:17:47 -04:00
config.py refac 2026-04-14 00:07:50 -05:00
constants.py refac 2026-04-13 14:08:58 -05:00
env.py refac 2026-04-13 16:25:44 -05:00
functions.py refac: async db 2026-04-12 14:22:11 -05:00
main.py fix(middleware): replace BaseHTTPMiddleware HTTP middlewares with pure ASGI implementations (#23709) 2026-04-14 10:47:48 -05:00
tasks.py refac 2026-03-17 17:58:01 -05:00