PotodooLM / app.py
OttoCapi's picture
Update app.py
d4ad754 verified
Raw
History Blame Contribute Delete
2.64 kB
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)