OrangyDev's picture
Update app.py
8d7104c verified
import gradio as gr
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
# 1. CONFIGURACIÓN DE TU IA
userxd = "OrangyDev"
model_id = f"{userxd}/godot4-expert-ai"
# Cargamos modelo y tokenizer
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32,
device_map="auto"
)
# 2. FUNCIÓN DE RESPUESTA (MEZCLADA)
def respond(message, history, system_message, max_tokens, temperature, top_p):
# Formateamos el prompt con la personalidad que elijas en el slider
prompt = f"### System: {system_message}\n"
for user_msg, assistant_msg in history:
prompt += f"### User: {user_msg}\n### Assistant: {assistant_msg}\n"
prompt += f"### User: {message}\n### Assistant:"
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
with torch.no_grad():
output = model.generate(
**inputs,
max_new_tokens=max_tokens,
temperature=temperature,
top_p=top_p,
do_sample=True,
repetition_penalty=1.2,
eos_token_id=tokenizer.eos_token_id
)
full_text = tokenizer.decode(output[0], skip_special_tokens=True)
response = full_text.split("### Assistant:")[-1].strip()
return response
# 3. INTERFAZ PROFESIONAL CON GRADIO BLOCKS
with gr.Blocks(theme="ocean") as demo:
gr.Markdown(f"# 🤖 Godot 4 Expert AI by {userxd}")
gr.Markdown("Especialista en GDScript, OrangyDev y el mundo de Rafa Laguna.")
with gr.Row():
with gr.Column(scale=4):
# El chat principal
chatbot = gr.ChatInterface(
fn=respond,
additional_inputs=[
gr.Textbox(value="Eres una IA experta en Godot 4. Ayuda al usuario con su código.", label="System message"),
gr.Slider(minimum=1, maximum=1024, value=256, step=1, label="Max new tokens"),
gr.Slider(minimum=0.1, maximum=2.0, value=0.7, step=0.1, label="Temperature"),
gr.Slider(minimum=0.1, maximum=1.0, value=0.95, step=0.05, label="Top-p"),
],
)
with gr.Sidebar():
gr.Markdown("### 🛠️ Configuración")
gr.Markdown("Ajusta la temperatura para que la IA sea más creativa o más precisa.")
gr.LoginButton() # Por si quieres restringir el acceso después
if __name__ == "__main__":
demo.launch()