From ae5244be2fa9fa6da20c52560ddf06544653da83 Mon Sep 17 00:00:00 2001 From: Greg Richardson Date: Mon, 17 Jun 2024 12:14:28 -0600 Subject: [PATCH] fix(db-playground): builds --- .../database-playground/app/api/chat/route.ts | 7 +--- .../database-playground/app/api/plan/route.ts | 36 ------------------- apps/database-playground/app/page.tsx | 8 ++--- .../data/tables/tables-query.ts | 2 +- apps/database-playground/lib/db.ts | 6 ++++ apps/database-playground/lib/hooks.ts | 2 +- apps/database-playground/lib/schema.ts | 7 ++++ apps/database-playground/next.config.mjs | 2 +- apps/database-playground/tsconfig.json | 3 +- 9 files changed, 21 insertions(+), 52 deletions(-) delete mode 100644 apps/database-playground/app/api/plan/route.ts create mode 100644 apps/database-playground/lib/db.ts create mode 100644 apps/database-playground/lib/schema.ts diff --git a/apps/database-playground/app/api/chat/route.ts b/apps/database-playground/app/api/chat/route.ts index 444d1331eb3..00f03a5eb8d 100644 --- a/apps/database-playground/app/api/chat/route.ts +++ b/apps/database-playground/app/api/chat/route.ts @@ -2,16 +2,11 @@ import { openai } from '@ai-sdk/openai' import { convertToCoreMessages, streamText } from 'ai' import { codeBlock } from 'common-tags' import { z } from 'zod' +import { reportSchema, tabsSchema } from '~/lib/schema' // Allow streaming responses up to 30 seconds export const maxDuration = 30 -const reportSchema = z.object({ name: z.string(), description: z.string() }) -export type Report = typeof reportSchema._type - -export const tabsSchema = z.enum(['diagram', 'migrations', 'seeds']) -export type TabValue = typeof tabsSchema._type - export async function POST(req: Request) { const { messages } = await req.json() diff --git a/apps/database-playground/app/api/plan/route.ts b/apps/database-playground/app/api/plan/route.ts deleted file mode 100644 index 3d56efc7817..00000000000 --- a/apps/database-playground/app/api/plan/route.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { openai } from '@ai-sdk/openai' -import { convertToCoreMessages } from 'ai' -import { FunctionBinding, streamTextWithInterpreter } from 'ai-sandbox' -import { codeBlock } from 'common-tags' - -// Allow streaming responses up to 30 seconds -export const maxDuration = 30 - -export type RequestBody = { - messages: any[] - functionBindings: Record -} - -export async function POST(req: Request) { - const { messages, functionBindings }: RequestBody = await req.json() - - const coreMessages = convertToCoreMessages(messages as any) - - const result = await streamTextWithInterpreter({ - system: codeBlock` - You are a helpful assistant. - - All math equations and expressions must be written in KaTex and must be wrapped in double dollar \`$$\`: - - Inline: $$\\sqrt{26}$$ - - Multiline: - $$ - \\sqrt{26} - $$ - `, - model: openai('gpt-4o-2024-05-13'), - messages: coreMessages, - functionBindings, - }) - - return new Response(result) -} diff --git a/apps/database-playground/app/page.tsx b/apps/database-playground/app/page.tsx index b66676e254b..a6b55ba4396 100644 --- a/apps/database-playground/app/page.tsx +++ b/apps/database-playground/app/page.tsx @@ -2,7 +2,6 @@ import 'chartjs-adapter-date-fns' -import { PGlite } from '@electric-sql/pglite' import { Editor } from '@monaco-editor/react' import { Tabs, TabsContent, TabsList, TabsTrigger } from '@ui/components/shadcn/ui/tabs' import { nanoid } from 'ai' @@ -25,16 +24,13 @@ import { AiIconAnimation, markdownComponents } from 'ui' import { Button } from 'ui/src/components/shadcn/ui/button' import SchemaGraph from '~/components/schema/graph' import { useTablesQuery } from '~/data/tables/tables-query' +import { db } from '~/lib/db' import { useReportSuggestions } from '~/lib/hooks' +import { TabValue, tabsSchema } from '~/lib/schema' import { groupStatements } from '~/lib/sql-util' -import { TabValue, tabsSchema } from './api/chat/route' const loadFramerFeatures = () => import('./framer-features').then((res) => res.default) -// React's double-rendering in dev mode causes pglite errors -// Temp: storing single instance in module scope -export let db: PGlite = new PGlite('idb://local') - export default function Page() { const [migrationSql, setMigrationSql] = useState( '-- Migrations will appear here as you chat with Supabase AI' diff --git a/apps/database-playground/data/tables/tables-query.ts b/apps/database-playground/data/tables/tables-query.ts index 79164d21d2f..96a0a0d640f 100644 --- a/apps/database-playground/data/tables/tables-query.ts +++ b/apps/database-playground/data/tables/tables-query.ts @@ -6,7 +6,7 @@ import { wrapResult, } from '@gregnr/postgres-meta/base' import { UseQueryOptions, useQuery } from '@tanstack/react-query' -import { db } from '~/app/page' +import { db } from '~/lib/db' export type TablesVariables = { schemas?: string[] diff --git a/apps/database-playground/lib/db.ts b/apps/database-playground/lib/db.ts new file mode 100644 index 00000000000..852dcb345f2 --- /dev/null +++ b/apps/database-playground/lib/db.ts @@ -0,0 +1,6 @@ +import { PGlite } from '@electric-sql/pglite' + +// React's double-rendering in dev mode causes pglite errors +// Temp: storing singleton instance in module scope +// TODO: get working in WebWorkers +export let db: PGlite = new PGlite('idb://local') diff --git a/apps/database-playground/lib/hooks.ts b/apps/database-playground/lib/hooks.ts index e05aeea8ab5..ea2cf7f7302 100644 --- a/apps/database-playground/lib/hooks.ts +++ b/apps/database-playground/lib/hooks.ts @@ -4,7 +4,7 @@ import { useChat } from 'ai/react' import { codeBlock } from 'common-tags' import { useEffect, useState } from 'react' import { useTablesQuery } from '~/data/tables/tables-query' -import { Report } from '../app/api/chat/route' +import { Report } from '~/lib/schema' export type UseReportSuggestionsOptions = { enabled?: boolean diff --git a/apps/database-playground/lib/schema.ts b/apps/database-playground/lib/schema.ts new file mode 100644 index 00000000000..a366cc902de --- /dev/null +++ b/apps/database-playground/lib/schema.ts @@ -0,0 +1,7 @@ +import { z } from 'zod' + +export const reportSchema = z.object({ name: z.string(), description: z.string() }) +export type Report = typeof reportSchema._type + +export const tabsSchema = z.enum(['diagram', 'migrations', 'seeds']) +export type TabValue = typeof tabsSchema._type diff --git a/apps/database-playground/next.config.mjs b/apps/database-playground/next.config.mjs index 49ccd0f779e..2605b1f4f0c 100644 --- a/apps/database-playground/next.config.mjs +++ b/apps/database-playground/next.config.mjs @@ -8,9 +8,9 @@ const nextConfig = { module: false, }, } - return config }, + swcMinify: false, } export default nextConfig diff --git a/apps/database-playground/tsconfig.json b/apps/database-playground/tsconfig.json index 10963db245e..331516bbe4a 100644 --- a/apps/database-playground/tsconfig.json +++ b/apps/database-playground/tsconfig.json @@ -37,7 +37,8 @@ "next-env.d.ts", "**/*.ts", "**/*.tsx", - ".next/types/**/*.ts" + ".next/types/**/*.ts", + "./../../packages/ui/src/**/*.d.ts" ], "exclude": [ "node_modules"