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 +6 -0
- package/Strand.ts +1 -1
- package/assistant.ts +5 -1
- package/disable.ts +5 -1
- package/dist/Strand.d.ts +1 -1
- package/dist/assistant.js +5 -1
- package/dist/assistant.js.map +1 -1
- package/dist/disable.d.ts +2 -1
- package/dist/disable.js +4 -0
- package/dist/disable.js.map +1 -1
- package/dist/enable.d.ts +2 -2
- package/dist/enable.js +4 -0
- package/dist/enable.js.map +1 -1
- package/dist/patterns/index.d.ts +1 -0
- package/dist/patterns/index.js +2 -0
- package/dist/patterns/index.js.map +1 -0
- package/dist/patterns/matchGist.d.ts +3 -0
- package/dist/patterns/matchGist.js +16 -0
- package/dist/patterns/matchGist.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/util/Sequence.d.ts +2 -2
- package/dist/util/Taggable.d.ts +3 -3
- package/dist/util/Taggable.js +9 -15
- package/dist/util/Taggable.js.map +1 -1
- package/dist/util/fixRaw.d.ts +3 -3
- package/dist/util/fixRaw.js +3 -3
- package/dist/util/fixRaw.js.map +1 -1
- package/enable.ts +6 -3
- package/package.json +18 -17
- package/patterns/index.ts +1 -0
- package/patterns/matchGist.ts +23 -0
- package/util/Sequence.ts +8 -6
- package/util/Taggable.ts +14 -26
- package/util/fixRaw.ts +4 -4
package/dist/util/Sequence.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type
|
|
2
|
-
export type Sequence<I = never, O = never> = <Arg extends Array<Effect
|
|
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>;
|
package/dist/util/Taggable.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as Effect from "effect/Effect";
|
|
2
|
-
|
|
3
|
-
export type
|
|
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
|
|
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 {};
|
package/dist/util/Taggable.js
CHANGED
|
@@ -1,24 +1,18 @@
|
|
|
1
1
|
import * as Effect from "effect/Effect";
|
|
2
|
-
import {
|
|
2
|
+
import { normalizeRaw } from "./fixRaw.js";
|
|
3
3
|
export const normalize = Effect.fnUntraced(function* (a0, aRest) {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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,
|
|
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"}
|
package/dist/util/fixRaw.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const
|
|
2
|
-
export declare const
|
|
3
|
-
readonly raw:
|
|
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
|
};
|
package/dist/util/fixRaw.js
CHANGED
|
@@ -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
|
|
6
|
-
const fixedStrings =
|
|
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
|
|
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;
|
package/dist/util/fixRaw.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixRaw.js","sourceRoot":"","sources":["../../util/fixRaw.ts"],"names":[],"mappings":"AAAA,MAAM,gBAAgB,GAAG,WAAW,CAAA;AACpC,MAAM,cAAc,GAAG,aAAa,CAAA;AACpC,MAAM,aAAa,GAAG,iBAAiB,CAAA;AACvC,MAAM,mBAAmB,GAAG,WAAW,CAAA;AAEvC,MAAM,CAAC,MAAM,
|
|
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
|
|
4
|
+
import { Strand } from "./Strand.ts"
|
|
5
5
|
|
|
6
|
-
export
|
|
6
|
+
export const enable: <Tools extends AiTool.Any>(
|
|
7
7
|
toolkit: AiToolkit<Tools>,
|
|
8
|
-
) => Effect.Effect<
|
|
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
|
-
"
|
|
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
|
-
"
|
|
18
|
-
|
|
19
|
-
|
|
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
|
-
"
|
|
25
|
-
|
|
26
|
-
|
|
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
|
|
1
|
+
import type * as Effect from "effect/Effect"
|
|
2
2
|
|
|
3
|
-
export type Sequence<I = never, O = never> = <Arg extends Array<Effect
|
|
3
|
+
export type Sequence<I = never, O = never> = <Arg extends Array<Effect.All.EffectAny>>(
|
|
4
4
|
...steps: Arg
|
|
5
|
-
) => Effect<
|
|
6
|
-
Arg extends [] ? void
|
|
7
|
-
|
|
8
|
-
|
|
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 {
|
|
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
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
|
7
|
-
const fixedStrings =
|
|
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
|
|
58
|
-
readonly raw:
|
|
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]
|