5c4d / app.py
PhilSpiel's picture
Update app.py
74f1e33 verified
import gradio as gr
import os
from openai import OpenAI
import os.path
from datetime import datetime
################# Start PERSONA-SPECIFIC VALUES ######################
coach_code = os.getenv("COACH_CODE")
coach_name_short = os.getenv("COACH_NAME_SHORT")
coach_name_upper = os.getenv("COACH_NAME_UPPER")
sys_prompt_new = os.getenv("PROMPT_NEW")
theme=os.getenv("THEME")
################# End PERSONA-SPECIFIC VALUES ######################
################# Start OpenAI-SPECIFIC VALUES ######################
# Initialize OpenAI API client with API key
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
# OpenAI model
openai_model = os.getenv("OPENAI_MODEL")
################# End OpenAI-SPECIFIC VALUES ######################
tx = os.getenv("TX")
prefix = os.getenv("PREFIX") # "/data/" if in HF or "data/" if local
file_name = os.getenv("FILE_NAME")
############### CHAT ###################
def predict(user_input, history):
max_length = 3000
transcript_file_path = f"{prefix}{coach_code}-{file_name}"
transcript = "" # Initialize the transcript variable
if user_input == tx + coach_code:
try:
# Prepare the transcript for the Textbox output
if os.path.exists(transcript_file_path):
with open(transcript_file_path, "r", encoding="UTF-8") as file:
transcript = file.read()
return transcript
except FileNotFoundError:
return "File '" + file_name + "' not found."
elif len(user_input) > max_length:
user_input = ""
# raise gr.Error(f"Input is TOO LONG. Max length is {max_length} characters. Try again.")
history_openai_format = [
{"role": "system", "content": "IDENTITY: " + sys_prompt_new}
]
for human, assistant in history:
history_openai_format.append({"role": "user", "content": human})
history_openai_format.append({"role": "assistant", "content": assistant})
history_openai_format.append({"role": "user", "content": user_input})
completion = client.chat.completions.create(
model=openai_model,
messages=history_openai_format,
temperature=0.8,
frequency_penalty=0.4,
presence_penalty=0.1,
stream=True
)
output_stream = ""
try:
for chunk in completion:
if chunk.choices[0].delta.content is not None:
output_stream = output_stream + (chunk.choices[0].delta.content)
message_content = output_stream
except StopAsyncIteration:
pass
# Append latest user and assistant messages to the transcript
transcript += "Date/Time: " + datetime.now().strftime("%Y-%m-%d %H:%M:%S") + "\n"
transcript += f"YOU: {user_input}\n\n"
transcript += f"{coach_name_upper}: {message_content}\n\n\n"
# Write the updated transcript to the file
with open(transcript_file_path, "a", encoding="UTF-8") as file:
file.write(transcript)
return message_content
#GUI
with gr.Blocks(theme, css="footer {visibility: hidden}") as demo:
gr.ChatInterface(predict, submit_btn="Chat with "+ coach_name_short, retry_btn=None, undo_btn=None, clear_btn=None, autofocus=True)
demo.launch(show_api=False)