UNPKG

graphlit-client

Version:
138 lines (137 loc) 3.6 kB
import { ConversationMessage, ConversationToolCall } from "../generated/graphql-types.js"; import { ContextManagementAction } from "./agent.js"; /** * Tool execution status for streaming */ export type ToolExecutionStatus = "preparing" | "executing" | "ready" | "completed" | "failed"; /** * Reasoning format types */ export type ReasoningFormat = "thinking_tag" | "markdown" | "custom"; /** * Context window usage event - emitted at start of agent interaction */ export type ContextWindowEvent = { type: "context_window"; usage: { usedTokens: number; maxTokens: number; percentage: number; remainingTokens: number; }; timestamp: Date; }; /** * Structured reasoning/thinking metadata. * Provides a canonical representation across all providers so the UI * can decide whether and how to render model reasoning. */ export type ReasoningMetadata = { content: string; format: ReasoningFormat; signature?: string; }; /** * Extended conversation message with additional streaming metadata */ export type StreamingConversationMessage = Partial<ConversationMessage> & { message: string; modelName?: string; isThinking?: boolean; thinkingContent?: string; }; /** * Simplified UI-focused streaming events using GraphQL types */ export type AgentStreamEvent = { type: "conversation_started"; conversationId: string; timestamp: Date; model?: string; } | { type: "conversation_queued"; conversationId: string; timestamp: Date; } | { type: "conversation_cancelled"; conversationId: string; timestamp: Date; } | ContextWindowEvent | { type: "context_management"; action: ContextManagementAction; usage: { usedTokens: number; maxTokens: number; percentage: number; remainingTokens: number; }; timestamp: Date; } | { type: "message_update"; message: StreamingConversationMessage; isStreaming: boolean; reasoning?: ReasoningMetadata; metrics?: { ttft?: number; elapsedTime: number; conversationDuration: number; tokenCount?: number; avgTokenDelay?: number; streamingThroughput?: number; }; } | { type: "tool_update"; toolCall: ConversationToolCall; status: ToolExecutionStatus; timestamp?: Date; startedAt?: string; completedAt?: string; durationMs?: number; failedAt?: string; result?: unknown; error?: string; } | { type: "reasoning_update"; content: string; format: ReasoningFormat; isComplete: boolean; } | { type: "conversation_completed"; message: StreamingConversationMessage; reasoning?: ReasoningMetadata; metrics?: { ttft?: number; totalTime: number; conversationDuration: number; tokenCount?: number; llmTokens?: number; avgTokenDelay?: number; streamingThroughput?: number; }; contextWindow?: { usedTokens: number; maxTokens: number; percentage: number; remainingTokens: number; }; usage?: { promptTokens: number; completionTokens: number; totalTokens: number; model?: string; provider?: string; cachedInputTokens?: number; cacheCreationInputTokens?: number; cacheReadInputTokens?: number; metadata?: Record<string, unknown>; }; } | { type: "error"; error: { message: string; code?: string; recoverable?: boolean; }; conversationId: string; timestamp: Date; };