mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-26 12:26:38 -06:00
dc60a9442d
* 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
28 lines
899 B
TypeScript
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);
|
|
}
|