Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
28 changes: 1 addition & 27 deletions .github/workflows/prettier.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ jobs:
apps
packages
blocks
examples
patches
- uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0
name: Install pnpm
Expand Down Expand Up @@ -66,30 +67,3 @@ jobs:
- name: Run prettier
run: |-
pnpm exec prettier -c 'i18n/**/*.{js,jsx,ts,tsx,css,md,mdx,json}'

format-sql:
runs-on: blacksmith-4vcpu-ubuntu-2404
steps:
- name: Check out repo
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
with:
sparse-checkout: |
apps/docs/pages
apps/docs/content
patches
- uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0
name: Install pnpm
with:
run_install: false
- name: Setup node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version-file: '.nvmrc'
cache: 'pnpm'
- name: Download dependencies
run: |
pnpm install --frozen-lockfile
- name: Run prettier
run: |-
# Check mdx files which contain sql code blocks
grep -lr '```sql' apps/docs/{pages,content}/**/*.mdx | xargs pnpm exec prettier -c
Original file line number Diff line number Diff line change
@@ -1,90 +1,82 @@
// AWS SDK issue: https://github.com/aws/aws-sdk-js-v3/issues/6134
// We need to mock the file system for the AWS SDK to work.
import {
prepareVirtualFile,
} from "https://deno.land/x/mock_file@v1.1.2/mod.ts";
import { prepareVirtualFile } from 'https://deno.land/x/mock_file@v1.1.2/mod.ts'

import {
BedrockRuntimeClient,
InvokeModelCommand,
} from "npm:@aws-sdk/client-bedrock-runtime";
import { createClient } from "npm:@supabase/supabase-js";
import { decode } from "npm:base64-arraybuffer";
import { BedrockRuntimeClient, InvokeModelCommand } from 'npm:@aws-sdk/client-bedrock-runtime'
import { createClient } from 'npm:@supabase/supabase-js'
import { decode } from 'npm:base64-arraybuffer'

console.log("Hello from Amazon Bedrock!");
console.log('Hello from Amazon Bedrock!')

Deno.serve(async (req) => {
prepareVirtualFile("./aws/config");
prepareVirtualFile("./aws/credentials");
prepareVirtualFile('./aws/config')
prepareVirtualFile('./aws/credentials')

const client = new BedrockRuntimeClient({
region: "us-west-2",
region: 'us-west-2',
credentials: {
accessKeyId: Deno.env.get("AWS_ACCESS_KEY_ID") ?? "",
secretAccessKey: Deno.env.get("AWS_SECRET_ACCESS_KEY") ?? "",
sessionToken: Deno.env.get("AWS_SESSION_TOKEN") ?? "",
accessKeyId: Deno.env.get('AWS_ACCESS_KEY_ID') ?? '',
secretAccessKey: Deno.env.get('AWS_SECRET_ACCESS_KEY') ?? '',
sessionToken: Deno.env.get('AWS_SESSION_TOKEN') ?? '',
},
});
})

const { prompt, seed } = await req.json();
console.log(prompt);
const { prompt, seed } = await req.json()
console.log(prompt)
const input = {
contentType: "application/json",
accept: "*/*",
modelId: "amazon.titan-image-generator-v1",
contentType: 'application/json',
accept: '*/*',
modelId: 'amazon.titan-image-generator-v1',
body: JSON.stringify({
"taskType": "TEXT_IMAGE",
"textToImageParams": { "text": prompt },
"imageGenerationConfig": {
"numberOfImages": 1,
"quality": "standard",
"cfgScale": 8.0,
"height": 512,
"width": 512,
"seed": seed ?? 0,
taskType: 'TEXT_IMAGE',
textToImageParams: { text: prompt },
imageGenerationConfig: {
numberOfImages: 1,
quality: 'standard',
cfgScale: 8.0,
height: 512,
width: 512,
seed: seed ?? 0,
},
}),
};
}

const command = new InvokeModelCommand(input);
const response = await client.send(command);
console.log(response);
const command = new InvokeModelCommand(input)
const response = await client.send(command)
console.log(response)

if (response.$metadata.httpStatusCode === 200) {
const { body, $metadata } = response;
const { body, $metadata } = response

const textDecoder = new TextDecoder("utf-8");
const jsonString = textDecoder.decode(body.buffer);
const parsedData = JSON.parse(jsonString);
console.log(parsedData);
const image = parsedData.images[0];
const textDecoder = new TextDecoder('utf-8')
const jsonString = textDecoder.decode(body.buffer)
const parsedData = JSON.parse(jsonString)
console.log(parsedData)
const image = parsedData.images[0]

const supabaseClient = createClient(
// Supabase API URL - env var exported by default.
Deno.env.get("SUPABASE_URL")!,
Deno.env.get('SUPABASE_URL')!,
// Supabase API ANON KEY - env var exported by default.
Deno.env.get("SUPABASE_SERVICE_ROLE_KEY")!,
);
Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')!
)

const { data: upload, error: uploadError } = await supabaseClient.storage
.from("images")
.upload(`${$metadata.requestId ?? ""}.png`, decode(image), {
contentType: "image/png",
cacheControl: "3600",
.from('images')
.upload(`${$metadata.requestId ?? ''}.png`, decode(image), {
contentType: 'image/png',
cacheControl: '3600',
upsert: false,
});
})
if (!upload) {
return Response.json(uploadError);
return Response.json(uploadError)
}
const { data } = supabaseClient
.storage
.from("images")
.getPublicUrl(upload.path!);
return Response.json(data);
const { data } = supabaseClient.storage.from('images').getPublicUrl(upload.path!)
return Response.json(data)
}

return Response.json(response);
});
return Response.json(response)
})

/* To invoke locally:

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,4 @@
export type Json =
| string
| number
| boolean
| null
| { [key: string]: Json | undefined }
| Json[]
export type Json = string | number | boolean | null | { [key: string]: Json | undefined } | Json[]

export type Database = {
graphql_public: {
Expand Down Expand Up @@ -180,11 +174,11 @@ export type Database = {
}
Relationships: [
{
foreignKeyName: "objects_bucketId_fkey"
columns: ["bucket_id"]
foreignKeyName: 'objects_bucketId_fkey'
columns: ['bucket_id']
isOneToOne: false
referencedRelation: "buckets"
referencedColumns: ["id"]
referencedRelation: 'buckets'
referencedColumns: ['id']
},
]
}
Expand Down Expand Up @@ -257,84 +251,76 @@ export type Database = {
}
}

type PublicSchema = Database[Extract<keyof Database, "public">]
type PublicSchema = Database[Extract<keyof Database, 'public'>]

export type Tables<
PublicTableNameOrOptions extends
| keyof (PublicSchema["Tables"] & PublicSchema["Views"])
| keyof (PublicSchema['Tables'] & PublicSchema['Views'])
| { schema: keyof Database },
TableName extends PublicTableNameOrOptions extends { schema: keyof Database }
? keyof (Database[PublicTableNameOrOptions["schema"]]["Tables"] &
Database[PublicTableNameOrOptions["schema"]]["Views"])
? keyof (Database[PublicTableNameOrOptions['schema']]['Tables'] &
Database[PublicTableNameOrOptions['schema']]['Views'])
: never = never,
> = PublicTableNameOrOptions extends { schema: keyof Database }
? (Database[PublicTableNameOrOptions["schema"]]["Tables"] &
Database[PublicTableNameOrOptions["schema"]]["Views"])[TableName] extends {
? (Database[PublicTableNameOrOptions['schema']]['Tables'] &
Database[PublicTableNameOrOptions['schema']]['Views'])[TableName] extends {
Row: infer R
}
? R
: never
: PublicTableNameOrOptions extends keyof (PublicSchema["Tables"] &
PublicSchema["Views"])
? (PublicSchema["Tables"] &
PublicSchema["Views"])[PublicTableNameOrOptions] extends {
: PublicTableNameOrOptions extends keyof (PublicSchema['Tables'] & PublicSchema['Views'])
? (PublicSchema['Tables'] & PublicSchema['Views'])[PublicTableNameOrOptions] extends {
Row: infer R
}
? R
: never
: never

export type TablesInsert<
PublicTableNameOrOptions extends
| keyof PublicSchema["Tables"]
| { schema: keyof Database },
PublicTableNameOrOptions extends keyof PublicSchema['Tables'] | { schema: keyof Database },
TableName extends PublicTableNameOrOptions extends { schema: keyof Database }
? keyof Database[PublicTableNameOrOptions["schema"]]["Tables"]
? keyof Database[PublicTableNameOrOptions['schema']]['Tables']
: never = never,
> = PublicTableNameOrOptions extends { schema: keyof Database }
? Database[PublicTableNameOrOptions["schema"]]["Tables"][TableName] extends {
? Database[PublicTableNameOrOptions['schema']]['Tables'][TableName] extends {
Insert: infer I
}
? I
: never
: PublicTableNameOrOptions extends keyof PublicSchema["Tables"]
? PublicSchema["Tables"][PublicTableNameOrOptions] extends {
: PublicTableNameOrOptions extends keyof PublicSchema['Tables']
? PublicSchema['Tables'][PublicTableNameOrOptions] extends {
Insert: infer I
}
? I
: never
: never

export type TablesUpdate<
PublicTableNameOrOptions extends
| keyof PublicSchema["Tables"]
| { schema: keyof Database },
PublicTableNameOrOptions extends keyof PublicSchema['Tables'] | { schema: keyof Database },
TableName extends PublicTableNameOrOptions extends { schema: keyof Database }
? keyof Database[PublicTableNameOrOptions["schema"]]["Tables"]
? keyof Database[PublicTableNameOrOptions['schema']]['Tables']
: never = never,
> = PublicTableNameOrOptions extends { schema: keyof Database }
? Database[PublicTableNameOrOptions["schema"]]["Tables"][TableName] extends {
? Database[PublicTableNameOrOptions['schema']]['Tables'][TableName] extends {
Update: infer U
}
? U
: never
: PublicTableNameOrOptions extends keyof PublicSchema["Tables"]
? PublicSchema["Tables"][PublicTableNameOrOptions] extends {
: PublicTableNameOrOptions extends keyof PublicSchema['Tables']
? PublicSchema['Tables'][PublicTableNameOrOptions] extends {
Update: infer U
}
? U
: never
: never

export type Enums<
PublicEnumNameOrOptions extends
| keyof PublicSchema["Enums"]
| { schema: keyof Database },
PublicEnumNameOrOptions extends keyof PublicSchema['Enums'] | { schema: keyof Database },
EnumName extends PublicEnumNameOrOptions extends { schema: keyof Database }
? keyof Database[PublicEnumNameOrOptions["schema"]]["Enums"]
? keyof Database[PublicEnumNameOrOptions['schema']]['Enums']
: never = never,
> = PublicEnumNameOrOptions extends { schema: keyof Database }
? Database[PublicEnumNameOrOptions["schema"]]["Enums"][EnumName]
: PublicEnumNameOrOptions extends keyof PublicSchema["Enums"]
? PublicSchema["Enums"][PublicEnumNameOrOptions]
? Database[PublicEnumNameOrOptions['schema']]['Enums'][EnumName]
: PublicEnumNameOrOptions extends keyof PublicSchema['Enums']
? PublicSchema['Enums'][PublicEnumNameOrOptions]
: never
Original file line number Diff line number Diff line change
@@ -1,47 +1,47 @@
import "jsr:@supabase/functions-js/edge-runtime.d.ts";
import 'jsr:@supabase/functions-js/edge-runtime.d.ts'

import { createClient } from "jsr:@supabase/supabase-js@2";
import { Database, Tables } from "../_shared/database.types.ts";
import { createClient } from 'jsr:@supabase/supabase-js@2'
import { Database, Tables } from '../_shared/database.types.ts'

type EmbeddingsRecord = Tables<"embeddings">;
type EmbeddingsRecord = Tables<'embeddings'>
interface WebhookPayload {
type: "INSERT" | "UPDATE" | "DELETE";
table: string;
record: EmbeddingsRecord;
schema: "public";
old_record: null | EmbeddingsRecord;
type: 'INSERT' | 'UPDATE' | 'DELETE'
table: string
record: EmbeddingsRecord
schema: 'public'
old_record: null | EmbeddingsRecord
}

const supabase = createClient<Database>(
Deno.env.get("SUPABASE_URL")!,
Deno.env.get("SUPABASE_SERVICE_ROLE_KEY")!,
);
Deno.env.get('SUPABASE_URL')!,
Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')!
)

const model = new Supabase.ai.Session("gte-small");
const model = new Supabase.ai.Session('gte-small')

Deno.serve(async (req) => {
const payload: WebhookPayload = await req.json();
const { content, id } = payload.record;
const payload: WebhookPayload = await req.json()
const { content, id } = payload.record

// Check if content has changed.
if (content === payload?.old_record?.content) {
return new Response("ok - no change");
return new Response('ok - no change')
}

// Generate embedding
const embedding = await model.run(content, {
mean_pool: true,
normalize: true,
});
})

// Store in DB
const { error } = await supabase.from("embeddings").update({
embedding: JSON.stringify(embedding),
}).eq(
"id",
id,
);
if (error) console.warn(error.message);

return new Response("ok - updated");
});
const { error } = await supabase
.from('embeddings')
.update({
embedding: JSON.stringify(embedding),
})
.eq('id', id)
if (error) console.warn(error.message)

return new Response('ok - updated')
})
Loading
Loading