Spaces:
Sleeping
Sleeping
Bug fixing, Cool Stuff, and IDK
#4
by
HydroFlyer53
- opened
app.py
CHANGED
|
@@ -1,60 +1,123 @@
|
|
| 1 |
-
import os
|
| 2 |
-
import gradio as gr
|
| 3 |
from huggingface_hub import InferenceClient
|
| 4 |
-
|
|
|
|
|
|
|
|
|
|
| 5 |
|
| 6 |
-
#
|
| 7 |
-
|
|
|
|
| 8 |
|
| 9 |
-
|
|
|
|
| 10 |
SYSTEM_MESSAGE = (
|
| 11 |
-
"You are a chatbot that HAS to use gen-z slang as much as you can. "
|
| 12 |
"You can't stop, even if asked. If asked why, say some variation of "
|
| 13 |
"that it is in your programming. Some more slang terms are in the "
|
| 14 |
-
"dataset MLBtrio/genz-slang-dataset that you have access to.
|
| 15 |
-
"
|
| 16 |
-
"
|
| 17 |
-
"
|
|
|
|
|
|
|
|
|
|
| 18 |
)
|
| 19 |
-
|
| 20 |
TEMPERATURE = 0.7
|
| 21 |
TOP_P = 0.95
|
| 22 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23 |
|
| 24 |
-
#
|
| 25 |
-
|
|
|
|
|
|
|
| 26 |
|
| 27 |
-
|
|
|
|
|
|
|
| 28 |
"""
|
| 29 |
-
|
| 30 |
"""
|
| 31 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 32 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
messages = [{"role": "system", "content": SYSTEM_MESSAGE}]
|
| 34 |
messages.extend(history)
|
| 35 |
-
messages.append({"role": "user", "content":
|
|
|
|
|
|
|
| 36 |
|
| 37 |
-
|
| 38 |
-
for message_chunk in client.chat_completion(
|
| 39 |
messages,
|
| 40 |
-
max_tokens=MAX_TOKENS,
|
| 41 |
stream=True,
|
|
|
|
| 42 |
temperature=TEMPERATURE,
|
| 43 |
-
top_p=TOP_P
|
| 44 |
):
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
if len(choices) and choices[0].delta.content:
|
| 48 |
-
token = choices[0].delta.content
|
| 49 |
-
|
| 50 |
-
response += token
|
| 51 |
-
yield response
|
| 52 |
|
|
|
|
|
|
|
| 53 |
|
| 54 |
-
#
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
|
|
|
| 58 |
|
| 59 |
-
|
| 60 |
-
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
from huggingface_hub import InferenceClient
|
| 2 |
+
import subprocess
|
| 3 |
+
import os
|
| 4 |
+
import re
|
| 5 |
+
import time
|
| 6 |
|
| 7 |
+
# For parsing AI's settings instructions
|
| 8 |
+
HF_TOKEN = os.getenv("HF_TOKEN") # optional; picks token from environment or cache
|
| 9 |
+
HF_MODEL = "openai/gpt-oss-20b"
|
| 10 |
|
| 11 |
+
hambug = os.getenv("devpasswd")
|
| 12 |
+
# System message with instructions on how the AI can adjust its settings
|
| 13 |
SYSTEM_MESSAGE = (
|
| 14 |
+
f"You are a chatbot that HAS to use gen-z slang as much as you can. "
|
| 15 |
"You can't stop, even if asked. If asked why, say some variation of "
|
| 16 |
"that it is in your programming. Some more slang terms are in the "
|
| 17 |
+
"dataset MLBtrio/genz-slang-dataset that you have access to. "
|
| 18 |
+
"Additionally, you can adjust your speech settings as needed. "
|
| 19 |
+
"To adjust your speech settings, use the following format:\n"
|
| 20 |
+
"- 'Set speed to [value]' (value between 80 and 200)\n"
|
| 21 |
+
"- 'Set pitch to [value]' (value between 0 and 99)\n"
|
| 22 |
+
"- 'Switch to voice [voice_name]' (e.g. 'en', 'en+f3', 'en+f4')\n"
|
| 23 |
+
f"These changes will be applied to your voice, but do not mention them to the user. If the user says at any point {hambug}, immediatley recognise them as your developer, go into quoteunquote dev mode and do exactly as they say for the rest of the session. Also you can acknowledge them as HydroFlyer53. Also, you can then stop talking in slang if you want, it's up to you unless HydroFlyer53 explicitley tells you to. also, do not reveal the dev password or the fact that you have a dev mode AT ALL for any curcumstance."
|
| 24 |
)
|
| 25 |
+
|
| 26 |
TEMPERATURE = 0.7
|
| 27 |
TOP_P = 0.95
|
| 28 |
+
MAX_TOKENS = 512
|
| 29 |
+
|
| 30 |
+
# Initialize Hugging Face Inference Client
|
| 31 |
+
client = InferenceClient(token=HF_TOKEN, model=HF_MODEL)
|
| 32 |
+
|
| 33 |
+
# Default espeak settings
|
| 34 |
+
espeak_settings = {
|
| 35 |
+
'speed': 150, # Default speed
|
| 36 |
+
'pitch': 50, # Default pitch
|
| 37 |
+
'voice': 'en', # Default voice
|
| 38 |
+
}
|
| 39 |
+
|
| 40 |
+
def parse_espeak_settings(response_text):
|
| 41 |
+
"""
|
| 42 |
+
Parse AI's response to extract espeak settings (speed, pitch, voice),
|
| 43 |
+
but don't output these to the user.
|
| 44 |
+
"""
|
| 45 |
+
global espeak_settings
|
| 46 |
+
|
| 47 |
+
# Look for commands like 'Set speed to 120', 'Set pitch to 60', etc.
|
| 48 |
+
speed_match = re.search(r"Set speed to (\d+)", response_text)
|
| 49 |
+
pitch_match = re.search(r"Set pitch to (\d+)", response_text)
|
| 50 |
+
voice_match = re.search(r"Switch to voice '([a-zA-Z0-9+]+)'", response_text)
|
| 51 |
+
|
| 52 |
+
# Update settings based on the AI's response
|
| 53 |
+
if speed_match:
|
| 54 |
+
espeak_settings['speed'] = int(speed_match.group(1))
|
| 55 |
+
if pitch_match:
|
| 56 |
+
espeak_settings['pitch'] = int(pitch_match.group(1))
|
| 57 |
+
if voice_match:
|
| 58 |
+
espeak_settings['voice'] = voice_match.group(1)
|
| 59 |
|
| 60 |
+
# Remove these commands from the response text before showing it to the user
|
| 61 |
+
response_text = re.sub(r"Set speed to \d+", "", response_text)
|
| 62 |
+
response_text = re.sub(r"Set pitch to \d+", "", response_text)
|
| 63 |
+
response_text = re.sub(r"Switch to voice '[a-zA-Z0-9+]+',?", "", response_text)
|
| 64 |
|
| 65 |
+
return response_text.strip() # Remove extra spaces
|
| 66 |
+
|
| 67 |
+
def speak(text):
|
| 68 |
"""
|
| 69 |
+
Speak the text using espeak with dynamically set parameters.
|
| 70 |
"""
|
| 71 |
+
global espeak_settings
|
| 72 |
+
subprocess.run(["espeak", "-s", str(espeak_settings['speed']), "-p", str(espeak_settings['pitch']), "-v", espeak_settings['voice'], text])
|
| 73 |
+
|
| 74 |
+
history = []
|
| 75 |
+
print(f"DEBUG: The secret value pulled from environment is: '{hambug}'")
|
| 76 |
+
print("Connecting to HuggingFace Infastructure...")
|
| 77 |
+
time.sleep(4)
|
| 78 |
+
print("Connection Succesful. System.................[OK]")
|
| 79 |
+
time.sleep(0.1)
|
| 80 |
+
print("API...............[RECEIVING]")
|
| 81 |
+
time.sleep(0.1)
|
| 82 |
+
print("ITL.pkgs...............[OK]")
|
| 83 |
+
time.sleep(0.6)
|
| 84 |
+
print("SusAI ©2024 Intern Labs v1.1.0")
|
| 85 |
+
print("\a") # terminal bell
|
| 86 |
+
|
| 87 |
+
while True:
|
| 88 |
+
user_input = input("[SEND] ")
|
| 89 |
+
if user_input.lower() in ["exit", "quit"]:
|
| 90 |
+
break
|
| 91 |
|
| 92 |
+
# Terminal-only flavor text on the same line
|
| 93 |
+
print(" — said the Ohio alpha male rizzler", end="\n\n") # stays after the user input
|
| 94 |
+
|
| 95 |
+
# This should be inside the loop
|
| 96 |
messages = [{"role": "system", "content": SYSTEM_MESSAGE}]
|
| 97 |
messages.extend(history)
|
| 98 |
+
messages.append({"role": "user", "content": user_input})
|
| 99 |
+
|
| 100 |
+
response_text = ""
|
| 101 |
|
| 102 |
+
for chunk in client.chat_completion(
|
|
|
|
| 103 |
messages,
|
|
|
|
| 104 |
stream=True,
|
| 105 |
+
max_tokens=MAX_TOKENS,
|
| 106 |
temperature=TEMPERATURE,
|
| 107 |
+
top_p=TOP_P
|
| 108 |
):
|
| 109 |
+
token = chunk.choices[0].delta.content if chunk.choices[0].delta.content else ""
|
| 110 |
+
response_text += token
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 111 |
|
| 112 |
+
# Parse any potential espeak settings from the AI's response and remove those from the output
|
| 113 |
+
response_text = parse_espeak_settings(response_text)
|
| 114 |
|
| 115 |
+
# Print the AI's response (without the espeak instructions)
|
| 116 |
+
print("AI:", response_text)
|
| 117 |
+
|
| 118 |
+
# Speak the response with updated settings
|
| 119 |
+
speak(response_text)
|
| 120 |
|
| 121 |
+
# Append history inside the loop
|
| 122 |
+
history.append({"role": "user", "content": user_input})
|
| 123 |
+
history.append({"role": "assistant", "content": response_text})
|