import { Injectable } from '@nestjs/common'; import OpenAI from 'openai'; import { EMBEDDING_DIM, env } from '../config/env'; import { EmbedKind, EmbeddingProvider } from './types'; @Injectable() export class OpenAiEmbeddingProvider extends EmbeddingProvider { readonly name = `openai:${env.llm.embeddingModel}`; readonly dimensions = EMBEDDING_DIM; private readonly client = new OpenAI({ apiKey: env.llm.apiKey }); async embed(texts: string[], _kind: EmbedKind = 'passage'): Promise { if (texts.length === 0) return []; const res = await this.client.embeddings.create({ model: env.llm.embeddingModel, input: texts, dimensions: EMBEDDING_DIM, // 스키마와 차원을 맞춘다 }); return res.data.map((d) => d.embedding as number[]); } }