detached 4657b32

Document command-backed custom providers

commit
4657b320119cb056ae995d44fc402dd834cd0e73
author
patriceckhart · · 2026-07-25 07:58 UTC
parent
6f37bbb
signature
unsigned
refs
tag: v0.3.6
2 files · +46 -0
M README.md +22 -0
@@ -487,6 +487,28 @@ A top-level provider key that is not a built-in id defines a custom provider. Gi
487487
488488 Custom providers are first-class: they appear in `--list-models`, `/model`, and `/login`. `models.json` never stores secrets. Supply the key through `/login`, `--api-key`, or a derived environment variable in upper snake case (so `my-company` reads `MY_COMPANY_API_KEY`). Because many self-hosted gateways do not expose a model-list endpoint, custom provider keys are accepted and stored without a verification probe; an invalid key surfaces on the first model call.
489489
490+To retrieve this custom provider's key from a password manager, add a matching entry to `$ZOT_HOME/auth.json`:
491+
492+```json
493+{
494+ "additional_api_key_creds": {
495+ "my-company": {
496+ "api_key_command": {
497+ "program": "op",
498+ "args": ["read", "op://Work/OpenAI/credential"],
499+ "timeout_ms": 120000
500+ }
501+ }
502+ }
503+}
504+```
505+
506+The provider IDs in `models.json` and `auth.json` must match. Then select the custom model directly:
507+
508+```bash
509+zot --provider my-company --model company-llm-v2
510+```
511+
490512 ### Kimi Code
491513
492514 zot has built-in Kimi support through the Kimi Coding endpoint and Moonshot's OpenAI-compatible chat API.
@@ -487,6 +487,28 @@ A top-level provider key that is not a built-in id defines a custom provider. Gi
487 487
488 Custom providers are first-class: they appear in `--list-models`, `/model`, and `/login`. `models.json` never stores secrets. Supply the key through `/login`, `--api-key`, or a derived environment variable in upper snake case (so `my-company` reads `MY_COMPANY_API_KEY`). Because many self-hosted gateways do not expose a model-list endpoint, custom provider keys are accepted and stored without a verification probe; an invalid key surfaces on the first model call.488 Custom providers are first-class: they appear in `--list-models`, `/model`, and `/login`. `models.json` never stores secrets. Supply the key through `/login`, `--api-key`, or a derived environment variable in upper snake case (so `my-company` reads `MY_COMPANY_API_KEY`). Because many self-hosted gateways do not expose a model-list endpoint, custom provider keys are accepted and stored without a verification probe; an invalid key surfaces on the first model call.
489 489
490+To retrieve this custom provider's key from a password manager, add a matching entry to `$ZOT_HOME/auth.json`:
491+
492+```json
493+{
494+ "additional_api_key_creds": {
495+ "my-company": {
496+ "api_key_command": {
497+ "program": "op",
498+ "args": ["read", "op://Work/OpenAI/credential"],
499+ "timeout_ms": 120000
500+ }
501+ }
502+ }
503+}
504+```
505+
506+The provider IDs in `models.json` and `auth.json` must match. Then select the custom model directly:
507+
508+```bash
509+zot --provider my-company --model company-llm-v2
510+```
511+
490 ### Kimi Code512 ### Kimi Code
491 513
492 zot has built-in Kimi support through the Kimi Coding endpoint and Moonshot's OpenAI-compatible chat API.514 zot has built-in Kimi support through the Kimi Coding endpoint and Moonshot's OpenAI-compatible chat API.
M docs/providers.md +24 -0
@@ -322,6 +322,30 @@ Custom providers are first-class: they appear in `--list-models`, `/model`, and
322322 not expose a model-list endpoint, custom provider keys are accepted and stored
323323 without a verification probe; an invalid key surfaces on the first model call.
324324
325+To retrieve this custom provider's key from a password manager, add a matching
326+entry to `$ZOT_HOME/auth.json`:
327+
328+```json
329+{
330+ "additional_api_key_creds": {
331+ "my-company": {
332+ "api_key_command": {
333+ "program": "op",
334+ "args": ["read", "op://Work/OpenAI/credential"],
335+ "timeout_ms": 120000
336+ }
337+ }
338+ }
339+}
340+```
341+
342+The provider IDs in `models.json` and `auth.json` must match. Then select the
343+custom model directly:
344+
345+```sh
346+zot --provider my-company --model company-llm-v2
347+```
348+
325349 ## Credential resolution
326350
327351 For each request, zot checks credentials in this order:
@@ -322,6 +322,30 @@ Custom providers are first-class: they appear in `--list-models`, `/model`, and
322 not expose a model-list endpoint, custom provider keys are accepted and stored322 not expose a model-list endpoint, custom provider keys are accepted and stored
323 without a verification probe; an invalid key surfaces on the first model call.323 without a verification probe; an invalid key surfaces on the first model call.
324 324
325+To retrieve this custom provider's key from a password manager, add a matching
326+entry to `$ZOT_HOME/auth.json`:
327+
328+```json
329+{
330+ "additional_api_key_creds": {
331+ "my-company": {
332+ "api_key_command": {
333+ "program": "op",
334+ "args": ["read", "op://Work/OpenAI/credential"],
335+ "timeout_ms": 120000
336+ }
337+ }
338+ }
339+}
340+```
341+
342+The provider IDs in `models.json` and `auth.json` must match. Then select the
343+custom model directly:
344+
345+```sh
346+zot --provider my-company --model company-llm-v2
347+```
348+
325 ## Credential resolution349 ## Credential resolution
326 350
327 For each request, zot checks credentials in this order:351 For each request, zot checks credentials in this order:

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 1

Tags 476

↑↓ moveenter openesc close