feat: introduce configuration file support and environmental variable overrides
This commit is contained in:
69
ollama
69
ollama
@@ -2,10 +2,50 @@
|
|||||||
|
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
OLLAMA_API_URL="https://ollama-api.hq.ars9.space/api"
|
# Default values (should be configured in ~/.ollama/config.json)
|
||||||
OLLAMA_USER="ollama"
|
DEFAULT_OLLAMA_API_URL="https://ollama.local"
|
||||||
OLLAMA_PASS_PATH="device/god-stronghold/authelia/users/ollama/password"
|
DEFAULT_OLLAMA_USER="ollama"
|
||||||
DEFAULT_MODEL="llama3:8b"
|
DEFAULT_OLLAMA_PASS_PATH=""
|
||||||
|
DEFAULT_OLLAMA_PASSWORD=""
|
||||||
|
DEFAULT_MODEL_DEFAULT="llama2"
|
||||||
|
|
||||||
|
# Configuration file
|
||||||
|
CONFIG_FILE="${HOME}/.ollama/config.json"
|
||||||
|
|
||||||
|
# Load configuration from config file
|
||||||
|
load_config() {
|
||||||
|
if [[ -f "$CONFIG_FILE" ]]; then
|
||||||
|
# Validate JSON first
|
||||||
|
if ! jq empty "$CONFIG_FILE" 2>/dev/null; then
|
||||||
|
echo "Error: Invalid JSON in config file: $CONFIG_FILE" >&2
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Load values from config file, with fallback to empty if keys don't exist
|
||||||
|
OLLAMA_API_URL=$(jq -r '.api_url // empty' "$CONFIG_FILE") || return 1
|
||||||
|
OLLAMA_USER=$(jq -r '.user // empty' "$CONFIG_FILE") || return 1
|
||||||
|
OLLAMA_PASS_PATH=$(jq -r '.password_path // empty' "$CONFIG_FILE") || return 1
|
||||||
|
OLLAMA_PASSWORD=$(jq -r '.password // empty' "$CONFIG_FILE") || return 1
|
||||||
|
DEFAULT_MODEL=$(jq -r '.default_model // empty' "$CONFIG_FILE") || return 1
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Apply configuration with environment variable overrides
|
||||||
|
load_config || exit 1
|
||||||
|
OLLAMA_API_URL="${OLLAMA_API_URL_ENV:-${OLLAMA_API_URL:-$DEFAULT_OLLAMA_API_URL}}"
|
||||||
|
OLLAMA_USER="${OLLAMA_USER_ENV:-${OLLAMA_USER:-$DEFAULT_OLLAMA_USER}}"
|
||||||
|
OLLAMA_PASS_PATH="${OLLAMA_PASS_PATH_ENV:-${OLLAMA_PASS_PATH:-$DEFAULT_OLLAMA_PASS_PATH}}"
|
||||||
|
OLLAMA_PASSWORD="${OLLAMA_PASSWORD_ENV:-${OLLAMA_PASSWORD:-$DEFAULT_OLLAMA_PASSWORD}}"
|
||||||
|
DEFAULT_MODEL="${DEFAULT_MODEL_ENV:-${DEFAULT_MODEL:-$DEFAULT_MODEL_DEFAULT}}"
|
||||||
|
|
||||||
|
# Allow direct env var overrides (OLLAMA_API_URL, OLLAMA_USER, OLLAMA_PASS_PATH, OLLAMA_PASSWORD, DEFAULT_MODEL)
|
||||||
|
OLLAMA_API_URL="${OLLAMA_API_URL:-$DEFAULT_OLLAMA_API_URL}"
|
||||||
|
OLLAMA_USER="${OLLAMA_USER:-$DEFAULT_OLLAMA_USER}"
|
||||||
|
OLLAMA_PASS_PATH="${OLLAMA_PASS_PATH:-$DEFAULT_OLLAMA_PASS_PATH}"
|
||||||
|
OLLAMA_PASSWORD="${OLLAMA_PASSWORD:-$DEFAULT_OLLAMA_PASSWORD}"
|
||||||
|
DEFAULT_MODEL="${DEFAULT_MODEL:-$DEFAULT_MODEL_DEFAULT}"
|
||||||
|
|
||||||
CONTEXT_FILE="${OLLAMA_CONTEXT_FILE:-$HOME/.ollama/context.json}"
|
CONTEXT_FILE="${OLLAMA_CONTEXT_FILE:-$HOME/.ollama/context.json}"
|
||||||
PROFILE_DIR="${OLLAMA_PROFILE_DIR:-$HOME/.ollama/profiles}"
|
PROFILE_DIR="${OLLAMA_PROFILE_DIR:-$HOME/.ollama/profiles}"
|
||||||
OUTPUT_FORMAT="text" # Can be "text" or "json"
|
OUTPUT_FORMAT="text" # Can be "text" or "json"
|
||||||
@@ -15,12 +55,20 @@ SCRIPT_VERSION="1.0.0"
|
|||||||
check_dependencies() {
|
check_dependencies() {
|
||||||
local missing=()
|
local missing=()
|
||||||
|
|
||||||
for cmd in pass curl jq column less; do
|
# Always required
|
||||||
|
for cmd in curl jq column less; do
|
||||||
if ! command -v "$cmd" &> /dev/null; then
|
if ! command -v "$cmd" &> /dev/null; then
|
||||||
missing+=("$cmd")
|
missing+=("$cmd")
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# Only required if using pass for password
|
||||||
|
if [[ -n "$OLLAMA_PASS_PATH" ]]; then
|
||||||
|
if ! command -v pass &> /dev/null; then
|
||||||
|
missing+=("pass")
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ ${#missing[@]} -gt 0 ]]; then
|
if [[ ${#missing[@]} -gt 0 ]]; then
|
||||||
echo "Error: missing required command(s): ${missing[*]}" >&2
|
echo "Error: missing required command(s): ${missing[*]}" >&2
|
||||||
return 1
|
return 1
|
||||||
@@ -112,9 +160,16 @@ ensure_default_profile() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Get password from pass
|
# Get password from direct config or from pass
|
||||||
|
# Returns empty string if no password configured (for servers without auth)
|
||||||
get_password() {
|
get_password() {
|
||||||
pass "$OLLAMA_PASS_PATH"
|
if [[ -n "$OLLAMA_PASSWORD" ]]; then
|
||||||
|
echo "$OLLAMA_PASSWORD"
|
||||||
|
elif [[ -n "$OLLAMA_PASS_PATH" ]]; then
|
||||||
|
pass "$OLLAMA_PASS_PATH"
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Generate a completion
|
# Generate a completion
|
||||||
|
|||||||
Reference in New Issue
Block a user