Skip to content

Commit 3a3d318

Browse files
authored
Merge pull request #18 from github/ui/model-metrics-and-nav
Add model AIC-per-request chart and refine nav layout
2 parents b01a3d6 + f1747cd commit 3a3d318

3 files changed

Lines changed: 79 additions & 9 deletions

File tree

src/App.css

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -997,6 +997,24 @@ td.cost-centers-view__num {
997997
outline-offset: 2px;
998998
}
999999

1000+
.per-model__chartGroup {
1001+
display: flex;
1002+
flex-direction: column;
1003+
gap: 10px;
1004+
}
1005+
1006+
.per-model__chartNote {
1007+
margin: 0;
1008+
font-size: 16px;
1009+
font-weight: 400;
1010+
text-align: center;
1011+
color: #1f2328;
1012+
}
1013+
1014+
.per-model__chartNote strong {
1015+
font-weight: 700;
1016+
}
1017+
10001018
.products-view {
10011019
display: flex;
10021020
flex-direction: column;
@@ -1785,6 +1803,12 @@ td.cost-centers-view__num {
17851803

17861804
.sidebar {
17871805
width: 48px;
1806+
padding-left: 4px;
1807+
}
1808+
1809+
.sidebar__nav {
1810+
border: none;
1811+
padding: 2px;
17881812
}
17891813

17901814
.sidebar__label {
@@ -1793,7 +1817,7 @@ td.cost-centers-view__num {
17931817

17941818
.sidebar__item {
17951819
justify-content: center;
1796-
padding: 10px;
1820+
padding: 8px;
17971821
}
17981822
}
17991823

@@ -1808,9 +1832,12 @@ td.cost-centers-view__num {
18081832
.sidebar {
18091833
width: var(--sidebar-width);
18101834
flex-shrink: 0;
1811-
background: #ffffff;
1812-
border-right: 1px solid #d1d9e0;
1813-
padding: 12px 0;
1835+
padding: 16px 0 16px 16px;
1836+
position: sticky;
1837+
top: 0;
1838+
align-self: flex-start;
1839+
max-height: 100vh;
1840+
overflow-y: auto;
18141841
}
18151842

18161843
@media (min-width: 1440px) {
@@ -1821,6 +1848,10 @@ td.cost-centers-view__num {
18211848
}
18221849

18231850
.sidebar__nav {
1851+
background: #ffffff;
1852+
border: 1px solid #d1d9e0;
1853+
border-radius: 8px;
1854+
padding: 6px;
18241855
display: flex;
18251856
flex-direction: column;
18261857
gap: 2px;
@@ -1831,8 +1862,9 @@ td.cost-centers-view__num {
18311862
align-items: center;
18321863
gap: 10px;
18331864
width: 100%;
1834-
padding: 10px 16px;
1865+
padding: 10px 12px;
18351866
border: none;
1867+
border-radius: 6px;
18361868
background: transparent;
18371869
color: #636c76;
18381870
font-size: 13px;

src/views/ModelsView.tsx

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { useState, useMemo } from 'react'
22
import type { ModelUsageResult, ModelDailyUsageData } from '../pipeline/aggregators/modelUsageAggregator'
3-
import { DualAxisLineChart } from '../components'
3+
import { DualAxisLineChart, MultiSeriesStackedBarChart } from '../components'
44
import { fillDataForRange } from '../utils/fillDataForRange'
55
import { formatAiu, formatUsd } from '../utils/format'
66

@@ -24,6 +24,14 @@ type ModelsViewProps = {
2424
rangeEnd: string | null
2525
}
2626

27+
function formatAverageAicPerRequest(value: number): string {
28+
return value.toLocaleString(undefined, { minimumFractionDigits: 0, maximumFractionDigits: 3 })
29+
}
30+
31+
function roundAverageAicPerRequest(value: number): number {
32+
return Number(value.toFixed(3))
33+
}
34+
2735
export function ModelsView({ modelUsage, aicDiscountRate, rangeStart, rangeEnd }: ModelsViewProps) {
2836
const [selectedModel, setSelectedModel] = useState<string>(modelUsage.models[0] ?? '')
2937

@@ -41,6 +49,19 @@ export function ModelsView({ modelUsage, aicDiscountRate, rangeStart, rangeEnd }
4149
const selectedModelAicNetAmount = selectedModelTotals
4250
? Math.max(selectedModelTotals.aiuGrossAmount - selectedModelAicDiscount, 0)
4351
: 0
52+
const dailyAverageAicPerRequest = useMemo(
53+
() => filledPerModelDailyData.map((day) => ({
54+
date: day.date,
55+
averageAicPerRequest: day.requests > 0 ? roundAverageAicPerRequest(day.aiuQuantity / day.requests) : 0,
56+
})),
57+
[filledPerModelDailyData],
58+
)
59+
const overallAverageAicPerRequest = selectedModelTotals && selectedModelTotals.requests > 0
60+
? selectedModelTotals.aiuQuantity / selectedModelTotals.requests
61+
: 0
62+
const overallAverageAicGrossPerRequest = selectedModelTotals && selectedModelTotals.requests > 0
63+
? selectedModelTotals.aiuGrossAmount / selectedModelTotals.requests
64+
: 0
4465

4566
const periodLabel = rangeStart
4667
? new Date(rangeStart + 'T00:00:00').toLocaleString('en-US', { month: 'long', year: 'numeric' })
@@ -132,6 +153,25 @@ export function ModelsView({ modelUsage, aicDiscountRate, rangeStart, rangeEnd }
132153

133154
{selectedModel && filledPerModelDailyData.length > 0 && (
134155
<div className="per-model__charts charts-grid">
156+
<div className="per-model__chartGroup">
157+
<MultiSeriesStackedBarChart
158+
title={`Daily average AIC per Request (${selectedModel})`}
159+
labels={dailyAverageAicPerRequest.map((day) => day.date)}
160+
series={[
161+
{
162+
label: 'Average daily AICs per request',
163+
color: '#14b8a6',
164+
data: dailyAverageAicPerRequest.map((day) => day.averageAicPerRequest),
165+
},
166+
]}
167+
height={320}
168+
/>
169+
<p className="per-model__chartNote">
170+
Average AICs per request for <strong>{selectedModel}</strong> in the current report period:{' '}
171+
<strong>{formatAverageAicPerRequest(overallAverageAicPerRequest)}</strong>, average gross per request{' '}
172+
<strong>{formatUsd(overallAverageAicGrossPerRequest)}</strong>
173+
</p>
174+
</div>
135175
<DualAxisLineChart
136176
title={`Daily Requests & AI Credits (${selectedModel})`}
137177
labels={filledPerModelDailyData.map((day) => day.date)}

src/views/ProductsView.tsx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,7 @@ export function ProductsView({ data }: ProductsViewProps) {
113113
</div>
114114
</div>
115115

116-
<div className="products-view__card card">
117-
<div className="products-view__tableWrap data-table-wrap">
116+
<div className="products-view__tableWrap data-table-wrap">
118117
<table className="products-view__table data-table">
119118
<thead>
120119
<tr>
@@ -145,7 +144,6 @@ export function ProductsView({ data }: ProductsViewProps) {
145144
</tbody>
146145
</table>
147146
</div>
148-
</div>
149147
</section>
150148
)
151149
}

0 commit comments

Comments
 (0)