Lección 03: Creación de Plugins
Desarrolla tu primer plugin con visión y extiende las capacidades de AVA
En la GDC 2026, Razer anunció que Project AVA ahora es <strong>agentic</strong>. Esto abre un nuevo paradigma para los plugins: ya no solo procesan comandos, sino que pueden planificar y ejecutar tareas complejas de forma autónoma. Los plugins que crees hoy pueden escalar a estas nuevas capacidades.Leer más →
Introducción
AVA SDK permite extender las capacidades de tu asistente mediante plugins. En esta lección aprenderás a crear plugins de visión artificial, procesamiento de imágenes y análisis en tiempo real, integrando herramientas como OpenCV y CLIP en el ecosistema AVA.
Arquitectura de Plugins
Cada plugin en AVA SDK sigue una estructura modular con tres componentes principales:
Input Handler
Procesa la entrada (imagen, texto, audio) y la normaliza para el motor de inferencia
Processor
Ejecuta la lógica del plugin: análisis, transformación o clasificación de datos
Output Formatter
Convierte el resultado en un mensaje estructurado para AVA
Paso 1: Estructura del proyecto
Crea la carpeta de plugins dentro de tu instalación de AVA SDK:
1mkdir -p ava-sdk-plugins/vision
2cd ava-sdk-plugins
3pip install opencv-python pillow openai-clip torch1{
2 "name": "vision-analyzer",
3 "version": "1.0.0",
4 "type": "vision",
5 "description": "Analyzes images using CLIP and provides descriptions",
6 "entry": "analyzer.py",
7 "dependencies": ["opencv-python", "pillow", "torch"]
8}Paso 2: Plugin de Visión básico
Vamos a crear un plugin que analice imágenes usando CLIP (Contrastive Language-Image Pre-training):
CLIP (Contrastive Language-Image Pre-training) de OpenAI permite que tu plugin entienda imágenes sin necesidad de entrenar un modelo específico.
1import cv2
2import torch
3import clip
4from PIL import Image
5
6class VisionAnalyzer:
7 def __init__(self):
8 self.device = "cuda" if torch.cuda.is_available() else "cpu"
9 self.model, self.preprocess = clip.load("ViT-B/32", device=self.device)
10
11 async def process(self, image_path: str) -> dict:
12 # Cargar y preprocesar imagen
13 image = self.preprocess(Image.open(image_path)).unsqueeze(0).to(self.device)
14
15 # Posibles descripciones
16 candidates = [
17 "a person", "a gaming setup", "code on screen",
18 "a landscape", "a device", "text document",
19 "a hologram display", "a keyboard"
20 ]
21 text = clip.tokenize(candidates).to(self.device)
22
23 with torch.no_grad():
24 logits_per_image, _ = self.model(image, text)
25 probs = logits_per_image.softmax(dim=-1).cpu().numpy()[0]
26
27 best_idx = probs.argmax()
28 return {
29 "label": candidates[best_idx],
30 "confidence": float(probs[best_idx]),
31 "all_predictions": dict(zip(candidates, probs.tolist()))
32 }Paso 3: Registrar el plugin en AVA
Una vez creado el plugin, regístralo en la configuración de AVA SDK:
1# AVA SDK - Configuración de plugins
2plugins:
3 - name: "vision-analyzer"
4 enabled: true
5 path: "./ava-sdk-plugins/vision"
6 config:
7 auto_analyze: true
8 max_image_size_mb: 10
9 supported_formats: [jpg, png, webp]1from ava_sdk import AVA
2
3# Inicializar AVA con plugins
4ava = AVA(
5 model="meta-llama/Meta-Llama-3.1-8B-Instruct",
6 plugins_dir="./ava-sdk-plugins"
7)
8
9# El plugin vision-analyzer se carga automáticamente
10ava.run()AVA SDK detecta automáticamente los plugins en el directorio configurado leyendo el archivo plugin.json de cada subcarpeta.
Paso 4: Probar el plugin
Ejecuta AVA SDK con el plugin registrado y envía una imagen para verificar:
1# Test rápido del plugin
2from vision.analyzer import VisionAnalyzer
3import asyncio
4
5async def test():
6 analyzer = VisionAnalyzer()
7 result = await analyzer.process("test_image.jpg")
8 print(f"Detected: {result['label']}")
9 print(f"Confidence: {result['confidence']:.2%}")
10
11asyncio.run(test())
12# Output esperado:
13# Detected: a gaming setup
14# Confidence: 87.3%Plugins avanzados
Procesamiento por lotes
Analiza múltiples imágenes en una sola llamada reduciendo overhead
Streaming de video
Procesa frames en tiempo real desde una cámara o archivo de video
Análisis multimodal
Combina visión, texto y audio en un solo pipeline de análisis
Plugins personalizados
Crea handlers específicos para tu caso de uso: OCR, detección de objetos, clasificación