@@ -7,6 +7,7 @@ import { calculateTokenCost } from "~/utils/calculateTokenCost";
|
||||
import { evaluateOutput } from "~/server/utils/evaluateOutput";
|
||||
import { HStack, Icon, Text } from "@chakra-ui/react";
|
||||
import { BsCheck, BsClock, BsCurrencyDollar, BsX } from "react-icons/bs";
|
||||
import { CostTooltip } from "~/components/tooltip/CostTooltip";
|
||||
|
||||
export const OutputStats = ({
|
||||
model,
|
||||
@@ -48,10 +49,12 @@ export const OutputStats = ({
|
||||
);
|
||||
})}
|
||||
</HStack>
|
||||
<CostTooltip promptTokens={promptTokens} completionTokens={completionTokens} cost={cost}>
|
||||
<HStack spacing={0}>
|
||||
<Icon as={BsCurrencyDollar} />
|
||||
<Text mr={1}>{cost.toFixed(3)}</Text>
|
||||
</HStack>
|
||||
</CostTooltip>
|
||||
<HStack spacing={0.5}>
|
||||
<Icon as={BsClock} />
|
||||
<Text>{(timeToComplete / 1000).toFixed(2)}s</Text>
|
||||
|
||||
@@ -4,13 +4,23 @@ import { cellPadding } from "../constants";
|
||||
import { api } from "~/utils/api";
|
||||
import chroma from "chroma-js";
|
||||
import { BsCurrencyDollar } from "react-icons/bs";
|
||||
import { CostTooltip } from "../tooltip/CostTooltip";
|
||||
|
||||
export default function VariantStats(props: { variant: PromptVariant }) {
|
||||
const { data } = api.promptVariants.stats.useQuery(
|
||||
{
|
||||
variantId: props.variant.id,
|
||||
},
|
||||
{ initialData: { evalResults: [], overallCost: 0, scenarioCount: 0, outputCount: 0 } }
|
||||
{
|
||||
initialData: {
|
||||
evalResults: [],
|
||||
overallCost: 0,
|
||||
promptTokens: 0,
|
||||
completionTokens: 0,
|
||||
scenarioCount: 0,
|
||||
outputCount: 0,
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
const [passColor, neutralColor, failColor] = useToken("colors", [
|
||||
@@ -46,10 +56,16 @@ export default function VariantStats(props: { variant: PromptVariant }) {
|
||||
})}
|
||||
</HStack>
|
||||
{data.overallCost && (
|
||||
<CostTooltip
|
||||
promptTokens={data.promptTokens}
|
||||
completionTokens={data.completionTokens}
|
||||
cost={data.overallCost}
|
||||
>
|
||||
<HStack spacing={0} align="center" color="gray.500" my="2">
|
||||
<Icon as={BsCurrencyDollar} />
|
||||
<Text mr={1}>{data.overallCost.toFixed(3)}</Text>
|
||||
</HStack>
|
||||
</CostTooltip>
|
||||
)}
|
||||
</HStack>
|
||||
);
|
||||
|
||||
54
src/components/tooltip/CostTooltip.tsx
Normal file
54
src/components/tooltip/CostTooltip.tsx
Normal file
@@ -0,0 +1,54 @@
|
||||
import { HStack, Icon, Text, Tooltip, type TooltipProps, VStack, Divider } from "@chakra-ui/react";
|
||||
import { BsCurrencyDollar } from "react-icons/bs";
|
||||
|
||||
type CostTooltipProps = {
|
||||
promptTokens: number | null;
|
||||
completionTokens: number | null;
|
||||
cost: number;
|
||||
} & TooltipProps;
|
||||
|
||||
export const CostTooltip = ({
|
||||
promptTokens,
|
||||
completionTokens,
|
||||
cost,
|
||||
children,
|
||||
...props
|
||||
}: CostTooltipProps) => {
|
||||
return (
|
||||
<Tooltip
|
||||
borderRadius="8"
|
||||
color="gray.800"
|
||||
bgColor="gray.50"
|
||||
py={2}
|
||||
hasArrow
|
||||
label={
|
||||
<VStack fontSize="sm" w="200">
|
||||
<VStack>
|
||||
<Text fontWeight="bold">Cost</Text>
|
||||
<HStack spacing={0}>
|
||||
<Icon as={BsCurrencyDollar} />
|
||||
<Text>{cost.toFixed(6)}</Text>
|
||||
</HStack>
|
||||
</VStack>
|
||||
<VStack>
|
||||
<Text fontWeight="bold">Tokens</Text>
|
||||
<HStack>
|
||||
<VStack w="28">
|
||||
<Text>Prompt</Text>
|
||||
<Text>{promptTokens ?? 0}</Text>
|
||||
</VStack>
|
||||
<Divider borderColor="gray.200" h={12} orientation="vertical" />
|
||||
<VStack w="28">
|
||||
<Text whiteSpace="nowrap">Completion</Text>
|
||||
<Text>{completionTokens ?? 0}</Text>
|
||||
</VStack>
|
||||
</HStack>
|
||||
</VStack>
|
||||
</VStack>
|
||||
}
|
||||
{...props}
|
||||
>
|
||||
{children}
|
||||
</Tooltip>
|
||||
);
|
||||
};
|
||||
@@ -66,7 +66,7 @@ export const promptVariantsRouter = createTRPCRouter({
|
||||
|
||||
const overallCost = overallPromptCost + overallCompletionCost;
|
||||
|
||||
return { evalResults, overallCost, scenarioCount, outputCount };
|
||||
return { evalResults, promptTokens, completionTokens, overallCost, scenarioCount, outputCount };
|
||||
}),
|
||||
|
||||
create: publicProcedure
|
||||
|
||||
Reference in New Issue
Block a user