Initial commit

This commit is contained in:
Zhongwei Li
2025-11-29 18:49:31 +08:00
commit 8038d2d96e
7 changed files with 1118 additions and 0 deletions

View File

@@ -0,0 +1,61 @@
#!/bin/bash
# Script to check if swiftopenai-cli is installed and install/update if needed
set -e
REQUIRED_VERSION="1.4.4"
PACKAGE_NAME="swiftopenai-cli"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo "🔍 Checking SwiftOpenAI-CLI installation..."
# Check if swiftopenai command exists
if ! command -v swiftopenai &> /dev/null; then
echo -e "${YELLOW}SwiftOpenAI-CLI is not installed.${NC}"
echo "📦 Installing swiftopenai-cli via npm..."
npm install -g swiftopenai-cli
echo -e "${GREEN}✅ SwiftOpenAI-CLI installed successfully!${NC}"
swiftopenai --version
exit 0
fi
# Get current version
CURRENT_VERSION=$(swiftopenai --version 2>&1 | tr -d '\n')
echo "📌 Current version: $CURRENT_VERSION"
echo "📌 Latest known version: $REQUIRED_VERSION"
# Function to compare versions
version_ge() {
# Returns 0 if $1 >= $2
printf '%s\n%s\n' "$2" "$1" | sort -V -C
}
# Check if update is available
echo "🔍 Checking for updates..."
LATEST_VERSION=$(npm view swiftopenai-cli version 2>/dev/null || echo "$REQUIRED_VERSION")
if [ "$CURRENT_VERSION" = "$LATEST_VERSION" ]; then
echo -e "${GREEN}✅ SwiftOpenAI-CLI is up to date (v$CURRENT_VERSION)${NC}"
elif version_ge "$CURRENT_VERSION" "$REQUIRED_VERSION"; then
echo -e "${GREEN}✅ SwiftOpenAI-CLI version is acceptable (v$CURRENT_VERSION >= v$REQUIRED_VERSION)${NC}"
echo -e "${YELLOW}⚠️ A newer version (v$LATEST_VERSION) is available. Consider updating with:${NC}"
echo " npm update -g swiftopenai-cli"
else
echo -e "${YELLOW}⚠️ SwiftOpenAI-CLI is outdated (v$CURRENT_VERSION < v$REQUIRED_VERSION)${NC}"
echo "🔄 Updating to latest version..."
npm update -g swiftopenai-cli
NEW_VERSION=$(swiftopenai --version 2>&1 | tr -d '\n')
echo -e "${GREEN}✅ Updated to version $NEW_VERSION${NC}"
fi
# Verify installation
echo ""
echo "🔧 SwiftOpenAI-CLI is ready to use!"
echo " Location: $(which swiftopenai)"
echo " Version: $(swiftopenai --version 2>&1)"

View File

@@ -0,0 +1,176 @@
#!/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