Yichen Jiang
4c80cab108
fix(llm): capture an immutable snapshot per pi-ai operation
...
Review found four defects in the declared-provider work.
`PiAiAdapter` reused one `Models` collection and mutated it whenever the
configuration changed. `Models.streamSimple()` resolves its provider
lazily — when the stream is first consumed, which is after the adapter
awaits the route's credential — so a configuration change landing in
that window let an in-flight request finish under a configuration it
never resolved against, or fail on a provider that no longer existed.
Each resolution now produces an immutable snapshot and every operation
captures one before its first await, which is what makes the seam's
per-step freeze (`llm.prepareCall()`) hold end to end: switching models
mid-reply takes effect on the next step, never inside the one in flight.
`defaultMaxTokens` was materialized from the catalog's `Model.maxTokens`.
The two answer different questions: pi-ai requires that field as the
model's output capability, while the seam's is a cap the deployment
chose to send on requests naming none, so every request had started
carrying a number nobody picked. Only an explicitly configured cap
reaches the seam now.
The configurable-provider directory was refreshed by disposing its
registration and making a new one. A candidate set the registry refuses
— a profile keyed `deepseek-official`, which llm-deepseek declares —
left the whole directory withdrawn and the Models page empty, silently,
because the settings callback contains the failure. The seam's
registration handle now carries `replace()` with the same
validate-first atomicity `registerAdapter` has.
The protocol table offered every pi-ai streaming API, including four
whose authentication a profile cannot express: Bedrock signs with SigV4
over AWS credentials and a region, Vertex needs a project, a location,
and ADC, Azure needs provider environment plus an api-version, and Codex
uses OAuth. Offering them handed back routes that cannot authenticate.
Catalog routes still reach them through their own provider.
2026-08-05 18:54:23 +08:00
..
2026-08-04 17:36:14 +08:00
2026-07-26 23:06:00 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-28 00:00:51 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-22 23:07:14 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-22 23:07:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-23 19:48:00 +08:00
2026-07-23 19:33:30 +08:00
2026-07-23 19:48:00 +08:00
2026-08-04 17:36:14 +08:00
2026-07-22 23:07:14 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-22 23:07:14 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 18:42:13 +08:00
2026-07-26 22:45:33 +08:00
2026-08-04 18:42:13 +08:00
2026-08-04 20:54:42 +08:00
2026-07-28 22:16:43 +08:00
2026-08-04 20:54:42 +08:00
2026-08-04 17:36:14 +08:00
2026-07-26 23:06:00 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-24 23:43:10 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-23 00:10:53 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-25 15:11:17 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-24 23:43:10 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-08-02 12:51:09 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 20:54:42 +08:00
2026-07-31 03:10:48 -07:00
2026-08-04 20:54:42 +08:00
2026-08-04 17:36:14 +08:00
2026-07-22 23:07:14 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-26 23:06:00 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-22 23:07:14 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-27 04:14:51 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 18:42:13 +08:00
2026-07-26 23:06:00 +08:00
2026-08-04 18:42:13 +08:00
2026-08-04 17:36:14 +08:00
2026-07-24 23:43:10 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-28 00:00:51 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-22 23:07:14 +08:00
2026-08-04 17:36:14 +08:00
2026-08-05 10:57:53 +08:00
2026-07-22 23:07:14 +08:00
2026-08-05 10:57:53 +08:00
2026-08-04 17:36:14 +08:00
2026-07-22 23:07:14 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-26 02:33:29 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-26 12:43:59 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-26 02:33:29 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-23 19:33:30 +08:00
2026-08-04 17:36:14 +08:00
2026-08-02 20:09:05 +08:00
2026-08-02 20:09:05 +08:00
2026-08-02 20:09:05 +08:00
2026-08-05 10:57:53 +08:00
2026-07-26 02:33:29 +08:00
2026-08-05 10:57:53 +08:00
2026-08-04 17:36:14 +08:00
2026-07-27 21:17:49 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 18:42:13 +08:00
2026-07-29 22:56:14 +08:00
2026-08-04 18:42:13 +08:00
2026-08-02 12:51:09 +08:00
2026-08-02 12:51:09 +08:00
2026-08-02 12:51:09 +08:00
2026-08-04 20:54:42 +08:00
2026-07-24 01:40:25 +08:00
2026-08-04 20:54:42 +08:00
2026-08-04 18:42:13 +08:00
2026-07-26 14:00:37 +08:00
2026-08-04 18:42:13 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 18:42:13 +08:00
2026-07-26 13:13:53 +08:00
2026-08-04 18:42:13 +08:00
2026-08-04 17:36:14 +08:00
2026-07-24 01:40:25 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-21 21:11:32 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-26 20:51:32 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-23 03:15:15 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 16:07:35 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 18:42:13 +08:00
2026-08-04 16:07:35 +08:00
2026-08-04 18:42:13 +08:00
2026-08-04 17:36:14 +08:00
2026-07-21 20:15:09 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-08-03 22:04:53 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 11:58:38 +08:00
2026-08-04 11:58:38 +08:00
2026-08-04 11:58:38 +08:00
2026-08-04 17:36:14 +08:00
2026-07-27 21:20:06 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-27 15:49:09 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-25 16:43:07 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 18:42:13 +08:00
2026-07-28 12:09:48 +08:00
2026-08-04 18:42:13 +08:00
2026-08-04 17:36:14 +08:00
2026-07-30 01:58:51 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 14:36:31 +08:00
2026-08-04 14:36:31 +08:00
2026-08-04 14:36:31 +08:00
2026-08-04 18:42:13 +08:00
2026-07-31 20:47:55 +08:00
2026-08-04 18:42:13 +08:00
2026-08-04 17:36:14 +08:00
2026-07-26 13:42:02 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-24 21:50:11 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-28 15:45:53 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-31 16:49:55 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-31 03:20:20 +08:00
2026-08-04 17:36:14 +08:00
2026-08-05 12:29:03 +08:00
2026-08-05 12:21:09 +08:00
2026-08-05 12:21:09 +08:00
2026-08-04 17:36:14 +08:00
2026-07-28 12:09:48 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-31 19:13:22 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-27 03:54:33 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-28 02:33:14 -07:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-27 04:14:51 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-26 12:17:45 +08:00
2026-08-04 17:36:14 +08:00
2026-07-29 23:45:42 +08:00
2026-07-29 23:45:42 +08:00
2026-07-29 23:45:42 +08:00
2026-08-04 17:36:14 +08:00
2026-07-27 03:52:41 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 20:54:42 +08:00
2026-07-28 17:02:39 +08:00
2026-08-04 20:54:42 +08:00
2026-08-03 13:45:30 +08:00
2026-08-03 13:45:30 +08:00
2026-08-03 13:45:30 +08:00
2026-08-04 17:36:14 +08:00
2026-07-30 10:11:38 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-30 01:14:25 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-28 13:55:59 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-30 14:09:04 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-29 13:15:24 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-30 17:22:15 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-31 01:30:29 +08:00
2026-08-04 17:36:14 +08:00
2026-07-30 21:49:58 +08:00
2026-07-30 21:49:58 +08:00
2026-07-30 21:49:58 +08:00
2026-07-31 17:39:51 +08:00
2026-07-31 17:39:51 +08:00
2026-07-31 17:39:51 +08:00
2026-07-30 18:07:35 +08:00
2026-07-30 18:07:35 +08:00
2026-07-30 18:07:35 +08:00
2026-08-04 17:36:14 +08:00
2026-07-30 19:24:21 +08:00
2026-08-04 17:36:14 +08:00
2026-08-04 17:36:14 +08:00
2026-07-31 01:30:29 +08:00
2026-08-04 17:36:14 +08:00
2026-08-02 01:25:02 +08:00
2026-08-02 01:25:02 +08:00
2026-08-02 01:25:02 +08:00
2026-08-02 12:51:10 +08:00
2026-08-02 12:51:10 +08:00
2026-08-02 12:51:10 +08:00
2026-08-04 17:36:14 +08:00
2026-07-31 11:00:07 +08:00
2026-08-04 17:36:14 +08:00
2026-08-02 01:29:04 +08:00
2026-08-02 01:29:04 +08:00
2026-08-02 01:29:04 +08:00
2026-08-05 15:34:51 +08:00
2026-08-05 15:34:51 +08:00
2026-08-05 15:34:51 +08:00
2026-08-02 01:11:08 +08:00
2026-08-02 01:11:08 +08:00
2026-08-02 01:11:08 +08:00
2026-08-05 18:54:23 +08:00
2026-08-05 18:54:23 +08:00
2026-08-05 18:54:23 +08:00
2026-08-04 16:42:50 +08:00
2026-08-04 16:42:50 +08:00
2026-08-04 16:42:50 +08:00