| import { useMemo } from "react"; |
| import useMetricsStore from "#/stores/metrics-store"; |
| import { useActiveConversation } from "#/hooks/query/use-active-conversation"; |
| import { useConversationMetrics } from "#/hooks/query/use-conversation-metrics"; |
|
|
| export interface ContextWindowUsage { |
| perTurnToken: number; |
| contextWindow: number; |
| } |
|
|
| function toContextWindowUsage( |
| usage: |
| | { |
| per_turn_token?: number | null; |
| context_window?: number | null; |
| } |
| | null |
| | undefined, |
| ): ContextWindowUsage | null { |
| const contextWindow = usage?.context_window ?? 0; |
| if (contextWindow <= 0) { |
| return null; |
| } |
|
|
| return { |
| perTurnToken: usage?.per_turn_token ?? 0, |
| contextWindow, |
| }; |
| } |
|
|
| export function useContextWindowUsage(): ContextWindowUsage | null { |
| const storeUsage = useMetricsStore((state) => state.usage); |
| const { data: conversation } = useActiveConversation(); |
|
|
| const { data: conversationMetrics } = useConversationMetrics( |
| conversation?.id, |
| conversation?.conversation_url, |
| conversation?.session_api_key, |
| Boolean(conversation?.id), |
| ); |
|
|
| return useMemo(() => { |
| const fromStore = toContextWindowUsage(storeUsage); |
| if (fromStore) { |
| return fromStore; |
| } |
|
|
| return toContextWindowUsage( |
| conversationMetrics?.accumulated_token_usage ?? null, |
| ); |
| }, [storeUsage, conversationMetrics]); |
| } |
|
|