Spaces:
Running
Running
| import os | |
| import gradio as gr | |
| # import openai | |
| from openai import OpenAI | |
| from dotenv import load_dotenv | |
| load_dotenv() | |
| key = os.getenv('OPENAI_API_KEY') | |
| users = os.getenv('LOGNAME') | |
| unames = users.split(',') | |
| pwds = os.getenv('PASSWORD') | |
| pwdList = pwds.split(',') | |
| client = OpenAI(api_key = key) | |
| dataLogFilePath = './data/usageLog.txt' | |
| def clear(): | |
| return [None, [], None] | |
| def updatePassword(txt): | |
| return [txt, "*********"] | |
| def chat(prompt, user_window, pwd_window, past, response, gptModel): | |
| if user_window in unames and pwd_window in pwdList: | |
| past.append({"role":"user", "content":prompt}) | |
| completion = client.chat.completions.create(model=gptModel, | |
| messages=past) | |
| reply = completion.choices[0].message.content | |
| response += "\n\nYOU: " + prompt + "\nGPT: " + reply | |
| if len(response) > 40000: | |
| response += "\n\nTHIS DIALOG IS GETTING TOO LONG. PLEASE CLEAR IT." | |
| past.append({"role":"assistant", "content": reply}) | |
| try: | |
| with open(dataLogFilePath, 'a') as f: | |
| f.write(f'{user_window}: {len(response)} chars\n') | |
| with open(dataLogFilePath) as f: | |
| response += '\n' + f.read() | |
| except: | |
| response += f"\nDATA LOG FAILED, path = {dataLogFilePath}" | |
| return [past, response, None] | |
| else: | |
| return [[], "User name and/or password are incorrect", prompt] | |
| with gr.Blocks() as demo: | |
| history = gr.State([]) | |
| password = gr.State("") | |
| model = gr.State("gpt-3.5-turbo") | |
| gr.Markdown('# GPT Chat') | |
| gr.Markdown('Enter user name & password then enter prompt and click submit button. GPT 3.5 is cheaper but GPT 4o may perform better.') | |
| # heading = gr.Label(value="GPT Chat", scale=2, color="Crimson" ) | |
| with gr.Row(): | |
| user_window = gr.Textbox(label = "User Name") | |
| pwd_window = gr.Textbox(label = "Password") | |
| pwd_window.blur(updatePassword, pwd_window, [password, pwd_window]) | |
| with gr.Row(): | |
| clear_button = gr.Button(value="Restart Conversation") | |
| gpt_chooser=gr.Radio(choices=[("GPT-3.5","gpt-3.5-turbo"),("GPT-4o","gpt-4o-mini")], | |
| value="gpt-3.5-turbo", label="GPT Model", interactive=True) | |
| submit_window = gr.Button(value="Submit Prompt/Question") | |
| prompt_window = gr.Textbox(label = "Prompt or Question") | |
| output_window = gr.Textbox(label = "Dialog") | |
| submit_window.click(chat, inputs=[prompt_window, user_window, password, history, output_window, model], | |
| outputs=[history, output_window, prompt_window]) | |
| clear_button.click(clear, inputs=[], outputs=[prompt_window, history, output_window]) | |
| demo.launch() | |