adding logs
This commit is contained in:
parent
cebf922608
commit
88ca1d517c
2 changed files with 17 additions and 7 deletions
|
|
@ -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 });
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue