Skip to content

Commit 4ab0e6d

Browse files
committed
feat: inject audio module tinylm
1 parent 917bd7a commit 4ab0e6d

File tree

2 files changed

+54
-7
lines changed

2 files changed

+54
-7
lines changed

src/TinyLM.ts

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@
22
* TinyLM - Modular library for text generation and embeddings
33
*/
44

5-
import { tryGarbageCollection, detectEnvironment, EnvironmentInfo } from './utils';
6-
import { ProgressTracker } from './ProgressTracker';
7-
import { WebGPUChecker } from './WebGPUChecker';
8-
import { GenerationModule } from './GenerationModule';
9-
import { EmbeddingsModule } from './EmbeddingsModule';
5+
import { tryGarbageCollection, detectEnvironment, EnvironmentInfo } from './utils.js';
6+
import { ProgressTracker } from './ProgressTracker.js';
7+
import { WebGPUChecker } from './WebGPUChecker.js';
8+
import { GenerationModule } from './GenerationModule.js';
9+
import { EmbeddingsModule } from './EmbeddingsModule.js';
10+
import { AudioModule } from './AudioModule.js';
11+
import { AudioCreateOptions, AudioResult } from './types.js';
12+
1013

1114
import {
1215
TinyLMOptions,
@@ -18,7 +21,7 @@ import {
1821
ModelLoadOptions,
1922
EmbeddingCreateOptions,
2023
EmbeddingResult
21-
} from './types';
24+
} from './types.js';
2225

2326
/**
2427
* Main TinyLM class that provides the OpenAI-compatible API
@@ -33,6 +36,8 @@ export class TinyLM {
3336
// Modules
3437
private generationModule: GenerationModule;
3538
private embeddingsModule: EmbeddingsModule;
39+
private audioModule: AudioModule;
40+
3641

3742
// API structure
3843
readonly chat: {
@@ -46,6 +51,13 @@ export class TinyLM {
4651
create: (options: EmbeddingCreateOptions) => Promise<EmbeddingResult>;
4752
};
4853

54+
// Audio API
55+
readonly audio: {
56+
speech: {
57+
create: (options: AudioCreateOptions) => Promise<AudioResult | AsyncGenerator<AudioResult, void, void>>;
58+
};
59+
};
60+
4961
readonly models: {
5062
load: (options: ModelLoadOptions) => Promise<any>;
5163
offload: (options: { model: string }) => Promise<boolean>;
@@ -61,7 +73,7 @@ export class TinyLM {
6173
*/
6274
constructor(options: TinyLMOptions = {}) {
6375
this.options = {
64-
progressCallback: options.progressCallback || (() => {}),
76+
progressCallback: options.progressCallback || (() => { }),
6577
progressThrottleTime: options.progressThrottleTime || 100,
6678
...options
6779
} as Required<TinyLMOptions>;
@@ -79,6 +91,7 @@ export class TinyLM {
7991
// Initialize modules
8092
this.generationModule = new GenerationModule(this);
8193
this.embeddingsModule = new EmbeddingsModule(this);
94+
this.audioModule = new AudioModule(this);
8295

8396
// Create API structure similar to OpenAI
8497
this.chat = {
@@ -92,6 +105,13 @@ export class TinyLM {
92105
create: this.embeddingsModule.create.bind(this.embeddingsModule)
93106
};
94107

108+
// Audio API
109+
this.audio = {
110+
speech: {
111+
create: this.audioModule.create.bind(this.audioModule)
112+
}
113+
};
114+
95115
// Model management API
96116
this.models = {
97117
load: this.generationModule.loadModel.bind(this.generationModule),
@@ -173,6 +193,10 @@ export class TinyLM {
173193
: undefined
174194
});
175195

196+
await this.audioModule.init({
197+
defaultModel: options.speechModel
198+
});
199+
176200
this.initialized = true;
177201
}
178202
return this;

src/types.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,7 @@ export interface ModelLoadOptions {
259259
export interface InitOptions {
260260
models?: string[];
261261
embeddingModels?: string[];
262+
speechModel?: string;
262263
lazyLoad?: boolean;
263264
[key: string]: any;
264265
}
@@ -290,3 +291,25 @@ export interface EmbeddingResult {
290291
total_tokens: number;
291292
};
292293
}
294+
295+
/**
296+
* Interface for audio creation options
297+
*/
298+
export interface AudioCreateOptions {
299+
model: string;
300+
input: string;
301+
voice?: string;
302+
speed?: number;
303+
response_format?: 'mp3' | 'wav' | 'ogg';
304+
stream?: boolean;
305+
}
306+
307+
/**
308+
* Interface for audio result
309+
*/
310+
export interface AudioResult {
311+
type: string;
312+
size: number;
313+
arrayBuffer: () => Promise<ArrayBuffer>;
314+
blob?: () => Blob;
315+
}

0 commit comments

Comments
 (0)