@effect/ai-openai 0.17.1 → 0.18.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/OpenAiEmbeddingModel/package.json +6 -0
- package/OpenAiLanguageModel/package.json +6 -0
- package/dist/cjs/OpenAiClient.js +111 -109
- package/dist/cjs/OpenAiClient.js.map +1 -1
- package/dist/cjs/OpenAiConfig.js +2 -2
- package/dist/cjs/OpenAiConfig.js.map +1 -1
- package/dist/cjs/{OpenAiEmbeddings.js → OpenAiEmbeddingModel.js} +22 -51
- package/dist/cjs/OpenAiEmbeddingModel.js.map +1 -0
- package/dist/cjs/OpenAiLanguageModel.js +490 -0
- package/dist/cjs/OpenAiLanguageModel.js.map +1 -0
- package/dist/cjs/OpenAiTelemetry.js +1 -1
- package/dist/cjs/OpenAiTelemetry.js.map +1 -1
- package/dist/cjs/OpenAiTokenizer.js +11 -13
- package/dist/cjs/OpenAiTokenizer.js.map +1 -1
- package/dist/cjs/index.js +5 -5
- package/dist/cjs/internal/utilities.js +25 -0
- package/dist/cjs/internal/utilities.js.map +1 -0
- package/dist/dts/OpenAiClient.d.ts +32 -75
- package/dist/dts/OpenAiClient.d.ts.map +1 -1
- package/dist/dts/OpenAiConfig.d.ts +5 -6
- package/dist/dts/OpenAiConfig.d.ts.map +1 -1
- package/dist/dts/{OpenAiEmbeddings.d.ts → OpenAiEmbeddingModel.d.ts} +16 -37
- package/dist/dts/OpenAiEmbeddingModel.d.ts.map +1 -0
- package/dist/dts/OpenAiLanguageModel.d.ts +108 -0
- package/dist/dts/OpenAiLanguageModel.d.ts.map +1 -0
- package/dist/dts/OpenAiTelemetry.d.ts +59 -64
- package/dist/dts/OpenAiTelemetry.d.ts.map +1 -1
- package/dist/dts/OpenAiTokenizer.d.ts +2 -2
- package/dist/dts/OpenAiTokenizer.d.ts.map +1 -1
- package/dist/dts/index.d.ts +3 -3
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/internal/utilities.d.ts +2 -0
- package/dist/dts/internal/utilities.d.ts.map +1 -0
- package/dist/esm/OpenAiClient.js +110 -106
- package/dist/esm/OpenAiClient.js.map +1 -1
- package/dist/esm/OpenAiConfig.js +2 -2
- package/dist/esm/OpenAiConfig.js.map +1 -1
- package/dist/esm/{OpenAiEmbeddings.js → OpenAiEmbeddingModel.js} +21 -48
- package/dist/esm/OpenAiEmbeddingModel.js.map +1 -0
- package/dist/esm/OpenAiLanguageModel.js +478 -0
- package/dist/esm/OpenAiLanguageModel.js.map +1 -0
- package/dist/esm/OpenAiTelemetry.js +1 -1
- package/dist/esm/OpenAiTelemetry.js.map +1 -1
- package/dist/esm/OpenAiTokenizer.js +11 -13
- package/dist/esm/OpenAiTokenizer.js.map +1 -1
- package/dist/esm/index.js +3 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal/utilities.js +16 -0
- package/dist/esm/internal/utilities.js.map +1 -0
- package/package.json +17 -17
- package/src/OpenAiClient.ts +184 -191
- package/src/OpenAiConfig.ts +7 -8
- package/src/{OpenAiEmbeddings.ts → OpenAiEmbeddingModel.ts} +39 -85
- package/src/OpenAiLanguageModel.ts +601 -0
- package/src/OpenAiTelemetry.ts +66 -71
- package/src/OpenAiTokenizer.ts +35 -26
- package/src/index.ts +3 -3
- package/src/internal/utilities.ts +19 -0
- package/OpenAiCompletions/package.json +0 -6
- package/OpenAiEmbeddings/package.json +0 -6
- package/dist/cjs/OpenAiCompletions.js +0 -358
- package/dist/cjs/OpenAiCompletions.js.map +0 -1
- package/dist/cjs/OpenAiEmbeddings.js.map +0 -1
- package/dist/dts/OpenAiCompletions.d.ts +0 -75
- package/dist/dts/OpenAiCompletions.d.ts.map +0 -1
- package/dist/dts/OpenAiEmbeddings.d.ts.map +0 -1
- package/dist/esm/OpenAiCompletions.js +0 -345
- package/dist/esm/OpenAiCompletions.js.map +0 -1
- package/dist/esm/OpenAiEmbeddings.js.map +0 -1
- package/src/OpenAiCompletions.ts +0 -500
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenAiTelemetry.d.ts","sourceRoot":"","sources":["../../src/OpenAiTelemetry.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,WAAW,MAAM,wBAAwB,CAAA;AAIrD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAE5C;;;;;;;;GAQG;AACH,MAAM,MAAM,yBAAyB,GAAG,QAAQ,CAC5C,WAAW,CAAC,wBAAwB,GACpC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"OpenAiTelemetry.d.ts","sourceRoot":"","sources":["../../src/OpenAiTelemetry.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,WAAW,MAAM,wBAAwB,CAAA;AAIrD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAE5C;;;;;;;;GAQG;AACH,MAAM,MAAM,yBAAyB,GAAG,QAAQ,CAC5C,WAAW,CAAC,wBAAwB,GACpC,WAAW,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,uBAAuB,CAAC,GAC5E,WAAW,CAAC,oBAAoB,CAAC,kBAAkB,EAAE,uBAAuB,CAAC,CAChF,CAAA;AAED;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,aAAa,GAAG,iBAAiB,GAAG,kBAAkB,CAAA;AAE9F;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,uBAAuB,GAAG,IAAI,GAAG,SAAS,CAAA;IACpF;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,oBAAoB,GAAG,IAAI,GAAG,SAAS,CAAA;CAC/E;AAED;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IAChD;;;OAGG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;CACvD;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,uBAAuB,GAAG,aAAa,GAAG,aAAa,GAAG,MAAM,CAAA;AAE5E;;;;;;;;;GASG;AACH,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,SAAS,CAAA;AAErD;;;GAGG;AACH,MAAM,MAAM,+BAA+B,GAAG,WAAW,CAAC,8BAA8B,GAAG;IACzF,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAA;QACvC,QAAQ,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAA;KAC1C,GAAG,SAAS,CAAA;CACd,CAAA;AASD;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,aAUpB,+BAA+B,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,YAU3D,IAAI,WAAW,+BAA+B,KAAK,IAAI,CAW9D,CAAA"}
|
|
@@ -2,14 +2,14 @@ import * as Tokenizer from "@effect/ai/Tokenizer";
|
|
|
2
2
|
import * as Layer from "effect/Layer";
|
|
3
3
|
/**
|
|
4
4
|
* @since 1.0.0
|
|
5
|
-
* @category
|
|
5
|
+
* @category Constructors
|
|
6
6
|
*/
|
|
7
7
|
export declare const make: (options: {
|
|
8
8
|
readonly model: string;
|
|
9
9
|
}) => Tokenizer.Tokenizer.Service;
|
|
10
10
|
/**
|
|
11
11
|
* @since 1.0.0
|
|
12
|
-
* @category
|
|
12
|
+
* @category Layers
|
|
13
13
|
*/
|
|
14
14
|
export declare const layer: (options: {
|
|
15
15
|
readonly model: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenAiTokenizer.d.ts","sourceRoot":"","sources":["../../src/OpenAiTokenizer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OpenAiTokenizer.d.ts","sourceRoot":"","sources":["../../src/OpenAiTokenizer.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAA;AAGjD,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAKrC;;;GAGG;AACH,eAAO,MAAM,IAAI,YAAa;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,gCA8CpD,CAAA;AAEJ;;;GAGG;AACH,eAAO,MAAM,KAAK,YAAa;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,KAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CACxC,CAAA"}
|
package/dist/dts/index.d.ts
CHANGED
|
@@ -9,15 +9,15 @@ export * as OpenAiClient from "./OpenAiClient.js";
|
|
|
9
9
|
/**
|
|
10
10
|
* @since 1.0.0
|
|
11
11
|
*/
|
|
12
|
-
export * as
|
|
12
|
+
export * as OpenAiConfig from "./OpenAiConfig.js";
|
|
13
13
|
/**
|
|
14
14
|
* @since 1.0.0
|
|
15
15
|
*/
|
|
16
|
-
export * as
|
|
16
|
+
export * as OpenAiEmbeddingModel from "./OpenAiEmbeddingModel.js";
|
|
17
17
|
/**
|
|
18
18
|
* @since 1.0.0
|
|
19
19
|
*/
|
|
20
|
-
export * as
|
|
20
|
+
export * as OpenAiLanguageModel from "./OpenAiLanguageModel.js";
|
|
21
21
|
/**
|
|
22
22
|
* @since 1.0.0
|
|
23
23
|
*/
|
package/dist/dts/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C;;GAEG;AACH,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AAEjD;;GAEG;AACH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C;;GAEG;AACH,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AAEjD;;GAEG;AACH,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AAEjD;;GAEG;AACH,OAAO,KAAK,oBAAoB,MAAM,2BAA2B,CAAA;AAEjE;;GAEG;AACH,OAAO,KAAK,mBAAmB,MAAM,0BAA0B,CAAA;AAE/D;;GAEG;AACH,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AAEvD;;GAEG;AACH,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../../src/internal/utilities.ts"],"names":[],"mappings":""}
|
package/dist/esm/OpenAiClient.js
CHANGED
|
@@ -1,33 +1,31 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @since 1.0.0
|
|
3
|
-
*/
|
|
4
|
-
import * as AiModels from "@effect/ai/AiModels";
|
|
5
1
|
import * as AiResponse from "@effect/ai/AiResponse";
|
|
6
|
-
import * as AiRole from "@effect/ai/AiRole";
|
|
7
2
|
import * as Sse from "@effect/experimental/Sse";
|
|
8
3
|
import * as HttpBody from "@effect/platform/HttpBody";
|
|
9
4
|
import * as HttpClient from "@effect/platform/HttpClient";
|
|
10
5
|
import * as HttpClientRequest from "@effect/platform/HttpClientRequest";
|
|
11
|
-
import * as Chunk from "effect/Chunk";
|
|
12
6
|
import * as Config from "effect/Config";
|
|
13
7
|
import * as Context from "effect/Context";
|
|
14
|
-
import * as Data from "effect/Data";
|
|
15
8
|
import * as Effect from "effect/Effect";
|
|
16
9
|
import { identity } from "effect/Function";
|
|
17
10
|
import * as Layer from "effect/Layer";
|
|
18
11
|
import * as Option from "effect/Option";
|
|
12
|
+
import * as Predicate from "effect/Predicate";
|
|
19
13
|
import * as Redacted from "effect/Redacted";
|
|
20
14
|
import * as Stream from "effect/Stream";
|
|
21
15
|
import * as Generated from "./Generated.js";
|
|
16
|
+
import * as InternalUtilities from "./internal/utilities.js";
|
|
22
17
|
import { OpenAiConfig } from "./OpenAiConfig.js";
|
|
18
|
+
const constDisableValidation = {
|
|
19
|
+
disableValidation: true
|
|
20
|
+
};
|
|
23
21
|
/**
|
|
24
22
|
* @since 1.0.0
|
|
25
|
-
* @category
|
|
23
|
+
* @category Context
|
|
26
24
|
*/
|
|
27
25
|
export class OpenAiClient extends /*#__PURE__*/Context.Tag("@effect/ai-openai/OpenAiClient")() {}
|
|
28
26
|
/**
|
|
29
27
|
* @since 1.0.0
|
|
30
|
-
* @category
|
|
28
|
+
* @category Constructors
|
|
31
29
|
*/
|
|
32
30
|
export const make = options => Effect.gen(function* () {
|
|
33
31
|
const httpClient = (yield* HttpClient.HttpClient).pipe(HttpClient.mapRequest(request => request.pipe(HttpClientRequest.prependUrl(options.apiUrl ?? "https://api.openai.com/v1"), options.apiKey ? HttpClientRequest.bearerToken(options.apiKey) : identity, options.organizationId !== undefined ? HttpClientRequest.setHeader("OpenAI-Organization", Redacted.value(options.organizationId)) : identity, options.projectId !== undefined ? HttpClientRequest.setHeader("OpenAI-Project", Redacted.value(options.projectId)) : identity, HttpClientRequest.acceptJson)), options.transformClient ? options.transformClient : identity);
|
|
@@ -37,7 +35,19 @@ export const make = options => Effect.gen(function* () {
|
|
|
37
35
|
});
|
|
38
36
|
const streamRequest = request => httpClientOk.execute(request).pipe(Effect.map(r => r.stream), Stream.unwrapScoped, Stream.decodeText(), Stream.pipeThroughChannel(Sse.makeChannel()), Stream.takeWhile(event => event.data !== "[DONE]"), Stream.map(event => JSON.parse(event.data)));
|
|
39
37
|
const stream = request => Stream.suspend(() => {
|
|
40
|
-
const
|
|
38
|
+
const toolCalls = {};
|
|
39
|
+
let isFirstChunk = false;
|
|
40
|
+
let toolCallIndex = undefined;
|
|
41
|
+
let finishReason = "unknown";
|
|
42
|
+
let usage = {
|
|
43
|
+
inputTokens: 0,
|
|
44
|
+
outputTokens: 0,
|
|
45
|
+
totalTokens: 0,
|
|
46
|
+
reasoningTokens: 0,
|
|
47
|
+
cacheReadInputTokens: 0,
|
|
48
|
+
cacheWriteInputTokens: 0
|
|
49
|
+
};
|
|
50
|
+
let metadata = {};
|
|
41
51
|
return streamRequest(HttpClientRequest.post("/chat/completions", {
|
|
42
52
|
body: HttpBody.unsafeJson({
|
|
43
53
|
...request,
|
|
@@ -46,69 +56,87 @@ export const make = options => Effect.gen(function* () {
|
|
|
46
56
|
include_usage: true
|
|
47
57
|
}
|
|
48
58
|
})
|
|
49
|
-
})).pipe(Stream.
|
|
59
|
+
})).pipe(Stream.filterMap(chunk => {
|
|
50
60
|
const parts = [];
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
61
|
+
// Add response metadata immediately once available
|
|
62
|
+
if (isFirstChunk) {
|
|
63
|
+
isFirstChunk = false;
|
|
64
|
+
parts.push(new AiResponse.MetadataPart({
|
|
54
65
|
id: chunk.id,
|
|
55
66
|
model: chunk.model,
|
|
67
|
+
timestamp: new Date(chunk.created * 1000)
|
|
68
|
+
}, constDisableValidation));
|
|
69
|
+
}
|
|
70
|
+
// Track usage information
|
|
71
|
+
if (Predicate.isNotNullable(chunk.usage)) {
|
|
72
|
+
usage = {
|
|
56
73
|
inputTokens: chunk.usage.prompt_tokens,
|
|
57
74
|
outputTokens: chunk.usage.completion_tokens,
|
|
58
|
-
|
|
75
|
+
totalTokens: chunk.usage.prompt_tokens + chunk.usage.completion_tokens,
|
|
76
|
+
reasoningTokens: chunk.usage.completion_tokens_details.reasoning_tokens,
|
|
77
|
+
cacheReadInputTokens: chunk.usage.prompt_tokens_details.cached_tokens,
|
|
78
|
+
cacheWriteInputTokens: usage.cacheWriteInputTokens
|
|
79
|
+
};
|
|
80
|
+
metadata = {
|
|
81
|
+
...metadata,
|
|
82
|
+
serviceTier: chunk.service_tier,
|
|
59
83
|
systemFingerprint: chunk.system_fingerprint,
|
|
60
|
-
|
|
61
|
-
|
|
84
|
+
acceptedPredictionTokens: chunk.usage.completion_tokens_details.accepted_prediction_tokens,
|
|
85
|
+
rejectedPredictionTokens: chunk.usage.completion_tokens_details.rejected_prediction_tokens,
|
|
86
|
+
inputAudioTokens: chunk.usage.prompt_tokens_details.audio_tokens,
|
|
87
|
+
outputAudioTokens: chunk.usage.completion_tokens_details.audio_tokens
|
|
88
|
+
};
|
|
62
89
|
}
|
|
63
90
|
for (let i = 0; i < chunk.choices.length; i++) {
|
|
64
91
|
const choice = chunk.choices[i];
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
part = {
|
|
71
|
-
_tag: "Content",
|
|
72
|
-
content: choice.delta.content
|
|
73
|
-
};
|
|
74
|
-
acc.set(choice.index, part);
|
|
75
|
-
parts.push(part);
|
|
76
|
-
} else if ("tool_calls" in choice.delta && Array.isArray(choice.delta.tool_calls)) {
|
|
77
|
-
const parts = acc.get(choice.index) ?? [];
|
|
78
|
-
for (const toolCall of choice.delta.tool_calls) {
|
|
79
|
-
const part = parts[toolCall.index];
|
|
80
|
-
const toolPart = part?._tag === "ToolCall" ? {
|
|
81
|
-
...part,
|
|
82
|
-
arguments: part.arguments + toolCall.function.arguments
|
|
83
|
-
} : {
|
|
84
|
-
_tag: "ToolCall",
|
|
85
|
-
...toolCall,
|
|
86
|
-
...toolCall.function,
|
|
87
|
-
role: choice.delta.role
|
|
88
|
-
};
|
|
89
|
-
parts[toolCall.index] = toolPart;
|
|
92
|
+
// Track the finish reason for the response
|
|
93
|
+
if (Predicate.isNotNullable(choice.finish_reason)) {
|
|
94
|
+
finishReason = InternalUtilities.resolveFinishReason(choice.finish_reason);
|
|
95
|
+
if (finishReason === "tool-calls" && Predicate.isNotUndefined(toolCallIndex)) {
|
|
96
|
+
finishToolCall(toolCalls[toolCallIndex], parts);
|
|
90
97
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
98
|
+
if (finishReason === "stop") {
|
|
99
|
+
parts.push(new AiResponse.FinishPart({
|
|
100
|
+
usage,
|
|
101
|
+
reason: finishReason,
|
|
102
|
+
providerMetadata: {
|
|
103
|
+
[InternalUtilities.ProviderMetadataKey]: metadata
|
|
104
|
+
}
|
|
105
|
+
}, constDisableValidation));
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Handle text deltas
|
|
109
|
+
if (Predicate.isNotNullable(choice.delta.content)) {
|
|
110
|
+
parts.push(new AiResponse.TextPart({
|
|
111
|
+
text: choice.delta.content
|
|
112
|
+
}, constDisableValidation));
|
|
113
|
+
}
|
|
114
|
+
// Handle tool call deltas
|
|
115
|
+
if (Predicate.hasProperty(choice.delta, "tool_calls") && Array.isArray(choice.delta.tool_calls)) {
|
|
116
|
+
for (const delta of choice.delta.tool_calls) {
|
|
117
|
+
// Make sure to emit any previous tool calls before starting a new one
|
|
118
|
+
if (Predicate.isNotUndefined(toolCallIndex) && toolCallIndex !== delta.index) {
|
|
119
|
+
finishToolCall(toolCalls[toolCallIndex], parts);
|
|
120
|
+
toolCallIndex = delta.index;
|
|
121
|
+
}
|
|
122
|
+
if (Predicate.isUndefined(toolCallIndex)) {
|
|
123
|
+
const toolCall = delta;
|
|
124
|
+
// All information except arguments are returned with the first tool call delta
|
|
125
|
+
toolCalls[delta.index] = {
|
|
126
|
+
...toolCall,
|
|
127
|
+
isFinished: false
|
|
128
|
+
};
|
|
129
|
+
toolCallIndex = delta.index;
|
|
130
|
+
} else {
|
|
131
|
+
toolCalls[delta.index].function.arguments += delta.function.arguments;
|
|
132
|
+
}
|
|
105
133
|
}
|
|
106
134
|
}
|
|
107
135
|
}
|
|
108
|
-
return
|
|
136
|
+
return parts.length === 0 ? Option.none() : Option.some(AiResponse.AiResponse.make({
|
|
109
137
|
parts
|
|
110
|
-
}))
|
|
111
|
-
})
|
|
138
|
+
}, constDisableValidation));
|
|
139
|
+
}));
|
|
112
140
|
});
|
|
113
141
|
return OpenAiClient.of({
|
|
114
142
|
client,
|
|
@@ -118,56 +146,32 @@ export const make = options => Effect.gen(function* () {
|
|
|
118
146
|
});
|
|
119
147
|
/**
|
|
120
148
|
* @since 1.0.0
|
|
121
|
-
* @category
|
|
122
|
-
*/
|
|
123
|
-
export const layer = options => Layer.merge(AiModels.layer, Layer.effect(OpenAiClient, make(options)));
|
|
124
|
-
/**
|
|
125
|
-
* @since 1.0.0
|
|
126
|
-
* @category layers
|
|
149
|
+
* @category Layers
|
|
127
150
|
*/
|
|
128
|
-
export const
|
|
151
|
+
export const layer = options => Layer.effect(OpenAiClient, make(options));
|
|
129
152
|
/**
|
|
130
153
|
* @since 1.0.0
|
|
131
|
-
* @category
|
|
154
|
+
* @category Layers
|
|
132
155
|
*/
|
|
133
|
-
export
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
/**
|
|
142
|
-
* @since 1.0.0
|
|
143
|
-
*/
|
|
144
|
-
get asAiResponse() {
|
|
145
|
-
const aiResponseParts = [];
|
|
146
|
-
for (let i = 0; i < this.parts.length; i++) {
|
|
147
|
-
const part = this.parts[i];
|
|
148
|
-
switch (part._tag) {
|
|
149
|
-
case "Content":
|
|
150
|
-
aiResponseParts.push(AiResponse.TextPart.fromContent(part.content));
|
|
151
|
-
break;
|
|
152
|
-
case "ToolCall":
|
|
153
|
-
aiResponseParts.push(AiResponse.ToolCallPart.fromUnknown({
|
|
154
|
-
id: part.id,
|
|
155
|
-
name: part.name,
|
|
156
|
-
params: part.arguments
|
|
157
|
-
}));
|
|
158
|
-
break;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
if (aiResponseParts.length === 0) {
|
|
162
|
-
return AiResponse.AiResponse.fromText({
|
|
163
|
-
role: AiRole.model,
|
|
164
|
-
content: ""
|
|
165
|
-
});
|
|
166
|
-
}
|
|
167
|
-
return new AiResponse.AiResponse({
|
|
168
|
-
role: AiRole.model,
|
|
169
|
-
parts: Chunk.unsafeFromArray(aiResponseParts)
|
|
170
|
-
});
|
|
156
|
+
export const layerConfig = options => Config.unwrap(options).pipe(Effect.flatMap(make), Layer.effect(OpenAiClient));
|
|
157
|
+
// =============================================================================
|
|
158
|
+
// Utilities
|
|
159
|
+
// =============================================================================
|
|
160
|
+
const finishToolCall = (toolCall, parts) => {
|
|
161
|
+
// Don't emit the tool call if it's already been emitted
|
|
162
|
+
if (toolCall.isFinished) {
|
|
163
|
+
return;
|
|
171
164
|
}
|
|
172
|
-
|
|
165
|
+
try {
|
|
166
|
+
const params = JSON.parse(toolCall.function.arguments);
|
|
167
|
+
parts.push(new AiResponse.ToolCallPart({
|
|
168
|
+
id: toolCall.id,
|
|
169
|
+
name: toolCall.function.name,
|
|
170
|
+
params
|
|
171
|
+
}));
|
|
172
|
+
toolCall.isFinished = true;
|
|
173
|
+
// TODO:
|
|
174
|
+
// eslint-disable-next-line no-empty
|
|
175
|
+
} catch (e) {}
|
|
176
|
+
};
|
|
173
177
|
//# sourceMappingURL=OpenAiClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenAiClient.js","names":["
|
|
1
|
+
{"version":3,"file":"OpenAiClient.js","names":["AiResponse","Sse","HttpBody","HttpClient","HttpClientRequest","Config","Context","Effect","identity","Layer","Option","Predicate","Redacted","Stream","Generated","InternalUtilities","OpenAiConfig","constDisableValidation","disableValidation","OpenAiClient","Tag","make","options","gen","httpClient","pipe","mapRequest","request","prependUrl","apiUrl","apiKey","bearerToken","organizationId","undefined","setHeader","value","projectId","acceptJson","transformClient","httpClientOk","filterStatusOk","client","getOrUndefined","map","config","streamRequest","execute","r","stream","unwrapScoped","decodeText","pipeThroughChannel","makeChannel","takeWhile","event","data","JSON","parse","suspend","toolCalls","isFirstChunk","toolCallIndex","finishReason","usage","inputTokens","outputTokens","totalTokens","reasoningTokens","cacheReadInputTokens","cacheWriteInputTokens","metadata","post","body","unsafeJson","stream_options","include_usage","filterMap","chunk","parts","push","MetadataPart","id","model","timestamp","Date","created","isNotNullable","prompt_tokens","completion_tokens","completion_tokens_details","reasoning_tokens","prompt_tokens_details","cached_tokens","serviceTier","service_tier","systemFingerprint","system_fingerprint","acceptedPredictionTokens","accepted_prediction_tokens","rejectedPredictionTokens","rejected_prediction_tokens","inputAudioTokens","audio_tokens","outputAudioTokens","i","choices","length","choice","finish_reason","resolveFinishReason","isNotUndefined","finishToolCall","FinishPart","reason","providerMetadata","ProviderMetadataKey","delta","content","TextPart","text","hasProperty","Array","isArray","tool_calls","index","isUndefined","toolCall","isFinished","function","arguments","none","some","of","layer","effect","layerConfig","unwrap","flatMap","params","ToolCallPart","name","e"],"sources":["../../src/OpenAiClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/dist/esm/OpenAiConfig.js
CHANGED
|
@@ -3,7 +3,7 @@ import * as Effect from "effect/Effect";
|
|
|
3
3
|
import { dual } from "effect/Function";
|
|
4
4
|
/**
|
|
5
5
|
* @since 1.0.0
|
|
6
|
-
* @category
|
|
6
|
+
* @category Context
|
|
7
7
|
*/
|
|
8
8
|
export class OpenAiConfig extends /*#__PURE__*/Context.Tag("@effect/ai-openai/OpenAiConfig")() {
|
|
9
9
|
/**
|
|
@@ -13,7 +13,7 @@ export class OpenAiConfig extends /*#__PURE__*/Context.Tag("@effect/ai-openai/Op
|
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
15
|
* @since 1.0.0
|
|
16
|
-
* @category
|
|
16
|
+
* @category Configuration
|
|
17
17
|
*/
|
|
18
18
|
export const withClientTransform = /*#__PURE__*/dual(2, (self, transformClient) => Effect.flatMap(OpenAiConfig.getOrUndefined, config => Effect.provideService(self, OpenAiConfig, {
|
|
19
19
|
...config,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenAiConfig.js","names":["Context","Effect","dual","OpenAiConfig","Tag","getOrUndefined","map","context","unsafeMap","get","key","withClientTransform","self","transformClient","flatMap","config","provideService"],"sources":["../../src/OpenAiConfig.ts"],"sourcesContent":[null],"mappings":"AAIA,OAAO,KAAKA,OAAO,MAAM,gBAAgB;AACzC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,SAASC,IAAI,QAAQ,iBAAiB;AAEtC;;;;AAIA,OAAM,MAAOC,YAAa,sBAAQH,OAAO,CAACI,GAAG,CAAC,gCAAgC,CAAC,EAG5E;EACD;;;EAGA,OAAgBC,cAAc,gBAA2DJ,MAAM,CAACK,GAAG,eACjGL,MAAM,CAACM,OAAO,EAAS,EACtBA,OAAO,IAAKA,OAAO,CAACC,SAAS,CAACC,GAAG,CAACN,YAAY,CAACO,GAAG,CAAC,CACrD;;
|
|
1
|
+
{"version":3,"file":"OpenAiConfig.js","names":["Context","Effect","dual","OpenAiConfig","Tag","getOrUndefined","map","context","unsafeMap","get","key","withClientTransform","self","transformClient","flatMap","config","provideService"],"sources":["../../src/OpenAiConfig.ts"],"sourcesContent":[null],"mappings":"AAIA,OAAO,KAAKA,OAAO,MAAM,gBAAgB;AACzC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,SAASC,IAAI,QAAQ,iBAAiB;AAEtC;;;;AAIA,OAAM,MAAOC,YAAa,sBAAQH,OAAO,CAACI,GAAG,CAAC,gCAAgC,CAAC,EAG5E;EACD;;;EAGA,OAAgBC,cAAc,gBAA2DJ,MAAM,CAACK,GAAG,eACjGL,MAAM,CAACM,OAAO,EAAS,EACtBA,OAAO,IAAKA,OAAO,CAACC,SAAS,CAACC,GAAG,CAACN,YAAY,CAACO,GAAG,CAAC,CACrD;;AAgBH;;;;AAIA,OAAO,MAAMC,mBAAmB,gBAc5BT,IAAI,CAeN,CAAC,EACD,CAACU,IAAI,EAAEC,eAAe,KACpBZ,MAAM,CAACa,OAAO,CACZX,YAAY,CAACE,cAAc,EAC1BU,MAAM,IAAKd,MAAM,CAACe,cAAc,CAACJ,IAAI,EAAET,YAAY,EAAE;EAAE,GAAGY,MAAM;EAAEF;AAAe,CAAE,CAAC,CACtF,CACJ","ignoreList":[]}
|
|
@@ -1,14 +1,13 @@
|
|
|
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 * as Effect from "effect/Effect";
|
|
10
10
|
import { dual } from "effect/Function";
|
|
11
|
-
import * as Layer from "effect/Layer";
|
|
12
11
|
import * as Struct from "effect/Struct";
|
|
13
12
|
import { OpenAiClient } from "./OpenAiClient.js";
|
|
14
13
|
import * as OpenAiTokenizer from "./OpenAiTokenizer.js";
|
|
@@ -17,45 +16,43 @@ import * as OpenAiTokenizer from "./OpenAiTokenizer.js";
|
|
|
17
16
|
// =============================================================================
|
|
18
17
|
/**
|
|
19
18
|
* @since 1.0.0
|
|
20
|
-
* @category
|
|
19
|
+
* @category Context
|
|
21
20
|
*/
|
|
22
|
-
export class Config extends /*#__PURE__*/Context.Tag("@effect/ai-openai/
|
|
21
|
+
export class Config extends /*#__PURE__*/Context.Tag("@effect/ai-openai/OpenAiEmbeddingModel/Config")() {
|
|
23
22
|
/**
|
|
24
23
|
* @since 1.0.0
|
|
25
24
|
*/
|
|
26
25
|
static getOrUndefined = /*#__PURE__*/Effect.map( /*#__PURE__*/Effect.context(), context => context.unsafeMap.get(Config.key));
|
|
27
26
|
}
|
|
28
27
|
// =============================================================================
|
|
29
|
-
// OpenAi
|
|
28
|
+
// OpenAi Embedding Model
|
|
30
29
|
// =============================================================================
|
|
31
|
-
const batchedModelCacheKey =
|
|
32
|
-
const dataLoaderModelCacheKey =
|
|
30
|
+
const batchedModelCacheKey = "@effect/ai-openai/OpenAiEmbeddingModel/Batched/AiModel";
|
|
31
|
+
const dataLoaderModelCacheKey = "@effect/ai-openai/OpenAiEmbeddingModel/DataLoader/AiModel";
|
|
33
32
|
/**
|
|
34
33
|
* @since 1.0.0
|
|
35
|
-
* @category
|
|
34
|
+
* @category Models
|
|
36
35
|
*/
|
|
37
36
|
export const model = (model, config) => AiModel.make({
|
|
38
|
-
model,
|
|
39
37
|
cacheKey: config.mode === "batched" ? batchedModelCacheKey : dataLoaderModelCacheKey,
|
|
40
|
-
|
|
41
|
-
provides: Effect.map(config.mode === "batched" ? makeBatched({
|
|
38
|
+
cachedContext: Effect.map(config.mode === "batched" ? makeBatched({
|
|
42
39
|
model,
|
|
43
40
|
config
|
|
44
41
|
}) : makeDataLoader({
|
|
45
42
|
model,
|
|
46
43
|
config
|
|
47
|
-
}),
|
|
48
|
-
|
|
49
|
-
const
|
|
50
|
-
const
|
|
44
|
+
}), model => Context.make(AiEmbeddingModel.AiEmbeddingModel, model)),
|
|
45
|
+
updateRequestContext: Effect.fnUntraced(function* (context) {
|
|
46
|
+
const parentConfig = config.mode === "batched" ? Struct.omit("mode", "maxBatchSize", "cache")(config) : Struct.omit("mode", "maxBatchSize", "window")(config);
|
|
47
|
+
const perRequestConfig = yield* Config.getOrUndefined;
|
|
51
48
|
return Context.mergeAll(context, Context.make(Config, {
|
|
52
49
|
model,
|
|
53
|
-
...
|
|
54
|
-
...
|
|
50
|
+
...parentConfig,
|
|
51
|
+
...perRequestConfig
|
|
55
52
|
}), Context.make(Tokenizer.Tokenizer, OpenAiTokenizer.make({
|
|
56
|
-
model:
|
|
53
|
+
model: perRequestConfig?.model ?? model
|
|
57
54
|
})));
|
|
58
|
-
}
|
|
55
|
+
})
|
|
59
56
|
});
|
|
60
57
|
const makeRequest = (client, input, parentConfig) => Effect.context().pipe(Effect.flatMap(context => {
|
|
61
58
|
const localConfig = context.unsafeMap.get(Config.key);
|
|
@@ -72,7 +69,7 @@ const makeRequest = (client, input, parentConfig) => Effect.context().pipe(Effec
|
|
|
72
69
|
index
|
|
73
70
|
}))), Effect.mapError(cause => {
|
|
74
71
|
const common = {
|
|
75
|
-
module: "
|
|
72
|
+
module: "OpenAiEmbeddingModel",
|
|
76
73
|
method: "embed",
|
|
77
74
|
cause
|
|
78
75
|
};
|
|
@@ -94,7 +91,7 @@ const makeBatched = /*#__PURE__*/Effect.fnUntraced(function* (options) {
|
|
|
94
91
|
maxBatchSize = 2048,
|
|
95
92
|
...parentConfig
|
|
96
93
|
} = options.config;
|
|
97
|
-
return yield*
|
|
94
|
+
return yield* AiEmbeddingModel.make({
|
|
98
95
|
cache,
|
|
99
96
|
maxBatchSize,
|
|
100
97
|
embedMany(input) {
|
|
@@ -112,7 +109,7 @@ const makeDataLoader = /*#__PURE__*/Effect.fnUntraced(function* (options) {
|
|
|
112
109
|
window,
|
|
113
110
|
...parentConfig
|
|
114
111
|
} = options.config;
|
|
115
|
-
return yield*
|
|
112
|
+
return yield* AiEmbeddingModel.makeDataLoader({
|
|
116
113
|
window,
|
|
117
114
|
maxBatchSize,
|
|
118
115
|
embedMany(input) {
|
|
@@ -125,34 +122,10 @@ const makeDataLoader = /*#__PURE__*/Effect.fnUntraced(function* (options) {
|
|
|
125
122
|
});
|
|
126
123
|
/**
|
|
127
124
|
* @since 1.0.0
|
|
128
|
-
* @category
|
|
129
|
-
*/
|
|
130
|
-
export const layer = options => Layer.effect(Embeddings.Embeddings, makeBatched({
|
|
131
|
-
model: options.model,
|
|
132
|
-
config: {
|
|
133
|
-
cache: options.cache,
|
|
134
|
-
maxBatchSize: options.maxBatchSize,
|
|
135
|
-
...options.config
|
|
136
|
-
}
|
|
137
|
-
}));
|
|
138
|
-
/**
|
|
139
|
-
* @since 1.0.0
|
|
140
|
-
* @category layers
|
|
141
|
-
*/
|
|
142
|
-
export const layerDataLoader = options => Layer.scoped(Embeddings.Embeddings, makeDataLoader({
|
|
143
|
-
model: options.model,
|
|
144
|
-
config: {
|
|
145
|
-
window: options.window,
|
|
146
|
-
maxBatchSize: options.maxBatchSize,
|
|
147
|
-
...options.config
|
|
148
|
-
}
|
|
149
|
-
}));
|
|
150
|
-
/**
|
|
151
|
-
* @since 1.0.0
|
|
152
|
-
* @category configuration
|
|
125
|
+
* @category Configuration
|
|
153
126
|
*/
|
|
154
127
|
export const withConfigOverride = /*#__PURE__*/dual(2, (self, overrides) => Effect.flatMap(Config.getOrUndefined, config => Effect.provideService(self, Config, {
|
|
155
128
|
...config,
|
|
156
129
|
...overrides
|
|
157
130
|
})));
|
|
158
|
-
//# sourceMappingURL=
|
|
131
|
+
//# sourceMappingURL=OpenAiEmbeddingModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OpenAiEmbeddingModel.js","names":["AiEmbeddingModel","AiError","AiModel","Tokenizer","Context","Effect","dual","Struct","OpenAiClient","OpenAiTokenizer","Config","Tag","getOrUndefined","map","context","unsafeMap","get","key","batchedModelCacheKey","dataLoaderModelCacheKey","model","config","make","cacheKey","mode","cachedContext","makeBatched","makeDataLoader","updateRequestContext","fnUntraced","parentConfig","omit","perRequestConfig","mergeAll","makeRequest","client","input","pipe","flatMap","localConfig","createEmbedding","response","data","embedding","index","embeddings","mapError","cause","common","module","method","_tag","description","options","cache","maxBatchSize","embedMany","window","withConfigOverride","self","overrides","provideService"],"sources":["../../src/OpenAiEmbeddingModel.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|