Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 4 additions & 8 deletions aisuite-js/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,7 @@ import { Client } from 'aisuite';

const client = new Client({
openai: {
apiKey: process.env.OPENAI_API_KEY,
audio: true // Enable Whisper ASR support
apiKey: process.env.OPENAI_API_KEY,
},
anthropic: { apiKey: process.env.ANTHROPIC_API_KEY },
deepgram: { apiKey: process.env.DEEPGRAM_API_KEY },
Expand Down Expand Up @@ -154,8 +153,7 @@ try {
// Initialize client with audio support for OpenAI
const client = new Client({
openai: {
apiKey: process.env.OPENAI_API_KEY,
audio: true // Required for Whisper ASR
apiKey: process.env.OPENAI_API_KEY,
},
deepgram: { apiKey: process.env.DEEPGRAM_API_KEY }
});
Expand All @@ -170,7 +168,7 @@ const deepgramResponse = await client.audio.transcriptions.create({
speaker_labels: true,
});

// Using OpenAI Whisper (requires audio: true in config)
// Using OpenAI Whisper
const openaiResponse = await client.audio.transcriptions.create({
model: 'openai:whisper-1',
file: audioBuffer,
Expand Down Expand Up @@ -214,8 +212,7 @@ const client = new Client({
openai?: {
apiKey: string;
baseURL?: string;
organization?: string;
audio?: boolean; // Enable Whisper ASR support
organization?: string;
},
anthropic?: {
apiKey: string;
Expand Down Expand Up @@ -280,7 +277,6 @@ client.isASRProviderConfigured('deepgram'); // true
- Streaming tool calls require manual accumulation of arguments
- ASR support is limited to OpenAI Whisper (requires explicit audio configuration) and Deepgram
- Some provider-specific ASR features might require using provider-specific parameters
- OpenAI Whisper support requires additional `audio: true` configuration

## Development

Expand Down
3 changes: 1 addition & 2 deletions aisuite-js/examples/openai-asr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ async function main() {
// Initialize the client with OpenAI configuration
const client = new Client({
openai: {
apiKey: process.env.OPENAI_API_KEY || "your-openai-api-key",
audio: true,
apiKey: process.env.OPENAI_API_KEY!,
},
});

Expand Down
6 changes: 2 additions & 4 deletions aisuite-js/src/asr-providers/deepgram/provider.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { createClient, DeepgramClient } from "@deepgram/sdk";
import { BaseASRProvider } from "../../core/base-asr-provider";
import { ASRProvider } from "../../core/base-asr-provider";
import {
TranscriptionRequest,
TranscriptionResult,
Expand All @@ -10,13 +10,11 @@ import { adaptResponse } from "./adapters";
import { AISuiteError } from "../../core/errors";
import * as fs from "fs";

export class DeepgramASRProvider extends BaseASRProvider {
export class DeepgramASRProvider implements ASRProvider {
public readonly name = "deepgram";
private client: DeepgramClient;

constructor(config: DeepgramConfig) {
super();

// Use the new createClient API instead of the deprecated Deepgram constructor
this.client = createClient({
key: config.apiKey,
Expand Down
6 changes: 1 addition & 5 deletions aisuite-js/src/asr-providers/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,2 @@
export { DeepgramASRProvider } from "./deepgram";
export { OpenAIASRProvider } from "./openai";
export type {
OpenAIConfig,
DeepgramConfig,
} from "../types";
export type { DeepgramConfig } from "../types";
44 changes: 0 additions & 44 deletions aisuite-js/src/asr-providers/openai/adapters.ts

This file was deleted.

2 changes: 0 additions & 2 deletions aisuite-js/src/asr-providers/openai/index.ts

This file was deleted.

72 changes: 0 additions & 72 deletions aisuite-js/src/asr-providers/openai/provider.ts

This file was deleted.

38 changes: 0 additions & 38 deletions aisuite-js/src/asr-providers/openai/types.ts

This file was deleted.

17 changes: 7 additions & 10 deletions aisuite-js/src/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,32 +7,29 @@ import {
TranscriptionRequest,
TranscriptionResult,
} from "./types";
import { BaseProvider } from "./core/base-provider";
import { BaseASRProvider } from "./core/base-asr-provider";
import { Provider } from "./core/base-provider";
import { ASRProvider } from "./core/base-asr-provider";
import { parseModel } from "./core/model-parser";
import { ProviderNotConfiguredError } from "./core/errors";
import { OpenAIProvider } from "./providers/openai";
import { AnthropicProvider } from "./providers/anthropic";
import { MistralProvider } from "./providers/mistral";
import { GroqProvider } from "./providers/groq";
import { DeepgramASRProvider } from "./asr-providers/deepgram";
import { OpenAIASRProvider } from "./asr-providers/openai";

export class Client {
private chatProviders: Map<string, BaseProvider> = new Map();
private asrProviders: Map<string, BaseASRProvider> = new Map();
private chatProviders: Map<string, Provider> = new Map();
private asrProviders: Map<string, ASRProvider> = new Map();

constructor(config: ProviderConfigs) {
this.initializeProviders(config);
}

private initializeProviders(config: ProviderConfigs): void {
if (config.openai) {
if (config.openai.audio) {
this.asrProviders.set("openai", new OpenAIASRProvider(config.openai));
} else {
this.chatProviders.set("openai", new OpenAIProvider(config.openai));
}
const openaiProvider = new OpenAIProvider(config.openai);
this.chatProviders.set("openai", openaiProvider);
this.asrProviders.set("openai", openaiProvider);
}

if (config.anthropic) {
Expand Down
10 changes: 5 additions & 5 deletions aisuite-js/src/core/base-asr-provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,19 @@ import {
RequestOptions
} from '../types';

export abstract class BaseASRProvider {
abstract readonly name: string;
export interface ASRProvider {
readonly name: string;

abstract transcribe(
transcribe(
request: TranscriptionRequest,
options?: RequestOptions
): Promise<TranscriptionResult>;

abstract validateParams(
validateParams(
params: { [key: string]: any }
): void;

abstract translateParams(
translateParams(
params: { [key: string]: any }
): { [key: string]: any };
}
8 changes: 4 additions & 4 deletions aisuite-js/src/core/base-provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@ import {
RequestOptions
} from '../types';

export abstract class BaseProvider {
abstract readonly name: string;
export interface Provider {
readonly name: string;

abstract chatCompletion(
chatCompletion(
request: ChatCompletionRequest,
options?: RequestOptions
): Promise<ChatCompletionResponse>;

abstract streamChatCompletion(
streamChatCompletion(
request: ChatCompletionRequest,
options?: RequestOptions
): AsyncIterable<ChatCompletionChunk>;
Expand Down
5 changes: 1 addition & 4 deletions aisuite-js/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,4 @@ export {
MistralProvider,
} from "./providers";

export {
DeepgramASRProvider,
OpenAIASRProvider,
} from "./asr-providers";
export { DeepgramASRProvider } from "./asr-providers";
5 changes: 2 additions & 3 deletions aisuite-js/src/providers/anthropic/provider.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import Anthropic from '@anthropic-ai/sdk';
import { BaseProvider } from '../../core/base-provider';
import { Provider } from '../../core/base-provider';
import {
ChatCompletionRequest,
ChatCompletionResponse,
Expand All @@ -11,12 +11,11 @@ import { adaptRequest, adaptResponse, adaptStreamEvent } from './adapters';
import { AISuiteError } from '../../core/errors';
import { generateId } from '../../utils/streaming';

export class AnthropicProvider extends BaseProvider {
export class AnthropicProvider implements Provider {
public readonly name = 'anthropic';
private client: Anthropic;

constructor(config: AnthropicConfig) {
super();
this.client = new Anthropic({
apiKey: config.apiKey,
baseURL: config.baseURL,
Expand Down
6 changes: 2 additions & 4 deletions aisuite-js/src/providers/groq/provider.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import Groq from "groq-sdk";
import { BaseProvider } from "../../core/base-provider";
import { Provider } from "../../core/base-provider";
import {
ChatCompletionRequest,
ChatCompletionResponse,
Expand All @@ -11,13 +11,11 @@ import { adaptRequest, adaptResponse, adaptStreamResponse } from "./adapters";
import { AISuiteError } from "../../core/errors";
import { generateId } from "../../utils/streaming";

export class GroqProvider extends BaseProvider {
export class GroqProvider implements Provider {
public readonly name = "groq";
private client: Groq;

constructor(config: GroqConfig) {
super();

this.client = new Groq({
apiKey: config.apiKey,
dangerouslyAllowBrowser: config.dangerouslyAllowBrowser || false, // Allow browser usage for chat app
Expand Down
Loading