File size: 3,775 Bytes
e19b60a
616ca44
 
e19b60a
c240a96
616ca44
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
import requests
from huggingface_hub import InferenceClient

client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")

GITHUB_RAW_URL = "https://raw.githubusercontent.com/ALPERALL/AlpDroid/main/prompt.txt"

def fetch_system_message():
    try:
        response = requests.get(GITHUB_RAW_URL)
        response.raise_for_status()
        return response.text.strip()
    except requests.exceptions.RequestException as e:
        return f"Error fetching system message: {str(e)}"

def respond(message, history):
    max_tokens = 512
    temperature = 0.7
    top_p = 0.95

    system_message = fetch_system_message()
    if system_message.startswith("Error"):
        yield system_message
        return

    messages = [{"role": "system", "content": system_message}]
    for val in history:
        if val[0]:
            messages.append({"role": "user", "content": val[0]})
        if val[1]:
            messages.append({"role": "assistant", "content": val[1]})

    messages.append({"role": "user", "content": message})
    response = ""

    for message in client.chat_completion(
        messages,
        max_tokens=max_tokens,
        stream=True,
        temperature=temperature,
        top_p=top_p,
    ):
        token = message.choices[0].delta.content
        response += token
        yield response

theme = gr.themes.Soft(
    primary_hue="purple",
    secondary_hue="purple",
    neutral_hue="gray",
    font=[
        gr.themes.GoogleFont("Exo"),
        "ui-sans-serif",
        "system-ui",
        "sans-serif"
    ]
).set(
    body_background_fill_dark="#010409",
    block_background_fill_dark="#010409",
    block_border_width="1px",
    block_title_background_fill_dark="#1e1c26",
    input_background_fill_dark="#161b22",
    button_secondary_background_fill_dark="#21262d",
    border_color_accent_dark="#2f353c",
    border_color_primary_dark="#2f353c",
    background_fill_secondary_dark="#010409",
    color_accent_soft_dark="transparent",
    code_background_fill_dark="#0d1117",
)

css = """
#input-textbox textarea {
    height: 50px !important;
    border-radius: 10px 0 0 10px !important;
    padding: 10px !important;
    font-size: 16px !important;
    resize: none !important;
}

#submit-button {
    width: 50px !important;
    height: 50px !important;
    border-radius: 0 10px 10px 0 !important;
    font-size: 24px !important;
    padding: 0 !important;
}
"""

with gr.Blocks(theme=theme, css=css) as demo:
    gr.Markdown("## 🤖 AlpDroid\nAlper A. tarafından yapıldı, yasadışı kullanımda sorumluluk kullanıcıya aittir.")

    chatbot = gr.Chatbot(label="AlpDroid")
    state = gr.State([])

    with gr.Row():
        txt = gr.Textbox(
            show_label=False,
            placeholder="Sohbet etmek için dokun...",
            scale=4,
            elem_id="input-textbox"
        )
        submit = gr.Button("⬆️", scale=1, elem_id="submit-button")

    with gr.Row():
        file_upload = gr.File(label="Dosya Yükle", file_types=["image", "video", ".pdf", ".txt"], file_count="single")

    def user_submit(message, file, history):
        if file is not None:
            message = f"Kullanıcı bir dosya gönderdi: {file.name}\nMesaj: {message}"

        history = history or []
        response_gen = respond(message, history)
        response = ""
        for token in response_gen:
            response = token
        history.append((message, response))
        return history, "", None  # textbox ve dosya input temizle

    submit.click(fn=user_submit, inputs=[txt, file_upload, state], outputs=[chatbot, txt, file_upload])
    txt.submit(fn=user_submit, inputs=[txt, file_upload, state], outputs=[chatbot, txt, file_upload])

if __name__ == "__main__":
    demo.launch(share=True)