adding logs

This commit is contained in:
akdeb 2026-04-17 12:19:55 +05:30
parent cebf922608
commit 88ca1d517c
2 changed files with 17 additions and 7 deletions

View file

@ -97,6 +97,7 @@ async function synthesizeSpeech(env: Env, text: string): Promise<Response> {
export class ElatoOpenAiVoiceAgent extends DurableObject<Env> { export class ElatoOpenAiVoiceAgent extends DurableObject<Env> {
private audioBuffer = new Uint8Array(0); private audioBuffer = new Uint8Array(0);
private isGenerating = false; private isGenerating = false;
private opusPromise: Promise<Awaited<ReturnType<typeof createOpusPacketizer>>> | null = null;
constructor(ctx: DurableObjectState, env: Env) { constructor(ctx: DurableObjectState, env: Env) {
super(ctx, env); super(ctx, env);
@ -122,10 +123,17 @@ export class ElatoOpenAiVoiceAgent extends DurableObject<Env> {
this.audioBuffer = new Uint8Array(0); this.audioBuffer = new Uint8Array(0);
} }
private getOpusPacketizer(websocket: WebSocket) {
if (!this.opusPromise) {
this.opusPromise = createOpusPacketizer((packet) => websocket.send(packet));
}
return this.opusPromise;
}
private async handleTurn( private async handleTurn(
websocket: WebSocket, websocket: WebSocket,
opus: Awaited<ReturnType<typeof createOpusPacketizer>>,
) { ) {
const opus = await this.getOpusPacketizer(websocket);
const pcm = this.audioBuffer; const pcm = this.audioBuffer;
this.resetBufferedAudio(); this.resetBufferedAudio();
@ -184,7 +192,6 @@ export class ElatoOpenAiVoiceAgent extends DurableObject<Env> {
const pair = new WebSocketPair(); const pair = new WebSocketPair();
const [client, server] = Object.values(pair); const [client, server] = Object.values(pair);
server.accept(); server.accept();
const opus = await createOpusPacketizer((packet) => server.send(packet));
server.send(JSON.stringify(createAuthMessage())); server.send(JSON.stringify(createAuthMessage()));
@ -210,7 +217,7 @@ export class ElatoOpenAiVoiceAgent extends DurableObject<Env> {
} }
this.isGenerating = true; this.isGenerating = true;
try { try {
await this.handleTurn(server, opus); await this.handleTurn(server);
} catch { } catch {
server.send(createServerMessage("RESPONSE.ERROR")); server.send(createServerMessage("RESPONSE.ERROR"));
} finally { } finally {
@ -236,7 +243,10 @@ export class ElatoOpenAiVoiceAgent extends DurableObject<Env> {
server.addEventListener("close", () => { server.addEventListener("close", () => {
this.isGenerating = false; this.isGenerating = false;
this.resetBufferedAudio(); this.resetBufferedAudio();
opus.close(); if (this.opusPromise) {
void this.opusPromise.then((opus) => opus.close()).catch(() => {});
this.opusPromise = null;
}
}); });
return new Response(null, { status: 101, webSocket: client }); return new Response(null, { status: 101, webSocket: client });

View file

@ -1,4 +1,4 @@
name = "elato-cloudflare-voice" name = "elato"
main = "src/index.ts" main = "src/index.ts"
compatibility_date = "2026-04-17" compatibility_date = "2026-04-17"
compatibility_flags = ["nodejs_compat"] compatibility_flags = ["nodejs_compat"]
@ -16,5 +16,5 @@ new_sqlite_classes = ["ElatoOpenAiVoiceAgent"]
[observability] [observability]
[observability.logs] [observability.logs]
enabled = false enabled = true
invocation_logs = true invocation_logs = true