Files
trueref-legacy/src/lib/server/embeddings/factory.ts
2026-03-27 02:23:01 +01:00

64 lines
1.8 KiB
TypeScript

/**
* Factory — create an EmbeddingProvider from a persisted EmbeddingConfig.
*
* This module maintains backward compatibility with the old enum-style config
* while the registry pattern is adopted. Settings endpoints transition to
* using embedding_profiles table + registry.ts directly.
*/
import type { EmbeddingProvider } from './provider.js';
import { NoopEmbeddingProvider } from './provider.js';
import { OpenAIEmbeddingProvider } from './openai.provider.js';
import { LocalEmbeddingProvider } from './local.provider.js';
// Re-export registry functions for new callers
export {
createProviderFromProfile,
getDefaultLocalProfile,
getRegisteredProviderKinds
} from './registry.js';
export interface EmbeddingConfig {
provider: 'openai' | 'local' | 'none';
openai?: {
baseUrl: string;
apiKey: string;
model: string;
dimensions?: number;
maxBatchSize?: number;
};
}
/** The settings table key used to persist the embedding configuration. */
export const EMBEDDING_CONFIG_KEY = 'embedding_config';
/**
* Construct the appropriate EmbeddingProvider for the given config.
* Falls back to NoopEmbeddingProvider for unknown or missing providers.
*/
export function createProviderFromConfig(config: EmbeddingConfig): EmbeddingProvider {
switch (config.provider) {
case 'openai': {
if (!config.openai) {
throw new Error('OpenAI provider selected but no openai config provided.');
}
return new OpenAIEmbeddingProvider(config.openai);
}
case 'local': {
return new LocalEmbeddingProvider();
}
case 'none':
default:
return new NoopEmbeddingProvider();
}
}
/**
* Return a default (noop) config when nothing has been stored yet.
*/
export function defaultEmbeddingConfig(): EmbeddingConfig {
return { provider: 'none' };
}
export type { EmbeddingProvider };