SPB Git
1007 B · 18 lines typescript
1import OpenAI from "openai";2import { EMBEDDING_MODEL } from "@/lib/ai/router";3import { recordUsage } from "@/lib/ai/usage";4let _c: OpenAI | null = null;5export const EMBEDDING_VERSION = 1;6export async function embedTexts(texts: string[], task = "embed"): Promise<number[][]> {7  if (!texts.length) return [];8  const c = (_c ??= new OpenAI({ maxRetries: 3 }));9  const out: number[][] = []; const t0 = performance.now();10  for (let i = 0; i < texts.length; i += 64) {11    const batch = texts.slice(i, i + 64).map((t) => t.slice(0, 8000));12    const r = await c.embeddings.create({ model: EMBEDDING_MODEL, input: batch, encoding_format: "float" });13    for (const d of r.data) out.push(d.embedding);14    await recordUsage({ provider: "openai", model: EMBEDDING_MODEL, task, usage: { inputTokens: r.usage?.prompt_tokens ?? 0, outputTokens: 0, cachedTokens: 0, reasoningTokens: 0 }, costUsd: ((r.usage?.prompt_tokens ?? 0) * 0.02) / 1e6, latencyMs: performance.now() - t0, ok: true });15  }16  return out;17}18
Files · main
Menu

Theme