| import * as Context from "../../Context.ts"; | |
| import * as Duration from "../../Duration.ts"; | |
| import * as Effect from "../../Effect.ts"; | |
| import * as Layer from "../../Layer.ts"; | |
| import * as Ref from "../../Ref.ts"; | |
| import * as Schema from "../../Schema.ts"; | |
| import * as Stream from "../../Stream.ts"; | |
| import type { NoExcessProperties } from "../../Types.ts"; | |
| import type { PersistenceError } from "../persistence/Persistence.ts"; | |
| import { BackingPersistence } from "../persistence/Persistence.ts"; | |
| import * as AiError from "./AiError.ts"; | |
| import * as LanguageModel from "./LanguageModel.ts"; | |
| import * as Prompt from "./Prompt.ts"; | |
| import type * as Response from "./Response.ts"; | |
| import type * as Tool from "./Tool.ts"; | |
| declare const Chat_base: Context.ServiceClass<Chat, "effect/ai/Chat", Service>; | |
| /** | |
| * Service tag for stateful AI conversation sessions. | |
| * | |
| * **When to use** | |
| * | |
| * Use to access or provide conversational AI sessions through the Effect | |
| * context. | |
| * | |
| * **Details** | |
| * | |
| * This tag provides access to chat functionality throughout your application, | |
| * enabling persistent conversational AI interactions with full context | |
| * management. | |
| * | |
| * **Example** (Using the Chat service) | |
| * | |
| * ```ts | |
| * import { Effect } from "effect" | |
| * import { Chat } from "effect/unstable/ai" | |
| * | |
| * const program = Effect.gen(function*() { | |
| * const chat = yield* Chat.empty | |
| * const response = yield* chat.generateText({ | |
| * prompt: "Explain quantum computing in simple terms" | |
| * }) | |
| * return response.content | |
| * }) | |
| * ``` | |
| * | |
| * @category services | |
| * @since 4.0.0 | |
| */ | |
| export declare class Chat extends Chat_base { | |
| } | |
| /** | |
| * Represents the interface that the `Chat` service provides. | |
| * | |
| * **When to use** | |
| * | |
| * Use as the service contract for code that receives or constructs a stateful | |
| * chat session and needs history, export, text generation, streaming, and | |
| * structured-output operations. | |
| * | |
| * @see {@link Chat} for the context tag that provides this service | |
| * @see {@link Persisted} for the persistence-backed extension | |
| * | |
| * @category models | |
| * @since 4.0.0 | |
| */ | |
| export interface Service { | |
| /** | |
| * Reference to the chat history. | |
| * | |
| * **Details** | |
| * | |
| * Provides direct access to the conversation history for advanced use cases | |
| * like custom history manipulation or inspection. | |
| * | |
| * **Example** (Inspecting chat history) | |
| * | |
| * ```ts | |
| * import { Effect, Ref } from "effect" | |
| * import { Chat } from "effect/unstable/ai" | |
| * | |
| * const inspectHistory = Effect.gen(function*() { | |
| * const chat = yield* Chat.empty | |
| * const currentHistory = yield* Ref.get(chat.history) | |
| * console.log("Current conversation:", currentHistory) | |
| * return currentHistory | |
| * }) | |
| * ``` | |
| */ | |
| readonly history: Ref.Ref<Prompt.Prompt>; | |
| /** | |
| * Exports the chat history into a structured format. | |
| * | |
| * **Details** | |
| * | |
| * Returns the complete conversation history as a structured object | |
| * that can be stored, transmitted, or processed by other systems. | |
| * | |
| * **Example** (Exporting chat history) | |
| * | |
| * ```ts | |
| * import { Effect } from "effect" | |
| * import { Chat } from "effect/unstable/ai" | |
| * | |
| * const saveChat = Effect.gen(function*() { | |
| * const chat = yield* Chat.empty | |
| * yield* chat.generateText({ prompt: "Hello!" }) | |
| * | |
| * const exportedData = yield* chat.export | |
| * | |
| * // Save to database or file system | |
| * return exportedData | |
| * }) | |
| * ``` | |
| */ | |
| readonly export: Effect.Effect<unknown, AiError.AiError>; | |
| /** | |
| * Exports the chat history as a JSON string. | |
| * | |
| * **Details** | |
| * | |
| * Provides a convenient way to serialize the entire conversation | |
| * for storage or transmission in JSON format. | |
| * | |
| * **Example** (Exporting chat history as JSON) | |
| * | |
| * ```ts | |
| * import { Effect } from "effect" | |
| * import { Chat } from "effect/unstable/ai" | |
| * | |
| * const backupChat = Effect.gen(function*() { | |
| * const chat = yield* Chat.empty | |
| * | |
| * yield* chat.generateText({ prompt: "Explain photosynthesis" }) | |
| * | |
| * const jsonBackup = yield* chat.exportJson | |
| * | |
| * yield* Effect.sync(() => localStorage.setItem("chat-backup", jsonBackup)) | |
| * | |
| * return jsonBackup | |
| * }) | |
| * ``` | |
| */ | |
| readonly exportJson: Effect.Effect<string, AiError.AiError>; | |
| /** | |
| * Generate text using a language model for the specified prompt. | |
| * | |
| * **Details** | |
| * | |
| * If a toolkit is specified, the language model will have access to tools | |
| * for function calling and enhanced capabilities. Both input and output | |
| * messages are automatically added to the chat history. | |
| * | |
| * **Example** (Generating chat responses) | |
| * | |
| * ```ts | |
| * import { Effect } from "effect" | |
| * import { Chat } from "effect/unstable/ai" | |
| * | |
| * const chatWithAI = Effect.gen(function*() { | |
| * const chat = yield* Chat.empty | |
| * | |
| * const response1 = yield* chat.generateText({ | |
| * prompt: "What is the capital of France?" | |
| * }) | |
| * | |
| * const response2 = yield* chat.generateText({ | |
| * prompt: "What's the population of that city?" | |
| * }) | |
| * | |
| * return [response1.content, response2.content] | |
| * }) | |
| * ``` | |
| */ | |
| readonly generateText: { | |
| <Options extends NoExcessProperties<LanguageModel.GenerateTextOptions<{}>, Options>>(options: Options & { | |
| readonly toolkit?: undefined; | |
| } & LanguageModel.GenerateTextOptions<{}>): Effect.Effect<LanguageModel.GenerateTextResponse<{}>, LanguageModel.ExtractError<Options>, LanguageModel.LanguageModel | LanguageModel.ExtractServices<Options>>; | |
| <Tools extends Record<string, Tool.Any>, Options extends NoExcessProperties<LanguageModel.GenerateTextOptions<Tools> & { | |
| readonly toolkit: LanguageModel.ToolkitInput<Tools>; | |
| }, Options>>(options: Options & LanguageModel.GenerateTextOptions<Tools> & { | |
| readonly toolkit: LanguageModel.ToolkitInput<Tools>; | |
| }): Effect.Effect<LanguageModel.GenerateTextResponse<Tools>, LanguageModel.ExtractError<Options>, LanguageModel.LanguageModel | LanguageModel.ExtractServices<Options>>; | |
| <Options extends { | |
| readonly toolkit: LanguageModel.ToolkitOption<any>; | |
| } & NoExcessProperties<LanguageModel.GenerateTextOptions<any>, Options>>(options: Options & LanguageModel.GenerateTextOptions<LanguageModel.ExtractTools<Options>> & { | |
| readonly toolkit: Options["toolkit"]; | |
| }): Effect.Effect<LanguageModel.GenerateTextResponse<LanguageModel.ExtractTools<Options>>, LanguageModel.ExtractError<Options>, LanguageModel.LanguageModel | LanguageModel.ExtractServices<Options>>; | |
| }; | |
| /** | |
| * Generate text using a language model with streaming output. | |
| * | |
| * **Details** | |
| * | |
| * Returns a stream of response parts that are emitted as soon as they're | |
| * available from the model. Supports tool calling and maintains chat history. | |
| * | |
| * **Example** (Streaming chat responses) | |
| * | |
| * ```ts | |
| * import { Effect, Stream } from "effect" | |
| * import { Chat } from "effect/unstable/ai" | |
| * | |
| * const streamingChat = Effect.gen(function*() { | |
| * const chat = yield* Chat.empty | |
| * | |
| * const stream = yield* chat.streamText({ | |
| * prompt: "Write a short story about space exploration" | |
| * }) | |
| * | |
| * yield* Stream.runForEach(stream, (part) => | |
| * part.type === "text-delta" | |
| * ? Effect.sync(() => process.stdout.write(part.delta)) | |
| * : Effect.void) | |
| * }) | |
| * ``` | |
| */ | |
| readonly streamText: { | |
| <Options extends NoExcessProperties<LanguageModel.GenerateTextOptions<{}>, Options>>(options: Options & { | |
| readonly toolkit?: undefined; | |
| } & LanguageModel.GenerateTextOptions<{}>): Stream.Stream<Response.StreamPart<{}>, LanguageModel.ExtractError<Options>, LanguageModel.LanguageModel | LanguageModel.ExtractServices<Options>>; | |
| <Tools extends Record<string, Tool.Any>, Options extends NoExcessProperties<LanguageModel.GenerateTextOptions<Tools> & { | |
| readonly toolkit: LanguageModel.ToolkitInput<Tools>; | |
| }, Options>>(options: Options & LanguageModel.GenerateTextOptions<Tools> & { | |
| readonly toolkit: LanguageModel.ToolkitInput<Tools>; | |
| }): Stream.Stream<Response.StreamPart<Tools>, LanguageModel.ExtractError<Options>, LanguageModel.LanguageModel | LanguageModel.ExtractServices<Options>>; | |
| <Options extends { | |
| readonly toolkit: LanguageModel.ToolkitOption<any>; | |
| } & NoExcessProperties<LanguageModel.GenerateTextOptions<any>, Options>>(options: Options & LanguageModel.GenerateTextOptions<LanguageModel.ExtractTools<Options>> & { | |
| readonly toolkit: Options["toolkit"]; | |
| }): Stream.Stream<Response.StreamPart<LanguageModel.ExtractTools<Options>>, LanguageModel.ExtractError<Options>, LanguageModel.LanguageModel | LanguageModel.ExtractServices<Options>>; | |
| }; | |
| /** | |
| * Generate a structured object using a language model and schema. | |
| * | |
| * **Details** | |
| * | |
| * Forces the model to return data that conforms to the specified schema, | |
| * enabling structured data extraction and type-safe responses. The | |
| * conversation history is maintained across calls. | |
| * | |
| * **Example** (Generating structured objects) | |
| * | |
| * ```ts | |
| * import { Effect, Schema } from "effect" | |
| * import { Chat } from "effect/unstable/ai" | |
| * | |
| * const ContactSchema = Schema.Struct({ | |
| * name: Schema.String, | |
| * email: Schema.String, | |
| * phone: Schema.optional(Schema.String) | |
| * }) | |
| * | |
| * const extractContact = Effect.gen(function*() { | |
| * const chat = yield* Chat.empty | |
| * | |
| * const contact = yield* chat.generateObject({ | |
| * prompt: "Extract contact info: John Doe, john@example.com, 555-1234", | |
| * schema: ContactSchema | |
| * }) | |
| * | |
| * console.log(contact.object) | |
| * // { name: "John Doe", email: "john@example.com", phone: "555-1234" } | |
| * | |
| * return contact.object | |
| * }) | |
| * ``` | |
| */ | |
| readonly generateObject: <ObjectEncoded extends Record<string, any>, ObjectSchema extends Schema.Encoder<ObjectEncoded, unknown>, Options extends NoExcessProperties<LanguageModel.GenerateObjectOptions<any, ObjectSchema>, Options>>(options: Options & LanguageModel.GenerateObjectOptions<LanguageModel.ExtractTools<Options>, ObjectSchema>) => Effect.Effect<LanguageModel.GenerateObjectResponse<LanguageModel.ExtractTools<Options>, ObjectSchema["Type"]>, LanguageModel.ExtractError<Options>, LanguageModel.ExtractServices<Options> | ObjectSchema["DecodingServices"] | LanguageModel.LanguageModel>; | |
| } | |
| /** | |
| * Creates a new Chat service with empty conversation history. | |
| * | |
| * **When to use** | |
| * | |
| * Use when you need to start a fresh chat session without initial context or | |
| * system prompts. | |
| * | |
| * **Example** (Creating an empty chat) | |
| * | |
| * ```ts | |
| * import { Effect } from "effect" | |
| * import { Chat } from "effect/unstable/ai" | |
| * | |
| * const freshChat = Effect.gen(function*() { | |
| * const chat = yield* Chat.empty | |
| * | |
| * const response = yield* chat.generateText({ | |
| * prompt: "Hello! Can you introduce yourself?" | |
| * }) | |
| * | |
| * console.log(response.content) | |
| * | |
| * return chat | |
| * }) | |
| * ``` | |
| * | |
| * @category constructors | |
| * @since 4.0.0 | |
| */ | |
| export declare const empty: Effect.Effect<Service>; | |
| /** | |
| * Creates a new Chat service from an initial prompt. | |
| * | |
| * **Details** | |
| * | |
| * This is the primary constructor for creating chat instances. It initializes | |
| * a new conversation with the provided prompt as the starting context. | |
| * | |
| * **Example** (Creating a chat from a system prompt) | |
| * | |
| * ```ts | |
| * import { Effect } from "effect" | |
| * import { Chat } from "effect/unstable/ai" | |
| * | |
| * const chatWithSystemPrompt = Effect.gen(function*() { | |
| * const chat = yield* Chat.fromPrompt([{ | |
| * role: "system", | |
| * content: "You are a helpful assistant specialized in mathematics." | |
| * }]) | |
| * | |
| * const response = yield* chat.generateText({ | |
| * prompt: "What is 2+2?" | |
| * }) | |
| * | |
| * return response.content | |
| * }) | |
| * ``` | |
| * | |
| * **Example** (Restoring chat history from a prompt) | |
| * | |
| * ```ts | |
| * import { Effect } from "effect" | |
| * import { Chat } from "effect/unstable/ai" | |
| * | |
| * // Initialize with conversation history | |
| * const existingChat = Effect.gen(function*() { | |
| * const chat = yield* Chat.fromPrompt([ | |
| * { | |
| * role: "user", | |
| * content: [{ type: "text", text: "What's the weather like?" }] | |
| * }, | |
| * { | |
| * role: "assistant", | |
| * content: [{ type: "text", text: "I don't have access to weather data." }] | |
| * }, | |
| * { | |
| * role: "user", | |
| * content: [{ type: "text", text: "Can you help me with coding?" }] | |
| * } | |
| * ]) | |
| * | |
| * const response = yield* chat.generateText({ | |
| * prompt: "I need help with TypeScript" | |
| * }) | |
| * | |
| * return response | |
| * }) | |
| * ``` | |
| * | |
| * @category constructors | |
| * @since 4.0.0 | |
| */ | |
| export declare const fromPrompt: (prompt: Prompt.RawInput) => Effect.Effect<Service, never, never>; | |
| /** | |
| * Creates a Chat service from previously exported chat data. | |
| * | |
| * **Details** | |
| * | |
| * Restores a chat session from structured data that was previously exported | |
| * using the `export` method. Useful for persisting and restoring conversation | |
| * state. | |
| * | |
| * **Example** (Restoring chat data) | |
| * | |
| * ```ts | |
| * import { Effect, Ref } from "effect" | |
| * import { Chat } from "effect/unstable/ai" | |
| * | |
| * const restoreChat = Effect.gen(function*() { | |
| * const originalChat = yield* Chat.fromPrompt([ | |
| * { | |
| * role: "user", | |
| * content: "Which library are we using?" | |
| * }, | |
| * { | |
| * role: "assistant", | |
| * content: "The project uses Effect." | |
| * } | |
| * ]) | |
| * | |
| * const exported = yield* originalChat.export | |
| * const restoredChat = yield* Chat.fromExport(exported) | |
| * const restoredHistory = yield* Ref.get(restoredChat.history) | |
| * | |
| * console.log(restoredHistory.content.map((message) => message.role)) | |
| * // ["user", "assistant"] | |
| * | |
| * const restoredResponse = restoredHistory.content[1] | |
| * if (restoredResponse?.role === "assistant") { | |
| * const restoredText = restoredResponse.content[0] | |
| * if (restoredText?.type === "text") { | |
| * console.log(restoredText.text) | |
| * // "The project uses Effect." | |
| * } | |
| * } | |
| * }) | |
| * ``` | |
| * | |
| * @category constructors | |
| * @since 4.0.0 | |
| */ | |
| export declare const fromExport: (data: unknown) => Effect.Effect<Service, Schema.SchemaError>; | |
| /** | |
| * Creates a Chat service from previously exported JSON chat data. | |
| * | |
| * **Details** | |
| * | |
| * Restores a chat session from JSON string that was previously exported | |
| * using the `exportJson` method. This is the most convenient way to | |
| * persist and restore chat sessions to/from storage systems. | |
| * | |
| * **Example** (Restoring chat history from JSON) | |
| * | |
| * ```ts | |
| * import { Effect } from "effect" | |
| * import { Chat } from "effect/unstable/ai" | |
| * | |
| * const restoreFromJson = Effect.gen(function*() { | |
| * // Load JSON from localStorage or file system | |
| * const jsonData = localStorage.getItem("my-chat-backup") | |
| * if (!jsonData) return yield* Chat.empty | |
| * | |
| * const restoredChat = yield* Chat.fromJson(jsonData) | |
| * | |
| * // Chat history is now restored | |
| * const response = yield* restoredChat.generateText({ | |
| * prompt: "What were we talking about?" | |
| * }) | |
| * | |
| * return response | |
| * }).pipe( | |
| * Effect.catchTag("SchemaError", (error) => { | |
| * console.log("Invalid JSON format:", error.message) | |
| * return Chat.empty // Fallback to empty chat | |
| * }) | |
| * ) | |
| * ``` | |
| * | |
| * @category constructors | |
| * @since 4.0.0 | |
| */ | |
| export declare const fromJson: (data: string) => Effect.Effect<Service, Schema.SchemaError>; | |
| declare const ChatNotFoundError_base: Schema.Class<ChatNotFoundError, Schema.Struct<{ | |
| readonly _tag: Schema.tag<"ChatNotFoundError">; | |
| readonly chatId: Schema.String; | |
| }>, import("../../Cause.ts").YieldableError>; | |
| /** | |
| * Represents an error that occurs when attempting to retrieve a persisted `Chat` that | |
| * does not exist in the backing persistence store. | |
| * | |
| * **When to use** | |
| * | |
| * Use to represent a missing persisted conversation when lookup by id cannot | |
| * find stored history. | |
| * | |
| * @category errors | |
| * @since 4.0.0 | |
| */ | |
| export declare class ChatNotFoundError extends ChatNotFoundError_base { | |
| } | |
| declare const Persistence_base: Context.ServiceClass<Persistence, "effect/ai/Chat/Persisted", Persistence.Service>; | |
| /** | |
| * Service tag for persistence-backed AI conversation storage. | |
| * | |
| * **When to use** | |
| * | |
| * Use to provide the storage operations needed by persisted conversation | |
| * sessions. | |
| * | |
| * @category services | |
| * @since 4.0.0 | |
| */ | |
| export declare class Persistence extends Persistence_base { | |
| } | |
| /** | |
| * Namespace containing the service contract for chat persistence. | |
| * | |
| * @since 4.0.0 | |
| */ | |
| export declare namespace Persistence { | |
| /** | |
| * Represents the backing persistence for a persisted `Chat`. Allows for | |
| * creating and retrieving chats that have been saved to a persistence store. | |
| * | |
| * @category models | |
| * @since 4.0.0 | |
| */ | |
| interface Service { | |
| /** | |
| * Attempts to retrieve the persisted chat from the backing persistence | |
| * store with the specified chat identifer. If the chat does not exist in | |
| * the persistence store, a `ChatNotFoundError` will be returned. | |
| */ | |
| readonly get: (chatId: string, options?: { | |
| readonly timeToLive?: Duration.Input | undefined; | |
| }) => Effect.Effect<Persisted, ChatNotFoundError | PersistenceError>; | |
| /** | |
| * Attempts to retrieve the persisted chat from the backing persistence | |
| * store with the specified chat identifer. If the chat does not exist in | |
| * the persistence store, an empty chat will be created, saved, and | |
| * returned. | |
| */ | |
| readonly getOrCreate: (chatId: string, options?: { | |
| readonly timeToLive?: Duration.Input | undefined; | |
| }) => Effect.Effect<Persisted, AiError.AiError | PersistenceError>; | |
| } | |
| } | |
| /** | |
| * Represents a `Chat` that is backed by persistence. | |
| * | |
| * **Details** | |
| * | |
| * When calling a text generation method (e.g. `generateText`), the previous | |
| * chat history as well as the relevent response parts will be saved to the | |
| * backing persistence store. | |
| * | |
| * @category models | |
| * @since 4.0.0 | |
| */ | |
| export interface Persisted extends Service { | |
| /** | |
| * The identifier for the chat in the backing persistence store. | |
| */ | |
| readonly id: string; | |
| /** | |
| * Saves the current chat history into the backing persistence store. | |
| */ | |
| readonly save: Effect.Effect<void, AiError.AiError | PersistenceError>; | |
| } | |
| /** | |
| * Creates a new chat persistence service. | |
| * | |
| * **When to use** | |
| * | |
| * Use when you need programmatic persisted chat creation and retrieval backed | |
| * by the current `BackingPersistence`. | |
| * | |
| * **Details** | |
| * | |
| * The provided store identifier will be used to indicate which "store" the | |
| * backing persistence should load chats from. | |
| * | |
| * @see {@link layerPersisted} for the `Layer`-based constructor | |
| * | |
| * @category constructors | |
| * @since 4.0.0 | |
| */ | |
| export declare const makePersisted: (options: { | |
| readonly storeId: string; | |
| }) => Effect.Effect<Persistence.Service, never, import("../../Scope.ts").Scope | BackingPersistence>; | |
| /** | |
| * Creates a `Layer` for a new chat persistence service. | |
| * | |
| * **When to use** | |
| * | |
| * Use to provide `Chat.Persistence` from a configured `BackingPersistence` when | |
| * your application needs persisted chat sessions backed by a named store. | |
| * | |
| * **Details** | |
| * | |
| * The provided store identifier will be used to indicate which "store" the | |
| * backing persistence should load chats from. | |
| * | |
| * @see {@link makePersisted} for the effect constructor when building the service directly instead of providing it as a layer | |
| * | |
| * @category constructors | |
| * @since 4.0.0 | |
| */ | |
| export declare const layerPersisted: (options: { | |
| readonly storeId: string; | |
| }) => Layer.Layer<Persistence, never, BackingPersistence>; | |
| export {}; | |
| //# sourceMappingURL=Chat.d.ts.map |
Xet Storage Details
- Size:
- 20.2 kB
- Xet hash:
- a7c44df52ce01b90fcedcbd2a3225dcc837c45701b876ff504aca0adf2856805
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.