Merge branch 'ji' of http://192.168.0.200/knowledge-base-bj/deerflow-server into ji
This commit is contained in:
commit
0aa55eb333
2 files changed
+44
-1
No files matched your search
@@ -31,6 +31,44 @@ export function formatDuration(ms: number): string {
|
|||||||
return `${mins}m ${secs}s`;
|
return `${mins}m ${secs}s`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 速度条颜色含义图例 —— 生成结束后常驻在速度条下方一行,向用户解释进度条
|
||||||
|
* 颜色代表的「模型生成延迟」状态。进度条本身仍是 5 档(极快/流畅/一般/偏慢/
|
||||||
|
* 缓慢)的连续配色;这里把它归并成用户视角的 3 类延迟 + 「无响应」来说明:
|
||||||
|
* 绿(#16a34a,极快/流畅) → 延迟正常
|
||||||
|
* 黄(#eab308,一般) → 延迟微长
|
||||||
|
* 红(#ef4444,偏慢/缓慢) → 延迟长,可能失败
|
||||||
|
* 灰(#9ca3af) → 无响应(无进度条/0 tok/s),任务失败,请重试
|
||||||
|
*/
|
||||||
|
const SPEED_LEGEND: { color: string; label: string }[] = [
|
||||||
|
{ color: "#16a34a", label: "延迟正常" },
|
||||||
|
{ color: "#eab308", label: "延迟微长" },
|
||||||
|
{ color: "#ef4444", label: "延迟长,可能失败" },
|
||||||
|
{ color: "#9ca3af", label: "无响应,任务失败,请重试" },
|
||||||
|
];
|
||||||
|
|
||||||
|
export function SpeedLegend({ className }: { className?: string }) {
|
||||||
|
return (
|
||||||
|
<span
|
||||||
|
className={cn(
|
||||||
|
"text-muted-foreground inline-flex flex-wrap items-center gap-x-2.5 gap-y-0.5",
|
||||||
|
className,
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
{SPEED_LEGEND.map((item) => (
|
||||||
|
<span className="inline-flex items-center gap-1" key={item.label}>
|
||||||
|
<span
|
||||||
|
aria-hidden
|
||||||
|
className="inline-block size-2 shrink-0 rounded-full"
|
||||||
|
style={{ backgroundColor: item.color }}
|
||||||
|
/>
|
||||||
|
{item.label}
|
||||||
|
</span>
|
||||||
|
))}
|
||||||
|
</span>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
export function SpeedPill({ metric }: { metric: MessageMetric }) {
|
export function SpeedPill({ metric }: { metric: MessageMetric }) {
|
||||||
const fill = Math.max(0, Math.min(1, metric.tokensPerSec / FULL_SCALE_TOKENS_PER_SEC));
|
const fill = Math.max(0, Math.min(1, metric.tokensPerSec / FULL_SCALE_TOKENS_PER_SEC));
|
||||||
const { color, label } = classifySpeed(metric.tokensPerSec);
|
const { color, label } = classifySpeed(metric.tokensPerSec);
|
||||||
@@ -132,6 +170,8 @@ export function MessageTokenUsage({
|
|||||||
{formatDuration(resolvedMetric.durationMs)}
|
{formatDuration(resolvedMetric.durationMs)}
|
||||||
</span>
|
</span>
|
||||||
)}
|
)}
|
||||||
|
{/* 生成结束(非流式中)后常驻一行颜色含义说明。 */}
|
||||||
|
{!resolvedMetric.isActive && <SpeedLegend className="basis-full" />}
|
||||||
</>
|
</>
|
||||||
) : null}
|
) : null}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+4
-1
@@ -50,7 +50,10 @@ class TaskButtonRow(Base):
|
|||||||
open_mode: Mapped[str | None] = mapped_column(String(16), default="blank")
|
open_mode: Mapped[str | None] = mapped_column(String(16), default="blank")
|
||||||
# ``url`` 跳转是否追加登录态(token 登录的上游 token + 登录用户名),供外链所在的外部系统
|
# ``url`` 跳转是否追加登录态(token 登录的上游 token + 登录用户名),供外链所在的外部系统
|
||||||
# 校验当前登录用户。仅 token 登录(前端存有 token1)时实际拼上;非 token 登录自动跳过。
|
# 校验当前登录用户。仅 token 登录(前端存有 token1)时实际拼上;非 token 登录自动跳过。
|
||||||
append_auth: Mapped[bool] = mapped_column(Boolean, default=False)
|
# ``server_default`` 必须显式声明:否则在已存在 ``task_buttons`` 表的旧库上,
|
||||||
|
# 启动期自动补列 ``_ensure_orm_columns_sync`` 会跳过「NOT NULL 且无 server_default」
|
||||||
|
# 的列(见 engine.py),导致该列永远补不上 → GET 查询报 Unknown column → 500。
|
||||||
|
append_auth: Mapped[bool] = mapped_column(Boolean, default=False, server_default="0")
|
||||||
# 追加 token / 用户名的查询参数名。可空,读时归一化为 ``token`` / ``username``。
|
# 追加 token / 用户名的查询参数名。可空,读时归一化为 ``token`` / ``username``。
|
||||||
auth_token_param: Mapped[str | None] = mapped_column(String(64), default="token")
|
auth_token_param: Mapped[str | None] = mapped_column(String(64), default="token")
|
||||||
auth_name_param: Mapped[str | None] = mapped_column(String(64), default="username")
|
auth_name_param: Mapped[str | None] = mapped_column(String(64), default="username")
|
||||||
|
|||||||
Reference in new issue
Block a user