|
import openai |
|
import gradio as gr |
|
import os |
|
from pydub import AudioSegment |
|
import time |
|
|
|
|
|
|
|
conversation_history=[] |
|
|
|
def initial_prompt(): |
|
|
|
|
|
|
|
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. |
|
""") |
|
|
|
|
|
|
|
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 |
|
|
|
|
|
print(message) |
|
|
|
|
|
|
|
|
|
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.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, |
|
|
|
) |
|
|
|
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") |
|
|
|
|
|
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() |
|
|