- {c.input_messages.map((m, j) => (
+ {(c.input_messages ?? []).map((m, j) => (
{m.role}
{pretty(m.content)}
diff --git a/src/lib/types.ts b/src/lib/types.ts
index e853258..cfd158d 100644
--- a/src/lib/types.ts
+++ b/src/lib/types.ts
@@ -354,6 +354,7 @@ export interface ComparisonRecordListItem {
retry_count: number | null;
input_tokens: number | null;
output_tokens: number | null;
+ llm_cost_yuan: number | null; // 后端按「当时价」冻结的实际成本(元);旧记录 null → 「成本」列回退估算
device_model: string | null;
rom_vendor: string | null;
rom_name: string | null;
@@ -396,6 +397,8 @@ export interface ComparisonRecordDetail extends ComparisonRecordListItem {
latitude: number | null;
llm_calls: LlmCall[] | null;
raw_payload: Record
| null;
+ // 算成本所用单价快照 {mode, prices:{model:{...}}}(llm_cost_yuan 继承自列表项)。
+ llm_price_snapshot: Record | null;
}
export interface AdRevenueImpression {