Spaces:
Sleeping
Sleeping
'use client'; | |
import { useRouter } from 'next/navigation'; | |
import { useRef, useState } from 'react'; | |
import Composer, { ComposerRef } from '@/components/chat/Composer'; | |
import { dbPostCreateChat } from '@/lib/db/functions'; | |
import { nanoid } from '@/lib/utils'; | |
import Chip from '@/components/ui/Chip'; | |
import { IconArrowUpRight } from '@/components/ui/Icons'; | |
const EXAMPLES = [ | |
{ | |
title: 'Counting flowers in image', | |
mediaUrl: | |
'https://vision-agent-dev.s3.us-east-2.amazonaws.com/examples/flower.png', | |
prompt: | |
'Draw box and output the image, return the number of flowers as output.', | |
}, | |
{ | |
title: 'Detecting sharks in video', | |
mediaUrl: | |
'https://vision-agent-dev.s3.us-east-2.amazonaws.com/examples/shark3_short.mp4', | |
prompt: | |
'Can you detect any surfboards or sharks in the video, draw a green line between the shark and the nearest surfboard and add the distance between them in meters assuming 30 pixels is 1 meter. Make the line red if the shark is within 10 meters of a surfboard. Sample the video at 1 frames per second and save the output video as output.mp4.', | |
}, | |
]; | |
export default function Page() { | |
const router = useRouter(); | |
const composerRef = useRef<ComposerRef>(null); | |
return ( | |
<div className="h-screen w-screen homepage"> | |
<div className="mx-auto w-[42rem] max-w-full px-4 mt-[200px]"> | |
<h1 className="mb-4 text-center relative"> | |
Vision Agent | |
<Chip className="absolute bg-green-100 text-green-500">BETA</Chip> | |
</h1> | |
<h4 className="text-center"> | |
Generate code to solve your vision problem with simple prompts. | |
</h4> | |
<div className="my-8"> | |
<Composer | |
ref={composerRef} | |
onSubmit={async ({ input, mediaUrl }) => { | |
const newId = nanoid(); | |
const resp = await dbPostCreateChat({ | |
id: newId, | |
title: `conversation-${newId}`, | |
mediaUrl, | |
message: { | |
prompt: input, | |
mediaUrl, | |
}, | |
}); | |
if (resp) { | |
router.push(`/chat/${newId}`); | |
} | |
}} | |
/> | |
</div> | |
{EXAMPLES.map((example, index) => { | |
return ( | |
<Chip | |
key={index} | |
className="bg-transparent border border-zinc-500 cursor-pointer px-4" | |
onClick={() => { | |
composerRef.current?.setInput(example.prompt); | |
composerRef.current?.setMediaUrl(example.mediaUrl); | |
}} | |
> | |
<div className="flex flex-row items-center space-x-2"> | |
<p className="text-primary text-sm">{example.title}</p> | |
<IconArrowUpRight className="text-primary" /> | |
</div> | |
</Chip> | |
); | |
})} | |
</div> | |
</div> | |
); | |
} | |