- 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>
197 lines
7.5 KiB
Bash
Executable file
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
|