@effect/ai 0.1.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/AiChat/package.json +6 -0
- package/AiError/package.json +6 -0
- package/AiInput/package.json +6 -0
- package/AiResponse/package.json +6 -0
- package/AiRole/package.json +6 -0
- package/AiToolkit/package.json +6 -0
- package/Completions/package.json +6 -0
- package/LICENSE +21 -0
- package/README.md +1 -0
- package/Tokenizer/package.json +6 -0
- package/dist/cjs/AiChat.js +151 -0
- package/dist/cjs/AiChat.js.map +1 -0
- package/dist/cjs/AiError.js +41 -0
- package/dist/cjs/AiError.js.map +1 -0
- package/dist/cjs/AiInput.js +349 -0
- package/dist/cjs/AiInput.js.map +1 -0
- package/dist/cjs/AiResponse.js +295 -0
- package/dist/cjs/AiResponse.js.map +1 -0
- package/dist/cjs/AiRole.js +106 -0
- package/dist/cjs/AiRole.js.map +1 -0
- package/dist/cjs/AiToolkit.js +132 -0
- package/dist/cjs/AiToolkit.js.map +1 -0
- package/dist/cjs/Completions.js +217 -0
- package/dist/cjs/Completions.js.map +1 -0
- package/dist/cjs/Tokenizer.js +59 -0
- package/dist/cjs/Tokenizer.js.map +1 -0
- package/dist/cjs/index.js +25 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/dts/AiChat.d.ts +73 -0
- package/dist/dts/AiChat.d.ts.map +1 -0
- package/dist/dts/AiError.d.ts +38 -0
- package/dist/dts/AiError.d.ts.map +1 -0
- package/dist/dts/AiInput.d.ts +283 -0
- package/dist/dts/AiInput.d.ts.map +1 -0
- package/dist/dts/AiResponse.d.ts +235 -0
- package/dist/dts/AiResponse.d.ts.map +1 -0
- package/dist/dts/AiRole.d.ts +111 -0
- package/dist/dts/AiRole.d.ts.map +1 -0
- package/dist/dts/AiToolkit.d.ts +158 -0
- package/dist/dts/AiToolkit.d.ts.map +1 -0
- package/dist/dts/Completions.d.ts +104 -0
- package/dist/dts/Completions.d.ts.map +1 -0
- package/dist/dts/Tokenizer.d.ts +34 -0
- package/dist/dts/Tokenizer.d.ts.map +1 -0
- package/dist/dts/index.d.ts +33 -0
- package/dist/dts/index.d.ts.map +1 -0
- package/dist/esm/AiChat.js +139 -0
- package/dist/esm/AiChat.js.map +1 -0
- package/dist/esm/AiError.js +31 -0
- package/dist/esm/AiError.js.map +1 -0
- package/dist/esm/AiInput.js +332 -0
- package/dist/esm/AiInput.js.map +1 -0
- package/dist/esm/AiResponse.js +281 -0
- package/dist/esm/AiResponse.js.map +1 -0
- package/dist/esm/AiRole.js +93 -0
- package/dist/esm/AiRole.js.map +1 -0
- package/dist/esm/AiToolkit.js +123 -0
- package/dist/esm/AiToolkit.js.map +1 -0
- package/dist/esm/Completions.js +206 -0
- package/dist/esm/Completions.js.map +1 -0
- package/dist/esm/Tokenizer.js +48 -0
- package/dist/esm/Tokenizer.js.map +1 -0
- package/dist/esm/index.js +33 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +4 -0
- package/package.json +100 -0
- package/src/AiChat.ts +274 -0
- package/src/AiError.ts +38 -0
- package/src/AiInput.ts +456 -0
- package/src/AiResponse.ts +343 -0
- package/src/AiRole.ts +122 -0
- package/src/AiToolkit.ts +314 -0
- package/src/Completions.ts +354 -0
- package/src/Tokenizer.ts +78 -0
- package/src/index.ts +39 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*/
|
|
4
|
+
import * as Schema from "@effect/schema/Schema";
|
|
5
|
+
import * as Option from "effect/Option";
|
|
6
|
+
/**
|
|
7
|
+
* @since 1.0.0
|
|
8
|
+
* @category type ids
|
|
9
|
+
*/
|
|
10
|
+
export const TypeId = /*#__PURE__*/Symbol.for("@effect/ai/AiRole");
|
|
11
|
+
/**
|
|
12
|
+
* @since 1.0.0
|
|
13
|
+
* @category models
|
|
14
|
+
*/
|
|
15
|
+
export class User extends /*#__PURE__*/Schema.TaggedClass("@effect/ai/AiRole/User")("User", {}) {
|
|
16
|
+
/**
|
|
17
|
+
* @since 1.0.0
|
|
18
|
+
*/
|
|
19
|
+
[TypeId] = TypeId;
|
|
20
|
+
/**
|
|
21
|
+
* @since 1.0.0
|
|
22
|
+
*/
|
|
23
|
+
kind = "user";
|
|
24
|
+
/**
|
|
25
|
+
* @since 1.0.0
|
|
26
|
+
*/
|
|
27
|
+
nameOption = /*#__PURE__*/Option.none();
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* @since 1.0.0
|
|
31
|
+
* @category constructors
|
|
32
|
+
*/
|
|
33
|
+
export const user = /*#__PURE__*/new User();
|
|
34
|
+
/**
|
|
35
|
+
* @since 1.0.0
|
|
36
|
+
* @category models
|
|
37
|
+
*/
|
|
38
|
+
export class UserWithName extends /*#__PURE__*/Schema.TaggedClass("@effect/ai/AiRole/UserWithName")("UserWithName", {
|
|
39
|
+
name: Schema.String
|
|
40
|
+
}) {
|
|
41
|
+
/**
|
|
42
|
+
* @since 1.0.0
|
|
43
|
+
*/
|
|
44
|
+
[TypeId] = TypeId;
|
|
45
|
+
/**
|
|
46
|
+
* @since 1.0.0
|
|
47
|
+
*/
|
|
48
|
+
kind = "user";
|
|
49
|
+
/**
|
|
50
|
+
* @since 1.0.0
|
|
51
|
+
*/
|
|
52
|
+
get nameOption() {
|
|
53
|
+
return Option.some(this.name);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* @since 1.0.0
|
|
58
|
+
* @category constructors
|
|
59
|
+
*/
|
|
60
|
+
export const userWithName = name => new UserWithName({
|
|
61
|
+
name
|
|
62
|
+
}, {
|
|
63
|
+
disableValidation: true
|
|
64
|
+
});
|
|
65
|
+
/**
|
|
66
|
+
* @since 1.0.0
|
|
67
|
+
* @category models
|
|
68
|
+
*/
|
|
69
|
+
export class Model extends /*#__PURE__*/Schema.TaggedClass("@effect/ai/AiRole/Model")("Model", {}) {
|
|
70
|
+
/**
|
|
71
|
+
* @since 1.0.0
|
|
72
|
+
*/
|
|
73
|
+
[TypeId] = TypeId;
|
|
74
|
+
/**
|
|
75
|
+
* @since 1.0.0
|
|
76
|
+
*/
|
|
77
|
+
kind = "model";
|
|
78
|
+
/**
|
|
79
|
+
* @since 1.0.0
|
|
80
|
+
*/
|
|
81
|
+
nameOption = /*#__PURE__*/Option.none();
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* @since 1.0.0
|
|
85
|
+
* @category constructors
|
|
86
|
+
*/
|
|
87
|
+
export const model = /*#__PURE__*/new Model();
|
|
88
|
+
/**
|
|
89
|
+
* @since 1.0.0
|
|
90
|
+
* @category roles
|
|
91
|
+
*/
|
|
92
|
+
export const AiRole = /*#__PURE__*/Schema.Union(User, UserWithName, Model);
|
|
93
|
+
//# sourceMappingURL=AiRole.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AiRole.js","names":["Schema","Option","TypeId","Symbol","for","User","TaggedClass","kind","nameOption","none","user","UserWithName","name","String","some","userWithName","disableValidation","Model","model","AiRole","Union"],"sources":["../../src/AiRole.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,MAAM,MAAM,uBAAuB;AAC/C,OAAO,KAAKC,MAAM,MAAM,eAAe;AAEvC;;;;AAIA,OAAO,MAAMC,MAAM,gBAAkBC,MAAM,CAACC,GAAG,CAAC,mBAAmB,CAAC;AAcpE;;;;AAIA,OAAM,MAAOC,IAAK,sBAAQL,MAAM,CAACM,WAAW,CAAO,wBAAwB,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;EACtF;;;EAGS,CAACJ,MAAM,IAAYA,MAAM;EAElC;;;EAGSK,IAAI,GAAG,MAAe;EAE/B;;;EAGSC,UAAU,gBAA0BP,MAAM,CAACQ,IAAI,EAAE;;AAG5D;;;;AAIA,OAAO,MAAMC,IAAI,gBAAW,IAAIL,IAAI,EAAE;AAEtC;;;;AAIA,OAAM,MAAOM,YAAa,sBAAQX,MAAM,CAACM,WAAW,CAAe,gCAAgC,CAAC,CAAC,cAAc,EAAE;EACnHM,IAAI,EAAEZ,MAAM,CAACa;CACd,CAAC;EACA;;;EAGS,CAACX,MAAM,IAAYA,MAAM;EAElC;;;EAGSK,IAAI,GAAG,MAAe;EAE/B;;;EAGA,IAAIC,UAAUA,CAAA;IACZ,OAAOP,MAAM,CAACa,IAAI,CAAC,IAAI,CAACF,IAAI,CAAC;EAC/B;;AAGF;;;;AAIA,OAAO,MAAMG,YAAY,GAAIH,IAAY,IAAa,IAAID,YAAY,CAAC;EAAEC;AAAI,CAAE,EAAE;EAAEI,iBAAiB,EAAE;AAAI,CAAE,CAAC;AAE7G;;;;AAIA,OAAM,MAAOC,KAAM,sBAAQjB,MAAM,CAACM,WAAW,CAAQ,yBAAyB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;EAC1F;;;EAGS,CAACJ,MAAM,IAAYA,MAAM;EAElC;;;EAGSK,IAAI,GAAG,OAAgB;EAEhC;;;EAGSC,UAAU,gBAA0BP,MAAM,CAACQ,IAAI,EAAE;;AAG5D;;;;AAIA,OAAO,MAAMS,KAAK,gBAAW,IAAID,KAAK,EAAE;AAExC;;;;AAIA,OAAO,MAAME,MAAM,gBAIdnB,MAAM,CAACoB,KAAK,CACff,IAAI,EACJM,YAAY,EACZM,KAAK,CACN","ignoreList":[]}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import * as Context from "effect/Context";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as Effectable from "effect/Effectable";
|
|
4
|
+
import { identity } from "effect/Function";
|
|
5
|
+
import * as HashMap from "effect/HashMap";
|
|
6
|
+
import * as Inspectable from "effect/Inspectable";
|
|
7
|
+
import * as Layer from "effect/Layer";
|
|
8
|
+
import { pipeArguments } from "effect/Pipeable";
|
|
9
|
+
/**
|
|
10
|
+
* @since 1.0.0
|
|
11
|
+
* @category type ids
|
|
12
|
+
*/
|
|
13
|
+
export const TypeId = /*#__PURE__*/Symbol.for("@effect/ai/AiToolkit");
|
|
14
|
+
/**
|
|
15
|
+
* @since 1.0.0
|
|
16
|
+
* @category registry
|
|
17
|
+
*/
|
|
18
|
+
export class Registry extends /*#__PURE__*/Context.Tag("@effect/ai/AiToolkit/Registry")() {
|
|
19
|
+
static Live = /*#__PURE__*/Layer.sync(Registry, () => new Map());
|
|
20
|
+
}
|
|
21
|
+
class AiToolkitImpl extends Effectable.Class {
|
|
22
|
+
tools;
|
|
23
|
+
[TypeId];
|
|
24
|
+
constructor(tools) {
|
|
25
|
+
super();
|
|
26
|
+
this.tools = tools;
|
|
27
|
+
this[TypeId] = TypeId;
|
|
28
|
+
}
|
|
29
|
+
toJSON() {
|
|
30
|
+
return {
|
|
31
|
+
_id: "@effect/ai/AiToolkit",
|
|
32
|
+
tools: [...HashMap.values(this.tools)].map(tool => tool._tag)
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
toString() {
|
|
36
|
+
return Inspectable.format(this);
|
|
37
|
+
}
|
|
38
|
+
[Inspectable.NodeInspectSymbol]() {
|
|
39
|
+
return Inspectable.format(this);
|
|
40
|
+
}
|
|
41
|
+
pipe() {
|
|
42
|
+
return pipeArguments(this, arguments);
|
|
43
|
+
}
|
|
44
|
+
add(tool) {
|
|
45
|
+
return new AiToolkitImpl(HashMap.set(this.tools, tool._tag, tool));
|
|
46
|
+
}
|
|
47
|
+
addAll(...tools) {
|
|
48
|
+
let map = this.tools;
|
|
49
|
+
for (const tool of tools) {
|
|
50
|
+
map = HashMap.set(map, tool._tag, tool);
|
|
51
|
+
}
|
|
52
|
+
return new AiToolkitImpl(map);
|
|
53
|
+
}
|
|
54
|
+
concat(that) {
|
|
55
|
+
return new AiToolkitImpl(HashMap.union(this.tools, that.tools));
|
|
56
|
+
}
|
|
57
|
+
implement(f) {
|
|
58
|
+
return registerHandlers(this, f).pipe(Layer.effectDiscard, Layer.provideMerge(Registry.Live));
|
|
59
|
+
}
|
|
60
|
+
implementScoped(f) {
|
|
61
|
+
return registerHandlers(this, f).pipe(Layer.scopedDiscard, Layer.provideMerge(Registry.Live));
|
|
62
|
+
}
|
|
63
|
+
commit() {
|
|
64
|
+
return Effect.map(Registry, map => {
|
|
65
|
+
let handlers = HashMap.empty();
|
|
66
|
+
for (const [tag, tool] of this.tools) {
|
|
67
|
+
handlers = HashMap.set(handlers, tag, map.get(tool));
|
|
68
|
+
}
|
|
69
|
+
return new HandlersImpl(this, handlers);
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const registerHandlers = (toolkit, f) => Effect.context().pipe(Effect.bindTo("context"), Effect.bind("handlers", () => {
|
|
74
|
+
const handlers = f(HandlersImpl.fromToolkit(toolkit));
|
|
75
|
+
return Effect.isEffect(handlers) ? handlers : Effect.succeed(handlers);
|
|
76
|
+
}), Effect.tap(({
|
|
77
|
+
context,
|
|
78
|
+
handlers
|
|
79
|
+
}) => {
|
|
80
|
+
const registry = Context.unsafeGet(context, Registry);
|
|
81
|
+
for (const [tag, handler] of handlers.handlers) {
|
|
82
|
+
const tool = HashMap.unsafeGet(handlers.toolkit.tools, tag);
|
|
83
|
+
registry.set(tool, function (params) {
|
|
84
|
+
return Effect.withSpan(Effect.mapInputContext(handler(params), input => Context.merge(input, context)), "AiToolkit.handler", {
|
|
85
|
+
captureStackTrace: false,
|
|
86
|
+
attributes: {
|
|
87
|
+
tool: tag,
|
|
88
|
+
parameters: params
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}));
|
|
94
|
+
/**
|
|
95
|
+
* @since 1.0.0
|
|
96
|
+
* @category constructors
|
|
97
|
+
*/
|
|
98
|
+
export const empty = /*#__PURE__*/new AiToolkitImpl( /*#__PURE__*/HashMap.empty());
|
|
99
|
+
/**
|
|
100
|
+
* @since 1.0.0
|
|
101
|
+
* @category handlers
|
|
102
|
+
*/
|
|
103
|
+
export const HandlersTypeId = /*#__PURE__*/Symbol.for("@effect/ai/AiToolkit/Handlers");
|
|
104
|
+
const handlersVariance = {
|
|
105
|
+
_Tools: identity
|
|
106
|
+
};
|
|
107
|
+
class HandlersImpl {
|
|
108
|
+
toolkit;
|
|
109
|
+
handlers;
|
|
110
|
+
[HandlersTypeId];
|
|
111
|
+
constructor(toolkit, handlers) {
|
|
112
|
+
this.toolkit = toolkit;
|
|
113
|
+
this.handlers = handlers;
|
|
114
|
+
this[HandlersTypeId] = handlersVariance;
|
|
115
|
+
}
|
|
116
|
+
static fromToolkit(toolkit) {
|
|
117
|
+
return new HandlersImpl(toolkit, HashMap.empty());
|
|
118
|
+
}
|
|
119
|
+
handle(tag, f) {
|
|
120
|
+
return new HandlersImpl(this.toolkit, HashMap.set(this.handlers, tag, f));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=AiToolkit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AiToolkit.js","names":["Context","Effect","Effectable","identity","HashMap","Inspectable","Layer","pipeArguments","TypeId","Symbol","for","Registry","Tag","Live","sync","Map","AiToolkitImpl","Class","tools","constructor","toJSON","_id","values","map","tool","_tag","toString","format","NodeInspectSymbol","pipe","arguments","add","set","addAll","concat","that","union","implement","f","registerHandlers","effectDiscard","provideMerge","implementScoped","scopedDiscard","commit","handlers","empty","tag","get","HandlersImpl","toolkit","context","bindTo","bind","fromToolkit","isEffect","succeed","tap","registry","unsafeGet","handler","params","withSpan","mapInputContext","input","merge","captureStackTrace","attributes","parameters","HandlersTypeId","handlersVariance","_Tools","handle"],"sources":["../../src/AiToolkit.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*/
|
|
4
|
+
import * as JsonSchema from "@effect/platform/OpenApiJsonSchema";
|
|
5
|
+
import * as AST from "@effect/schema/AST";
|
|
6
|
+
import * as Schema from "@effect/schema/Schema";
|
|
7
|
+
import * as Chunk from "effect/Chunk";
|
|
8
|
+
import * as Context from "effect/Context";
|
|
9
|
+
import * as Effect from "effect/Effect";
|
|
10
|
+
import * as HashMap from "effect/HashMap";
|
|
11
|
+
import * as Option from "effect/Option";
|
|
12
|
+
import * as Stream from "effect/Stream";
|
|
13
|
+
import { AiError } from "./AiError.js";
|
|
14
|
+
import * as AiInput from "./AiInput.js";
|
|
15
|
+
import { WithResolved } from "./AiResponse.js";
|
|
16
|
+
/**
|
|
17
|
+
* @since 1.0.0
|
|
18
|
+
* @category tags
|
|
19
|
+
*/
|
|
20
|
+
export class Completions extends /*#__PURE__*/Context.Tag("@effect/ai/Completions")() {}
|
|
21
|
+
const constEmptyMap = /*#__PURE__*/new Map();
|
|
22
|
+
/**
|
|
23
|
+
* @since 1.0.0
|
|
24
|
+
* @category constructors
|
|
25
|
+
*/
|
|
26
|
+
export const make = options => Effect.map(Effect.serviceOption(AiInput.SystemInstruction), parentSystem => {
|
|
27
|
+
return Completions.of({
|
|
28
|
+
create(input) {
|
|
29
|
+
return Effect.serviceOption(AiInput.SystemInstruction).pipe(Effect.flatMap(system => options.create({
|
|
30
|
+
input: AiInput.make(input),
|
|
31
|
+
system: Option.orElse(system, () => parentSystem),
|
|
32
|
+
tools: [],
|
|
33
|
+
required: false
|
|
34
|
+
})), Effect.withSpan("Completions.create", {
|
|
35
|
+
captureStackTrace: false
|
|
36
|
+
}));
|
|
37
|
+
},
|
|
38
|
+
stream(input_) {
|
|
39
|
+
const input = AiInput.make(input_);
|
|
40
|
+
return Effect.serviceOption(AiInput.SystemInstruction).pipe(Effect.map(system => options.stream({
|
|
41
|
+
input: input,
|
|
42
|
+
system: Option.orElse(system, () => parentSystem),
|
|
43
|
+
tools: [],
|
|
44
|
+
required: false
|
|
45
|
+
})), Stream.unwrap, Stream.withSpan("Completions.stream", {
|
|
46
|
+
captureStackTrace: false
|
|
47
|
+
}));
|
|
48
|
+
},
|
|
49
|
+
structured(opts) {
|
|
50
|
+
const input = AiInput.make(opts.input);
|
|
51
|
+
const schema = opts.schema;
|
|
52
|
+
const decode = Schema.decodeUnknown(schema);
|
|
53
|
+
const toolId = schema._tag ?? schema.identifier;
|
|
54
|
+
return Effect.serviceOption(AiInput.SystemInstruction).pipe(Effect.flatMap(system => options.create({
|
|
55
|
+
input: input,
|
|
56
|
+
system: Option.orElse(system, () => parentSystem),
|
|
57
|
+
tools: [convertTool(schema)],
|
|
58
|
+
required: true
|
|
59
|
+
})), Effect.flatMap(response => Chunk.findFirst(response.parts, part => part._tag === "ToolCall" && part.name === toolId).pipe(Option.match({
|
|
60
|
+
onNone: () => Effect.fail(new AiError({
|
|
61
|
+
module: "Completions",
|
|
62
|
+
method: "structured",
|
|
63
|
+
description: `Tool call '${toolId}' not found in response`
|
|
64
|
+
})),
|
|
65
|
+
onSome: toolCall => Effect.matchEffect(decode(toolCall.params), {
|
|
66
|
+
onFailure: cause => new AiError({
|
|
67
|
+
module: "Completions",
|
|
68
|
+
method: "structured",
|
|
69
|
+
description: `Failed to decode tool call '${toolId}' parameters`,
|
|
70
|
+
cause
|
|
71
|
+
}),
|
|
72
|
+
onSuccess: resolved => Effect.succeed(new WithResolved({
|
|
73
|
+
response,
|
|
74
|
+
resolved: new Map([[toolCall.id, resolved]]),
|
|
75
|
+
encoded: new Map([[toolCall.id, toolCall.params]])
|
|
76
|
+
}))
|
|
77
|
+
})
|
|
78
|
+
}), Effect.withSpan("Completions.structured", {
|
|
79
|
+
attributes: {
|
|
80
|
+
tool: toolId
|
|
81
|
+
},
|
|
82
|
+
captureStackTrace: false
|
|
83
|
+
}))));
|
|
84
|
+
},
|
|
85
|
+
toolkit({
|
|
86
|
+
concurrency,
|
|
87
|
+
input: inputInput,
|
|
88
|
+
required = false,
|
|
89
|
+
tools
|
|
90
|
+
}) {
|
|
91
|
+
const input = AiInput.make(inputInput);
|
|
92
|
+
const toolArr = [];
|
|
93
|
+
for (const [, tool] of tools.toolkit.tools) {
|
|
94
|
+
toolArr.push(convertTool(tool));
|
|
95
|
+
}
|
|
96
|
+
return Effect.serviceOption(AiInput.SystemInstruction).pipe(Effect.flatMap(system => options.create({
|
|
97
|
+
input: input,
|
|
98
|
+
system: Option.orElse(system, () => parentSystem),
|
|
99
|
+
tools: toolArr,
|
|
100
|
+
required: required
|
|
101
|
+
})), Effect.flatMap(response => resolveParts({
|
|
102
|
+
response,
|
|
103
|
+
tools,
|
|
104
|
+
concurrency,
|
|
105
|
+
method: "toolkit"
|
|
106
|
+
})), Effect.withSpan("Completions.toolkit", {
|
|
107
|
+
captureStackTrace: false,
|
|
108
|
+
attributes: {
|
|
109
|
+
concurrency,
|
|
110
|
+
required
|
|
111
|
+
}
|
|
112
|
+
}));
|
|
113
|
+
},
|
|
114
|
+
toolkitStream({
|
|
115
|
+
concurrency,
|
|
116
|
+
input,
|
|
117
|
+
required = false,
|
|
118
|
+
tools
|
|
119
|
+
}) {
|
|
120
|
+
const toolArr = [];
|
|
121
|
+
for (const [, tool] of tools.toolkit.tools) {
|
|
122
|
+
toolArr.push(convertTool(tool));
|
|
123
|
+
}
|
|
124
|
+
return Effect.serviceOption(AiInput.SystemInstruction).pipe(Effect.map(system => options.stream({
|
|
125
|
+
input: AiInput.make(input),
|
|
126
|
+
system: Option.orElse(system, () => parentSystem),
|
|
127
|
+
tools: toolArr,
|
|
128
|
+
required: required
|
|
129
|
+
})), Stream.unwrap, Stream.mapEffect(chunk => resolveParts({
|
|
130
|
+
response: chunk,
|
|
131
|
+
tools,
|
|
132
|
+
concurrency,
|
|
133
|
+
method: "toolkitStream"
|
|
134
|
+
}), {
|
|
135
|
+
concurrency: "unbounded"
|
|
136
|
+
}), Stream.withSpan("Completions.toolkitStream", {
|
|
137
|
+
captureStackTrace: false,
|
|
138
|
+
attributes: {
|
|
139
|
+
concurrency,
|
|
140
|
+
required
|
|
141
|
+
}
|
|
142
|
+
}));
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
const convertTool = tool => ({
|
|
147
|
+
name: tool._tag ?? tool.identifier,
|
|
148
|
+
description: getDescription(tool.ast),
|
|
149
|
+
parameters: JsonSchema.make(tool)
|
|
150
|
+
});
|
|
151
|
+
const getDescription = ast => {
|
|
152
|
+
const annotations = ast._tag === "Transformation" ? {
|
|
153
|
+
...ast.to.annotations,
|
|
154
|
+
...ast.annotations
|
|
155
|
+
} : ast.annotations;
|
|
156
|
+
return AST.DescriptionAnnotationId in annotations ? annotations[AST.DescriptionAnnotationId] : "";
|
|
157
|
+
};
|
|
158
|
+
const resolveParts = options => {
|
|
159
|
+
const toolNames = [];
|
|
160
|
+
const toolParts = Chunk.filter(options.response.parts, part => {
|
|
161
|
+
if (part._tag === "ToolCall") {
|
|
162
|
+
toolNames.push(part.name);
|
|
163
|
+
return true;
|
|
164
|
+
}
|
|
165
|
+
return false;
|
|
166
|
+
});
|
|
167
|
+
if (Chunk.isEmpty(toolParts)) {
|
|
168
|
+
return Effect.succeed(new WithResolved({
|
|
169
|
+
response: options.response,
|
|
170
|
+
resolved: constEmptyMap,
|
|
171
|
+
encoded: constEmptyMap
|
|
172
|
+
}));
|
|
173
|
+
}
|
|
174
|
+
const resolved = new Map();
|
|
175
|
+
const encoded = new Map();
|
|
176
|
+
return Effect.annotateCurrentSpan("toolCalls", toolNames).pipe(Effect.zipRight(Effect.forEach(toolParts, part => {
|
|
177
|
+
const tool = HashMap.unsafeGet(options.tools.toolkit.tools, part.name);
|
|
178
|
+
const handler = HashMap.unsafeGet(options.tools.handlers, part.name);
|
|
179
|
+
const decodeParams = Schema.decodeUnknown(tool);
|
|
180
|
+
const encodeSuccess = Schema.encode(tool.success);
|
|
181
|
+
return decodeParams(part.params).pipe(Effect.mapError(cause => new AiError({
|
|
182
|
+
module: "Completions",
|
|
183
|
+
method: options.method,
|
|
184
|
+
description: `Failed to decode tool call '${part.name}' parameters`,
|
|
185
|
+
cause
|
|
186
|
+
})), Effect.flatMap(handler), Effect.tap(value => {
|
|
187
|
+
return encodeSuccess(value).pipe(Effect.mapError(cause => new AiError({
|
|
188
|
+
module: "Completions",
|
|
189
|
+
method: options.method,
|
|
190
|
+
description: `Failed to encode tool call '${part.name}' result`,
|
|
191
|
+
cause
|
|
192
|
+
})), Effect.map(encodedValue => {
|
|
193
|
+
resolved.set(part.id, value);
|
|
194
|
+
encoded.set(part.id, encodedValue);
|
|
195
|
+
}));
|
|
196
|
+
}));
|
|
197
|
+
}, {
|
|
198
|
+
concurrency: options.concurrency,
|
|
199
|
+
discard: true
|
|
200
|
+
})), Effect.as(new WithResolved({
|
|
201
|
+
response: options.response,
|
|
202
|
+
resolved,
|
|
203
|
+
encoded
|
|
204
|
+
})));
|
|
205
|
+
};
|
|
206
|
+
//# sourceMappingURL=Completions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Completions.js","names":["JsonSchema","AST","Schema","Chunk","Context","Effect","HashMap","Option","Stream","AiError","AiInput","WithResolved","Completions","Tag","constEmptyMap","Map","make","options","map","serviceOption","SystemInstruction","parentSystem","of","create","input","pipe","flatMap","system","orElse","tools","required","withSpan","captureStackTrace","stream","input_","unwrap","structured","opts","schema","decode","decodeUnknown","toolId","_tag","identifier","convertTool","response","findFirst","parts","part","name","match","onNone","fail","module","method","description","onSome","toolCall","matchEffect","params","onFailure","cause","onSuccess","resolved","succeed","id","encoded","attributes","tool","toolkit","concurrency","inputInput","toolArr","push","resolveParts","toolkitStream","mapEffect","chunk","getDescription","ast","parameters","annotations","to","DescriptionAnnotationId","toolNames","toolParts","filter","isEmpty","annotateCurrentSpan","zipRight","forEach","unsafeGet","handler","handlers","decodeParams","encodeSuccess","encode","success","mapError","tap","value","encodedValue","set","discard","as"],"sources":["../../src/Completions.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,UAAU,MAAM,oCAAoC;AAChE,OAAO,KAAKC,GAAG,MAAM,oBAAoB;AACzC,OAAO,KAAKC,MAAM,MAAM,uBAAuB;AAC/C,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,OAAO,MAAM,gBAAgB;AACzC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,OAAO,MAAM,gBAAgB;AACzC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,MAAM,MAAM,eAAe;AAEvC,SAASC,OAAO,QAAQ,cAAc;AAEtC,OAAO,KAAKC,OAAO,MAAM,cAAc;AAEvC,SAASC,YAAY,QAAQ,iBAAiB;AAG9C;;;;AAIA,OAAM,MAAOC,WAAY,sBAAQR,OAAO,CAACS,GAAG,CAAC,wBAAwB,CAAC,EAGnE;AAwDH,MAAMC,aAAa,gBAAG,IAAIC,GAAG,EAAgB;AAiB7C;;;;AAIA,OAAO,MAAMC,IAAI,GAAIC,OAqBpB,IACCZ,MAAM,CAACa,GAAG,CAACb,MAAM,CAACc,aAAa,CAACT,OAAO,CAACU,iBAAiB,CAAC,EAAGC,YAAY,IAAI;EAC3E,OAAOT,WAAW,CAACU,EAAE,CAAC;IACpBC,MAAMA,CAACC,KAAK;MACV,OAAOnB,MAAM,CAACc,aAAa,CAACT,OAAO,CAACU,iBAAiB,CAAC,CAACK,IAAI,CACzDpB,MAAM,CAACqB,OAAO,CAAEC,MAAM,IACpBV,OAAO,CAACM,MAAM,CAAC;QACbC,KAAK,EAAEd,OAAO,CAACM,IAAI,CAACQ,KAAK,CAAiC;QAC1DG,MAAM,EAAEpB,MAAM,CAACqB,MAAM,CAACD,MAAM,EAAE,MAAMN,YAAY,CAAC;QACjDQ,KAAK,EAAE,EAAE;QACTC,QAAQ,EAAE;OACX,CAAC,CACH,EACDzB,MAAM,CAAC0B,QAAQ,CAAC,oBAAoB,EAAE;QAAEC,iBAAiB,EAAE;MAAK,CAAE,CAAC,CACpE;IACH,CAAC;IACDC,MAAMA,CAACC,MAAM;MACX,MAAMV,KAAK,GAAGd,OAAO,CAACM,IAAI,CAACkB,MAAM,CAAC;MAClC,OAAO7B,MAAM,CAACc,aAAa,CAACT,OAAO,CAACU,iBAAiB,CAAC,CAACK,IAAI,CACzDpB,MAAM,CAACa,GAAG,CAAES,MAAM,IAChBV,OAAO,CAACgB,MAAM,CAAC;QACbT,KAAK,EAAEA,KAAqC;QAC5CG,MAAM,EAAEpB,MAAM,CAACqB,MAAM,CAACD,MAAM,EAAE,MAAMN,YAAY,CAAC;QACjDQ,KAAK,EAAE,EAAE;QACTC,QAAQ,EAAE;OACX,CAAC,CACH,EACDtB,MAAM,CAAC2B,MAAM,EACb3B,MAAM,CAACuB,QAAQ,CAAC,oBAAoB,EAAE;QAAEC,iBAAiB,EAAE;MAAK,CAAE,CAAC,CACpE;IACH,CAAC;IACDI,UAAUA,CAACC,IAAI;MACb,MAAMb,KAAK,GAAGd,OAAO,CAACM,IAAI,CAACqB,IAAI,CAACb,KAAK,CAAC;MACtC,MAAMc,MAAM,GAAGD,IAAI,CAACC,MAAM;MAC1B,MAAMC,MAAM,GAAGrC,MAAM,CAACsC,aAAa,CAACF,MAAM,CAAC;MAC3C,MAAMG,MAAM,GAAGH,MAAM,CAACI,IAAI,IAAIJ,MAAM,CAACK,UAAU;MAC/C,OAAOtC,MAAM,CAACc,aAAa,CAACT,OAAO,CAACU,iBAAiB,CAAC,CAACK,IAAI,CACzDpB,MAAM,CAACqB,OAAO,CAAEC,MAAM,IACpBV,OAAO,CAACM,MAAM,CAAC;QACbC,KAAK,EAAEA,KAAqC;QAC5CG,MAAM,EAAEpB,MAAM,CAACqB,MAAM,CAACD,MAAM,EAAE,MAAMN,YAAY,CAAC;QACjDQ,KAAK,EAAE,CAACe,WAAW,CAACN,MAAM,CAAC,CAAC;QAC5BR,QAAQ,EAAE;OACX,CAAC,CACH,EACDzB,MAAM,CAACqB,OAAO,CAAEmB,QAAQ,IACtB1C,KAAK,CAAC2C,SAAS,CACbD,QAAQ,CAACE,KAAK,EACbC,IAAI,IAA2BA,IAAI,CAACN,IAAI,KAAK,UAAU,IAAIM,IAAI,CAACC,IAAI,KAAKR,MAAM,CACjF,CAAChB,IAAI,CACJlB,MAAM,CAAC2C,KAAK,CAAC;QACXC,MAAM,EAAEA,CAAA,KACN9C,MAAM,CAAC+C,IAAI,CACT,IAAI3C,OAAO,CAAC;UACV4C,MAAM,EAAE,aAAa;UACrBC,MAAM,EAAE,YAAY;UACpBC,WAAW,EAAE,cAAcd,MAAM;SAClC,CAAC,CACH;QACHe,MAAM,EAAGC,QAAQ,IACfpD,MAAM,CAACqD,WAAW,CAACnB,MAAM,CAACkB,QAAQ,CAACE,MAAM,CAAC,EAAE;UAC1CC,SAAS,EAAGC,KAAK,IACf,IAAIpD,OAAO,CAAC;YACV4C,MAAM,EAAE,aAAa;YACrBC,MAAM,EAAE,YAAY;YACpBC,WAAW,EAAE,+BAA+Bd,MAAM,cAAc;YAChEoB;WACD,CAAC;UACJC,SAAS,EAAGC,QAAQ,IAClB1D,MAAM,CAAC2D,OAAO,CACZ,IAAIrD,YAAY,CAAC;YACfkC,QAAQ;YACRkB,QAAQ,EAAE,IAAIhD,GAAG,CAAC,CAAC,CAAC0C,QAAQ,CAACQ,EAAE,EAAEF,QAAQ,CAAC,CAAC,CAAC;YAC5CG,OAAO,EAAE,IAAInD,GAAG,CAAC,CAAC,CAAC0C,QAAQ,CAACQ,EAAE,EAAER,QAAQ,CAACE,MAAM,CAAC,CAAC;WAClD,CAAC;SAEP;OACJ,CAAC,EACFtD,MAAM,CAAC0B,QAAQ,CAAC,wBAAwB,EAAE;QACxCoC,UAAU,EAAE;UAAEC,IAAI,EAAE3B;QAAM,CAAE;QAC5BT,iBAAiB,EAAE;OACpB,CAAC,CACH,CACF,CACF;IACH,CAAC;IACDqC,OAAOA,CAAC;MAAEC,WAAW;MAAE9C,KAAK,EAAE+C,UAAU;MAAEzC,QAAQ,GAAG,KAAK;MAAED;IAAK,CAAE;MACjE,MAAML,KAAK,GAAGd,OAAO,CAACM,IAAI,CAACuD,UAAU,CAAC;MACtC,MAAMC,OAAO,GAAoF,EAAE;MACnG,KAAK,MAAM,GAAGJ,IAAI,CAAC,IAAIvC,KAAK,CAACwC,OAAO,CAACxC,KAAK,EAAE;QAC1C2C,OAAO,CAACC,IAAI,CAAC7B,WAAW,CAACwB,IAAW,CAAC,CAAC;MACxC;MACA,OAAO/D,MAAM,CAACc,aAAa,CAACT,OAAO,CAACU,iBAAiB,CAAC,CAACK,IAAI,CACzDpB,MAAM,CAACqB,OAAO,CAAEC,MAAM,IACpBV,OAAO,CAACM,MAAM,CAAC;QACbC,KAAK,EAAEA,KAAqC;QAC5CG,MAAM,EAAEpB,MAAM,CAACqB,MAAM,CAACD,MAAM,EAAE,MAAMN,YAAY,CAAC;QACjDQ,KAAK,EAAE2C,OAAO;QACd1C,QAAQ,EAAEA;OACX,CAAC,CACH,EACDzB,MAAM,CAACqB,OAAO,CAAEmB,QAAQ,IAAK6B,YAAY,CAAC;QAAE7B,QAAQ;QAAEhB,KAAK;QAAEyC,WAAW;QAAEhB,MAAM,EAAE;MAAS,CAAE,CAAC,CAAC,EAC/FjD,MAAM,CAAC0B,QAAQ,CAAC,qBAAqB,EAAE;QACrCC,iBAAiB,EAAE,KAAK;QACxBmC,UAAU,EAAE;UACVG,WAAW;UACXxC;;OAEH,CAAC,CACI;IACV,CAAC;IACD6C,aAAaA,CAAC;MAAEL,WAAW;MAAE9C,KAAK;MAAEM,QAAQ,GAAG,KAAK;MAAED;IAAK,CAAE;MAC3D,MAAM2C,OAAO,GAAoF,EAAE;MACnG,KAAK,MAAM,GAAGJ,IAAI,CAAC,IAAIvC,KAAK,CAACwC,OAAO,CAACxC,KAAK,EAAE;QAC1C2C,OAAO,CAACC,IAAI,CAAC7B,WAAW,CAACwB,IAAW,CAAC,CAAC;MACxC;MACA,OAAO/D,MAAM,CAACc,aAAa,CAACT,OAAO,CAACU,iBAAiB,CAAC,CAACK,IAAI,CACzDpB,MAAM,CAACa,GAAG,CAAES,MAAM,IAChBV,OAAO,CAACgB,MAAM,CAAC;QACbT,KAAK,EAAEd,OAAO,CAACM,IAAI,CAACQ,KAAK,CAAiC;QAC1DG,MAAM,EAAEpB,MAAM,CAACqB,MAAM,CAACD,MAAM,EAAE,MAAMN,YAAY,CAAC;QACjDQ,KAAK,EAAE2C,OAAO;QACd1C,QAAQ,EAAEA;OACX,CAAC,CACH,EACDtB,MAAM,CAAC2B,MAAM,EACb3B,MAAM,CAACoE,SAAS,CACbC,KAAK,IAAKH,YAAY,CAAC;QAAE7B,QAAQ,EAAEgC,KAAK;QAAEhD,KAAK;QAAEyC,WAAW;QAAEhB,MAAM,EAAE;MAAe,CAAE,CAAC,EACzF;QAAEgB,WAAW,EAAE;MAAW,CAAE,CAC7B,EACD9D,MAAM,CAACuB,QAAQ,CAAC,2BAA2B,EAAE;QAC3CC,iBAAiB,EAAE,KAAK;QACxBmC,UAAU,EAAE;UACVG,WAAW;UACXxC;;OAEH,CAAC,CACI;IACV;GACD,CAAC;AACJ,CAAC,CAAC;AAEJ,MAAMc,WAAW,GAAawB,IAA2C,KAAM;EAC7EnB,IAAI,EAAEmB,IAAI,CAAC1B,IAAI,IAAI0B,IAAI,CAACzB,UAAU;EAClCY,WAAW,EAAEuB,cAAc,CAACV,IAAI,CAACW,GAAG,CAAC;EACrCC,UAAU,EAAEhF,UAAU,CAACgB,IAAI,CAACoD,IAAI;CACjC,CAAC;AAEF,MAAMU,cAAc,GAAIC,GAAY,IAAY;EAC9C,MAAME,WAAW,GAAGF,GAAG,CAACrC,IAAI,KAAK,gBAAgB,GAC/C;IACE,GAAGqC,GAAG,CAACG,EAAE,CAACD,WAAW;IACrB,GAAGF,GAAG,CAACE;GACR,GACDF,GAAG,CAACE,WAAW;EACjB,OAAOhF,GAAG,CAACkF,uBAAuB,IAAIF,WAAW,GAAGA,WAAW,CAAChF,GAAG,CAACkF,uBAAuB,CAAW,GAAG,EAAE;AAC7G,CAAC;AAED,MAAMT,YAAY,GAChBzD,OAKC,IACC;EACF,MAAMmE,SAAS,GAAkB,EAAE;EACnC,MAAMC,SAAS,GAAGlF,KAAK,CAACmF,MAAM,CAC5BrE,OAAO,CAAC4B,QAAQ,CAACE,KAAK,EACrBC,IAAI,IAA0B;IAC7B,IAAIA,IAAI,CAACN,IAAI,KAAK,UAAU,EAAE;MAC5B0C,SAAS,CAACX,IAAI,CAACzB,IAAI,CAACC,IAAI,CAAC;MACzB,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd,CAAC,CACF;EACD,IAAI9C,KAAK,CAACoF,OAAO,CAACF,SAAS,CAAC,EAAE;IAC5B,OAAOhF,MAAM,CAAC2D,OAAO,CACnB,IAAIrD,YAAY,CAAC;MACfkC,QAAQ,EAAE5B,OAAO,CAAC4B,QAAQ;MAC1BkB,QAAQ,EAAEjD,aAAa;MACvBoD,OAAO,EAAEpD;KACV,CAAC,CACH;EACH;EACA,MAAMiD,QAAQ,GAAG,IAAIhD,GAAG,EAA2C;EACnE,MAAMmD,OAAO,GAAG,IAAInD,GAAG,EAAuB;EAC9C,OAAOV,MAAM,CAACmF,mBAAmB,CAAC,WAAW,EAAEJ,SAAS,CAAC,CAAC3D,IAAI,CAC5DpB,MAAM,CAACoF,QAAQ,CAACpF,MAAM,CAACqF,OAAO,CAC5BL,SAAS,EACRrC,IAAI,IAAI;IACP,MAAMoB,IAAI,GAAG9D,OAAO,CAACqF,SAAS,CAAC1E,OAAO,CAACY,KAAK,CAACwC,OAAO,CAACxC,KAAK,EAAEmB,IAAI,CAACC,IAAI,CAAC;IACtE,MAAM2C,OAAO,GAAGtF,OAAO,CAACqF,SAAS,CAAC1E,OAAO,CAACY,KAAK,CAACgE,QAAQ,EAAE7C,IAAI,CAACC,IAAI,CAAC;IACpE,MAAM6C,YAAY,GAAG5F,MAAM,CAACsC,aAAa,CAAC4B,IAAW,CAAC;IACtD,MAAM2B,aAAa,GAAG7F,MAAM,CAAC8F,MAAM,CAAC5B,IAAI,CAAC6B,OAAO,CAAC;IACjD,OAAOH,YAAY,CAAC9C,IAAI,CAACW,MAAM,CAAC,CAAClC,IAAI,CACnCpB,MAAM,CAAC6F,QAAQ,CAAErC,KAAK,IACpB,IAAIpD,OAAO,CAAC;MACV4C,MAAM,EAAE,aAAa;MACrBC,MAAM,EAAErC,OAAO,CAACqC,MAAM;MACtBC,WAAW,EAAE,+BAA+BP,IAAI,CAACC,IAAI,cAAc;MACnEY;KACD,CAAC,CACH,EACDxD,MAAM,CAACqB,OAAO,CAACkE,OAAO,CAAC,EACvBvF,MAAM,CAAC8F,GAAG,CAAEC,KAAK,IAAI;MACnB,OAAOL,aAAa,CAACK,KAAK,CAAC,CAAC3E,IAAI,CAC9BpB,MAAM,CAAC6F,QAAQ,CAAErC,KAAK,IACpB,IAAIpD,OAAO,CAAC;QACV4C,MAAM,EAAE,aAAa;QACrBC,MAAM,EAAErC,OAAO,CAACqC,MAAM;QACtBC,WAAW,EAAE,+BAA+BP,IAAI,CAACC,IAAI,UAAU;QAC/DY;OACD,CAAC,CACH,EACDxD,MAAM,CAACa,GAAG,CAAEmF,YAAY,IAAI;QAC1BtC,QAAQ,CAACuC,GAAG,CAACtD,IAAI,CAACiB,EAAE,EAAEmC,KAAK,CAAC;QAC5BlC,OAAO,CAACoC,GAAG,CAACtD,IAAI,CAACiB,EAAE,EAAEoC,YAAY,CAAC;MACpC,CAAC,CAAC,CACH;IACH,CAAC,CAAC,CACH;EACH,CAAC,EACD;IAAE/B,WAAW,EAAErD,OAAO,CAACqD,WAAW;IAAEiC,OAAO,EAAE;EAAI,CAAE,CACpD,CAAC,EACFlG,MAAM,CAACmG,EAAE,CAAC,IAAI7F,YAAY,CAAC;IAAEkC,QAAQ,EAAE5B,OAAO,CAAC4B,QAAQ;IAAEkB,QAAQ;IAAEG;EAAO,CAAE,CAAC,CAAC,CAC/E;AACH,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*/
|
|
4
|
+
import * as Chunk from "effect/Chunk";
|
|
5
|
+
import * as Context from "effect/Context";
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
import * as Option from "effect/Option";
|
|
8
|
+
import * as AiInput from "./AiInput.js";
|
|
9
|
+
/**
|
|
10
|
+
* @since 1.0.0
|
|
11
|
+
* @category tags
|
|
12
|
+
*/
|
|
13
|
+
export class Tokenizer extends /*#__PURE__*/Context.Tag("@effect/ai/Tokenizer")() {}
|
|
14
|
+
/**
|
|
15
|
+
* @since 1.0.0
|
|
16
|
+
* @category constructors
|
|
17
|
+
*/
|
|
18
|
+
export const make = options => Tokenizer.of({
|
|
19
|
+
tokenize(input) {
|
|
20
|
+
return options.tokenize(AiInput.make(input));
|
|
21
|
+
},
|
|
22
|
+
truncate(content, tokens) {
|
|
23
|
+
return truncate(AiInput.make(content), options.tokenize, tokens);
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
const truncate = (self, tokenize, maxTokens) => Effect.suspend(() => {
|
|
27
|
+
let count = 0;
|
|
28
|
+
let inParts = self;
|
|
29
|
+
let outParts = Chunk.empty();
|
|
30
|
+
const loop = Effect.suspend(() => {
|
|
31
|
+
const o = Chunk.last(inParts);
|
|
32
|
+
if (Option.isNone(o)) {
|
|
33
|
+
return Effect.succeed(AiInput.make(outParts));
|
|
34
|
+
}
|
|
35
|
+
const part = o.value;
|
|
36
|
+
inParts = Chunk.dropRight(inParts, 1);
|
|
37
|
+
return Effect.flatMap(tokenize(Chunk.of(part)), tokens => {
|
|
38
|
+
count += tokens.length;
|
|
39
|
+
if (count > maxTokens) {
|
|
40
|
+
return Effect.succeed(AiInput.make(outParts));
|
|
41
|
+
}
|
|
42
|
+
outParts = Chunk.prepend(outParts, part);
|
|
43
|
+
return loop;
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
return loop;
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=Tokenizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tokenizer.js","names":["Chunk","Context","Effect","Option","AiInput","Tokenizer","Tag","make","options","of","tokenize","input","truncate","content","tokens","self","maxTokens","suspend","count","inParts","outParts","empty","loop","o","last","isNone","succeed","part","value","dropRight","flatMap","length","prepend"],"sources":["../../src/Tokenizer.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,OAAO,MAAM,gBAAgB;AACzC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,MAAM,MAAM,eAAe;AAGvC,OAAO,KAAKC,OAAO,MAAM,cAAc;AAEvC;;;;AAIA,OAAM,MAAOC,SAAU,sBAAQJ,OAAO,CAACK,GAAG,CAAC,sBAAsB,CAAC,EAG/D;AAiBH;;;;AAIA,OAAO,MAAMC,IAAI,GAAIC,OAEpB,IACCH,SAAS,CAACI,EAAE,CAAC;EACXC,QAAQA,CAACC,KAAK;IACZ,OAAOH,OAAO,CAACE,QAAQ,CAACN,OAAO,CAACG,IAAI,CAACI,KAAK,CAAC,CAAC;EAC9C,CAAC;EACDC,QAAQA,CAACC,OAAO,EAAEC,MAAM;IACtB,OAAOF,QAAQ,CAACR,OAAO,CAACG,IAAI,CAACM,OAAO,CAAC,EAAEL,OAAO,CAACE,QAAQ,EAAEI,MAAM,CAAC;EAClE;CACD,CAAC;AAEJ,MAAMF,QAAQ,GAAGA,CACfG,IAAqB,EACrBL,QAA6E,EAC7EM,SAAiB,KAEjBd,MAAM,CAACe,OAAO,CAAC,MAAK;EAClB,IAAIC,KAAK,GAAG,CAAC;EACb,IAAIC,OAAO,GAAGJ,IAAI;EAClB,IAAIK,QAAQ,GAAyBpB,KAAK,CAACqB,KAAK,EAAE;EAClD,MAAMC,IAAI,GAA4CpB,MAAM,CAACe,OAAO,CAAC,MAAK;IACxE,MAAMM,CAAC,GAAGvB,KAAK,CAACwB,IAAI,CAACL,OAAO,CAAC;IAC7B,IAAIhB,MAAM,CAACsB,MAAM,CAACF,CAAC,CAAC,EAAE;MACpB,OAAOrB,MAAM,CAACwB,OAAO,CAACtB,OAAO,CAACG,IAAI,CAACa,QAAQ,CAAC,CAAC;IAC/C;IACA,MAAMO,IAAI,GAAGJ,CAAC,CAACK,KAAK;IACpBT,OAAO,GAAGnB,KAAK,CAAC6B,SAAS,CAACV,OAAO,EAAE,CAAC,CAAC;IACrC,OAAOjB,MAAM,CAAC4B,OAAO,CAACpB,QAAQ,CAACV,KAAK,CAACS,EAAE,CAACkB,IAAI,CAAC,CAAC,EAAGb,MAAM,IAAI;MACzDI,KAAK,IAAIJ,MAAM,CAACiB,MAAM;MACtB,IAAIb,KAAK,GAAGF,SAAS,EAAE;QACrB,OAAOd,MAAM,CAACwB,OAAO,CAACtB,OAAO,CAACG,IAAI,CAACa,QAAQ,CAAC,CAAC;MAC/C;MACAA,QAAQ,GAAGpB,KAAK,CAACgC,OAAO,CAACZ,QAAQ,EAAEO,IAAI,CAAC;MACxC,OAAOL,IAAI;IACb,CAAC,CAAC;EACJ,CAAC,CAAC;EACF,OAAOA,IAAI;AACb,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*/
|
|
4
|
+
export * as AiChat from "./AiChat.js";
|
|
5
|
+
/**
|
|
6
|
+
* @since 1.0.0
|
|
7
|
+
*/
|
|
8
|
+
export * as AiError from "./AiError.js";
|
|
9
|
+
/**
|
|
10
|
+
* @since 1.0.0
|
|
11
|
+
*/
|
|
12
|
+
export * as AiInput from "./AiInput.js";
|
|
13
|
+
/**
|
|
14
|
+
* @since 1.0.0
|
|
15
|
+
*/
|
|
16
|
+
export * as AiResponse from "./AiResponse.js";
|
|
17
|
+
/**
|
|
18
|
+
* @since 1.0.0
|
|
19
|
+
*/
|
|
20
|
+
export * as AiRole from "./AiRole.js";
|
|
21
|
+
/**
|
|
22
|
+
* @since 1.0.0
|
|
23
|
+
*/
|
|
24
|
+
export * as AiToolkit from "./AiToolkit.js";
|
|
25
|
+
/**
|
|
26
|
+
* @since 1.0.0
|
|
27
|
+
*/
|
|
28
|
+
export * as Completions from "./Completions.js";
|
|
29
|
+
/**
|
|
30
|
+
* @since 1.0.0
|
|
31
|
+
*/
|
|
32
|
+
export * as Tokenizer from "./Tokenizer.js";
|
|
33
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["AiChat","AiError","AiInput","AiResponse","AiRole","AiToolkit","Completions","Tokenizer"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,MAAM,MAAM,aAAa;AAErC;;;AAGA,OAAO,KAAKC,OAAO,MAAM,cAAc;AAEvC;;;AAGA,OAAO,KAAKC,OAAO,MAAM,cAAc;AAEvC;;;AAGA,OAAO,KAAKC,UAAU,MAAM,iBAAiB;AAE7C;;;AAGA,OAAO,KAAKC,MAAM,MAAM,aAAa;AAErC;;;AAGA,OAAO,KAAKC,SAAS,MAAM,gBAAgB;AAE3C;;;AAGA,OAAO,KAAKC,WAAW,MAAM,kBAAkB;AAE/C;;;AAGA,OAAO,KAAKC,SAAS,MAAM,gBAAgB","ignoreList":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@effect/ai",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Effect modules for working with AI apis",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/Effect-TS/effect.git",
|
|
9
|
+
"directory": "packages/ai/ai"
|
|
10
|
+
},
|
|
11
|
+
"sideEffects": [],
|
|
12
|
+
"dependencies": {},
|
|
13
|
+
"peerDependencies": {
|
|
14
|
+
"@effect/platform": "^0.68.2",
|
|
15
|
+
"@effect/schema": "^0.75.3",
|
|
16
|
+
"effect": "^3.9.1"
|
|
17
|
+
},
|
|
18
|
+
"publishConfig": {
|
|
19
|
+
"provenance": true
|
|
20
|
+
},
|
|
21
|
+
"main": "./dist/cjs/index.js",
|
|
22
|
+
"module": "./dist/esm/index.js",
|
|
23
|
+
"types": "./dist/dts/index.d.ts",
|
|
24
|
+
"exports": {
|
|
25
|
+
"./package.json": "./package.json",
|
|
26
|
+
".": {
|
|
27
|
+
"types": "./dist/dts/index.d.ts",
|
|
28
|
+
"import": "./dist/esm/index.js",
|
|
29
|
+
"default": "./dist/cjs/index.js"
|
|
30
|
+
},
|
|
31
|
+
"./AiChat": {
|
|
32
|
+
"types": "./dist/dts/AiChat.d.ts",
|
|
33
|
+
"import": "./dist/esm/AiChat.js",
|
|
34
|
+
"default": "./dist/cjs/AiChat.js"
|
|
35
|
+
},
|
|
36
|
+
"./AiError": {
|
|
37
|
+
"types": "./dist/dts/AiError.d.ts",
|
|
38
|
+
"import": "./dist/esm/AiError.js",
|
|
39
|
+
"default": "./dist/cjs/AiError.js"
|
|
40
|
+
},
|
|
41
|
+
"./AiInput": {
|
|
42
|
+
"types": "./dist/dts/AiInput.d.ts",
|
|
43
|
+
"import": "./dist/esm/AiInput.js",
|
|
44
|
+
"default": "./dist/cjs/AiInput.js"
|
|
45
|
+
},
|
|
46
|
+
"./AiResponse": {
|
|
47
|
+
"types": "./dist/dts/AiResponse.d.ts",
|
|
48
|
+
"import": "./dist/esm/AiResponse.js",
|
|
49
|
+
"default": "./dist/cjs/AiResponse.js"
|
|
50
|
+
},
|
|
51
|
+
"./AiRole": {
|
|
52
|
+
"types": "./dist/dts/AiRole.d.ts",
|
|
53
|
+
"import": "./dist/esm/AiRole.js",
|
|
54
|
+
"default": "./dist/cjs/AiRole.js"
|
|
55
|
+
},
|
|
56
|
+
"./AiToolkit": {
|
|
57
|
+
"types": "./dist/dts/AiToolkit.d.ts",
|
|
58
|
+
"import": "./dist/esm/AiToolkit.js",
|
|
59
|
+
"default": "./dist/cjs/AiToolkit.js"
|
|
60
|
+
},
|
|
61
|
+
"./Completions": {
|
|
62
|
+
"types": "./dist/dts/Completions.d.ts",
|
|
63
|
+
"import": "./dist/esm/Completions.js",
|
|
64
|
+
"default": "./dist/cjs/Completions.js"
|
|
65
|
+
},
|
|
66
|
+
"./Tokenizer": {
|
|
67
|
+
"types": "./dist/dts/Tokenizer.d.ts",
|
|
68
|
+
"import": "./dist/esm/Tokenizer.js",
|
|
69
|
+
"default": "./dist/cjs/Tokenizer.js"
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"typesVersions": {
|
|
73
|
+
"*": {
|
|
74
|
+
"AiChat": [
|
|
75
|
+
"./dist/dts/AiChat.d.ts"
|
|
76
|
+
],
|
|
77
|
+
"AiError": [
|
|
78
|
+
"./dist/dts/AiError.d.ts"
|
|
79
|
+
],
|
|
80
|
+
"AiInput": [
|
|
81
|
+
"./dist/dts/AiInput.d.ts"
|
|
82
|
+
],
|
|
83
|
+
"AiResponse": [
|
|
84
|
+
"./dist/dts/AiResponse.d.ts"
|
|
85
|
+
],
|
|
86
|
+
"AiRole": [
|
|
87
|
+
"./dist/dts/AiRole.d.ts"
|
|
88
|
+
],
|
|
89
|
+
"AiToolkit": [
|
|
90
|
+
"./dist/dts/AiToolkit.d.ts"
|
|
91
|
+
],
|
|
92
|
+
"Completions": [
|
|
93
|
+
"./dist/dts/Completions.d.ts"
|
|
94
|
+
],
|
|
95
|
+
"Tokenizer": [
|
|
96
|
+
"./dist/dts/Tokenizer.d.ts"
|
|
97
|
+
]
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|