import styled from '@emotion/styled'; import {t} from 'sentry/locale'; import {space} from 'sentry/styles/space'; import {MetricDisplayType} from 'sentry/utils/metrics/types'; import {useMetricsQuery} from 'sentry/utils/metrics/useMetricsQuery'; import usePageFilters from 'sentry/utils/usePageFilters'; import {MetricChartContainer} from 'sentry/views/dashboards/metrics/chart'; export function TotalTokensUsedChart() { const {selection, isReady: isGlobalSelectionReady} = usePageFilters(); const { data: timeseriesData, isLoading, isError, error, } = useMetricsQuery( [ { name: 'total', mri: `c:spans/ai.total_tokens.used@none`, op: 'sum', }, ], selection, { intervalLadder: 'dashboard', } ); if (!isGlobalSelectionReady) { return null; } if (isError) { return
{'' + error}
; } return ( {t('Total tokens used')} ); } export function NumberOfPipelinesChart() { const {selection, isReady: isGlobalSelectionReady} = usePageFilters(); const { data: timeseriesData, isLoading, isError, error, } = useMetricsQuery( [ { name: 'number', mri: `d:spans/exclusive_time@millisecond`, op: 'count', query: 'span.op:"ai.pipeline.langchain"', // TODO: for now this is the only AI "pipeline" supported }, ], selection, { intervalLadder: 'dashboard', } ); if (!isGlobalSelectionReady) { return null; } if (isError) { return
{'' + error}
; } return ( {t('Number of AI pipelines')} ); } export function PipelineDurationChart() { const {selection, isReady: isGlobalSelectionReady} = usePageFilters(); const { data: timeseriesData, isLoading, isError, error, } = useMetricsQuery( [ { name: 'number', mri: `d:spans/exclusive_time@millisecond`, op: 'avg', query: 'span.op:"ai.pipeline.langchain"', // TODO: for now this is the only AI "pipeline" supported }, ], selection, { intervalLadder: 'dashboard', } ); if (!isGlobalSelectionReady) { return null; } if (isError) { return
{'' + error}
; } return ( {t('AI pipeline duration')} ); } const PanelTitle = styled('h5')` padding: ${space(3)} ${space(3)} 0; margin: 0; `; const TokenChartContainer = styled('div')` overflow: hidden; border: 1px solid ${p => p.theme.border}; border-radius: ${p => p.theme.borderRadius}; height: 100%; display: flex; flex-direction: column; `;