mirror of
https://github.com/supabase/agent-skills.git
synced 2026-03-27 10:09:26 +08:00
Add edge function embeddings
This commit is contained in:
90
skills/supabase/references/edge-fun-generate-embeddings.md
Normal file
90
skills/supabase/references/edge-fun-generate-embeddings.md
Normal file
@@ -0,0 +1,90 @@
|
||||
---
|
||||
title: Generate Text Embeddings (Edge Function)
|
||||
tags: edge-functions, ai, embeddings, deno
|
||||
---
|
||||
|
||||
## Generate Text Embeddings (Edge Functions)
|
||||
|
||||
Generate high-quality text embeddings using Supabase Edge Functions with the built-in AI inference API (no external embedding provider required).
|
||||
|
||||
### Overview
|
||||
|
||||
1. Create an inference session once per function instance.
|
||||
2. Accept a POST request with JSON `{ "input": "..." }`.
|
||||
3. Run `session.run(input)` to produce an embedding.
|
||||
|
||||
The `gte-small` (https://huggingface.co/Supabase/gte-small) text embedding model is supported in Supabase's Edge Runtime.
|
||||
|
||||
### Common Mistake
|
||||
|
||||
**Incorrect:**
|
||||
|
||||
```typescript
|
||||
// Creating the session on every request (wasteful)
|
||||
Deno.serve(async (req) => {
|
||||
const session = new Supabase.ai.Session("gte-small");
|
||||
const { input } = await req.json();
|
||||
const embedding = await session.run(input);
|
||||
return new Response(JSON.stringify({ embedding }));
|
||||
});
|
||||
```
|
||||
|
||||
**Correct:**
|
||||
|
||||
```typescript
|
||||
// ./supabase/functions/embed/index.ts
|
||||
const session = new Supabase.ai.Session("gte-small");
|
||||
|
||||
Deno.serve(async (req) => {
|
||||
// Extract input string from JSON body
|
||||
const { input } = await req.json();
|
||||
|
||||
// Generate the embedding from the user input
|
||||
const embedding = await session.run(input, {
|
||||
mean_pool: true,
|
||||
normalize: true,
|
||||
});
|
||||
|
||||
// Return the embedding
|
||||
return new Response(JSON.stringify({ embedding }), {
|
||||
headers: { "Content-Type": "application/json" },
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
### Build the Edge Function
|
||||
|
||||
1. Initialize Supabase locally:
|
||||
|
||||
```shell
|
||||
supabase init
|
||||
supabase start
|
||||
```
|
||||
|
||||
2. Create the Edge Function (example name: `embed`):
|
||||
|
||||
```shell
|
||||
supabase functions new embed
|
||||
```
|
||||
|
||||
3. Replace `./supabase/functions/embed/index.ts` with the handler above.
|
||||
|
||||
### Test it locally
|
||||
|
||||
Start a local functions server, then invoke the endpoint:
|
||||
|
||||
```shell
|
||||
supabase functions serve
|
||||
```
|
||||
|
||||
```shell
|
||||
curl --request POST 'http://localhost:54321/functions/v1/embed' \
|
||||
--header 'Authorization: Bearer ANON_KEY' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--data '{ "input": "hello world" }'
|
||||
```
|
||||
|
||||
Replace `ANON_KEY` with your project's anonymous key (get it with `supabase status`).
|
||||
|
||||
Reference: [Generate Embeddings](https://supabase.com/docs/guides/ai/quickstarts/generate-text-embeddings)
|
||||
|
||||
Reference in New Issue
Block a user