Skip to content

Commit

Permalink
🐛 Enable stream again by migrating endpoint to route handler
Browse files Browse the repository at this point in the history
  • Loading branch information
baptisteArno committed Oct 6, 2023
1 parent 225dfed commit 0ba13b4
Showing 1 changed file with 114 additions and 0 deletions.
114 changes: 114 additions & 0 deletions apps/viewer/src/pages/api/integrations/openai/streamer/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
import { connect } from '@planetscale/database'
import { env } from '@typebot.io/env'
import { IntegrationBlockType, SessionState } from '@typebot.io/schemas'
import { StreamingTextResponse } from 'ai'
import { getChatCompletionStream } from '@typebot.io/bot-engine/blocks/integrations/openai/getChatCompletionStream'
import OpenAI from 'openai'
import { NextResponse } from 'next/dist/server/web/spec-extension/response'

export const runtime = 'edge'
export const regions = ['lhr1']
export const dynamic = 'force-dynamic'

const responseHeaders = {
'Access-Control-Allow-Origin': '*',
}

const handler = async (req: Request) => {
if (req.method === 'OPTIONS') {
return new Response('ok', {
headers: {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'POST',
'Access-Control-Expose-Headers': 'Content-Length, X-JSON',
'Access-Control-Allow-Headers': '*',
},
})
}
const { sessionId, messages } = (await req.json()) as {
sessionId: string
messages: OpenAI.Chat.ChatCompletionMessage[]
}

if (!sessionId)
return NextResponse.json(
{ message: 'No session ID provided' },
{ status: 400, headers: responseHeaders }
)

if (!messages)
return NextResponse.json(
{ message: 'No messages provided' },
{ status: 400, headers: responseHeaders }
)

const conn = connect({ url: env.DATABASE_URL })

const chatSession = await conn.execute(
'select state from ChatSession where id=?',
[sessionId]
)

const state = (chatSession.rows.at(0) as { state: SessionState } | undefined)
?.state

if (!state)
return NextResponse.json(
{ message: 'No state found' },
{ status: 400, headers: responseHeaders }
)

const group = state.typebotsQueue[0].typebot.groups.find(
(group) => group.id === state.currentBlock?.groupId
)
const blockIndex =
group?.blocks.findIndex(
(block) => block.id === state.currentBlock?.blockId
) ?? -1

const block = blockIndex >= 0 ? group?.blocks[blockIndex ?? 0] : null

if (!block || !group)
return NextResponse.json(
{ message: 'Current block not found' },
{ status: 400, headers: responseHeaders }
)

if (
block.type !== IntegrationBlockType.OPEN_AI ||
block.options.task !== 'Create chat completion'
)
return NextResponse.json(
{ message: 'Current block is not an OpenAI block' },
{ status: 400, headers: responseHeaders }
)

try {
const stream = await getChatCompletionStream(conn)(
state,
block.options,
messages
)
if (!stream)
return NextResponse.json(
{ message: 'Could not create stream' },
{ status: 400, headers: responseHeaders }
)

return new StreamingTextResponse(stream, {
headers: responseHeaders,
})
} catch (error) {
if (error instanceof OpenAI.APIError) {
const { name, status, message } = error
return NextResponse.json(
{ name, status, message },
{ status, headers: responseHeaders }
)
} else {
throw error
}
}
}

export default handler

1 comment on commit 0ba13b4

@vercel
Copy link

@vercel vercel bot commented on 0ba13b4 Oct 6, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Successfully deployed to the following URLs:

viewer-v2 – ./apps/viewer

seletiva-bbb24.com
speciallife.com.br
sub.yolozeeeer.com
survey.digienge.io
tribe.ezbooking.ai
w.onewebcenter.com
zap.techadviser.in
zero-pendencia.com
ai.digitaldaftar.in
al.onewebcenter.com
app.danielnalex.com
ask.realversity.org
blazecontrol.com.br
bot.boston-voip.com
bot.cabinpromos.com
bot.carnaval.studio
bot.digitalbled.com
bot.dsignagency.com
bbutton.wpwakanda.com
bot.anovaerarb.online
bot.coachayongzul.com
bot.digitalpointer.id
bot.eikju.photography
bot.eymaleggingsg.com
bot.gamesimples.store
bot.incusservices.com
bot.jogomoderno.store
bot.mejoralasalud.fun
bot.meuesocial.com.br
bot.mycompany.reviews
bot.outstandbrand.com
bot.ramonmatos.com.br
bot.sharemyreview.net
bot.synapsegameia.com
bot.truongnguyen.live
bots.baptistearno.com
botz.cloudsiteapp.com
cdd.searchcube.com.sg
chat.jogonobrasil.com
chat.missarkansas.org
chatbot.ownacademy.co
chats.maisefetivo.com
claudio-barros.online
criar.somaperuzzo.com
dental-leadmagnet.com
drabeatrizleal.com.br
gotasafrodisiacas.com
homerun.wpwakanda.com
manuel.thegymgame.com
mdb.assessoria.ademir
portaldasanalises.com
prenota.aldoemaria.it
revistasaudeemdia.com
rossano.thegymgame.it
sbutton.wpwakanda.com
segredosdothreads.com
simone.thegymgame.com
talk.convobuilder.com
terrosdoscassinos.com
test.leadbooster.help
type.rqxsystem.com.br
whats.laracardoso.com
www.acesso-app.online
zillabot.saaszilla.co
815639944.21000000.one
83720273.bouclidom.com
viewer-v2-typebot-io.vercel.app
mdb.evento.equipeinterna.progenbr.com
bot.studiotecnicoimmobiliaremerelli.it
mdb.assessoria.boaventura.progenbr.com
mdb.assessoria.jtrebesqui.progenbr.com
pesquisa.escolamodacomproposito.com.br
anamnese.clinicaramosodontologia.com.br
gabinete.baleia.formulario.progenbr.com
mdb.assessoria.carreirinha.progenbr.com
chrome-os-inquiry-system.itschromeos.com
mdb.assessoria.paulomarques.progenbr.com
viewer-v2-git-main-typebot-io.vercel.app
main-menu-for-itschromeos.itschromeos.com
mdb.assessoria.qrcode.ademir.progenbr.com
mdb.assessoria.qrcode.arthur.progenbr.com
mdb.assessoria.qrcode.danilo.progenbr.com
mdb.assessoria.qrcode.marcao.progenbr.com
mdb.assessoria.qrcode.marcio.progenbr.com
mdb.assessoria.qrcode.aloisio.progenbr.com
mdb.assessoria.qrcode.girotto.progenbr.com
mdb.assessoria.qrcode.marinho.progenbr.com
mdb.assessoria.qrcode.rodrigo.progenbr.com
mdb.assessoria.carlosalexandre.progenbr.com
mdb.assessoria.qrcode.desideri.progenbr.com
mdb.assessoria.qrcode.fernanda.progenbr.com
mdb.assessoria.qrcode.jbatista.progenbr.com
mdb.assessoria.qrcode.mauricio.progenbr.com
mdb.assessoria.fernanda.regional.progenbr.com
mdb.assessoria.qrcode.boaventura.progenbr.com
mdb.assessoria.qrcode.jtrebesqui.progenbr.com
mdb.assessoria.qrcode.carreirinha.progenbr.com
mdb.assessoria.qrcode.paulomarques.progenbr.com
mdb.assessoria.qrcode.carlosalexandre.progenbr.com
mdb.assessoria.qrcode.fernanda.regional.progenbr.com

Please sign in to comment.