26 lines
1.1 KiB
TypeScript
26 lines
1.1 KiB
TypeScript
// server/supabase/functions/embed-chunks/index.ts
|
|
// Composition root: wires the real adapters into the embed-chunks use case.
|
|
|
|
import { requireUser } from '../_shared/auth.ts'
|
|
import { createServiceRoleClient } from '../_shared/quota.ts'
|
|
import { readProviderKey } from '../_shared/provider-key.ts'
|
|
import { createOpenAIEmbeddingProvider } from '../_shared/openai-embeddings.ts'
|
|
import { createSupabaseEmbeddingUsageStore } from '../_shared/embedding-quota.ts'
|
|
import { createEmbedChunksHandler } from './handler.ts'
|
|
import { createSupabaseKnowledgeStore } from './supabase-knowledge-store.ts'
|
|
|
|
let serviceClient: ReturnType<typeof createServiceRoleClient> | null = null
|
|
function service(): ReturnType<typeof createServiceRoleClient> {
|
|
serviceClient ??= createServiceRoleClient()
|
|
return serviceClient
|
|
}
|
|
|
|
Deno.serve(createEmbedChunksHandler({
|
|
authenticate: requireUser,
|
|
embeddingProvider: () => {
|
|
const key = readProviderKey('OPENAI_API_KEY')
|
|
return key ? createOpenAIEmbeddingProvider(key) : null
|
|
},
|
|
knowledgeStore: () => createSupabaseKnowledgeStore(service()),
|
|
usageStore: () => createSupabaseEmbeddingUsageStore(service()),
|
|
}))
|