Files
2026-07-13 13:32:57 +08:00

76 lines
2.6 KiB
TypeScript

import { useState } from "react";
import { SparkleListIcon } from "~/assets/icons/SparkleListIcon";
import { AIQueryInput } from "~/components/code/AIQueryInput";
import { Header3 } from "~/components/primitives/Headers";
import { Paragraph } from "~/components/primitives/Paragraph";
import type { AITimeFilter } from "./types";
export function AITabContent({
onQueryGenerated,
onTimeFilterChange,
getCurrentQuery,
aiFixRequest,
}: {
onQueryGenerated: (query: string) => void;
onTimeFilterChange?: (filter: AITimeFilter) => void;
getCurrentQuery: () => string;
aiFixRequest: { prompt: string; key: number } | null;
}) {
const [examplePromptRequest, setExamplePromptRequest] = useState<{
prompt: string;
key: number;
} | null>(null);
// Use aiFixRequest if present, otherwise use example prompt request
const activeRequest = aiFixRequest ?? examplePromptRequest;
const examplePrompts = [
"Show me failed runs by hour for the past 7 days",
"Count of runs by status by hour for the past 48h",
"Top 50 most expensive runs this week",
"Average execution duration by task this week",
"Run counts by tag in the past 7 days",
"CPU utilization over time by task",
"Peak memory usage per run",
];
return (
<div className="space-y-2">
<AIQueryInput
onQueryGenerated={onQueryGenerated}
onTimeFilterChange={onTimeFilterChange}
autoSubmitPrompt={activeRequest?.prompt}
autoSubmitKey={activeRequest?.key}
getCurrentQuery={getCurrentQuery}
/>
<div className="pt-4">
<Header3 className="mb-3 text-text-bright">Example prompts</Header3>
<div className="flex flex-wrap gap-2">
{examplePrompts.map((example) => (
<button
key={example}
type="button"
onClick={() => {
setExamplePromptRequest((prev) => ({
prompt: example,
key: (prev?.key ?? 0) + 1,
}));
}}
className="group flex w-fit items-center gap-2 rounded-full border border-dashed border-border-bright px-4 py-2 transition-colors hover:border-solid hover:border-indigo-500 focus-custom focus-visible:rounded-full!"
>
<SparkleListIcon className="size-4 shrink-0 text-text-dimmed transition group-hover:text-indigo-500" />
<Paragraph
variant="small"
className="text-left transition group-hover:text-text-bright"
>
{example}
</Paragraph>
</button>
))}
</div>
</div>
</div>
);
}