|
import streamlit as st |
|
from huggingface_hub import InferenceClient |
|
import random |
|
|
|
|
|
client = InferenceClient("unsloth/Llama-3.2-1B-Instruct") |
|
|
|
words = [ |
|
"apple", "pear", "banana", "strawberry", "mad" |
|
] |
|
|
|
|
|
class WordGame: |
|
def __init__(self): |
|
self.points = 0 |
|
self.target_word = "" |
|
self.attempts = 3 |
|
self.generate_task() |
|
|
|
def generate_task(self): |
|
self.attempts = 3 |
|
self.target_word = random.choice(words) |
|
st.session_state["target_word"] = self.target_word |
|
st.title(f'The Game - Current score: {self.points}, remaining attempts: {self.attempts}') |
|
|
|
def check_input_for_word(self, user_input): |
|
if self.target_word in user_input.lower(): |
|
self.generate_task() |
|
self.points -= 1 |
|
st.write(f"You input the target word yourself, so you lost one point and the game reset.") |
|
return True |
|
else: |
|
return False |
|
|
|
def check_output_for_word(self, response): |
|
if self.target_word in response.lower(): |
|
self.points += self.attempts |
|
score_gained = self.attempts |
|
self.generate_task() |
|
return f"Success! You earned {score_gained} points!" |
|
else: |
|
self.attempts -= 1 |
|
if self.attempts <= 0: |
|
self.generate_task() |
|
return f"You did not win in three attempts. Generating new target word." |
|
else: |
|
return "That didn't quite hit the mark. Try again!" |
|
|
|
def respond(self, user_message): |
|
messages = [{"role": "system", "content": st.session_state["system_message"]}] |
|
|
|
for val in st.session_state["history"]: |
|
if val[0]: |
|
messages.append({"role": "user", "content": val[0]}) |
|
if val[1]: |
|
messages.append({"role": "assistant", "content": val[1]}) |
|
|
|
messages.append({"role": "user", "content": user_message}) |
|
response = "" |
|
for message in client.chat_completion( |
|
messages, max_tokens=st.session_state["max_tokens"], stream=True, |
|
temperature=st.session_state["temperature"], top_p=st.session_state["top_p"] |
|
): |
|
token = message.choices[0].delta.content |
|
response += token |
|
|
|
output_check_result = self.check_output_for_word(response) |
|
st.write(response + f"\n\n---\n\n{output_check_result}") |
|
st.write(f'Current score: {self.points}, remaining attempts: {self.attempts}') |
|
|
|
|
|
st.session_state["history"].append((user_message, response)) |
|
st.session_state["system_message"] = response |
|
|
|
|
|
game = WordGame() |
|
|
|
|
|
st.session_state["history"] = [] |
|
st.session_state["system_message"] = "You are a friendly Chatbot." |
|
|
|
|
|
|
|
st.session_state["system_message"] = system_message_input |
|
|
|
user_message = st.text_ |