47 lines
1.5 KiB
Bash
Executable File
47 lines
1.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Sync default model prices from Langfuse's repository and generate the TS module.
|
|
# Usage: ./scripts/sync-model-prices.sh [--check]
|
|
# --check: Exit 1 if prices are outdated (for CI)
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PACKAGE_DIR="$(dirname "$SCRIPT_DIR")"
|
|
JSON_TARGET="$PACKAGE_DIR/src/default-model-prices.json"
|
|
SOURCE_URL="https://raw.githubusercontent.com/langfuse/langfuse/main/worker/src/constants/default-model-prices.json"
|
|
|
|
CHECK_MODE=false
|
|
if [[ "${1:-}" == "--check" ]]; then
|
|
CHECK_MODE=true
|
|
fi
|
|
|
|
echo "Fetching latest model prices from Langfuse..."
|
|
TMPFILE=$(mktemp)
|
|
trap 'rm -f "$TMPFILE"' EXIT
|
|
|
|
if ! curl -fsSL "$SOURCE_URL" -o "$TMPFILE"; then
|
|
echo "ERROR: Failed to fetch from $SOURCE_URL"
|
|
exit 1
|
|
fi
|
|
|
|
# Validate it's valid JSON with at least some models
|
|
MODEL_COUNT=$(node -e "console.log(JSON.parse(require('fs').readFileSync('$TMPFILE','utf-8')).length)" 2>/dev/null || echo "0")
|
|
if [[ "$MODEL_COUNT" -lt 10 ]]; then
|
|
echo "ERROR: Downloaded file has only $MODEL_COUNT models (expected 100+). Aborting."
|
|
exit 1
|
|
fi
|
|
|
|
if $CHECK_MODE; then
|
|
if diff -q "$JSON_TARGET" "$TMPFILE" > /dev/null 2>&1; then
|
|
echo "Model prices are up to date ($MODEL_COUNT models)"
|
|
exit 0
|
|
else
|
|
echo "Model prices are OUTDATED. Run 'pnpm run sync-prices' in @internal/llm-model-catalog to update."
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
cp "$TMPFILE" "$JSON_TARGET"
|
|
echo "Updated default-model-prices.json ($MODEL_COUNT models)"
|
|
echo "Run 'pnpm run generate' to regenerate defaultPrices.ts"
|