EdgeAIG's picture
download
raw
59 kB
/**
* Defines a shared data model for AI model output.
*
* Responses are represented as typed parts so different providers can expose
* text, reasoning, tool calls, files, sources, metadata, finish information, and
* errors through one shape. The same model is used for complete responses and
* streaming responses, where start, delta, and end parts describe content as it
* arrives. This module also carries provider metadata and schemas used by tools
* that need to validate response parts.
*
* @since 4.0.0
*/
import type * as DateTime from "../../DateTime.ts";
import * as Schema from "../../Schema.ts";
import type * as Tool from "./Tool.ts";
import type * as Toolkit from "./Toolkit.ts";
declare const PartTypeId: "~effect/ai/Content/Part";
/**
* Type guard to check if a value is a Response Part.
*
* @category guards
* @since 4.0.0
*/
export declare const isPart: (u: unknown) => u is AnyPart;
/**
* Union type representing all possible response content parts.
*
* @category models
* @since 4.0.0
*/
export type AnyPart = TextPart | TextStartPart | TextDeltaPart | TextEndPart | ReasoningPart | ReasoningStartPart | ReasoningDeltaPart | ReasoningEndPart | ToolParamsStartPart | ToolParamsDeltaPart | ToolParamsEndPart | ToolCallPart<any, any> | ToolResultPart<any, any, any> | ToolApprovalRequestPart | FilePart | DocumentSourcePart | UrlSourcePart | ResponseMetadataPart | FinishPart | ErrorPart;
/**
* Encoded representation of all possible response content parts for serialization.
*
* @category models
* @since 4.0.0
*/
export type AnyPartEncoded = TextPartEncoded | TextStartPartEncoded | TextDeltaPartEncoded | TextEndPartEncoded | ReasoningPartEncoded | ReasoningStartPartEncoded | ReasoningDeltaPartEncoded | ReasoningEndPartEncoded | ToolParamsStartPartEncoded | ToolParamsDeltaPartEncoded | ToolParamsEndPartEncoded | ToolCallPartEncoded | ToolResultPartEncoded | ToolApprovalRequestPartEncoded | FilePartEncoded | DocumentSourcePartEncoded | UrlSourcePartEncoded | ResponseMetadataPartEncoded | FinishPartEncoded | ErrorPartEncoded;
/**
* Union type for all response parts with tool-specific typing.
*
* @category models
* @since 4.0.0
*/
export type AllParts<Tools extends Record<string, Tool.Any>> = TextPart | TextStartPart | TextDeltaPart | TextEndPart | ReasoningPart | ReasoningStartPart | ReasoningDeltaPart | ReasoningEndPart | ToolParamsStartPart | ToolParamsDeltaPart | ToolParamsEndPart | ToolCallParts<Tools> | ToolResultParts<Tools> | ToolApprovalRequestPart | FilePart | DocumentSourcePart | UrlSourcePart | ResponseMetadataPart | FinishPart | ErrorPart;
/**
* Encoded representation of all response parts for serialization.
*
* @category models
* @since 4.0.0
*/
export type AllPartsEncoded = TextPartEncoded | TextStartPartEncoded | TextDeltaPartEncoded | TextEndPartEncoded | ReasoningPartEncoded | ReasoningStartPartEncoded | ReasoningDeltaPartEncoded | ReasoningEndPartEncoded | ToolParamsStartPartEncoded | ToolParamsDeltaPartEncoded | ToolParamsEndPartEncoded | ToolCallPartEncoded | ToolResultPartEncoded | ToolApprovalRequestPartEncoded | FilePartEncoded | DocumentSourcePartEncoded | UrlSourcePartEncoded | ResponseMetadataPartEncoded | FinishPartEncoded | ErrorPartEncoded;
/**
* Creates a Schema for all response parts based on a toolkit.
*
* **Details**
*
* Generates a schema that includes all possible response parts, with tool call
* and tool result parts dynamically created based on the provided toolkit.
*
* **Example** (Building a response parts schema)
*
* ```ts
* import { Schema } from "effect"
* import { Response, Tool, Toolkit } from "effect/unstable/ai"
*
* const myToolkit = Toolkit.make(
* Tool.make("GetWeather", {
* parameters: Schema.Struct({ city: Schema.String }),
* success: Schema.Struct({ temperature: Schema.Number })
* })
* )
*
* const allPartsSchema = Response.AllParts(myToolkit)
* ```
*
* @category schemas
* @since 4.0.0
*/
export declare const AllParts: <T extends Toolkit.Any | Toolkit.WithHandler<any>>(toolkit: T) => Schema.Codec<AllParts<T extends Toolkit.Any ? Toolkit.Tools<T> : Toolkit.WithHandlerTools<T>>, AllPartsEncoded, Tool.ResultDecodingServices<Toolkit.Tools<T>[keyof Toolkit.Tools<T>]>, Tool.ResultEncodingServices<Toolkit.Tools<T>[keyof Toolkit.Tools<T>]>>;
/**
* A type for representing non-streaming response parts with tool-specific
* typing.
*
* @category models
* @since 4.0.0
*/
export type Part<Tools extends Record<string, Tool.Any>> = TextPart | ReasoningPart | ToolCallParts<Tools> | ToolResultParts<Tools> | ToolApprovalRequestPart | FilePart | DocumentSourcePart | UrlSourcePart | ResponseMetadataPart | FinishPart;
/**
* Encoded representation of non-streaming response parts for serialization.
*
* @category models
* @since 4.0.0
*/
export type PartEncoded = TextPartEncoded | ReasoningPartEncoded | ReasoningDeltaPartEncoded | ReasoningEndPartEncoded | ToolCallPartEncoded | ToolResultPartEncoded | ToolApprovalRequestPartEncoded | FilePartEncoded | DocumentSourcePartEncoded | UrlSourcePartEncoded | ResponseMetadataPartEncoded | FinishPartEncoded;
/**
* Creates a Schema for non-streaming response parts based on a toolkit.
*
* @category schemas
* @since 4.0.0
*/
export declare const Part: <T extends Toolkit.Any | Toolkit.WithHandler<any>>(toolkit: T) => Schema.Codec<Part<T extends Toolkit.Any ? Toolkit.Tools<T> : Toolkit.WithHandlerTools<T>>, PartEncoded, Tool.ResultDecodingServices<Toolkit.Tools<T>[keyof Toolkit.Tools<T>]>, Tool.ResultEncodingServices<Toolkit.Tools<T>[keyof Toolkit.Tools<T>]>>;
/**
* A type for representing streaming response parts with tool-specific typing.
*
* @category models
* @since 4.0.0
*/
export type StreamPart<Tools extends Record<string, Tool.Any>> = TextStartPart | TextDeltaPart | TextEndPart | ReasoningStartPart | ReasoningDeltaPart | ReasoningEndPart | ToolParamsStartPart | ToolParamsDeltaPart | ToolParamsEndPart | ToolCallParts<Tools> | ToolResultParts<Tools> | ToolApprovalRequestPart | FilePart | DocumentSourcePart | UrlSourcePart | ResponseMetadataPart | FinishPart | ErrorPart;
/**
* Encoded representation of streaming response parts for serialization.
*
* @category models
* @since 4.0.0
*/
export type StreamPartEncoded = TextStartPartEncoded | TextDeltaPartEncoded | TextEndPartEncoded | ReasoningStartPartEncoded | ReasoningDeltaPartEncoded | ReasoningEndPartEncoded | ToolParamsStartPartEncoded | ToolParamsDeltaPartEncoded | ToolParamsEndPartEncoded | ToolCallPartEncoded | ToolResultPartEncoded | ToolApprovalRequestPartEncoded | FilePartEncoded | DocumentSourcePartEncoded | UrlSourcePartEncoded | ResponseMetadataPartEncoded | FinishPartEncoded | ErrorPartEncoded;
/**
* Creates a Schema for streaming response parts based on a toolkit.
*
* @category schemas
* @since 4.0.0
*/
export declare const StreamPart: <T extends Toolkit.Any | Toolkit.WithHandler<any>>(toolkit: T) => Schema.Codec<StreamPart<T extends Toolkit.Any ? Toolkit.Tools<T> : Toolkit.WithHandlerTools<T>>, StreamPartEncoded, Tool.ResultDecodingServices<Toolkit.Tools<T>[keyof Toolkit.Tools<T>]>, Tool.ResultEncodingServices<Toolkit.Tools<T>[keyof Toolkit.Tools<T>]>>;
/**
* Utility type that extracts tool call parts from a set of tools.
*
* @category utility types
* @since 4.0.0
*/
export type ToolCallParts<Tools extends Record<string, Tool.Any>> = {
[Name in keyof Tools]: Name extends string ? ToolCallPart<Name, Tool.Parameters<Tools[Name]>> : never;
}[keyof Tools];
/**
* Utility type that extracts tool result parts from a set of tools.
*
* @category utility types
* @since 4.0.0
*/
export type ToolResultParts<Tools extends Record<string, Tool.Any>> = {
[Name in keyof Tools]: Name extends string ? ToolResultPart<Name, Tool.Success<Tools[Name]>, Tool.FailureResult<Tools[Name]>> : never;
}[keyof Tools];
/**
* Schema for provider-specific metadata attached to response parts,
* represented as a record from provider-specific keys to JSON values or `null`.
*
* @category schemas
* @since 4.0.0
*/
export declare const ProviderMetadata: Schema.$Record<Schema.String, Schema.NullOr<Schema.Codec<Schema.Json>>>;
/**
* Type of provider-specific metadata attached to response parts, keyed by
* provider-specific names with JSON or `null` values.
*
* @category models
* @since 4.0.0
*/
export type ProviderMetadata = typeof ProviderMetadata.Type;
/**
* Base interface for all response content parts, including the type identifier
* and optional metadata.
*
* @category models
* @since 4.0.0
*/
export interface BasePart<Type extends string, Metadata extends ProviderMetadata> {
readonly [PartTypeId]: typeof PartTypeId;
/**
* The type of this response part.
*/
readonly type: Type;
/**
* Optional provider-specific metadata for this part.
*/
readonly metadata: Metadata;
}
/**
* Base interface for encoded response content parts.
*
* @category models
* @since 4.0.0
*/
export interface BasePartEncoded<Type extends string, Metadata extends ProviderMetadata> {
/**
* The type of this response part.
*/
readonly type: Type;
/**
* Optional provider-specific metadata for this part.
*/
readonly metadata?: Metadata | undefined;
}
/**
* Creates a new response content part of the specified type.
*
* **Example** (Creating response content parts)
*
* ```ts
* import { Response } from "effect/unstable/ai"
*
* const textPart = Response.makePart("text", {
* text: "Hello, world!"
* })
*
* const toolCallPart = Response.makePart("tool-call", {
* id: "call_123",
* name: "get_weather",
* params: { city: "San Francisco" },
* providerExecuted: false
* })
* ```
*
* @category constructors
* @since 4.0.0
*/
export declare const makePart: <const Type extends AnyPart["type"]>(
/**
* The type of part to create.
*/
type: Type,
/**
* Parameters specific to the part type being created.
*/
params: Omit<Extract<AnyPart, {
type: Type;
}>, typeof PartTypeId | "type" | "metadata"> & {
/**
* Optional provider-specific metadata for this part.
*/
readonly metadata?: Extract<AnyPart, {
type: Type;
}>["metadata"] | undefined;
}) => Extract<AnyPart, {
type: Type;
}>;
/**
* A utility type for specifying the parameters required to construct a
* specific response part.
*
* @category utility types
* @since 4.0.0
*/
export type ConstructorParams<Part extends AnyPart> = Omit<Part, typeof PartTypeId | "type" | "sourceType" | "metadata"> & {
/**
* Optional provider-specific metadata for this part.
*/
readonly metadata?: Part["metadata"] | undefined;
};
/**
* Response part representing plain text content.
*
* **Example** (Creating a text part)
*
* ```ts
* import { Response } from "effect/unstable/ai"
*
* const textPart: Response.TextPart = Response.makePart("text", {
* text: "The answer to your question is 42."
* })
* ```
*
* @category models
* @since 4.0.0
*/
export interface TextPart extends BasePart<"text", TextPartMetadata> {
/**
* The text content.
*/
readonly text: string;
}
/**
* Encoded representation of text parts for serialization.
*
* @category models
* @since 4.0.0
*/
export interface TextPartEncoded extends BasePartEncoded<"text", TextPartMetadata> {
/**
* The text content.
*/
readonly text: string;
}
/**
* Represents provider-specific metadata that can be associated with a
* `TextPart` through module augmentation.
*
* @category configuration
* @since 4.0.0
*/
export interface TextPartMetadata extends ProviderMetadata {
}
/**
* Schema for validation and encoding of text parts.
*
* @category schemas
* @since 4.0.0
*/
export declare const TextPart: Schema.Struct<{
readonly type: Schema.tag<"text">;
readonly text: Schema.String;
readonly "~effect/ai/Content/Part": Schema.withDecodingDefaultKey<Schema.tag<"~effect/ai/Content/Part">>;
readonly metadata: Schema.withDecodingDefault<Schema.$Record<Schema.String, Schema.Codec<Schema.Json>>>;
}>;
/**
* Response part indicating the start of streaming text content with a unique
* text chunk identifier.
*
* @category models
* @since 4.0.0
*/
export interface TextStartPart extends BasePart<"text-start", TextStartPartMetadata> {
/**
* Unique identifier for this text chunk.
*/
readonly id: string;
}
/**
* Encoded representation of text start parts for serialization.
*
* @category models
* @since 4.0.0
*/
export interface TextStartPartEncoded extends BasePartEncoded<"text-start", TextStartPartMetadata> {
/**
* Unique identifier for this text chunk.
*/
readonly id: string;
}
/**
* Represents provider-specific metadata that can be associated with a
* `TextStartPart` through module augmentation.
*
* @category configuration
* @since 4.0.0
*/
export interface TextStartPartMetadata extends ProviderMetadata {
}
/**
* Schema for validation and encoding of text start parts.
*
* @category schemas
* @since 4.0.0
*/
export declare const TextStartPart: Schema.Struct<{
readonly type: Schema.tag<"text-start">;
readonly id: Schema.String;
readonly "~effect/ai/Content/Part": Schema.withDecodingDefaultKey<Schema.tag<"~effect/ai/Content/Part">>;
readonly metadata: Schema.withDecodingDefault<Schema.$Record<Schema.String, Schema.Codec<Schema.Json>>>;
}>;
/**
* Response part containing incremental text content to be added to the existing
* text chunk with the same unique identifier.
*
* @category models
* @since 4.0.0
*/
export interface TextDeltaPart extends BasePart<"text-delta", TextDeltaPartMetadata> {
/**
* Unique identifier matching the corresponding text chunk.
*/
readonly id: string;
/**
* The incremental text content to add.
*/
readonly delta: string;
}
/**
* Encoded representation of text delta parts for serialization.
*
* @category models
* @since 4.0.0
*/
export interface TextDeltaPartEncoded extends BasePartEncoded<"text-delta", TextDeltaPartMetadata> {
/**
* Unique identifier matching the corresponding text chunk.
*/
readonly id: string;
/**
* The incremental text content to add.
*/
readonly delta: string;
}
/**
* Represents provider-specific metadata that can be associated with a
* `TextDeltaPart` through module augmentation.
*
* @category configuration
* @since 4.0.0
*/
export interface TextDeltaPartMetadata extends ProviderMetadata {
}
/**
* Schema for validation and encoding of text delta parts.
*
* @category schemas
* @since 4.0.0
*/
export declare const TextDeltaPart: Schema.Struct<{
readonly type: Schema.tag<"text-delta">;
readonly id: Schema.String;
readonly delta: Schema.String;
readonly "~effect/ai/Content/Part": Schema.withDecodingDefaultKey<Schema.tag<"~effect/ai/Content/Part">>;
readonly metadata: Schema.withDecodingDefault<Schema.$Record<Schema.String, Schema.Codec<Schema.Json>>>;
}>;
/**
* Response part indicating the completion of a streaming text chunk.
*
* @category models
* @since 4.0.0
*/
export interface TextEndPart extends BasePart<"text-end", TextEndPartMetadata> {
/**
* Unique identifier matching the corresponding text chunk.
*/
readonly id: string;
}
/**
* Encoded representation of text end parts for serialization.
*
* @category models
* @since 4.0.0
*/
export interface TextEndPartEncoded extends BasePartEncoded<"text-end", TextEndPartMetadata> {
/**
* Unique identifier matching the corresponding text chunk.
*/
readonly id: string;
}
/**
* Represents provider-specific metadata that can be associated with a
* `TextEndPart` through module augmentation.
*
* @category configuration
* @since 4.0.0
*/
export interface TextEndPartMetadata extends ProviderMetadata {
}
/**
* Schema for validation and encoding of text end parts.
*
* @category schemas
* @since 4.0.0
*/
export declare const TextEndPart: Schema.Struct<{
readonly type: Schema.tag<"text-end">;
readonly id: Schema.String;
readonly "~effect/ai/Content/Part": Schema.withDecodingDefaultKey<Schema.tag<"~effect/ai/Content/Part">>;
readonly metadata: Schema.withDecodingDefault<Schema.$Record<Schema.String, Schema.Codec<Schema.Json>>>;
}>;
/**
* Response part carrying provider-supplied reasoning text, such as an exposed
* reasoning summary or explanation. Do not assume it contains hidden
* chain-of-thought.
*
* **Example** (Creating a reasoning part)
*
* ```ts
* import { Response } from "effect/unstable/ai"
*
* const reasoningPart: Response.ReasoningPart = Response.makePart("reasoning", {
* text:
* "Let me think step by step: First I need to analyze the user's question..."
* })
* ```
*
* @category models
* @since 4.0.0
*/
export interface ReasoningPart extends BasePart<"reasoning", ReasoningPartMetadata> {
/**
* The reasoning or thought process text.
*/
readonly text: string;
}
/**
* Encoded representation of reasoning parts for serialization.
*
* @category models
* @since 4.0.0
*/
export interface ReasoningPartEncoded extends BasePartEncoded<"reasoning", ReasoningPartMetadata> {
/**
* The reasoning or thought process text.
*/
readonly text: string;
}
/**
* Represents provider-specific metadata that can be associated with a
* `ReasoningPart` through module augmentation.
*
* @category configuration
* @since 4.0.0
*/
export interface ReasoningPartMetadata extends ProviderMetadata {
}
/**
* Schema for validation and encoding of reasoning parts.
*
* @category schemas
* @since 4.0.0
*/
export declare const ReasoningPart: Schema.Struct<{
readonly type: Schema.tag<"reasoning">;
readonly text: Schema.String;
readonly "~effect/ai/Content/Part": Schema.withDecodingDefaultKey<Schema.tag<"~effect/ai/Content/Part">>;
readonly metadata: Schema.withDecodingDefault<Schema.$Record<Schema.String, Schema.Codec<Schema.Json>>>;
}>;
/**
* Response part indicating the start of streaming reasoning content with a
* unique reasoning chunk identifier.
*
* @category models
* @since 4.0.0
*/
export interface ReasoningStartPart extends BasePart<"reasoning-start", ReasoningStartPartMetadata> {
/**
* Unique identifier for this reasoning chunk.
*/
readonly id: string;
}
/**
* Encoded representation of reasoning start parts for serialization.
*
* @category models
* @since 4.0.0
*/
export interface ReasoningStartPartEncoded extends BasePartEncoded<"reasoning-start", ReasoningStartPartMetadata> {
/**
* Unique identifier for this reasoning stream.
*/
readonly id: string;
}
/**
* Represents provider-specific metadata that can be associated with a
* `ReasoningStartPart` through module augmentation.
*
* @category configuration
* @since 4.0.0
*/
export interface ReasoningStartPartMetadata extends ProviderMetadata {
}
/**
* Schema for validation and encoding of reasoning start parts.
*
* @category schemas
* @since 4.0.0
*/
export declare const ReasoningStartPart: Schema.Struct<{
readonly type: Schema.tag<"reasoning-start">;
readonly id: Schema.String;
readonly "~effect/ai/Content/Part": Schema.withDecodingDefaultKey<Schema.tag<"~effect/ai/Content/Part">>;
readonly metadata: Schema.withDecodingDefault<Schema.$Record<Schema.String, Schema.Codec<Schema.Json>>>;
}>;
/**
* Response part containing incremental reasoning content to be added to the
* existing chunk of reasoning text with the same unique identifier.
*
* @category models
* @since 4.0.0
*/
export interface ReasoningDeltaPart extends BasePart<"reasoning-delta", ReasoningDeltaPartMetadata> {
/**
* Unique identifier matching the corresponding reasoning chunk.
*/
readonly id: string;
/**
* The incremental reasoning content to add.
*/
readonly delta: string;
}
/**
* Encoded representation of reasoning delta parts for serialization.
*
* @category models
* @since 4.0.0
*/
export interface ReasoningDeltaPartEncoded extends BasePartEncoded<"reasoning-delta", ReasoningDeltaPartMetadata> {
/**
* Unique identifier matching the corresponding reasoning chunk.
*/
readonly id: string;
/**
* The incremental reasoning content to add.
*/
readonly delta: string;
}
/**
* Represents provider-specific metadata that can be associated with a
* `ReasoningDeltaPart` through module augmentation.
*
* @category configuration
* @since 4.0.0
*/
export interface ReasoningDeltaPartMetadata extends ProviderMetadata {
}
/**
* Schema for validation and encoding of reasoning delta parts.
*
* @category schemas
* @since 4.0.0
*/
export declare const ReasoningDeltaPart: Schema.Struct<{
readonly type: Schema.tag<"reasoning-delta">;
readonly id: Schema.String;
readonly delta: Schema.String;
readonly "~effect/ai/Content/Part": Schema.withDecodingDefaultKey<Schema.tag<"~effect/ai/Content/Part">>;
readonly metadata: Schema.withDecodingDefault<Schema.$Record<Schema.String, Schema.Codec<Schema.Json>>>;
}>;
/**
* Response part indicating the completion of a streaming reasoning chunk.
*
* @category models
* @since 4.0.0
*/
export interface ReasoningEndPart extends BasePart<"reasoning-end", ReasoningEndPartMetadata> {
/**
* Unique identifier matching the corresponding reasoning chunk.
*/
readonly id: string;
}
/**
* Encoded representation of reasoning end parts for serialization.
*
* @category models
* @since 4.0.0
*/
export interface ReasoningEndPartEncoded extends BasePartEncoded<"reasoning-end", ReasoningEndPartMetadata> {
/**
* Unique identifier matching the corresponding reasoning chunk.
*/
readonly id: string;
}
/**
* Represents provider-specific metadata that can be associated with a
* `ReasoningEndPart` through module augmentation.
*
* @category configuration
* @since 4.0.0
*/
export interface ReasoningEndPartMetadata extends ProviderMetadata {
}
/**
* Schema for validation and encoding of reasoning end parts.
*
* @category schemas
* @since 4.0.0
*/
export declare const ReasoningEndPart: Schema.Struct<{
readonly type: Schema.tag<"reasoning-end">;
readonly id: Schema.String;
readonly "~effect/ai/Content/Part": Schema.withDecodingDefaultKey<Schema.tag<"~effect/ai/Content/Part">>;
readonly metadata: Schema.withDecodingDefault<Schema.$Record<Schema.String, Schema.Codec<Schema.Json>>>;
}>;
/**
* Response part indicating the start of streaming tool parameters.
*
* **Details**
*
* Marks the beginning of tool parameter streaming with metadata about the tool
* call.
*
* @category models
* @since 4.0.0
*/
export interface ToolParamsStartPart extends BasePart<"tool-params-start", ToolParamsStartPartMetadata> {
/**
* Unique identifier for this tool parameter chunk.
*/
readonly id: string;
/**
* Name of the tool being called, which corresponds to the name of the tool
* in the `Toolkit` included with the request.
*/
readonly name: string;
/**
* Whether the tool was executed by the provider (true) or framework (false).
*/
readonly providerExecuted: boolean;
}
/**
* Encoded representation of tool params start parts for serialization.
*
* @category models
* @since 4.0.0
*/
export interface ToolParamsStartPartEncoded extends BasePartEncoded<"tool-params-start", ToolParamsStartPartMetadata> {
/**
* Unique identifier for this tool parameter chunk.
*/
readonly id: string;
/**
* Name of the tool being called, which corresponds to the name of the tool
* in the `Toolkit` included with the request.
*/
readonly name: string;
/**
* Whether the tool was executed by the provider (true) or framework (false).
*/
readonly providerExecuted?: boolean;
}
/**
* Represents provider-specific metadata that can be associated with a
* `ToolParamsStartPart` through module augmentation.
*
* @category configuration
* @since 4.0.0
*/
export interface ToolParamsStartPartMetadata extends ProviderMetadata {
}
/**
* Schema for validation and encoding of tool params start parts.
*
* @category schemas
* @since 4.0.0
*/
export declare const ToolParamsStartPart: Schema.Struct<{
readonly type: Schema.tag<"tool-params-start">;
readonly id: Schema.String;
readonly name: Schema.String;
readonly providerExecuted: Schema.withDecodingDefaultKey<Schema.Boolean>;
readonly "~effect/ai/Content/Part": Schema.withDecodingDefaultKey<Schema.tag<"~effect/ai/Content/Part">>;
readonly metadata: Schema.withDecodingDefault<Schema.$Record<Schema.String, Schema.Codec<Schema.Json>>>;
}>;
/**
* Response part containing incremental tool parameter content.
*
* **Details**
*
* Represents a chunk of tool parameters being streamed, containing the
* incremental JSON content that forms the tool parameters.
*
* @category models
* @since 4.0.0
*/
export interface ToolParamsDeltaPart extends BasePart<"tool-params-delta", ToolParamsDeltaPartMetadata> {
/**
* Unique identifier matching the corresponding tool parameter chunk.
*/
readonly id: string;
/**
* The incremental parameter content (typically JSON fragment) to add.
*/
readonly delta: string;
}
/**
* Encoded representation of tool params delta parts for serialization.
*
* @category models
* @since 4.0.0
*/
export interface ToolParamsDeltaPartEncoded extends BasePartEncoded<"tool-params-delta", ToolParamsDeltaPartMetadata> {
/**
* Unique identifier matching the corresponding tool parameter chunk.
*/
readonly id: string;
/**
* The incremental parameter content (typically JSON fragment) to add.
*/
readonly delta: string;
}
/**
* Represents provider-specific metadata that can be associated with a
* `ToolParamsDeltaPart` through module augmentation.
*
* @category configuration
* @since 4.0.0
*/
export interface ToolParamsDeltaPartMetadata extends ProviderMetadata {
}
/**
* Schema for validation and encoding of tool params delta parts.
*
* @category schemas
* @since 4.0.0
*/
export declare const ToolParamsDeltaPart: Schema.Struct<{
readonly type: Schema.tag<"tool-params-delta">;
readonly id: Schema.String;
readonly delta: Schema.String;
readonly "~effect/ai/Content/Part": Schema.withDecodingDefaultKey<Schema.tag<"~effect/ai/Content/Part">>;
readonly metadata: Schema.withDecodingDefault<Schema.$Record<Schema.String, Schema.Codec<Schema.Json>>>;
}>;
/**
* Response part indicating the end of streaming tool parameters.
*
* **Details**
*
* Marks the completion of a tool parameter stream, indicating that all
* parameter data has been sent and the tool call is ready to be executed.
*
* @category models
* @since 4.0.0
*/
export interface ToolParamsEndPart extends BasePart<"tool-params-end", ToolParamsEndPartMetadata> {
/**
* Unique identifier matching the corresponding tool parameter chunk.
*/
readonly id: string;
}
/**
* Encoded representation of tool params end parts for serialization.
*
* @category models
* @since 4.0.0
*/
export interface ToolParamsEndPartEncoded extends BasePartEncoded<"tool-params-end", ToolParamsEndPartMetadata> {
/**
* Unique identifier matching the corresponding tool parameter stream.
*/
readonly id: string;
}
/**
* Represents provider-specific metadata that can be associated with a
* `ToolParamsEndPart` through module augmentation.
*
* @category configuration
* @since 4.0.0
*/
export interface ToolParamsEndPartMetadata extends ProviderMetadata {
}
/**
* Schema for validation and encoding of tool params end parts.
*
* @category schemas
* @since 4.0.0
*/
export declare const ToolParamsEndPart: Schema.Struct<{
readonly type: Schema.tag<"tool-params-end">;
readonly id: Schema.String;
readonly "~effect/ai/Content/Part": Schema.withDecodingDefaultKey<Schema.tag<"~effect/ai/Content/Part">>;
readonly metadata: Schema.withDecodingDefault<Schema.$Record<Schema.String, Schema.Codec<Schema.Json>>>;
}>;
/**
* Response part representing a tool call request.
*
* **Example** (Creating a tool call part)
*
* ```ts
* import { Schema } from "effect"
* import { Response } from "effect/unstable/ai"
*
* const weatherParams = Schema.Struct({
* city: Schema.String,
* units: Schema.optional(Schema.Literals(["celsius", "fahrenheit"]))
* })
*
* const toolCallPart: Response.ToolCallPart<
* "get_weather",
* {
* readonly city: string
* readonly units?: "celsius" | "fahrenheit"
* }
* > = Response.makePart("tool-call", {
* id: "call_123",
* name: "get_weather",
* params: { city: "San Francisco", units: "celsius" },
* providerExecuted: false
* })
* ```
*
* @category models
* @since 4.0.0
*/
export interface ToolCallPart<Name extends string, Params> extends BasePart<"tool-call", ToolCallPartMetadata> {
/**
* Unique identifier for this tool call.
*/
readonly id: string;
/**
* Name of the tool being called, which corresponds to the name of the tool
* in the `Toolkit` included with the request.
*/
readonly name: Name;
/**
* Parameters to pass to the tool.
*/
readonly params: Params;
/**
* Whether the tool was executed by the provider (true) or framework (false).
*/
readonly providerExecuted: boolean;
}
/**
* Encoded representation of tool call parts for serialization.
*
* @category models
* @since 4.0.0
*/
export interface ToolCallPartEncoded extends BasePartEncoded<"tool-call", ToolCallPartMetadata> {
/**
* Unique identifier for this tool call.
*/
readonly id: string;
/**
* Name of the tool being called, which corresponds to the name of the tool
* in the `Toolkit` included with the request.
*/
readonly name: string;
/**
* Parameters to pass to the tool.
*/
readonly params: unknown;
/**
* Whether the tool was executed by the provider (true) or framework (false).
*/
readonly providerExecuted?: boolean | undefined;
}
/**
* Represents provider-specific metadata that can be associated with a
* `ToolCallPart` through module augmentation.
*
* @category configuration
* @since 4.0.0
*/
export interface ToolCallPartMetadata extends ProviderMetadata {
}
/**
* Creates a Schema for tool call parts with specific tool name and parameters.
*
* @category schemas
* @since 4.0.0
*/
export declare const ToolCallPart: <const Name extends string, Params extends Schema.Top>(name: Name, params: Params) => Schema.Struct<{
readonly type: Schema.Literal<"tool-call">;
readonly id: Schema.String;
readonly name: Schema.Literal<Name>;
readonly params: Params;
readonly providerExecuted: Schema.withDecodingDefaultKey<Schema.Boolean>;
readonly "~effect/ai/Content/Part": Schema.withDecodingDefaultKey<Schema.tag<"~effect/ai/Content/Part">>;
readonly metadata: Schema.withDecodingDefault<Schema.$Record<Schema.String, Schema.Codec<Schema.Json>>>;
}>;
/**
* Constructs a new tool call part.
*
* @category constructors
* @since 4.0.0
*/
export declare const toolCallPart: <const Name extends string, Params>(params: ConstructorParams<ToolCallPart<Name, Params>>) => ToolCallPart<Name, Params>;
/**
* The base fields of a tool result part.
*
* @category models
* @since 4.0.0
*/
export interface BaseToolResult<Name extends string> extends BasePart<"tool-result", ToolResultPartMetadata> {
/**
* Unique identifier matching the original tool call.
*/
readonly id: string;
/**
* Name of the tool being called, which corresponds to the name of the tool
* in the `Toolkit` included with the request.
*/
readonly name: Name;
/**
* The encoded result for serialization purposes.
*/
readonly encodedResult: unknown;
/**
* Whether the tool was executed by the provider (true) or framework (false).
*/
readonly providerExecuted: boolean;
/**
* Whether this is a preliminary (intermediate) result.
*
* **Details**
*
* Preliminary results represent progress updates during streaming tool
* execution. Only the final result (where `preliminary` is `false` or
* `undefined`) should be used as the authoritative output.
*
* **Gotchas**
*
* Only applicable for framework-executed tools during streaming.
*/
readonly preliminary: boolean;
}
/**
* Represents a successful tool call result.
*
* @category models
* @since 4.0.0
*/
export interface ToolResultSuccess<Name extends string, Success> extends BaseToolResult<Name> {
/**
* The decoded success returned by the tool execution.
*/
readonly result: Success;
/**
* Whether or not the result of executing the tool call handler was an error.
*/
readonly isFailure: false;
}
/**
* Represents a failed tool call result.
*
* @category models
* @since 4.0.0
*/
export interface ToolResultFailure<Name extends string, Failure> extends BaseToolResult<Name> {
/**
* The decoded failure returned by the tool execution.
*/
readonly result: Failure;
/**
* Whether or not the result of executing the tool call handler was an error.
*/
readonly isFailure: true;
}
/**
* Response part representing the result of a tool call.
*
* **Example** (Creating a tool result part)
*
* ```ts
* import { Response } from "effect/unstable/ai"
*
* interface WeatherData {
* temperature: number
* condition: string
* humidity: number
* }
*
* const toolResultPart: Response.ToolResultPart<
* "get_weather",
* WeatherData,
* never
* > = Response.toolResultPart({
* id: "call_123",
* name: "get_weather",
* isFailure: false,
* result: {
* temperature: 22,
* condition: "sunny",
* humidity: 65
* },
* encodedResult: {
* temperature: 22,
* condition: "sunny",
* humidity: 65
* },
* providerExecuted: false,
* preliminary: false
* })
* ```
*
* @category models
* @since 4.0.0
*/
export type ToolResultPart<Name extends string, Success, Failure> = ToolResultSuccess<Name, Success> | ToolResultFailure<Name, Failure>;
/**
* Encoded representation of tool result parts for serialization.
*
* @category models
* @since 4.0.0
*/
export interface ToolResultPartEncoded extends BasePartEncoded<"tool-result", ToolResultPartMetadata> {
/**
* Unique identifier matching the original tool call.
*/
readonly id: string;
/**
* Name of the tool being called, which corresponds to the name of the tool
* in the `Toolkit` included with the request.
*/
readonly name: string;
/**
* The result returned by the tool execution.
*/
readonly result: unknown;
/**
* Whether or not the result of executing the tool call handler was an error.
*/
readonly isFailure: boolean;
/**
* Whether the tool was executed by the provider (true) or framework (false).
*/
readonly providerExecuted?: boolean | undefined;
/**
* Whether this is a preliminary (intermediate) result.
*
* **Gotchas**
*
* Only applicable for framework-executed tools during streaming.
*/
readonly preliminary?: boolean | undefined;
}
/**
* Represents provider-specific metadata that can be associated with a
* `ToolResultPart` through module augmentation.
*
* @category configuration
* @since 4.0.0
*/
export interface ToolResultPartMetadata extends ProviderMetadata {
}
/**
* Creates a Schema for tool result parts with specific tool name and result type.
*
* @category schemas
* @since 4.0.0
*/
export declare const ToolResultPart: <const Name extends string, Success extends Schema.Top, Failure extends Schema.Top>(name: Name, success: Success, failure: Failure) => Schema.decodeTo<Schema.Struct<{
readonly "~effect/ai/Content/Part": Schema.Literal<"~effect/ai/Content/Part">;
readonly result: Schema.Union<readonly [Success, Failure]>;
readonly providerExecuted: Schema.Boolean;
readonly metadata: Schema.$Record<Schema.String, Schema.NullOr<Schema.Codec<Schema.Json>>>;
readonly encodedResult: Schema.toEncoded<Schema.Union<readonly [Success, Failure]>>;
readonly preliminary: Schema.Boolean;
readonly id: Schema.String;
readonly type: Schema.Literal<"tool-result">;
readonly isFailure: Schema.Boolean;
readonly name: Schema.Literal<Name>;
}>, Schema.Struct<{
readonly result: Schema.toEncoded<Schema.Union<readonly [Success, Failure]>>;
readonly providerExecuted: Schema.optional<Schema.Boolean>;
readonly metadata: Schema.optional<Schema.$Record<Schema.String, Schema.NullOr<Schema.Codec<Schema.Json>>>>;
readonly preliminary: Schema.optional<Schema.Boolean>;
readonly id: Schema.String;
readonly type: Schema.Literal<"tool-result">;
readonly isFailure: Schema.Boolean;
readonly name: Schema.Literal<Name>;
}>>;
/**
* Constructs a new tool result part.
*
* @category constructors
* @since 4.0.0
*/
export declare const toolResultPart: <const Params extends ConstructorParams<ToolResultPart<string, unknown, unknown>>>(params: Params) => Params extends {
readonly name: infer Name extends string;
readonly isFailure: false;
readonly result: infer Success;
} ? ToolResultPart<Name, Success, never> : Params extends {
readonly name: infer Name extends string;
readonly isFailure: true;
readonly result: infer Failure;
} ? ToolResultPart<Name, never, Failure> : never;
/**
* Response part representing a tool approval request.
*
* **Details**
*
* Emitted when a tool requires user approval before execution. The framework
* checks the tool's `needsApproval` property and emits this part instead of
* executing the tool when approval is required.
*
* **Example** (Creating an approval request part)
*
* ```ts
* import { Response } from "effect/unstable/ai"
*
* const approvalRequest: Response.ToolApprovalRequestPart = Response.makePart(
* "tool-approval-request",
* {
* approvalId: "approval_123",
* toolCallId: "call_456"
* }
* )
* ```
*
* @category models
* @since 4.0.0
*/
export interface ToolApprovalRequestPart extends BasePart<"tool-approval-request", ToolApprovalRequestPartMetadata> {
/**
* Unique identifier for this approval flow.
*/
readonly approvalId: string;
/**
* The tool call ID requiring approval.
*/
readonly toolCallId: string;
}
/**
* Encoded representation of tool approval request parts for serialization.
*
* @category models
* @since 4.0.0
*/
export interface ToolApprovalRequestPartEncoded extends BasePartEncoded<"tool-approval-request", ToolApprovalRequestPartMetadata> {
/**
* Unique identifier for this approval flow.
*/
readonly approvalId: string;
/**
* The tool call ID requiring approval.
*/
readonly toolCallId: string;
}
/**
* Represents provider-specific metadata that can be associated with a
* `ToolApprovalRequestPart` through module augmentation.
*
* @category configuration
* @since 4.0.0
*/
export interface ToolApprovalRequestPartMetadata extends ProviderMetadata {
}
/**
* Schema for validation and encoding of tool approval request parts.
*
* @category schemas
* @since 4.0.0
*/
export declare const ToolApprovalRequestPart: Schema.Struct<{
readonly type: Schema.tag<"tool-approval-request">;
readonly approvalId: Schema.String;
readonly toolCallId: Schema.String;
readonly "~effect/ai/Content/Part": Schema.withDecodingDefaultKey<Schema.tag<"~effect/ai/Content/Part">>;
readonly metadata: Schema.withDecodingDefault<Schema.$Record<Schema.String, Schema.Codec<Schema.Json>>>;
}>;
/**
* Constructs a new tool approval request part.
*
* @category constructors
* @since 4.0.0
*/
export declare const toolApprovalRequestPart: (params: ConstructorParams<ToolApprovalRequestPart>) => ToolApprovalRequestPart;
/**
* Response part representing a file attachment.
*
* **Details**
*
* Supports various file types including images, documents, and binary data.
*
* **Example** (Creating a file part)
*
* ```ts
* import { Response } from "effect/unstable/ai"
*
* const imagePart: Response.FilePart = Response.makePart("file", {
* mediaType: "image/jpeg",
* data: new Uint8Array([1, 2, 3])
* })
* ```
*
* @category models
* @since 4.0.0
*/
export interface FilePart extends BasePart<"file", FilePartMetadata> {
/**
* MIME type of the file (e.g., "image/jpeg", "application/pdf").
*/
readonly mediaType: string;
/**
* File data as a byte array.
*/
readonly data: Uint8Array;
}
/**
* Encoded representation of file parts for serialization.
*
* @category models
* @since 4.0.0
*/
export interface FilePartEncoded extends BasePartEncoded<"file", FilePartMetadata> {
/**
* MIME type of the file (e.g., "image/jpeg", "application/pdf").
*/
readonly mediaType: string;
/**
* File data as a base64 string.
*/
readonly data: string;
}
/**
* Represents provider-specific metadata that can be associated with a
* `FilePart` through module augmentation.
*
* @category configuration
* @since 4.0.0
*/
export interface FilePartMetadata extends ProviderMetadata {
}
/**
* Schema for validation and encoding of file parts.
*
* **Details**
*
* Decoded `data` is a `Uint8Array`; encoded `data` is a base64 string through
* `Schema.Uint8ArrayFromBase64`.
*
* @category schemas
* @since 4.0.0
*/
export declare const FilePart: Schema.Struct<{
readonly type: Schema.tag<"file">;
readonly mediaType: Schema.String;
readonly data: Schema.Uint8ArrayFromBase64;
readonly "~effect/ai/Content/Part": Schema.withDecodingDefaultKey<Schema.tag<"~effect/ai/Content/Part">>;
readonly metadata: Schema.withDecodingDefault<Schema.$Record<Schema.String, Schema.Codec<Schema.Json>>>;
}>;
/**
* Response part representing a document source reference used in generating the
* response.
*
* @category models
* @since 4.0.0
*/
export interface DocumentSourcePart extends BasePart<"source", DocumentSourcePartMetadata> {
/**
* Type discriminator for document sources.
*/
readonly sourceType: "document";
/**
* Unique identifier for the document.
*/
readonly id: string;
/**
* MIME type of the document.
*/
readonly mediaType: string;
/**
* Display title of the document.
*/
readonly title: string;
/**
* Optional filename of the document.
*/
readonly fileName?: string;
}
/**
* Encoded representation of document source parts for serialization.
*
* @category models
* @since 4.0.0
*/
export interface DocumentSourcePartEncoded extends BasePartEncoded<"source", DocumentSourcePartMetadata> {
/**
* Type discriminator for document sources.
*/
readonly sourceType: "document";
/**
* Unique identifier for the document.
*/
readonly id: string;
/**
* MIME type of the document.
*/
readonly mediaType: string;
/**
* Display title of the document.
*/
readonly title: string;
/**
* Optional filename of the document.
*/
readonly fileName?: string;
}
/**
* Represents provider-specific metadata that can be associated with a
* `DocumentSourcePart` through module augmentation.
*
* @category configuration
* @since 4.0.0
*/
export interface DocumentSourcePartMetadata extends ProviderMetadata {
}
/**
* Schema for validation and encoding of document source parts.
*
* **When to use**
*
* Use to validate or encode document source references returned as response
* content parts.
*
* **Details**
*
* Validates `type: "source"`, `sourceType: "document"`, required `id`,
* `mediaType`, and `title`, optional `fileName`, and the metadata fields
* inherited from response parts.
*
* @see {@link UrlSourcePart} for URL source references
* @see {@link DocumentSourcePartEncoded} for the encoded document source representation
*
* @category schemas
* @since 4.0.0
*/
export declare const DocumentSourcePart: Schema.Struct<{
readonly type: Schema.tag<"source">;
readonly sourceType: Schema.tag<"document">;
readonly id: Schema.String;
readonly mediaType: Schema.String;
readonly title: Schema.String;
readonly fileName: Schema.optionalKey<Schema.String>;
readonly "~effect/ai/Content/Part": Schema.withDecodingDefaultKey<Schema.tag<"~effect/ai/Content/Part">>;
readonly metadata: Schema.withDecodingDefault<Schema.$Record<Schema.String, Schema.Codec<Schema.Json>>>;
}>;
/**
* Response part representing a URL source reference used in generating the
* response.
*
* @category models
* @since 4.0.0
*/
export interface UrlSourcePart extends BasePart<"source", UrlSourcePartMetadata> {
/**
* Type discriminator for URL sources.
*/
readonly sourceType: "url";
/**
* Unique identifier for the URL.
*/
readonly id: string;
/**
* The URL that was referenced.
*/
readonly url: URL;
/**
* Display title of the URL content.
*/
readonly title: string;
}
/**
* Encoded representation of URL source parts for serialization.
*
* @category models
* @since 4.0.0
*/
export interface UrlSourcePartEncoded extends BasePartEncoded<"source", UrlSourcePartMetadata> {
/**
* Type discriminator for URL sources.
*/
readonly sourceType: "url";
/**
* Unique identifier for the URL.
*/
readonly id: string;
/**
* The URL that was referenced as a string.
*/
readonly url: string;
/**
* Display title of the URL content.
*/
readonly title: string;
}
/**
* Represents provider-specific metadata that can be associated with a
* `UrlSourcePart` through module augmentation.
*
* @category configuration
* @since 4.0.0
*/
export interface UrlSourcePartMetadata extends ProviderMetadata {
}
/**
* Schema for validation and encoding of url source parts.
*
* @category schemas
* @since 4.0.0
*/
export declare const UrlSourcePart: Schema.Struct<{
readonly type: Schema.tag<"source">;
readonly sourceType: Schema.tag<"url">;
readonly id: Schema.String;
readonly url: Schema.URLFromString;
readonly title: Schema.String;
readonly "~effect/ai/Content/Part": Schema.withDecodingDefaultKey<Schema.tag<"~effect/ai/Content/Part">>;
readonly metadata: Schema.withDecodingDefault<Schema.$Record<Schema.String, Schema.Codec<Schema.Json>>>;
}>;
/**
* Schema for HTTP request details associated with an AI response.
*
* **Details**
*
* Captures comprehensive information about the HTTP request made to the
* AI provider, enabling inspection of request metadata for debugging and
* observability purposes.
*
* **Example** (Describing an HTTP request)
*
* ```ts
* import type { Response } from "effect/unstable/ai"
*
* const requestDetails: typeof Response.HttpRequestDetails.Type = {
* method: "POST",
* url: "https://api.openai.com/v1/responses",
* urlParams: [],
* hash: undefined,
* headers: { "Content-Type": "application/json" }
* }
* ```
*
* @category schemas
* @since 4.0.0
*/
export declare const HttpRequestDetails: Schema.Struct<{
readonly method: Schema.Literals<readonly ["GET", "POST", "PATCH", "PUT", "DELETE", "HEAD", "OPTIONS", "TRACE"]>;
readonly url: Schema.String;
readonly urlParams: Schema.$Array<Schema.Tuple<readonly [Schema.String, Schema.String]>>;
readonly hash: Schema.UndefinedOr<Schema.String>;
readonly headers: Schema.$Record<Schema.String, Schema.Union<readonly [Schema.String, Schema.Redacted<Schema.String>]>>;
}>;
/**
* Schema for HTTP response details associated with an AI response.
*
* **Details**
*
* Captures essential information about the HTTP response received from
* the AI provider, including status codes and headers for debugging and
* observability purposes.
*
* **Example** (Describing an HTTP response)
*
* ```ts
* import type { Response } from "effect/unstable/ai"
*
* const responseDetails: typeof Response.HttpResponseDetails.Type = {
* status: 200,
* headers: {
* "Content-Type": "application/json",
* "X-Request-Id": "req_abc123"
* }
* }
* ```
*
* @category schemas
* @since 4.0.0
*/
export declare const HttpResponseDetails: Schema.Struct<{
readonly status: Schema.Number;
readonly headers: Schema.$Record<Schema.String, Schema.Union<readonly [Schema.String, Schema.Redacted<Schema.String>]>>;
}>;
/**
* Response part containing metadata about the large language model response.
*
* **Example** (Creating a metadata part)
*
* ```ts
* import { DateTime } from "effect"
* import { Response } from "effect/unstable/ai"
*
* const metadataPart: Response.ResponseMetadataPart = Response.makePart(
* "response-metadata",
* {
* id: "resp_123",
* modelId: "gpt-4",
* timestamp: DateTime.nowUnsafe(),
* request: undefined
* }
* )
* ```
*
* @category models
* @since 4.0.0
*/
export interface ResponseMetadataPart extends BasePart<"response-metadata", ResponseMetadataPartMetadata> {
/**
* Optional unique identifier for this specific response.
*/
readonly id: string | undefined;
/**
* Optional identifier of the AI model that generated the response.
*/
readonly modelId: string | undefined;
/**
* Optional timestamp when the response was generated.
*/
readonly timestamp: DateTime.Utc | undefined;
/**
* Optional HTTP request details for the request made to the AI provider.
*/
readonly request: typeof HttpRequestDetails.Type | undefined;
}
/**
* Encoded representation of response metadata parts for serialization.
*
* @category models
* @since 4.0.0
*/
export interface ResponseMetadataPartEncoded extends BasePartEncoded<"response-metadata", ResponseMetadataPartMetadata> {
/**
* Optional unique identifier for this specific response.
*/
readonly id?: string | undefined;
/**
* Optional identifier of the AI model that generated the response.
*/
readonly modelId?: string | undefined;
/**
* Optional timestamp when the response was generated.
*/
readonly timestamp?: string | undefined;
/**
* Optional HTTP request details for the request made to the AI provider.
*/
readonly request?: typeof HttpRequestDetails.Encoded | undefined;
}
/**
* Represents provider-specific metadata that can be associated with a
* `ResponseMetadataPart` through module augmentation.
*
* @category configuration
* @since 4.0.0
*/
export interface ResponseMetadataPartMetadata extends ProviderMetadata {
}
/**
* Schema for validation and encoding of response metadata parts.
*
* @category schemas
* @since 4.0.0
*/
export declare const ResponseMetadataPart: Schema.Struct<{
readonly type: Schema.tag<"response-metadata">;
readonly id: Schema.UndefinedOr<Schema.String>;
readonly modelId: Schema.UndefinedOr<Schema.String>;
readonly timestamp: Schema.UndefinedOr<Schema.DateTimeUtcFromString>;
readonly request: Schema.UndefinedOr<typeof HttpRequestDetails>;
readonly "~effect/ai/Content/Part": Schema.withDecodingDefaultKey<Schema.tag<"~effect/ai/Content/Part">>;
readonly metadata: Schema.withDecodingDefault<Schema.$Record<Schema.String, Schema.Codec<Schema.Json>>>;
}>;
/**
* Represents the reason why a model finished generation of a response.
*
* **Details**
*
* Possible finish reasons:
* - `"stop"`: The model generated a stop sequence.
* - `"length"`: The model exceeded its token budget.
* - `"content-filter"`: The model generated content which violated a content filter.
* - `"tool-calls"`: The model triggered a tool call.
* - `"error"`: The model encountered an error.
* - `"pause"`: The model requested to pause execution.
* - `"other"`: The model stopped for a reason not supported by this protocol.
* - `"unknown"`: The model did not specify a finish reason.
*
* @category models
* @since 4.0.0
*/
export declare const FinishReason: Schema.Literals<[
"stop",
"length",
"content-filter",
"tool-calls",
"error",
"pause",
"other",
"unknown"
]>;
/**
* Type of the reason why a model stopped generating a response.
*
* **Details**
*
* Values include normal stops, token-limit stops, content filtering,
* tool-call pauses, provider errors, and unknown provider-specific finish
* reasons.
*
* @category models
* @since 4.0.0
*/
export type FinishReason = typeof FinishReason.Type;
declare const Usage_base: Schema.Class<Usage, Schema.Struct<{
/**
* Information about input (i.e. prompt) token utilization.
*/
readonly inputTokens: Schema.Struct<{
/**
* The number of non-cached input (i.e. prompt) tokens used.
*/
readonly uncached: Schema.UndefinedOr<Schema.Number>;
/**
* The total of number of input (i.e. prompt) tokens used.
*/
readonly total: Schema.UndefinedOr<Schema.Number>;
/**
* The number of cached input (i.e. prompt) tokens read.
*/
readonly cacheRead: Schema.UndefinedOr<Schema.Number>;
/**
* The number of cached input (i.e. prompt) tokens written.
*/
readonly cacheWrite: Schema.UndefinedOr<Schema.Number>;
}>;
/**
* Information about the output (i.e. response) tokens used.
*/
readonly outputTokens: Schema.Struct<{
/**
* The total of number of output (i.e. response) tokens used.
*/
readonly total: Schema.UndefinedOr<Schema.Number>;
/**
* The number of text tokens used.
*/
readonly text: Schema.UndefinedOr<Schema.Number>;
/**
* The number of reasoning tokens used.
*/
readonly reasoning: Schema.UndefinedOr<Schema.Number>;
}>;
}>, {}>;
/**
* Represents usage information for a request to a large language model provider.
*
* **Details**
*
* If the model provider returns additional usage information than what is
* specified here, you can generally find that information under the provider
* metadata of the finish part of the response.
*
* @category models
* @since 4.0.0
*/
export declare class Usage extends Usage_base {
}
/**
* Response part indicating the completion of a response generation.
*
* **Example** (Creating a finish part)
*
* ```ts
* import { Response } from "effect/unstable/ai"
*
* const finishPart: Response.FinishPart = Response.makePart("finish", {
* reason: "stop",
* usage: new Response.Usage({
* inputTokens: {
* uncached: undefined,
* total: 50,
* cacheRead: undefined,
* cacheWrite: undefined
* },
* outputTokens: {
* total: 25,
* text: undefined,
* reasoning: undefined
* }
* }),
* response: undefined
* })
* ```
*
* @category models
* @since 4.0.0
*/
export interface FinishPart extends BasePart<"finish", FinishPartMetadata> {
/**
* The reason why the model finished generating the response.
*/
readonly reason: FinishReason;
/**
* Token usage statistics for the request.
*/
readonly usage: Usage;
/**
* Optional HTTP response details from the AI provider.
*/
readonly response: typeof HttpResponseDetails.Type | undefined;
}
/**
* Encoded representation of finish parts for serialization.
*
* @category models
* @since 4.0.0
*/
export interface FinishPartEncoded extends BasePartEncoded<"finish", FinishPartMetadata> {
/**
* The reason why the model finished generating the response.
*/
readonly reason: typeof FinishReason.Encoded;
/**
* Token usage statistics for the request.
*/
readonly usage: typeof Usage.Encoded;
/**
* Optional HTTP response details from the AI provider.
*/
readonly response?: typeof HttpResponseDetails.Encoded | undefined;
}
/**
* Represents provider-specific metadata that can be associated with a
* `FinishPart` through module augmentation.
*
* @category configuration
* @since 4.0.0
*/
export interface FinishPartMetadata extends ProviderMetadata {
}
/**
* Schema for finish response parts.
*
* **Details**
*
* Validates `type: "finish"`, `reason` through `FinishReason`, `usage`
* through `Usage`, and optional provider HTTP response details.
*
* @category schemas
* @since 4.0.0
*/
export declare const FinishPart: Schema.Struct<{
readonly type: Schema.tag<"finish">;
readonly reason: Schema.Literals<[
"stop",
"length",
"content-filter",
"tool-calls",
"error",
"pause",
"other",
"unknown"
]>;
readonly usage: typeof Usage;
readonly response: Schema.UndefinedOr<typeof HttpResponseDetails>;
readonly "~effect/ai/Content/Part": Schema.withDecodingDefaultKey<Schema.tag<"~effect/ai/Content/Part">>;
readonly metadata: Schema.withDecodingDefault<Schema.$Record<Schema.String, Schema.Codec<Schema.Json>>>;
}>;
/**
* Response part indicating that an error occurred generating the response.
*
* **Example** (Creating an error part)
*
* ```ts
* import { Response } from "effect/unstable/ai"
*
* const errorPart: Response.ErrorPart = Response.makePart("error", {
* error: new Error("boom")
* })
* ```
*
* @category models
* @since 4.0.0
*/
export interface ErrorPart extends BasePart<"error", ErrorPartMetadata> {
readonly error: unknown;
}
/**
* Encoded representation of error parts for serialization.
*
* @category models
* @since 4.0.0
*/
export interface ErrorPartEncoded extends BasePartEncoded<"error", ErrorPartMetadata> {
readonly error: unknown;
}
/**
* Represents provider-specific metadata that can be associated with a
* `ErrorPart` through module augmentation.
*
* @category configuration
* @since 4.0.0
*/
export interface ErrorPartMetadata extends ProviderMetadata {
}
/**
* Schema for validation and encoding of error parts.
*
* **Details**
*
* Validates and encodes error parts with `type: "error"` and an `error` payload
* kept as `unknown`.
*
* **Gotchas**
*
* The decoded `error` value is not guaranteed to be an `Error`; narrow it before
* reading `Error`-specific fields.
*
* @category schemas
* @since 4.0.0
*/
export declare const ErrorPart: Schema.Struct<{
readonly type: Schema.tag<"error">;
readonly error: Schema.Unknown;
readonly "~effect/ai/Content/Part": Schema.withDecodingDefaultKey<Schema.tag<"~effect/ai/Content/Part">>;
readonly metadata: Schema.withDecodingDefault<Schema.$Record<Schema.String, Schema.Codec<Schema.Json>>>;
}>;
export {};
//# sourceMappingURL=Response.d.ts.map

Xet Storage Details

Size:
59 kB
·
Xet hash:
de2e74eff24f76b7a35274089856e5eee1a5ba02f32705a593492e11c84f1a3c

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.