Skip to content

Commit 695242a

Browse files
Merge pull request #249 from tavinashb/main
feat(asr): refactor OpenAI ASR integration, add Deepgram/OpenAI ASR adapters, and polish provider tests
2 parents 793b386 + 545e3e8 commit 695242a

22 files changed

Lines changed: 308 additions & 327 deletions

File tree

aisuite-js/README.md

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,7 @@ import { Client } from 'aisuite';
2828

2929
const client = new Client({
3030
openai: {
31-
apiKey: process.env.OPENAI_API_KEY,
32-
audio: true // Enable Whisper ASR support
31+
apiKey: process.env.OPENAI_API_KEY,
3332
},
3433
anthropic: { apiKey: process.env.ANTHROPIC_API_KEY },
3534
deepgram: { apiKey: process.env.DEEPGRAM_API_KEY },
@@ -154,8 +153,7 @@ try {
154153
// Initialize client with audio support for OpenAI
155154
const client = new Client({
156155
openai: {
157-
apiKey: process.env.OPENAI_API_KEY,
158-
audio: true // Required for Whisper ASR
156+
apiKey: process.env.OPENAI_API_KEY,
159157
},
160158
deepgram: { apiKey: process.env.DEEPGRAM_API_KEY }
161159
});
@@ -170,7 +168,7 @@ const deepgramResponse = await client.audio.transcriptions.create({
170168
speaker_labels: true,
171169
});
172170

173-
// Using OpenAI Whisper (requires audio: true in config)
171+
// Using OpenAI Whisper
174172
const openaiResponse = await client.audio.transcriptions.create({
175173
model: 'openai:whisper-1',
176174
file: audioBuffer,
@@ -214,8 +212,7 @@ const client = new Client({
214212
openai?: {
215213
apiKey: string;
216214
baseURL?: string;
217-
organization?: string;
218-
audio?: boolean; // Enable Whisper ASR support
215+
organization?: string;
219216
},
220217
anthropic?: {
221218
apiKey: string;
@@ -280,7 +277,6 @@ client.isASRProviderConfigured('deepgram'); // true
280277
- Streaming tool calls require manual accumulation of arguments
281278
- ASR support is limited to OpenAI Whisper (requires explicit audio configuration) and Deepgram
282279
- Some provider-specific ASR features might require using provider-specific parameters
283-
- OpenAI Whisper support requires additional `audio: true` configuration
284280

285281
## Development
286282

aisuite-js/examples/openai-asr.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ async function main() {
66
// Initialize the client with OpenAI configuration
77
const client = new Client({
88
openai: {
9-
apiKey: process.env.OPENAI_API_KEY || "your-openai-api-key",
10-
audio: true,
9+
apiKey: process.env.OPENAI_API_KEY!,
1110
},
1211
});
1312

aisuite-js/src/asr-providers/deepgram/provider.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { createClient, DeepgramClient } from "@deepgram/sdk";
2-
import { BaseASRProvider } from "../../core/base-asr-provider";
2+
import { ASRProvider } from "../../core/base-asr-provider";
33
import {
44
TranscriptionRequest,
55
TranscriptionResult,
@@ -10,13 +10,11 @@ import { adaptResponse } from "./adapters";
1010
import { AISuiteError } from "../../core/errors";
1111
import * as fs from "fs";
1212

13-
export class DeepgramASRProvider extends BaseASRProvider {
13+
export class DeepgramASRProvider implements ASRProvider {
1414
public readonly name = "deepgram";
1515
private client: DeepgramClient;
1616

1717
constructor(config: DeepgramConfig) {
18-
super();
19-
2018
// Use the new createClient API instead of the deprecated Deepgram constructor
2119
this.client = createClient({
2220
key: config.apiKey,
Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,2 @@
11
export { DeepgramASRProvider } from "./deepgram";
2-
export { OpenAIASRProvider } from "./openai";
3-
export type {
4-
OpenAIConfig,
5-
DeepgramConfig,
6-
} from "../types";
2+
export type { DeepgramConfig } from "../types";

aisuite-js/src/asr-providers/openai/adapters.ts

Lines changed: 0 additions & 44 deletions
This file was deleted.

aisuite-js/src/asr-providers/openai/index.ts

Lines changed: 0 additions & 2 deletions
This file was deleted.

aisuite-js/src/asr-providers/openai/provider.ts

Lines changed: 0 additions & 72 deletions
This file was deleted.

aisuite-js/src/asr-providers/openai/types.ts

Lines changed: 0 additions & 38 deletions
This file was deleted.

aisuite-js/src/client.ts

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,32 +7,29 @@ import {
77
TranscriptionRequest,
88
TranscriptionResult,
99
} from "./types";
10-
import { BaseProvider } from "./core/base-provider";
11-
import { BaseASRProvider } from "./core/base-asr-provider";
10+
import { Provider } from "./core/base-provider";
11+
import { ASRProvider } from "./core/base-asr-provider";
1212
import { parseModel } from "./core/model-parser";
1313
import { ProviderNotConfiguredError } from "./core/errors";
1414
import { OpenAIProvider } from "./providers/openai";
1515
import { AnthropicProvider } from "./providers/anthropic";
1616
import { MistralProvider } from "./providers/mistral";
1717
import { GroqProvider } from "./providers/groq";
1818
import { DeepgramASRProvider } from "./asr-providers/deepgram";
19-
import { OpenAIASRProvider } from "./asr-providers/openai";
2019

2120
export class Client {
22-
private chatProviders: Map<string, BaseProvider> = new Map();
23-
private asrProviders: Map<string, BaseASRProvider> = new Map();
21+
private chatProviders: Map<string, Provider> = new Map();
22+
private asrProviders: Map<string, ASRProvider> = new Map();
2423

2524
constructor(config: ProviderConfigs) {
2625
this.initializeProviders(config);
2726
}
2827

2928
private initializeProviders(config: ProviderConfigs): void {
3029
if (config.openai) {
31-
if (config.openai.audio) {
32-
this.asrProviders.set("openai", new OpenAIASRProvider(config.openai));
33-
} else {
34-
this.chatProviders.set("openai", new OpenAIProvider(config.openai));
35-
}
30+
const openaiProvider = new OpenAIProvider(config.openai);
31+
this.chatProviders.set("openai", openaiProvider);
32+
this.asrProviders.set("openai", openaiProvider);
3633
}
3734

3835
if (config.anthropic) {

aisuite-js/src/core/base-asr-provider.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,19 @@ import {
44
RequestOptions
55
} from '../types';
66

7-
export abstract class BaseASRProvider {
8-
abstract readonly name: string;
7+
export interface ASRProvider {
8+
readonly name: string;
99

10-
abstract transcribe(
10+
transcribe(
1111
request: TranscriptionRequest,
1212
options?: RequestOptions
1313
): Promise<TranscriptionResult>;
1414

15-
abstract validateParams(
15+
validateParams(
1616
params: { [key: string]: any }
1717
): void;
1818

19-
abstract translateParams(
19+
translateParams(
2020
params: { [key: string]: any }
2121
): { [key: string]: any };
2222
}

0 commit comments

Comments
 (0)