/** * @category Core Interfaces */ export interface Template { render(context: TVars): string; } /** * @category Core Interfaces */ export type ModelId = string; /** * @category Core Interfaces */ export interface ModelRequestOptions { modelId: ModelId; $prompt: string; } /** * @category Core Interfaces */ export interface ModelApi { name?: string; requestTemplate: Template; responseGuard: (response: unknown) => response is TResponse; } /** * @category Core Interfaces */ export interface ModelProvider { sendRequest(options: TRequestOptions): Promise; } export type Endpoint = string; export type Method = "POST"; export type Body = string; export type Headers = Record>; export interface HttpClientRequest { method: Method; body: Body; headers: Headers; } /** * @category Core Interfaces */ export interface HttpClient { fetch(endpoint: Endpoint, request: HttpClientRequest & TCustomHttpClientRequestOptions): Promise; } export type MakeOptional = Omit & Partial>; export type InferRequestOptions = T extends ModelApi ? U : never; export type InferResponse = T extends ModelApi ? V : never; export type ToolParameterTypes = "STR" | "NUM" | "BOOL"; export interface ToolParameterDescriptor { name: string; description: string; type: ToolParameterTypes; required: boolean; } interface UnresolvedToolInvocation { arguments: TArgs; resolved?: false; } interface ResolvedToolInvocation { arguments: TArgs; returned: TReturns; resolved: true; } export type ToolInvocation = UnresolvedToolInvocation | ResolvedToolInvocation; export interface ToolDescriptor { name: string; description: string; parameters: ToolParameterDescriptor[]; invocations: ToolInvocation[]; } export {};