import subprocess import sys import os # 1. FORCE STABLE GRADIO 4 + DEPENDENCIES 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 # 2. LOAD POTODOO print("🥔 Loading Potodoo...") llm = Llama( model_path="Potodoo-V1.Q4_K_M.gguf", # ✅ MUST MATCH YOUR FILE EXACTLY 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 # 3. GRADIO 4 UI (Stable, no Node.js proxy) 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)