@effect/ai-openai 0.17.1 → 0.19.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.
Files changed (70) hide show
  1. package/OpenAiEmbeddingModel/package.json +6 -0
  2. package/OpenAiLanguageModel/package.json +6 -0
  3. package/dist/cjs/OpenAiClient.js +111 -109
  4. package/dist/cjs/OpenAiClient.js.map +1 -1
  5. package/dist/cjs/OpenAiConfig.js +2 -2
  6. package/dist/cjs/OpenAiConfig.js.map +1 -1
  7. package/dist/cjs/{OpenAiEmbeddings.js → OpenAiEmbeddingModel.js} +22 -51
  8. package/dist/cjs/OpenAiEmbeddingModel.js.map +1 -0
  9. package/dist/cjs/OpenAiLanguageModel.js +490 -0
  10. package/dist/cjs/OpenAiLanguageModel.js.map +1 -0
  11. package/dist/cjs/OpenAiTelemetry.js +1 -1
  12. package/dist/cjs/OpenAiTelemetry.js.map +1 -1
  13. package/dist/cjs/OpenAiTokenizer.js +11 -13
  14. package/dist/cjs/OpenAiTokenizer.js.map +1 -1
  15. package/dist/cjs/index.js +5 -5
  16. package/dist/cjs/internal/utilities.js +25 -0
  17. package/dist/cjs/internal/utilities.js.map +1 -0
  18. package/dist/dts/OpenAiClient.d.ts +32 -75
  19. package/dist/dts/OpenAiClient.d.ts.map +1 -1
  20. package/dist/dts/OpenAiConfig.d.ts +5 -6
  21. package/dist/dts/OpenAiConfig.d.ts.map +1 -1
  22. package/dist/dts/{OpenAiEmbeddings.d.ts → OpenAiEmbeddingModel.d.ts} +16 -37
  23. package/dist/dts/OpenAiEmbeddingModel.d.ts.map +1 -0
  24. package/dist/dts/OpenAiLanguageModel.d.ts +108 -0
  25. package/dist/dts/OpenAiLanguageModel.d.ts.map +1 -0
  26. package/dist/dts/OpenAiTelemetry.d.ts +59 -64
  27. package/dist/dts/OpenAiTelemetry.d.ts.map +1 -1
  28. package/dist/dts/OpenAiTokenizer.d.ts +2 -2
  29. package/dist/dts/OpenAiTokenizer.d.ts.map +1 -1
  30. package/dist/dts/index.d.ts +3 -3
  31. package/dist/dts/index.d.ts.map +1 -1
  32. package/dist/dts/internal/utilities.d.ts +2 -0
  33. package/dist/dts/internal/utilities.d.ts.map +1 -0
  34. package/dist/esm/OpenAiClient.js +110 -106
  35. package/dist/esm/OpenAiClient.js.map +1 -1
  36. package/dist/esm/OpenAiConfig.js +2 -2
  37. package/dist/esm/OpenAiConfig.js.map +1 -1
  38. package/dist/esm/{OpenAiEmbeddings.js → OpenAiEmbeddingModel.js} +21 -48
  39. package/dist/esm/OpenAiEmbeddingModel.js.map +1 -0
  40. package/dist/esm/OpenAiLanguageModel.js +478 -0
  41. package/dist/esm/OpenAiLanguageModel.js.map +1 -0
  42. package/dist/esm/OpenAiTelemetry.js +1 -1
  43. package/dist/esm/OpenAiTelemetry.js.map +1 -1
  44. package/dist/esm/OpenAiTokenizer.js +11 -13
  45. package/dist/esm/OpenAiTokenizer.js.map +1 -1
  46. package/dist/esm/index.js +3 -3
  47. package/dist/esm/index.js.map +1 -1
  48. package/dist/esm/internal/utilities.js +16 -0
  49. package/dist/esm/internal/utilities.js.map +1 -0
  50. package/package.json +19 -19
  51. package/src/OpenAiClient.ts +184 -191
  52. package/src/OpenAiConfig.ts +7 -8
  53. package/src/{OpenAiEmbeddings.ts → OpenAiEmbeddingModel.ts} +39 -85
  54. package/src/OpenAiLanguageModel.ts +601 -0
  55. package/src/OpenAiTelemetry.ts +66 -71
  56. package/src/OpenAiTokenizer.ts +35 -26
  57. package/src/index.ts +3 -3
  58. package/src/internal/utilities.ts +19 -0
  59. package/OpenAiCompletions/package.json +0 -6
  60. package/OpenAiEmbeddings/package.json +0 -6
  61. package/dist/cjs/OpenAiCompletions.js +0 -358
  62. package/dist/cjs/OpenAiCompletions.js.map +0 -1
  63. package/dist/cjs/OpenAiEmbeddings.js.map +0 -1
  64. package/dist/dts/OpenAiCompletions.d.ts +0 -75
  65. package/dist/dts/OpenAiCompletions.d.ts.map +0 -1
  66. package/dist/dts/OpenAiEmbeddings.d.ts.map +0 -1
  67. package/dist/esm/OpenAiCompletions.js +0 -345
  68. package/dist/esm/OpenAiCompletions.js.map +0 -1
  69. package/dist/esm/OpenAiEmbeddings.js.map +0 -1
  70. package/src/OpenAiCompletions.ts +0 -500
@@ -1,15 +1,14 @@
1
1
  /**
2
2
  * @since 1.0.0
3
3
  */
4
+ import * as AiEmbeddingModel from "@effect/ai/AiEmbeddingModel"
4
5
  import { AiError } from "@effect/ai/AiError"
5
6
  import * as AiModel from "@effect/ai/AiModel"
6
- import * as Embeddings from "@effect/ai/Embeddings"
7
7
  import * as Tokenizer from "@effect/ai/Tokenizer"
8
8
  import * as Context from "effect/Context"
9
9
  import type * as Duration from "effect/Duration"
10
10
  import * as Effect from "effect/Effect"
11
11
  import { dual } from "effect/Function"
12
- import * as Layer from "effect/Layer"
13
12
  import * as Struct from "effect/Struct"
14
13
  import type { Simplify } from "effect/Types"
15
14
  import type * as Generated from "./Generated.js"
@@ -18,7 +17,7 @@ import * as OpenAiTokenizer from "./OpenAiTokenizer.js"
18
17
 
19
18
  /**
20
19
  * @since 1.0.0
21
- * @category models
20
+ * @category Models
22
21
  */
23
22
  export type Model = typeof Generated.CreateEmbeddingRequestModelEnum.Encoded
24
23
 
@@ -28,9 +27,9 @@ export type Model = typeof Generated.CreateEmbeddingRequestModelEnum.Encoded
28
27
 
29
28
  /**
30
29
  * @since 1.0.0
31
- * @category tags
30
+ * @category Context
32
31
  */
33
- export class Config extends Context.Tag("@effect/ai-openai/OpenAiEmbeddings/Config")<
32
+ export class Config extends Context.Tag("@effect/ai-openai/OpenAiEmbeddingModel/Config")<
34
33
  Config,
35
34
  Config.Service
36
35
  >() {
@@ -49,7 +48,7 @@ export class Config extends Context.Tag("@effect/ai-openai/OpenAiEmbeddings/Conf
49
48
  export declare namespace Config {
50
49
  /**
51
50
  * @since 1.0.
52
- * @category configuration
51
+ * @category Configuration
53
52
  */
54
53
  export interface Service extends
55
54
  Simplify<
@@ -64,7 +63,7 @@ export declare namespace Config {
64
63
 
65
64
  /**
66
65
  * @since 1.0.
67
- * @category configuration
66
+ * @category Configuration
68
67
  */
69
68
  export interface Batched extends Omit<Config.Service, "model"> {
70
69
  readonly maxBatchSize?: number
@@ -76,7 +75,7 @@ export declare namespace Config {
76
75
 
77
76
  /**
78
77
  * @since 1.0.
79
- * @category configuration
78
+ * @category Configuration
80
79
  */
81
80
  export interface DataLoader extends Omit<Config.Service, "model"> {
82
81
  readonly window: Duration.DurationInput
@@ -85,15 +84,15 @@ export declare namespace Config {
85
84
  }
86
85
 
87
86
  // =============================================================================
88
- // OpenAi Embeddings
87
+ // OpenAi Embedding Model
89
88
  // =============================================================================
90
89
 
91
- const batchedModelCacheKey = Symbol.for("@effect/ai-openai/OpenAiEmbeddings/Batched/AiModel")
92
- const dataLoaderModelCacheKey = Symbol.for("@effect/ai-openai/OpenAiEmbeddings/DataLoader/AiModel")
90
+ const batchedModelCacheKey = "@effect/ai-openai/OpenAiEmbeddingModel/Batched/AiModel"
91
+ const dataLoaderModelCacheKey = "@effect/ai-openai/OpenAiEmbeddingModel/DataLoader/AiModel"
93
92
 
94
93
  /**
95
94
  * @since 1.0.0
96
- * @category ai models
95
+ * @category Models
97
96
  */
98
97
  export const model = (
99
98
  model: (string & {}) | Model,
@@ -103,28 +102,30 @@ export const model = (
103
102
  | ({ readonly mode: "data-loader" } & Config.DataLoader)
104
103
  )
105
104
  >
106
- ): AiModel.AiModel<Embeddings.Embeddings | Tokenizer.Tokenizer, OpenAiClient> =>
105
+ ): AiModel.AiModel<AiEmbeddingModel.AiEmbeddingModel | Tokenizer.Tokenizer, OpenAiClient> =>
107
106
  AiModel.make({
108
- model,
109
- cacheKey: config.mode === "batched" ? batchedModelCacheKey : dataLoaderModelCacheKey,
110
- requires: OpenAiClient,
111
- provides: Effect.map(
107
+ cacheKey: config.mode === "batched"
108
+ ? batchedModelCacheKey
109
+ : dataLoaderModelCacheKey,
110
+ cachedContext: Effect.map(
112
111
  config.mode === "batched"
113
112
  ? makeBatched({ model, config })
114
113
  : makeDataLoader({ model, config }),
115
- (embeddings) => Context.make(Embeddings.Embeddings, embeddings)
116
- ) as Effect.Effect<Context.Context<Embeddings.Embeddings | Tokenizer.Tokenizer>>,
117
- updateContext: (context) => {
118
- const outerConfig = config.mode === "batched"
119
- ? Struct.omit("mode", "maxBatchSize", "cache")(config)
120
- : Struct.omit("mode", "maxBatchSize", "window")(config)
121
- const innerConfig = context.unsafeMap.get(Config.key) as Config.Service | undefined
122
- return Context.mergeAll(
123
- context,
124
- Context.make(Config, { model, ...outerConfig, ...innerConfig }),
125
- Context.make(Tokenizer.Tokenizer, OpenAiTokenizer.make({ model: innerConfig?.model ?? model }))
126
- )
127
- }
114
+ (model) => Context.make(AiEmbeddingModel.AiEmbeddingModel, model)
115
+ ),
116
+ updateRequestContext: Effect.fnUntraced(
117
+ function*(context: Context.Context<AiEmbeddingModel.AiEmbeddingModel>) {
118
+ const parentConfig = config.mode === "batched"
119
+ ? Struct.omit("mode", "maxBatchSize", "cache")(config)
120
+ : Struct.omit("mode", "maxBatchSize", "window")(config)
121
+ const perRequestConfig = yield* Config.getOrUndefined
122
+ return Context.mergeAll(
123
+ context,
124
+ Context.make(Config, { model, ...parentConfig, ...perRequestConfig }),
125
+ Context.make(Tokenizer.Tokenizer, OpenAiTokenizer.make({ model: perRequestConfig?.model ?? model }))
126
+ )
127
+ }
128
+ )
128
129
  })
129
130
 
130
131
  const makeRequest = (
@@ -149,7 +150,7 @@ const makeRequest = (
149
150
  ),
150
151
  Effect.mapError((cause) => {
151
152
  const common = {
152
- module: "OpenAiEmbeddings",
153
+ module: "OpenAiEmbeddingModel",
153
154
  method: "embed",
154
155
  cause
155
156
  }
@@ -172,7 +173,7 @@ const makeBatched = Effect.fnUntraced(function*(options: {
172
173
  }) {
173
174
  const client = yield* OpenAiClient
174
175
  const { cache, maxBatchSize = 2048, ...parentConfig } = options.config
175
- return yield* Embeddings.make({
176
+ return yield* AiEmbeddingModel.make({
176
177
  cache,
177
178
  maxBatchSize,
178
179
  embedMany(input) {
@@ -187,7 +188,7 @@ const makeDataLoader = Effect.fnUntraced(function*(options: {
187
188
  }) {
188
189
  const client = yield* OpenAiClient
189
190
  const { maxBatchSize = 2048, window, ...parentConfig } = options.config
190
- return yield* Embeddings.makeDataLoader({
191
+ return yield* AiEmbeddingModel.makeDataLoader({
191
192
  window,
192
193
  maxBatchSize,
193
194
  embedMany(input) {
@@ -198,75 +199,28 @@ const makeDataLoader = Effect.fnUntraced(function*(options: {
198
199
 
199
200
  /**
200
201
  * @since 1.0.0
201
- * @category layers
202
- */
203
- export const layer = (options: {
204
- readonly model: (string & {}) | Model
205
- readonly maxBatchSize?: number
206
- readonly cache?: {
207
- readonly capacity: number
208
- readonly timeToLive: Duration.DurationInput
209
- }
210
- readonly config?: Config.Service
211
- }): Layer.Layer<Embeddings.Embeddings, never, OpenAiClient> =>
212
- Layer.effect(
213
- Embeddings.Embeddings,
214
- makeBatched({
215
- model: options.model,
216
- config: {
217
- cache: options.cache,
218
- maxBatchSize: options.maxBatchSize,
219
- ...options.config
220
- }
221
- })
222
- )
223
-
224
- /**
225
- * @since 1.0.0
226
- * @category layers
227
- */
228
- export const layerDataLoader = (options: {
229
- readonly model: (string & {}) | Model
230
- readonly window: Duration.DurationInput
231
- readonly maxBatchSize?: number
232
- readonly config?: Config.Service
233
- }): Layer.Layer<Embeddings.Embeddings, never, OpenAiClient> =>
234
- Layer.scoped(
235
- Embeddings.Embeddings,
236
- makeDataLoader({
237
- model: options.model,
238
- config: {
239
- window: options.window,
240
- maxBatchSize: options.maxBatchSize,
241
- ...options.config
242
- }
243
- })
244
- )
245
-
246
- /**
247
- * @since 1.0.0
248
- * @category configuration
202
+ * @category Configuration
249
203
  */
250
204
  export const withConfigOverride: {
251
205
  /**
252
206
  * @since 1.0.0
253
- * @category configuration
207
+ * @category Configuration
254
208
  */
255
209
  (config: Config.Service): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>
256
210
  /**
257
211
  * @since 1.0.0
258
- * @category configuration
212
+ * @category Configuration
259
213
  */
260
214
  <A, E, R>(self: Effect.Effect<A, E, R>, config: Config.Service): Effect.Effect<A, E, R>
261
215
  } = dual<
262
216
  /**
263
217
  * @since 1.0.0
264
- * @category configuration
218
+ * @category Configuration
265
219
  */
266
220
  (config: Config.Service) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>,
267
221
  /**
268
222
  * @since 1.0.0
269
- * @category configuration
223
+ * @category Configuration
270
224
  */
271
225
  <A, E, R>(self: Effect.Effect<A, E, R>, config: Config.Service) => Effect.Effect<A, E, R>
272
226
  >(2, (self, overrides) =>