From 8eb8b69759b14aa5cde9cd56e6a0e8759e522349 Mon Sep 17 00:00:00 2001 From: Jaime Freire <5436581+jaimefreire@users.noreply.github.com> Date: Sat, 2 Dec 2023 19:17:51 +0100 Subject: [PATCH] Update --- app.zip | Bin 0 -> 16148 bytes app/api/generate-code-from-image/route.ts | 30 +++--- app/draganddrop.tsx | 22 ++++ app/form.tsx | 25 ++--- app/layout.tsx | 20 ++-- app/page.tsx | 116 ++++++++++++++++------ package.json | 1 + pnpm-lock.yaml | 26 +++++ 8 files changed, 165 insertions(+), 75 deletions(-) create mode 100644 app.zip create mode 100644 app/draganddrop.tsx diff --git a/app.zip b/app.zip new file mode 100644 index 0000000000000000000000000000000000000000..e543389cf1a3dcfbc51e1b2d2e1205b64486e947 GIT binary patch literal 16148 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 - You can use Google Fonts - Font Awesome for icons: -Return only the full code in tags. +Return first the background hexadecimals, put a ||| separator, and then all the code. Do not include markdown "\`\`\`" or "\`\`\`html" at the start or end.` - const openai = new OpenAI({ - apiKey: process.env.OPENAI_API_KEY, + apiKey: process.env.OPENAI_API_TOKEN, }) -export const runtime = 'edge' //vs cloud. Edge is faster but more expensive +export const runtime = 'edge' export async function POST(req: Request) { - const { url } = await req.json() + const { url, img } = await req.json() + + const imageUrl = url ?? img + const response = await openai.chat.completions.create({ model: 'gpt-4-vision-preview', stream: true, - max_tokens: 4096, + max_tokens: 4096, messages: [ { role: 'system', @@ -54,12 +52,12 @@ export async function POST(req: Request) { }, { type: 'image_url', - image_url: url + image_url: imageUrl, }, ], - } - ], - }); + }, + ], + }) const stream = OpenAIStream(response) return new StreamingTextResponse(stream) diff --git a/app/draganddrop.tsx b/app/draganddrop.tsx new file mode 100644 index 0000000..442c820 --- /dev/null +++ b/app/draganddrop.tsx @@ -0,0 +1,22 @@ +'use client' + +import { Dropzone, ExtFile } from '@files-ui/react' +import { useState } from 'react' + +export const DragAndDrop = ({ transformImageToCode }: { transformImageToCode: (file: File) => Promise }) => { + const updateFiles = (files: ExtFile[]) => { + const file = files[0].file + if (file != null) transformImageToCode(file) + } + + return ( + + ) +} diff --git a/app/form.tsx b/app/form.tsx index 6276d69..b4ca7e0 100644 --- a/app/form.tsx +++ b/app/form.tsx @@ -3,26 +3,23 @@ import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' -import { FormEvent } from 'react' - -export const Form = ({transformUrlToCode} : {transformUrlToCode: (url: string) => void}) =>{ - - const handleSubmit = (evt: FormEvent) => { - const form = evt.currentTarget as HTMLFormElement; - const url = form.elements.namedItem('url') as HTMLInputElement; - transformUrlToCode(url.value); - } +export const Form = ({ transformUrlToCode }: { transformUrlToCode: (url: string) => void }) => { return ( -
{ evt.preventDefault() - handleSubmit(evt) + + const form = evt.currentTarget as HTMLFormElement + const url = form.elements.namedItem('url') as HTMLInputElement + + transformUrlToCode(url.value) }} > -