File size: 6,212 Bytes
e55fa0c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
156
157
158
159
160
161
162
163
164
165
166
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:

    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()