LocoLama / app.py
DrDomedag's picture
Update app.py
1c9bb19 verified
import gradio as gr
from huggingface_hub import InferenceClient
import random
"""
For more information on `huggingface_hub` Inference API support, please check the docs: https://huggingface.co/docs/huggingface_hub/v0.22.2/en/guides/inference
"""
#client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")
#client = InferenceClient("DrDomedag/LocoLama")
#client = InferenceClient("unsloth/llama-3.2-1b-instruct-bnb-4bit")
#client = InferenceClient("unsloth/llama-3.2-1b-bnb-4bit")
client = InferenceClient("unsloth/Llama-3.2-1B-Instruct") # Works!
#client = InferenceClient("unsloth/Llama-3.2-3B-Instruct") # Works!
#client = InferenceClient("DrDomedag/LocoLamav2")
#client = InferenceClient("T3lli/lora_model")
#client = InferenceClient("T3lli/test")
words = [
# Nouns (250)
"apple", "bridge", "cat", "door", "engine", "forest", "giraffe", "horizon", "island", "jungle",
"kite", "lake", "mountain", "notebook", "ocean", "penguin", "quartz", "rainbow", "snowflake", "tornado",
"umbrella", "village", "waterfall", "xylophone", "yard", "zebra", "actor", "ball", "camera", "desert",
"elephant", "firefly", "garden", "hat", "igloo", "jacket", "key", "lantern", "mirror", "necklace",
"owl", "piano", "quiver", "rocket", "squirrel", "trophy", "unicorn", "vase", "window", "yacht",
# ... Add more nouns to total 250
# Adjectives (250)
"brave", "calm", "delightful", "eager", "fancy", "gentle", "happy", "innocent", "jolly", "kind",
"lively", "magnificent", "noble", "optimistic", "peaceful", "quick", "radiant", "shy", "tidy", "unique",
"vivid", "warm", "yellow", "zealous", "adorable", "beautiful", "charming", "diligent", "energetic", "fierce",
"graceful", "humble", "intelligent", "jovial", "keen", "lovely", "merry", "neat", "outstanding", "pleasant",
"quirky", "respectful", "silly", "thoughtful", "upbeat", "vibrant", "whimsical", "youthful", "zany",
# ... Add more adjectives to total 250
# Verbs (250)
"accept", "bounce", "climb", "dance", "explore", "fly", "gather", "help", "imagine", "jump",
"kick", "laugh", "move", "notice", "open", "play", "question", "run", "sing", "talk",
"understand", "visit", "wait", "yell", "zoom", "answer", "build", "create", "dig", "enjoy",
"focus", "grow", "hunt", "identify", "juggle", "know", "learn", "measure", "negotiate", "observe",
"perform", "quiet", "record", "search", "travel", "update", "volunteer", "wander", "write",
# ... Add more verbs to total 250
# Adverbs (250)
"abruptly", "beautifully", "carefully", "diligently", "eagerly", "faithfully", "gracefully", "happily",
"immediately", "joyfully", "kindly", "loudly", "magically", "neatly", "openly", "politely", "quickly",
"rarely", "silently", "thoughtfully", "unexpectedly", "vividly", "warmly", "yawningly", "zealously",
"accidentally", "boldly", "cheerfully", "deliberately", "enthusiastically", "frequently", "gently", "honestly",
"intensely", "justly", "knowingly", "lightly", "merrily", "nervously", "officially", "partially", "quietly",
"readily", "safely", "terribly", "urgently", "vaguely", "wildly", "yearly", "zestfully",
# ... Add more adverbs to total 250
]
class WordGame:
def __init__(self, chatbot):
self.points = 0
self.target_word = ""
self.attempts = 3
self.chatbot = chatbot
self.generate_task()
def generate_task(self):
self.attempts = 3
self.target_word = random.choice(words)
#print(f"New target word: {self.target_word}")
return self.target_word
def check_input_for_word(self, string):
if self.target_word in string.lower():
#print(f"The player input the target word and the task was reset.")
self.generate_task()
self.points -= 1
#self.update_status(message="You input the target word yourself, so you lost one point and the game reset.")
return True
else:
#print(f"The player did not input the target word, so that's good.")
return False
def check_output_for_word(self, string):
#print(f"Checking for '{self.target_word}' in '{string}'.")
if self.target_word in string.lower():
self.points += self.attempts
#print(f"The player scored {self.attempts} points and has a total of {self.points}.")
score_gained = self.attempts
self.generate_task()
return f"Success! You earned {score_gained} points!"
#self.update_status(message=f"Success! You earned {score_gained} points!")
else:
#print("The response did not contain the word.")
self.attempts -= 1
#print(f"Remaining attempts: {self.attempts}")
if self.attempts <= 0:
self.generate_task()
#print(f"The player ran out of attempts.")
return f"You did not win in three attempts. Generating new target word."
#self.update_status(message=f"You did not win in three attempts. Generating new target word.")
else:
#print(f"The player has attempts left.")
return "That didn't quite hit the mark. Try again!"
def update_status(self, message=""):
#gr.ChatInterface.update(title=f'The Game - Current score: {self.points}, remaining attempts: {self.attempts}, target word: "{self.target_word}" {message}')
self.chatbot.update(title=f'The Game - Current score: {self.points}, remaining attempts: {self.attempts}, target word: "{self.target_word}" {message}')
return f'Current score: {self.points}, remaining attempts: {self.attempts}, target word: "{self.target_word}" {message}'
def respond(
message,
history: list[tuple[str, str]],
system_message,
max_tokens,
temperature,
top_p,
):
messages = [{"role": "system", "content": system_message}]
print("message:")
print(message)
for val in 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": message})
response = ""
for message in client.chat_completion(
messages,
max_tokens=max_tokens,
stream=True,
temperature=temperature,
top_p=top_p,
):
token = message.choices[0].delta.content
response += token
yield response
print("response:")
print(response)
game.check_output_for_word(response)
print(game.update_status())
'''
if game.check_input_for_word(str(message)):
response = response + " \n\n---\n\n You input the word and lost one point!"
else:
output_check_result = game.check_output_for_word(response)
response = response + " \n\n---\n\n" + output_check_result
response = response + "\n" + game.update_status()
return response
'''
"""
For information on how to customize the ChatInterface, peruse the gradio docs: https://www.gradio.app/docs/chatinterface
"""
demo = gr.ChatInterface(
respond,
title=f"The Game",
additional_inputs=[
gr.Textbox(value="You are a friendly Chatbot.", label="System message"),
gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"),
gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"),
gr.Slider(
minimum=0.1,
maximum=1.0,
value=0.95,
step=0.05,
label="Top-p (nucleus sampling)",
),
],
)
game = WordGame(demo)
if __name__ == "__main__":
demo.launch()