Files
openclaw/extensions/openai/realtime-quicksilver-session-limit.ts
Peter Steinberger dc60a9442d feat(talk): support GPT-Live over gateway relay (#115831)
* feat(talk): add GPT-Live gateway relay peer

* fix(talk): ignore duplicate GPT-Live sideband audio

* fix(openai): harden GPT-Live relay startup

* fix(deps): replace vulnerable werift ip helper

* fix(deps): scope werift ip override version

* fix(openai): normalize relay startup errors

* test(ci): register GPT-Live gateway live shard

* fix(talk): tighten GPT-Live relay readiness

* fix(talk): keep relay override helper private

* fix(talk): resolve relay readiness with launch model

* fix(openai): preserve GPT-Live media clock

* fix(talk): align GPT-Live relay readiness and framing

* fix(openai): expire pending GPT-Live reservations

* fix(openai): harden GPT-Live delegation audio

* style(openai): satisfy RTP reorder lint
2026-07-29 12:54:23 -04:00

28 lines
899 B
TypeScript

// Shared process-wide cap for browser and Gateway-relay GPT-Live sessions.
const OPENAI_QUICKSILVER_MAX_SESSIONS = 8;
const reservations = new Map<unknown, number | undefined>();
export function reserveOpenAIQuicksilverSession(
owner: unknown,
opts?: { expiresAtMs?: number },
): void {
const now = Date.now();
for (const [reservedOwner, expiresAtMs] of reservations) {
if (expiresAtMs !== undefined && expiresAtMs <= now) {
reservations.delete(reservedOwner);
}
}
if (reservations.has(owner)) {
reservations.set(owner, opts?.expiresAtMs);
return;
}
if (reservations.size >= OPENAI_QUICKSILVER_MAX_SESSIONS) {
throw new Error("Too many concurrent OpenAI GPT-Live sessions; try again in a minute");
}
reservations.set(owner, opts?.expiresAtMs);
}
export function releaseOpenAIQuicksilverSession(owner: unknown): void {
reservations.delete(owner);
}