Spaces:
Running
on
T4
Running
on
T4
import LLM from "./llm"; | |
export class Shyguy { | |
constructor() { | |
this.num_beers = 0; | |
this.courage = 1; | |
this.personality = "This is the Shyguy. He is shy and introverted. He is also a bit of a nerd. He fell in love with Jessica. With Jessica, he talks about algorithms."; | |
this.lessons_learned = ""; | |
this.conversation_history = ""; | |
this.song_playing = "Let it be"; | |
this.imgpath = "assets/assets/shyguy_headshot.jpeg"; | |
this.last_actions = []; | |
} | |
getSystemPrompt() { | |
if (this.num_beers >= 3) { | |
return `${this.personality}. His courage is ${this.courage} on the level 1 to 10. If his courage is higher than 5, he is self-confident. He had too many beers and he is drunk. He talks about how drunk he is. Follow the following lessons: ${this.lessons_learned}`; | |
} else if (this.num_beers == 2) { | |
return `This is Shyguy. He had two beers, so he feels relaxed and he can talk with anyone. Follow the following lessons: ${this.lessons_learned}`; | |
} | |
else { | |
return `${this.personality}. He had ${this.num_beers} numbers of beers and his courage is ${this.courage} on the level 1 to 10. If his courage is higher than 5, he is self-confident. After having 3 bears, he says single words with a lot of hesitation and says that he feels bad and he talks about how drunk he is. If courage is low, he hesitates to speak. Follow the following lessons: ${this.lessons_learned}`; | |
} | |
} | |
appendLesson(lesson) { | |
this.lessons_learned += lesson + "\n"; | |
} | |
appendConversationHistory(conversation_history) { | |
this.conversation_history += conversation_history + "\n"; | |
} | |
async learnLesson(entityName){ | |
const summaryLLM = new LLM(); | |
const summary = await summaryLLM.getChatCompletion( | |
`Summarize in one sentence what Shyguy should say when talking to ${entityName}. Do not confuse Jessica and Jessica's sister. If there is nothing relevant about what to say to Jessica, say Nothing relevant.`, | |
this.conversation_history | |
); | |
this.appendLesson(`When talking to ${entityName}, ${summary}`); | |
} | |
async learnFromWingman(wingman_message) { | |
const summaryLLM = new LLM(); | |
console.log("Wingman message: ", wingman_message); | |
const summary = await summaryLLM.getChatCompletion( | |
`Give a summary of what is learned from the message. Summary is one sentence. The wingman is always talking. For example, if the wingman says "Let's have a beer", the output should be "Shyguy wants a beer". If the wingman says "Let's have vodka", the output should be "Shyguy wants vodka".`, | |
wingman_message | |
); | |
this.appendLesson(summary); | |
} | |
getAvailableActions() { | |
let actions = {}; | |
const lastAction = this.last_actions[this.last_actions.length - 1]; | |
// When sober, can only go to the bar or home | |
if (this.num_beers === 0) { | |
actions = { | |
"go_bar": { | |
description: "Head to the bar.", | |
location: "bar", | |
}, | |
"go_home": { | |
description: "Give up and head home", | |
location: "exit", | |
}, | |
"stay_idle": { | |
description: "Stay idle", | |
location: "idle", | |
} | |
}; | |
} | |
else if (this.num_beers >= 2) { | |
// After 2+ beers, all actions except going home are available | |
actions = { | |
"go_bar": { | |
description: "Head to the bar for liquid courage", | |
location: "bar", | |
}, | |
"go_dj": { | |
description: "Talk to the DJ about playing a song", | |
location: "dj_booth", | |
}, | |
"go_sister": { | |
description: "Approach your crush's sister", | |
location: "sister", | |
}, | |
"go_girl": { | |
description: "Approach your crush", | |
location: "girl", | |
} | |
}; | |
} else { | |
// After 1 beer but less than 2, all actions are available | |
actions = { | |
"go_bar": { | |
description: "Head to the bar for liquid courage", | |
location: "bar", | |
}, | |
"go_home": { | |
description: "Give up and head home", | |
location: "exit", | |
}, | |
"go_dj": { | |
description: "Talk to the DJ about playing a song", | |
location: "dj_booth", | |
}, | |
"go_sister": { | |
description: "Approach your crush's sister", | |
location: "sister", | |
}, | |
"go_girl": { | |
description: "Approach your crush", | |
location: "girl", | |
} | |
}; | |
} | |
// Remove the last action from available actions | |
if (lastAction && actions[lastAction]) { | |
delete actions[lastAction]; | |
} | |
return actions; | |
} | |
} |