@effect/ai-openai 4.0.0-beta.4 → 4.0.0-beta.41

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.
@@ -4,9 +4,11 @@ import * as Layer from "effect/Layer";
4
4
  import * as Redacted from "effect/Redacted";
5
5
  import * as ServiceMap from "effect/ServiceMap";
6
6
  import * as Stream from "effect/Stream";
7
- import type * as AiError from "effect/unstable/ai/AiError";
7
+ import * as AiError from "effect/unstable/ai/AiError";
8
+ import * as ResponseIdTracker from "effect/unstable/ai/ResponseIdTracker";
8
9
  import * as HttpClient from "effect/unstable/http/HttpClient";
9
- import type * as HttpClientResponse from "effect/unstable/http/HttpClientResponse";
10
+ import * as HttpClientResponse from "effect/unstable/http/HttpClientResponse";
11
+ import * as Socket from "effect/unstable/socket/Socket";
10
12
  import * as Generated from "./Generated.ts";
11
13
  /**
12
14
  * The OpenAI client interface.
@@ -22,14 +24,11 @@ export interface Service {
22
24
  /**
23
25
  * Create a response using the OpenAI responses endpoint.
24
26
  */
25
- readonly createResponse: (options: typeof Generated.CreateResponse.Encoded) => Effect.Effect<[
26
- body: typeof Generated.Response.Type,
27
- response: HttpClientResponse.HttpClientResponse
28
- ], AiError.AiError>;
27
+ readonly createResponse: (options: typeof Generated.CreateResponse.Encoded) => Effect.Effect<readonly [body: typeof Generated.Response.Type, response: HttpClientResponse.HttpClientResponse], AiError.AiError>;
29
28
  /**
30
29
  * Create a streaming response using the OpenAI responses endpoint.
31
30
  */
32
- readonly createResponseStream: (options: Omit<typeof Generated.CreateResponse.Encoded, "stream">) => Effect.Effect<[
31
+ readonly createResponseStream: (options: Omit<typeof Generated.CreateResponse.Encoded, "stream">) => Effect.Effect<readonly [
33
32
  response: HttpClientResponse.HttpClientResponse,
34
33
  stream: Stream.Stream<typeof Generated.ResponseStreamEvent.Type, AiError.AiError>
35
34
  ], AiError.AiError>;
@@ -102,7 +101,7 @@ export declare const layerConfig: (options?: {
102
101
  /**
103
102
  * The config value to load for the API key.
104
103
  */
105
- readonly apiKey?: Config.Config<Redacted.Redacted<string>> | undefined;
104
+ readonly apiKey?: Config.Config<Redacted.Redacted<string> | undefined> | undefined;
106
105
  /**
107
106
  * The config value to load for the API URL.
108
107
  */
@@ -110,15 +109,62 @@ export declare const layerConfig: (options?: {
110
109
  /**
111
110
  * The config value to load for the organization ID.
112
111
  */
113
- readonly organizationId?: Config.Config<Redacted.Redacted<string>> | undefined;
112
+ readonly organizationId?: Config.Config<Redacted.Redacted<string> | undefined> | undefined;
114
113
  /**
115
114
  * The config value to load for the project ID.
116
115
  */
117
- readonly projectId?: Config.Config<Redacted.Redacted<string>> | undefined;
116
+ readonly projectId?: Config.Config<Redacted.Redacted<string> | undefined> | undefined;
118
117
  /**
119
118
  * Optional transformer for the HTTP client.
120
119
  */
121
120
  readonly transformClient?: ((client: HttpClient.HttpClient) => HttpClient.HttpClient) | undefined;
122
121
  }) => Layer.Layer<OpenAiClient, Config.ConfigError, HttpClient.HttpClient>;
122
+ /**
123
+ * @since 1.0.0
124
+ * @category Events
125
+ */
126
+ export type ResponseStreamEvent = typeof Generated.ResponseStreamEvent.Type;
127
+ declare const OpenAiSocket_base: ServiceMap.ServiceClass<OpenAiSocket, "@effect/ai-openai/OpenAiClient/OpenAiSocket", {
128
+ /**
129
+ * Create a streaming response using the OpenAI responses endpoint.
130
+ */
131
+ readonly createResponseStream: (options: Omit<typeof Generated.CreateResponse.Encoded, "stream">) => Effect.Effect<readonly [response: HttpClientResponse.HttpClientResponse, stream: Stream.Stream<ResponseStreamEvent, AiError.AiError>], AiError.AiError>;
132
+ }>;
133
+ /**
134
+ * @since 1.0.0
135
+ * @category Websocket mode
136
+ */
137
+ export declare class OpenAiSocket extends OpenAiSocket_base {
138
+ }
139
+ /**
140
+ * Uses OpenAI's websocket mode for all responses within the provided effect.
141
+ *
142
+ * Note: This only works with the following WebSocket constructor layers:
143
+ *
144
+ * - `NodeSocket.layerWebSocketConstructorWS`
145
+ * - `BunSocket.layerWebSocketConstructor`
146
+ *
147
+ * This is because it needs to use non-standard options for setting the
148
+ * Authorization header.
149
+ *
150
+ * @since 1.0.0
151
+ * @category Websocket mode
152
+ */
153
+ export declare const withWebSocketMode: <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, OpenAiSocket | ResponseIdTracker.ResponseIdTracker> | OpenAiClient | Socket.WebSocketConstructor>;
154
+ /**
155
+ * Uses OpenAI's websocket mode for all responses that use the Layer.
156
+ *
157
+ * Note: This only works with the following WebSocket constructor layers:
158
+ *
159
+ * - `NodeSocket.layerWebSocketConstructorWS`
160
+ * - `BunSocket.layerWebSocketConstructor`
161
+ *
162
+ * This is because it needs to use non-standard options for setting the
163
+ * Authorization header.
164
+ *
165
+ * @since 1.0.0
166
+ * @category Websocket mode
167
+ */
168
+ export declare const layerWebSocketMode: Layer.Layer<OpenAiSocket | ResponseIdTracker.ResponseIdTracker, never, OpenAiClient | Socket.WebSocketConstructor>;
123
169
  export {};
124
170
  //# sourceMappingURL=OpenAiClient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"OpenAiClient.d.ts","sourceRoot":"","sources":["../src/OpenAiClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OpenAiClient.d.ts","sourceRoot":"","sources":["../src/OpenAiClient.ts"],"names":[],"mappings":"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"}
@@ -7,18 +7,31 @@
7
7
  * @since 1.0.0
8
8
  */
9
9
  import * as Array from "effect/Array";
10
+ import * as Cause from "effect/Cause";
10
11
  import * as Effect from "effect/Effect";
12
+ import * as Exit from "effect/Exit";
11
13
  import { identity } from "effect/Function";
14
+ import * as Function from "effect/Function";
12
15
  import * as Layer from "effect/Layer";
13
16
  import * as Predicate from "effect/Predicate";
17
+ import * as Queue from "effect/Queue";
18
+ import * as RcRef from "effect/RcRef";
14
19
  import * as Redacted from "effect/Redacted";
20
+ import * as Schedule from "effect/Schedule";
21
+ import * as Schema from "effect/Schema";
22
+ import * as Scope from "effect/Scope";
23
+ import * as Semaphore from "effect/Semaphore";
15
24
  import * as ServiceMap from "effect/ServiceMap";
16
25
  import * as Stream from "effect/Stream";
26
+ import * as AiError from "effect/unstable/ai/AiError";
27
+ import * as ResponseIdTracker from "effect/unstable/ai/ResponseIdTracker";
17
28
  import * as Sse from "effect/unstable/encoding/Sse";
18
29
  import * as Headers from "effect/unstable/http/Headers";
19
30
  import * as HttpBody from "effect/unstable/http/HttpBody";
20
31
  import * as HttpClient from "effect/unstable/http/HttpClient";
21
32
  import * as HttpClientRequest from "effect/unstable/http/HttpClientRequest";
33
+ import * as HttpClientResponse from "effect/unstable/http/HttpClientResponse";
34
+ import * as Socket from "effect/unstable/socket/Socket";
22
35
  import * as Generated from "./Generated.js";
23
36
  import * as Errors from "./internal/errors.js";
24
37
  import { OpenAiConfig } from "./OpenAiConfig.js";
@@ -47,7 +60,8 @@ const RedactedOpenAiHeaders = {
47
60
  */
48
61
  export const make = /*#__PURE__*/Effect.fnUntraced(function* (options) {
49
62
  const baseClient = yield* HttpClient.HttpClient;
50
- const httpClient = baseClient.pipe(HttpClient.mapRequest(request => request.pipe(HttpClientRequest.prependUrl(options.apiUrl ?? "https://api.openai.com/v1"), Predicate.isNotUndefined(options.apiKey) ? HttpClientRequest.bearerToken(Redacted.value(options.apiKey)) : identity, Predicate.isNotUndefined(options.organizationId) ? HttpClientRequest.setHeader(RedactedOpenAiHeaders.OpenAiOrganization, Redacted.value(options.organizationId)) : identity, Predicate.isNotUndefined(options.projectId) ? HttpClientRequest.setHeader(RedactedOpenAiHeaders.OpenAiProject, Redacted.value(options.projectId)) : identity, HttpClientRequest.acceptJson)), Predicate.isNotUndefined(options.transformClient) ? options.transformClient : identity);
63
+ const apiUrl = options.apiUrl ?? "https://api.openai.com/v1";
64
+ const httpClient = baseClient.pipe(HttpClient.mapRequest(Function.flow(HttpClientRequest.prependUrl(apiUrl), options.apiKey ? HttpClientRequest.bearerToken(Redacted.value(options.apiKey)) : identity, options.organizationId ? HttpClientRequest.setHeader(RedactedOpenAiHeaders.OpenAiOrganization, Redacted.value(options.organizationId)) : identity, options.projectId ? HttpClientRequest.setHeader(RedactedOpenAiHeaders.OpenAiProject, Redacted.value(options.projectId)) : identity, HttpClientRequest.acceptJson)), options.transformClient ? options.transformClient : identity);
51
65
  const httpClientOk = HttpClient.filterStatusOk(httpClient);
52
66
  const client = Generated.make(httpClient, {
53
67
  transformClient: Effect.fnUntraced(function* (client) {
@@ -76,12 +90,16 @@ export const make = /*#__PURE__*/Effect.fnUntraced(function* (options) {
76
90
  }));
77
91
  return [response, stream];
78
92
  };
79
- const createResponseStream = payload => httpClientOk.execute(HttpClientRequest.post("/responses", {
80
- body: HttpBody.jsonUnsafe({
81
- ...payload,
82
- stream: true
83
- })
84
- })).pipe(Effect.map(buildResponseStream), Effect.catchTag("HttpClientError", error => Errors.mapHttpClientError(error, "createResponseStream")));
93
+ const createResponseStream = payload => Effect.servicesWith(services => {
94
+ const socket = ServiceMap.getOrUndefined(services, OpenAiSocket);
95
+ if (socket) return socket.createResponseStream(payload);
96
+ return httpClientOk.execute(HttpClientRequest.post("/responses", {
97
+ body: HttpBody.jsonUnsafe({
98
+ ...payload,
99
+ stream: true
100
+ })
101
+ })).pipe(Effect.map(buildResponseStream), Effect.catchTag("HttpClientError", error => Errors.mapHttpClientError(error, "createResponseStream")));
102
+ });
85
103
  const createEmbedding = payload => client.createEmbedding({
86
104
  payload
87
105
  }).pipe(Effect.catchTags({
@@ -125,4 +143,176 @@ export const layerConfig = options => Layer.effect(OpenAiClient, Effect.gen(func
125
143
  transformClient: options?.transformClient
126
144
  });
127
145
  }));
146
+ /**
147
+ * @since 1.0.0
148
+ * @category Websocket mode
149
+ */
150
+ export class OpenAiSocket extends /*#__PURE__*/ServiceMap.Service()("@effect/ai-openai/OpenAiClient/OpenAiSocket") {}
151
+ const makeSocket = /*#__PURE__*/Effect.gen(function* () {
152
+ const client = yield* OpenAiClient;
153
+ const tracker = yield* ResponseIdTracker.make;
154
+ const request = yield* Effect.orDie(client.client.httpClient.preprocess(HttpClientRequest.post("/responses")));
155
+ const socket = yield* Socket.makeWebSocket(request.url.replace(/^http/, "ws")).pipe(Effect.updateService(Socket.WebSocketConstructor, f => url => f(url, {
156
+ headers: request.headers
157
+ })));
158
+ const queueRef = yield* RcRef.make({
159
+ idleTimeToLive: 60_000,
160
+ acquire: Effect.gen(function* () {
161
+ const write = yield* socket.writer;
162
+ let currentQueue = null;
163
+ const send = (queue, message) => Effect.suspend(() => {
164
+ currentQueue = queue;
165
+ return write(JSON.stringify({
166
+ type: "response.create",
167
+ ...message
168
+ }));
169
+ }).pipe(Effect.mapError(_error => AiError.make({
170
+ module: "OpenAiClient",
171
+ method: "createResponseStream",
172
+ reason: new AiError.NetworkError({
173
+ reason: "TransportError",
174
+ request: {
175
+ method: "POST",
176
+ url: request.url,
177
+ urlParams: [],
178
+ hash: undefined,
179
+ headers: request.headers
180
+ },
181
+ description: "Failed to send message over WebSocket"
182
+ })
183
+ })));
184
+ const reset = () => {
185
+ currentQueue = null;
186
+ };
187
+ const decoder = new TextDecoder();
188
+ yield* socket.runRaw(msg => {
189
+ if (!currentQueue) return;
190
+ const text = typeof msg === "string" ? msg : decoder.decode(msg);
191
+ try {
192
+ const event = decodeEvent(text);
193
+ if (event.type === "error") {
194
+ tracker.clearUnsafe();
195
+ }
196
+ if (event.type === "error" && "status" in event) {
197
+ const json = JSON.stringify(event.error);
198
+ return Effect.fail(AiError.make({
199
+ module: "OpenAiClient",
200
+ method: "createResponseStream",
201
+ reason: AiError.reasonFromHttpStatus({
202
+ description: json,
203
+ status: event.status,
204
+ metadata: event.error,
205
+ http: {
206
+ body: json,
207
+ request: {
208
+ method: "POST",
209
+ url: request.url,
210
+ urlParams: [],
211
+ hash: undefined,
212
+ headers: request.headers
213
+ }
214
+ }
215
+ })
216
+ }));
217
+ }
218
+ Queue.offerUnsafe(currentQueue, event);
219
+ } catch {}
220
+ }).pipe(Effect.catchCause(cause => {
221
+ tracker.clearUnsafe();
222
+ return currentQueue ? Queue.fail(currentQueue, AiError.make({
223
+ module: "OpenAiClient",
224
+ method: "createResponseStream",
225
+ reason: new AiError.NetworkError({
226
+ reason: "TransportError",
227
+ request: {
228
+ method: "POST",
229
+ url: request.url,
230
+ urlParams: [],
231
+ hash: undefined,
232
+ headers: request.headers
233
+ },
234
+ description: Cause.pretty(cause)
235
+ })
236
+ })) : Effect.void;
237
+ }), Effect.repeat(Schedule.exponential(100, 1.5).pipe(Schedule.either(Schedule.spaced({
238
+ seconds: 5
239
+ })), Schedule.jittered)), Effect.forkScoped);
240
+ return {
241
+ send,
242
+ reset
243
+ };
244
+ })
245
+ });
246
+ // Websocket mode only allows one request at a time
247
+ const semaphore = Semaphore.makeUnsafe(1);
248
+ return OpenAiSocket.serviceMap({
249
+ createResponseStream(options) {
250
+ const stream = Effect.gen(function* () {
251
+ yield* Effect.acquireRelease(semaphore.take(1), () => semaphore.release(1), {
252
+ interruptible: true
253
+ });
254
+ const {
255
+ send,
256
+ reset
257
+ } = yield* RcRef.get(queueRef);
258
+ const incoming = yield* Queue.unbounded();
259
+ let done = false;
260
+ yield* Effect.acquireRelease(send(incoming, options), (_, exit) => {
261
+ reset();
262
+ if (Exit.isFailure(exit) && !Exit.hasInterrupts(exit)) return Effect.void;else if (done) return Effect.void;
263
+ return RcRef.invalidate(queueRef);
264
+ }, {
265
+ interruptible: true
266
+ }).pipe(Effect.forkScoped({
267
+ startImmediately: true
268
+ }));
269
+ return Stream.fromQueue(incoming).pipe(Stream.takeUntil(e => {
270
+ done = e.type === "response.completed" || e.type === "response.incomplete";
271
+ return done;
272
+ }));
273
+ }).pipe(Stream.unwrap);
274
+ return Effect.succeed([HttpClientResponse.fromWeb(request, new Response()), stream]);
275
+ }
276
+ }).pipe(ServiceMap.add(ResponseIdTracker.ResponseIdTracker, tracker));
277
+ });
278
+ const ErrorEvent = /*#__PURE__*/Schema.Struct({
279
+ type: /*#__PURE__*/Schema.Literal("error"),
280
+ status: /*#__PURE__*/Schema.Number.pipe(/*#__PURE__*/Schema.withDecodingDefault(() => 500)),
281
+ error: /*#__PURE__*/Schema.Struct({
282
+ type: Schema.String,
283
+ message: Schema.String
284
+ })
285
+ });
286
+ const AllEvents = /*#__PURE__*/Schema.Union([ErrorEvent, Generated.ResponseStreamEvent]);
287
+ const decodeEvent = /*#__PURE__*/Schema.decodeUnknownSync(/*#__PURE__*/Schema.fromJsonString(AllEvents));
288
+ /**
289
+ * Uses OpenAI's websocket mode for all responses within the provided effect.
290
+ *
291
+ * Note: This only works with the following WebSocket constructor layers:
292
+ *
293
+ * - `NodeSocket.layerWebSocketConstructorWS`
294
+ * - `BunSocket.layerWebSocketConstructor`
295
+ *
296
+ * This is because it needs to use non-standard options for setting the
297
+ * Authorization header.
298
+ *
299
+ * @since 1.0.0
300
+ * @category Websocket mode
301
+ */
302
+ export const withWebSocketMode = effect => Effect.scopedWith(scope => Effect.flatMap(Scope.provide(makeSocket, scope), services => Effect.provideServices(effect, services)));
303
+ /**
304
+ * Uses OpenAI's websocket mode for all responses that use the Layer.
305
+ *
306
+ * Note: This only works with the following WebSocket constructor layers:
307
+ *
308
+ * - `NodeSocket.layerWebSocketConstructorWS`
309
+ * - `BunSocket.layerWebSocketConstructor`
310
+ *
311
+ * This is because it needs to use non-standard options for setting the
312
+ * Authorization header.
313
+ *
314
+ * @since 1.0.0
315
+ * @category Websocket mode
316
+ */
317
+ export const layerWebSocketMode = /*#__PURE__*/Layer.effectServices(makeSocket);
128
318
  //# sourceMappingURL=OpenAiClient.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OpenAiClient.js","names":["Array","Effect","identity","Layer","Predicate","Redacted","ServiceMap","Stream","Sse","Headers","HttpBody","HttpClient","HttpClientRequest","Generated","Errors","OpenAiConfig","OpenAiClient","Service","RedactedOpenAiHeaders","OpenAiOrganization","OpenAiProject","make","fnUntraced","options","baseClient","httpClient","pipe","mapRequest","request","prependUrl","apiUrl","isNotUndefined","apiKey","bearerToken","value","organizationId","setHeader","projectId","acceptJson","transformClient","httpClientOk","filterStatusOk","client","config","getOrUndefined","createResponse","payload","includeResponse","catchTags","HttpClientError","error","mapHttpClientError","SchemaError","fail","mapSchemaError","buildResponseStream","response","stream","decodeText","pipeThroughChannel","decodeDataSchema","ResponseStreamEvent","takeUntil","event","data","type","map","Retry","die","fromEffect","createResponseStream","execute","post","body","jsonUnsafe","catchTag","createEmbedding","of","updateService","CurrentRedactedNames","appendAll","Object","values","layer","effect","layerConfig","gen","undefined"],"sources":["../src/OpenAiClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"OpenAiClient.js","names":["Array","Cause","Effect","Exit","identity","Function","Layer","Predicate","Queue","RcRef","Redacted","Schedule","Schema","Scope","Semaphore","ServiceMap","Stream","AiError","ResponseIdTracker","Sse","Headers","HttpBody","HttpClient","HttpClientRequest","HttpClientResponse","Socket","Generated","Errors","OpenAiConfig","OpenAiClient","Service","RedactedOpenAiHeaders","OpenAiOrganization","OpenAiProject","make","fnUntraced","options","baseClient","apiUrl","httpClient","pipe","mapRequest","flow","prependUrl","apiKey","bearerToken","value","organizationId","setHeader","projectId","acceptJson","transformClient","httpClientOk","filterStatusOk","client","config","getOrUndefined","isNotUndefined","createResponse","payload","includeResponse","catchTags","HttpClientError","error","mapHttpClientError","SchemaError","fail","mapSchemaError","buildResponseStream","response","stream","decodeText","pipeThroughChannel","decodeDataSchema","ResponseStreamEvent","takeUntil","event","data","type","map","Retry","die","fromEffect","createResponseStream","servicesWith","services","socket","OpenAiSocket","execute","post","body","jsonUnsafe","catchTag","createEmbedding","of","updateService","CurrentRedactedNames","appendAll","Object","values","layer","effect","layerConfig","gen","undefined","makeSocket","tracker","request","orDie","preprocess","makeWebSocket","url","replace","WebSocketConstructor","f","headers","queueRef","idleTimeToLive","acquire","write","writer","currentQueue","send","queue","message","suspend","JSON","stringify","mapError","_error","module","method","reason","NetworkError","urlParams","hash","description","reset","decoder","TextDecoder","runRaw","msg","text","decode","decodeEvent","clearUnsafe","json","reasonFromHttpStatus","status","metadata","http","offerUnsafe","catchCause","cause","pretty","void","repeat","exponential","either","spaced","seconds","jittered","forkScoped","semaphore","makeUnsafe","serviceMap","acquireRelease","take","release","interruptible","get","incoming","unbounded","done","_","exit","isFailure","hasInterrupts","invalidate","startImmediately","fromQueue","e","unwrap","succeed","fromWeb","Response","add","ErrorEvent","Struct","Literal","Number","withDecodingDefault","String","AllEvents","Union","decodeUnknownSync","fromJsonString","withWebSocketMode","scopedWith","scope","flatMap","provide","provideServices","layerWebSocketMode","effectServices"],"sources":["../src/OpenAiClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * OpenAI Embedding Model implementation.
3
+ *
4
+ * Provides an EmbeddingModel implementation for OpenAI's embeddings API.
5
+ *
6
+ * @since 1.0.0
7
+ */
8
+ import * as Effect from "effect/Effect";
9
+ import * as Layer from "effect/Layer";
10
+ import * as ServiceMap from "effect/ServiceMap";
11
+ import * as EmbeddingModel from "effect/unstable/ai/EmbeddingModel";
12
+ import * as AiModel from "effect/unstable/ai/Model";
13
+ import { OpenAiClient } from "./OpenAiClient.ts";
14
+ /**
15
+ * @since 1.0.0
16
+ * @category models
17
+ */
18
+ export type Model = "text-embedding-ada-002" | "text-embedding-3-small" | "text-embedding-3-large";
19
+ declare const Config_base: ServiceMap.ServiceClass<Config, "@effect/ai-openai/OpenAiEmbeddingModel/Config", {
20
+ readonly [x: string]: unknown;
21
+ readonly encoding_format?: "float" | "base64";
22
+ readonly dimensions?: number;
23
+ readonly user?: string;
24
+ readonly model?: string;
25
+ }>;
26
+ /**
27
+ * Service definition for OpenAI embedding model configuration.
28
+ *
29
+ * @since 1.0.0
30
+ * @category services
31
+ */
32
+ export declare class Config extends Config_base {
33
+ }
34
+ /**
35
+ * @since 1.0.0
36
+ * @category constructors
37
+ */
38
+ export declare const model: (model: (string & {}) | Model, options: {
39
+ readonly dimensions: number;
40
+ readonly config?: Omit<typeof Config.Service, "model" | "dimensions">;
41
+ }) => AiModel.Model<"openai", EmbeddingModel.EmbeddingModel | EmbeddingModel.Dimensions, OpenAiClient>;
42
+ /**
43
+ * Creates an OpenAI embedding model service.
44
+ *
45
+ * @since 1.0.0
46
+ * @category constructors
47
+ */
48
+ export declare const make: (args_0: {
49
+ readonly model: (string & {}) | Model;
50
+ readonly config?: Omit<typeof Config.Service, "model"> | undefined;
51
+ }) => Effect.Effect<EmbeddingModel.Service, never, OpenAiClient>;
52
+ /**
53
+ * Creates a layer for the OpenAI embedding model.
54
+ *
55
+ * @since 1.0.0
56
+ * @category layers
57
+ */
58
+ export declare const layer: (options: {
59
+ readonly model: (string & {}) | Model;
60
+ readonly config?: Omit<typeof Config.Service, "model"> | undefined;
61
+ }) => Layer.Layer<EmbeddingModel.EmbeddingModel, never, OpenAiClient>;
62
+ /**
63
+ * Provides config overrides for OpenAI embedding model operations.
64
+ *
65
+ * @since 1.0.0
66
+ * @category configuration
67
+ */
68
+ export declare const withConfigOverride: {
69
+ /**
70
+ * Provides config overrides for OpenAI embedding model operations.
71
+ *
72
+ * @since 1.0.0
73
+ * @category configuration
74
+ */
75
+ (overrides: typeof Config.Service): <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, Config>>;
76
+ /**
77
+ * Provides config overrides for OpenAI embedding model operations.
78
+ *
79
+ * @since 1.0.0
80
+ * @category configuration
81
+ */
82
+ <A, E, R>(self: Effect.Effect<A, E, R>, overrides: typeof Config.Service): Effect.Effect<A, E, Exclude<R, Config>>;
83
+ };
84
+ export {};
85
+ //# sourceMappingURL=OpenAiEmbeddingModel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenAiEmbeddingModel.d.ts","sourceRoot":"","sources":["../src/OpenAiEmbeddingModel.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAA;AAG/C,OAAO,KAAK,cAAc,MAAM,mCAAmC,CAAA;AACnE,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAA;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD;;;GAGG;AACH,MAAM,MAAM,KAAK,GAAG,wBAAwB,GAAG,wBAAwB,GAAG,wBAAwB,CAAA;;;;;;;;AAElG;;;;;GAKG;AACH,qBAAa,MAAO,SAAQ,WAawB;CAAG;AAEvD;;;GAGG;AACH,eAAO,MAAM,KAAK,GAChB,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,KAAK,EAC5B,SAAS;IACP,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,CAAC,CAAA;CACtE,KACA,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,cAAc,CAAC,cAAc,GAAG,cAAc,CAAC,UAAU,EAAE,YAAY,CAc/F,CAAA;AAEH;;;;;GAKG;AACH,eAAO,MAAM,IAAI;oBACC,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,KAAK;sBACnB,IAAI,CAAC,OAAO,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,SAAS;gEAgBlE,CAAA;AAEF;;;;;GAKG;AACH,eAAO,MAAM,KAAK,GAAI,SAAS;IAC7B,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,KAAK,CAAA;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;CACnE,KAAG,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,EAAE,KAAK,EAAE,YAAY,CACN,CAAA;AAE5D;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE;IAC/B;;;;;OAKG;IACH,CAAC,SAAS,EAAE,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;IACtH;;;;;OAKG;IACH,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;CAwBhH,CAAA"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * OpenAI Embedding Model implementation.
3
+ *
4
+ * Provides an EmbeddingModel implementation for OpenAI's embeddings API.
5
+ *
6
+ * @since 1.0.0
7
+ */
8
+ import * as Effect from "effect/Effect";
9
+ import { dual } from "effect/Function";
10
+ import * as Layer from "effect/Layer";
11
+ import * as ServiceMap from "effect/ServiceMap";
12
+ import * as AiError from "effect/unstable/ai/AiError";
13
+ import * as EmbeddingModel from "effect/unstable/ai/EmbeddingModel";
14
+ import * as AiModel from "effect/unstable/ai/Model";
15
+ import { OpenAiClient } from "./OpenAiClient.js";
16
+ /**
17
+ * Service definition for OpenAI embedding model configuration.
18
+ *
19
+ * @since 1.0.0
20
+ * @category services
21
+ */
22
+ export class Config extends /*#__PURE__*/ServiceMap.Service()("@effect/ai-openai/OpenAiEmbeddingModel/Config") {}
23
+ /**
24
+ * @since 1.0.0
25
+ * @category constructors
26
+ */
27
+ export const model = (model, options) => AiModel.make("openai", model, Layer.merge(layer({
28
+ model,
29
+ config: {
30
+ ...options.config,
31
+ dimensions: options.dimensions
32
+ }
33
+ }), Layer.succeed(EmbeddingModel.Dimensions, options.dimensions)));
34
+ /**
35
+ * Creates an OpenAI embedding model service.
36
+ *
37
+ * @since 1.0.0
38
+ * @category constructors
39
+ */
40
+ export const make = /*#__PURE__*/Effect.fnUntraced(function* ({
41
+ model,
42
+ config: providerConfig
43
+ }) {
44
+ const client = yield* OpenAiClient;
45
+ const makeConfig = Effect.gen(function* () {
46
+ const services = yield* Effect.services();
47
+ return {
48
+ model,
49
+ ...providerConfig,
50
+ ...services.mapUnsafe.get(Config.key)
51
+ };
52
+ });
53
+ return yield* EmbeddingModel.make({
54
+ embedMany: Effect.fnUntraced(function* ({
55
+ inputs
56
+ }) {
57
+ const config = yield* makeConfig;
58
+ const response = yield* client.createEmbedding({
59
+ ...config,
60
+ input: inputs
61
+ });
62
+ return yield* mapProviderResponse(inputs.length, response);
63
+ })
64
+ });
65
+ });
66
+ /**
67
+ * Creates a layer for the OpenAI embedding model.
68
+ *
69
+ * @since 1.0.0
70
+ * @category layers
71
+ */
72
+ export const layer = options => Layer.effect(EmbeddingModel.EmbeddingModel, make(options));
73
+ /**
74
+ * Provides config overrides for OpenAI embedding model operations.
75
+ *
76
+ * @since 1.0.0
77
+ * @category configuration
78
+ */
79
+ export const withConfigOverride = /*#__PURE__*/dual(2, (self, overrides) => Effect.flatMap(Effect.serviceOption(Config), config => Effect.provideService(self, Config, {
80
+ ...(config._tag === "Some" ? config.value : {}),
81
+ ...overrides
82
+ })));
83
+ const mapProviderResponse = (inputLength, response) => {
84
+ if (response.data.length !== inputLength) {
85
+ return Effect.fail(invalidOutput("Provider returned " + response.data.length + " embeddings but expected " + inputLength));
86
+ }
87
+ const results = new Array(inputLength);
88
+ const seen = new Set();
89
+ for (const entry of response.data) {
90
+ if (!Number.isInteger(entry.index) || entry.index < 0 || entry.index >= inputLength) {
91
+ return Effect.fail(invalidOutput("Provider returned invalid embedding index: " + entry.index));
92
+ }
93
+ if (seen.has(entry.index)) {
94
+ return Effect.fail(invalidOutput("Provider returned duplicate embedding index: " + entry.index));
95
+ }
96
+ seen.add(entry.index);
97
+ results[entry.index] = [...entry.embedding];
98
+ }
99
+ if (seen.size !== inputLength) {
100
+ return Effect.fail(invalidOutput("Provider returned embeddings for " + seen.size + " inputs but expected " + inputLength));
101
+ }
102
+ return Effect.succeed({
103
+ results,
104
+ usage: {
105
+ inputTokens: response.usage?.prompt_tokens
106
+ }
107
+ });
108
+ };
109
+ const invalidOutput = description => AiError.make({
110
+ module: "OpenAiEmbeddingModel",
111
+ method: "embedMany",
112
+ reason: new AiError.InvalidOutputError({
113
+ description
114
+ })
115
+ });
116
+ //# sourceMappingURL=OpenAiEmbeddingModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenAiEmbeddingModel.js","names":["Effect","dual","Layer","ServiceMap","AiError","EmbeddingModel","AiModel","OpenAiClient","Config","Service","model","options","make","merge","layer","config","dimensions","succeed","Dimensions","fnUntraced","providerConfig","client","makeConfig","gen","services","mapUnsafe","get","key","embedMany","inputs","response","createEmbedding","input","mapProviderResponse","length","effect","withConfigOverride","self","overrides","flatMap","serviceOption","provideService","_tag","value","inputLength","data","fail","invalidOutput","results","Array","seen","Set","entry","Number","isInteger","index","has","add","embedding","size","usage","inputTokens","prompt_tokens","description","module","method","reason","InvalidOutputError"],"sources":["../src/OpenAiEmbeddingModel.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}