• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

stacklok / codegate-ui / 13325211149

14 Feb 2025 08:17AM UTC coverage: 68.625% (+0.02%) from 68.603%
13325211149

Pull #315

github

web-flow
Merge 7bf78fe19 into 0805f21ad
Pull Request #315: chore: configure prettier & apply formatting

364 of 590 branches covered (61.69%)

Branch coverage included in aggregate %.

360 of 519 new or added lines in 99 files covered. (69.36%)

5 existing lines in 4 files now uncovered.

769 of 1061 relevant lines covered (72.48%)

71.26 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/features/dashboard-messages/components/token-usage-by-providers.tsx
1
import { TokenUsage, TokenUsageAggregate } from '@/api/generated'
2
import { formatCurrency } from '@/lib/currency'
3
import { formatNumberCompact } from '@/lib/format-number'
4
import { TokenUsageIcon } from './token-usage-icon'
5

6
function validateUsage(usage: TokenUsage | null): usage is {
7
  input_tokens: number
8
  output_tokens: number
9
  input_cost: number
10
  output_cost: number
11
} {
12
  return Boolean(
×
13
    typeof usage?.input_tokens !== 'undefined' &&
×
14
      typeof usage.input_cost !== 'undefined' &&
15
      typeof usage.output_tokens !== 'undefined' &&
16
      typeof usage.output_cost !== 'undefined'
17
  )
18
}
19

20
function UsageRow({
21
  cost,
22
  tokens,
23
  type,
24
}: {
25
  type: 'input' | 'output'
26
  tokens: number
27
  cost: number
28
}) {
29
  return (
30
    <li
31
      className="my-1 flex min-w-40 list-none items-center border-b border-b-gray-900 py-1
32
        last:border-b-0"
33
    >
34
      <TokenUsageIcon iconType={type} className="size-4 text-gray-50" />
35

36
      <div className="text-gray-50">{formatNumberCompact(tokens)}</div>
37

38
      <div className="ml-auto text-gray-25">
39
        {formatCurrency(cost, { currency: 'USD' })}
40
      </div>
41
    </li>
42
  )
43
}
44

45
function UsageRows({
46
  input_cost,
47
  input_tokens,
48
  output_cost,
49
  output_tokens,
50
}: {
51
  input_tokens: number
52
  output_tokens: number
53
  input_cost: number
54
  output_cost: number
55
}) {
56
  return (
57
    <>
58
      <UsageRow type={'input'} tokens={input_tokens} cost={input_cost} />
59
      <UsageRow type={'output'} tokens={output_tokens} cost={output_cost} />
60
    </>
61
  )
62
}
63

64
export function TokenUsageByProviders({
65
  tokens_by_model,
66
}: TokenUsageAggregate) {
67
  return Object.values(tokens_by_model).map(
×
68
    ({ provider_type, token_usage: modelTokenUsage, model }) => {
NEW
69
      if (!validateUsage(modelTokenUsage)) return null
×
70

71
      return (
72
        <div>
73
          <div>
74
            <b>Model:</b> {model}
75
          </div>
76
          <div>
77
            <b>Provider:</b> {provider_type}
78
          </div>
79
          <ul className="mt-2 list-none">
80
            <UsageRows {...modelTokenUsage} />
81
          </ul>
82
        </div>
83
      )
84
    }
85
  )
86
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc