#!/bin/sh set -eu # Regenerates Termind's compact model-capability snapshot from one pinned Pi # package version. The version is required so updates never silently follow a # moving npm tag. if [ "$#" -ne 1 ]; then echo "usage: $0 PI_VERSION" >&2 exit 64 fi version=$1 package="@earendil-works/pi-ai@$version" output="Frameworks/Resources/PiModelCatalog.json" temporary_dir=$(mktemp -d /tmp/termind-pi-model-catalog.XXXXXX) trap 'rm -rf "$temporary_dir"' EXIT npm pack "$package" --pack-destination "$temporary_dir" >/dev/null tar -xzf "$temporary_dir"/*.tgz -C "$temporary_dir" data_dir="$temporary_dir/package/dist/providers/data" commit=$(npm view "$package" gitHead) integrity=$(npm view "$package" dist.integrity) temporary="$temporary_dir/PiModelCatalog.json" jq -cs \ --arg commit "$commit" \ --arg version "$version" \ --arg integrity "$integrity" \ '{ source: ("https://github.com/badlogic/pi-mono/tree/" + $commit + "/packages/ai"), package: "@earendil-works/pi-ai", version: $version, commit: $commit, integrity: $integrity, models: [ .[] | to_entries[] | .value | to_entries[] | .value | { provider, id, name, reasoning, input, contextWindow, maxOutputTokens: .maxTokens, unsupportedEfforts: ( (.thinkingLevelMap // {}) | to_entries | map(select(.value == null) | .key) ), effortWireValues: ( (.thinkingLevelMap // {}) | with_entries(select(.value != null)) ) } ] }' "$data_dir"/*.json > "$temporary" mv "$temporary" "$output" echo "Wrote $output from Pi $version ($commit)"