summaryrefslogtreecommitdiff
path: root/config/pi
diff options
context:
space:
mode:
authorIgor Soarez <igor@soarez.org>2026-09-28 12:45:14 +0300
committerIgor Soarez <igor@soarez.org>2026-09-28 12:45:14 +0300
commitf5d9efe3a80ae1bdfbcf082ac9cb69f4d322d150 (patch)
tree429d29f920c8d843707b04c2b1cb20296c3483de /config/pi
parentbf177c58da897dbd084cc1fe8e6ebd9b61b85830 (diff)
pi: the siliconflow key is a reference, not a name
models.json gave the provider an apiKey of "SILICONFLOW_API_KEY", which pi sends verbatim as the credential: it interpolates "$NAME" and "${NAME}", runs "!command", and treats anything else as a literal. So that provider has been authenticating with the 19-character string "SILICONFLOW_API_KEY" and getting a 401 for as long as it has existed. Confirmed by calling pi's own resolver: "SILICONFLOW_API_KEY" resolves to itself, "$SILICONFLOW_API_KEY" to the value. Nothing catches this -- isConfigValueConfigured returns true for both and reports no missing variables, so `pi auth check` says ready either way, and only a real request fails. Hence the note in CLAUDE.md beside the models.d row: the rule is invisible in the file, and the next provider added would repeat it. Reported as a change request from the machine that hit it; the sweep for other instances found none.
Diffstat (limited to 'config/pi')
-rw-r--r--config/pi/models.json2
1 files changed, 1 insertions, 1 deletions
diff --git a/config/pi/models.json b/config/pi/models.json
index 9dd0617..7734bfc 100644
--- a/config/pi/models.json
+++ b/config/pi/models.json
@@ -3,7 +3,7 @@
"siliconflow-anthropic": {
"baseUrl": "https://api.siliconflow.com/anthropic",
"api": "anthropic-messages",
- "apiKey": "SILICONFLOW_API_KEY",
+ "apiKey": "$SILICONFLOW_API_KEY",
"authHeader": true,
"models": [
{