liminal 0.5.17 → 0.7.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 (218) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/Context.ts +8 -47
  3. package/L.ts +4 -0
  4. package/assistant.ts +52 -0
  5. package/dist/Context.d.ts +13 -30
  6. package/dist/Context.js +9 -22
  7. package/dist/Context.js.map +1 -1
  8. package/dist/L.d.ts +4 -0
  9. package/dist/L.js +5 -0
  10. package/dist/L.js.map +1 -0
  11. package/dist/assistant.d.ts +9 -0
  12. package/dist/assistant.js +44 -0
  13. package/dist/assistant.js.map +1 -0
  14. package/dist/index.d.ts +2 -14
  15. package/dist/index.js +2 -14
  16. package/dist/index.js.map +1 -1
  17. package/dist/messages.d.ts +4 -0
  18. package/dist/messages.js +5 -0
  19. package/dist/messages.js.map +1 -0
  20. package/dist/set.d.ts +3 -0
  21. package/dist/set.js +11 -0
  22. package/dist/set.js.map +1 -0
  23. package/dist/strand.d.ts +15 -0
  24. package/dist/strand.js +19 -0
  25. package/dist/strand.js.map +1 -0
  26. package/dist/todo.test.js +3 -0
  27. package/dist/todo.test.js.map +1 -0
  28. package/dist/tsconfig.tsbuildinfo +1 -1
  29. package/dist/user.d.ts +6 -0
  30. package/dist/user.js +16 -0
  31. package/dist/user.js.map +1 -0
  32. package/dist/util/JSONValue.d.ts +0 -3
  33. package/dist/util/JSONValue.js +1 -31
  34. package/dist/util/JSONValue.js.map +1 -1
  35. package/index.ts +2 -14
  36. package/messages.ts +6 -0
  37. package/package.json +4 -3
  38. package/set.ts +11 -0
  39. package/strand.ts +38 -0
  40. package/todo.test.ts +3 -0
  41. package/user.ts +22 -0
  42. package/util/JSONValue.ts +0 -30
  43. package/Adapter.ts +0 -27
  44. package/AdapterRegistry.ts +0 -78
  45. package/Config.ts +0 -13
  46. package/Definition.ts +0 -48
  47. package/EventBase.ts +0 -23
  48. package/Handler.ts +0 -4
  49. package/L/L.ts +0 -24
  50. package/L/all.ts +0 -39
  51. package/L/assistant.ts +0 -28
  52. package/L/catch.ts +0 -38
  53. package/L/continuation.ts +0 -14
  54. package/L/emit.ts +0 -16
  55. package/L/focus.ts +0 -17
  56. package/L/infer.ts +0 -34
  57. package/L/message.ts +0 -16
  58. package/L/reflect.ts +0 -13
  59. package/L/run.ts +0 -29
  60. package/L/schema/_schema_common.ts +0 -30
  61. package/L/schema/anyOf.ts +0 -10
  62. package/L/schema/array.ts +0 -13
  63. package/L/schema/boolean.ts +0 -8
  64. package/L/schema/const.ts +0 -18
  65. package/L/schema/enum.ts +0 -18
  66. package/L/schema/integer.ts +0 -6
  67. package/L/schema/null.ts +0 -8
  68. package/L/schema/number.ts +0 -8
  69. package/L/schema/object.ts +0 -21
  70. package/L/schema/string.ts +0 -11
  71. package/L/strand.ts +0 -22
  72. package/L/stream.ts +0 -16
  73. package/L/system.ts +0 -19
  74. package/L/user.ts +0 -19
  75. package/LEvent.ts +0 -61
  76. package/LiminalAssertionError.ts +0 -19
  77. package/Message.ts +0 -16
  78. package/Rune.test.ts +0 -5
  79. package/Rune.ts +0 -60
  80. package/Schema.ts +0 -185
  81. package/Strand.ts +0 -284
  82. package/Tool.ts +0 -26
  83. package/TypeAdapter.ts +0 -3
  84. package/dist/Adapter.d.ts +0 -18
  85. package/dist/Adapter.js +0 -13
  86. package/dist/Adapter.js.map +0 -1
  87. package/dist/AdapterRegistry.d.ts +0 -27
  88. package/dist/AdapterRegistry.js +0 -62
  89. package/dist/AdapterRegistry.js.map +0 -1
  90. package/dist/Config.d.ts +0 -12
  91. package/dist/Config.js +0 -2
  92. package/dist/Config.js.map +0 -1
  93. package/dist/Definition.d.ts +0 -24
  94. package/dist/Definition.js +0 -29
  95. package/dist/Definition.js.map +0 -1
  96. package/dist/EventBase.d.ts +0 -11
  97. package/dist/EventBase.js +0 -16
  98. package/dist/EventBase.js.map +0 -1
  99. package/dist/Handler.d.ts +0 -3
  100. package/dist/Handler.js +0 -2
  101. package/dist/Handler.js.map +0 -1
  102. package/dist/L/L.d.ts +0 -24
  103. package/dist/L/L.js +0 -25
  104. package/dist/L/L.js.map +0 -1
  105. package/dist/L/all.d.ts +0 -14
  106. package/dist/L/all.js +0 -20
  107. package/dist/L/all.js.map +0 -1
  108. package/dist/L/assistant.d.ts +0 -11
  109. package/dist/L/assistant.js +0 -15
  110. package/dist/L/assistant.js.map +0 -1
  111. package/dist/L/catch.d.ts +0 -16
  112. package/dist/L/catch.js +0 -25
  113. package/dist/L/catch.js.map +0 -1
  114. package/dist/L/continuation.d.ts +0 -4
  115. package/dist/L/continuation.js +0 -13
  116. package/dist/L/continuation.js.map +0 -1
  117. package/dist/L/emit.d.ts +0 -7
  118. package/dist/L/emit.js +0 -15
  119. package/dist/L/emit.js.map +0 -1
  120. package/dist/L/focus.d.ts +0 -8
  121. package/dist/L/focus.js +0 -14
  122. package/dist/L/focus.js.map +0 -1
  123. package/dist/L/infer.d.ts +0 -8
  124. package/dist/L/infer.js +0 -30
  125. package/dist/L/infer.js.map +0 -1
  126. package/dist/L/message.d.ts +0 -8
  127. package/dist/L/message.js +0 -14
  128. package/dist/L/message.js.map +0 -1
  129. package/dist/L/reflect.d.ts +0 -5
  130. package/dist/L/reflect.js +0 -11
  131. package/dist/L/reflect.js.map +0 -1
  132. package/dist/L/run.d.ts +0 -14
  133. package/dist/L/run.js +0 -16
  134. package/dist/L/run.js.map +0 -1
  135. package/dist/L/schema/_schema_common.d.ts +0 -6
  136. package/dist/L/schema/_schema_common.js +0 -20
  137. package/dist/L/schema/_schema_common.js.map +0 -1
  138. package/dist/L/schema/anyOf.d.ts +0 -5
  139. package/dist/L/schema/anyOf.js +0 -5
  140. package/dist/L/schema/anyOf.js.map +0 -1
  141. package/dist/L/schema/array.d.ts +0 -5
  142. package/dist/L/schema/array.js +0 -8
  143. package/dist/L/schema/array.js.map +0 -1
  144. package/dist/L/schema/boolean.d.ts +0 -6
  145. package/dist/L/schema/boolean.js +0 -4
  146. package/dist/L/schema/boolean.js.map +0 -1
  147. package/dist/L/schema/const.d.ts +0 -8
  148. package/dist/L/schema/const.js +0 -10
  149. package/dist/L/schema/const.js.map +0 -1
  150. package/dist/L/schema/enum.d.ts +0 -8
  151. package/dist/L/schema/enum.js +0 -10
  152. package/dist/L/schema/enum.js.map +0 -1
  153. package/dist/L/schema/integer.d.ts +0 -5
  154. package/dist/L/schema/integer.js +0 -3
  155. package/dist/L/schema/integer.js.map +0 -1
  156. package/dist/L/schema/null.d.ts +0 -6
  157. package/dist/L/schema/null.js +0 -4
  158. package/dist/L/schema/null.js.map +0 -1
  159. package/dist/L/schema/number.d.ts +0 -6
  160. package/dist/L/schema/number.js +0 -4
  161. package/dist/L/schema/number.js.map +0 -1
  162. package/dist/L/schema/object.d.ts +0 -9
  163. package/dist/L/schema/object.js +0 -12
  164. package/dist/L/schema/object.js.map +0 -1
  165. package/dist/L/schema/string.d.ts +0 -8
  166. package/dist/L/schema/string.js +0 -4
  167. package/dist/L/schema/string.js.map +0 -1
  168. package/dist/L/strand.d.ts +0 -9
  169. package/dist/L/strand.js +0 -16
  170. package/dist/L/strand.js.map +0 -1
  171. package/dist/L/stream.d.ts +0 -4
  172. package/dist/L/stream.js +0 -15
  173. package/dist/L/stream.js.map +0 -1
  174. package/dist/L/system.d.ts +0 -4
  175. package/dist/L/system.js +0 -9
  176. package/dist/L/system.js.map +0 -1
  177. package/dist/L/user.d.ts +0 -4
  178. package/dist/L/user.js +0 -9
  179. package/dist/L/user.js.map +0 -1
  180. package/dist/LEvent.d.ts +0 -68
  181. package/dist/LEvent.js +0 -50
  182. package/dist/LEvent.js.map +0 -1
  183. package/dist/LiminalAssertionError.d.ts +0 -8
  184. package/dist/LiminalAssertionError.js +0 -20
  185. package/dist/LiminalAssertionError.js.map +0 -1
  186. package/dist/Message.d.ts +0 -14
  187. package/dist/Message.js +0 -2
  188. package/dist/Message.js.map +0 -1
  189. package/dist/Rune.d.ts +0 -46
  190. package/dist/Rune.js +0 -11
  191. package/dist/Rune.js.map +0 -1
  192. package/dist/Rune.test.js +0 -5
  193. package/dist/Rune.test.js.map +0 -1
  194. package/dist/Schema.d.ts +0 -46
  195. package/dist/Schema.js +0 -130
  196. package/dist/Schema.js.map +0 -1
  197. package/dist/Strand.d.ts +0 -81
  198. package/dist/Strand.js +0 -200
  199. package/dist/Strand.js.map +0 -1
  200. package/dist/Tool.d.ts +0 -10
  201. package/dist/Tool.js +0 -19
  202. package/dist/Tool.js.map +0 -1
  203. package/dist/TypeAdapter.d.ts +0 -1
  204. package/dist/TypeAdapter.js +0 -3
  205. package/dist/TypeAdapter.js.map +0 -1
  206. package/dist/errors.d.ts +0 -9
  207. package/dist/errors.js +0 -11
  208. package/dist/errors.js.map +0 -1
  209. package/dist/util/EnsureNarrow.d.ts +0 -1
  210. package/dist/util/EnsureNarrow.js +0 -2
  211. package/dist/util/EnsureNarrow.js.map +0 -1
  212. package/dist/util/attachCustomInspect.d.ts +0 -1
  213. package/dist/util/attachCustomInspect.js +0 -11
  214. package/dist/util/attachCustomInspect.js.map +0 -1
  215. package/errors.ts +0 -12
  216. package/util/EnsureNarrow.ts +0 -1
  217. package/util/attachCustomInspect.ts +0 -14
  218. /package/dist/{Rune.test.d.ts → todo.test.d.ts} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # liminal
2
2
 
3
+ ## 0.7.0
4
+
5
+ ### Minor Changes
6
+
7
+ - d6fe173: Remove approach to passing handlers to strands.
8
+
9
+ ## 0.6.0
10
+
11
+ ### Minor Changes
12
+
13
+ - e88b9af: Rewrite using Effect-TS.
14
+
3
15
  ## 0.5.17
4
16
 
5
17
  ### Patch Changes
package/Context.ts CHANGED
@@ -1,49 +1,10 @@
1
- import { AdapterRegistry } from "./AdapterRegistry.ts"
2
- import type { Handler } from "./Handler.ts"
3
- import type { Message } from "./Message.ts"
4
- import type { Tool } from "./Tool.ts"
1
+ import * as AiInput from "@effect/ai/AiInput"
2
+ import * as AiToolkit from "@effect/ai/AiToolkit"
3
+ import * as Context from "effect/Context"
4
+ import * as Ref from "effect/Ref"
5
5
 
6
- /**
7
- * Context represents the execution environment for a Strand.
8
- *
9
- * It holds all the stateful components needed during strand execution:
10
- * - Message history.
11
- * - Event handler for processing events.
12
- * - Model registry for tracking available language models.
13
- * - Available tools for model-driven function calling.
14
- */
15
- export interface Context {
16
- /** Event handler for processing events during strand execution. */
17
- readonly handler: Handler | undefined
18
- /** Registry of available models for inference. */
19
- readonly adapters: AdapterRegistry
20
- /** Accumulated message history. */
21
- readonly messages: Array<Message>
22
- /** Set of tools available to the models. */
23
- readonly tools: Set<Tool>
24
- /** Creates a copy of the current `Context` for child strands. */
25
- clone(): Context
26
- }
6
+ export class MessagesRef extends Context.Tag("liminal/Messages")<MessagesRef, Ref.Ref<Array<AiInput.Message>>>() {}
27
7
 
28
- /**
29
- * Factory function to create a new Context.
30
- * @param context Optional base context from which to initialize.
31
- * @returns A newly created Context.
32
- */
33
- export function Context(context?: Omit<Context, "clone">): Context {
34
- return {
35
- handler: context?.handler,
36
- adapters: context?.adapters?.clone() ?? new AdapterRegistry(),
37
- messages: [...(context?.messages ?? [])],
38
- tools: new Set(context?.tools),
39
- clone(): Context {
40
- return {
41
- handler: this.handler,
42
- adapters: this.adapters.clone(),
43
- messages: [...this.messages],
44
- tools: new Set(this.tools),
45
- clone: this.clone,
46
- }
47
- },
48
- }
49
- }
8
+ export class System extends Context.Tag("liminal/System")<System, string | undefined>() {}
9
+
10
+ export class Toolkit extends Context.Tag("liminal/Tools")<Toolkit, AiToolkit.AiToolkit<any> | undefined>() {}
package/L.ts ADDED
@@ -0,0 +1,4 @@
1
+ export * from "./assistant.ts"
2
+ export * from "./messages.ts"
3
+ export * from "./set.ts"
4
+ export * from "./user.ts"
package/assistant.ts ADDED
@@ -0,0 +1,52 @@
1
+ import type { AiError } from "@effect/ai/AiError"
2
+ import * as AiInput from "@effect/ai/AiInput"
3
+ import * as AiLanguageModel from "@effect/ai/AiLanguageModel"
4
+ import * as Effect from "effect/Effect"
5
+ import * as Option from "effect/Option"
6
+ import * as Ref from "effect/Ref"
7
+ import type * as Schema from "effect/Schema"
8
+ import { MessagesRef, System, Toolkit } from "./Context.ts"
9
+
10
+ export const assistant: {
11
+ (): Effect.Effect<string, AiError, AiLanguageModel.AiLanguageModel | MessagesRef | System>
12
+ <O, I>(
13
+ schema: Schema.Schema<O, I, never>,
14
+ ): Effect.Effect<O, AiError, AiLanguageModel.AiLanguageModel | MessagesRef | System>
15
+ } = Effect.fn(function*(schema?: Schema.Schema<any>) {
16
+ const model = yield* AiLanguageModel.AiLanguageModel
17
+ const messagesRef = yield* MessagesRef
18
+ const toolkitOption = yield* Effect.serviceOption(Toolkit)
19
+ const prompt = yield* Ref.get(messagesRef)
20
+ const system = yield* System
21
+ if (schema) {
22
+ const response = yield* model.generateObject({
23
+ system,
24
+ schema,
25
+ prompt,
26
+ })
27
+ const { value, text } = response
28
+ yield* appendMessage(text)
29
+ return value
30
+ }
31
+ const response = yield* model.generateText({
32
+ system,
33
+ prompt,
34
+ ...Option.isSome(toolkitOption)
35
+ ? toolkitOption.value
36
+ ? { toolkit: toolkitOption.value }
37
+ : {}
38
+ : {},
39
+ })
40
+ const { text } = response
41
+ yield* appendMessage(text)
42
+ return text
43
+
44
+ function* appendMessage(text: string) {
45
+ yield* Ref.update(messagesRef, (prev) => [
46
+ ...prev,
47
+ new AiInput.AssistantMessage({
48
+ parts: [new AiInput.TextPart({ text })],
49
+ }),
50
+ ])
51
+ }
52
+ })
package/dist/Context.d.ts CHANGED
@@ -1,31 +1,14 @@
1
- import { AdapterRegistry } from "./AdapterRegistry.ts";
2
- import type { Handler } from "./Handler.ts";
3
- import type { Message } from "./Message.ts";
4
- import type { Tool } from "./Tool.ts";
5
- /**
6
- * Context represents the execution environment for a Strand.
7
- *
8
- * It holds all the stateful components needed during strand execution:
9
- * - Message history.
10
- * - Event handler for processing events.
11
- * - Model registry for tracking available language models.
12
- * - Available tools for model-driven function calling.
13
- */
14
- export interface Context {
15
- /** Event handler for processing events during strand execution. */
16
- readonly handler: Handler | undefined;
17
- /** Registry of available models for inference. */
18
- readonly adapters: AdapterRegistry;
19
- /** Accumulated message history. */
20
- readonly messages: Array<Message>;
21
- /** Set of tools available to the models. */
22
- readonly tools: Set<Tool>;
23
- /** Creates a copy of the current `Context` for child strands. */
24
- clone(): Context;
1
+ import * as AiInput from "@effect/ai/AiInput";
2
+ import * as AiToolkit from "@effect/ai/AiToolkit";
3
+ import * as Context from "effect/Context";
4
+ import * as Ref from "effect/Ref";
5
+ declare const MessagesRef_base: Context.TagClass<MessagesRef, "liminal/Messages", Ref.Ref<(AiInput.UserMessage | AiInput.AssistantMessage | AiInput.ToolMessage)[]>>;
6
+ export declare class MessagesRef extends MessagesRef_base {
25
7
  }
26
- /**
27
- * Factory function to create a new Context.
28
- * @param context Optional base context from which to initialize.
29
- * @returns A newly created Context.
30
- */
31
- export declare function Context(context?: Omit<Context, "clone">): Context;
8
+ declare const System_base: Context.TagClass<System, "liminal/System", string | undefined>;
9
+ export declare class System extends System_base {
10
+ }
11
+ declare const Toolkit_base: Context.TagClass<Toolkit, "liminal/Tools", AiToolkit.AiToolkit<any> | undefined>;
12
+ export declare class Toolkit extends Toolkit_base {
13
+ }
14
+ export {};
package/dist/Context.js CHANGED
@@ -1,24 +1,11 @@
1
- import { AdapterRegistry } from "./AdapterRegistry.js";
2
- /**
3
- * Factory function to create a new Context.
4
- * @param context Optional base context from which to initialize.
5
- * @returns A newly created Context.
6
- */
7
- export function Context(context) {
8
- return {
9
- handler: context?.handler,
10
- adapters: context?.adapters?.clone() ?? new AdapterRegistry(),
11
- messages: [...(context?.messages ?? [])],
12
- tools: new Set(context?.tools),
13
- clone() {
14
- return {
15
- handler: this.handler,
16
- adapters: this.adapters.clone(),
17
- messages: [...this.messages],
18
- tools: new Set(this.tools),
19
- clone: this.clone,
20
- };
21
- },
22
- };
1
+ import * as AiInput from "@effect/ai/AiInput";
2
+ import * as AiToolkit from "@effect/ai/AiToolkit";
3
+ import * as Context from "effect/Context";
4
+ import * as Ref from "effect/Ref";
5
+ export class MessagesRef extends Context.Tag("liminal/Messages")() {
6
+ }
7
+ export class System extends Context.Tag("liminal/System")() {
8
+ }
9
+ export class Toolkit extends Context.Tag("liminal/Tools")() {
23
10
  }
24
11
  //# sourceMappingURL=Context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Context.js","sourceRoot":"","sources":["../Context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AA2BtD;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,OAAgC;IACtD,OAAO;QACL,OAAO,EAAE,OAAO,EAAE,OAAO;QACzB,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,IAAI,eAAe,EAAE;QAC7D,QAAQ,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC;QACxC,KAAK,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;QAC9B,KAAK;YACH,OAAO;gBACL,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;gBAC/B,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAC5B,KAAK,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC1B,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"Context.js","sourceRoot":"","sources":["../Context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAA;AACjD,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,GAAG,MAAM,YAAY,CAAA;AAEjC,MAAM,OAAO,WAAY,SAAQ,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAgD;CAAG;AAEnH,MAAM,OAAO,MAAO,SAAQ,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAA8B;CAAG;AAE1F,MAAM,OAAO,OAAQ,SAAQ,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,EAAiD;CAAG"}
package/dist/L.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export * from "./assistant.ts";
2
+ export * from "./messages.ts";
3
+ export * from "./set.ts";
4
+ export * from "./user.ts";
package/dist/L.js ADDED
@@ -0,0 +1,5 @@
1
+ export * from "./assistant.js";
2
+ export * from "./messages.js";
3
+ export * from "./set.js";
4
+ export * from "./user.js";
5
+ //# sourceMappingURL=L.js.map
package/dist/L.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"L.js","sourceRoot":"","sources":["../L.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA"}
@@ -0,0 +1,9 @@
1
+ import type { AiError } from "@effect/ai/AiError";
2
+ import * as AiLanguageModel from "@effect/ai/AiLanguageModel";
3
+ import * as Effect from "effect/Effect";
4
+ import type * as Schema from "effect/Schema";
5
+ import { MessagesRef, System } from "./Context.ts";
6
+ export declare const assistant: {
7
+ (): Effect.Effect<string, AiError, AiLanguageModel.AiLanguageModel | MessagesRef | System>;
8
+ <O, I>(schema: Schema.Schema<O, I, never>): Effect.Effect<O, AiError, AiLanguageModel.AiLanguageModel | MessagesRef | System>;
9
+ };
@@ -0,0 +1,44 @@
1
+ import * as AiInput from "@effect/ai/AiInput";
2
+ import * as AiLanguageModel from "@effect/ai/AiLanguageModel";
3
+ import * as Effect from "effect/Effect";
4
+ import * as Option from "effect/Option";
5
+ import * as Ref from "effect/Ref";
6
+ import { MessagesRef, System, Toolkit } from "./Context.js";
7
+ export const assistant = Effect.fn(function* (schema) {
8
+ const model = yield* AiLanguageModel.AiLanguageModel;
9
+ const messagesRef = yield* MessagesRef;
10
+ const toolkitOption = yield* Effect.serviceOption(Toolkit);
11
+ const prompt = yield* Ref.get(messagesRef);
12
+ const system = yield* System;
13
+ if (schema) {
14
+ const response = yield* model.generateObject({
15
+ system,
16
+ schema,
17
+ prompt,
18
+ });
19
+ const { value, text } = response;
20
+ yield* appendMessage(text);
21
+ return value;
22
+ }
23
+ const response = yield* model.generateText({
24
+ system,
25
+ prompt,
26
+ ...Option.isSome(toolkitOption)
27
+ ? toolkitOption.value
28
+ ? { toolkit: toolkitOption.value }
29
+ : {}
30
+ : {},
31
+ });
32
+ const { text } = response;
33
+ yield* appendMessage(text);
34
+ return text;
35
+ function* appendMessage(text) {
36
+ yield* Ref.update(messagesRef, (prev) => [
37
+ ...prev,
38
+ new AiInput.AssistantMessage({
39
+ parts: [new AiInput.TextPart({ text })],
40
+ }),
41
+ ]);
42
+ }
43
+ });
44
+ //# sourceMappingURL=assistant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assistant.js","sourceRoot":"","sources":["../assistant.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,OAAO,KAAK,eAAe,MAAM,4BAA4B,CAAA;AAC7D,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,GAAG,MAAM,YAAY,CAAA;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAE3D,MAAM,CAAC,MAAM,SAAS,GAKlB,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAC,MAA2B;IACjD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,eAAe,CAAA;IACpD,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,WAAW,CAAA;IACtC,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;IAC1D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAA;IAC5B,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;YAC3C,MAAM;YACN,MAAM;YACN,MAAM;SACP,CAAC,CAAA;QACF,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAA;QAChC,KAAK,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;QAC1B,OAAO,KAAK,CAAA;IACd,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;QACzC,MAAM;QACN,MAAM;QACN,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;YAC7B,CAAC,CAAC,aAAa,CAAC,KAAK;gBACnB,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,KAAK,EAAE;gBAClC,CAAC,CAAC,EAAE;YACN,CAAC,CAAC,EAAE;KACP,CAAC,CAAA;IACF,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAA;IACzB,KAAK,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;IAC1B,OAAO,IAAI,CAAA;IAEX,QAAQ,CAAC,CAAC,aAAa,CAAC,IAAY;QAClC,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;YACvC,GAAG,IAAI;YACP,IAAI,OAAO,CAAC,gBAAgB,CAAC;gBAC3B,KAAK,EAAE,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;aACxC,CAAC;SACH,CAAC,CAAA;IACJ,CAAC;AACH,CAAC,CAAC,CAAA"}
package/dist/index.d.ts CHANGED
@@ -1,15 +1,3 @@
1
- export * from "./Adapter.ts";
2
- export * from "./AdapterRegistry.ts";
3
- export * from "./Config.ts";
4
1
  export * from "./Context.ts";
5
- export * from "./Definition.ts";
6
- export * from "./EventBase.ts";
7
- export * as L from "./L/L.ts";
8
- export * from "./LEvent.ts";
9
- export * from "./LiminalAssertionError.ts";
10
- export * from "./Message.ts";
11
- export * from "./Rune.ts";
12
- export * from "./Schema.ts";
13
- export * from "./Strand.ts";
14
- export * from "./Tool.ts";
15
- export * from "./TypeAdapter.ts";
2
+ export * as L from "./L.ts";
3
+ export * from "./strand.ts";
package/dist/index.js CHANGED
@@ -1,16 +1,4 @@
1
- export * from "./Adapter.js";
2
- export * from "./AdapterRegistry.js";
3
- export * from "./Config.js";
4
1
  export * from "./Context.js";
5
- export * from "./Definition.js";
6
- export * from "./EventBase.js";
7
- export * as L from "./L/L.js";
8
- export * from "./LEvent.js";
9
- export * from "./LiminalAssertionError.js";
10
- export * from "./Message.js";
11
- export * from "./Rune.js";
12
- export * from "./Schema.js";
13
- export * from "./Strand.js";
14
- export * from "./Tool.js";
15
- export * from "./TypeAdapter.js";
2
+ export * as L from "./L.js";
3
+ export * from "./strand.js";
16
4
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,sBAAsB,CAAA;AACpC,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,gBAAgB,CAAA;AAC9B,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,4BAA4B,CAAA;AAC1C,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAA;AAC3B,cAAc,aAAa,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { Message } from "@effect/ai/AiInput";
2
+ import * as Effect from "effect/Effect";
3
+ import { MessagesRef } from "./Context.ts";
4
+ export declare const messages: Effect.Effect<Array<Message>, never, MessagesRef>;
@@ -0,0 +1,5 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Ref from "effect/Ref";
3
+ import { MessagesRef } from "./Context.js";
4
+ export const messages = Effect.flatMap(MessagesRef, Ref.get);
5
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../messages.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,GAAG,MAAM,YAAY,CAAA;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE1C,MAAM,CAAC,MAAM,QAAQ,GAAsD,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,GAAG,CAAC,CAAA"}
package/dist/set.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ import * as Effect from "effect/Effect";
2
+ import { MessagesRef } from "./Context.ts";
3
+ export declare const set: (messages: Iterable<import("@effect/ai/AiInput").UserMessage | import("@effect/ai/AiInput").AssistantMessage | import("@effect/ai/AiInput").ToolMessage>) => Effect.Effect<(import("@effect/ai/AiInput").UserMessage | import("@effect/ai/AiInput").AssistantMessage | import("@effect/ai/AiInput").ToolMessage)[], never, MessagesRef>;
package/dist/set.js ADDED
@@ -0,0 +1,11 @@
1
+ import { Message } from "@effect/ai/AiInput";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Ref from "effect/Ref";
4
+ import { MessagesRef } from "./Context.js";
5
+ export const set = Effect.fn(function* (messages) {
6
+ const messagesRef = yield* MessagesRef;
7
+ const previous = yield* Ref.get(messagesRef);
8
+ yield* Ref.set(messagesRef, [...messages]);
9
+ return previous;
10
+ });
11
+ //# sourceMappingURL=set.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set.js","sourceRoot":"","sources":["../set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,GAAG,MAAM,YAAY,CAAA;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE1C,MAAM,CAAC,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAC,QAA2B;IAChE,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,WAAW,CAAA;IACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IAC5C,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAA;IAC1C,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAC,CAAA"}
@@ -0,0 +1,15 @@
1
+ import * as AiInput from "@effect/ai/AiInput";
2
+ import * as AiTool from "@effect/ai/AiTool";
3
+ import type * as AiToolkit from "@effect/ai/AiToolkit";
4
+ import * as Effect from "effect/Effect";
5
+ import { MessagesRef, System } from "./Context.ts";
6
+ export interface StrandOptions<in out Tool extends AiTool.Any> {
7
+ /** The system prompt. */
8
+ system?: string | undefined;
9
+ /** The initial list of AI input messages. */
10
+ messages?: Iterable<AiInput.Message> | undefined;
11
+ /** The tools to use for by strand. */
12
+ toolkit?: AiToolkit.AiToolkit<Tool> | undefined;
13
+ }
14
+ /** Create an isolated clone of the current conversation to provide for an effect. */
15
+ export declare const strand: <HE = never, T extends AiTool.Any = never>(options?: StrandOptions<T>) => <A, E, R>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E | HE, Exclude<R, MessagesRef | System> | T>;
package/dist/strand.js ADDED
@@ -0,0 +1,19 @@
1
+ import * as AiInput from "@effect/ai/AiInput";
2
+ import * as AiTool from "@effect/ai/AiTool";
3
+ import * as Effect from "effect/Effect";
4
+ import * as Option from "effect/Option";
5
+ import * as Ref from "effect/Ref";
6
+ import { MessagesRef, System, Toolkit } from "./Context.js";
7
+ /** Create an isolated clone of the current conversation to provide for an effect. */
8
+ export const strand = (options) => (effect) => Effect.gen(function* () {
9
+ const messagesRef = options?.messages
10
+ ? Ref.unsafeMake([...options.messages])
11
+ : yield* Option.match(yield* Effect.serviceOption(MessagesRef), {
12
+ *onSome(ref) {
13
+ return Ref.unsafeMake([...yield* Ref.get(ref)]);
14
+ },
15
+ onNone: () => Ref.make([]),
16
+ });
17
+ return yield* (effect.pipe(Effect.provideService(MessagesRef, messagesRef), Effect.provideService(System, options?.system), Effect.provideService(Toolkit, options?.toolkit)));
18
+ });
19
+ //# sourceMappingURL=strand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strand.js","sourceRoot":"","sources":["../strand.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAE3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,GAAG,MAAM,YAAY,CAAA;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAW3D,qFAAqF;AACrF,MAAM,CAAC,MAAM,MAAM,GAImD,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAC5F,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,WAAW,GAAG,OAAO,EAAE,QAAQ;QACnC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE;YAC9D,CAAC,MAAM,CAAC,GAAG;gBACT,OAAO,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YACjD,CAAC;YACD,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAA4B,CAAC;SACrD,CAAC,CAAA;IACJ,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CACxB,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,EAC/C,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,EAC9C,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CACjD,CAAC,CAAA;AACJ,CAAC,CAAU,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { it } from "vitest";
2
+ it("works", () => { });
3
+ //# sourceMappingURL=todo.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todo.test.js","sourceRoot":"","sources":["../todo.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE3B,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA"}