Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
File size: 1,777 Bytes
e4e0e54 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
import { ChatCompletionRequestMessage } from "openai"
import { openai } from "./openai.mts"
import { streamCompletion } from "./stream.mts"
import { getTextPrompt } from "./getTextPrompt.mts"
export const createChatCompletionStream = async (
messages: ChatCompletionRequestMessage[],
model: string,
onMessage: (message: string) => Promise<void>,
onEnd = () => Promise<void>
) => {
try {
const rawPrompt = getTextPrompt(messages)
const tokenLimit = 4096 // 8000
const maxTokens = Math.round(tokenLimit - rawPrompt.length / 1.9)
const completion = await openai.createCompletion({
model,
prompt: messages,
temperature: 0.7,
max_tokens: Math.min(30, maxTokens),
stream: true,
})
for await (const message of streamCompletion(completion as any)) {
try {
const parsed = JSON.parse(message)
const { text } = parsed.choices[0]
try {
await onMessage(text)
} catch (err) {
console.error(
'Could not process stream message (callback failed)',
message,
err
)
}
} catch (error) {
console.error('Could not JSON parse stream message', message, error)
}
}
try {
await onEnd()
} catch (err) {
console.error('onEnd callback failed', err)
}
} catch (error: any) {
if (error.code) {
try {
const parsed = JSON.parse(error.body)
console.error('An error occurred during OpenAI request: ', parsed)
} catch (error) {
console.error(
'An error occurred during OpenAI request (invalid json): ',
error
)
}
} else {
console.error('An error occurred during OpenAI request', error)
}
}
} |