Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/app/cypress/component/scatter-graph.cy.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -1890,7 +1890,7 @@ describe('ChartDisplay responsive status notes', () => {
cy.get('[data-testid="option-help-content-agentic-optimizations"]').should(
'contain.text',
locale === 'zh'
? '每项配置可能使用推测解码等推理优化。将鼠标悬停在数据点上可查看其具体设置。'
? '每项配置可能使用投机解码等推理优化。将鼠标悬停在数据点上可查看其具体设置。'
: 'Each configuration may use inference optimizations such as speculative decoding. Hover over a point to see its exact settings.',
);
});
Expand Down
2 changes: 1 addition & 1 deletion packages/app/cypress/e2e/fleet-lifecycle.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ const showChart = () => cy.get('[data-testid="calculator-lifecycle-chart-view-bt

function assertFleetControlLabels(locale: 'en' | 'zh' = 'en') {
for (const [id, label] of [
['fleet-cost', locale === 'zh' ? '成本供应商' : 'Cost Provider'],
['fleet-cost', locale === 'zh' ? '计价方式' : 'Cost Provider'],
['fleet-cost-type', locale === 'zh' ? 'Token 类型' : 'Token Type'],
]) {
cy.get(`label[for="${id}"]`).should('have.text', label).click();
Expand Down
2 changes: 1 addition & 1 deletion packages/app/src/app/zh/chips/[slug]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ export function generateStaticParams() {
}

function vsDescriptionZh(page: ChipVsPage): string {
return `${page.a.title} 对比 ${page.b.title}:显存、内存带宽、FP8/FP4 算力、TDP 与云端价格并列呈现,并附相同工作负载上持续测量的 LLM 推理基准测试。${SUPPORTERS_LINE_ZH}`;
return `${page.a.title} 对比 ${page.b.title}:显存容量、显存带宽、FP8/FP4 算力、TDP 与云端价格并列呈现,并附相同工作负载上持续测量的 LLM 推理基准测试。${SUPPORTERS_LINE_ZH}`;
}

function vsKeywordsZh(page: ChipVsPage): string[] {
Expand Down
4 changes: 2 additions & 2 deletions packages/app/src/app/zh/rankings/[slug]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ function buildFaqZh(
},
{
question: `“最快”是如何衡量的?`,
answer: `所有平台都在相同的交互速度档位(每用户每秒 ${data.tier} token)和${workload}下读取,再按实测单 GPU 吞吐排名。推导方式与 InferenceX 总览排行榜完全一致,因此本页排名不会与仪表盘出现分歧。`,
answer: `所有平台都在相同的交互速度档位(每用户每秒 ${data.tier} token)和${workload}下取值,再按实测单 GPU 吞吐排名。推导方式与 InferenceX 总览排行榜完全一致,因此本页排名不会与仪表盘出现分歧。`,
},
]
: [
Expand Down Expand Up @@ -185,7 +185,7 @@ export default async function ZhRankingPage({ params }: Props) {
methodologyHeading: '测试方法',
methodologyBody: [
`本页所有数字都来自实测,而非纸面规格估算。InferenceX 集群使用社区推理引擎在真实硬件上部署 ${entry.model.seoName},通过扫描并发数绘制每个平台的吞吐与交互速度前沿曲线。`,
`各平台均在同一工作点(每用户每秒 ${data.tier} token)读取数据,确保在相同交互速度下进行比较。单用户速度低到无法正常使用时,即使吞吐量很高,也不能据此获得更高排名。每百万 token(输入加输出)的成本由实测吞吐量和 SemiAnalysis AI Cloud TCO 模型提供的 $/GPU/hr 费率换算得出。`,
`各平台均在同一工作点(每用户每秒 ${data.tier} token)取值,确保在相同交互速度下进行比较。单用户速度低到无法正常使用时,即使吞吐量很高,也不能据此获得更高排名。每百万 token(输入加输出)的成本由实测吞吐量和 SemiAnalysis AI Cloud TCO 模型提供的 $/GPU/hr 费率换算得出。`,
`推导逻辑与 InferenceX 总览排行榜共用,基准测试持续重跑,新引擎版本和新配置落地后排行会自动更新。`,
],
faqHeading: '常见问题',
Expand Down
4 changes: 2 additions & 2 deletions packages/app/src/components/about/agentx-faq.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ export AIPERF_SERVICE_PROFILE_CONFIGURE_TIMEOUT=1800`,
bullets: [
'开启 streaming,以便测量首 token 延迟(TTFT)和 token 间延迟(ITL)。',
'ignore_eos:true 要求服务器生成指定长度的输出,而不是提前停止。',
'保留原始轮次间延迟;仅将整个系统的全局空闲时间限制在 10 秒以内。',
'保留原始轮次间延迟;仅将全局空闲时间限制在 10 秒以内。',
'first_turn_prefix cache busting 为每次回放的会话加入唯一首轮标记,避免虚假的跨会话 cache hit,同时保留会话内部的 cache 复用。',
'有效测试至少运行 900 秒,默认运行 1,800 秒。',
'正式测量前通过 warmup 建立深层 prefix。',
Expand Down Expand Up @@ -228,7 +228,7 @@ export AIPERF_SERVICE_PROFILE_CONFIGURE_TIMEOUT=1800`,
{
title: '如何确认负载生成器(load generator)不是瓶颈?',
paragraphs: [
'AIPerf 会将工作分配到多个 worker 进程,并每两秒上报 worker 健康状态。应将高 CPU 警告视为客户端饱和信号;在信任结果前,需要增加客户端 CPU 核心数或负载生成器主机。',
'AIPerf 会将工作分配到多个 worker 进程,并每两秒上报 worker 健康状态。应将高 CPU 警告视为客户端饱和信号;在信任结果前,需要增加客户端 CPU 核心数,或再加一台负载生成器主机。',
'--show-trace-timing 可以区分等待连接池中空闲连接的时间与等待服务器返回首字节的时间。worker 的 CPU 使用率正常且连接池阻塞很少,才有充分依据认为瓶颈位于服务器端。',
],
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ const STRINGS = {
reachDescription: (days: number) =>
`滚动 ${days} 天统计。受影响 session 至少有一次 HTTP 请求失败;重复出错 session 有两次及以上。错误包含 HTTP 4xx/5xx 及记录的代理失败。`,
requestErrorRate: '请求错误率',
sessionsAffected: '受影响 Session',
sessionsAffected: '受影响 session',
repeatSessionShare: '重复出错占比',
topTenConcentration: 'Top 10 集中度',
requestsDetail: (errors: string, total: string) => `${errors} / ${total} 个请求`,
Expand All @@ -53,7 +53,7 @@ const STRINGS = {
colRequests: '请求数',
colErrors: '错误数',
colReqRate: '请求错误率',
colSessionsHit: '受影响 Session',
colSessionsHit: '受影响 session',
colReach: '覆盖率',
colErrorsPerHit: '错误 / 受影响',
colRepeatShare: '重复占比',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ const STRINGS = {
exportCsv: '导出 CSV',
exportJson: '导出 JSON',
windowDesc: (start: string, end: string, asOf: string, days: number) =>
`首次观测 ${start}–${end}(不含末日),跟踪至 ${asOf}(UTC,不含末日)。最短跟踪期:${days} 天。`,
`首次观测 ${start}–${end}(不含结束日),跟踪至 ${asOf}(UTC,不含结束日)。最短跟踪期:${days} 天。`,
eligibleDesc: (sessions: string, calls: string, traceVersion: number | null) =>
`${sessions} 个符合条件的 session · ${calls} 次调用。含短 session 及辅助/分类调用。全部模型;trace version ${traceVersion ?? 'all'}。`,
lookbackDesc: (days: number) =>
Expand All @@ -116,7 +116,7 @@ const STRINGS = {
coverageCohort: '覆盖群组',
cutoffsError: '请输入 1 到 28 的逗号分隔整数天数。',
noEligible:
'当前 trace version 范围内没有足够跟踪期的 session。请尝试选择"全部版本",或等待更多历史数据积累后再查看。',
'当前 trace version 范围内没有足够跟踪期的 session。请尝试选择“全部版本”,或等待更多历史数据积累后再查看。',
chartCoverageTitle: '对话时长与调用量',
chartCoverageSubtitle: 'Session 计数与调用计数的分母不同。',
legendSessionSpan: 'Session 跨度(窗口内)',
Expand All @@ -136,7 +136,7 @@ const STRINGS = {
callsPerActiveCredentialDay: '调用 / 活跃凭证日',
callsPerCredentialCalendarDay: '调用 / 凭证 / 日历日',
activityDesc: (start: string, asOf: string, credDays: string, median: string, p90: string) =>
`${start}–${asOf}(不含末日):${credDays} 活跃凭证日。每活跃凭证日中位调用 ${median} 次;p90 ${p90} 次。凭证可轮换或共享,此处并非已验证的用户数。`,
`${start}–${asOf}(不含结束日):${credDays} 活跃凭证日。每活跃凭证日中位调用 ${median} 次;p90 ${p90} 次。凭证可轮换或共享,此处并非已验证的用户数。`,
dataTableSummary: '数据表与定义',
thCohort: '群组',
thDays: '天数',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ const STRINGS = {
zh: {
stamp: '冻结快照',
dataEnds: '数据截至',
title: `冻结的只读快照,不再有新数据写入;所有”最后 24 小时””最后一天””最后 30 天”窗口均截止于 ${LAST_DAY_LABEL} ${SNAPSHOT_END_CLOCK}。实验性仪表板:除已发布的 HuggingFace 数据集外,不保证数据质量。`,
title: `冻结的只读快照,不再有新数据写入;所有“最后 24 小时”、“最后一天”、“最后 30 天”窗口均截止于 ${LAST_DAY_LABEL} ${SNAPSHOT_END_CLOCK}。实验性仪表板:除已发布的 HuggingFace 数据集外,不保证数据质量。`,
},
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ const STRINGS = {
title: '按操作系统分组的工具结果错误率',
comparableResults: (n: string) => `(${n} 个可比较结果)`,
description:
'错误率使用 Anthropic 匹配结果计算,因为该协议携带显式错误信号。OpenAI 和 Codex 仅参与总调用量和流量占比统计,不被默认计为成功。OS 指请求发送端,不一定是工具执行主机。Coverage 为 matched/comparable 调用比;Signal Share 为 comparable/全部 matched 结果比。',
'错误率使用 Anthropic 匹配结果计算,因为该协议携带显式错误信号。OpenAI 和 Codex 仅参与总调用量和流量占比统计,不被默认计为成功。OS 指请求发送端,不一定是工具执行主机。覆盖率为 matched/comparable 调用比;信号占比为 comparable/全部 matched 结果比。',
caption:
'按请求发送端操作系统分组的 Anthropic 工具结果错误数及百分比,附全 provider 流量构成。',
emptyState: '暂无按操作系统分组的结果数据',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ const STRINGS = {
cacheByClient: '各客户端缓存',
cacheEfficiencyPerDev: '各开发者缓存效率',
cacheEfficiencyPerDevDetail: '最后 90 天 · cache_read / (cache_read + input)',
loading: '加载中...',
loading: '加载中…',
lastNDays: (n: number) => `最后 ${n} 天`,
nModels: (n: number) => `${n} 个模型`,
nClients: (n: number) => `${n} 个客户端`,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ const STRINGS = {
cacheWrite: '缓存写入',
output: '输出',
weeklySessionsByHarness: '每周会话数(按 Harness)',
noSessionsInSnapshot: (v: number) => `当前快照中无超过 20 次请求且 trace v${v} 的会话`,
noSessionsInSnapshot: (v: number) => `当前快照中没有请求数超过 20 次且 trace 为 v${v} 的会话`,
weekOf: (label: string) => `${label} 当周`,
estimatedCostPerHour: '每小时预估成本',
hourlyCost: '每小时成本',
Expand All @@ -189,11 +189,11 @@ const STRINGS = {
totalRequests: '总请求数',
bucketMinutes: (min: number) => `${min} 分钟分桶`,
bucketHours: (h: number) => `${h} 小时分桶`,
wallClockTitle: '时钟时间:Tool/CPU vs LLM/GPU vs 空闲',
wallClockTitle: '墙钟时间:Tool/CPU vs LLM/GPU vs 空闲',
wallClockFinal: (days: number) => `(最后 ${days} 天,UTC)`,
wallClockComposition: '时钟时间构成',
shareOfWallClock: '时钟时间占比',
wallClockHoursYAxis: '时钟时间(小时)',
wallClockComposition: '墙钟时间构成',
shareOfWallClock: '墙钟时间占比',
wallClockHoursYAxis: '墙钟时间(小时)',
llmGpuLegend: 'LLM / GPU(E2E 延迟)',
toolCpuLegend: 'Tool / CPU(客户端)',
userIdleLegend: '用户空闲(对话间隔)',
Expand All @@ -203,7 +203,7 @@ const STRINGS = {
traffic: '流量',
hourlyActivity: '每小时活跃度',
weeklySessions: '每周会话',
wallClock: '时钟时间',
wallClock: '墙钟时间',
islTotalDist: 'ISL Total 分布',
islTotalAxis: 'ISL 总 Token(Cache Read + Cache Write + Input)',
cacheReadDist: 'Cache Read 分布',
Expand Down Expand Up @@ -234,7 +234,7 @@ const STRINGS = {
tokensPerChunkAxis: '输出 Token / SSE Event(tok/chunk)',
prefillShareTitle: 'Prefill 占 E2E 延迟比例(TTFT / E2E)',
prefillShareAxis: 'TTFT / E2E(prefill 占延迟比例)',
interactivityDist: 'Interactivity 分布',
interactivityDist: '交互性分布',
interactivityAxis: 'Interactivity(output tok/s/user)',
sessionDurationTitle: (v: number) => `会话时长(> 20 次请求,trace v${v})`,
sessionDurationAxis: '会话时长(小时)',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -206,9 +206,9 @@ const STRINGS = {
ttftDistLabel: 'TTFT 分布',
streamingSamples: (n: string) => `${n} 个流式样本`,
tpotDistLabel: 'TPOT 分布',
prefillDistLabel: 'Prefill Speed 分布',
prefillDistLabel: 'Prefill 速度分布',
prefillDistDetail: (n: string) => `${n} 个流式样本 · input tok/s/query`,
interactDistLabel: 'Interactivity 分布',
interactDistLabel: '交互性分布',
interactDistDetail: (n: string) => `${n} 个流式样本 · output tok/s/user`,
hourlyLabel: '端到端延迟趋势',
hourlyDetail: '最后 48 小时,按小时',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,13 +100,13 @@ const STRINGS = {
cacheHitRateTooltip: 'cacheRead / (cacheRead + input) — 由缓存提供的输入 token 百分比',
turnsPerSession: '每会话轮数',
gapSeconds: '间隔(秒)',
ttftP90: 'TTFT (p90)',
ttftP90: 'TTFT(p90)',
ttftTooltip: '首 token 延迟(流式请求)',
tpotP90: 'TPOT (p90)',
tpotP90: 'TPOT(p90)',
tpotTooltip: '每输出 token 耗时(流式请求)',
prefillSpeedP50: 'Prefill 速度 (p50)',
prefillSpeedP50: 'Prefill 速度(p50)',
prefillSpeedTooltip: 'Prefill 速度:(cacheRead + cacheWrite) / TTFT(带缓存的流式请求)',
interactivityP90: '交互性 (p90)',
interactivityP90: '交互性(p90)',
interactivityTooltip: '每客户端每秒 token 数 (1000 / TPOT)',
tokenDetail: (inp: string, cr: string, cw: string, out: string) =>
`${inp} 输入 · ${cr} 缓存读 · ${cw} 缓存写 · ${out} 输出`,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ const STRINGS = {
totalRequests: '总请求数',
errorRate: '错误率',
routes: '路由',
errorsFinal24h: '错误(最后 24h)',
errorsFinal24h: '错误(最后 24 小时)',
final7days: '最后 7 天',
errors: (n: string) => `${n} 个错误`,
uniqueEndpoints: '独立端点',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ const STRINGS = {
zh: {
sessions: '会话列表',
total: '总计',
searchPlaceholder: '搜索会话...',
searchPlaceholder: '搜索会话…',
minReqs: { '20': '> 20 请求', '100': '> 100 请求', '0': '全部' } as Record<string, string>,
allVersions: '所有版本',
allHarnesses: '全部 harness',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -455,7 +455,7 @@ const STRINGS = {
repeatShareDetail: '连续重复调用同一工具的比例',
longestStreak: '最长连续调用',
longestStreakDetail: '单会话中同一工具的最大连续调用次数',
sessionsMined: '已分析会话数',
sessionsMined: '已挖掘会话数',
sessionsMinedDetail: (calls: string, steps: string) =>
`${calls} 次工具调用 → ${steps} 步(合并后)`,
recurringMotifs: '常见模式',
Expand All @@ -475,22 +475,22 @@ const STRINGS = {
'交替 A→B→A→B 的 2+ 完整周期片段——编辑/验证和读取/调整反馈循环。Cycles = 每段 A→B 往返次数。',
noRecurringLoops: '未发现循环模式',
toolWallTime: '工具耗时',
turnaroundByTool: '按工具分组的响应时间',
turnaroundByTool: '按工具分组的周转时间',
clientSideWallTime: '(客户端耗时)',
turnaroundByToolDescription: (single: string, total: string, pct: string, batchLabel: string) =>
`从 tool_use 响应结束到同一会话 lane 的下一条 tool_result 请求之间的时间——包含工具执行和 harness 开销。仅统计单工具 turn(${single} / ${total} 个 tool turns,${pct}%);并行 tool call 的 turn 归入${batchLabel};超过 30 分钟的间隔视为空闲已排除。`,
turnaroundDistribution: '响应时间分布',
turnaroundDistribution: '周转时间分布',
colSamples: '样本数',
colMean: '均值',
turnaroundShapeByOs: '按操作系统的响应时间分布',
turnaroundShapeByOs: '按操作系统的周转时间分布',
splitByArch: '按架构拆分',
turnaroundShapeDescription:
'按对数间隔 bin 统计的样本占比,各系列独立归一化。会话的 OS/arch 来自客户端元数据(SDK headers,或 Codex user-agent)。虚线为中位数;样本不足 200 的平台已隐藏。',
'按对数间隔 bin 统计的样本占比,各系列独立归一化。会话的 OS/arch 来自客户端元数据(SDK headers;无 headers 时使用 Codex user-agent)。虚线为中位数;样本不足 200 的平台已隐藏。',
agent: 'Agent',
tool: '工具',
turnaroundAxisLabel: '响应时间(对数坐标)',
turnaroundAxisLabel: '周转时间(对数坐标)',
medianTurnaroundByOs: (splitArch: boolean) =>
`按${splitArch ? '平台' : '操作系统'}的中位响应时间`,
`按${splitArch ? '平台' : '操作系统'}的中位周转时间`,
medianTurnaroundDescription: (splitArch: boolean) =>
`p50 及下方 p90,按工具和${splitArch ? 'OS/arch' : 'OS'}分组。与图表使用相同的客户端耗时样本——差异来自 OS + 机器 + harness 开销,而非模型延迟。`,
bashBreakdown: 'Bash 分类统计',
Expand Down Expand Up @@ -522,15 +522,15 @@ const STRINGS = {
explicitToolErrorRate: '显式工具错误率',
errorRateDetail: (errors: string, matched: string) =>
`${errors} 个错误 / ${matched} 个 Anthropic 匹配结果`,
verifiedEdited: '已验证已编辑',
verifiedEdited: '编辑后已验证',
verifiedEditedDetail: (verified: string, edited: string) =>
`${verified} / ${edited} 个已编辑会话`,
finalVerifiedPass: '最终验证通过',
finalVerifiedPassDetail: (n: string) => `${n} 个已编辑会话`,
uniqueToolTypes: '工具类型数',
sessionsAnalyzed: '已分析会话数',
avgToolsPerSession: '平均每会话工具数',
recoveredFailures: '已恢复失败',
recoveredFailures: '失败后恢复',
recoveredFailuresDetail: (recovered: string, total: string) =>
`${recovered} 个已恢复 / ${total} 个含最终失败信号的会话`,
distribution: '分布',
Expand Down
2 changes: 1 addition & 1 deletion packages/app/src/components/ai-chart/example-prompts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ export const EXAMPLE_PROMPTS = {
'用条形图对比 DeepSeek R1 在 H100、B200 和 GB200 上每百万 token 的 hyperscaler 成本',
'对比 Kimi K2.5 与 DeepSeek R1 在 8k/1k 下的单芯片吞吐量',
'DeepSeek R1 在哪种芯片上的 GSM8K 准确率最高?',
'对比各类芯片的可靠性和运行成功率',
'对比各类芯片的可靠性(运行成功率)',
'绘制 DeepSeek R1 在 8k/1k 下所有芯片配置的散点图,纵轴为单芯片吞吐量',
],
} as const;
Loading
Loading