Nonabzbssbbsbs commited on
Commit
99302a6
·
verified ·
1 Parent(s): 3484b26

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +155 -0
app.py ADDED
@@ -0,0 +1,155 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import spaces
2
+ import json
3
+ import subprocess
4
+ from llama_cpp import Llama
5
+ from llama_cpp_agent import LlamaCppAgent
6
+ from llama_cpp_agent import MessagesFormatterType
7
+ from llama_cpp_agent.providers import LlamaCppPythonProvider
8
+ from llama_cpp_agent.chat_history import BasicChatHistory
9
+ from llama_cpp_agent.chat_history.messages import Roles
10
+ import gradio as gr
11
+ from huggingface_hub import hf_hub_download
12
+
13
+ # UI элементтері үшін қазақша мәтін
14
+ PLACEHOLDER_KZ = """
15
+ <div style='padding: 20px; border: 1px solid #e0e0e0; border-radius: 10px; background-color: #f9f9f9; text-align: center;'>
16
+ <h2 style='color: #333;'>🐬 Dolphin-мен сұхбат</h2>
17
+ <p style='color: #555; font-size: 1.1em;'>Төмендегіге хабарламаңызды теріңіз...</p>
18
+ </div>
19
+ """
20
+
21
+ llm = None
22
+ llm_model = None
23
+
24
+ # Модельдерді жүктеу (бұл процесс CPU-да ұзақ уақыт алуы мүмкін)
25
+ hf_hub_download(repo_id="bartowski/cognitivecomputations_Dolphin3.0-R1-Mistral-24B-GGUF", filename="cognitivecomputations_Dolphin3.0-R1-Mistral-24B-Q8_0.gguf", local_dir = "./models")
26
+ hf_hub_download(repo_id="cognitivecomputations/dolphin-2.9.2-qwen2-72b-gguf", filename="qwen2-Q3_K_M.gguf", local_dir = "./models")
27
+
28
+ # @spaces.GPU(duration=120) # <-- Бұл жолды алып тастадық (zero-GPU үшін)
29
+ def respond(
30
+ message,
31
+ history: list[tuple[str, str]],
32
+ model,
33
+ max_tokens,
34
+ temperature,
35
+ top_p,
36
+ top_k,
37
+ repeat_penalty,
38
+ ):
39
+ global llm
40
+ global llm_model
41
+
42
+ if llm is None or llm_model != model:
43
+ llm = Llama(
44
+ model_path=f"models/{model}",
45
+ flash_attn=False, # <-- CPU үшін 'False'
46
+ n_gpu_layers=0, # <-- CPU үшін '0' (GPU қабаты жоқ)
47
+ n_batch=1024,
48
+ n_ctx=8192,
49
+ )
50
+ llm_model=model
51
+ provider = LlamaCppPythonProvider(llm)
52
+
53
+ # System Prompt қазақшаға аударылды
54
+ system_prompt_kz = """Сіз Dolphinсіз, адамзатқа көмектесетін жасанды интеллект көмекшісі. Сіз пайымдауға және негізгі қағидаттарды талдауға мамандандырылғансыз.
55
+ Жауап бергенде, әрқашан жауаптарыңызды <think>{пайымдау}</think>{жауап} пішімінде рәсімдеңіз.
56
+ Жауап бермес бұрын кемінде 6 пайымдау қадамын қолданыңыз және түпкі себептерге талдау жасаңыз.
57
+ Алайда, егер жауап өте оңай болса және аз ойлануды қажет етсе, <think></think> блогын бос қалдыруыңызға болады.
58
+ Сіздің жауаптарыңыз егжей-тегжейлі, бай Markdown пішімдеуімен құрылымдалған және эмодзилермен тартымды болуы керек.
59
+ Ұлы ғалымдар сияқты, түсіндірмелеріңізді кеңінен баяндаңыз. Егер мәселе өте қарапайым болмаса, әрқашан алдымен оны пайымдап алыңыз, қарапайым жағдайда тікелей жауап бере аласыз."""
60
+
61
+ agent = LlamaCppAgent(
62
+ provider,
63
+ system_prompt=system_prompt_kz,
64
+ predefined_messages_formatter_type=MessagesFormatterType.CHATML,
65
+ debug_output=True
66
+ )
67
+
68
+ settings = provider.get_provider_default_settings()
69
+ settings.temperature = temperature
70
+ settings.top_k = top_k
71
+ settings.top_p = top_p
72
+ settings.max_tokens = max_tokens
73
+ settings.repeat_penalty = repeat_penalty
74
+ settings.stream = True
75
+
76
+ messages = BasicChatHistory()
77
+
78
+ for msn in history:
79
+ user = {
80
+ 'role': Roles.user,
81
+ 'content': msn[0]
82
+ }
83
+ assistant = {
84
+ 'role': Roles.assistant,
85
+ 'content': msn[1]
86
+ }
87
+ messages.add_message(user)
88
+ messages.add_message(assistant)
89
+
90
+ stream = agent.get_chat_response(message, llm_sampling_settings=settings, chat_history=messages, returns_streaming_generator=True, print_output=False)
91
+
92
+ outputs = ""
93
+ for output in stream:
94
+ outputs += output
95
+ yield outputs
96
+
97
+ # Gradio интерфейсі толығымен қазақшаға аударылды
98
+ demo = gr.ChatInterface(
99
+ respond,
100
+ additional_inputs=[
101
+ gr.Dropdown([
102
+ 'cognitivecomputations_Dolphin3.0-R1-Mistral-24B-Q8_0.gguf',
103
+ 'qwen2-Q3_K_M.gguf'
104
+ ], value="cognitivecomputations_Dolphin3.0-R1-Mistral-24B-Q8_0.gguf", label="Модельді таңдаңыз"),
105
+ gr.Slider(minimum=1, maximum=8192, value=8192, step=1, label="Макс. токендер"),
106
+ gr.Slider(minimum=0.05, maximum=4.0, value=0.6, step=0.1, label="Температура"),
107
+ gr.Slider(
108
+ minimum=0.1,
109
+ maximum=1.0,
110
+ value=0.95,
111
+ step=0.05,
112
+ label="Top-p",
113
+ ),
114
+ gr.Slider(
115
+ minimum=0,
116
+ maximum=100,
117
+ value=40,
118
+ step=1,
119
+ label="Top-k",
120
+ ),
121
+ gr.Slider(
122
+ minimum=0.0,
123
+ maximum=2.0,
124
+ value=1.1,
125
+ step=0.1,
126
+ label="Қайталау штрафы",
127
+ ),
128
+ ],
129
+ theme=gr.themes.Soft(primary_hue="indigo", secondary_hue="blue", neutral_hue="gray",font=[gr.themes.GoogleFont("Exo"), "ui-sans-serif", "system-ui", "sans-serif"]).set(
130
+ body_background_fill_dark="#0f172a",
131
+ block_background_fill_dark="#0f172a",
132
+ block_border_width="1px",
133
+ block_title_background_fill_dark="#070d1b",
134
+ input_background_fill_dark="#0c1425",
135
+ button_secondary_background_fill_dark="#070d1b",
136
+ border_color_accent_dark="#21293b",
137
+ border_color_primary_dark="#21293b",
138
+ background_fill_secondary_dark="#0f172a",
139
+ color_accent_soft_dark="transparent"
140
+ ),
141
+ # css=css, # <-- ui.py файлы болмағандықтан, бұл жолды алып тастаймыз
142
+ retry_btn="🔄 Қайталау",
143
+ undo_btn="↩️ Болдырмау",
144
+ clear_btn="🗑️ Тазарту",
145
+ submit_btn="➡️ Жіберу",
146
+ description="Когнитивті Есептеулер: Chat Dolphin 🐬",
147
+ chatbot=gr.Chatbot(
148
+ scale=1,
149
+ placeholder=PLACEHOLDER_KZ, # Қазақша placeholder
150
+ show_copy_button=True
151
+ )
152
+ )
153
+
154
+ if __name__ == "__main__":
155
+ demo.launch()