| import subprocess |
| import sys |
| import os |
|
|
| |
| REQUIRED = ["gradio==4.44.1", "deep-translator==1.11.4", "llama-cpp-python==0.2.90"] |
| for pkg in REQUIRED: |
| try: |
| __import__(pkg.split("==")[0].replace("-", "_")) |
| except ImportError: |
| print(f" Installing {pkg}...") |
| subprocess.check_call([sys.executable, "-m", "pip", "install", pkg]) |
|
|
| import gradio as gr |
| from deep_translator import GoogleTranslator |
| from llama_cpp import Llama |
|
|
| |
| print("🥔 Loading Potodoo...") |
| llm = Llama( |
| model_path="Potodoo-V1.Q4_K_M.gguf", |
| n_ctx=512, |
| n_gpu_layers=0, |
| n_threads=2, |
| verbose=False |
| ) |
| print("✅ Potodoo ready!") |
|
|
| LANG_MAP = { |
| "Português (BR)": "pt", |
| "Español": "es", |
| "Français": "fr", |
| "Italiano": "it", |
| "日本語": "ja", |
| "한국어": "ko" |
| } |
|
|
| def respond(message, history, language): |
| english_input = message |
| target_lang = LANG_MAP.get(language) |
| |
| if target_lang: |
| try: |
| t = GoogleTranslator(source=target_lang, target='en') |
| english_input = t.translate(message) |
| except: |
| pass |
|
|
| messages = [{"role": "system", "content": "You are Potodoo, a helpful AI assistant."}] |
| |
| if history: |
| messages.extend(history[-4:]) |
| |
| messages.append({"role": "user", "content": english_input}) |
| |
| prompt = "" |
| for msg in messages: |
| prompt += f"<|im_start|>{msg['role']}\n{msg['content']}<|im_end|>\n" |
| prompt += "<|im_start|>assistant\n" |
|
|
| output = llm(prompt, max_tokens=128, stop=["<|im_end|>"], temperature=0.7) |
| eng_resp = output['choices'][0]['text'].strip() |
|
|
| final_resp = eng_resp |
| if target_lang: |
| try: |
| t = GoogleTranslator(source='en', target=target_lang) |
| final_resp = t.translate(eng_resp) |
| except: |
| pass |
|
|
| return final_resp |
|
|
| |
| with gr.Blocks(theme=gr.themes.Soft(primary_hue="purple")) as demo: |
| gr.Markdown("# 🥔 Potodoo\n*Multilingual AI Assistant*") |
| |
| chatbot = gr.Chatbot(height=400) |
| |
| with gr.Row(): |
| msg = gr.Textbox(scale=4, show_label=False, placeholder="Type a message...") |
| lang = gr.Dropdown( |
| choices=["English", "Português (BR)", "Español", "Français", "Italiano", "日本語", "한국어"], |
| value="English", |
| scale=1 |
| ) |
| |
| msg.submit(respond, [msg, chatbot, lang], [msg, chatbot]) |
| gr.ClearButton([msg, chatbot], value="Clear Chat") |
|
|
| demo.launch(server_name="0.0.0.0", server_port=7860) |