liminal 0.13.0 → 0.14.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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # liminal
2
2
 
3
+ ## 0.14.0
4
+
5
+ ### Minor Changes
6
+
7
+ - e7006b7: Implement tool enablement and disablement.
8
+
3
9
  ## 0.13.0
4
10
 
5
11
  ### Minor Changes
package/Strand.ts CHANGED
@@ -27,7 +27,7 @@ export class Strand extends Context.Tag("liminal/Strand")<Strand, Strand.Service
27
27
  static layer: (init?: {
28
28
  system?: string | undefined
29
29
  messages?: Array<Message> | undefined
30
- tools?: Set<AiToolkit.Any>
30
+ tools?: Set<AiToolkit.Any> | undefined
31
31
  }) => Layer.Layer<Strand> = ({ system, messages, tools } = {}) =>
32
32
  Layer.effect(
33
33
  Strand,
package/assistant.ts CHANGED
@@ -11,11 +11,15 @@ import { Strand } from "./Strand.ts"
11
11
  export const assistant: Effect.Effect<string, AiError, AiLanguageModel | Strand> = Effect.gen(function*() {
12
12
  const model = yield* AiLanguageModel
13
13
  const { system, messages, tools } = yield* Strand
14
- const { text } = yield* model.generateText({
14
+ let { text, results } = yield* model.generateText({
15
15
  system: Option.getOrUndefined(system),
16
16
  prompt: messages,
17
17
  toolkit: AiToolkit.merge(...tools) as never,
18
18
  })
19
+ // TODO: this shouldn't be necessary. Bug in Effect AI?
20
+ if (!text.trim()) {
21
+ text = results.values().next().value?.result as never as string
22
+ }
19
23
  yield* append(
20
24
  new AssistantMessage({
21
25
  parts: [new TextPart({ text })],
package/disable.ts CHANGED
@@ -1,5 +1,9 @@
1
1
  import * as AiTool from "@effect/ai/AiTool"
2
2
  import type { AiToolkit } from "@effect/ai/AiToolkit"
3
3
  import * as Effect from "effect/Effect"
4
+ import { Strand } from "./Strand"
4
5
 
5
- export declare const disable: (toolkit: AiToolkit<AiTool.Any>) => Effect.Effect<void>
6
+ export const disable: (toolkit: AiToolkit<AiTool.Any>) => Effect.Effect<void, never, Strand> = (toolkit) =>
7
+ Effect.map(Strand, ({ tools }) => {
8
+ tools.delete(toolkit)
9
+ })
package/dist/Strand.d.ts CHANGED
@@ -25,7 +25,7 @@ export declare class Strand extends Strand_base {
25
25
  static layer: (init?: {
26
26
  system?: string | undefined;
27
27
  messages?: Array<Message> | undefined;
28
- tools?: Set<AiToolkit.Any>;
28
+ tools?: Set<AiToolkit.Any> | undefined;
29
29
  }) => Layer.Layer<Strand>;
30
30
  }
31
31
  export {};
package/dist/assistant.js CHANGED
@@ -9,11 +9,15 @@ import { Strand } from "./Strand.js";
9
9
  export const assistant = Effect.gen(function* () {
10
10
  const model = yield* AiLanguageModel;
11
11
  const { system, messages, tools } = yield* Strand;
12
- const { text } = yield* model.generateText({
12
+ let { text, results } = yield* model.generateText({
13
13
  system: Option.getOrUndefined(system),
14
14
  prompt: messages,
15
15
  toolkit: AiToolkit.merge(...tools),
16
16
  });
17
+ // TODO: this shouldn't be necessary. Bug in Effect AI?
18
+ if (!text.trim()) {
19
+ text = results.values().next().value?.result;
20
+ }
17
21
  yield* append(new AssistantMessage({
18
22
  parts: [new TextPart({ text })],
19
23
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"assistant.js","sourceRoot":"","sources":["../assistant.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAA;AACjD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,oEAAoE;AACpE,MAAM,CAAC,MAAM,SAAS,GAA6D,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACrG,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,eAAe,CAAA;IACpC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,MAAM,CAAA;IACjD,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;QACzC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;QACrC,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,CAAU;KAC5C,CAAC,CAAA;IACF,KAAK,CAAC,CAAC,MAAM,CACX,IAAI,gBAAgB,CAAC;QACnB,KAAK,EAAE,CAAC,IAAI,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;KAChC,CAAC,CACH,CAAA;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"assistant.js","sourceRoot":"","sources":["../assistant.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAA;AACjD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,oEAAoE;AACpE,MAAM,CAAC,MAAM,SAAS,GAA6D,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACrG,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,eAAe,CAAA;IACpC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,MAAM,CAAA;IACjD,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;QAChD,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;QACrC,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,CAAU;KAC5C,CAAC,CAAA;IACF,uDAAuD;IACvD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QACjB,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAyB,CAAA;IACjE,CAAC;IACD,KAAK,CAAC,CAAC,MAAM,CACX,IAAI,gBAAgB,CAAC;QACnB,KAAK,EAAE,CAAC,IAAI,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;KAChC,CAAC,CACH,CAAA;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAC,CAAA"}
package/dist/disable.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import * as AiTool from "@effect/ai/AiTool";
2
2
  import type { AiToolkit } from "@effect/ai/AiToolkit";
3
3
  import * as Effect from "effect/Effect";
4
- export declare const disable: (toolkit: AiToolkit<AiTool.Any>) => Effect.Effect<void>;
4
+ import { Strand } from "./Strand";
5
+ export declare const disable: (toolkit: AiToolkit<AiTool.Any>) => Effect.Effect<void, never, Strand>;
package/dist/disable.js CHANGED
@@ -1,3 +1,7 @@
1
1
  import * as AiTool from "@effect/ai/AiTool";
2
2
  import * as Effect from "effect/Effect";
3
+ import { Strand } from "./Strand";
4
+ export const disable = (toolkit) => Effect.map(Strand, ({ tools }) => {
5
+ tools.delete(toolkit);
6
+ });
3
7
  //# sourceMappingURL=disable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"disable.js","sourceRoot":"","sources":["../disable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAE3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"disable.js","sourceRoot":"","sources":["../disable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAE3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,MAAM,CAAC,MAAM,OAAO,GAA2E,CAAC,OAAO,EAAE,EAAE,CACzG,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IAC/B,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AACvB,CAAC,CAAC,CAAA"}
package/dist/enable.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as AiTool from "@effect/ai/AiTool";
2
2
  import type { AiToolkit } from "@effect/ai/AiToolkit";
3
3
  import * as Effect from "effect/Effect";
4
- import type { Strand } from "./Strand.ts";
5
- export declare const enable: <Tools extends AiTool.Any>(toolkit: AiToolkit<Tools>) => Effect.Effect<never, never, AiTool.Handler<Tools["name"]> | Strand>;
4
+ import { Strand } from "./Strand.ts";
5
+ export declare const enable: <Tools extends AiTool.Any>(toolkit: AiToolkit<Tools>) => Effect.Effect<void, never, AiTool.Handler<Tools["name"]> | Strand>;
package/dist/enable.js CHANGED
@@ -1,3 +1,7 @@
1
1
  import * as AiTool from "@effect/ai/AiTool";
2
2
  import * as Effect from "effect/Effect";
3
+ import { Strand } from "./Strand.js";
4
+ export const enable = (toolkit) => Effect.map(Strand, ({ tools }) => {
5
+ tools.add(toolkit);
6
+ });
3
7
  //# sourceMappingURL=enable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"enable.js","sourceRoot":"","sources":["../enable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAE3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"enable.js","sourceRoot":"","sources":["../enable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAE3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,MAAM,CAAC,MAAM,MAAM,GAEuD,CAAC,OAAO,EAAE,EAAE,CACpF,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IAC/B,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AACpB,CAAC,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export * from "./matchGist.ts";
@@ -0,0 +1,2 @@
1
+ export * from "./matchGist.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../patterns/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA"}
@@ -0,0 +1,3 @@
1
+ import * as Effect from "effect/Effect";
2
+ import { Strand } from "../Strand.ts";
3
+ export declare const matchGist: <R extends Record<string, Effect.All.EffectAny>>(routes: R) => Effect.Effect<Effect.Effect.Success<R[keyof R]>, ([R[keyof R]] extends [never] ? never : Effect.Effect.Error<R[keyof R]>), ([R[keyof R]] extends [never] ? never : Effect.Effect.Context<R[keyof R]>) | Strand>;
@@ -0,0 +1,16 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Schema from "effect/Schema";
3
+ import { assistantSchema } from "../assistantSchema.js";
4
+ import { branch } from "../branch.js";
5
+ import { Strand } from "../Strand.js";
6
+ import { user } from "../user.js";
7
+ export const matchGist = Effect.fnUntraced(function* (routes) {
8
+ const descriptions = Object.keys(routes);
9
+ const description = yield* branch(user `
10
+ Which of the following descriptions best matches the current conversation?
11
+
12
+ - ${descriptions.join("\n -")}
13
+ `, assistantSchema(Schema.Literal(...descriptions)));
14
+ return yield* routes[description];
15
+ });
16
+ //# sourceMappingURL=matchGist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matchGist.js","sourceRoot":"","sources":["../../patterns/matchGist.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEjC,MAAM,CAAC,MAAM,SAAS,GAIlB,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAC,MAAM;IACpC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACxC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,MAAM,CAC/B,IAAI,CAAA;;;UAGE,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;KAC9B,EACD,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,CAAC,CACjD,CAAA;IACD,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,CAAE,CAAA;AACpC,CAAC,CAAC,CAAA"}