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 {
      // ほとんどの設定が OpenAI インターフェースと互換性があると仮定
      const embeddings = new OpenAIEmbeddings({
        openAIApiKey: config.apiKey || 'ollama', // ローカルモデルの場合は key が不要な場合がある
        configuration: {
          baseURL: config.baseUrl,
        },
        modelName: config.modelId, // modelId に修正
      });

      // テキストが長すぎる問題の処理？LangChain は通常、自動的に処理するかエラーを出力します。
      // ここでは簡略化し、直接呼び出します
      const vector = await embeddings.embedQuery(text);
      return vector;
    } catch (error) {
      this.logger.error(
        `Failed to generate embeddings using model ${config.modelId}`,
        error,
      ); // modelId に修正
      throw error;
    }
  }
}
