|
|
|
@ -152,23 +152,30 @@ export async function createProvidersFromCurrentOptions(): Promise<EmbeddingProv
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Create OpenAI provider if API key is configured
|
|
|
|
// Create OpenAI provider even without API key (for OpenAI-compatible endpoints)
|
|
|
|
const openaiApiKey = await options.getOption('openaiApiKey');
|
|
|
|
const openaiApiKey = await options.getOption('openaiApiKey');
|
|
|
|
if (openaiApiKey) {
|
|
|
|
const openaiBaseUrl = await options.getOption('openaiBaseUrl');
|
|
|
|
const openaiModel = await options.getOption('openaiEmbeddingModel') || 'text-embedding-3-small';
|
|
|
|
|
|
|
|
const openaiBaseUrl = await options.getOption('openaiBaseUrl') || 'https://api.openai.com/v1';
|
|
|
|
// Only create OpenAI provider if base URL is set or API key is provided
|
|
|
|
|
|
|
|
if (openaiApiKey || openaiBaseUrl) {
|
|
|
|
|
|
|
|
const openaiModel = await options.getOption('openaiEmbeddingModel')
|
|
|
|
|
|
|
|
const finalBaseUrl = openaiBaseUrl || 'https://api.openai.com/v1';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!openaiApiKey) {
|
|
|
|
|
|
|
|
log.info('Creating OpenAI embedding provider without API key. This may cause issues with official OpenAI endpoints.');
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const openaiProvider = new OpenAIEmbeddingProvider({
|
|
|
|
const openaiProvider = new OpenAIEmbeddingProvider({
|
|
|
|
model: openaiModel,
|
|
|
|
model: openaiModel,
|
|
|
|
dimension: 1536,
|
|
|
|
dimension: 1536,
|
|
|
|
type: 'float32',
|
|
|
|
type: 'float32',
|
|
|
|
apiKey: openaiApiKey,
|
|
|
|
apiKey: openaiApiKey || '', // Default to empty string
|
|
|
|
baseUrl: openaiBaseUrl
|
|
|
|
baseUrl: finalBaseUrl
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
registerEmbeddingProvider(openaiProvider);
|
|
|
|
registerEmbeddingProvider(openaiProvider);
|
|
|
|
result.push(openaiProvider);
|
|
|
|
result.push(openaiProvider);
|
|
|
|
log.info(`Created OpenAI provider on-demand: ${openaiModel}`);
|
|
|
|
log.info(`Created OpenAI provider on-demand: ${openaiModel} at ${finalBaseUrl}`);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Create Voyage provider if API key is configured
|
|
|
|
// Create Voyage provider if API key is configured
|
|
|
|
@ -352,7 +359,8 @@ export function getOpenAIOptions(
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
const apiKey = options.getOption('openaiApiKey');
|
|
|
|
const apiKey = options.getOption('openaiApiKey');
|
|
|
|
if (!apiKey) {
|
|
|
|
if (!apiKey) {
|
|
|
|
throw new Error('OpenAI API key is not configured');
|
|
|
|
// Log warning but don't throw - some OpenAI-compatible endpoints don't require API keys
|
|
|
|
|
|
|
|
log.info('OpenAI API key is not configured. This may cause issues with official OpenAI endpoints.');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const baseUrl = options.getOption('openaiBaseUrl') || PROVIDER_CONSTANTS.OPENAI.BASE_URL;
|
|
|
|
const baseUrl = options.getOption('openaiBaseUrl') || PROVIDER_CONSTANTS.OPENAI.BASE_URL;
|
|
|
|
@ -377,7 +385,7 @@ export function getOpenAIOptions(
|
|
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
return {
|
|
|
|
// Connection settings
|
|
|
|
// Connection settings
|
|
|
|
apiKey,
|
|
|
|
apiKey: apiKey || '', // Default to empty string if no API key
|
|
|
|
baseUrl,
|
|
|
|
baseUrl,
|
|
|
|
|
|
|
|
|
|
|
|
// Provider metadata
|
|
|
|
// Provider metadata
|
|
|
|
|