import { type SupportedModel } from "~/server/types"; import { type Scenario } from "../types"; import { type RouterOutputs } from "~/utils/api"; import { calculateTokenCost } from "~/utils/calculateTokenCost"; import { HStack, Icon, Text, Tooltip } from "@chakra-ui/react"; import { BsCheck, BsClock, BsCurrencyDollar, BsX } from "react-icons/bs"; import { CostTooltip } from "~/components/tooltip/CostTooltip"; const SHOW_COST = true; const SHOW_TIME = true; export const OutputStats = ({ model, modelOutput, }: { model: SupportedModel | string | null; modelOutput: NonNullable< NonNullable["modelOutput"] >; scenario: Scenario; }) => { const timeToComplete = modelOutput.timeToComplete; const promptTokens = modelOutput.promptTokens; const completionTokens = modelOutput.completionTokens; const promptCost = promptTokens && model ? calculateTokenCost(model, promptTokens) : 0; const completionCost = completionTokens && model ? calculateTokenCost(model, completionTokens, true) : 0; const cost = promptCost + completionCost; return ( {modelOutput.outputEvaluation.map((evaluation) => { const passed = evaluation.result > 0.5; return ( {evaluation.evaluation.label} ); })} {SHOW_COST && ( {cost.toFixed(3)} )} {SHOW_TIME && ( {(timeToComplete / 1000).toFixed(2)}s )} ); };