mirror of
https://github.com/EthanMarti/infio-copilot.git
synced 2026-05-08 16:10:09 +00:00
85 lines
2.5 KiB
TypeScript
85 lines
2.5 KiB
TypeScript
import * as Popover from '@radix-ui/react-popover'
|
|
import {
|
|
ArrowDown,
|
|
ArrowRightLeft,
|
|
ArrowUp,
|
|
Coins,
|
|
Cpu,
|
|
Info,
|
|
} from 'lucide-react'
|
|
|
|
import { ResponseUsage } from '../../types/llm/response'
|
|
|
|
type LLMResponseInfoProps = {
|
|
usage?: ResponseUsage
|
|
estimatedPrice: number | null
|
|
model?: string
|
|
}
|
|
|
|
export default function LLMResponseInfoPopover({
|
|
usage,
|
|
estimatedPrice,
|
|
model,
|
|
}: LLMResponseInfoProps) {
|
|
return (
|
|
<Popover.Root>
|
|
<Popover.Trigger asChild>
|
|
<button>
|
|
<Info className="infio-llm-info-icon--trigger" size={12} />
|
|
</button>
|
|
</Popover.Trigger>
|
|
{usage ? (
|
|
<Popover.Content className="infio-chat-popover-content infio-llm-info-content">
|
|
<div className="infio-llm-info-header">LLM Response Information</div>
|
|
<div className="infio-llm-info-tokens">
|
|
<div className="infio-llm-info-tokens-header">Token Count</div>
|
|
<div className="infio-llm-info-tokens-grid">
|
|
<div className="infio-llm-info-token-row">
|
|
<ArrowUp className="infio-llm-info-icon--input" />
|
|
<span>Input:</span>
|
|
<span className="infio-llm-info-token-value">
|
|
{usage.prompt_tokens}
|
|
</span>
|
|
</div>
|
|
<div className="infio-llm-info-token-row">
|
|
<ArrowDown className="infio-llm-info-icon--output" />
|
|
<span>Output:</span>
|
|
<span className="infio-llm-info-token-value">
|
|
{usage.completion_tokens}
|
|
</span>
|
|
</div>
|
|
<div className="infio-llm-info-token-row infio-llm-info-token-total">
|
|
<ArrowRightLeft className="infio-llm-info-icon--total" />
|
|
<span>Total:</span>
|
|
<span className="infio-llm-info-token-value">
|
|
{usage.total_tokens}
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div className="infio-llm-info-footer-row">
|
|
<Coins className="infio-llm-info-icon--footer" />
|
|
<span>Estimated Price:</span>
|
|
<span className="infio-llm-info-footer-value">
|
|
{estimatedPrice === null
|
|
? 'Not available'
|
|
: `$${estimatedPrice.toFixed(4)}`}
|
|
</span>
|
|
</div>
|
|
<div className="infio-llm-info-footer-row">
|
|
<Cpu className="infio-llm-info-icon--footer" />
|
|
<span>Model:</span>
|
|
<span className="infio-llm-info-footer-value infio-llm-info-model">
|
|
{model ?? 'Not available'}
|
|
</span>
|
|
</div>
|
|
</Popover.Content>
|
|
) : (
|
|
<Popover.Content className="infio-chat-popover-content">
|
|
<div>Usage statistics are not available for this model</div>
|
|
</Popover.Content>
|
|
)}
|
|
</Popover.Root>
|
|
)
|
|
}
|