Skip to content
Effect Days 2026 Get your ticket

@effect/ai-openai

0.41.0

Patch Changes

  • Updated dependencies [fffdee0]:
    • effect@3.22.0
    • @effect/ai@0.37.0
    • @effect/experimental@0.61.0
    • @effect/platform@0.97.0

0.40.2

Patch Changes

  • #6297 3e59443 Thanks @shtse8! - Map the OpenAI Responses max_output_tokens finish reason to length instead of falling through to unknown.

  • Updated dependencies [307d54a, d95868a, 95c7d2e, d24511f, 99d5575]:

    • effect@3.21.5
    • @effect/platform@0.96.3

0.40.1

Patch Changes

  • #6281 2e01a9e Thanks @mollyegibson! - Skip unrecognized or malformed events in OpenAI streaming responses instead of aborting the whole stream.

    OpenAI emits events that are absent from the generated OpenAPI schema — most visibly {"type":"keepalive"} SSE heartbeats during long Responses turns (reasoning, tool calls, web search). These previously failed strict per-event decoding with MalformedOutput and tore down the entire in-progress stream. Such frames are now skipped (logged at debug level) and the stream continues; every recognized event is still decoded as before.

  • Updated dependencies [8222963, 7e00169]:

    • effect@3.21.4
    • @effect/platform@0.96.2

0.40.0

Patch Changes

0.39.2

Patch Changes

  • 49c5acd Thanks @mollyegibson! - Previously, setting strict: false on OpenAiLanguageModel config caused a 400 “Unknown parameter: ‘strict’” response from the OpenAI Responses API, because the flag was spread into the top-level request body instead of being consumed only by the tool and response_format schema builders. The strict flag is now stripped from the request body while still controlling strict on tool schemas (prepareTools) and json_schema response formats (prepareResponseFormat).

0.39.1

Patch Changes

  • 47f0439 Thanks @aayushbaluni! - fix(ai-openai): deduplicate response.output items to prevent invalid JSON concatenation

  • #6187 b63fdb8 Thanks @alex-dixon! - Change ‘in-memory’ to ‘in_memory’ in prompt cache enums

  • #6174 739f077 Thanks @mollyegibson! - Make ‘strict’ mode configurable for tool definitions passed to the OpenAI model

  • Updated dependencies [f99048e]:

    • effect@3.21.1

0.39.0

Patch Changes

0.38.0

Patch Changes

0.37.2

Patch Changes

  • #5949 577f839 Thanks @thewilkybarkid! - Ensure OpenAI headers are redacted

0.37.1

Patch Changes

  • #5938 72f61be Thanks @tensor2077! - Fix streaming decode: response.output_item.added may emit web_search_call without action (when status=“in_progress”).

  • Updated dependencies [65e9e35, ee69cd7, 488d6e8, ba9e790]:

    • @effect/platform@0.94.1
    • effect@3.19.14
    • @effect/ai@0.33.1

0.37.0

Patch Changes

  • Updated dependencies [77eeb86, ff7053f, 287c32c]:
    • effect@3.19.13
    • @effect/platform@0.94.0
    • @effect/ai@0.33.0
    • @effect/experimental@0.58.0

0.36.0

Minor Changes

  • #5850 1ddd4e4 Thanks @IMax153! - Update the generated OpenAI schema definitions

Patch Changes

  • Updated dependencies [96c9537]:
    • @effect/experimental@0.57.10

0.35.0

Patch Changes

  • Updated dependencies [3c15d5f, 3863fa8, 2a03c76, 24a1685]:
    • effect@3.19.0
    • @effect/platform@0.93.0
    • @effect/ai@0.32.0
    • @effect/experimental@0.57.0

0.34.0

Minor Changes

  • #5621 4c3bdfb Thanks @IMax153! - Remove Either / EitherEncoded from tool call results.

    Specifically, the encoding of tool call results as an Either / EitherEncoded has been removed and is replaced by encoding the tool call success / failure directly into the result property.

    To allow type-safe discrimination between a tool call result which was a success vs. one that was a failure, an isFailure property has also been added to the "tool-result" part. If isFailure is true, then the tool call handler result was an error.

    import * as AnthropicClient from "@effect/ai-anthropic/AnthropicClient"
    import * as AnthropicLanguageModel from "@effect/ai-anthropic/AnthropicLanguageModel"
    import * as LanguageModel from "@effect/ai/LanguageModel"
    import * as Tool from "@effect/ai/Tool"
    import * as Toolkit from "@effect/ai/Toolkit"
    import * as NodeHttpClient from "@effect/platform-node/NodeHttpClient"
    import { Config, Effect, Layer, Schema, Stream } from "effect"
    const Claude = AnthropicLanguageModel.model("claude-4-sonnet-20250514")
    const MyTool = Tool.make("MyTool", {
    description: "An example of a tool with success and failure types",
    failureMode: "return", // Return errors in the response
    parameters: { bar: Schema.Number },
    success: Schema.Number,
    failure: Schema.Struct({ reason: Schema.Literal("reason-1", "reason-2") })
    })
    const MyToolkit = Toolkit.make(MyTool)
    const MyToolkitLayer = MyToolkit.toLayer({
    MyTool: () => Effect.succeed(42)
    })
    const program = LanguageModel.streamText({
    prompt: "Tell me about the meaning of life",
    toolkit: MyToolkit
    }).pipe(
    Stream.runForEach((part) => {
    if (part.type === "tool-result" && part.name === "MyTool") {
    // The `isFailure` property can be used to discriminate whether the result
    // of a tool call is a success or a failure
    if (part.isFailure) {
    part.result
    // ^? { readonly reason: "reason-1" | "reason-2"; }
    } else {
    part.result
    // ^? number
    }
    }
    return Effect.void
    }),
    Effect.provide(Claude)
    )
    const Anthropic = AnthropicClient.layerConfig({
    apiKey: Config.redacted("ANTHROPIC_API_KEY")
    }).pipe(Layer.provide(NodeHttpClient.layerUndici))
    program.pipe(Effect.provide([Anthropic, MyToolkitLayer]), Effect.runPromise)

Patch Changes

  • Updated dependencies [4c3bdfb]:
    • @effect/ai@0.31.0

0.33.0

Minor Changes

  • #5614 c63e658 Thanks @IMax153! - Previously, tool call handler errors were always raised as an expected error in the Effect E channel at the point of execution of the tool call handler (i.e. when a generate* method is invoked on a LanguageModel).

    With this PR, the end user now has control over whether tool call handler errors should be raised as an Effect error, or returned by the SDK to allow, for example, sending that error information to another application.

    Tool Call Specification

    The Tool.make and Tool.providerDefined constructors now take an extra optional parameter called failureMode, which can be set to either "error" or "return".

    import { Tool } from "@effect/ai"
    import { Schema } from "effect"
    const MyTool = Tool.make("MyTool", {
    description: "My special tool",
    failureMode: "return" // "error" (default) or "return"
    parameters: {
    myParam: Schema.String
    },
    success: Schema.Struct({
    mySuccess: Schema.String
    }),
    failure: Schema.Struct({
    myFailure: Schema.String
    })
    })

    The semantics of failureMode are as follows:

    • If set to "error" (the default), errors that occur during tool call handler execution will be returned in the error channel of the calling effect
    • If set to "return", errors that occur during tool call handler execution will be captured and returned as part of the tool call result

    Response - Tool Result Parts

    The result field of a "tool-result" part of a large language model provider response is now represented as an Either.

    • If the result is a Left, the result will be the failure specified in the tool call specification
    • If the result is a Right, the result will be the success specified in the tool call specification

    This is only relevant if the end user sets failureMode to "return". If set to "error" (the default), then the result property will always be a Right with the successful result of the tool call handler.

    Similarly the encodedResult field of a "tool-result" part will be represented as an EitherEncoded, where:

    • { _tag: "Left", left: <failure> } represents a tool call handler failure
    • { _tag: "Right", right: <success> } represents a tool call handler success

    Prompt - Tool Result Parts

    The result field of a "tool-result" part of a prompt will now only accept an EitherEncoded as specified above.

Patch Changes

  • Updated dependencies [6ae2f5d, c63e658]:
    • effect@3.18.4
    • @effect/ai@0.30.0

0.32.1

Patch Changes

  • #5601 8048b44 Thanks @janglad! - Fix FilePart validation always returning an MalformedInput error

0.32.0

Patch Changes

0.31.1

Patch Changes

0.31.0

Patch Changes

  • Updated dependencies [d4d86a8]:
    • @effect/platform@0.91.0
    • @effect/ai@0.28.0
    • @effect/experimental@0.55.0

0.30.2

Patch Changes

  • #5545 f71a731 Thanks @timurrakhimzhan! - fixed message shape of tool call result being sent to openai for tool call result

0.30.1

Patch Changes

  • #5521 fa49bc8 Thanks @IMax153! - Fix provider metadata and parse tool call parameters safely

  • Updated dependencies [fa49bc8]:

    • @effect/ai@0.27.1

0.30.0

Minor Changes

  • #5469 42b914a Thanks @IMax153! - Refactor the Effect AI SDK and associated provider packages

    This pull request contains a complete refactor of the base Effect AI SDK package as well as the associated provider integration packages to improve flexibility and enhance ergonomics. Major changes are outlined below.

    Modules

    All modules in the base Effect AI SDK have had the leading Ai prefix dropped from their name (except for the AiError module).

    For example, the AiLanguageModel module is now the LanguageModel module.

    In addition, the AiInput module has been renamed to the Prompt module.

    Prompts

    The Prompt module has been completely redesigned with flexibility in mind.

    The Prompt module now supports building a prompt using either the constructors exposed from the Prompt module, or using raw prompt content parts / messages, which should be familiar to those coming from other AI SDKs.

    In addition, the system option has been removed from all LanguageModel methods and must now be provided as part of the prompt.

    Prompt Constructors

    import { LanguageModel, Prompt } from "@effect/ai"
    const textPart = Prompt.makePart("text", {
    text: "What is machine learning?"
    })
    const userMessage = Prompt.makeMessage("user", {
    content: [textPart]
    })
    const systemMessage = Prompt.makeMessage("system", {
    content: "You are an expert in machine learning"
    })
    const program = LanguageModel.generateText({
    prompt: Prompt.fromMessages([systemMessage, userMessage])
    })

    Raw Prompt Input

    import { LanguageModel } from "@effect/ai"
    const program = LanguageModel.generateText({
    prompt: [
    { role: "system", content: "You are an expert in machine learning" },
    {
    role: "user",
    content: [{ type: "text", text: "What is machine learning?" }]
    }
    ]
    })

    NOTE: Providing a plain string as a prompt is still supported, and will be converted internally into a user message with a single text content part.

    Provider-Specific Options

    To support specification of provider-specific options when interacting with large language model providers, support has been added for adding provider-specific options to the parts of a Prompt.

    import { LanguageModel } from "@effect/ai"
    import { AnthropicLanguageModel } from "@effect/ai-anthropic"
    const Claude = AnthropicLanguageModel.model("claude-sonnet-4-20250514")
    const program = LanguageModel.generateText({
    prompt: [
    {
    role: "user",
    content: [{ type: "text", text: "What is machine learning?" }],
    options: {
    anthropic: { cacheControl: { type: "ephemeral", ttl: "1h" } }
    }
    }
    ]
    }).pipe(Effect.provide(Claude))

    Responses

    The Response module has also been completely redesigned to support a wider variety of response parts, particularly when streaming.

    Streaming Responses

    When streaming text via the LanguageModel.streamText method, you will now receive a stream of content parts instead of a stream of responses, which should make it much simpler to filter down the stream to the parts you are interested in.

    In addition, additional content parts will be present in the stream to allow you to track, for example, when a text content part starts / ends.

    Tool Calls / Tool Call Results

    The decoded parts of a Response (as returned by the methods of LanguageModel) are now fully type-safe on tool calls / tool call results. Filtering the content parts of a response to tool calls will narrow the type of the tool call params based on the tool name. Similarly, filtering the response to tool call results will narrow the type of the tool call result based on the tool name.

    import { LanguageModel, Tool, Toolkit } from "@effect/ai"
    import { Effect, Schema } from "effect"
    const DadJokeTool = Tool.make("DadJokeTool", {
    parameters: { topic: Schema.String },
    success: Schema.Struct({ joke: Schema.String })
    })
    const FooTool = Tool.make("FooTool", {
    parameters: { foo: Schema.Number },
    success: Schema.Struct({ bar: Schema.Boolean })
    })
    const MyToolkit = Toolkit.make(DadJokeTool, FooTool)
    const program = Effect.gen(function* () {
    const response = yield* LanguageModel.generateText({
    prompt: "Tell me a dad joke",
    toolkit: MyToolkit
    })
    for (const toolCall of response.toolCalls) {
    if (toolCall.name === "DadJokeTool") {
    // ^? "DadJokeTool" | "FooTool"
    toolCall.params
    // ^? { readonly topic: string }
    }
    }
    for (const toolResult of response.toolResults) {
    if (toolResult.name === "DadJokeTool") {
    // ^? "DadJokeTool" | "FooTool"
    toolResult.result
    // ^? { readonly joke: string }
    }
    }
    })

    Provider Metadata

    As with provider-specific options, provider-specific metadata is now returned as part of the response from the large language model provider.

    import { LanguageModel } from "@effect/ai"
    import { AnthropicLanguageModel } from "@effect/ai-anthropic"
    import { Effect } from "effect"
    const Claude = AnthropicLanguageModel.model("claude-4-sonnet-20250514")
    const program = Effect.gen(function* () {
    const response = yield* LanguageModel.generateText({
    prompt: "What is the meaning of life?"
    })
    for (const part of response.content) {
    // When metadata **is not** defined for a content part, accessing the
    // provider's key on the part's metadata will return an untyped record
    if (part.type === "text") {
    const metadata = part.metadata.anthropic
    // ^? { readonly [x: string]: unknown } | undefined
    }
    // When metadata **is** defined for a content part, accessing the
    // provider's key on the part's metadata will return typed metadata
    if (part.type === "reasoning") {
    const metadata = part.metadata.anthropic
    // ^? AnthropicReasoningInfo | undefined
    }
    }
    }).pipe(Effect.provide(Claude))

    Tool Calls

    The Tool module has been enhanced to support provider-defined tools (e.g. web search, computer use, etc.). Large language model providers which support calling their own tools now have a separate module present in their provider integration packages which contain definitions for their tools.

    These provider-defined tools can be included alongside user-defined tools in existing Toolkits. Provider-defined tools that require a user-space handler will be raise a type error in the associated Toolkit layer if no such handler is defined.

    import { LanguageModel, Tool, Toolkit } from "@effect/ai"
    import { AnthropicTool } from "@effect/ai-anthropic"
    import { Schema } from "effect"
    const DadJokeTool = Tool.make("DadJokeTool", {
    parameters: { topic: Schema.String },
    success: Schema.Struct({ joke: Schema.String })
    })
    const MyToolkit = Toolkit.make(
    DadJokeTool,
    AnthropicTool.WebSearch_20250305({ max_uses: 1 })
    )
    const program = LanguageModel.generateText({
    prompt: "Search the web for a dad joke",
    toolkit: MyToolkit
    })

    AiError

    The AiError type has been refactored into a union of different error types which can be raised by the Effect AI SDK. The goal of defining separate error types is to allow providing the end-user with more granular information about the error that occurred.

    For now, the following errors have been defined. More error types may be added over time based upon necessity / use case.

    type AiError =
    | HttpRequestError,
    | HttpResponseError,
    | MalformedInput,
    | MalformedOutput,
    | UnknownError

Patch Changes

  • Updated dependencies [42b914a]:
    • @effect/ai@0.27.0

0.29.1

Patch Changes

  • #5450 e7aa8c2 Thanks @IMax153! - Ensure that the verbose json transcription schema is tried before the standard json schema

0.29.0

Patch Changes

  • Updated dependencies []:
    • @effect/ai@0.26.0
    • @effect/experimental@0.54.6

0.28.2

Patch Changes

  • #5361 292a7c5 Thanks @IMax153! - Add support for new options related to OpenAi GPT-5

  • Updated dependencies [292a7c5]:

    • @effect/ai@0.25.2

0.28.1

Patch Changes

  • #5314 a656185 Thanks @dmaretskyi! - Allow completion_tokens_details field to be missing in the generation response for compatibility with Ollama and LMStudio

0.28.0

Patch Changes

  • Updated dependencies [5a0f4f1]:
    • effect@3.17.1
    • @effect/ai@0.25.0
    • @effect/experimental@0.54.0

0.27.0

Patch Changes

  • Updated dependencies [7813640]:
    • @effect/platform@0.90.0
    • @effect/ai@0.24.0
    • @effect/experimental@0.54.0

0.26.1

Patch Changes

  • #5251 eb197b2 Thanks @IMax153! - Add "scale" as an option for the OpenAI service_tier field

0.26.0

Patch Changes

0.25.3

Patch Changes

  • #5227 c639456 Thanks @IMax153! - Update the generated openapi specification for OpenAI

0.25.2

Patch Changes

  • Updated dependencies [f5dfabf, 17a5ea8, d25f22b]:
    • effect@3.16.14
    • @effect/platform@0.88.1
    • @effect/experimental@0.52.1
    • @effect/ai@0.22.1

0.25.1

Patch Changes

  • #5209 3deaa66 Thanks @tim-smart! - fix ai layerConfig regression, to allow for conditional Config variables

0.25.0

Patch Changes

  • Updated dependencies [27206d7, dbabf5e]:
    • @effect/platform@0.88.0
    • @effect/ai@0.22.0
    • @effect/experimental@0.52.0

0.24.17

Patch Changes

  • Updated dependencies [c1c05a8, 81fe4a2]:
    • effect@3.16.13
    • @effect/ai@0.21.17
    • @effect/experimental@0.51.14
    • @effect/platform@0.87.13

0.24.16

Patch Changes

  • #5186 e5692ab Thanks @IMax153! - Do not use Config.Wrap for AI provider layerConfig

  • Updated dependencies [32ba77a, d5e25b2]:

    • @effect/platform@0.87.12
    • @effect/ai@0.21.16
    • @effect/experimental@0.51.13

0.24.15

Patch Changes

  • Updated dependencies [001392b, 7bfb099]:
    • @effect/platform@0.87.11
    • @effect/ai@0.21.15
    • @effect/experimental@0.51.12

0.24.14

Patch Changes

  • Updated dependencies [678318d, 678318d]:
    • @effect/platform@0.87.10
    • @effect/ai@0.21.14
    • @effect/experimental@0.51.11

0.24.13

Patch Changes

  • Updated dependencies [54514a2]:
    • @effect/platform@0.87.9
    • @effect/ai@0.21.13
    • @effect/experimental@0.51.10

0.24.12

Patch Changes

  • Updated dependencies [4ce4f82]:
    • @effect/platform@0.87.8
    • @effect/experimental@0.51.9
    • @effect/ai@0.21.12

0.24.11

Patch Changes

  • #5029 d92d12a Thanks @IMax153! - Cleanup AiLanguageModel construction and finish basic support for gemini

  • Updated dependencies [d92d12a, 25ca0cf, d92d12a]:

    • @effect/ai@0.21.11

0.24.10

Patch Changes

  • Updated dependencies [a9b617f, 7e26e86]:
    • @effect/platform@0.87.7
    • @effect/ai@0.21.10
    • @effect/experimental@0.51.8

0.24.9

Patch Changes

  • Updated dependencies [030ac21, 905da99, aaae9b1]:
    • @effect/ai@0.21.9
    • effect@3.16.12
    • @effect/experimental@0.51.7
    • @effect/platform@0.87.6

0.24.8

Patch Changes

  • Updated dependencies [96c1292]:
    • @effect/experimental@0.51.6
    • @effect/ai@0.21.8

0.24.7

Patch Changes

  • Updated dependencies [2fd8676]:
    • @effect/platform@0.87.5
    • @effect/ai@0.21.7
    • @effect/experimental@0.51.5

0.24.6

Patch Changes

  • Updated dependencies [e82a4fd]:
    • @effect/platform@0.87.4
    • @effect/ai@0.21.6
    • @effect/experimental@0.51.4

0.24.5

Patch Changes

  • Updated dependencies [1b6e396]:
    • @effect/platform@0.87.3
    • @effect/ai@0.21.5
    • @effect/experimental@0.51.3

0.24.4

Patch Changes

  • Updated dependencies [4fea68c, b927954, 99590a6, 6c3e24c]:
    • @effect/platform@0.87.2
    • effect@3.16.11
    • @effect/ai@0.21.4
    • @effect/experimental@0.51.2

0.24.3

Patch Changes

  • Updated dependencies [faad30e]:
    • effect@3.16.10
    • @effect/ai@0.21.3
    • @effect/experimental@0.51.1
    • @effect/platform@0.87.1

0.24.2

Patch Changes

  • Updated dependencies []:
    • @effect/ai@0.21.2
    • @effect/experimental@0.51.0

0.24.1

Patch Changes

  • Updated dependencies [f667373]:
    • @effect/ai@0.21.1
    • @effect/experimental@0.51.0

0.24.0

Patch Changes

  • Updated dependencies [b5bac9a]:
    • @effect/platform@0.87.0
    • @effect/ai@0.21.0
    • @effect/experimental@0.51.0

0.23.0

Patch Changes

  • Updated dependencies [5137c70, c23d25c, 5137c70, 5137c70]:
    • effect@3.16.9
    • @effect/platform@0.86.0
    • @effect/ai@0.20.0
    • @effect/experimental@0.50.0

0.22.4

Patch Changes

  • Updated dependencies [a8d99b2]:
    • @effect/ai@0.19.4
    • @effect/experimental@0.49.2

0.22.3

Patch Changes

  • Updated dependencies [914a191]:
    • @effect/platform@0.85.2
    • @effect/ai@0.19.3
    • @effect/experimental@0.49.2

0.22.2

Patch Changes

  • Updated dependencies []:
    • @effect/ai@0.19.2
    • @effect/experimental@0.49.1

0.22.1

Patch Changes

  • Updated dependencies [8cb98d5, db2dd3c]:
    • effect@3.16.8
    • @effect/ai@0.19.1
    • @effect/experimental@0.49.1
    • @effect/platform@0.85.1

0.22.0

Patch Changes

  • Updated dependencies [93687dd, 93687dd, 93687dd]:
    • @effect/platform@0.85.0
    • @effect/ai@0.19.0
    • @effect/experimental@0.49.0

0.21.16

Patch Changes

  • Updated dependencies [daed158]:
    • @effect/ai@0.18.16

0.21.15

Patch Changes

  • Updated dependencies [c315989]:
    • @effect/ai@0.18.15

0.21.14

Patch Changes

  • Updated dependencies [1bb0d8a, cbac1ac, dd4d380]:
    • effect@3.16.7
    • @effect/ai@0.18.14
    • @effect/experimental@0.48.12
    • @effect/platform@0.84.11

0.21.13

Patch Changes

0.21.12

Patch Changes

  • Updated dependencies [bf418ef]:
    • effect@3.16.5
    • @effect/ai@0.18.12
    • @effect/experimental@0.48.10
    • @effect/platform@0.84.9

0.21.11

Patch Changes

  • Updated dependencies [2dc5f93]:
    • @effect/ai@0.18.11
    • @effect/experimental@0.48.9

0.21.10

Patch Changes

  • Updated dependencies [8b9db77]:
    • @effect/platform@0.84.8
    • @effect/experimental@0.48.9
    • @effect/ai@0.18.10

0.21.9

Patch Changes

  • Updated dependencies [74ab9a0, 770008e]:
    • effect@3.16.4
    • @effect/ai@0.18.9
    • @effect/experimental@0.48.8
    • @effect/platform@0.84.7

0.21.8

Patch Changes

  • Updated dependencies [a2d57c9]:
    • @effect/experimental@0.48.7
    • @effect/ai@0.18.8

0.21.7

Patch Changes

  • Updated dependencies [ceea77a]:
    • @effect/platform@0.84.6
    • @effect/ai@0.18.7
    • @effect/experimental@0.48.6

0.21.6

Patch Changes

  • Updated dependencies [85f54ed, ec52c6a]:
    • @effect/ai@0.18.6
    • @effect/platform@0.84.5
    • @effect/experimental@0.48.5

0.21.5

Patch Changes

  • Updated dependencies [4ddb28d]:
    • @effect/ai@0.18.5

0.21.4

Patch Changes

  • Updated dependencies [87722fc, 36217ee]:
    • effect@3.16.3
    • @effect/ai@0.18.4
    • @effect/experimental@0.48.4
    • @effect/platform@0.84.4

0.21.3

Patch Changes

  • Updated dependencies [52c88c4, ab7684f]:
    • @effect/ai@0.18.3
    • @effect/platform@0.84.3
    • @effect/experimental@0.48.3

0.21.2

Patch Changes

  • Updated dependencies [0ddf148]:
    • effect@3.16.2
    • @effect/ai@0.18.2
    • @effect/experimental@0.48.2
    • @effect/platform@0.84.2

0.21.1

Patch Changes

  • Updated dependencies [71174d0, d615e6e]:
    • @effect/platform@0.84.1
    • effect@3.16.1
    • @effect/ai@0.18.1
    • @effect/experimental@0.48.1

0.21.0

Minor Changes

  • #4891 0552674 Thanks @IMax153! - Make AiModel a plain Layer and remove AiPlan in favor of ExecutionPlan

    This release substantially simplifies and improves the ergonomics of using AiModel for various providers. With these changes, an AiModel now returns a plain Layer which can be used to provide services to a program that interacts with large language models.

    Before

    import { AiLanguageModel } from "@effect/ai"
    import { OpenAiClient, OpenAiLanguageModel } from "@effect/ai-openai"
    import { NodeHttpClient } from "@effect/platform-node"
    import { Config, Console, Effect, Layer } from "effect"
    // Produces an `AiModel<AiLanguageModel, OpenAiClient>`
    const Gpt4o = OpenAiLanguageModel.model("gpt-4o")
    // Generate a dad joke
    const getDadJoke = AiLanguageModel.generateText({
    prompt: "Tell me a dad joke"
    })
    const program = Effect.gen(function* () {
    // Build the `AiModel` into a `Provider`
    const gpt4o = yield* Gpt4o
    // Use the built `AiModel` to run the program
    const response = yield* gpt4o.use(getDadJoke)
    // Log the response
    yield* Console.log(response.text)
    })
    const OpenAi = OpenAiClient.layerConfig({
    apiKey: Config.redacted("OPENAI_API_KEY")
    }).pipe(Layer.provide(NodeHttpClient.layerUndici))
    program.pipe(Effect.provide(OpenAi), Effect.runPromise)

    After

    import { AiLanguageModel } from "@effect/ai"
    import { OpenAiClient, OpenAiLanguageModel } from "@effect/ai-openai"
    import { NodeHttpClient } from "@effect/platform-node"
    import { Config, Console, Effect, Layer } from "effect"
    // Produces a `Layer<AiLanguageModel, never, OpenAiClient>`
    const Gpt4o = OpenAiLanguageModel.model("gpt-4o")
    const program = Effect.gen(function*() {
    // Generate a dad joke
    const response = yield* AiLanguageModel.generateText({
    prompt: "Tell me a dad joke"
    })
    // Log the response
    yield* Console.log(response.text)
    ).pipe(Effect.provide(Gpt4o))
    const OpenAi = OpenAiClient.layerConfig({
    apiKey: Config.redacted("OPENAI_API_KEY")
    }).pipe(Layer.provide(NodeHttpClient.layerUndici))
    program.pipe(
    Effect.provide(OpenAi),
    Effect.runPromise
    )

    In addition, AiModel can be yield*’ed to produce a layer with no requirements.

    This shifts the requirements of building the layer into the calling effect, which is particularly useful for creating AI-powered services.

    import { AiLanguageModel } from "@effect/ai"
    import { OpenAiLanguageModel } from "@effect/ai-openai"
    import { Effect } from "effect"
    class DadJokes extends Effect.Service<DadJokes>()("DadJokes", {
    effect: Effect.gen(function* () {
    // Yielding the model will return a layer with no requirements
    //
    // ┌─── Layer<AiLanguageModel>
    // ▼
    const model = yield* OpenAiLanguageModel.model("gpt-4o")
    const getDadJoke = AiLanguageModel.generateText({
    prompt: "Generate a dad joke"
    }).pipe(Effect.provide(model))
    return { getDadJoke } as const
    })
    }) {}
    // The requirements are lifted into the service constructor
    //
    // ┌─── Layer<DadJokes, never, OpenAiClient>
    // ▼
    DadJokes.Default

Patch Changes

0.20.0

Patch Changes

  • Updated dependencies [5522520, cc5bb2b]:
    • @effect/platform@0.83.0
    • effect@3.15.5
    • @effect/ai@0.17.0
    • @effect/experimental@0.47.0

0.19.9

Patch Changes

  • Updated dependencies [0617b9d]:
    • @effect/platform@0.82.8
    • @effect/ai@0.16.9
    • @effect/experimental@0.46.8

0.19.8

Patch Changes

  • Updated dependencies [f570554, 78047e8, c20b95a, 94ada43]:
    • effect@3.15.4
    • @effect/platform@0.82.7
    • @effect/ai@0.16.8
    • @effect/experimental@0.46.7

0.19.7

Patch Changes

  • #4914 eef6052 Thanks @IMax153! - Fix an issue where passing a file input part when using OpenAI would always result in an error

  • Updated dependencies [618903b]:

    • @effect/platform@0.82.6
    • @effect/ai@0.16.7
    • @effect/experimental@0.46.6

0.19.6

Patch Changes

  • Updated dependencies [7764a07, 4577f54, 30a0d9c]:
    • @effect/platform@0.82.5
    • effect@3.15.3
    • @effect/ai@0.16.6
    • @effect/experimental@0.46.5

0.19.5

Patch Changes

  • Updated dependencies [d45e8a8, d13b68e]:
    • @effect/platform@0.82.4
    • @effect/ai@0.16.5
    • @effect/experimental@0.46.4

0.19.4

Patch Changes

  • Updated dependencies [b8722b8, a328f4b]:
    • effect@3.15.2
    • @effect/platform@0.82.3
    • @effect/ai@0.16.4
    • @effect/experimental@0.46.3

0.19.3

Patch Changes

  • #4880 b86c1fc Thanks @IMax153! - Ensure that multiple tool calls are handled properly

  • #4878 8b32eb5 Thanks @IMax153! - Ensure that AiResponse.finishReason is set properly when streaming responses from OpenAi

  • Updated dependencies [739a3d4]:

    • @effect/platform@0.82.2
    • @effect/ai@0.16.3
    • @effect/experimental@0.46.2

0.19.2

Patch Changes

  • Updated dependencies [787ce70, 1269641, 1269641]:
    • effect@3.15.1
    • @effect/ai@0.16.2
    • @effect/experimental@0.46.1
    • @effect/platform@0.82.1

0.19.1

Patch Changes

  • Updated dependencies [cb3c30f]:
    • @effect/ai@0.16.1
    • @effect/experimental@0.46.0

0.19.0

Patch Changes

0.18.0

Minor Changes

  • #4766 a4d42c5 Thanks @IMax153! - Refactor @effect/ai-openai to align with changes to @effect/ai

Patch Changes

  • Updated dependencies [a4d42c5]:
    • @effect/ai@0.15.0
    • @effect/experimental@0.45.1

0.17.1

Patch Changes

  • Updated dependencies [24a9ebb]:
    • effect@3.14.22
    • @effect/ai@0.14.1
    • @effect/experimental@0.45.1
    • @effect/platform@0.81.1

0.17.0

Patch Changes

  • Updated dependencies [672920f]:
    • @effect/platform@0.81.0
    • @effect/ai@0.14.0
    • @effect/experimental@0.45.0

0.16.22

Patch Changes

  • Updated dependencies [2f3b7d4]:
    • effect@3.14.21
    • @effect/ai@0.13.21
    • @effect/experimental@0.44.21
    • @effect/platform@0.80.21

0.16.21

Patch Changes

  • Updated dependencies [17e2f30]:
    • effect@3.14.20
    • @effect/ai@0.13.20
    • @effect/experimental@0.44.20
    • @effect/platform@0.80.20

0.16.20

Patch Changes

  • Updated dependencies [056a910, e25e7bb, 3273d57]:
    • effect@3.14.19
    • @effect/platform@0.80.19
    • @effect/ai@0.13.19
    • @effect/experimental@0.44.19

0.16.19

Patch Changes

  • Updated dependencies [b1164d4]:
    • effect@3.14.18
    • @effect/ai@0.13.18
    • @effect/experimental@0.44.18
    • @effect/platform@0.80.18

0.16.18

Patch Changes

  • Updated dependencies [0b54681, 41a59d5]:
    • effect@3.14.17
    • @effect/ai@0.13.17
    • @effect/experimental@0.44.17
    • @effect/platform@0.80.17

0.16.17

Patch Changes

  • Updated dependencies [ee14444, f1c8583]:
    • effect@3.14.16
    • @effect/platform@0.80.16
    • @effect/ai@0.13.16
    • @effect/experimental@0.44.16

0.16.16

Patch Changes

  • Updated dependencies [239cc99, 8b6c947, c50a63b]:
    • effect@3.14.15
    • @effect/ai@0.13.15
    • @effect/experimental@0.44.15
    • @effect/platform@0.80.15

0.16.15

Patch Changes

  • Updated dependencies [6ed8d15]:
    • effect@3.14.14
    • @effect/ai@0.13.14
    • @effect/experimental@0.44.14
    • @effect/platform@0.80.14

0.16.14

Patch Changes

  • Updated dependencies [ee77788, 5fce6ba, 570e45f]:
    • effect@3.14.13
    • @effect/ai@0.13.13
    • @effect/experimental@0.44.13
    • @effect/platform@0.80.13

0.16.13

Patch Changes

  • Updated dependencies [c2ad9ee, 9c68654]:
    • effect@3.14.12
    • @effect/ai@0.13.12
    • @effect/experimental@0.44.12
    • @effect/platform@0.80.12

0.16.12

Patch Changes

  • Updated dependencies [e536127]:
    • effect@3.14.11
    • @effect/ai@0.13.11
    • @effect/experimental@0.44.11
    • @effect/platform@0.80.11

0.16.11

Patch Changes

  • Updated dependencies [bc7efa3]:
    • effect@3.14.10
    • @effect/ai@0.13.10
    • @effect/experimental@0.44.10
    • @effect/platform@0.80.10

0.16.10

Patch Changes

  • Updated dependencies [d78249f]:
    • effect@3.14.9
    • @effect/ai@0.13.9
    • @effect/experimental@0.44.9
    • @effect/platform@0.80.9

0.16.9

Patch Changes

  • Updated dependencies [b3a2d32]:
    • effect@3.14.8
    • @effect/ai@0.13.8
    • @effect/experimental@0.44.8
    • @effect/platform@0.80.8

0.16.8

Patch Changes

  • Updated dependencies [b542a4b]:
    • effect@3.14.7
    • @effect/ai@0.13.7
    • @effect/experimental@0.44.7
    • @effect/platform@0.80.7

0.16.7

Patch Changes

  • Updated dependencies [47618c1, 6077882]:
    • effect@3.14.6
    • @effect/ai@0.13.6
    • @effect/experimental@0.44.6
    • @effect/platform@0.80.6

0.16.6

Patch Changes

0.16.5

Patch Changes

  • Updated dependencies [e4ba2c6]:
    • effect@3.14.4
    • @effect/ai@0.13.4
    • @effect/experimental@0.44.4
    • @effect/platform@0.80.4

0.16.4

Patch Changes

  • Updated dependencies [37aa8e1, 34f03d6]:
    • effect@3.14.3
    • @effect/ai@0.13.3
    • @effect/experimental@0.44.3
    • @effect/platform@0.80.3

0.16.3

Patch Changes

  • Updated dependencies [f87991b, f87991b, 0a3e3e1]:
    • effect@3.14.2
    • @effect/ai@0.13.2
    • @effect/experimental@0.44.2
    • @effect/platform@0.80.2

0.16.2

Patch Changes

  • #4624 9517601 Thanks @IMax153! - Upgrade the version of gpt-tokenizer to be compatible with new models

0.16.1

Patch Changes

  • Updated dependencies [4a274fe]:
    • effect@3.14.1
    • @effect/ai@0.13.1
    • @effect/experimental@0.44.1
    • @effect/platform@0.80.1

0.16.0

Patch Changes

0.15.4

Patch Changes

  • #4592 5662363 Thanks @tim-smart! - update generated ai clients

  • Updated dependencies [5662363, 5f1fd15, 8bb1460]:

    • @effect/platform@0.79.4
    • @effect/ai@0.12.4
    • @effect/experimental@0.43.4

0.15.3

Patch Changes

  • Updated dependencies [0c4803f, 6f65ac4]:
    • effect@3.13.12
    • @effect/ai@0.12.3
    • @effect/experimental@0.43.3
    • @effect/platform@0.79.3

0.15.2

Patch Changes

0.15.1

Patch Changes

  • Updated dependencies [527c964]:
    • effect@3.13.10
    • @effect/ai@0.12.1
    • @effect/experimental@0.43.1
    • @effect/platform@0.79.1

0.15.0

Patch Changes

  • Updated dependencies [88fe129, d630249, 2976e52]:
    • @effect/platform@0.79.0
    • effect@3.13.9
    • @effect/experimental@0.43.0
    • @effect/ai@0.12.0

0.14.1

Patch Changes

  • Updated dependencies [c65d336, 22d2ebb]:
    • effect@3.13.8
    • @effect/ai@0.11.1
    • @effect/experimental@0.42.1
    • @effect/platform@0.78.1

0.14.0

Patch Changes

  • Updated dependencies [c5bcf53]:
    • @effect/platform@0.78.0
    • @effect/ai@0.11.0
    • @effect/experimental@0.42.0

0.13.7

Patch Changes

0.13.6

Patch Changes

  • Updated dependencies [3154ce4]:
    • effect@3.13.6
    • @effect/ai@0.10.6
    • @effect/experimental@0.41.6
    • @effect/platform@0.77.6

0.13.5

Patch Changes

0.13.4

Patch Changes

  • Updated dependencies [e0746f9, 17d9e89]:
    • @effect/platform@0.77.4
    • effect@3.13.4
    • @effect/ai@0.10.4
    • @effect/experimental@0.41.4

0.13.3

Patch Changes

  • #4504 a67a8a1 Thanks @IMax153! - Introduce AiModel and AiPlan for describing retry / fallback logic between models and providers

    For example, the following program builds an AiPlan which will attempt to use OpenAi’s chat completions API, and if after three attempts the operation is still failing, the plan will fallback to utilizing Anthropic’s messages API to resolve the request.

    import { AiPlan, Completions } from "@effect/ai"
    import { AnthropicClient, AnthropicCompletions } from "@effect/ai-anthropic"
    import { OpenAiClient, OpenAiCompletions } from "@effect/ai-openai"
    import { NodeHttpClient, NodeRuntime } from "@effect/platform-node"
    import { Config, Console, Effect, Layer } from "effect"
    // Create Anthropic client
    const Anthropic = AnthropicClient.layerConfig({
    apiKey: Config.redacted("ANTHROPIC_API_KEY")
    }).pipe(Layer.provide(NodeHttpClient.layerUndici))
    // Create OpenAi client
    const OpenAi = OpenAiClient.layerConfig({
    apiKey: Config.redacted("OPENAI_API_KEY")
    }).pipe(Layer.provide(NodeHttpClient.layerUndici))
    // Create a plan of request execution
    const Plan = AiPlan.fromModel(OpenAiCompletions.model("gpt-4o-mini"), {
    attempts: 3
    }).pipe(
    AiPlan.withFallback({
    model: AnthropicCompletions.model("claude-3-5-haiku-latest")
    })
    )
    const program = Effect.gen(function* () {
    // Build the plan of execution
    const plan = yield* Plan
    // Create a program which uses the services provided by the plan
    const getDadJoke = Effect.gen(function* () {
    const completions = yield* Completions.Completions
    const response = yield* completions.create("Tell me a dad joke")
    yield* Console.log(response.text)
    })
    // Provide the plan to whichever programs need it
    yield* plan.provide(getDadJoke)
    })
    program.pipe(Effect.provide([Anthropic, OpenAi]), NodeRuntime.runMain)
  • Updated dependencies [cc5588d, 623c8cd, 00b4eb1, f2aee98, fb798eb, 2251b15, 2e15c1e, a4979db, b74255a, d7f6a5c, 9dd8979, 477b488, 10932cb, 9f6c784, 2c639ec, 886aaa8, a67a8a1]:

    • effect@3.13.3
    • @effect/ai@0.10.3
    • @effect/experimental@0.41.3
    • @effect/platform@0.77.3

0.13.2

Patch Changes

  • Updated dependencies [31be72a, 3e7ce97, 31be72a]:
    • effect@3.13.2
    • @effect/platform@0.77.2
    • @effect/ai@0.10.2
    • @effect/experimental@0.41.2

0.13.1

Patch Changes

  • #4446 9375c28 Thanks @IMax153! - Add Anthropic AI provider integration

  • Updated dependencies [b56a211, 9375c28]:

    • effect@3.13.1
    • @effect/ai@0.10.1
    • @effect/experimental@0.41.1
    • @effect/platform@0.77.1

0.13.0

Patch Changes

0.12.1

Patch Changes

0.12.0

Patch Changes

  • Updated dependencies [b6a032f, 42ddd5f, 2fe447c, 2473ad5]:
    • effect@3.12.11
    • @effect/platform@0.76.0
    • @effect/ai@0.9.0
    • @effect/experimental@0.40.0

0.11.5

Patch Changes

  • #4418 cdc82e4 Thanks @IMax153! - Support per-request HTTP client transformations in the OpenAi AI integration package.

    For example:

    import { Completions } from "@effect/ai"
    import {
    OpenAiClient,
    OpenAiCompletions,
    OpenAiConfig
    } from "@effect/ai-openai"
    import { HttpClient, HttpClientRequest } from "@effect/platform"
    import { NodeHttpClient } from "@effect/platform-node"
    import { Config, Effect, Layer } from "effect"
    const OpenAi = OpenAiClient.layerConfig({
    apiKey: Config.redacted("OPENAI_API_KEY")
    }).pipe(Layer.provide(NodeHttpClient.layerUndici))
    const Gpt4oCompletions = OpenAiCompletions.layer({
    model: "gpt-4o"
    }).pipe(Layer.provide(OpenAi))
    const program = Effect.gen(function* () {
    const completions = yield* Completions.Completions
    yield* completions.create("Tell me a dad joke").pipe(
    // Per-request HTTP client transforms which are only applied if
    // the OpenAi provider is in use
    OpenAiConfig.withClientTransform(
    HttpClient.mapRequest(
    HttpClientRequest.setHeader("x-dad-jokes", "are-awesome")
    )
    )
    )
    })
    program.pipe(Effect.provide(Gpt4oCompletions), Effect.runPromise)

0.11.4

Patch Changes

0.11.3

Patch Changes

  • Updated dependencies [1b4a4e9]:
    • effect@3.12.9
    • @effect/ai@0.8.3
    • @effect/experimental@0.39.3
    • @effect/platform@0.75.3

0.11.2

Patch Changes

  • #4389 f089470 Thanks @IMax153! - Add support for GenAI telemetry annotations.

  • #4368 a0c85e6 Thanks @IMax153! - Support creation of embeddings from the AI integration packages.

    For example, the following program will create an OpenAI Embeddings service that will aggregate all embedding requests received within a 500 millisecond window into a single batch.

    import { Embeddings } from "@effect/ai"
    import { OpenAiClient, OpenAiEmbeddings } from "@effect/ai-openai"
    import { NodeHttpClient } from "@effect/platform-node"
    import { Config, Effect, Layer } from "effect"
    // Create the OpenAI client
    const OpenAi = OpenAiClient.layerConfig({
    apiKey: Config.redacted("OPENAI_API_KEY")
    }).pipe(Layer.provide(NodeHttpClient.layerUndici))
    // Create an embeddings service for the `text-embedding-3-large` model
    const TextEmbeddingsLarge = OpenAiEmbeddings.layerDataLoader({
    model: "text-embedding-3-large",
    window: "500 millis",
    maxBatchSize: 2048
    }).pipe(Layer.provide(OpenAi))
    // Use the generic `Embeddings` service interface in your program
    const program = Effect.gen(function* () {
    const embeddings = yield* Embeddings.Embeddings
    const result = yield* embeddings.embed("The input to embed")
    })
    // Provide the specific implementation to use
    program.pipe(Effect.provide(TextEmbeddingsLarge), Effect.runPromise)
  • Updated dependencies [f5e3b1b, 59b3cfb, 766113c, fcf3b7c, bb05fb8, 712277f, f269122, 8f6006a, f089470, c45b559, 430c846, 7b03057, a9c94c8, 107e6f0, c9175ae, 65c11b9, e386d2f, 9172efb, a0c85e6]:

    • @effect/ai@0.8.2
    • @effect/platform@0.75.2
    • effect@3.12.8
    • @effect/experimental@0.39.2

0.11.1

Patch Changes

  • Updated dependencies [8dff1d1]:
    • effect@3.12.7
    • @effect/ai@0.8.1
    • @effect/experimental@0.39.1
    • @effect/platform@0.75.1

0.11.0

Patch Changes

0.10.0

Patch Changes

0.9.1

Patch Changes

0.9.0

Patch Changes

0.8.2

Patch Changes

0.8.1

Patch Changes

0.8.0

Patch Changes

0.7.3

Patch Changes

  • Updated dependencies [39457d4, a475cc2, 199214e, b3c160d]:
    • effect@3.11.10
    • @effect/ai@0.4.8
    • @effect/experimental@0.35.3
    • @effect/platform@0.71.7

0.7.2

Patch Changes

  • Updated dependencies [1c08a0b, 1ce703b, 1ce703b]:
    • effect@3.11.9
    • @effect/ai@0.4.7
    • @effect/experimental@0.35.2
    • @effect/platform@0.71.6

0.7.1

Patch Changes

  • Updated dependencies [05d71f8, e66b920]:
    • @effect/platform@0.71.5
    • @effect/ai@0.4.6
    • @effect/experimental@0.35.1

0.7.0

Patch Changes

  • Updated dependencies [909181a, 909181a, 1a6b52d]:
    • @effect/platform@0.71.4
    • effect@3.11.8
    • @effect/ai@0.4.5
    • @effect/experimental@0.35.0

0.6.4

Patch Changes

  • Updated dependencies [6984508, 883639c]:
    • @effect/platform@0.71.3
    • @effect/ai@0.4.4
    • @effect/experimental@0.34.3

0.6.3

Patch Changes

  • Updated dependencies [1237ae8]:
    • @effect/ai@0.4.3

0.6.2

Patch Changes

0.6.1

Patch Changes

  • Updated dependencies [1d3df5b]:
    • @effect/platform@0.71.1
    • @effect/ai@0.4.1
    • @effect/experimental@0.34.1

0.6.0

Patch Changes

0.5.7

Patch Changes

0.5.6

Patch Changes

  • Updated dependencies [9a5b8e3]:
    • @effect/platform@0.70.6
    • @effect/ai@0.3.6
    • @effect/experimental@0.33.6

0.5.5

Patch Changes

0.5.4

Patch Changes

0.5.3

Patch Changes

  • #4071 da3a607 Thanks @tim-smart! - use openai response_format for structured completions

  • Updated dependencies [7044730, da3a607]:

    • @effect/platform@0.70.3
    • @effect/ai@0.3.3
    • @effect/experimental@0.33.3

0.5.2

Patch Changes

  • Updated dependencies [01cee56, c2249ea, 1358aa5, 1de3fe7]:
    • effect@3.11.2
    • @effect/platform@0.70.2
    • @effect/ai@0.3.2
    • @effect/experimental@0.33.2

0.5.1

Patch Changes

  • Updated dependencies [dd8a2d8, a71bfef]:
    • effect@3.11.1
    • @effect/ai@0.3.1
    • @effect/experimental@0.33.1
    • @effect/platform@0.70.1

0.5.0

Patch Changes

0.4.17

Patch Changes

  • Updated dependencies [3069614, 09a5e52]:
    • effect@3.10.20
    • @effect/ai@0.2.32
    • @effect/experimental@0.32.17
    • @effect/platform@0.69.32

0.4.16

Patch Changes

  • Updated dependencies [e6d4a37]:
    • @effect/platform@0.69.31
    • @effect/experimental@0.32.16
    • @effect/ai@0.2.31

0.4.15

Patch Changes

  • Updated dependencies [5e17400]:
    • @effect/experimental@0.32.15

0.4.14

Patch Changes

  • Updated dependencies [270f199]:
    • @effect/platform@0.69.30
    • @effect/experimental@0.32.14
    • @effect/ai@0.2.30

0.4.13

Patch Changes

  • Updated dependencies [e9dfea3, 24cc35e]:
    • @effect/experimental@0.32.13
    • @effect/platform@0.69.29
    • @effect/ai@0.2.29

0.4.12

Patch Changes

0.4.11

Patch Changes

  • Updated dependencies [af409cf, beaccae]:
    • effect@3.10.18
    • @effect/platform@0.69.27
    • @effect/ai@0.2.27
    • @effect/experimental@0.32.11

0.4.10

Patch Changes

  • Updated dependencies [c963886, 42c4ce6]:
    • @effect/platform@0.69.26
    • effect@3.10.17
    • @effect/ai@0.2.26
    • @effect/experimental@0.32.10

0.4.9

Patch Changes

0.4.8

Patch Changes

  • #3949 52c4b89 Thanks @tim-smart! - add transformClient option to OpenAiClient layer

  • Updated dependencies [3cc6514]:

    • @effect/platform@0.69.24
    • @effect/ai@0.2.24
    • @effect/experimental@0.32.8

0.4.7

Patch Changes

  • Updated dependencies [3aff4d3]:
    • @effect/platform@0.69.23
    • @effect/ai@0.2.23
    • @effect/experimental@0.32.7

0.4.6

Patch Changes

  • Updated dependencies [8398b32, 4e9e256, 72e55b7]:
    • effect@3.10.15
    • @effect/experimental@0.32.6
    • @effect/ai@0.2.22
    • @effect/platform@0.69.22

0.4.5

Patch Changes

  • Updated dependencies [f983946, 2d8a750]:
    • effect@3.10.14
    • @effect/ai@0.2.21
    • @effect/experimental@0.32.5
    • @effect/platform@0.69.21

0.4.4

Patch Changes

  • #3916 72b0272 Thanks @tim-smart! - use effect/JSONSchema for effect/ai & allow http client transforms

  • Updated dependencies [72b0272, 995bbdf]:

    • @effect/ai@0.2.20
    • effect@3.10.13
    • @effect/experimental@0.32.4
    • @effect/platform@0.69.20

0.4.3

Patch Changes

  • Updated dependencies [eb8c52d]:
    • @effect/platform@0.69.19
    • @effect/experimental@0.32.3
    • @effect/ai@0.2.19

0.4.2

Patch Changes

  • Updated dependencies [a0584ec, dd14efe, dd14efe]:
    • @effect/platform@0.69.18
    • effect@3.10.12
    • @effect/ai@0.2.18
    • @effect/experimental@0.32.2

0.4.1

Patch Changes

  • Updated dependencies [5eef499, 8240b1c, 5eef499]:
    • effect@3.10.11
    • @effect/platform@0.69.17
    • @effect/ai@0.2.17
    • @effect/experimental@0.32.1

0.4.0

Patch Changes

  • Updated dependencies [12b3275]:
    • @effect/experimental@0.32.0

0.3.0

Patch Changes

0.2.16

Patch Changes

  • Updated dependencies [8a30e1d]:
    • @effect/platform@0.69.15
    • @effect/experimental@0.30.16
    • @effect/ai@0.2.15

0.2.15

Patch Changes

0.2.14

Patch Changes

0.2.13

Patch Changes

  • Updated dependencies [33f5b9f, 50f0281]:
    • effect@3.10.7
    • @effect/ai@0.2.12
    • @effect/experimental@0.30.13
    • @effect/platform@0.69.12

0.2.12

Patch Changes

  • Updated dependencies [ce1c21f, 81ddd45]:
    • effect@3.10.6
    • @effect/platform@0.69.11
    • @effect/ai@0.2.11
    • @effect/experimental@0.30.12

0.2.11

Patch Changes

  • #3854 b521577 Thanks @tim-smart! - update OpenAI schemas

  • Updated dependencies [3a6d757, 59d813a]:

    • effect@3.10.5
    • @effect/ai@0.2.10
    • @effect/experimental@0.30.11
    • @effect/platform@0.69.10

0.2.10

Patch Changes

  • Updated dependencies [2367708]:
    • @effect/platform@0.69.9
    • effect@3.10.4
    • @effect/ai@0.2.9
    • @effect/experimental@0.30.10

0.2.9

Patch Changes

  • Updated dependencies [522f7c5]:
    • @effect/platform@0.69.8
    • @effect/ai@0.2.8
    • @effect/experimental@0.30.9

0.2.8

Patch Changes

  • Updated dependencies [690d6c5, b9423d8, 279fe3a]:
    • @effect/platform@0.69.7
    • effect@3.10.3
    • @effect/ai@0.2.7
    • @effect/experimental@0.30.8

0.2.7

Patch Changes

  • Updated dependencies [714e119, c1afd55, 42cd72a]:
    • effect@3.10.2
    • @effect/platform@0.69.6
    • @effect/ai@0.2.6
    • @effect/experimental@0.30.7

0.2.6

Patch Changes

  • Updated dependencies [9604d6b, 9604d6b]:
    • @effect/experimental@0.30.6
    • effect@3.10.1
    • @effect/ai@0.2.5
    • @effect/platform@0.69.5

0.2.5

Patch Changes

  • Updated dependencies [c86b1d7]:
    • @effect/platform@0.69.4
    • @effect/ai@0.2.4
    • @effect/experimental@0.30.5

0.2.4

Patch Changes

  • Updated dependencies [d5fba63, 1eb2c30, 02d413e]:
    • @effect/platform@0.69.3
    • @effect/ai@0.2.3
    • @effect/experimental@0.30.4

0.2.3

Patch Changes

  • Updated dependencies [e7afc47]:
    • @effect/platform@0.69.2
    • @effect/ai@0.2.2
    • @effect/experimental@0.30.3

0.2.2

Patch Changes

  • Updated dependencies []:
    • @effect/experimental@0.30.2

0.2.1

Patch Changes

  • Updated dependencies [7564f56, 7564f56]:
    • @effect/platform@0.69.1
    • @effect/ai@0.2.1
    • @effect/experimental@0.30.1

0.2.0

Patch Changes

0.1.4

Patch Changes

  • Updated dependencies [382556f, 97cb014]:
    • @effect/schema@0.75.5
    • @effect/ai@0.1.4
    • @effect/experimental@0.29.6
    • @effect/platform@0.68.6

0.1.3

Patch Changes

  • Updated dependencies [2036402]:
    • @effect/platform@0.68.5
    • @effect/ai@0.1.3
    • @effect/experimental@0.29.5

0.1.2

Patch Changes

  • Updated dependencies [1b1ef29]:
    • @effect/platform@0.68.4
    • @effect/ai@0.1.2
    • @effect/experimental@0.29.4

0.1.1

Patch Changes

  • Updated dependencies [61a99b2, 8c33087]:
    • effect@3.9.2
    • @effect/platform@0.68.3
    • @effect/ai@0.1.1
    • @effect/experimental@0.29.3
    • @effect/schema@0.75.4

0.1.0

Minor Changes

  • #3631 bd160a4 Thanks @tim-smart! - add @effect/ai packages

    Experimental modules for working with LLMs, currently only from OpenAI.

Patch Changes

  • Updated dependencies [bd160a4, bd160a4, 360ec14]:
    • @effect/experimental@0.29.2
    • @effect/ai@0.1.0
    • @effect/schema@0.75.3
    • @effect/platform@0.68.2