diff --git a/package-lock.json b/package-lock.json index 37888a50..947994f1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3193,7 +3193,7 @@ }, "packages/agent": { "name": "@mariozechner/pi-agent", - "version": "0.7.10", + "version": "0.7.11", "license": "MIT", "dependencies": { "@mariozechner/pi-ai": "^0.7.10", @@ -3223,7 +3223,7 @@ }, "packages/ai": { "name": "@mariozechner/pi-ai", - "version": "0.7.10", + "version": "0.7.11", "license": "MIT", "dependencies": { "@anthropic-ai/sdk": "^0.61.0", @@ -3270,7 +3270,7 @@ }, "packages/coding-agent": { "name": "@mariozechner/pi-coding-agent", - "version": "0.7.10", + "version": "0.7.11", "license": "MIT", "dependencies": { "@mariozechner/pi-agent": "^0.7.10", @@ -3317,7 +3317,7 @@ }, "packages/pods": { "name": "@mariozechner/pi", - "version": "0.7.10", + "version": "0.7.11", "license": "MIT", "dependencies": { "@mariozechner/pi-agent": "^0.7.10", @@ -3343,7 +3343,7 @@ }, "packages/proxy": { "name": "@mariozechner/pi-proxy", - "version": "0.7.10", + "version": "0.7.11", "dependencies": { "@hono/node-server": "^1.14.0", "hono": "^4.6.16" @@ -3359,7 +3359,7 @@ }, "packages/tui": { "name": "@mariozechner/pi-tui", - "version": "0.7.10", + "version": "0.7.11", "license": "MIT", "dependencies": { "@types/mime-types": "^2.1.4", @@ -3398,7 +3398,7 @@ }, "packages/web-ui": { "name": "@mariozechner/pi-web-ui", - "version": "0.7.10", + "version": "0.7.11", "license": "MIT", "dependencies": { "@lmstudio/sdk": "^1.5.0", diff --git a/packages/agent/package.json b/packages/agent/package.json index 501a2d6b..9ce3bc94 100644 --- a/packages/agent/package.json +++ b/packages/agent/package.json @@ -1,6 +1,6 @@ { "name": "@mariozechner/pi-agent", - "version": "0.7.10", + "version": "0.7.11", "description": "General-purpose agent with transport abstraction, state management, and attachment support", "type": "module", "main": "./dist/index.js", @@ -18,8 +18,8 @@ "prepublishOnly": "npm run clean && npm run build" }, "dependencies": { - "@mariozechner/pi-ai": "^0.7.10", - "@mariozechner/pi-tui": "^0.7.10" + "@mariozechner/pi-ai": "^0.7.11", + "@mariozechner/pi-tui": "^0.7.11" }, "keywords": [ "ai", diff --git a/packages/ai/package.json b/packages/ai/package.json index d6abdacc..9d047cd6 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@mariozechner/pi-ai", - "version": "0.7.10", + "version": "0.7.11", "description": "Unified LLM API with automatic model discovery and provider configuration", "type": "module", "main": "./dist/index.js", diff --git a/packages/coding-agent/CHANGELOG.md b/packages/coding-agent/CHANGELOG.md index daaf283a..a77cccdb 100644 --- a/packages/coding-agent/CHANGELOG.md +++ b/packages/coding-agent/CHANGELOG.md @@ -2,6 +2,12 @@ ## [Unreleased] +## [0.7.11] - 2025-11-16 + +### Changed + +- The `/model` selector now filters models based on available API keys. Only models for which API keys are configured in environment variables are shown. This prevents selecting models that would fail due to missing credentials. A yellow hint is displayed at the top of the selector explaining this behavior. ([#19](https://github.com/badlogic/pi-mono/pull/19)) + ## [0.7.10] - 2025-11-14 ### Added diff --git a/packages/coding-agent/README.md b/packages/coding-agent/README.md index cdebfd7c..be74e9a5 100644 --- a/packages/coding-agent/README.md +++ b/packages/coding-agent/README.md @@ -62,6 +62,8 @@ export ZAI_API_KEY=... If no API key is set, the CLI will prompt you to configure one on first run. +**Note:** The `/model` command only shows models for which API keys are configured in your environment. If you don't see a model you expect, check that you've set the corresponding environment variable. + ## Slash Commands The CLI supports several commands to control its behavior: @@ -70,6 +72,8 @@ The CLI supports several commands to control its behavior: Switch models mid-session. Opens an interactive selector where you can type to search (by provider or model name), use arrow keys to navigate, Enter to select, or Escape to cancel. +The selector only displays models for which API keys are configured in your environment (see API Keys section). + ### /thinking Adjust thinking/reasoning level for supported models (Claude Sonnet 4, GPT-5, Gemini 2.5). Opens an interactive selector where you can use arrow keys to navigate, Enter to select, or Escape to cancel. diff --git a/packages/coding-agent/package.json b/packages/coding-agent/package.json index 640de7e6..60b3ec45 100644 --- a/packages/coding-agent/package.json +++ b/packages/coding-agent/package.json @@ -1,6 +1,6 @@ { "name": "@mariozechner/pi-coding-agent", - "version": "0.7.10", + "version": "0.7.11", "description": "Coding agent CLI with read, bash, edit, write tools and session management", "type": "module", "bin": { @@ -21,8 +21,8 @@ "prepublishOnly": "npm run clean && npm run build" }, "dependencies": { - "@mariozechner/pi-agent": "^0.7.10", - "@mariozechner/pi-ai": "^0.7.10", + "@mariozechner/pi-agent": "^0.7.11", + "@mariozechner/pi-ai": "^0.7.11", "chalk": "^5.5.0", "diff": "^8.0.2", "glob": "^11.0.3" diff --git a/packages/coding-agent/src/tui/model-selector.ts b/packages/coding-agent/src/tui/model-selector.ts index 8e1c5daa..b6bd1704 100644 --- a/packages/coding-agent/src/tui/model-selector.ts +++ b/packages/coding-agent/src/tui/model-selector.ts @@ -1,4 +1,4 @@ -import { getModels, getProviders, type Model } from "@mariozechner/pi-ai"; +import { getApiKey, getModels, getProviders, type Model } from "@mariozechner/pi-ai"; import { Container, Input, Spacer, Text } from "@mariozechner/pi-tui"; import chalk from "chalk"; @@ -35,6 +35,12 @@ export class ModelSelectorComponent extends Container { this.addChild(new Text(chalk.blue("─".repeat(80)), 0, 0)); this.addChild(new Spacer(1)); + // Add hint about API key filtering + this.addChild( + new Text(chalk.yellow("Only showing models with configured API keys (see README for details)"), 0, 0), + ); + this.addChild(new Spacer(1)); + // Create search input this.searchInput = new Input(); this.searchInput.onSubmit = () => { @@ -71,8 +77,11 @@ export class ModelSelectorComponent extends Container { } } + // Filter out models from providers without API keys + const filteredModels = models.filter((item) => getApiKey(item.provider as any) !== undefined); + // Sort: current model first, then by provider - models.sort((a, b) => { + filteredModels.sort((a, b) => { const aIsCurrent = this.currentModel?.id === a.model.id; const bIsCurrent = this.currentModel?.id === b.model.id; if (aIsCurrent && !bIsCurrent) return -1; @@ -80,8 +89,8 @@ export class ModelSelectorComponent extends Container { return a.provider.localeCompare(b.provider); }); - this.allModels = models; - this.filteredModels = models; + this.allModels = filteredModels; + this.filteredModels = filteredModels; } private filterModels(query: string): void { diff --git a/packages/pods/package.json b/packages/pods/package.json index c01bfaa3..cd738dda 100644 --- a/packages/pods/package.json +++ b/packages/pods/package.json @@ -1,6 +1,6 @@ { "name": "@mariozechner/pi", - "version": "0.7.10", + "version": "0.7.11", "description": "CLI tool for managing vLLM deployments on GPU pods", "type": "module", "bin": { @@ -34,7 +34,7 @@ "node": ">=20.0.0" }, "dependencies": { - "@mariozechner/pi-agent": "^0.7.10", + "@mariozechner/pi-agent": "^0.7.11", "chalk": "^5.5.0" }, "devDependencies": {} diff --git a/packages/proxy/package.json b/packages/proxy/package.json index aaabb188..f3abf1eb 100644 --- a/packages/proxy/package.json +++ b/packages/proxy/package.json @@ -1,6 +1,6 @@ { "name": "@mariozechner/pi-proxy", - "version": "0.7.10", + "version": "0.7.11", "type": "module", "description": "CORS and authentication proxy for pi-ai", "main": "dist/index.js", diff --git a/packages/tui/package.json b/packages/tui/package.json index 0906e2aa..3f17b2a1 100644 --- a/packages/tui/package.json +++ b/packages/tui/package.json @@ -1,6 +1,6 @@ { "name": "@mariozechner/pi-tui", - "version": "0.7.10", + "version": "0.7.11", "description": "Terminal User Interface library with differential rendering for efficient text-based applications", "type": "module", "main": "dist/index.js", diff --git a/packages/web-ui/package.json b/packages/web-ui/package.json index c53c9d6d..f88b2390 100644 --- a/packages/web-ui/package.json +++ b/packages/web-ui/package.json @@ -1,6 +1,6 @@ { "name": "@mariozechner/pi-web-ui", - "version": "0.7.10", + "version": "0.7.11", "description": "Reusable web UI components for AI chat interfaces powered by @mariozechner/pi-ai", "type": "module", "main": "dist/index.js", @@ -18,8 +18,8 @@ }, "dependencies": { "@lmstudio/sdk": "^1.5.0", - "@mariozechner/pi-ai": "^0.7.10", - "@mariozechner/pi-tui": "^0.7.10", + "@mariozechner/pi-ai": "^0.7.11", + "@mariozechner/pi-tui": "^0.7.11", "docx-preview": "^0.3.7", "jszip": "^3.10.1", "lucide": "^0.544.0",