devs/bin/sora.sh
Mauro Rosero P. 97a965417e
[ADDED] Implementado script sora.sh para integración con aider
- Creado script para ejecutar aider con configuración de OpenRouter o Ollama

- Agregada evaluación de hardware para ejecución local

- Implementada selección de modelo con GUI usando gum

- Reemplazo completo del sistema de alias por ejecutable integrado

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-04-07 20:32:27 -05:00

197 lines
7.5 KiB
Bash
Executable file

#!/bin/bash
# [Author] Cortana Rosero One <cortana@rosero.one>
# [Generated] Created by Claude Code (claude-3-7-sonnet-20250219)
# Modified Date: 2025-04-07
# Version $(cat "$(dirname "$0")/config/version" 2>/dev/null || echo "1.0.0")
#
# Description: Script para ejecutar aider con la configuración adecuada de OpenRouter
# Usage: ./sora.sh [parámetros para aider]
# Verifica si aider está instalado
if ! command -v aider &> /dev/null; then
echo "Error: aider no está instalado."
echo "Instálelo ejecutando: bin/sora_install.sh"
exit 1
fi
# Obtiene la ruta base de tokens desde el archivo de configuración
TOKENS_BASE_PATH=$(cat "$(dirname "$0")/config/ai_tokens.path" 2>/dev/null)
if [ -z "$TOKENS_BASE_PATH" ]; then
echo "Error: No se pudo obtener la ruta base de tokens."
exit 1
fi
# Expande la ruta si comienza con ~
if [[ "$TOKENS_BASE_PATH" == "~"* ]]; then
TOKENS_BASE_PATH="${TOKENS_BASE_PATH/#\~/$HOME}"
fi
# Define el archivo de tokens de OpenRouter
OPENROUTER_TOKEN_FILE="${TOKENS_BASE_PATH}/router.sops.yaml"
# Verifica si el archivo de token existe
if [ ! -f "$OPENROUTER_TOKEN_FILE" ]; then
echo "Error: Archivo de token no encontrado: $OPENROUTER_TOKEN_FILE"
echo "Registre su token usando ai_token.sh o solicite el token al administrador del proyecto."
exit 1
fi
# Desencripta y obtiene el token de OpenRouter (decodificando base64)
OPENROUTER_API_KEY=$(sops -d "$OPENROUTER_TOKEN_FILE" | cut -d\| -f2 | tr -d '[:space:]' | base64 -d)
if [ -z "$OPENROUTER_API_KEY" ]; then
echo "Error: No se pudo desencriptar el token de OpenRouter."
exit 1
fi
# Lee o crea el archivo de configuración de la API base
API_BASE_CONFIG_FILE="$(dirname "$0")/config/sora_api_base.cfg"
if [ ! -f "$API_BASE_CONFIG_FILE" ]; then
echo "https://openrouter.ai/api/v1" > "$API_BASE_CONFIG_FILE"
fi
OPENAI_API_BASE=$(cat "$API_BASE_CONFIG_FILE" 2>/dev/null || echo "https://openrouter.ai/api/v1")
# Lee o crea el archivo de configuración del modelo
MODEL_CONFIG_FILE="$(dirname "$0")/config/sora_model.cfg"
if [ ! -f "$MODEL_CONFIG_FILE" ]; then
echo "deepseek/deepseek-r1-distill-llama-70b:free" > "$MODEL_CONFIG_FILE"
fi
AIDER_MODEL=$(cat "$MODEL_CONFIG_FILE" 2>/dev/null || echo "deepseek/deepseek-r1-distill-llama-70b:free")
# Pregunta al usuario si desea usar modelo remoto o local (ollama)
MODE=$(gum choose "Remoto (OpenRouter)" "Local (Ollama)")
if [[ "$MODE" == "Local (Ollama)" ]]; then
# Muestra advertencia sobre rendimiento
echo "⚠️ ADVERTENCIA: El uso de modelos locales requiere hardware adecuado."
echo " Si su hardware no es suficiente, las respuestas pueden ser extremadamente lentas."
# Evalúa el hardware de la máquina
CPU_CORES=$(nproc)
RAM_TOTAL_GB=$(free -g | awk '/^Mem:/{print $2}')
RAM_AVAILABLE_GB=$(free -g | awk '/^Mem:/{print $7}')
HAS_GPU=$(lspci | grep -i nvidia | grep -v "Audio\|USB" || echo "")
# Determina nivel de rendimiento
PERFORMANCE_LEVEL="Muy Malo"
if [ -n "$HAS_GPU" ] && [ $CPU_CORES -ge 8 ] && [ $RAM_AVAILABLE_GB -ge 16 ]; then
PERFORMANCE_LEVEL="Excelente"
elif [ -n "$HAS_GPU" ] && [ $CPU_CORES -ge 6 ] && [ $RAM_AVAILABLE_GB -ge 12 ]; then
PERFORMANCE_LEVEL="Muy Bueno"
elif [ $CPU_CORES -ge 8 ] && [ $RAM_AVAILABLE_GB -ge 12 ]; then
PERFORMANCE_LEVEL="Bueno"
elif [ $CPU_CORES -ge 6 ] && [ $RAM_AVAILABLE_GB -ge 8 ]; then
PERFORMANCE_LEVEL="Intermedio"
elif [ $CPU_CORES -ge 4 ] && [ $RAM_AVAILABLE_GB -ge 6 ]; then
PERFORMANCE_LEVEL="Pobre"
elif [ $CPU_CORES -ge 2 ] && [ $RAM_AVAILABLE_GB -ge 4 ]; then
PERFORMANCE_LEVEL="Malo"
fi
# Muestra estado del hardware
echo ""
echo "Evaluación de hardware:"
echo "- CPU Cores: $CPU_CORES"
echo "- RAM Total: $RAM_TOTAL_GB GB"
echo "- RAM Disponible: $RAM_AVAILABLE_GB GB"
echo "- GPU NVIDIA: $([ -n "$HAS_GPU" ] && echo "Detectada" || echo "No detectada")"
# Muestra barra de rendimiento con gum
echo ""
echo -n "Rendimiento esperado: "
case "$PERFORMANCE_LEVEL" in
"Muy Malo")
gum style --foreground 255 --background 1 " Muy Malo "
;;
"Malo")
gum style --foreground 255 --background 1 " Malo "
;;
"Pobre")
gum style --foreground 255 --background 202 " Pobre "
;;
"Intermedio")
gum style --foreground 255 --background 3 " Intermedio "
;;
"Bueno")
gum style --foreground 255 --background 35 " Bueno "
;;
"Muy Bueno")
gum style --foreground 255 --background 2 " Muy Bueno "
;;
"Excelente")
gum style --foreground 255 --background 5 " Excelente "
;;
esac
echo ""
# Pregunta si desea continuar
if ! gum confirm "¿Desea continuar con el modo local?"; then
echo "Operación cancelada por el usuario."
exit 0
fi
# Verifica si ollama está activo
if ! curl -s http://127.0.0.1:11434/api/tags >/dev/null 2>&1; then
echo "Ollama no está activo. Iniciando..."
"$(dirname "$0")/ollama_up.sh"
# Espera hasta 30 segundos para que Ollama se inicie completamente
WAIT_TIME=0
MAX_WAIT=30
while ! curl -s http://127.0.0.1:11434/api/tags >/dev/null 2>&1; do
if [ $WAIT_TIME -ge $MAX_WAIT ]; then
echo "Error: No se pudo iniciar Ollama después de $MAX_WAIT segundos."
exit 1
fi
echo "Esperando que Ollama responda... ($WAIT_TIME/$MAX_WAIT)"
sleep 1
WAIT_TIME=$((WAIT_TIME + 1))
done
OLLAMA_STARTED=true
fi
# Verifica que Ollama funcione correctamente haciendo una solicitud simple
echo "Verificando que Ollama responda correctamente..."
if ! curl -s http://127.0.0.1:11434/api/tags | jq -e '.models' >/dev/null 2>&1; then
echo "Error: Ollama está iniciado pero no responde correctamente."
exit 1
fi
# Configura para usar Ollama
OLLAMA_API_BASE=$(cat "$(dirname "$0")/config/ollama.local" 2>/dev/null)
echo "Usando Ollama con API base: $OLLAMA_API_BASE"
# Lista y permite seleccionar modelos disponibles en Ollama
echo "Consultando modelos disponibles en Ollama..."
OLLAMA_MODELS=$(curl -s http://127.0.0.1:11434/api/tags | jq -r '.models[].name')
if [ -z "$OLLAMA_MODELS" ]; then
echo "Error: No se encontraron modelos en Ollama."
exit 1
fi
# Permite seleccionar un modelo utilizando gum
echo "Seleccione un modelo:"
SELECTED_MODEL=$(echo "$OLLAMA_MODELS" | gum filter --placeholder="Buscar modelo...")
if [ -z "$SELECTED_MODEL" ]; then
echo "No se seleccionó ningún modelo. Saliendo."
exit 1
fi
echo "Modelo seleccionado: $SELECTED_MODEL"
# Añade el prefijo al modelo de Ollama
OLLAMA_FULL_MODEL="ollama_chat/$SELECTED_MODEL"
echo "Modelo con prefijo: $OLLAMA_FULL_MODEL"
# Ejecuta aider con la configuración de Ollama
OLLAMA_API_BASE="$OLLAMA_API_BASE" AIDER_MODEL="$OLLAMA_FULL_MODEL" aider --no-git --no-show-model-warnings "$@"
# Si iniciamos Ollama, lo detenemos al finalizar
if [ "$OLLAMA_STARTED" = true ]; then
echo "Deteniendo Ollama..."
"$(dirname "$0")/ollama_down.sh"
fi
else
# Ejecuta aider con la configuración de OpenRouter
OPENAI_API_BASE="$OPENAI_API_BASE" OPENROUTER_API_KEY="$OPENROUTER_API_KEY" AIDER_MODEL="$AIDER_MODEL" aider --no-git --no-show-model-warnings "$@"
fi