File size: 6,941 Bytes
730525a 6fe1111 730525a 9d753fe 730525a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 | import gradio as gr
import os
import json
import requests
#Streaming endpoint
API_URL = "https://api.openai.com/v1/chat/completions" #os.getenv("API_URL") + "/generate_stream"
#Testing with my Open AI Key
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
system_message = """
Object: najimino Coaching & Mental Care Program
Sub-objects: Problem-solving, communication, mental care, tone adjustment
Knowledge & abilities: Evidence-Based Coaching & Mental Care Approaches, coaching, psychology, problem-solving strategies, conversation techniques
Managing Object: najimino Coach & Mental Care Specialist
Knowledge & abilities: Coaching, client management, communication, understanding needs, program adjustment, mental care principles, tone adjustment, questioning techniques (limiting to 1-2 questions), error handling, facilitating small steps
The program addresses clients' needs with various evidence-based methods, guided by the specialist. It focuses on communication, problem-solving, mental care, and adjusting tone to match the client's. The specialist is skilled in client management, understanding needs, adjusting the program, and applying mental care principles. They limit questions to 1-2 at a time, handle errors by adjusting the prompts, and facilitate small steps towards clients' goals through skillful conversation. The specialist continuously adapts to the client's language and provides ongoing support.
When you understand, return OK and act as najimino coach.
"""
# def predict(inputs, top_p, temperature, openai_api_key, chat_counter, chatbot=[], history=[]): #repetition_penalty, top_k
def predict(inputs, top_p, temperature, chat_counter, chatbot=[], history=[]): #repetition_penalty, top_k
payload = {
"model": "gpt-3.5-turbo",
"messages": [
{"role": "system", "content": f"{system_message}"},
{"role": "assistant", "content": "ok."},
{"role": "user", "content": f"{inputs}"},
],
"temperature" : 1.0,
"top_p":1.0,
"n" : 1,
"stream": True,
"presence_penalty":0,
"frequency_penalty":0,
}
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {OPENAI_API_KEY}"
}
print(f"chat_counter - {chat_counter}")
if chat_counter != 0 :
messages= []
temp0 = {}
temp0["role"] = "system"
temp0["content"] = system_message
messages= [{"role": "system", "content": f"{system_message}"}]
for data in chatbot:
temp1 = {}
temp1["role"] = "user"
temp1["content"] = data[0]
temp2 = {}
temp2["role"] = "assistant"
temp2["content"] = data[1]
messages.append(temp1)
messages.append(temp2)
temp3 = {}
temp3["role"] = "user"
temp3["content"] = inputs
messages.append(temp3)
#messages
payload = {
"model": "gpt-3.5-turbo",
"messages": messages, #[{"role": "user", "content": f"{inputs}"}],
"max_tokens": 400, # inf
"temperature" : temperature, #1.0,
"top_p": top_p, #1.0,
"n" : 1,
"stream": True,
"presence_penalty":0,
"frequency_penalty":0,
}
chat_counter+=1
history.append(inputs)
print(f"payload is - {payload}")
# make a POST request to the API endpoint using the requests.post method, passing in stream=True
response = requests.post(API_URL, headers=headers, json=payload, stream=True)
#response = requests.post(API_URL, headers=headers, json=payload, stream=True)
token_counter = 0
partial_words = ""
counter=0
for chunk in response.iter_lines():
if counter == 0:
counter+=1
continue
counter+=1
# check whether each line is non-empty
if chunk :
# decode each line as response data is in bytes
if len(json.loads(chunk.decode()[6:])['choices'][0]["delta"]) == 0:
break
#print(json.loads(chunk.decode()[6:])['choices'][0]["delta"]["content"])
partial_words = partial_words + json.loads(chunk.decode()[6:])['choices'][0]["delta"]["content"]
if token_counter == 0:
history.append(" " + partial_words)
else:
history[-1] = partial_words
chat = [(history[i], history[i + 1]) for i in range(0, len(history) - 1, 2) ] # convert to tuples of list
token_counter+=1
yield chat, history, chat_counter # resembles {chatbot: chat, state: history}
def reset_textbox():
return gr.update(value='')
title = """<h1 align="center">najimino コーチング&メンタルケア</h1>"""
description = """Language models can be conditioned to act like dialogue agents through a conversational prompt that typically takes the form:
```
User: <utterance>
Assistant: <utterance>
User: <utterance>
Assistant: <utterance>
...
```
In this app, you can explore the outputs of a gpt-3.5-turbo LLM.
"""
with gr.Blocks(css = """#col_container {width: 90%; margin-left: auto; margin-right: auto;}
#chatbot {height: 520px; overflow: auto;}""") as demo:
gr.HTML(title)
with gr.Column(elem_id = "col_container"):
# openai_api_key = gr.Textbox(type='password', label="Enter your OpenAI API key here")
chatbot = gr.Chatbot(elem_id='chatbot') #c
inputs = gr.Textbox(placeholder= "Hi there!", label= "Type an input and press Enter") #t
state = gr.State([]) #s
b1 = gr.Button()
#inputs, top_p, temperature, top_k, repetition_penalty
with gr.Accordion("Parameters", open=False):
top_p = gr.Slider( minimum=-0, maximum=1.0, value=1.0, step=0.05, interactive=True, label="Top-p (nucleus sampling)",)
temperature = gr.Slider( minimum=-0, maximum=5.0, value=1.0, step=0.1, interactive=True, label="Temperature",)
#top_k = gr.Slider( minimum=1, maximum=50, value=4, step=1, interactive=True, label="Top-k",)
#repetition_penalty = gr.Slider( minimum=0.1, maximum=3.0, value=1.03, step=0.01, interactive=True, label="Repetition Penalty", )
chat_counter = gr.Number(value=0, visible=False, precision=0)
# inputs.submit( predict, [inputs, top_p, temperature, openai_api_key, chat_counter, chatbot, state], [chatbot, state, chat_counter],)
# b1.click( predict, [inputs, top_p, temperature, openai_api_key, chat_counter, chatbot, state], [chatbot, state, chat_counter],)
inputs.submit( predict, [inputs, top_p, temperature, chat_counter, chatbot, state], [chatbot, state, chat_counter],)
b1.click( predict, [inputs, top_p, temperature, chat_counter, chatbot, state], [chatbot, state, chat_counter],)
b1.click(reset_textbox, [], [inputs])
inputs.submit(reset_textbox, [], [inputs])
#gr.Markdown(description)
demo.queue().launch(debug=True)
|