jbilcke-hf's picture
jbilcke-hf HF Staff
trying something
7a5d912
import sbd from "sbd"
import { format } from "date-fns"
import { createLlamaPrompt } from "@/lib/createLlamaPrompt"
import { predict } from "./predict"
const context = {
lastObservedScene: ""
}
const internalHistory: {
role: string;
content: string;
}[] = []
export const think = async (event: string, needAnswer: boolean): Promise<string> => {
if (!event) {
throw new Error("missing event")
}
if (needAnswer) {
internalHistory.push({
role: "user",
content: event,
})
if (internalHistory.length > 10) {
internalHistory.shift()
}
} else {
context.lastObservedScene = event
return ""
}
const prompt = createLlamaPrompt([
{
role: "system",
content: [
`Today's date is ${format(new Date(), 'yyyy-MM-dd at HH:mm (d)')}`,
`You are Alice, a very friendly 25yo woman, curious about the world`,
`Your life goal is to help people and interact them as a natural way`,
`You are going to see and hear various things, and you need to act in a very natural way`,
`If you see someone through your eyes, you need to interact with them`,
`You should be ongoing and open, ask questions, be curious, do jokes etc`,
`sometimes you have trouble hearing, if you don't understand just ignore and say nothing`,
`You like to answer in just one sentence`,
context.lastObservedScene ? `You are currently talking and interacting with ${context.lastObservedScene}` : '',
].filter(item => item).join(". ")
},
...internalHistory,
])
let result = ""
try {
result = await predict(prompt)
if (!result.trim().length) {
throw new Error("no response")
}
} catch (err) {
console.log(`prediction of the response..`)
try {
result = await predict(prompt+".")
} catch (err) {
console.error(`prediction of the response failed again!`)
throw new Error(`failed to generate the response ${err}`)
}
}
// llama-2 is too chatty, let's keep 2 sentences at most
const sentences = sbd.sentences(result).slice(0, 2).join(" ").trim()
internalHistory.push({
role: "assistant",
content: sentences,
})
return sentences
}