doky-opus / examples.py
oriolgds's picture
Testing completely new code
b0e9cd9 unverified
# examples.py - Ejemplos avanzados de uso del cliente
from client import LlamaClient
import asyncio
import time
from typing import List
import json
class AdvancedLlamaClient:
"""Cliente extendido con funcionalidades avanzadas"""
def __init__(self, base_url: str):
self.client = LlamaClient(base_url)
self.conversation_history = []
def continuous_chat(self):
"""Chat interactivo continuo"""
print("🦙 Chat con Llama 3.2 3B - Escribe 'salir' para terminar")
print("=" * 50)
system_prompt = input("System prompt (opcional): ").strip()
if not system_prompt:
system_prompt = "Eres un asistente útil y amigable."
while True:
try:
message = input("\nTú: ").strip()
if message.lower() in ['salir', 'exit', 'quit']:
print("¡Hasta luego! 👋")
break
if not message:
continue
print("🦙: ", end="", flush=True)
full_response = ""
for chunk in self.client.chat_stream(
message=message,
system_prompt=system_prompt,
history=self.conversation_history,
max_tokens=512,
temperature=0.7
):
if "error" in chunk:
print(f"Error: {chunk['error']}")
break
# Mostrar solo el texto nuevo
new_text = chunk['response'][len(full_response):]
print(new_text, end="", flush=True)
full_response = chunk['response']
if chunk.get("is_complete", False):
print() # Nueva línea al final
break
# Agregar al historial
if full_response and not full_response.startswith("Error:"):
self.conversation_history.append([message, full_response])
# Limitar historial a 10 intercambios
if len(self.conversation_history) > 10:
self.conversation_history = self.conversation_history[-10:]
except KeyboardInterrupt:
print("\n\n¡Hasta luego! 👋")
break
except Exception as e:
print(f"\nError inesperado: {e}")
def batch_questions(self, questions: List[str], system_prompt: str = ""):
"""Procesar múltiples preguntas en lote"""
print(f"Procesando {len(questions)} preguntas...")
results = []
for i, question in enumerate(questions, 1):
print(f"\nPregunta {i}/{len(questions)}: {question}")
print("-" * 40)
response = self.client.chat(
message=question,
system_prompt=system_prompt,
max_tokens=300
)
if "error" in response:
print(f"Error: {response['error']}")
results.append({"question": question, "error": response['error']})
else:
print(f"Respuesta: {response['response']}")
results.append({
"question": question,
"response": response['response'],
"queue_status": response['queue_status']
})
# Pequeña pausa entre preguntas
time.sleep(1)
return results
def compare_temperatures(self, message: str, temperatures: List[float] = [0.3, 0.7, 1.2]):
"""Comparar respuestas con diferentes temperaturas"""
print(f"Comparando respuestas para: '{message}'")
print("=" * 60)
results = {}
for temp in temperatures:
print(f"\n🌡️ Temperature: {temp}")
print("-" * 30)
response = self.client.chat(
message=message,
temperature=temp,
max_tokens=200
)
if "error" in response:
print(f"Error: {response['error']}")
results[temp] = {"error": response['error']}
else:
print(response['response'])
results[temp] = {"response": response['response']}
return results
def roleplay_scenario(self, scenario: str, turns: int = 5):
"""Escenario de roleplay interactivo"""
print(f"🎭 Escenario: {scenario}")
print("=" * 50)
system_prompt = f"Actúa como {scenario}. Mantén el rol consistentemente y responde de manera inmersiva."
history = []
for turn in range(turns):
user_input = input(f"\nTurno {turn + 1} - Tú: ").strip()
if not user_input or user_input.lower() == 'salir':
break
print("🎭: ", end="", flush=True)
for chunk in self.client.chat_stream(
message=user_input,
system_prompt=system_prompt,
history=history,
temperature=0.8,
max_tokens=300
):
if "error" in chunk:
print(f"Error: {chunk['error']}")
break
print(f"\r🎭: {chunk['response']}", end="", flush=True)
if chunk.get("is_complete", False):
history.append([user_input, chunk['response']])
print()
break
return history
def academic_tutor_example():
"""Ejemplo: Tutor académico para física"""
client = LlamaClient("https://tu-usuario-llama-chat.hf.space")
system_prompt = """Eres un tutor de física especializado en bachillerato español.
Explicas conceptos de forma clara, usas ejemplos cotidianos y siempre verificas
que el estudiante entienda antes de avanzar. Puedes resolver problemas paso a paso."""
physics_questions = [
"¿Qué es la velocidad angular y cómo se relaciona con la velocidad lineal?",
"Explica el principio de conservación de la energía con un ejemplo",
"¿Cómo funciona el efecto Doppler?",
"Diferencia entre masa y peso físicamente"
]
print("🔬 Tutor de Física - Bachillerato")
print("=" * 40)
for question in physics_questions:
print(f"\n📚 Pregunta: {question}")
print("-" * 50)
full_response = ""
for chunk in client.chat_stream(
message=question,
system_prompt=system_prompt,
max_tokens=400,
temperature=0.6
):
if "error" in chunk:
print(f"Error: {chunk['error']}")
break
print(f"\r👨‍🏫: {chunk['response']}", end="", flush=True)
full_response = chunk['response']
if chunk.get("is_complete", False):
print("\n")
break
input("Presiona Enter para la siguiente pregunta...")
def programming_assistant_example():
"""Ejemplo: Asistente de programación"""
client = LlamaClient("https://tu-usuario-llama-chat.hf.space")
system_prompt = """Eres un desarrollador senior especializado en Python y Flutter.
Ayudas a estudiantes con código, debugging y mejores prácticas. Siempre explicas
el código línea por línea y sugieres mejoras."""
code_questions = [
"¿Cómo implementar un patrón Singleton en Python?",
"Explica la diferencia entre async/await y threading",
"¿Cómo manejo errores de API en Flutter?",
"Mejores prácticas para estructurar un proyecto Flutter"
]
print("💻 Asistente de Programación")
print("=" * 35)
for question in code_questions:
print(f"\n🤔 {question}")
print("-" * 60)
response = client.chat(
message=question,
system_prompt=system_prompt,
max_tokens=600,
temperature=0.4 # Menor temperatura para código
)
if "error" in response:
print(f"❌ Error: {response['error']}")
else:
print(f"💡 {response['response']}")
print("\n" + "="*60)
time.sleep(2)
def creative_writing_example():
"""Ejemplo: Escritura creativa colaborativa"""
client = LlamaClient("https://tu-usuario-llama-chat.hf.space")
system_prompt = """Eres un escritor creativo experto. Ayudas a desarrollar historias,
personajes y narrativas. Puedes continuar historias, sugerir tramas y crear diálogos
naturales. Eres imaginativo pero coherente."""
print("✍️ Escritura Creativa Colaborativa")
print("=" * 40)
story_start = input("Escribe el inicio de una historia (2-3 líneas): ")
current_story = story_start
history = []
for chapter in range(3):
print(f"\n📖 Capítulo {chapter + 1}")
print("-" * 30)
prompt = f"Continúa esta historia de manera creativa e interesante:\n\n{current_story}"
print("✨ Continuando la historia...")
continuation = ""
for chunk in client.chat_stream(
message=prompt,
system_prompt=system_prompt,
history=history,
max_tokens=400,
temperature=1.0 # Alta creatividad
):
if "error" in chunk:
print(f"Error: {chunk['error']}")
break
continuation = chunk['response']
print(f"\r{continuation}", end="", flush=True)
if chunk.get("is_complete", False):
print("\n")
break
current_story += "\n\n" + continuation
history.append([prompt, continuation])
# Opción de dirigir la historia
direction = input("\n¿Quieres sugerir una dirección para la historia? (opcional): ")
if direction.strip():
current_story += "\n\n[Dirección sugerida: " + direction + "]"
print("\n📚 Historia completa:")
print("=" * 50)
print(current_story)
def main():
"""Menú principal de ejemplos"""
examples = {
"1": ("Chat Continuo", lambda: AdvancedLlamaClient("https://tu-usuario-llama-chat.hf.space").continuous_chat()),
"2": ("Tutor de Física", academic_tutor_example),
"3": ("Asistente de Programación", programming_assistant_example),
"4": ("Escritura Creativa", creative_writing_example),
"5": ("Comparar Temperaturas", lambda: AdvancedLlamaClient("https://tu-usuario-llama-chat.hf.space").compare_temperatures(
"Explica la inteligencia artificial", [0.3, 0.7, 1.2]
)),
}
print("🦙 Ejemplos Avanzados - Llama 3.2 Chat")
print("=" * 45)
print("IMPORTANTE: Cambia la URL por tu Space real")
print("=" * 45)
while True:
print("\nSelecciona un ejemplo:")
for key, (name, _) in examples.items():
print(f"{key}. {name}")
print("0. Salir")
choice = input("\nOpción: ").strip()
if choice == "0":
print("¡Hasta luego! 🦙")
break
elif choice in examples:
try:
print(f"\n🚀 Ejecutando: {examples[choice][0]}")
print("=" * 50)
examples[choice][1]()
except Exception as e:
print(f"Error ejecutando ejemplo: {e}")
else:
print("Opción no válida")
if __name__ == "__main__":
main()