feat: channel affinity (#2669)

* feat: channel affinity

* feat: channel affinity -> model setting

* fix: channel affinity

* feat: channel affinity op

* feat: channel_type setting

* feat: clean

* feat: cache supports both memory and Redis.

* feat: Optimise ui/ux

* feat: Optimise ui/ux

* feat: Optimise codex usage ui/ux

* feat: Optimise ui/ux

* feat: Optimise ui/ux

* feat: Optimise ui/ux

* feat: If the affinitized channel fails and a retry succeeds on another channel, update the affinity to the successful channel
This commit is contained in:
Seefs
2026-01-26 19:57:41 +08:00
committed by GitHub
parent 9ac94f036c
commit d9321b7da3
24 changed files with 2542 additions and 125 deletions

View File

@@ -818,6 +818,34 @@ html.dark .with-pastel-balls::before {
padding: 10px !important;
}
/* ==================== 使用日志: channel affinity tag ==================== */
.semi-tag.channel-affinity-tag {
border: 1px solid rgba(var(--semi-cyan-5), 0.35);
background-color: rgba(var(--semi-cyan-5), 0.15);
color: rgba(var(--semi-cyan-9), 1);
cursor: help;
transition:
background-color 120ms ease,
border-color 120ms ease,
box-shadow 120ms ease;
}
.semi-tag.channel-affinity-tag:hover {
background-color: rgba(var(--semi-cyan-5), 0.22);
border-color: rgba(var(--semi-cyan-5), 0.6);
box-shadow: 0 0 0 2px rgba(var(--semi-cyan-5), 0.18);
}
.semi-tag.channel-affinity-tag:active {
background-color: rgba(var(--semi-cyan-5), 0.28);
}
.semi-tag.channel-affinity-tag .channel-affinity-tag-content {
display: inline-flex;
align-items: center;
gap: 0.25rem;
}
/* ==================== 自定义圆角样式 ==================== */
.semi-radio,
.semi-tagInput,