@effect/ai 0.26.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Chat/package.json +6 -0
- package/EmbeddingModel/package.json +6 -0
- package/IdGenerator/package.json +6 -0
- package/LanguageModel/package.json +6 -0
- package/Model/package.json +6 -0
- package/Prompt/package.json +6 -0
- package/Response/package.json +6 -0
- package/Telemetry/package.json +6 -0
- package/Tool/package.json +6 -0
- package/Toolkit/package.json +6 -0
- package/dist/cjs/AiError.js +575 -11
- package/dist/cjs/AiError.js.map +1 -1
- package/dist/cjs/Chat.js +302 -0
- package/dist/cjs/Chat.js.map +1 -0
- package/dist/cjs/EmbeddingModel.js +184 -0
- package/dist/cjs/EmbeddingModel.js.map +1 -0
- package/dist/cjs/IdGenerator.js +255 -0
- package/dist/cjs/IdGenerator.js.map +1 -0
- package/dist/cjs/LanguageModel.js +584 -0
- package/dist/cjs/LanguageModel.js.map +1 -0
- package/dist/cjs/McpServer.js +12 -4
- package/dist/cjs/McpServer.js.map +1 -1
- package/dist/cjs/Model.js +118 -0
- package/dist/cjs/Model.js.map +1 -0
- package/dist/cjs/Prompt.js +649 -0
- package/dist/cjs/Prompt.js.map +1 -0
- package/dist/cjs/Response.js +635 -0
- package/dist/cjs/Response.js.map +1 -0
- package/dist/cjs/Telemetry.js +176 -0
- package/dist/cjs/Telemetry.js.map +1 -0
- package/dist/cjs/Tokenizer.js +87 -8
- package/dist/cjs/Tokenizer.js.map +1 -1
- package/dist/cjs/Tool.js +556 -0
- package/dist/cjs/Tool.js.map +1 -0
- package/dist/cjs/Toolkit.js +279 -0
- package/dist/cjs/Toolkit.js.map +1 -0
- package/dist/cjs/index.js +21 -19
- package/dist/dts/AiError.d.ts +577 -9
- package/dist/dts/AiError.d.ts.map +1 -1
- package/dist/dts/Chat.d.ts +356 -0
- package/dist/dts/Chat.d.ts.map +1 -0
- package/dist/dts/EmbeddingModel.d.ts +153 -0
- package/dist/dts/EmbeddingModel.d.ts.map +1 -0
- package/dist/dts/IdGenerator.d.ts +272 -0
- package/dist/dts/IdGenerator.d.ts.map +1 -0
- package/dist/dts/LanguageModel.d.ts +458 -0
- package/dist/dts/LanguageModel.d.ts.map +1 -0
- package/dist/dts/McpSchema.d.ts +25 -25
- package/dist/dts/McpServer.d.ts +6 -4
- package/dist/dts/McpServer.d.ts.map +1 -1
- package/dist/dts/Model.d.ts +124 -0
- package/dist/dts/Model.d.ts.map +1 -0
- package/dist/dts/Prompt.d.ts +1119 -0
- package/dist/dts/Prompt.d.ts.map +1 -0
- package/dist/dts/Response.d.ts +1519 -0
- package/dist/dts/Response.d.ts.map +1 -0
- package/dist/dts/Telemetry.d.ts +520 -0
- package/dist/dts/Telemetry.d.ts.map +1 -0
- package/dist/dts/Tokenizer.d.ts +131 -13
- package/dist/dts/Tokenizer.d.ts.map +1 -1
- package/dist/dts/Tool.d.ts +876 -0
- package/dist/dts/Tool.d.ts.map +1 -0
- package/dist/dts/Toolkit.d.ts +310 -0
- package/dist/dts/Toolkit.d.ts.map +1 -0
- package/dist/dts/index.d.ts +498 -13
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/esm/AiError.js +570 -10
- package/dist/esm/AiError.js.map +1 -1
- package/dist/esm/Chat.js +291 -0
- package/dist/esm/Chat.js.map +1 -0
- package/dist/esm/EmbeddingModel.js +173 -0
- package/dist/esm/EmbeddingModel.js.map +1 -0
- package/dist/esm/IdGenerator.js +245 -0
- package/dist/esm/IdGenerator.js.map +1 -0
- package/dist/esm/LanguageModel.js +572 -0
- package/dist/esm/LanguageModel.js.map +1 -0
- package/dist/esm/McpServer.js +12 -4
- package/dist/esm/McpServer.js.map +1 -1
- package/dist/esm/Model.js +108 -0
- package/dist/esm/Model.js.map +1 -0
- package/dist/esm/Prompt.js +633 -0
- package/dist/esm/Prompt.js.map +1 -0
- package/dist/esm/Response.js +619 -0
- package/dist/esm/Response.js.map +1 -0
- package/dist/esm/Telemetry.js +166 -0
- package/dist/esm/Telemetry.js.map +1 -0
- package/dist/esm/Tokenizer.js +87 -8
- package/dist/esm/Tokenizer.js.map +1 -1
- package/dist/esm/Tool.js +534 -0
- package/dist/esm/Tool.js.map +1 -0
- package/dist/esm/Toolkit.js +269 -0
- package/dist/esm/Toolkit.js.map +1 -0
- package/dist/esm/index.js +498 -13
- package/dist/esm/index.js.map +1 -1
- package/package.json +76 -68
- package/src/AiError.ts +739 -9
- package/src/Chat.ts +546 -0
- package/src/EmbeddingModel.ts +311 -0
- package/src/IdGenerator.ts +320 -0
- package/src/LanguageModel.ts +1074 -0
- package/src/McpServer.ts +337 -194
- package/src/Model.ts +155 -0
- package/src/Prompt.ts +1616 -0
- package/src/Response.ts +2131 -0
- package/src/Telemetry.ts +655 -0
- package/src/Tokenizer.ts +145 -24
- package/src/Tool.ts +1267 -0
- package/src/Toolkit.ts +516 -0
- package/src/index.ts +499 -13
- package/AiChat/package.json +0 -6
- package/AiEmbeddingModel/package.json +0 -6
- package/AiInput/package.json +0 -6
- package/AiLanguageModel/package.json +0 -6
- package/AiModel/package.json +0 -6
- package/AiResponse/package.json +0 -6
- package/AiTelemetry/package.json +0 -6
- package/AiTool/package.json +0 -6
- package/AiToolkit/package.json +0 -6
- package/dist/cjs/AiChat.js +0 -122
- package/dist/cjs/AiChat.js.map +0 -1
- package/dist/cjs/AiEmbeddingModel.js +0 -109
- package/dist/cjs/AiEmbeddingModel.js.map +0 -1
- package/dist/cjs/AiInput.js +0 -458
- package/dist/cjs/AiInput.js.map +0 -1
- package/dist/cjs/AiLanguageModel.js +0 -351
- package/dist/cjs/AiLanguageModel.js.map +0 -1
- package/dist/cjs/AiModel.js +0 -37
- package/dist/cjs/AiModel.js.map +0 -1
- package/dist/cjs/AiResponse.js +0 -681
- package/dist/cjs/AiResponse.js.map +0 -1
- package/dist/cjs/AiTelemetry.js +0 -58
- package/dist/cjs/AiTelemetry.js.map +0 -1
- package/dist/cjs/AiTool.js +0 -150
- package/dist/cjs/AiTool.js.map +0 -1
- package/dist/cjs/AiToolkit.js +0 -157
- package/dist/cjs/AiToolkit.js.map +0 -1
- package/dist/cjs/internal/common.js +0 -21
- package/dist/cjs/internal/common.js.map +0 -1
- package/dist/dts/AiChat.d.ts +0 -101
- package/dist/dts/AiChat.d.ts.map +0 -1
- package/dist/dts/AiEmbeddingModel.d.ts +0 -65
- package/dist/dts/AiEmbeddingModel.d.ts.map +0 -1
- package/dist/dts/AiInput.d.ts +0 -590
- package/dist/dts/AiInput.d.ts.map +0 -1
- package/dist/dts/AiLanguageModel.d.ts +0 -302
- package/dist/dts/AiLanguageModel.d.ts.map +0 -1
- package/dist/dts/AiModel.d.ts +0 -25
- package/dist/dts/AiModel.d.ts.map +0 -1
- package/dist/dts/AiResponse.d.ts +0 -863
- package/dist/dts/AiResponse.d.ts.map +0 -1
- package/dist/dts/AiTelemetry.d.ts +0 -242
- package/dist/dts/AiTelemetry.d.ts.map +0 -1
- package/dist/dts/AiTool.d.ts +0 -334
- package/dist/dts/AiTool.d.ts.map +0 -1
- package/dist/dts/AiToolkit.d.ts +0 -96
- package/dist/dts/AiToolkit.d.ts.map +0 -1
- package/dist/dts/internal/common.d.ts +0 -2
- package/dist/dts/internal/common.d.ts.map +0 -1
- package/dist/esm/AiChat.js +0 -111
- package/dist/esm/AiChat.js.map +0 -1
- package/dist/esm/AiEmbeddingModel.js +0 -98
- package/dist/esm/AiEmbeddingModel.js.map +0 -1
- package/dist/esm/AiInput.js +0 -433
- package/dist/esm/AiInput.js.map +0 -1
- package/dist/esm/AiLanguageModel.js +0 -340
- package/dist/esm/AiLanguageModel.js.map +0 -1
- package/dist/esm/AiModel.js +0 -29
- package/dist/esm/AiModel.js.map +0 -1
- package/dist/esm/AiResponse.js +0 -657
- package/dist/esm/AiResponse.js.map +0 -1
- package/dist/esm/AiTelemetry.js +0 -48
- package/dist/esm/AiTelemetry.js.map +0 -1
- package/dist/esm/AiTool.js +0 -134
- package/dist/esm/AiTool.js.map +0 -1
- package/dist/esm/AiToolkit.js +0 -147
- package/dist/esm/AiToolkit.js.map +0 -1
- package/dist/esm/internal/common.js +0 -14
- package/dist/esm/internal/common.js.map +0 -1
- package/src/AiChat.ts +0 -251
- package/src/AiEmbeddingModel.ts +0 -169
- package/src/AiInput.ts +0 -602
- package/src/AiLanguageModel.ts +0 -685
- package/src/AiModel.ts +0 -53
- package/src/AiResponse.ts +0 -986
- package/src/AiTelemetry.ts +0 -333
- package/src/AiTool.ts +0 -579
- package/src/AiToolkit.ts +0 -265
- package/src/internal/common.ts +0 -12
package/src/Model.ts
ADDED
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `Model` module provides a unified interface for AI service providers.
|
|
3
|
+
*
|
|
4
|
+
* This module enables creation of provider-specific AI models that can be used
|
|
5
|
+
* interchangeably within the Effect AI ecosystem. It combines Layer
|
|
6
|
+
* functionality with provider identification, allowing for seamless switching
|
|
7
|
+
* between different AI service providers while maintaining type safety.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* import { Model, LanguageModel } from "@effect/ai"
|
|
12
|
+
* import { Effect, Layer } from "effect"
|
|
13
|
+
*
|
|
14
|
+
* declare const myAnthropicLayer: Layer.Layer<LanguageModel.LanguageModel>
|
|
15
|
+
*
|
|
16
|
+
* const anthropicModel = Model.make("anthropic", myAnthropicLayer)
|
|
17
|
+
*
|
|
18
|
+
* const program = Effect.gen(function* () {
|
|
19
|
+
* const response = yield* LanguageModel.generateText({
|
|
20
|
+
* prompt: "Hello, world!"
|
|
21
|
+
* })
|
|
22
|
+
* return response.text
|
|
23
|
+
* }).pipe(
|
|
24
|
+
* Effect.provide(anthropicModel)
|
|
25
|
+
* )
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* @since 1.0.0
|
|
29
|
+
*/
|
|
30
|
+
import * as Context from "effect/Context"
|
|
31
|
+
import * as Effect from "effect/Effect"
|
|
32
|
+
import { CommitPrototype } from "effect/Effectable"
|
|
33
|
+
import { identity } from "effect/Function"
|
|
34
|
+
import * as Layer from "effect/Layer"
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Unique identifier for Model instances.
|
|
38
|
+
*
|
|
39
|
+
* @since 1.0.0
|
|
40
|
+
* @category Type Ids
|
|
41
|
+
*/
|
|
42
|
+
export const TypeId = "~@effect/ai/Model"
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Type-level representation of the Model identifier.
|
|
46
|
+
*
|
|
47
|
+
* @since 1.0.0
|
|
48
|
+
* @category Type Ids
|
|
49
|
+
*/
|
|
50
|
+
export type TypeId = typeof TypeId
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* A Model represents a provider-specific AI service.
|
|
54
|
+
*
|
|
55
|
+
* A Model can be used directly as a Layer to provide a particular model
|
|
56
|
+
* implementation to an Effect program.
|
|
57
|
+
*
|
|
58
|
+
* A Model can also be used as an Effect to "lift" dependencies of the Model
|
|
59
|
+
* constructor into the parent Effect. This is particularly useful when you
|
|
60
|
+
* want to use a Model from within an Effect service.
|
|
61
|
+
*
|
|
62
|
+
* @template Provider - String literal type identifying the AI provider.
|
|
63
|
+
* @template Provides - Services that this model provides.
|
|
64
|
+
* @template Requires - Services that this model requires.
|
|
65
|
+
*
|
|
66
|
+
* @since 1.0.0
|
|
67
|
+
* @category Models
|
|
68
|
+
*/
|
|
69
|
+
export interface Model<in out Provider, in out Provides, in out Requires>
|
|
70
|
+
extends
|
|
71
|
+
Layer.Layer<Provides | ProviderName, never, Requires>,
|
|
72
|
+
Effect.Effect<Layer.Layer<Provides | ProviderName>, never, Requires>
|
|
73
|
+
{
|
|
74
|
+
readonly [TypeId]: TypeId
|
|
75
|
+
/**
|
|
76
|
+
* The provider identifier (e.g., "openai", "anthropic", "amazon-bedrock").
|
|
77
|
+
*/
|
|
78
|
+
readonly provider: Provider
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Service tag that provides the current large language model provider name.
|
|
83
|
+
*
|
|
84
|
+
* This tag is automatically provided by Model instances and can be used to
|
|
85
|
+
* access the name of the provider that is currently in use within a given
|
|
86
|
+
* Effect program.
|
|
87
|
+
*
|
|
88
|
+
* @since 1.0.0
|
|
89
|
+
* @category Context
|
|
90
|
+
*/
|
|
91
|
+
export class ProviderName extends Context.Tag("@effect/ai/Model/ProviderName")<
|
|
92
|
+
ProviderName,
|
|
93
|
+
string
|
|
94
|
+
>() {}
|
|
95
|
+
|
|
96
|
+
const ModelProto = {
|
|
97
|
+
...CommitPrototype,
|
|
98
|
+
[TypeId]: TypeId,
|
|
99
|
+
[Layer.LayerTypeId]: {
|
|
100
|
+
_ROut: identity,
|
|
101
|
+
_E: identity,
|
|
102
|
+
_RIn: identity
|
|
103
|
+
},
|
|
104
|
+
commit(this: Model<any, any, any>) {
|
|
105
|
+
return Effect.contextWith((context: Context.Context<never>) => {
|
|
106
|
+
return Layer.provide(this, Layer.succeedContext(context))
|
|
107
|
+
})
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Creates a Model from a provider name and a Layer that constructs AI services.
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* ```ts
|
|
116
|
+
* import { Model, LanguageModel } from "@effect/ai"
|
|
117
|
+
* import { Effect, Layer } from "effect"
|
|
118
|
+
*
|
|
119
|
+
* declare const bedrockLayer: Layer.Layer<LanguageModel.LanguageModel>
|
|
120
|
+
*
|
|
121
|
+
* // Model automatically provides ProviderName service
|
|
122
|
+
* const checkProviderAndGenerate = Effect.gen(function* () {
|
|
123
|
+
* const provider = yield* Model.ProviderName
|
|
124
|
+
*
|
|
125
|
+
* console.log(`Generating with: ${provider}`)
|
|
126
|
+
*
|
|
127
|
+
* return yield* LanguageModel.generateText({
|
|
128
|
+
* prompt: `Hello from ${provider}!`
|
|
129
|
+
* })
|
|
130
|
+
* })
|
|
131
|
+
*
|
|
132
|
+
* const program = checkProviderAndGenerate.pipe(
|
|
133
|
+
* Effect.provide(Model.make("amazon-bedrock", bedrockLayer))
|
|
134
|
+
* )
|
|
135
|
+
* // Will log: "Generating with: amazon-bedrock"
|
|
136
|
+
* ```
|
|
137
|
+
*
|
|
138
|
+
* @since 1.0.0
|
|
139
|
+
* @category Constructors
|
|
140
|
+
*/
|
|
141
|
+
export const make = <const Provider extends string, Provides, Requires>(
|
|
142
|
+
/**
|
|
143
|
+
* Provider identifier (e.g., "openai", "anthropic", "amazon-bedrock").
|
|
144
|
+
*/
|
|
145
|
+
provider: Provider,
|
|
146
|
+
/**
|
|
147
|
+
* Layer that provides the AI services for this provider.
|
|
148
|
+
*/
|
|
149
|
+
layer: Layer.Layer<Provides, never, Requires>
|
|
150
|
+
): Model<Provider, Provides, Requires> =>
|
|
151
|
+
Object.assign(
|
|
152
|
+
Object.create(ModelProto),
|
|
153
|
+
{ provider },
|
|
154
|
+
Layer.merge(Layer.succeed(ProviderName, provider), layer)
|
|
155
|
+
)
|