ivanoctaviogaitansantos commited on
Commit
e70e67b
·
verified ·
1 Parent(s): c24f74b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +63 -38
app.py CHANGED
@@ -1,54 +1,79 @@
1
  from sambanova import SambaNova
2
  import gradio as gr
3
- import sambanova_gradio
 
4
 
5
- # Inicializa el cliente de SambaNova
 
 
 
 
6
  client = SambaNova(
7
- api_key="TU_API_KEY_AQUI", # 👈 Reemplaza por tu API key
8
  base_url="https://api.sambanova.ai/v1",
9
  )
10
 
11
- # Función de análisis de imagen
12
- def analyze_image(image):
13
- # Convierte la imagen subida a base64
14
- import base64
15
- import io
16
- from PIL import Image
 
 
 
 
 
 
 
 
 
17
 
18
- buffered = io.BytesIO()
19
- image.save(buffered, format="PNG")
20
- img_base64 = base64.b64encode(buffered.getvalue()).decode()
 
 
 
21
 
22
- # Envía la solicitud al modelo
23
  response = client.chat.completions.create(
24
  model="Llama-4-Maverick-17B-128E-Instruct",
25
- messages=[
26
- {
27
- "role": "user",
28
- "content": [
29
- {"type": "text", "text": "Describe esta imagen de forma detallada y natural."},
30
- {"type": "image_url", "image_url": {"url": f"data:image/png;base64,{img_base64}"}},
31
- ],
32
- }
33
- ],
34
- temperature=0.2,
35
  top_p=0.9,
36
  )
37
 
38
- # Devuelve la descripción generada
39
- return response.choices[0].message.content
 
40
 
41
- # Interfaz de Gradio
42
- demo = gr.Interface(
43
- fn=analyze_image,
44
- inputs=gr.Image(label="Sube una imagen", type="pil"),
45
- outputs=gr.Textbox(label="Descripción generada"),
46
- title="🧠 Batuto Maverick - Llama-4",
47
- description="Sube una imagen y deja que la IA te diga lo que ve."
48
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
 
50
- # Lanza la app
51
- if __name__ == "__main__":
52
- demo.launch()
53
-
54
-
 
1
  from sambanova import SambaNova
2
  import gradio as gr
3
+ import base64, io, os
4
+ from PIL import Image
5
 
6
+ # =========================
7
+ # CONFIGURACIÓN DEL CLIENTE
8
+ # =========================
9
+
10
+ # Obtiene la API Key desde los secretos del Space (configurada en Settings → Variables and secrets)
11
  client = SambaNova(
12
+ api_key=os.getenv("SAMBANOVA_API_KEY"),
13
  base_url="https://api.sambanova.ai/v1",
14
  )
15
 
16
+ # =========================
17
+ # FUNCIÓN PRINCIPAL
18
+ # =========================
19
+
20
+ def chat_with_ai(system_prompt, message, image, history_list):
21
+ """
22
+ Chat natural con comprensión visual e instrucciones personalizadas (system prompt).
23
+ """
24
+ # Construye contenido del mensaje
25
+ content = [{"type": "text", "text": message}]
26
+ if image is not None:
27
+ buffered = io.BytesIO()
28
+ image.save(buffered, format="PNG")
29
+ img_b64 = base64.b64encode(buffered.getvalue()).decode()
30
+ content.append({"type": "image_url", "image_url": {"url": f"data:image/png;base64,{img_b64}"}})
31
 
32
+ # Construye historial
33
+ messages = [{"role": "system", "content": system_prompt or "Eres un asistente útil, natural y descriptivo."}]
34
+ for user, bot in history_list:
35
+ messages.append({"role": "user", "content": user})
36
+ messages.append({"role": "assistant", "content": bot})
37
+ messages.append({"role": "user", "content": content})
38
 
39
+ # Llama al modelo de SambaNova
40
  response = client.chat.completions.create(
41
  model="Llama-4-Maverick-17B-128E-Instruct",
42
+ messages=messages,
43
+ temperature=0.7,
 
 
 
 
 
 
 
 
44
  top_p=0.9,
45
  )
46
 
47
+ reply = response.choices[0].message.content
48
+ history_list.append((message, reply))
49
+ return history_list, "", None
50
 
51
+ # =========================
52
+ # INTERFAZ DE GRADIO
53
+ # =========================
54
+
55
+ with gr.Blocks(title="🧠 Batuto Maverick Pro") as demo:
56
+ gr.Markdown("## 🧠 Batuto Maverick Pro – Chat con IA Visual y Personalización de Instrucciones")
57
+ gr.Markdown("Chatea naturalmente con el modelo **Llama-4 Maverick**. Puedes subir imágenes y configurar cómo quieres que se comporte la IA.")
58
+
59
+ with gr.Accordion("⚙️ Instrucciones del Asistente (System Prompt)", open=True):
60
+ system_prompt = gr.Textbox(
61
+ label="Instrucciones personalizadas",
62
+ placeholder="Ejemplo: Responde como un experto en arte amable y detallado.",
63
+ lines=3,
64
+ value="Eres un asistente amigable y descriptivo. Responde con naturalidad y analiza imágenes de forma detallada."
65
+ )
66
+
67
+ chatbot = gr.Chatbot(label="Conversación con Llama-4 Maverick", height=500)
68
+ with gr.Row():
69
+ msg = gr.Textbox(placeholder="Escribe tu mensaje aquí...", scale=4)
70
+ img = gr.Image(type="pil", label="Imagen opcional", scale=1)
71
+
72
+ with gr.Row():
73
+ send = gr.Button("Enviar 🚀")
74
+ clear = gr.Button("🧹 Limpiar Chat")
75
+
76
+ send.click(chat_with_ai, [system_prompt, msg, img, chatbot], [chatbot, msg, img])
77
+ clear.click(lambda: ([], "", None), outputs=[chatbot, msg, img])
78
 
79
+ demo.launch()