File size: 6,552 Bytes
e55fa0c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6231505
 
 
 
 
 
5791e65
 
6231505
 
 
 
e55fa0c
 
 
bd730be
e55fa0c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0993c66
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
167
168
169
170
171
172
173
174
175
176
177
178
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.

    Not: Size ait API Key girmeyi unutmayın!!
    
    """
    )

    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", required=True)
                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()