[IMPROVED] Refactorizado sora.sh para seguir estándares del proyecto
- Modificado formato de header según convenciones del proyecto - Implementada estructura modular con funciones bien definidas - Mejorado manejo de errores y validaciones - Añadida documentación interna siguiendo guías de estilo 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
97a965417e
commit
9ef1dd4c25
1 changed files with 275 additions and 129 deletions
396
bin/sora.sh
396
bin/sora.sh
|
@ -1,104 +1,232 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# [Author] Cortana Rosero One <cortana@rosero.one>
|
#Script : sora.sh
|
||||||
# [Generated] Created by Claude Code (claude-3-7-sonnet-20250219)
|
#Apps : MRDEVS TOOLS
|
||||||
# Modified Date: 2025-04-07
|
#Description : Ejecuta aider con configuración de OpenRouter/Ollama
|
||||||
# Version $(cat "$(dirname "$0")/config/version" 2>/dev/null || echo "1.0.0")
|
#Author : Sora Rosero One <sora@rosero.one>
|
||||||
|
#Generated by : Claude Code (claude-3-7-sonnet-20250219)
|
||||||
|
#Created : 2025/04/07 10:23:45
|
||||||
|
#Modified : 2025/04/07 12:10:30
|
||||||
|
#Version : $(cat "$(dirname "$0")/config/version" 2>/dev/null || echo "1.0.0")
|
||||||
|
#Use Notes :
|
||||||
|
# Conecta con modelos de IA remotos (OpenRouter) o locales (Ollama)
|
||||||
|
# Evalúa el hardware para ejecución local y muestra diagnóstico
|
||||||
|
# Permite selección interactiva de modelos con gum
|
||||||
|
#==============================================================================
|
||||||
|
# Derechos de Autor [2025] [Mauro Rosero P. <mauro@rosero.one>]
|
||||||
|
#==============================================================================
|
||||||
|
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo
|
||||||
|
# bajo los términos de la Licencia Pública Affero General de GNU tal como
|
||||||
|
# lo publica la Free Software Foundation, ya sea la versión 3 de la licencia,
|
||||||
|
# o (a su elección) cualquier versión posterior.
|
||||||
#
|
#
|
||||||
# Description: Script para ejecutar aider con la configuración adecuada de OpenRouter
|
# Este programa se distribuye con la esperanza de que sea útil,
|
||||||
# Usage: ./sora.sh [parámetros para aider]
|
# pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de
|
||||||
|
# COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la
|
||||||
|
# Licencia Pública Affero General de GNU para obtener más detalles.
|
||||||
|
#
|
||||||
|
# Debería haber recibido una copia de la Licencia Pública Affero General
|
||||||
|
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
# Verifica si aider está instalado
|
# Configuración inicial
|
||||||
if ! command -v aider &> /dev/null; then
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
echo "Error: aider no está instalado."
|
BIN_BASE="bin"
|
||||||
echo "Instálelo ejecutando: bin/sora_install.sh"
|
BIN_LIBS="lib"
|
||||||
|
BIN_MESG="msg"
|
||||||
|
BIN_CFGS="config"
|
||||||
|
BIN_SOPS="sops"
|
||||||
|
|
||||||
|
# Cargar bibliotecas
|
||||||
|
if [ -f "$SCRIPT_DIR/../$BIN_LIBS/base.lib" ]; then
|
||||||
|
source "$SCRIPT_DIR/../$BIN_LIBS/base.lib"
|
||||||
|
else
|
||||||
|
echo "Error: No se pudo cargar la biblioteca base."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Obtiene la ruta base de tokens desde el archivo de configuración
|
# Mensaje de bienvenida
|
||||||
TOKENS_BASE_PATH=$(cat "$(dirname "$0")/config/ai_tokens.path" 2>/dev/null)
|
echo "=== Sora - Asistente de Desarrollo Colaborativo ==="
|
||||||
if [ -z "$TOKENS_BASE_PATH" ]; then
|
echo "Versión: $VERSION"
|
||||||
echo "Error: No se pudo obtener la ruta base de tokens."
|
echo ""
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Expande la ruta si comienza con ~
|
# Verificar si aider está instalado
|
||||||
if [[ "$TOKENS_BASE_PATH" == "~"* ]]; then
|
check_aider() {
|
||||||
TOKENS_BASE_PATH="${TOKENS_BASE_PATH/#\~/$HOME}"
|
if ! command -v aider &> /dev/null; then
|
||||||
fi
|
echo "Error: aider no está instalado."
|
||||||
|
echo "Instálelo ejecutando: $BIN_BASE/sora_install.sh"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# Define el archivo de tokens de OpenRouter
|
# Obtener ruta de tokens
|
||||||
OPENROUTER_TOKEN_FILE="${TOKENS_BASE_PATH}/router.sops.yaml"
|
get_tokens_path() {
|
||||||
|
local tokens_path_file="$SCRIPT_DIR/$BIN_CFGS/ai_tokens.path"
|
||||||
|
local tokens_path
|
||||||
|
|
||||||
# Verifica si el archivo de token existe
|
if [ -f "$tokens_path_file" ]; then
|
||||||
if [ ! -f "$OPENROUTER_TOKEN_FILE" ]; then
|
tokens_path=$(cat "$tokens_path_file" 2>/dev/null)
|
||||||
echo "Error: Archivo de token no encontrado: $OPENROUTER_TOKEN_FILE"
|
if [ -z "$tokens_path" ]; then
|
||||||
echo "Registre su token usando ai_token.sh o solicite el token al administrador del proyecto."
|
echo "Error: Archivo de configuración de ruta de tokens vacío."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Desencripta y obtiene el token de OpenRouter (decodificando base64)
|
# Expandir ruta si comienza con ~
|
||||||
OPENROUTER_API_KEY=$(sops -d "$OPENROUTER_TOKEN_FILE" | cut -d\| -f2 | tr -d '[:space:]' | base64 -d)
|
if [[ "$tokens_path" == "~"* ]]; then
|
||||||
if [ -z "$OPENROUTER_API_KEY" ]; then
|
tokens_path="${tokens_path/#\~/$HOME}"
|
||||||
echo "Error: No se pudo desencriptar el token de OpenRouter."
|
fi
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Lee o crea el archivo de configuración de la API base
|
echo "$tokens_path"
|
||||||
API_BASE_CONFIG_FILE="$(dirname "$0")/config/sora_api_base.cfg"
|
else
|
||||||
if [ ! -f "$API_BASE_CONFIG_FILE" ]; then
|
echo "Error: No se pudo encontrar el archivo de configuración de ruta de tokens."
|
||||||
echo "https://openrouter.ai/api/v1" > "$API_BASE_CONFIG_FILE"
|
exit 1
|
||||||
fi
|
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
|
# Ejecutar verificaciones iniciales
|
||||||
MODEL_CONFIG_FILE="$(dirname "$0")/config/sora_model.cfg"
|
check_aider
|
||||||
if [ ! -f "$MODEL_CONFIG_FILE" ]; then
|
TOKENS_BASE_PATH=$(get_tokens_path)
|
||||||
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)
|
# Función para verificar y obtener tokens
|
||||||
MODE=$(gum choose "Remoto (OpenRouter)" "Local (Ollama)")
|
check_token() {
|
||||||
|
local token_file=$1
|
||||||
|
local provider=$2
|
||||||
|
|
||||||
if [[ "$MODE" == "Local (Ollama)" ]]; then
|
if [ ! -f "$token_file" ]; then
|
||||||
# Muestra advertencia sobre rendimiento
|
echo "Error: Archivo de token no encontrado: $token_file"
|
||||||
echo "⚠️ ADVERTENCIA: El uso de modelos locales requiere hardware adecuado."
|
echo "Registre su token usando $BIN_BASE/ai_token.sh o solicite el token al administrador del proyecto."
|
||||||
echo " Si su hardware no es suficiente, las respuestas pueden ser extremadamente lentas."
|
exit 1
|
||||||
|
|
||||||
# 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
|
fi
|
||||||
|
|
||||||
# Muestra estado del hardware
|
local api_key
|
||||||
echo ""
|
api_key=$(sops -d "$token_file" | cut -d\| -f2 | tr -d '[:space:]' | base64 -d)
|
||||||
echo "Evaluación de hardware:"
|
|
||||||
echo "- CPU Cores: $CPU_CORES"
|
if [ -z "$api_key" ]; then
|
||||||
echo "- RAM Total: $RAM_TOTAL_GB GB"
|
echo "Error: No se pudo desencriptar el token de $provider."
|
||||||
echo "- RAM Disponible: $RAM_AVAILABLE_GB GB"
|
exit 1
|
||||||
echo "- GPU NVIDIA: $([ -n "$HAS_GPU" ] && echo "Detectada" || echo "No detectada")"
|
fi
|
||||||
|
|
||||||
|
echo "$api_key"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Función para cargar o crear configuración
|
||||||
|
load_config() {
|
||||||
|
local config_file=$1
|
||||||
|
local default_value=$2
|
||||||
|
local description=$3
|
||||||
|
|
||||||
|
if [ ! -f "$config_file" ]; then
|
||||||
|
echo "Creando archivo de configuración para $description..."
|
||||||
|
echo "$default_value" > "$config_file"
|
||||||
|
fi
|
||||||
|
|
||||||
|
local config_value
|
||||||
|
config_value=$(cat "$config_file" 2>/dev/null || echo "$default_value")
|
||||||
|
|
||||||
|
echo "$config_value"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Función para evaluar hardware
|
||||||
|
evaluate_hardware() {
|
||||||
|
local cpu_cores=$(nproc)
|
||||||
|
local ram_total_gb=$(free -g | awk '/^Mem:/{print $2}')
|
||||||
|
local ram_available_gb=$(free -g | awk '/^Mem:/{print $7}')
|
||||||
|
local has_gpu=$(lspci | grep -i nvidia | grep -v "Audio\|USB" || echo "")
|
||||||
|
|
||||||
|
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")"
|
||||||
|
|
||||||
|
# Determinar nivel de rendimiento
|
||||||
|
local 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
|
||||||
|
|
||||||
|
echo "$performance_level"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Definir archivos de configuración
|
||||||
|
OPENROUTER_TOKEN_FILE="${TOKENS_BASE_PATH}/router.sops.yaml"
|
||||||
|
API_BASE_CONFIG_FILE="$SCRIPT_DIR/$BIN_CFGS/sora_api_base.cfg"
|
||||||
|
MODEL_CONFIG_FILE="$SCRIPT_DIR/$BIN_CFGS/sora_model.cfg"
|
||||||
|
|
||||||
|
# Cargar configuraciones
|
||||||
|
OPENAI_API_BASE=$(load_config "$API_BASE_CONFIG_FILE" "https://openrouter.ai/api/v1" "API base")
|
||||||
|
AIDER_MODEL=$(load_config "$MODEL_CONFIG_FILE" "deepseek/deepseek-r1-distill-llama-70b:free" "modelo predeterminado")
|
||||||
|
|
||||||
|
# Verificar si gum está instalado
|
||||||
|
if ! command -v gum &> /dev/null; then
|
||||||
|
echo "Error: gum no está instalado."
|
||||||
|
echo "Instálelo ejecutando: $BIN_BASE/bootstrap.sh"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Preguntar al usuario por el modo a usar
|
||||||
|
MODE=$(gum choose "Remoto (OpenRouter)" "Local (Ollama)")
|
||||||
|
|
||||||
|
# Función para iniciar y comprobar Ollama
|
||||||
|
start_ollama() {
|
||||||
|
# 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..."
|
||||||
|
"$SCRIPT_DIR/ollama_up.sh"
|
||||||
|
|
||||||
|
# Espera hasta 30 segundos para que Ollama se inicie completamente
|
||||||
|
local wait_time=0
|
||||||
|
local 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."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
echo "Esperando que Ollama responda... ($wait_time/$max_wait)"
|
||||||
|
sleep 1
|
||||||
|
wait_time=$((wait_time + 1))
|
||||||
|
done
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
return 2 # Ya estaba activo
|
||||||
|
}
|
||||||
|
|
||||||
|
# Función para seleccionar modelo de Ollama
|
||||||
|
select_ollama_model() {
|
||||||
|
echo "Consultando modelos disponibles en Ollama..."
|
||||||
|
local models
|
||||||
|
models=$(curl -s http://127.0.0.1:11434/api/tags | jq -r '.models[].name')
|
||||||
|
|
||||||
|
if [ -z "$models" ]; then
|
||||||
|
echo "Error: No se encontraron modelos en Ollama."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Seleccione un modelo:"
|
||||||
|
local selected
|
||||||
|
selected=$(echo "$models" | gum filter --placeholder="Buscar modelo...")
|
||||||
|
|
||||||
|
if [ -z "$selected" ]; then
|
||||||
|
echo "No se seleccionó ningún modelo."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$selected"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Función para mostrar valoración de rendimiento
|
||||||
|
show_performance_rating() {
|
||||||
|
local level=$1
|
||||||
|
|
||||||
# Muestra barra de rendimiento con gum
|
|
||||||
echo ""
|
|
||||||
echo -n "Rendimiento esperado: "
|
echo -n "Rendimiento esperado: "
|
||||||
case "$PERFORMANCE_LEVEL" in
|
case "$level" in
|
||||||
"Muy Malo")
|
"Muy Malo")
|
||||||
gum style --foreground 255 --background 1 " Muy Malo "
|
gum style --foreground 255 --background 1 " Muy Malo "
|
||||||
;;
|
;;
|
||||||
|
@ -122,76 +250,94 @@ if [[ "$MODE" == "Local (Ollama)" ]]; then
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
echo ""
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
# Pregunta si desea continuar
|
# Función para ejecutar aider en modo remoto
|
||||||
|
run_remote_aider() {
|
||||||
|
echo "Modo: Remoto (OpenRouter)"
|
||||||
|
echo "Modelo: $AIDER_MODEL"
|
||||||
|
echo "API Base: $OPENAI_API_BASE"
|
||||||
|
|
||||||
|
# Verificar y obtener token de OpenRouter
|
||||||
|
OPENROUTER_API_KEY=$(check_token "$OPENROUTER_TOKEN_FILE" "OpenRouter")
|
||||||
|
|
||||||
|
# Ejecutar aider
|
||||||
|
OPENAI_API_BASE="$OPENAI_API_BASE" OPENROUTER_API_KEY="$OPENROUTER_API_KEY" AIDER_MODEL="$AIDER_MODEL" aider --no-git --no-show-model-warnings "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Función para ejecutar aider en modo local
|
||||||
|
run_local_aider() {
|
||||||
|
echo "Modo: Local (Ollama)"
|
||||||
|
|
||||||
|
# Mostrar 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."
|
||||||
|
|
||||||
|
# Evaluar hardware y mostrar información
|
||||||
|
echo ""
|
||||||
|
echo "Evaluación de hardware:"
|
||||||
|
|
||||||
|
# Obtener datos de rendimiento
|
||||||
|
HARDWARE_INFO=$(evaluate_hardware)
|
||||||
|
# Extraer líneas individuales
|
||||||
|
readarray -t hardware_lines <<< "$HARDWARE_INFO"
|
||||||
|
|
||||||
|
# Mostrar información de hardware
|
||||||
|
for ((i=0; i<${#hardware_lines[@]}-1; i++)); do
|
||||||
|
echo "- ${hardware_lines[i]}"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Mostrar valoración de rendimiento (última línea)
|
||||||
|
echo ""
|
||||||
|
show_performance_rating "${hardware_lines[${#hardware_lines[@]}-1]}"
|
||||||
|
|
||||||
|
# Confirmar si desea continuar
|
||||||
if ! gum confirm "¿Desea continuar con el modo local?"; then
|
if ! gum confirm "¿Desea continuar con el modo local?"; then
|
||||||
echo "Operación cancelada por el usuario."
|
echo "Operación cancelada por el usuario."
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Verifica si ollama está activo
|
# Iniciar Ollama si es necesario
|
||||||
if ! curl -s http://127.0.0.1:11434/api/tags >/dev/null 2>&1; then
|
start_ollama
|
||||||
echo "Ollama no está activo. Iniciando..."
|
OLLAMA_STARTED=$?
|
||||||
"$(dirname "$0")/ollama_up.sh"
|
|
||||||
|
|
||||||
# Espera hasta 30 segundos para que Ollama se inicie completamente
|
# Verificar que Ollama funcione correctamente
|
||||||
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..."
|
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
|
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."
|
echo "Error: Ollama está iniciado pero no responde correctamente."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Configura para usar Ollama
|
# Cargar API base
|
||||||
OLLAMA_API_BASE=$(cat "$(dirname "$0")/config/ollama.local" 2>/dev/null)
|
OLLAMA_CONFIG_FILE="$SCRIPT_DIR/$BIN_CFGS/ollama.local"
|
||||||
|
OLLAMA_API_BASE=$(cat "$OLLAMA_CONFIG_FILE" 2>/dev/null)
|
||||||
echo "Usando Ollama con API base: $OLLAMA_API_BASE"
|
echo "Usando Ollama con API base: $OLLAMA_API_BASE"
|
||||||
|
|
||||||
# Lista y permite seleccionar modelos disponibles en Ollama
|
# Seleccionar modelo
|
||||||
echo "Consultando modelos disponibles en Ollama..."
|
SELECTED_MODEL=$(select_ollama_model)
|
||||||
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
|
if [ -z "$SELECTED_MODEL" ]; then
|
||||||
echo "No se seleccionó ningún modelo. Saliendo."
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Modelo seleccionado: $SELECTED_MODEL"
|
echo "Modelo seleccionado: $SELECTED_MODEL"
|
||||||
|
|
||||||
# Añade el prefijo al modelo de Ollama
|
# Añadir prefijo
|
||||||
OLLAMA_FULL_MODEL="ollama_chat/$SELECTED_MODEL"
|
OLLAMA_FULL_MODEL="ollama_chat/$SELECTED_MODEL"
|
||||||
echo "Modelo con prefijo: $OLLAMA_FULL_MODEL"
|
echo "Modelo con prefijo: $OLLAMA_FULL_MODEL"
|
||||||
|
|
||||||
# Ejecuta aider con la configuración de Ollama
|
# Ejecutar aider
|
||||||
OLLAMA_API_BASE="$OLLAMA_API_BASE" AIDER_MODEL="$OLLAMA_FULL_MODEL" aider --no-git --no-show-model-warnings "$@"
|
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
|
# Si iniciamos Ollama, lo detenemos al finalizar
|
||||||
if [ "$OLLAMA_STARTED" = true ]; then
|
if [ "$OLLAMA_STARTED" -eq 0 ]; then
|
||||||
echo "Deteniendo Ollama..."
|
echo "Deteniendo Ollama..."
|
||||||
"$(dirname "$0")/ollama_down.sh"
|
"$SCRIPT_DIR/ollama_down.sh"
|
||||||
fi
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Ejecución principal según el modo seleccionado
|
||||||
|
if [[ "$MODE" == "Local (Ollama)" ]]; then
|
||||||
|
run_local_aider "$@"
|
||||||
else
|
else
|
||||||
# Ejecuta aider con la configuración de OpenRouter
|
run_remote_aider "$@"
|
||||||
OPENAI_API_BASE="$OPENAI_API_BASE" OPENROUTER_API_KEY="$OPENROUTER_API_KEY" AIDER_MODEL="$AIDER_MODEL" aider --no-git --no-show-model-warnings "$@"
|
|
||||||
fi
|
fi
|
||||||
|
|
Loading…
Reference in a new issue