import { Injectable, Logger } from '@nestjs/common';
import { OpenAIEmbeddings } from '@langchain/openai';
import { ModelConfig } from '../model-config/model-config.entity';

@Injectable()
export class EmbeddingService {
  private readonly logger = new Logger(EmbeddingService.name);

  async getEmbeddings(text: string, config: ModelConfig): Promise<number[]> {
    try {
      const embeddings = new OpenAIEmbeddings({
        openAIApiKey: config.apiKey || 'ollama',
        configuration: {
          baseURL: config.baseUrl,
        },
        modelName: config.modelId,
      });

      const vector = await embeddings.embedQuery(text);
      return vector;
    } catch (error) {
      this.logger.error(
        `Failed to generate embeddings using model ${config.modelId}`,
        error,
      );
      throw error;
    }
  }
}
