import spaces import json import subprocess from llama_cpp import Llama from llama_cpp_agent import LlamaCppAgent from llama_cpp_agent import MessagesFormatterType from llama_cpp_agent.providers import LlamaCppPythonProvider from llama_cpp_agent.chat_history import BasicChatHistory from llama_cpp_agent.chat_history.messages import Roles import gradio as gr from huggingface_hub import hf_hub_download # UI элементтері үшін қазақша мәтін PLACEHOLDER_KZ = """

🐬 Dolphin-мен сұхбат

Төмендегіге хабарламаңызды теріңіз...

""" llm = None llm_model = None # Модельдерді жүктеу (бұл процесс CPU-да ұзақ уақыт алуы мүмкін) 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") hf_hub_download(repo_id="cognitivecomputations/dolphin-2.9.2-qwen2-72b-gguf", filename="qwen2-Q3_K_M.gguf", local_dir = "./models") # @spaces.GPU(duration=120) # <-- Бұл жолды алып тастадық (zero-GPU үшін) def respond( message, history: list[tuple[str, str]], model, max_tokens, temperature, top_p, top_k, repeat_penalty, ): global llm global llm_model if llm is None or llm_model != model: llm = Llama( model_path=f"models/{model}", flash_attn=False, # <-- CPU үшін 'False' n_gpu_layers=0, # <-- CPU үшін '0' (GPU қабаты жоқ) n_batch=1024, n_ctx=8192, ) llm_model=model provider = LlamaCppPythonProvider(llm) # System Prompt қазақшаға аударылды system_prompt_kz = """Сіз Dolphinсіз, адамзатқа көмектесетін жасанды интеллект көмекшісі. Сіз пайымдауға және негізгі қағидаттарды талдауға мамандандырылғансыз. Жауап бергенде, әрқашан жауаптарыңызды {пайымдау}{жауап} пішімінде рәсімдеңіз. Жауап бермес бұрын кемінде 6 пайымдау қадамын қолданыңыз және түпкі себептерге талдау жасаңыз. Алайда, егер жауап өте оңай болса және аз ойлануды қажет етсе, блогын бос қалдыруыңызға болады. Сіздің жауаптарыңыз егжей-тегжейлі, бай Markdown пішімдеуімен құрылымдалған және эмодзилермен тартымды болуы керек. Ұлы ғалымдар сияқты, түсіндірмелеріңізді кеңінен баяндаңыз. Егер мәселе өте қарапайым болмаса, әрқашан алдымен оны пайымдап алыңыз, қарапайым жағдайда тікелей жауап бере аласыз.""" agent = LlamaCppAgent( provider, system_prompt=system_prompt_kz, predefined_messages_formatter_type=MessagesFormatterType.CHATML, debug_output=True ) settings = provider.get_provider_default_settings() settings.temperature = temperature settings.top_k = top_k settings.top_p = top_p settings.max_tokens = max_tokens settings.repeat_penalty = repeat_penalty settings.stream = True messages = BasicChatHistory() for msn in history: user = { 'role': Roles.user, 'content': msn[0] } assistant = { 'role': Roles.assistant, 'content': msn[1] } messages.add_message(user) messages.add_message(assistant) stream = agent.get_chat_response(message, llm_sampling_settings=settings, chat_history=messages, returns_streaming_generator=True, print_output=False) outputs = "" for output in stream: outputs += output yield outputs # Gradio интерфейсі толығымен қазақшаға аударылды demo = gr.ChatInterface( respond, additional_inputs=[ gr.Dropdown([ 'cognitivecomputations_Dolphin3.0-R1-Mistral-24B-Q8_0.gguf', 'qwen2-Q3_K_M.gguf' ], value="cognitivecomputations_Dolphin3.0-R1-Mistral-24B-Q8_0.gguf", label="Модельді таңдаңыз"), gr.Slider(minimum=1, maximum=8192, value=8192, step=1, label="Макс. токендер"), gr.Slider(minimum=0.05, maximum=4.0, value=0.6, step=0.1, label="Температура"), gr.Slider( minimum=0.1, maximum=1.0, value=0.95, step=0.05, label="Top-p", ), gr.Slider( minimum=0, maximum=100, value=40, step=1, label="Top-k", ), gr.Slider( minimum=0.0, maximum=2.0, value=1.1, step=0.1, label="Қайталау штрафы", ), ], 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( body_background_fill_dark="#0f172a", block_background_fill_dark="#0f172a", block_border_width="1px", block_title_background_fill_dark="#070d1b", input_background_fill_dark="#0c1425", button_secondary_background_fill_dark="#070d1b", border_color_accent_dark="#21293b", border_color_primary_dark="#21293b", background_fill_secondary_dark="#0f172a", color_accent_soft_dark="transparent" ), # css=css, # <-- ui.py файлы болмағандықтан, бұл жолды алып тастаймыз retry_btn="🔄 Қайталау", undo_btn="↩️ Болдырмау", clear_btn="🗑️ Тазарту", submit_btn="➡️ Жіберу", description="Когнитивті Есептеулер: Chat Dolphin 🐬", chatbot=gr.Chatbot( scale=1, placeholder=PLACEHOLDER_KZ, # Қазақша placeholder show_copy_button=True ) ) if __name__ == "__main__": demo.launch()