visa2
386b57bb77
fix(composite): pass the requested model through when a prefix route leaves upstream_model empty
...
Composite model routes support a match_type: prefix mode with an optional
upstream_model. Leaving upstream_model empty is meant to pass the concrete
requested model through to the upstream, but every request matching the prefix
collapsed to the route's public_model instead. A route with
public_model=deepseek-v4, match_type=prefix and an empty upstream_model
forwarded both deepseek-v4-flash and deepseek-v4-pro upstream as deepseek-v4.
Root cause: normalizeCompositeRouteInput backfilled an empty upstream_model with
public_model at save time, so CompositeRouteResolver.Resolve never reached its
"upstreamModel == '' -> concrete requested model" fallback.
- Skip the backfill for prefix routes only; an empty upstream_model stays empty
and Resolve passes the concrete requested model through.
- exact routes keep the backfill (model == public_model, so persisted/display
contract is unchanged).
- Explicit upstream_model still forwards that fixed model in every mode.
- Frontend: add an upstream_model hint (zh/en) documenting empty = passthrough.
2026-07-25 10:20:50 +08:00
..
2026-07-18 19:17:53 +08:00
2026-07-23 15:50:44 +08:00
2026-07-16 19:57:48 +08:00
2026-07-17 19:15:16 +08:00
2026-07-17 22:10:18 +08:00
2026-07-23 15:50:44 +08:00
2026-07-18 21:05:50 +08:00
2026-07-21 05:02:30 -07:00
2026-07-21 05:02:30 -07:00
2026-07-21 05:02:30 -07:00
2026-07-19 12:17:52 +08:00
2026-07-17 19:15:16 +08:00
2026-07-17 20:59:29 +08:00
2026-07-23 15:50:44 +08:00
2026-07-21 11:02:43 +08:00
2026-07-21 11:02:43 +08:00
2026-07-23 09:20:18 +08:00
2026-07-16 15:37:35 +08:00
2026-07-16 15:37:35 +08:00
2026-07-23 09:19:25 +08:00
2026-07-23 09:19:25 +08:00
2026-07-16 15:37:35 +08:00
2026-07-16 15:37:35 +08:00
2026-07-25 10:20:50 +08:00
2026-07-19 12:17:31 +08:00
2026-07-23 09:20:18 +08:00
2026-07-16 15:37:35 +08:00
2026-07-18 15:35:30 +08:00
2026-07-18 21:43:54 +08:00
2026-07-18 21:43:54 +08:00
2026-07-21 11:16:04 +08:00
2026-07-21 11:16:04 +08:00
2026-07-21 11:02:43 +08:00
2026-07-21 11:02:43 +08:00
2026-07-20 11:15:37 +08:00
2026-07-16 13:47:50 +08:00
2026-07-23 16:43:18 +08:00
2026-07-23 16:43:18 +08:00
2026-07-18 00:11:18 +08:00
2026-07-18 00:11:18 +08:00
2026-07-16 15:37:35 +08:00
2026-07-16 13:47:50 +08:00
2026-07-16 13:47:50 +08:00
2026-07-20 15:20:51 +08:00
2026-07-20 15:20:51 +08:00
2026-07-18 13:53:36 +08:00
2026-07-18 13:53:36 +08:00
2026-07-16 16:30:19 +08:00
2026-07-21 11:55:38 +08:00
2026-07-21 11:55:38 +08:00
2026-07-16 16:30:19 +08:00
2026-07-16 16:30:19 +08:00
2026-07-23 11:18:10 +08:00
2026-07-23 11:18:10 +08:00
2026-07-25 10:20:50 +08:00
2026-07-23 09:20:18 +08:00
2026-07-23 09:20:18 +08:00
2026-07-25 10:20:50 +08:00
2026-07-23 09:20:18 +08:00
2026-07-16 15:37:35 +08:00
2026-07-23 15:50:44 +08:00
2026-07-23 15:50:44 +08:00
2026-07-18 20:41:12 +08:00
2026-07-16 15:45:22 +08:00
2026-07-20 22:43:11 +08:00
2026-07-16 15:45:22 +08:00
2026-07-16 15:45:22 +08:00
2026-07-20 21:00:29 +08:00
2026-07-20 21:00:29 +08:00
2026-07-20 20:40:08 +08:00
2026-07-20 20:40:08 +08:00
2026-07-16 15:45:22 +08:00
2026-07-17 22:10:18 +08:00
2026-07-17 22:10:18 +08:00
2026-07-17 22:10:18 +08:00
2026-07-20 22:43:11 +08:00
2026-07-23 09:20:18 +08:00
2026-07-17 21:59:57 +08:00
2026-07-17 21:59:57 +08:00
2026-07-23 09:20:18 +08:00
2026-07-23 09:20:52 +08:00
2026-07-16 15:45:22 +08:00
2026-07-23 10:26:58 +08:00
2026-07-23 10:26:58 +08:00
2026-07-19 13:05:24 +08:00
2026-07-18 15:35:30 +08:00
2026-07-18 15:35:30 +08:00
2026-07-17 22:10:18 +08:00
2026-07-20 10:40:18 +08:00
2026-07-22 13:32:35 +08:00
2026-07-19 12:17:52 +08:00
2026-07-19 12:17:52 +08:00
2026-07-19 12:17:42 +08:00
2026-07-19 12:17:42 +08:00
2026-07-19 22:40:58 +08:00
2026-07-19 22:40:58 +08:00
2026-07-22 13:32:35 +08:00
2026-07-22 13:32:35 +08:00
2026-07-18 14:37:25 +08:00
2026-07-18 14:37:25 +08:00
2026-07-16 18:18:28 +08:00
2026-07-21 11:02:43 +08:00
2026-07-17 15:07:41 +08:00
2026-07-17 15:07:41 +08:00
2026-07-20 15:20:51 +08:00
2026-07-20 15:20:51 +08:00
2026-07-19 00:56:21 -07:00
2026-07-18 00:11:18 +08:00
2026-07-18 00:11:18 +08:00
2026-07-19 11:39:20 +08:00
2026-07-19 11:23:26 +08:00
2026-07-23 15:50:44 +08:00
2026-07-23 17:14:10 +08:00
2026-07-23 15:50:44 +08:00
2026-07-18 21:02:23 +08:00
2026-07-22 13:32:35 +08:00
2026-07-20 16:12:56 +08:00
2026-07-23 00:12:28 +08:00
2026-07-20 21:44:42 +08:00
2026-07-23 00:12:28 +08:00
2026-07-17 08:44:23 +08:00
2026-07-17 18:12:33 +08:00
2026-07-21 05:02:30 -07:00
2026-07-21 05:02:30 -07:00
2026-07-21 05:02:30 -07:00
2026-07-21 05:02:30 -07:00
2026-07-20 15:30:31 +08:00
2026-07-20 15:30:31 +08:00
2026-07-20 18:49:24 +08:00
2026-07-20 18:49:24 +08:00
2026-07-19 22:28:49 +08:00
2026-07-17 18:12:33 +08:00
2026-07-22 13:32:35 +08:00
2026-07-22 13:32:35 +08:00
2026-07-19 19:48:25 +08:00
2026-07-19 19:48:25 +08:00
2026-07-19 12:17:23 +08:00
2026-07-19 12:17:23 +08:00
2026-07-22 12:15:48 +08:00
2026-07-21 15:22:12 +08:00
2026-07-17 16:59:40 +08:00
2026-07-21 15:22:12 +08:00
2026-07-21 15:22:12 +08:00
2026-07-22 13:32:35 +08:00
2026-07-20 16:12:56 +08:00
2026-07-23 00:06:04 +08:00
2026-07-22 12:15:48 +08:00
2026-07-22 12:15:48 +08:00
2026-07-23 00:06:04 +08:00
2026-07-20 11:39:37 +08:00
2026-07-17 22:10:18 +08:00
2026-07-23 00:12:28 +08:00
2026-07-22 16:49:31 +08:00
2026-07-19 18:50:33 +08:00
2026-07-20 16:29:12 +08:00
2026-07-19 18:50:33 +08:00
2026-07-23 00:12:28 +08:00
2026-07-23 00:12:28 +08:00
2026-07-16 00:23:40 -07:00
2026-07-23 00:12:28 +08:00
2026-07-23 00:12:28 +08:00
2026-07-22 13:32:35 +08:00
2026-07-16 17:11:00 +08:00
2026-07-17 18:12:33 +08:00
2026-07-17 08:44:23 +08:00
2026-07-17 18:12:33 +08:00
2026-07-21 05:02:30 -07:00
2026-07-22 16:46:29 +08:00
2026-07-23 00:12:28 +08:00
2026-07-23 00:12:28 +08:00
2026-07-21 11:16:04 +08:00
2026-07-21 11:16:04 +08:00
2026-07-22 12:15:48 +08:00
2026-07-22 12:15:48 +08:00
2026-07-18 03:24:04 +08:00
2026-07-18 19:17:53 +08:00
2026-07-16 17:11:00 +08:00
2026-07-21 11:02:43 +08:00
2026-07-21 05:02:30 -07:00
2026-07-21 05:02:30 -07:00
2026-07-16 17:11:00 +08:00
2026-07-21 11:02:43 +08:00
2026-07-20 10:47:05 +08:00
2026-07-22 13:32:35 +08:00
2026-07-21 11:02:43 +08:00
2026-07-18 19:17:53 +08:00
2026-07-18 00:11:18 +08:00
2026-07-18 00:11:18 +08:00
2026-07-18 00:11:18 +08:00
2026-07-18 00:42:16 +08:00
2026-07-18 00:11:18 +08:00
2026-07-18 00:11:18 +08:00
2026-07-18 00:11:18 +08:00
2026-07-18 00:11:18 +08:00
2026-07-18 00:11:18 +08:00
2026-07-18 00:11:18 +08:00
2026-07-19 11:23:26 +08:00
2026-07-19 11:39:20 +08:00
2026-07-18 00:11:18 +08:00
2026-07-18 00:11:18 +08:00
2026-07-18 00:11:18 +08:00
2026-07-18 00:11:18 +08:00
2026-07-18 00:11:18 +08:00
2026-07-18 00:11:18 +08:00
2026-07-18 00:11:18 +08:00
2026-07-18 03:24:04 +08:00
2026-07-22 19:18:04 +08:00
2026-07-22 19:18:04 +08:00
2026-07-22 19:18:04 +08:00
2026-07-22 19:18:04 +08:00
2026-07-22 19:18:04 +08:00
2026-07-22 19:18:04 +08:00
2026-07-22 19:18:04 +08:00
2026-07-18 15:35:30 +08:00
2026-07-18 20:41:12 +08:00
2026-07-17 22:10:18 +08:00
2026-07-16 13:47:50 +08:00
2026-07-17 22:10:18 +08:00
2026-07-17 22:10:18 +08:00
2026-07-21 03:07:01 +08:00
2026-07-16 13:47:50 +08:00
2026-07-18 10:46:42 +08:00
2026-07-20 00:09:11 +08:00
2026-07-20 00:09:11 +08:00
2026-07-20 00:09:11 +08:00
2026-07-20 00:09:11 +08:00
2026-07-20 00:09:00 +08:00
2026-07-18 14:42:22 +08:00
2026-07-19 21:37:26 +08:00
2026-07-18 14:42:22 +08:00
2026-07-16 16:49:08 +08:00
2026-07-16 16:49:08 +08:00
2026-07-17 20:59:29 +08:00
2026-07-17 20:59:29 +08:00
2026-07-22 13:32:35 +08:00
2026-07-22 13:32:35 +08:00
2026-07-16 15:37:35 +08:00
2026-07-16 15:37:35 +08:00
2026-07-18 14:42:22 +08:00
2026-07-19 21:37:26 +08:00
2026-07-19 21:37:26 +08:00
2026-07-23 15:50:44 +08:00