- embedText: call Gemini REST API (768-dim) instead of Voyage (1024-dim) - Migration: drop+recreate incidents.embedding as vector(768), update match_incidents function, swap VOYAGE_API_KEY → GOOGLE_AI_API_KEY in app_settings - Settings UI: relabel to "Google AI API Key (Embeddings)" - All call sites updated (incidents POST, similar GET) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CPf5Rc8QPx6V8KLEEgfKEQ
19 lines
720 B
TypeScript
19 lines
720 B
TypeScript
export async function embedText(text: string, apiKey?: string): Promise<number[]> {
|
|
const key = apiKey ?? process.env.GOOGLE_AI_API_KEY
|
|
if (!key) throw new Error('GOOGLE_AI_API_KEY is not set')
|
|
const res = await fetch(
|
|
`https://generativelanguage.googleapis.com/v1beta/models/text-embedding-004:embedContent?key=${key}`,
|
|
{
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify({
|
|
model: 'models/text-embedding-004',
|
|
content: { parts: [{ text }] },
|
|
}),
|
|
}
|
|
)
|
|
if (!res.ok) throw new Error(`Gemini embed failed: ${res.status}`)
|
|
const json = await res.json() as { embedding: { values: number[] } }
|
|
return json.embedding.values
|
|
}
|