@effect/ai-openai 0.5.2 → 0.5.3
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/dist/cjs/OpenAiCompletions.js +45 -26
- package/dist/cjs/OpenAiCompletions.js.map +1 -1
- package/dist/dts/OpenAiCompletions.d.ts.map +1 -1
- package/dist/esm/OpenAiCompletions.js +45 -26
- package/dist/esm/OpenAiCompletions.js.map +1 -1
- package/package.json +4 -4
- package/src/OpenAiCompletions.ts +43 -10
|
@@ -29,27 +29,39 @@ const make = options => Effect.gen(function* () {
|
|
|
29
29
|
required,
|
|
30
30
|
system,
|
|
31
31
|
tools
|
|
32
|
-
}) =>
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
32
|
+
}) => {
|
|
33
|
+
const useStructured = tools.length === 1 && tools[0].structured;
|
|
34
|
+
return Effect.map(Effect.context(), context => ({
|
|
35
|
+
model: options.model,
|
|
36
|
+
...config,
|
|
37
|
+
...context.unsafeMap.get(_OpenAiConfig.OpenAiConfig.key),
|
|
38
|
+
messages: makeMessages(input, system),
|
|
39
|
+
response_format: useStructured ? {
|
|
40
|
+
type: "json_schema",
|
|
41
|
+
json_schema: {
|
|
42
|
+
strict: true,
|
|
43
|
+
name: tools[0].name,
|
|
44
|
+
description: tools[0].description,
|
|
45
|
+
schema: tools[0].parameters
|
|
46
|
+
}
|
|
47
|
+
} : undefined,
|
|
48
|
+
tools: !useStructured && tools.length > 0 ? tools.map(tool => ({
|
|
49
|
+
type: "function",
|
|
50
|
+
function: {
|
|
51
|
+
name: tool.name,
|
|
52
|
+
description: tool.description,
|
|
53
|
+
parameters: tool.parameters,
|
|
54
|
+
strict: true
|
|
55
|
+
}
|
|
56
|
+
})) : undefined,
|
|
57
|
+
tool_choice: !useStructured && tools.length > 0 ? typeof required === "boolean" ? required ? "required" : "auto" : {
|
|
58
|
+
type: "function",
|
|
59
|
+
function: {
|
|
60
|
+
name: required
|
|
61
|
+
}
|
|
62
|
+
} : undefined
|
|
63
|
+
}));
|
|
64
|
+
};
|
|
53
65
|
return yield* Completions.make({
|
|
54
66
|
create(options) {
|
|
55
67
|
return makeRequest(options).pipe(Effect.flatMap(client.client.createChatCompletion), Effect.catchAll(cause => Effect.fail(new _AiError.AiError({
|
|
@@ -57,7 +69,7 @@ const make = options => Effect.gen(function* () {
|
|
|
57
69
|
method: "create",
|
|
58
70
|
description: "An error occurred",
|
|
59
71
|
cause
|
|
60
|
-
}))), Effect.flatMap(response => makeResponse(response, "create")));
|
|
72
|
+
}))), Effect.flatMap(response => makeResponse(response, "create", options.tools.length === 1 && options.tools[0].structured ? options.tools[0] : undefined)));
|
|
61
73
|
},
|
|
62
74
|
stream(options) {
|
|
63
75
|
return makeRequest(options).pipe(Effect.map(client.stream), Stream.unwrap, Stream.catchAll(cause => Effect.fail(new _AiError.AiError({
|
|
@@ -180,23 +192,30 @@ const makeContentPart = part => {
|
|
|
180
192
|
};
|
|
181
193
|
}
|
|
182
194
|
};
|
|
183
|
-
const makeResponse = (response, method) => Arr.head(response.choices).pipe(Effect.mapError(() => new _AiError.AiError({
|
|
195
|
+
const makeResponse = (response, method, structuredTool) => Arr.head(response.choices).pipe(Effect.mapError(() => new _AiError.AiError({
|
|
184
196
|
module: "OpenAiCompletions",
|
|
185
197
|
method,
|
|
186
198
|
description: "Could not get response"
|
|
187
199
|
})), Effect.flatMap(choice => {
|
|
188
|
-
|
|
200
|
+
if (structuredTool) {
|
|
201
|
+
return AiResponse.AiResponse.empty.withToolCallsJson([{
|
|
202
|
+
id: response.id,
|
|
203
|
+
name: structuredTool.name,
|
|
204
|
+
params: choice.message.content
|
|
205
|
+
}]);
|
|
206
|
+
}
|
|
207
|
+
const res = typeof choice.message.content === "string" ? AiResponse.AiResponse.fromText({
|
|
189
208
|
role: AiRole.model,
|
|
190
209
|
content: choice.message.content
|
|
191
210
|
}) : AiResponse.AiResponse.empty;
|
|
192
211
|
if (choice.message.tool_calls && choice.message.tool_calls.length > 0) {
|
|
193
|
-
return
|
|
212
|
+
return res.withToolCallsJson(choice.message.tool_calls.map(toolCall => ({
|
|
194
213
|
id: toolCall.id,
|
|
195
214
|
name: toolCall.function.name,
|
|
196
215
|
params: toolCall.function.arguments
|
|
197
216
|
})));
|
|
198
217
|
}
|
|
199
|
-
return Effect.succeed(
|
|
218
|
+
return Effect.succeed(res);
|
|
200
219
|
}));
|
|
201
220
|
const makeSystemMessage = content => {
|
|
202
221
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenAiCompletions.js","names":["_AiError","require","AiResponse","_interopRequireWildcard","AiRole","Completions","Arr","Effect","Layer","Stream","_OpenAiClient","_OpenAiConfig","OpenAiTokenizer","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","make","options","gen","client","OpenAiClient","config","OpenAiConfig","getOrUndefined","makeRequest","input","required","system","tools","map","context","model","unsafeMap","key","messages","makeMessages","
|
|
1
|
+
{"version":3,"file":"OpenAiCompletions.js","names":["_AiError","require","AiResponse","_interopRequireWildcard","AiRole","Completions","Arr","Effect","Layer","Stream","_OpenAiClient","_OpenAiConfig","OpenAiTokenizer","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","make","options","gen","client","OpenAiClient","config","OpenAiConfig","getOrUndefined","makeRequest","input","required","system","tools","useStructured","length","structured","map","context","model","unsafeMap","key","messages","makeMessages","response_format","type","json_schema","strict","name","description","schema","parameters","undefined","tool","function","tool_choice","create","pipe","flatMap","createChatCompletion","catchAll","cause","fail","AiError","module","method","response","makeResponse","stream","unwrap","asAiResponse","layerCompletions","effect","exports","layer","merge","_tag","makeSystemMessage","value","message","push","convertMessage","formatRole","role","safeName","parts","toolCalls","flushContent","content","flushToolCalls","tool_calls","part","id","arguments","JSON","stringify","params","tool_call_id","toolCallId","makeContentPart","image_url","url","asDataUri","detail","quality","text","structuredTool","head","choices","mapError","choice","empty","withToolCallsJson","res","fromText","toolCall","succeed","replace"],"sources":["../../src/OpenAiCompletions.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenAiCompletions.d.ts","sourceRoot":"","sources":["../../src/OpenAiCompletions.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,WAAW,MAAM,wBAAwB,CAAA;AACrD,OAAO,KAAK,KAAK,SAAS,MAAM,sBAAsB,CAAA;AAGtD,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAIrC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"OpenAiCompletions.d.ts","sourceRoot":"","sources":["../../src/OpenAiCompletions.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,WAAW,MAAM,wBAAwB,CAAA;AACrD,OAAO,KAAK,KAAK,SAAS,MAAM,sBAAsB,CAAA;AAGtD,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAIrC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AA+FhD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,YAAa;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB,KAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,EAAE,YAAY,CAAyD,CAAA;AAErH;;;GAGG;AACH,eAAO,MAAM,KAAK,YAAa;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB,KAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,GAAG,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,YAAY,CACV,CAAA"}
|
|
@@ -20,27 +20,39 @@ const make = options => Effect.gen(function* () {
|
|
|
20
20
|
required,
|
|
21
21
|
system,
|
|
22
22
|
tools
|
|
23
|
-
}) =>
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
23
|
+
}) => {
|
|
24
|
+
const useStructured = tools.length === 1 && tools[0].structured;
|
|
25
|
+
return Effect.map(Effect.context(), context => ({
|
|
26
|
+
model: options.model,
|
|
27
|
+
...config,
|
|
28
|
+
...context.unsafeMap.get(OpenAiConfig.key),
|
|
29
|
+
messages: makeMessages(input, system),
|
|
30
|
+
response_format: useStructured ? {
|
|
31
|
+
type: "json_schema",
|
|
32
|
+
json_schema: {
|
|
33
|
+
strict: true,
|
|
34
|
+
name: tools[0].name,
|
|
35
|
+
description: tools[0].description,
|
|
36
|
+
schema: tools[0].parameters
|
|
37
|
+
}
|
|
38
|
+
} : undefined,
|
|
39
|
+
tools: !useStructured && tools.length > 0 ? tools.map(tool => ({
|
|
40
|
+
type: "function",
|
|
41
|
+
function: {
|
|
42
|
+
name: tool.name,
|
|
43
|
+
description: tool.description,
|
|
44
|
+
parameters: tool.parameters,
|
|
45
|
+
strict: true
|
|
46
|
+
}
|
|
47
|
+
})) : undefined,
|
|
48
|
+
tool_choice: !useStructured && tools.length > 0 ? typeof required === "boolean" ? required ? "required" : "auto" : {
|
|
49
|
+
type: "function",
|
|
50
|
+
function: {
|
|
51
|
+
name: required
|
|
52
|
+
}
|
|
53
|
+
} : undefined
|
|
54
|
+
}));
|
|
55
|
+
};
|
|
44
56
|
return yield* Completions.make({
|
|
45
57
|
create(options) {
|
|
46
58
|
return makeRequest(options).pipe(Effect.flatMap(client.client.createChatCompletion), Effect.catchAll(cause => Effect.fail(new AiError({
|
|
@@ -48,7 +60,7 @@ const make = options => Effect.gen(function* () {
|
|
|
48
60
|
method: "create",
|
|
49
61
|
description: "An error occurred",
|
|
50
62
|
cause
|
|
51
|
-
}))), Effect.flatMap(response => makeResponse(response, "create")));
|
|
63
|
+
}))), Effect.flatMap(response => makeResponse(response, "create", options.tools.length === 1 && options.tools[0].structured ? options.tools[0] : undefined)));
|
|
52
64
|
},
|
|
53
65
|
stream(options) {
|
|
54
66
|
return makeRequest(options).pipe(Effect.map(client.stream), Stream.unwrap, Stream.catchAll(cause => Effect.fail(new AiError({
|
|
@@ -169,23 +181,30 @@ const makeContentPart = part => {
|
|
|
169
181
|
};
|
|
170
182
|
}
|
|
171
183
|
};
|
|
172
|
-
const makeResponse = (response, method) => Arr.head(response.choices).pipe(Effect.mapError(() => new AiError({
|
|
184
|
+
const makeResponse = (response, method, structuredTool) => Arr.head(response.choices).pipe(Effect.mapError(() => new AiError({
|
|
173
185
|
module: "OpenAiCompletions",
|
|
174
186
|
method,
|
|
175
187
|
description: "Could not get response"
|
|
176
188
|
})), Effect.flatMap(choice => {
|
|
177
|
-
|
|
189
|
+
if (structuredTool) {
|
|
190
|
+
return AiResponse.AiResponse.empty.withToolCallsJson([{
|
|
191
|
+
id: response.id,
|
|
192
|
+
name: structuredTool.name,
|
|
193
|
+
params: choice.message.content
|
|
194
|
+
}]);
|
|
195
|
+
}
|
|
196
|
+
const res = typeof choice.message.content === "string" ? AiResponse.AiResponse.fromText({
|
|
178
197
|
role: AiRole.model,
|
|
179
198
|
content: choice.message.content
|
|
180
199
|
}) : AiResponse.AiResponse.empty;
|
|
181
200
|
if (choice.message.tool_calls && choice.message.tool_calls.length > 0) {
|
|
182
|
-
return
|
|
201
|
+
return res.withToolCallsJson(choice.message.tool_calls.map(toolCall => ({
|
|
183
202
|
id: toolCall.id,
|
|
184
203
|
name: toolCall.function.name,
|
|
185
204
|
params: toolCall.function.arguments
|
|
186
205
|
})));
|
|
187
206
|
}
|
|
188
|
-
return Effect.succeed(
|
|
207
|
+
return Effect.succeed(res);
|
|
189
208
|
}));
|
|
190
209
|
const makeSystemMessage = content => {
|
|
191
210
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenAiCompletions.js","names":["AiError","AiResponse","AiRole","Completions","Arr","Effect","Layer","Stream","OpenAiClient","OpenAiConfig","OpenAiTokenizer","make","options","gen","client","config","getOrUndefined","makeRequest","input","required","system","tools","map","context","model","unsafeMap","get","key","messages","makeMessages","
|
|
1
|
+
{"version":3,"file":"OpenAiCompletions.js","names":["AiError","AiResponse","AiRole","Completions","Arr","Effect","Layer","Stream","OpenAiClient","OpenAiConfig","OpenAiTokenizer","make","options","gen","client","config","getOrUndefined","makeRequest","input","required","system","tools","useStructured","length","structured","map","context","model","unsafeMap","get","key","messages","makeMessages","response_format","type","json_schema","strict","name","description","schema","parameters","undefined","tool","function","tool_choice","create","pipe","flatMap","createChatCompletion","catchAll","cause","fail","module","method","response","makeResponse","stream","unwrap","asAiResponse","layerCompletions","effect","layer","merge","_tag","makeSystemMessage","value","message","push","convertMessage","formatRole","role","safeName","parts","toolCalls","flushContent","content","flushToolCalls","tool_calls","part","id","arguments","JSON","stringify","params","tool_call_id","toolCallId","makeContentPart","image_url","url","asDataUri","detail","quality","text","structuredTool","head","choices","mapError","choice","empty","withToolCallsJson","res","fromText","toolCall","succeed","replace"],"sources":["../../src/OpenAiCompletions.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect/ai-openai",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.3",
|
|
4
4
|
"description": "Effect modules for working with AI apis",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
"gpt-tokenizer": "^2.5.1"
|
|
14
14
|
},
|
|
15
15
|
"peerDependencies": {
|
|
16
|
-
"@effect/ai": "^0.3.
|
|
17
|
-
"@effect/experimental": "^0.33.
|
|
18
|
-
"@effect/platform": "^0.70.
|
|
16
|
+
"@effect/ai": "^0.3.3",
|
|
17
|
+
"@effect/experimental": "^0.33.3",
|
|
18
|
+
"@effect/platform": "^0.70.3",
|
|
19
19
|
"effect": "^3.11.2"
|
|
20
20
|
},
|
|
21
21
|
"publishConfig": {
|
package/src/OpenAiCompletions.ts
CHANGED
|
@@ -24,15 +24,27 @@ const make = (options: {
|
|
|
24
24
|
const client = yield* OpenAiClient
|
|
25
25
|
const config = yield* OpenAiConfig.getOrUndefined
|
|
26
26
|
|
|
27
|
-
const makeRequest = ({ input, required, system, tools }: Completions.CompletionOptions) =>
|
|
28
|
-
|
|
27
|
+
const makeRequest = ({ input, required, system, tools }: Completions.CompletionOptions) => {
|
|
28
|
+
const useStructured = tools.length === 1 && tools[0].structured
|
|
29
|
+
return Effect.map(
|
|
29
30
|
Effect.context<never>(),
|
|
30
31
|
(context): typeof Generated.CreateChatCompletionRequest.Encoded => ({
|
|
31
32
|
model: options.model,
|
|
32
33
|
...config,
|
|
33
34
|
...context.unsafeMap.get(OpenAiConfig.key),
|
|
34
35
|
messages: makeMessages(input, system),
|
|
35
|
-
|
|
36
|
+
response_format: useStructured ?
|
|
37
|
+
{
|
|
38
|
+
type: "json_schema",
|
|
39
|
+
json_schema: {
|
|
40
|
+
strict: true,
|
|
41
|
+
name: tools[0].name,
|
|
42
|
+
description: tools[0].description,
|
|
43
|
+
schema: tools[0].parameters
|
|
44
|
+
}
|
|
45
|
+
} :
|
|
46
|
+
undefined,
|
|
47
|
+
tools: !useStructured && tools.length > 0 ?
|
|
36
48
|
tools.map((tool) => ({
|
|
37
49
|
type: "function",
|
|
38
50
|
function: {
|
|
@@ -43,7 +55,7 @@ const make = (options: {
|
|
|
43
55
|
}
|
|
44
56
|
})) :
|
|
45
57
|
undefined,
|
|
46
|
-
tool_choice: tools.length > 0 ?
|
|
58
|
+
tool_choice: !useStructured && tools.length > 0 ?
|
|
47
59
|
typeof required === "boolean" ? (required ? "required" : "auto") : {
|
|
48
60
|
type: "function",
|
|
49
61
|
function: { name: required }
|
|
@@ -51,6 +63,7 @@ const make = (options: {
|
|
|
51
63
|
undefined
|
|
52
64
|
})
|
|
53
65
|
)
|
|
66
|
+
}
|
|
54
67
|
|
|
55
68
|
return yield* Completions.make({
|
|
56
69
|
create(options) {
|
|
@@ -66,7 +79,13 @@ const make = (options: {
|
|
|
66
79
|
})
|
|
67
80
|
)
|
|
68
81
|
),
|
|
69
|
-
Effect.flatMap((response) =>
|
|
82
|
+
Effect.flatMap((response) =>
|
|
83
|
+
makeResponse(
|
|
84
|
+
response,
|
|
85
|
+
"create",
|
|
86
|
+
options.tools.length === 1 && options.tools[0].structured ? options.tools[0] : undefined
|
|
87
|
+
)
|
|
88
|
+
)
|
|
70
89
|
)
|
|
71
90
|
},
|
|
72
91
|
stream(options) {
|
|
@@ -220,8 +239,12 @@ const makeContentPart = (
|
|
|
220
239
|
|
|
221
240
|
const makeResponse = (
|
|
222
241
|
response: Generated.CreateChatCompletionResponse,
|
|
223
|
-
method: string
|
|
224
|
-
|
|
242
|
+
method: string,
|
|
243
|
+
structuredTool?: {
|
|
244
|
+
readonly name: string
|
|
245
|
+
readonly description: string
|
|
246
|
+
}
|
|
247
|
+
) =>
|
|
225
248
|
Arr.head(response.choices).pipe(
|
|
226
249
|
Effect.mapError(() =>
|
|
227
250
|
new AiError({
|
|
@@ -231,7 +254,17 @@ const makeResponse = (
|
|
|
231
254
|
})
|
|
232
255
|
),
|
|
233
256
|
Effect.flatMap((choice) => {
|
|
234
|
-
|
|
257
|
+
if (structuredTool) {
|
|
258
|
+
return AiResponse.AiResponse.empty.withToolCallsJson([
|
|
259
|
+
{
|
|
260
|
+
id: response.id,
|
|
261
|
+
name: structuredTool.name,
|
|
262
|
+
params: choice.message.content!
|
|
263
|
+
}
|
|
264
|
+
])
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
const res = typeof choice.message.content === "string" ?
|
|
235
268
|
AiResponse.AiResponse.fromText({
|
|
236
269
|
role: AiRole.model,
|
|
237
270
|
content: choice.message.content!
|
|
@@ -239,14 +272,14 @@ const makeResponse = (
|
|
|
239
272
|
AiResponse.AiResponse.empty
|
|
240
273
|
|
|
241
274
|
if (choice.message.tool_calls && choice.message.tool_calls.length > 0) {
|
|
242
|
-
return
|
|
275
|
+
return res.withToolCallsJson(choice.message.tool_calls.map((toolCall) => ({
|
|
243
276
|
id: toolCall.id,
|
|
244
277
|
name: toolCall.function.name,
|
|
245
278
|
params: toolCall.function.arguments
|
|
246
279
|
})))
|
|
247
280
|
}
|
|
248
281
|
|
|
249
|
-
return Effect.succeed(
|
|
282
|
+
return Effect.succeed(res)
|
|
250
283
|
})
|
|
251
284
|
)
|
|
252
285
|
|