OpenAIEmbeddingProvider.ts•2.47 kB
// OpenAI Embedding Provider
// Users should implement this provider to use OpenAI embeddings
import { BaseEmbeddingProvider } from '../BaseEmbeddingProvider.js';
import { PROVIDER_CONFIG, PROVIDER_MODEL_DIMENSIONS } from '../../../core/config.js';
/**
* OpenAI Embedding Provider Implementation
* Uses OpenAI's text-embedding models
*
* To implement:
* 1. Install OpenAI SDK: npm install openai
* 2. Set OPENAI_API_KEY in environment
* 3. Implement generateEmbeddingsInternal method
*/
export class OpenAIEmbeddingProvider extends BaseEmbeddingProvider {
protected getProviderType(): string {
return 'openai';
}
protected getDefaultModel(): string {
return PROVIDER_CONFIG.OPENAI_MODEL || 'text-embedding-3-large';
}
protected getDefaultMaxBatchSize(): number {
return 100;
}
protected isLocalProvider(): boolean {
return false;
}
async isAvailable(): Promise<boolean> {
// Check if OpenAI API key is configured
if (!PROVIDER_CONFIG.OPENAI_API_KEY) {
console.warn('OpenAI API key not configured');
return false;
}
// TODO: Implement actual availability check
// Example: Try to create a simple embedding
return true;
}
protected async generateEmbeddingsInternal(texts: string[]): Promise<number[][]> {
// TODO: Implement OpenAI embedding generation
// Example implementation:
/*
const { OpenAI } = await import('openai');
const client = new OpenAI({
apiKey: PROVIDER_CONFIG.OPENAI_API_KEY,
baseURL: PROVIDER_CONFIG.OPENAI_BASE_URL
});
const response = await client.embeddings.create({
input: texts,
model: this.getModel(),
dimensions: this.getDimensions() // For text-embedding-3-* models
});
return response.data.map(item => item.embedding);
*/
throw new Error('OpenAI provider not implemented. Please implement generateEmbeddingsInternal method.');
}
estimateCost(tokenCount: number): number {
// OpenAI pricing (approximate)
const model = this.getModel();
if (model.includes('text-embedding-3-small')) {
return tokenCount * 0.00002 / 1000; // $0.02 per 1M tokens
} else if (model.includes('text-embedding-3-large')) {
return tokenCount * 0.00013 / 1000; // $0.13 per 1M tokens
} else {
return tokenCount * 0.0001 / 1000; // Ada v2: $0.10 per 1M tokens
}
}
}
console.log('✅ OpenAI embedding provider template loaded');