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.
@@ -1,2 +1,2 @@
1
- import type { Effect } from "effect/Effect";
2
- export type Sequence<I = never, O = never> = <Arg extends Array<Effect<any, any, any>>>(...steps: Arg) => Effect<Arg extends [] ? void : Arg extends [...infer _0, infer L extends Effect<any, any, any>] ? Effect.Success<L> : never, Effect.Error<Arg[number]>, Exclude<Effect.Context<Arg[number]>, I> | O>;
1
+ import type * as Effect from "effect/Effect";
2
+ export type Sequence<I = never, O = never> = <Arg extends Array<Effect.All.EffectAny>>(...steps: Arg) => Effect.Effect<Arg extends [] ? void : Arg extends [...infer _0, infer L extends Effect.All.EffectAny] ? Effect.Effect.Success<L> : never, Effect.Effect.Error<Arg[number]>, Exclude<Effect.Effect.Context<Arg[number]>, I> | O>;
@@ -1,6 +1,6 @@
1
1
  import * as Effect from "effect/Effect";
2
- /** Append a user message to the conversation. */
3
- export type Taggable<A, E, R> = <L extends Array<unknown>, E1 = never, R1 = never>(template?: TemplateStringsArray | string | Effect.Effect<string | undefined, E1, R1> | undefined, ...substitutions: L) => Effect.Effect<A, ([ExtractEffect<L>] extends [never] ? never : Effect.Effect.Error<ExtractEffect<L>>) | E | E1, ([ExtractEffect<L>] extends [never] ? never : Effect.Effect.Context<ExtractEffect<L>>) | R | R1>;
2
+ export type Taggable<A, E, R> = <L extends Array<unknown>, E1 = never, R1 = never>(template?: TaggableArg0 | Effect.Effect<string | undefined, E1, R1>, ...substitutions: L) => Effect.Effect<A, ([ExtractEffect<L>] extends [never] ? never : Effect.Effect.Error<ExtractEffect<L>>) | E | E1, ([ExtractEffect<L>] extends [never] ? never : Effect.Effect.Context<ExtractEffect<L>>) | R | R1>;
3
+ export type TaggableArg0 = TemplateStringsArray | string | undefined;
4
4
  type ExtractEffect<T extends Array<unknown>> = Extract<T[number], Effect.All.EffectAny>;
5
- export declare const normalize: <A0 extends TemplateStringsArray | string | Effect.Effect<string | undefined, any, any> | undefined, L extends Array<unknown>>(a0: A0, aRest: L) => Effect.Effect<string | (undefined extends A0 ? undefined : never)>;
5
+ export declare const normalize: <A0 extends TaggableArg0 | Effect.Effect<string | undefined, any, any>, L extends Array<unknown>>(a0: A0, aRest: L) => Effect.Effect<string | (undefined extends A0 ? undefined : never)>;
6
6
  export {};
@@ -1,24 +1,18 @@
1
1
  import * as Effect from "effect/Effect";
2
- import { fixRaw } from "./fixRaw.js";
2
+ import { normalizeRaw } from "./fixRaw.js";
3
3
  export const normalize = Effect.fnUntraced(function* (a0, aRest) {
4
- let a0_;
5
- if (Effect.isEffect(a0)) {
6
- a0_ = yield* a0;
7
- }
8
- else {
9
- a0_ = a0;
10
- }
4
+ const a0_ = Effect.isEffect(a0)
5
+ ? yield* a0
6
+ : a0;
11
7
  if (!a0_)
12
8
  return undefined;
13
9
  const aRest_ = yield* Effect.all(aRest.map((v) => Effect.isEffect(v)
14
10
  ? v
15
11
  : Effect.succeed(v)));
16
- if (typeof a0_ === "string") {
17
- if (aRest_.length === 0) {
18
- return a0_;
19
- }
20
- return [a0_, ...aRest_].join("");
21
- }
22
- return fixRaw(a0_, aRest_);
12
+ return typeof a0_ === "string"
13
+ ? aRest_.length === 0
14
+ ? a0_
15
+ : [a0_, ...aRest_].join("")
16
+ : normalizeRaw(a0_, aRest_);
23
17
  });
24
18
  //# sourceMappingURL=Taggable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Taggable.js","sourceRoot":"","sources":["../../util/Taggable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAkBpC,MAAM,CAAC,MAAM,SAAS,GAUoD,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAC,EAAE,EAAE,KAAK;IAC7G,IAAI,GAA8C,CAAA;IAClD,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QACxB,GAAG,GAAG,KAAK,CAAC,CAAC,EAA8D,CAAA;IAC7E,CAAC;SAAM,CAAC;QACN,GAAG,GAAG,EAAE,CAAA;IACV,CAAC;IACD,IAAI,CAAC,GAAG;QAAE,OAAO,SAAkB,CAAA;IACnC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAC9B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACd,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CACtB,CACwC,CAAA;IAC3C,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,GAAG,CAAA;QACZ,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAClC,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;AAC5B,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"Taggable.js","sourceRoot":"","sources":["../../util/Taggable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAe1C,MAAM,CAAC,MAAM,SAAS,GAMoD,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAC,EAAE,EAAE,KAAK;IAC7G,MAAM,GAAG,GAAiB,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3C,CAAC,CAAC,KAAK,CAAC,CAAC,EAAiC;QAC1C,CAAC,CAAC,EAAE,CAAA;IACN,IAAI,CAAC,GAAG;QAAE,OAAO,SAAkB,CAAA;IACnC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAC9B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACd,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CACtB,CAC+B,CAAA;IAClC,OAAO,OAAO,GAAG,KAAK,QAAQ;QAC5B,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YACnB,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;AAC/B,CAAC,CAAC,CAAA"}
@@ -1,4 +1,4 @@
1
- export declare const fixRaw: (strings: TemplateStringsArray, values: Array<unknown>) => string;
2
- export declare const fixTemplateStrings: (template: TemplateStringsArray) => {
3
- readonly raw: readonly string[];
1
+ export declare const normalizeRaw: (strings: TemplateStringsArray, values: Array<unknown>) => string;
2
+ export declare const normalizeTemplateStrings: (template: TemplateStringsArray) => {
3
+ readonly raw: ReadonlyArray<string>;
4
4
  };
@@ -2,8 +2,8 @@ const LEADING_SPACE_RE = /^([ \t]*)/;
2
2
  const INDENTATION_RE = /^\n([ \t]+)/;
3
3
  const ESCAPE_SEQ_RE = /\\([`${\\]|\n)/g;
4
4
  const LAST_INDENTATION_RE = /\n[ \t]+$/;
5
- export const fixRaw = (strings, values) => {
6
- const fixedStrings = fixTemplateStrings(strings);
5
+ export const normalizeRaw = (strings, values) => {
6
+ const fixedStrings = normalizeTemplateStrings(strings);
7
7
  const rawArr = fixedStrings.raw;
8
8
  const valuesLength = values.length;
9
9
  const resultParts = new Array(Math.max(1, rawArr.length * 2 - 1));
@@ -43,7 +43,7 @@ export const fixRaw = (strings, values) => {
43
43
  // Combine all parts at once
44
44
  return resultParts.slice(0, resultIndex).join("");
45
45
  };
46
- export const fixTemplateStrings = (template) => {
46
+ export const normalizeTemplateStrings = (template) => {
47
47
  const leadingIndentMatch = INDENTATION_RE.exec(template.raw[0]);
48
48
  const indentation = leadingIndentMatch?.[1];
49
49
  const rawLength = template.raw.length;
@@ -1 +1 @@
1
- {"version":3,"file":"fixRaw.js","sourceRoot":"","sources":["../../util/fixRaw.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fixRaw.js","sourceRoot":"","sources":["../../util/fixRaw.ts"],"names":[],"mappings":"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"}
package/enable.ts CHANGED
@@ -1,8 +1,11 @@
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"
4
+ import { Strand } from "./Strand.ts"
5
5
 
6
- export declare const enable: <Tools extends AiTool.Any>(
6
+ export const enable: <Tools extends AiTool.Any>(
7
7
  toolkit: AiToolkit<Tools>,
8
- ) => Effect.Effect<never, never, AiTool.Handler<Tools["name"]> | Strand>
8
+ ) => Effect.Effect<void, never, AiTool.Handler<Tools["name"]> | Strand> = (toolkit) =>
9
+ Effect.map(Strand, ({ tools }) => {
10
+ tools.add(toolkit)
11
+ })
package/package.json CHANGED
@@ -1,28 +1,29 @@
1
1
  {
2
2
  "name": "liminal",
3
- "homepage": "https://liminal.land",
4
- "llms": "https://liminal.land/llms.txt",
5
- "llmsFull": "https://liminal.land/llmsFull.txt",
6
- "publishConfig": {
7
- "access": "public",
8
- "provenance": true
9
- },
10
- "version": "0.13.0",
11
- "license": "Apache-2.0",
3
+ "version": "0.14.0",
12
4
  "repository": {
13
5
  "type": "git",
14
6
  "url": "https://github.com/harrysolovay/liminal.git",
15
7
  "directory": "liminal"
16
8
  },
17
- "type": "module",
18
- "sideEffects": false,
19
- "description": "An Effect AI toolkit for LLM integration and conversation state management.",
9
+ "peerDependencies": {
10
+ "@effect/ai": "^0.25.2",
11
+ "effect": "^3.17.7"
12
+ },
20
13
  "exports": {
21
14
  ".": "./index.ts",
22
- "./package.json": "./package.json"
15
+ "./package.json": "./package.json",
16
+ "./patterns": "./patterns/index.ts"
23
17
  },
24
- "peerDependencies": {
25
- "@effect/ai": "^0.25.0",
26
- "effect": "^3.17.6"
27
- }
18
+ "description": "An Effect AI toolkit for conversation state management.",
19
+ "homepage": "https://liminal.land",
20
+ "license": "Apache-2.0",
21
+ "llms": "https://liminal.land/llms.txt",
22
+ "llmsFull": "https://liminal.land/llmsFull.txt",
23
+ "publishConfig": {
24
+ "access": "public",
25
+ "provenance": true
26
+ },
27
+ "sideEffects": false,
28
+ "type": "module"
28
29
  }
@@ -0,0 +1 @@
1
+ export * from "./matchGist.ts"
@@ -0,0 +1,23 @@
1
+ import * as Effect from "effect/Effect"
2
+ import * as Schema from "effect/Schema"
3
+ import { assistantSchema } from "../assistantSchema.ts"
4
+ import { branch } from "../branch.ts"
5
+ import { Strand } from "../Strand.ts"
6
+ import { user } from "../user.ts"
7
+
8
+ export const matchGist: <R extends Record<string, Effect.All.EffectAny>>(routes: R) => Effect.Effect<
9
+ Effect.Effect.Success<R[keyof R]>,
10
+ ([R[keyof R]] extends [never] ? never : Effect.Effect.Error<R[keyof R]>),
11
+ ([R[keyof R]] extends [never] ? never : Effect.Effect.Context<R[keyof R]>) | Strand
12
+ > = Effect.fnUntraced(function*(routes) {
13
+ const descriptions = Object.keys(routes)
14
+ const description = yield* branch(
15
+ user`
16
+ Which of the following descriptions best matches the current conversation?
17
+
18
+ - ${descriptions.join("\n -")}
19
+ `,
20
+ assistantSchema(Schema.Literal(...descriptions)),
21
+ )
22
+ return yield* routes[description]!
23
+ })
package/util/Sequence.ts CHANGED
@@ -1,9 +1,11 @@
1
- import type { Effect } from "effect/Effect"
1
+ import type * as Effect from "effect/Effect"
2
2
 
3
- export type Sequence<I = never, O = never> = <Arg extends Array<Effect<any, any, any>>>(
3
+ export type Sequence<I = never, O = never> = <Arg extends Array<Effect.All.EffectAny>>(
4
4
  ...steps: Arg
5
- ) => Effect<
6
- Arg extends [] ? void : Arg extends [...infer _0, infer L extends Effect<any, any, any>] ? Effect.Success<L> : never,
7
- Effect.Error<Arg[number]>,
8
- Exclude<Effect.Context<Arg[number]>, I> | O
5
+ ) => Effect.Effect<
6
+ Arg extends [] ? void
7
+ : Arg extends [...infer _0, infer L extends Effect.All.EffectAny] ? Effect.Effect.Success<L>
8
+ : never,
9
+ Effect.Effect.Error<Arg[number]>,
10
+ Exclude<Effect.Effect.Context<Arg[number]>, I> | O
9
11
  >
package/util/Taggable.ts CHANGED
@@ -1,13 +1,8 @@
1
1
  import * as Effect from "effect/Effect"
2
- import { fixRaw } from "./fixRaw.ts"
2
+ import { normalizeRaw } from "./fixRaw.ts"
3
3
 
4
- /** Append a user message to the conversation. */
5
4
  export type Taggable<A, E, R> = <L extends Array<unknown>, E1 = never, R1 = never>(
6
- template?:
7
- | TemplateStringsArray
8
- | string
9
- | Effect.Effect<string | undefined, E1, R1>
10
- | undefined,
5
+ template?: TaggableArg0 | Effect.Effect<string | undefined, E1, R1>,
11
6
  ...substitutions: L
12
7
  ) => Effect.Effect<
13
8
  A,
@@ -15,25 +10,20 @@ export type Taggable<A, E, R> = <L extends Array<unknown>, E1 = never, R1 = neve
15
10
  ([ExtractEffect<L>] extends [never] ? never : Effect.Effect.Context<ExtractEffect<L>>) | R | R1
16
11
  >
17
12
 
13
+ export type TaggableArg0 = TemplateStringsArray | string | undefined
14
+
18
15
  type ExtractEffect<T extends Array<unknown>> = Extract<T[number], Effect.All.EffectAny>
19
16
 
20
17
  export const normalize: <
21
- A0 extends
22
- | TemplateStringsArray
23
- | string
24
- | Effect.Effect<string | undefined, any, any>
25
- | undefined,
18
+ A0 extends TaggableArg0 | Effect.Effect<string | undefined, any, any>,
26
19
  L extends Array<unknown>,
27
20
  >(
28
21
  a0: A0,
29
22
  aRest: L,
30
23
  ) => Effect.Effect<string | (undefined extends A0 ? undefined : never)> = Effect.fnUntraced(function*(a0, aRest) {
31
- let a0_: TemplateStringsArray | string | undefined
32
- if (Effect.isEffect(a0)) {
33
- a0_ = yield* a0 as Effect.Effect<TemplateStringsArray | string | undefined>
34
- } else {
35
- a0_ = a0
36
- }
24
+ const a0_: TaggableArg0 = Effect.isEffect(a0)
25
+ ? yield* a0 as Effect.Effect<TaggableArg0>
26
+ : a0
37
27
  if (!a0_) return undefined as never
38
28
  const aRest_ = yield* Effect.all(
39
29
  aRest.map((v) =>
@@ -41,12 +31,10 @@ export const normalize: <
41
31
  ? v
42
32
  : Effect.succeed(v)
43
33
  ),
44
- ) as never as Effect.Effect<Array<unknown>>
45
- if (typeof a0_ === "string") {
46
- if (aRest_.length === 0) {
47
- return a0_
48
- }
49
- return [a0_, ...aRest_].join("")
50
- }
51
- return fixRaw(a0_, aRest_)
34
+ ) as Effect.Effect<Array<unknown>>
35
+ return typeof a0_ === "string"
36
+ ? aRest_.length === 0
37
+ ? a0_
38
+ : [a0_, ...aRest_].join("")
39
+ : normalizeRaw(a0_, aRest_)
52
40
  })
package/util/fixRaw.ts CHANGED
@@ -3,8 +3,8 @@ const INDENTATION_RE = /^\n([ \t]+)/
3
3
  const ESCAPE_SEQ_RE = /\\([`${\\]|\n)/g
4
4
  const LAST_INDENTATION_RE = /\n[ \t]+$/
5
5
 
6
- export const fixRaw = (strings: TemplateStringsArray, values: Array<unknown>): string => {
7
- const fixedStrings = fixTemplateStrings(strings)
6
+ export const normalizeRaw = (strings: TemplateStringsArray, values: Array<unknown>): string => {
7
+ const fixedStrings = normalizeTemplateStrings(strings)
8
8
  const rawArr = fixedStrings.raw
9
9
  const valuesLength = values.length
10
10
 
@@ -54,8 +54,8 @@ export const fixRaw = (strings: TemplateStringsArray, values: Array<unknown>): s
54
54
  return resultParts.slice(0, resultIndex).join("")
55
55
  }
56
56
 
57
- export const fixTemplateStrings = (template: TemplateStringsArray): {
58
- readonly raw: readonly string[]
57
+ export const normalizeTemplateStrings = (template: TemplateStringsArray): {
58
+ readonly raw: ReadonlyArray<string>
59
59
  } => {
60
60
  const leadingIndentMatch = INDENTATION_RE.exec(template.raw[0]!)
61
61
  const indentation = leadingIndentMatch?.[1]