import os import gradio as gr # import openai from openai import OpenAI from dotenv import load_dotenv from pathlib import Path load_dotenv() key = os.getenv('OPENAI_API_KEY') users = os.getenv('LOGNAME') unames = users.split(',') pwds = os.getenv('PASSWORD') pwdList = pwds.split(',') #cwd = os.getcwd() client = OpenAI(api_key = key) dataLogFilePath = "/home/user/app/data/usageData.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" + '\npwds = ' + ','.join(pwdList) + 'pwd= ' + pwd_window + ' user= '+user_window, 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(allowed_paths=os.getenv(GRADIO_ALLOWED_PATHS))