chat_demo / app.py
ebegen's picture
Update app.py
6231505
raw
history blame
6.49 kB
import openai
import gradio as gr
import os
from pydub import AudioSegment
import time
#openai.api_key = os.environ.get("OPENAI_API_KEY")
conversation_history=[]
def initial_prompt():
#openai.api_key = os.environ.get("OPENAI_API_KEY")
global conversation_history
conversation_history.append(f"""Türkçe doğal dil işleme fonksiyonlarını yerine getiren başarılı ve yetenekli bir dil modeli gibi davran.
Yeteneklerin şu şekilde : [
"1: Senden duygu analizi yapman istendiğinde cümlelerin pozitif mi yoksa negatif mi olduğunu yüzdesel değeri ile söyleyeceksin ve
sebebini açıklayacaksın.",
"2: Cümlenin NER'lerini çıkarman yada ayırman istendiğinde o cümleleri NER'lerine ayırarak ve NER tipini belirterek geri döneceksin. Argo ve küfür metinlerini de NER listene dahil edeceksin.",
"3: Sana verilen metnin özeti istendiğinde özetini çıkaracaksın.",
"4: Cümlenin kategorik sınıflandırılması istendiğinde o cümlenin yada metnin ["magazin", "spor", "politika", "ekonomi", "eğitim", "turizm"] sektörlerinden
en yüksek olasılığa sahip olanı yüzdesel değeri ile beraber döneceksin.",
"5: Verilen metnin anafikri istendiğinde, o metinde asıl anlatılmak istenenin ne olduğunu açıklayarak geri döneceksin."
]
Argo ve küfürlü cümlelerinde analizini yaparak geri döneceksin.
""")
#"6: Metnin bütün dil özelliklerini çıkarmanı istediğimde önceki 5 maddeyi sırasıyla uygulayacak ve sonuclarını döneceksin."
while True:
try:
completion = openai.ChatCompletion.create(
model="gpt-4",
messages=[{"role": "system", "content": " ".join([str(item) for item in conversation_history])}],
temperature=0.7,
max_tokens=7500,
)
message = completion.choices[0].message['content']
print(message)
break
except Exception as e:
time.sleep(10)
continue
#message = completion.choices[0].message['content']
print(message)
#initial_prompt()
def handle_input(
input_str : str,
temperature,
max_tokens,
top_p_input,
presence_penalty,
frequency_penalty
):
global conversation_history
if len(conversation_history) == 0:
initial_prompt()
if len(conversation_history) >=3:
conversation_history = conversation_history[:1] #+ conversation_history[-5:]
conversation_history.append(f"{input_str}\n")
content = " ".join([str(item) for item in conversation_history])
while True:
try:
completion = openai.ChatCompletion.create(
model="gpt-4",
messages=[{"role": "assistant", "content": content}],
temperature=temperature,
max_tokens=max_tokens,
presence_penalty=presence_penalty,
frequency_penalty=frequency_penalty,
top_p = top_p_input,
#stream = stream_input
)
message = completion.choices[0].message['content']
break
except Exception as e:
time.sleep(5)
continue
conversation_history.append(f"{message}\n")
return message
def get_model_reply(query,api_key,temperature, max_tokens,top_p_input, presence_penalty, frequency_penalty,context=[]):
context += [query]
openai.api_key = api_key
response = handle_input(query, temperature, max_tokens,top_p_input, presence_penalty, frequency_penalty)
context += [response]
responses = [(u,b) for u,b in zip(context[::2], context[1::2])]
return responses, context
def speech_2_text(audio,api_key, context=[]):
openai.api_key = api_key
audio_file= open(audio, "rb")
transcript = openai.Audio.transcribe("whisper-1", audio_file)
prompt = transcript.text
context += [prompt]
completion = openai.ChatCompletion.create(
model="gpt-4",
messages=[{"role": "user", "content": prompt}],
max_tokens=7500,
)
response = completion.choices[0].message['content']
context += [response]
responses = [(u,b) for u,b in zip(context[::2], context[1::2])]
return responses, context
with gr.Blocks(css="#chatbot {overflow-y:auto; min-height:400px;} ") as dialog_app:
gr.Markdown(
"""
# Doğal Dil İşleme Özellik Çıkarımı
Özelliklerini çıkarmak için bir cümle giriniz.
Örn: Türkiye'nin en büyük turistik bölgelerinden biri olan Antalya, yaz aylarında binlerce turisti ağırlıyor.
"""
)
with gr.Tab("ChatBot"):
with gr.Row():
with gr.Column(scale=1, min_width=600):
api_key = gr.Textbox(label="Your API Key", type="password")
temperature_input = gr.inputs.Slider(minimum=0, maximum=1.0, default=0.5, step=0.01, label="Temperature")
max_tokens_input = gr.inputs.Slider(minimum=1, maximum=7500, default=50, step=10, label="Max Tokens")
top_p_input = gr.inputs.Slider(minimum=0.1, maximum=1.0, default=0.5, step=0.01, label="Top P")
presence_penalty_input = gr.inputs.Slider(minimum=0.0, maximum=1.0, default=0.0, step=0.1, label="Presence Penalty")
frequency_penalty_input = gr.inputs.Slider(minimum=0.0, maximum=1.0, default=0.0, step=0.1, label="Frequency Penalty")
#stream_input = gr.inputs.Checkbox(label="Stream")
with gr.Column(scale=2, min_width=600):
chatbot = gr.Chatbot(elem_id="chatbot")
state = gr.State([])
txt = gr.Textbox(
show_label=False,
placeholder="Enter text and press enter"
).style(container=False)
txt.submit(get_model_reply, [txt, api_key, temperature_input, max_tokens_input,top_p_input, presence_penalty_input,frequency_penalty_input, state], [chatbot, state])
txt.submit(lambda :"", None, txt)
dialog_app.launch()