@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.
Files changed (75) hide show
  1. package/AiChat/package.json +6 -0
  2. package/AiError/package.json +6 -0
  3. package/AiInput/package.json +6 -0
  4. package/AiResponse/package.json +6 -0
  5. package/AiRole/package.json +6 -0
  6. package/AiToolkit/package.json +6 -0
  7. package/Completions/package.json +6 -0
  8. package/LICENSE +21 -0
  9. package/README.md +1 -0
  10. package/Tokenizer/package.json +6 -0
  11. package/dist/cjs/AiChat.js +151 -0
  12. package/dist/cjs/AiChat.js.map +1 -0
  13. package/dist/cjs/AiError.js +41 -0
  14. package/dist/cjs/AiError.js.map +1 -0
  15. package/dist/cjs/AiInput.js +349 -0
  16. package/dist/cjs/AiInput.js.map +1 -0
  17. package/dist/cjs/AiResponse.js +295 -0
  18. package/dist/cjs/AiResponse.js.map +1 -0
  19. package/dist/cjs/AiRole.js +106 -0
  20. package/dist/cjs/AiRole.js.map +1 -0
  21. package/dist/cjs/AiToolkit.js +132 -0
  22. package/dist/cjs/AiToolkit.js.map +1 -0
  23. package/dist/cjs/Completions.js +217 -0
  24. package/dist/cjs/Completions.js.map +1 -0
  25. package/dist/cjs/Tokenizer.js +59 -0
  26. package/dist/cjs/Tokenizer.js.map +1 -0
  27. package/dist/cjs/index.js +25 -0
  28. package/dist/cjs/index.js.map +1 -0
  29. package/dist/dts/AiChat.d.ts +73 -0
  30. package/dist/dts/AiChat.d.ts.map +1 -0
  31. package/dist/dts/AiError.d.ts +38 -0
  32. package/dist/dts/AiError.d.ts.map +1 -0
  33. package/dist/dts/AiInput.d.ts +283 -0
  34. package/dist/dts/AiInput.d.ts.map +1 -0
  35. package/dist/dts/AiResponse.d.ts +235 -0
  36. package/dist/dts/AiResponse.d.ts.map +1 -0
  37. package/dist/dts/AiRole.d.ts +111 -0
  38. package/dist/dts/AiRole.d.ts.map +1 -0
  39. package/dist/dts/AiToolkit.d.ts +158 -0
  40. package/dist/dts/AiToolkit.d.ts.map +1 -0
  41. package/dist/dts/Completions.d.ts +104 -0
  42. package/dist/dts/Completions.d.ts.map +1 -0
  43. package/dist/dts/Tokenizer.d.ts +34 -0
  44. package/dist/dts/Tokenizer.d.ts.map +1 -0
  45. package/dist/dts/index.d.ts +33 -0
  46. package/dist/dts/index.d.ts.map +1 -0
  47. package/dist/esm/AiChat.js +139 -0
  48. package/dist/esm/AiChat.js.map +1 -0
  49. package/dist/esm/AiError.js +31 -0
  50. package/dist/esm/AiError.js.map +1 -0
  51. package/dist/esm/AiInput.js +332 -0
  52. package/dist/esm/AiInput.js.map +1 -0
  53. package/dist/esm/AiResponse.js +281 -0
  54. package/dist/esm/AiResponse.js.map +1 -0
  55. package/dist/esm/AiRole.js +93 -0
  56. package/dist/esm/AiRole.js.map +1 -0
  57. package/dist/esm/AiToolkit.js +123 -0
  58. package/dist/esm/AiToolkit.js.map +1 -0
  59. package/dist/esm/Completions.js +206 -0
  60. package/dist/esm/Completions.js.map +1 -0
  61. package/dist/esm/Tokenizer.js +48 -0
  62. package/dist/esm/Tokenizer.js.map +1 -0
  63. package/dist/esm/index.js +33 -0
  64. package/dist/esm/index.js.map +1 -0
  65. package/dist/esm/package.json +4 -0
  66. package/package.json +100 -0
  67. package/src/AiChat.ts +274 -0
  68. package/src/AiError.ts +38 -0
  69. package/src/AiInput.ts +456 -0
  70. package/src/AiResponse.ts +343 -0
  71. package/src/AiRole.ts +122 -0
  72. package/src/AiToolkit.ts +314 -0
  73. package/src/Completions.ts +354 -0
  74. package/src/Tokenizer.ts +78 -0
  75. 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":"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","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":[]}
@@ -0,0 +1,4 @@
1
+ {
2
+ "type": "module",
3
+ "sideEffects": []
4
+ }
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
+ }