@raingor/pi-web-switch 0.4.3 → 0.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,151 +0,0 @@
1
- import type { UsageRecord } from "@/types";
2
-
3
- // Generate 30 days of mock usage data
4
- function generateMockUsage(): UsageRecord[] {
5
- const records: UsageRecord[] = [];
6
- const today = new Date();
7
- const modelProviderPairs = [
8
- { providerId: "opencode-go", modelId: "deepseek-v4-flash", baseTokens: 1_200_000, baseCost: 0.36 },
9
- { providerId: "opencode-go", modelId: "deepseek-v4-pro", baseTokens: 400_000, baseCost: 0.80 },
10
- { providerId: "opencode-go", modelId: "glm-5.1", baseTokens: 250_000, baseCost: 0.125 },
11
- { providerId: "opencode-go", modelId: "qwen3.7-max", baseTokens: 180_000, baseCost: 0.27 },
12
- { providerId: "opencode-go", modelId: "mimo-v2.5", baseTokens: 300_000, baseCost: 0.36 },
13
- { providerId: "opencode", modelId: "deepseek-v4-flash-free", baseTokens: 800_000, baseCost: 0 },
14
- { providerId: "opencode", modelId: "deepseek-v4-flash", baseTokens: 200_000, baseCost: 0.06 },
15
- { providerId: "anthropic", modelId: "claude-sonnet-4", baseTokens: 150_000, baseCost: 0.45 },
16
- { providerId: "anthropic", modelId: "claude-haiku-3-5", baseTokens: 90_000, baseCost: 0.036 },
17
- { providerId: "openai", modelId: "gpt-4o", baseTokens: 80_000, baseCost: 0.20 },
18
- { providerId: "openai", modelId: "gpt-4o-mini", baseTokens: 120_000, baseCost: 0.018 },
19
- { providerId: "deepseek", modelId: "deepseek-chat", baseTokens: 60_000, baseCost: 0.0162 },
20
- { providerId: "google", modelId: "gemini-2.5-flash", baseTokens: 40_000, baseCost: 0.006 },
21
- ];
22
-
23
- for (let day = 29; day >= 0; day--) {
24
- const date = new Date(today);
25
- date.setDate(date.getDate() - day);
26
- const dateStr = date.toISOString().split("T")[0]!;
27
-
28
- for (const pair of modelProviderPairs) {
29
- // Add some daily variance (±40%)
30
- const variance = 0.6 + Math.random() * 0.8;
31
- const dayOfWeek = date.getDay();
32
- const weekendFactor = dayOfWeek === 0 || dayOfWeek === 6 ? 0.5 : 1.0;
33
- const trendFactor = 1 + (29 - day) * 0.01; // slight upward trend
34
-
35
- const inputRatio = 0.7 + Math.random() * 0.1;
36
- const baseTokens = pair.baseTokens * variance * weekendFactor * trendFactor;
37
- const inputTokens = Math.round(baseTokens * inputRatio);
38
- const outputTokens = Math.round(baseTokens * (1 - inputRatio));
39
- const cacheReadTokens = Math.round(inputTokens * 0.3 * Math.random());
40
- const cacheWriteTokens = Math.round(inputTokens * 0.1 * Math.random());
41
- const requests = Math.round(20 + Math.random() * 60);
42
-
43
- records.push({
44
- date: dateStr!,
45
- providerId: pair.providerId,
46
- modelId: pair.modelId,
47
- inputTokens,
48
- outputTokens,
49
- cacheReadTokens,
50
- cacheWriteTokens,
51
- requests,
52
- cost: pair.baseCost * variance * weekendFactor * trendFactor,
53
- });
54
- }
55
- }
56
-
57
- return records;
58
- }
59
-
60
- export const MOCK_USAGE_DATA = generateMockUsage();
61
-
62
- // Aggregate helpers
63
-
64
- export function getDailyAggregates(): {
65
- date: string;
66
- totalTokens: number;
67
- totalCost: number;
68
- totalRequests: number;
69
- inputTokens: number;
70
- outputTokens: number;
71
- }[] {
72
- const daily = new Map<string, {
73
- totalTokens: number; totalCost: number; totalRequests: number;
74
- inputTokens: number; outputTokens: number;
75
- }>();
76
-
77
- for (const r of MOCK_USAGE_DATA) {
78
- const d = daily.get(r.date) ?? {
79
- totalTokens: 0, totalCost: 0, totalRequests: 0,
80
- inputTokens: 0, outputTokens: 0,
81
- };
82
- d.totalTokens += r.inputTokens + r.outputTokens + r.cacheReadTokens + r.cacheWriteTokens;
83
- d.totalCost += r.cost;
84
- d.totalRequests += r.requests;
85
- d.inputTokens += r.inputTokens;
86
- d.outputTokens += r.outputTokens;
87
- daily.set(r.date, d);
88
- }
89
-
90
- return Array.from(daily.entries())
91
- .map(([date, agg]) => ({ date, ...agg }))
92
- .sort((a, b) => a.date.localeCompare(b.date));
93
- }
94
-
95
- export function getProviderSummaries() {
96
- const sums = new Map<string, {
97
- totalTokens: number; totalCost: number; totalRequests: number;
98
- }>();
99
-
100
- for (const r of MOCK_USAGE_DATA) {
101
- const s = sums.get(r.providerId) ?? { totalTokens: 0, totalCost: 0, totalRequests: 0 };
102
- s.totalTokens += r.inputTokens + r.outputTokens + r.cacheReadTokens + r.cacheWriteTokens;
103
- s.totalCost += r.cost;
104
- s.totalRequests += r.requests;
105
- sums.set(r.providerId, s);
106
- }
107
-
108
- return Array.from(sums.entries()).map(([providerId, s]) => ({ providerId, ...s }));
109
- }
110
-
111
- export function getModelSummaries() {
112
- const sums = new Map<string, {
113
- providerId: string; totalTokens: number; totalCost: number; totalRequests: number; count: number;
114
- }>();
115
-
116
- for (const r of MOCK_USAGE_DATA) {
117
- const key = `${r.providerId}/${r.modelId}`;
118
- const s = sums.get(key) ?? { providerId: r.providerId, totalTokens: 0, totalCost: 0, totalRequests: 0, count: 0 };
119
- s.totalTokens += r.inputTokens + r.outputTokens + r.cacheReadTokens + r.cacheWriteTokens;
120
- s.totalCost += r.cost;
121
- s.totalRequests += r.requests;
122
- s.count++;
123
- sums.set(key, s);
124
- }
125
-
126
- return Array.from(sums.entries()).map(([key, s]) => {
127
- const [providerId, modelId] = key.split("/");
128
- return {
129
- modelId: modelId!,
130
- providerId: s.providerId,
131
- totalTokens: s.totalTokens,
132
- totalCost: s.totalCost,
133
- totalRequests: s.totalRequests,
134
- avgTokensPerRequest: Math.round(s.totalTokens / s.totalRequests),
135
- };
136
- });
137
- }
138
-
139
- export function getTotals() {
140
- let totalTokens = 0;
141
- let totalCost = 0;
142
- let totalRequests = 0;
143
-
144
- for (const r of MOCK_USAGE_DATA) {
145
- totalTokens += r.inputTokens + r.outputTokens + r.cacheReadTokens + r.cacheWriteTokens;
146
- totalCost += r.cost;
147
- totalRequests += r.requests;
148
- }
149
-
150
- return { totalTokens, totalCost, totalRequests };
151
- }