31 lines
823 B
TypeScript
31 lines
823 B
TypeScript
|
|
import { type Message } from 'ai/react'
|
||
|
|
import { StreamingTextResponse } from 'ai'
|
||
|
|
import { TabbyStream } from '@/lib/tabby-stream'
|
||
|
|
import { useEffect } from 'react'
|
||
|
|
|
||
|
|
const serverUrl = process.env.NEXT_PUBLIC_TABBY_SERVER_URL || ''
|
||
|
|
|
||
|
|
export function usePatchFetch() {
|
||
|
|
useEffect(() => {
|
||
|
|
const fetch = window.fetch
|
||
|
|
|
||
|
|
window.fetch = async function (url, options) {
|
||
|
|
if (url !== '/api/chat') {
|
||
|
|
return fetch(url, options)
|
||
|
|
}
|
||
|
|
|
||
|
|
const { messages } = JSON.parse(options!.body as string)
|
||
|
|
const res = await fetch(`${serverUrl}/v1beta/chat/completions`, {
|
||
|
|
...options,
|
||
|
|
method: 'POST',
|
||
|
|
headers: {
|
||
|
|
'Content-Type': 'application/json'
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|
||
|
|
const stream = TabbyStream(res, undefined)
|
||
|
|
return new StreamingTextResponse(stream)
|
||
|
|
}
|
||
|
|
}, [])
|
||
|
|
}
|