@senior: issue #29 — derive Ollama Cloud provider models from the agent registry
The agent→model registry in route.sh is now the single source of truth for
Ollama Cloud model IDs. route.sh publishes the full registry as a step
output (agents=...), and install-opencode.sh derives the ollama-cloud
provider models: map from it (unprefixed IDs), instead of hardcoding a
second copy. The two files can no longer drift silently — adding/changing
a cloud model in the registry automatically updates the provider config.
- route.sh: emit agents=$(jq -c '.' /tmp/agents.json) to GITHUB_OUTPUT
- agent.yml: pass steps.prep.outputs.agents as AGENTS env to install-opencode.sh
- install-opencode.sh: derive CMODELS from $AGENTS; // {} keeps it valid
when no agent uses an ollama-cloud model (non-ollama repos)
This commit is contained in:
@@ -78,6 +78,7 @@ jobs:
|
|||||||
OLLAMA_CLOUD_API_KEY: ${{ secrets.OLLAMA_CLOUD_API_KEY }}
|
OLLAMA_CLOUD_API_KEY: ${{ secrets.OLLAMA_CLOUD_API_KEY }}
|
||||||
NAME: ${{ steps.prep.outputs.name }}
|
NAME: ${{ steps.prep.outputs.name }}
|
||||||
SKILLS: ${{ steps.prep.outputs.skills }} # JSON array of skills this agent may load
|
SKILLS: ${{ steps.prep.outputs.skills }} # JSON array of skills this agent may load
|
||||||
|
AGENTS: ${{ steps.prep.outputs.agents }} # full agent registry — single source of truth for model IDs
|
||||||
run: bash "$SCRIPTS/install-opencode.sh"
|
run: bash "$SCRIPTS/install-opencode.sh"
|
||||||
|
|
||||||
- name: Set up read-only SSH alias `node1` (+ opencode skill so the agent actually knows about it)
|
- name: Set up read-only SSH alias `node1` (+ opencode skill so the agent actually knows about it)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
# Install opencode + provider config (+ Playwright MCP for browser agents).
|
# Install opencode + provider config (+ Playwright MCP for browser agents).
|
||||||
#
|
#
|
||||||
# Required env (provided by the workflow step): OLLAMA_URL OLLAMA_CLOUD_API_KEY NAME SKILLS
|
# Required env (provided by the workflow step): OLLAMA_URL OLLAMA_CLOUD_API_KEY NAME SKILLS
|
||||||
# GITHUB_PATH HOME
|
# AGENTS GITHUB_PATH HOME
|
||||||
set -eu
|
set -eu
|
||||||
|
|
||||||
curl -fsSL https://opencode.ai/install | bash
|
curl -fsSL https://opencode.ai/install | bash
|
||||||
@@ -27,11 +27,17 @@ esac
|
|||||||
SKILLS="${SKILLS:-[]}"
|
SKILLS="${SKILLS:-[]}"
|
||||||
PERM=$(jq -nc --argjson s "$SKILLS" '
|
PERM=$(jq -nc --argjson s "$SKILLS" '
|
||||||
{skill: ( {"*":"deny"} + (reduce $s[] as $k ({}; . + {($k):"allow"})) )}')
|
{skill: ( {"*":"deny"} + (reduce $s[] as $k ({}; . + {($k):"allow"})) )}')
|
||||||
# Two ollama providers: local self-hosted (ornith) + Ollama Cloud (gemma4/kimi-k2.7-code/glm-5.2/minimax-m3).
|
# Derive the Ollama Cloud `models:` map from the agent registry itself — single source of truth,
|
||||||
jq -n --argjson mcp "$MCP" --argjson perm "$PERM" --arg url "$OLLAMA_URL" --arg ckey "$OLLAMA_CLOUD_API_KEY" '{
|
# so the provider config and the agent→model mapping in route.sh can't drift. Registry model IDs
|
||||||
|
# are prefixed `ollama-cloud/...`; the provider's are the unprefixed IDs. `// {}` keeps it valid
|
||||||
|
# JSON when no agent uses an ollama-cloud model (e.g. a repo where every agent is anthropic/*).
|
||||||
|
AGENTS="${AGENTS:-{}}"
|
||||||
|
CMODELS=$(printf '%s' "$AGENTS" | jq -c '([.[].model | select(startswith("ollama-cloud/")) | sub("^ollama-cloud/";"")] | unique | map({(.):{}}) | add) // {}')
|
||||||
|
# Two ollama providers: local self-hosted (ornith) + Ollama Cloud (derived above).
|
||||||
|
jq -n --argjson mcp "$MCP" --argjson perm "$PERM" --argjson cmodels "$CMODELS" --arg url "$OLLAMA_URL" --arg ckey "$OLLAMA_CLOUD_API_KEY" '{
|
||||||
provider: {
|
provider: {
|
||||||
ollama: {npm:"@ai-sdk/openai-compatible", options:{baseURL:($url+"/v1")}, models:{"ornith:35b":{}}},
|
ollama: {npm:"@ai-sdk/openai-compatible", options:{baseURL:($url+"/v1")}, models:{"ornith:35b":{}}},
|
||||||
"ollama-cloud": {npm:"@ai-sdk/openai-compatible", options:{baseURL:"https://ollama.com/v1", apiKey:$ckey}, models:{"glm-5.2:cloud":{},"gemma4:cloud":{},"kimi-k2.7-code:cloud":{},"minimax-m3:cloud":{}}}
|
"ollama-cloud": {npm:"@ai-sdk/openai-compatible", options:{baseURL:"https://ollama.com/v1", apiKey:$ckey}, models:$cmodels}
|
||||||
},
|
},
|
||||||
permission: $perm,
|
permission: $perm,
|
||||||
mcp: $mcp
|
mcp: $mcp
|
||||||
|
|||||||
@@ -43,6 +43,9 @@ mode=$(jq -r --arg a "$name" '.[$a].mode' /tmp/agents.json)
|
|||||||
skills=$(jq -c --arg a "$name" '.[$a].skills // []' /tmp/agents.json)
|
skills=$(jq -c --arg a "$name" '.[$a].skills // []' /tmp/agents.json)
|
||||||
echo "Routing to @$name (model=$model vision=$vision mode=$mode skills=$skills)"
|
echo "Routing to @$name (model=$model vision=$vision mode=$mode skills=$skills)"
|
||||||
{ echo "name=$name"; echo "model=$model"; echo "vision=$vision"; echo "mode=$mode"; echo "skills=$skills"; } >> "$GITHUB_OUTPUT"
|
{ echo "name=$name"; echo "model=$model"; echo "vision=$vision"; echo "mode=$mode"; echo "skills=$skills"; } >> "$GITHUB_OUTPUT"
|
||||||
|
# Publish the full agent registry so install-opencode.sh can derive the provider `models:` map
|
||||||
|
# from it — single source of truth for Ollama Cloud model IDs, so the two files can't drift.
|
||||||
|
echo "agents=$(jq -c '.' /tmp/agents.json)" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
# Act as the agent's own Gitea user when its token is set; else the built-in bot.
|
# Act as the agent's own Gitea user when its token is set; else the built-in bot.
|
||||||
case "$name" in
|
case "$name" in
|
||||||
|
|||||||
Reference in New Issue
Block a user