64 lines
1.4 KiB
Bash
64 lines
1.4 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
# shellcheck source=../common.sh
|
|
. "$ROOT_DIR/lib/common.sh"
|
|
# shellcheck source=anthropic.sh
|
|
. "$ROOT_DIR/lib/providers/anthropic.sh"
|
|
# shellcheck source=openai.sh
|
|
. "$ROOT_DIR/lib/providers/openai.sh"
|
|
# shellcheck source=ollama.sh
|
|
. "$ROOT_DIR/lib/providers/ollama.sh"
|
|
|
|
normalize_provider() {
|
|
local provider="$1"
|
|
printf '%s' "$provider" | tr '[:upper:]' '[:lower:]'
|
|
}
|
|
|
|
select_provider() {
|
|
if ollama_available; then
|
|
printf '%s' "ollama"
|
|
return 0
|
|
fi
|
|
|
|
if [[ -n "${ANTHROPIC_API_KEY:-}" ]]; then
|
|
printf '%s' "anthropic"
|
|
return 0
|
|
fi
|
|
|
|
if [[ -n "${OPENAI_API_KEY:-}" ]]; then
|
|
printf '%s' "openai"
|
|
return 0
|
|
fi
|
|
|
|
die "No provider available. Set OLLAMA_BASE_URL or API keys."
|
|
}
|
|
|
|
provider_call() {
|
|
local provider="${1:-auto}"
|
|
local system_prompt="${2:-}"
|
|
local user_prompt="${3:-}"
|
|
|
|
provider="$(normalize_provider "$provider")"
|
|
if [[ -z "$provider" || "$provider" == "auto" || "$provider" == "local-first" ]]; then
|
|
provider="$(select_provider)"
|
|
fi
|
|
|
|
case "$provider" in
|
|
ollama)
|
|
ollama_call "$system_prompt" "$user_prompt"
|
|
;;
|
|
anthropic|claude)
|
|
anthropic_call "$system_prompt" "$user_prompt"
|
|
;;
|
|
openai)
|
|
openai_call "$system_prompt" "$user_prompt"
|
|
;;
|
|
*)
|
|
die "Unsupported provider: $provider"
|
|
;;
|
|
esac
|
|
}
|