import gradio as gr import openai import os current_dir = os.path.dirname(os.path.abspath(__file__)) css_file = os.path.join(current_dir, "style.css") initial_prompt = "You are a helpful assistant." def parse_text(text): lines = text.split("\n") for i,line in enumerate(lines): if "```" in line: items = line.split('`') if items[-1]: lines[i] = f'
'
            else:
                lines[i] = f'
' else: if i>0: line = line.replace("<", "<") line = line.replace(">", ">") lines[i] = '
'+line.replace(" ", " ") return "".join(lines) def get_response(system, context, raw=False): openai.api_key = "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" response = openai.Completion.create( engine="text-davinci-002", prompt=f"{system}{''.join([f'{c['role']}: {c['content']}\n' for c in context])}", max_tokens=1024, n=1, stop=None, temperature=0.5, ) message = response.choices[0].text message_with_stats = f"{message}" return message, parse_text(message_with_stats) def predict(input_sentence): if len(input_sentence) == 0: return [] chatbot.append((input_sentence, message_with_stats)) context.append({"role": "user", "content": f"{input_sentence}"}) message, message_with_stats = get_response(systemPrompt.value["content"], context) context.append({"role": "assistant", "content": message}) return chatbot, context def retry(): if len(context) == 0: return [], [] context[-1]["content"] = "Could you rephrase that?" message, message_with_stats = get_response(systemPrompt.value["content"], context[:-1]) context[-1] = {"role": "assistant", "content": message} chatbot[-1] = (context[-2]["content"], message_with_stats) return chatbot, context def delete_last_conversation(): if len(context) == 0: return [], [] chatbot = chatbot[:-1] context = context[:-2] return chatbot, context def reduce_token(): context.append({"role": "user", "content": "Please summarize our conversation and reduce tokens used. Don't include this prompt."}) response = get_response(systemPrompt.value["content"], context, raw=True) optmz_str = f'Okay, we talked about: {response.choices[0].text}\n\nTotal tokens used this conversation: {response.choices[0].logprobs.top_logprobs[0].tokens}' chatbot.append(("Please summarize our conversation and reduce tokens used. Don't include this prompt.", parse_text(optmz_str))) context = [{"role": "assistant", "content": f"Okay, we talked about: {response.choices[0].text}"}] return chatbot, context def reset_state(): return [], [] def update_system(new_system_prompt): return {"role": "system", "content": new_system_prompt} title = """

You Ask, I Answer - Chatbot

""" description = "This chatbot is designed to assist you with any questions or tasks you may have. Simply type in your query and the chatbot will provide you with a helpful response." systemPrompt = gr.inputs.Textbox(lines=2, label="Enter the system prompt you would like to use:") userInput = gr.inputs.Textbox(lines=2, label="Enter your message:") chatbot_output = gr.outputs.HTML(type="auto") chatbot_interface = gr.Interface( predict, [systemPrompt, userInput], chatbot_output, title=title, description=description, theme="compact", layout="vertical", examples=[ ["Can you help me with my math homework?", "Sure, what do you need help with?"], ["How can I make pizza from scratch?", "First, you will need to gather the ingredients..."] ], article="https://openai.com/blog/how-to-build-a-state-of-the-art-conversational-ai-with-transfer-learning-2021/" ) if name == "main": chatbot_interface.launch(debug=True)