177 lines
4.9 KiB
Bash
Executable File
177 lines
4.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Script to configure swiftopenai-cli to use a specific LLM provider
|
|
|
|
set -e
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
PROVIDER_NAME="$1"
|
|
MODEL="$2"
|
|
|
|
# Function to get provider configuration
|
|
get_provider_config() {
|
|
case "$1" in
|
|
openai)
|
|
echo "||gpt-4o,gpt-5,gpt-5-mini"
|
|
;;
|
|
grok)
|
|
echo "xai|https://api.x.ai/v1|grok-4-0709,grok-3,grok-code-fast-1"
|
|
;;
|
|
groq)
|
|
echo "groq|https://api.groq.com/openai/v1|llama-3.3-70b-versatile,mixtral-8x7b-32768"
|
|
;;
|
|
deepseek)
|
|
echo "deepseek|https://api.deepseek.com|deepseek-chat,deepseek-coder,deepseek-reasoner"
|
|
;;
|
|
openrouter)
|
|
echo "openrouter|https://openrouter.ai/api/v1|anthropic/claude-3.5-sonnet,openai/gpt-4"
|
|
;;
|
|
*)
|
|
echo ""
|
|
;;
|
|
esac
|
|
}
|
|
|
|
usage() {
|
|
echo -e "${BLUE}Usage: $0 <provider> [model]${NC}"
|
|
echo ""
|
|
echo "Supported providers:"
|
|
echo " openai - OpenAI (GPT-4, GPT-5, etc.)"
|
|
echo " grok - xAI Grok models"
|
|
echo " groq - Groq (Llama, Mixtral, etc.)"
|
|
echo " deepseek - DeepSeek models"
|
|
echo " openrouter - OpenRouter (300+ models)"
|
|
echo ""
|
|
echo "Examples:"
|
|
echo " $0 grok grok-4-0709"
|
|
echo " $0 groq llama-3.3-70b-versatile"
|
|
echo " $0 deepseek deepseek-reasoner"
|
|
echo " $0 openai gpt-5"
|
|
exit 1
|
|
}
|
|
|
|
if [ -z "$PROVIDER_NAME" ]; then
|
|
usage
|
|
fi
|
|
|
|
# Normalize provider name to lowercase
|
|
PROVIDER_NAME=$(echo "$PROVIDER_NAME" | tr '[:upper:]' '[:lower:]')
|
|
|
|
# Get provider configuration
|
|
PROVIDER_CONFIG=$(get_provider_config "$PROVIDER_NAME")
|
|
|
|
# Check if provider is supported
|
|
if [ -z "$PROVIDER_CONFIG" ]; then
|
|
echo -e "${RED}❌ Unsupported provider: $PROVIDER_NAME${NC}"
|
|
usage
|
|
fi
|
|
|
|
# Parse provider configuration
|
|
IFS='|' read -r PROVIDER_ID BASE_URL DEFAULT_MODELS <<< "$PROVIDER_CONFIG"
|
|
|
|
echo -e "${BLUE}🔧 Configuring SwiftOpenAI-CLI for $PROVIDER_NAME${NC}"
|
|
echo ""
|
|
|
|
# Configure provider
|
|
if [ "$PROVIDER_NAME" = "openai" ]; then
|
|
echo "📝 Setting provider to OpenAI (default)"
|
|
swiftopenai config set provider "" 2>/dev/null || true
|
|
swiftopenai config set base-url "" 2>/dev/null || true
|
|
else
|
|
echo "📝 Setting provider to $PROVIDER_ID"
|
|
swiftopenai config set provider "$PROVIDER_ID"
|
|
|
|
if [ -n "$BASE_URL" ]; then
|
|
echo "📝 Setting base URL to $BASE_URL"
|
|
swiftopenai config set base-url "$BASE_URL"
|
|
fi
|
|
fi
|
|
|
|
# Set model if provided
|
|
if [ -n "$MODEL" ]; then
|
|
echo "📝 Setting default model to $MODEL"
|
|
swiftopenai config set default-model "$MODEL"
|
|
elif [ -n "$DEFAULT_MODELS" ]; then
|
|
# Use first default model
|
|
DEFAULT_MODEL=$(echo "$DEFAULT_MODELS" | cut -d',' -f1)
|
|
echo "📝 Setting default model to $DEFAULT_MODEL"
|
|
swiftopenai config set default-model "$DEFAULT_MODEL"
|
|
fi
|
|
|
|
echo ""
|
|
echo -e "${GREEN}✅ Configuration complete!${NC}"
|
|
echo ""
|
|
echo "Current configuration:"
|
|
swiftopenai config list
|
|
|
|
echo ""
|
|
|
|
# Check if API key is set
|
|
API_KEY_SET=false
|
|
CONFIG_API_KEY=$(swiftopenai config get api-key 2>/dev/null || echo "")
|
|
API_KEY_SOURCE=""
|
|
|
|
# Check provider-specific environment variable
|
|
case "$PROVIDER_NAME" in
|
|
openai)
|
|
ENV_VAR="OPENAI_API_KEY"
|
|
;;
|
|
grok)
|
|
ENV_VAR="XAI_API_KEY"
|
|
;;
|
|
groq)
|
|
ENV_VAR="GROQ_API_KEY"
|
|
;;
|
|
deepseek)
|
|
ENV_VAR="DEEPSEEK_API_KEY"
|
|
;;
|
|
openrouter)
|
|
ENV_VAR="OPENROUTER_API_KEY"
|
|
;;
|
|
esac
|
|
|
|
# Check if API key is available (either in config or provider-specific env var)
|
|
if [ -n "$CONFIG_API_KEY" ] && [ "$CONFIG_API_KEY" != "not set" ] && [ "$CONFIG_API_KEY" != "****" ]; then
|
|
API_KEY_SET=true
|
|
API_KEY_SOURCE="config file"
|
|
elif [ -n "${!ENV_VAR}" ]; then
|
|
API_KEY_SET=true
|
|
API_KEY_SOURCE="environment variable $ENV_VAR"
|
|
fi
|
|
|
|
if [ "$API_KEY_SET" = true ]; then
|
|
echo -e "${GREEN}✅ API key is configured ($API_KEY_SOURCE)${NC}"
|
|
echo ""
|
|
echo -e "${GREEN}🚀 Ready to use! Test with:${NC}"
|
|
echo " swiftopenai agent \"Hello, world!\""
|
|
else
|
|
echo -e "${RED}⚠️ API KEY NOT SET${NC}"
|
|
echo ""
|
|
echo "You need to set an API key for $PROVIDER_NAME before using the CLI."
|
|
echo ""
|
|
echo -e "${GREEN}Recommended - Set via environment variable (best for multiple providers):${NC}"
|
|
echo " export $ENV_VAR=<your-api-key>"
|
|
echo ""
|
|
echo " To persist across sessions, add to your shell profile:"
|
|
echo " echo 'export $ENV_VAR=<your-api-key>' >> ~/.zshrc"
|
|
echo " source ~/.zshrc"
|
|
echo ""
|
|
echo -e "${YELLOW}Alternative - Set via config (only if using one provider):${NC}"
|
|
echo " swiftopenai config set api-key <your-api-key>"
|
|
echo ""
|
|
echo -e "${BLUE}💡 Tip: Set ALL provider keys as environment variables for easy switching:${NC}"
|
|
echo " export OPENAI_API_KEY=sk-..."
|
|
echo " export XAI_API_KEY=xai-..."
|
|
echo " export GROQ_API_KEY=gsk_..."
|
|
echo " export DEEPSEEK_API_KEY=sk-..."
|
|
echo " export OPENROUTER_API_KEY=sk-or-..."
|
|
echo ""
|
|
echo -e "${YELLOW}After setting the API key, run the configuration again to verify.${NC}"
|
|
exit 1
|
|
fi
|