graphlit-client
Version:
Graphlit API Client for TypeScript
138 lines (137 loc) • 3.6 kB
TypeScript
/**
* Internal types used by the streaming implementation
* These are not exported to consumers of the library
*/
import { ContextManagementAction } from "./agent.js";
type ToolCallStreamData = {
id: string;
name: string;
arguments?: string;
startedAt?: string | null;
completedAt?: string | null;
durationMs?: number | null;
failedAt?: string | null;
firstStatusAt?: string | null;
};
/**
* Low-level streaming events used internally by providers
* These get transformed into AgentStreamEvent by UIEventAdapter
*/
export type StreamEvent = {
type: "start";
conversationId: string;
} | {
type: "token";
token: string;
} | {
type: "message";
message: string;
} | {
type: "tool_call_start";
toolCall: ToolCallStreamData;
} | {
type: "tool_call_delta";
toolCallId: string;
argumentDelta: string;
} | {
type: "tool_call_parsed";
toolCall: ToolCallStreamData & {
arguments: string;
};
} | {
type: "tool_call_executing";
toolCall: ToolCallStreamData & {
arguments: string;
};
} | {
type: "tool_call_complete";
toolCall: ToolCallStreamData & {
arguments: string;
};
result?: unknown;
error?: string;
} | {
type: "complete";
messageId?: string;
conversationId?: string;
tokens?: number;
usage?: {
promptTokens: number;
completionTokens: number;
totalTokens: number;
model?: string;
provider?: string;
};
} | {
type: "error";
error: string;
} | {
type: "context_window";
usage: {
usedTokens: number;
maxTokens: number;
percentage: number;
remainingTokens: number;
};
} | {
type: "context_management";
action: ContextManagementAction;
usage: {
usedTokens: number;
maxTokens: number;
percentage: number;
remainingTokens: number;
};
timestamp: Date;
} | {
type: "reasoning_start";
format: "thinking_tag" | "markdown" | "custom";
} | {
type: "reasoning_delta";
content: string;
format: "thinking_tag" | "markdown" | "custom";
} | {
type: "reasoning_end";
fullContent: string;
signature?: string;
};
/**
* Normalized error from an LLM provider. Carries structured metadata
* so the retry layer can make decisions without parsing error messages.
*/
export declare class ProviderError extends Error {
readonly provider: string;
readonly statusCode: number;
readonly retryable: boolean;
readonly requestId?: string;
constructor(message: string, opts: {
provider: string;
statusCode: number;
retryable: boolean;
requestId?: string;
cause?: Error;
});
}
/**
* Detect common retryable server errors across providers.
* Used as a catch-all after provider-specific error classification.
*/
export declare function isRetryableServerError(error: any): boolean;
/**
* Detect rate-limit / overloaded errors across providers.
*/
export declare function isRateLimitError(error: any): boolean;
/**
* Detect transient network errors.
*
* Node's undici (built-in fetch) wraps TCP resets as:
* TypeError: terminated
* [cause]: Error: read ECONNRESET { code: 'ECONNRESET' }
*
* The ECONNRESET code lives on the nested `cause`, not the top-level error,
* so we check both levels.
*/
export declare function isNetworkError(error: any): boolean;
/** Extract a request ID from a provider error, if present. */
export declare function extractRequestId(error: any): string | undefined;
export {};