liminal 0.13.0 → 0.15.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 +13 -0
- package/Strand.ts +11 -6
- package/assistant.ts +6 -2
- package/assistantStream.ts +1 -1
- package/disable.ts +5 -2
- package/dist/Strand.d.ts +10 -5
- package/dist/Strand.js.map +1 -1
- package/dist/assistant.js +6 -2
- package/dist/assistant.js.map +1 -1
- package/dist/assistantStream.js +1 -1
- package/dist/assistantStream.js.map +1 -1
- package/dist/disable.d.ts +2 -2
- package/dist/disable.js +4 -0
- package/dist/disable.js.map +1 -1
- package/dist/enable.d.ts +4 -4
- package/dist/enable.js +4 -1
- package/dist/enable.js.map +1 -1
- package/dist/patterns/coalesce_models.d.ts +6 -0
- package/dist/patterns/coalesce_models.js +15 -0
- package/dist/patterns/coalesce_models.js.map +1 -0
- package/dist/patterns/match_gist.d.ts +3 -0
- package/dist/patterns/match_gist.js +16 -0
- package/dist/patterns/match_gist.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 +13 -6
- package/package.json +19 -17
- package/patterns/coalesce_models.ts +30 -0
- package/patterns/match_gist.ts +23 -0
- package/util/Sequence.ts +8 -6
- package/util/Taggable.ts +14 -26
- package/util/fixRaw.ts +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# liminal
|
|
2
2
|
|
|
3
|
+
## 0.15.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 3b4ec1a: - Instead of providing `AiToolkit` to `L.enable`/`L.disable`, we now provide tools directly.
|
|
8
|
+
- Also includes the beginnings of a `coalesceModels` pattern.
|
|
9
|
+
|
|
10
|
+
## 0.14.0
|
|
11
|
+
|
|
12
|
+
### Minor Changes
|
|
13
|
+
|
|
14
|
+
- e7006b7: Implement tool enablement and disablement.
|
|
15
|
+
|
|
3
16
|
## 0.13.0
|
|
4
17
|
|
|
5
18
|
### Minor Changes
|
package/Strand.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type { Message } from "@effect/ai/AiInput"
|
|
2
|
-
import type * as
|
|
2
|
+
import type * as AiTool from "@effect/ai/AiTool"
|
|
3
3
|
import * as Context from "effect/Context"
|
|
4
4
|
import * as Effect from "effect/Effect"
|
|
5
5
|
import * as Layer from "effect/Layer"
|
|
6
6
|
import * as Option from "effect/Option"
|
|
7
7
|
import * as PubSub from "effect/PubSub"
|
|
8
|
+
import type { Schema } from "effect/Schema"
|
|
8
9
|
import type { LEvent } from "./LEvent.ts"
|
|
9
10
|
|
|
10
11
|
export declare namespace Strand {
|
|
@@ -18,17 +19,21 @@ export declare namespace Strand {
|
|
|
18
19
|
/** The list of messages that the model uses to infer the next message. */
|
|
19
20
|
messages: Array<Message>
|
|
20
21
|
/** The tools available to the model. */
|
|
21
|
-
tools: Set<
|
|
22
|
+
tools: Set<AiTool.AiTool<string, AiTool.AnyStructSchema, Schema.Any, Schema.Any, never>>
|
|
22
23
|
}
|
|
23
24
|
}
|
|
24
25
|
|
|
25
26
|
/** A context tag that denotes the boundary of a conversation isolate. */
|
|
26
27
|
export class Strand extends Context.Tag("liminal/Strand")<Strand, Strand.Service>() {
|
|
27
|
-
static layer: (init?: {
|
|
28
|
+
static layer: <T extends AiTool.Any = never>(init?: {
|
|
28
29
|
system?: string | undefined
|
|
29
30
|
messages?: Array<Message> | undefined
|
|
30
|
-
tools?: Set<
|
|
31
|
-
}) => Layer.Layer<
|
|
31
|
+
tools?: Set<T> | undefined
|
|
32
|
+
}) => Layer.Layer<
|
|
33
|
+
Strand,
|
|
34
|
+
[T] extends [AiTool.Any] ? AiTool.Failure<T> : never,
|
|
35
|
+
[T] extends [AiTool.Any] ? AiTool.Context<T> : never
|
|
36
|
+
> = ({ system, messages, tools } = {}) =>
|
|
32
37
|
Layer.effect(
|
|
33
38
|
Strand,
|
|
34
39
|
Effect.gen(function*() {
|
|
@@ -37,7 +42,7 @@ export class Strand extends Context.Tag("liminal/Strand")<Strand, Strand.Service
|
|
|
37
42
|
events: yield* PubSub.unbounded<LEvent>(),
|
|
38
43
|
system: Option.fromNullable(system),
|
|
39
44
|
messages: [...messages ?? []],
|
|
40
|
-
tools: new Set(tools ?? []),
|
|
45
|
+
tools: new Set(tools as never ?? []),
|
|
41
46
|
})
|
|
42
47
|
}),
|
|
43
48
|
)
|
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
|
-
|
|
14
|
+
let { text, results } = yield* model.generateText({
|
|
15
15
|
system: Option.getOrUndefined(system),
|
|
16
16
|
prompt: messages,
|
|
17
|
-
toolkit: AiToolkit.
|
|
17
|
+
toolkit: AiToolkit.make(...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/assistantStream.ts
CHANGED
package/disable.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import * as AiTool from "@effect/ai/AiTool"
|
|
2
|
-
import type { AiToolkit } from "@effect/ai/AiToolkit"
|
|
3
2
|
import * as Effect from "effect/Effect"
|
|
3
|
+
import { Strand } from "./Strand"
|
|
4
4
|
|
|
5
|
-
export
|
|
5
|
+
export const disable: (tool: AiTool.Any) => Effect.Effect<void, never, Strand> = (tool) =>
|
|
6
|
+
Effect.map(Strand, ({ tools }) => {
|
|
7
|
+
tools.delete(tool as never)
|
|
8
|
+
})
|
package/dist/Strand.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { Message } from "@effect/ai/AiInput";
|
|
2
|
-
import type * as
|
|
2
|
+
import type * as AiTool from "@effect/ai/AiTool";
|
|
3
3
|
import * as Context from "effect/Context";
|
|
4
4
|
import * as Layer from "effect/Layer";
|
|
5
5
|
import * as Option from "effect/Option";
|
|
6
6
|
import * as PubSub from "effect/PubSub";
|
|
7
|
+
import type { Schema } from "effect/Schema";
|
|
7
8
|
import type { LEvent } from "./LEvent.ts";
|
|
8
9
|
export declare namespace Strand {
|
|
9
10
|
interface Service {
|
|
@@ -16,16 +17,20 @@ export declare namespace Strand {
|
|
|
16
17
|
/** The list of messages that the model uses to infer the next message. */
|
|
17
18
|
messages: Array<Message>;
|
|
18
19
|
/** The tools available to the model. */
|
|
19
|
-
tools: Set<
|
|
20
|
+
tools: Set<AiTool.AiTool<string, AiTool.AnyStructSchema, Schema.Any, Schema.Any, never>>;
|
|
20
21
|
}
|
|
21
22
|
}
|
|
22
23
|
declare const Strand_base: Context.TagClass<Strand, "liminal/Strand", Strand.Service>;
|
|
23
24
|
/** A context tag that denotes the boundary of a conversation isolate. */
|
|
24
25
|
export declare class Strand extends Strand_base {
|
|
25
|
-
static layer: (init?: {
|
|
26
|
+
static layer: <T extends AiTool.Any = never>(init?: {
|
|
26
27
|
system?: string | undefined;
|
|
27
28
|
messages?: Array<Message> | undefined;
|
|
28
|
-
tools?: Set<
|
|
29
|
-
}) => Layer.Layer<Strand
|
|
29
|
+
tools?: Set<T> | undefined;
|
|
30
|
+
}) => Layer.Layer<Strand, [
|
|
31
|
+
T
|
|
32
|
+
] extends [AiTool.Any] ? AiTool.Failure<T> : never, [
|
|
33
|
+
T
|
|
34
|
+
] extends [AiTool.Any] ? AiTool.Context<T> : never>;
|
|
30
35
|
}
|
|
31
36
|
export {};
|
package/dist/Strand.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Strand.js","sourceRoot":"","sources":["../Strand.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"Strand.js","sourceRoot":"","sources":["../Strand.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAmBvC,yEAAyE;AACzE,MAAM,OAAO,MAAO,SAAQ,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAA0B;IACjF,MAAM,CAAC,KAAK,GAQR,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,CACvC,KAAK,CAAC,MAAM,CACV,MAAM,EACN,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,OAAO,MAAM,CAAC,EAAE,CAAC;YACf,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC;YAC3C,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,EAAU;YACzC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;YACnC,QAAQ,EAAE,CAAC,GAAG,QAAQ,IAAI,EAAE,CAAC;YAC7B,KAAK,EAAE,IAAI,GAAG,CAAC,KAAc,IAAI,EAAE,CAAC;SACrC,CAAC,CAAA;IACJ,CAAC,CAAC,CACH,CAAA"}
|
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
|
-
|
|
12
|
+
let { text, results } = yield* model.generateText({
|
|
13
13
|
system: Option.getOrUndefined(system),
|
|
14
14
|
prompt: messages,
|
|
15
|
-
toolkit: AiToolkit.
|
|
15
|
+
toolkit: AiToolkit.make(...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
|
}));
|
package/dist/assistant.js.map
CHANGED
|
@@ -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,
|
|
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,IAAI,CAAC,GAAG,KAAK,CAAU;KAC3C,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/assistantStream.js
CHANGED
|
@@ -11,7 +11,7 @@ export const assistantStream = Stream.unwrap(Effect.gen(function* () {
|
|
|
11
11
|
return model.streamText({
|
|
12
12
|
system: Option.getOrUndefined(system),
|
|
13
13
|
prompt: messages,
|
|
14
|
-
toolkit: AiToolkit.
|
|
14
|
+
toolkit: AiToolkit.make(...tools),
|
|
15
15
|
});
|
|
16
16
|
}));
|
|
17
17
|
//# sourceMappingURL=assistantStream.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assistantStream.js","sourceRoot":"","sources":["../assistantStream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAE5D,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAA;AACjD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,iGAAiG;AACjG,MAAM,CAAC,MAAM,eAAe,GAIxB,MAAM,CAAC,MAAM,CACf,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,eAAe,CAAA;IACpC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,MAAM,CAAA;IACjD,OAAO,KAAK,CAAC,UAAU,CAAC;QACtB,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;QACrC,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"assistantStream.js","sourceRoot":"","sources":["../assistantStream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAE5D,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAA;AACjD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,iGAAiG;AACjG,MAAM,CAAC,MAAM,eAAe,GAIxB,MAAM,CAAC,MAAM,CACf,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,eAAe,CAAA;IACpC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,MAAM,CAAA;IACjD,OAAO,KAAK,CAAC,UAAU,CAAC;QACtB,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;QACrC,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;KAClC,CAAC,CAAA;AACJ,CAAC,CAAC,CACH,CAAA"}
|
package/dist/disable.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import * as AiTool from "@effect/ai/AiTool";
|
|
2
|
-
import type { AiToolkit } from "@effect/ai/AiToolkit";
|
|
3
2
|
import * as Effect from "effect/Effect";
|
|
4
|
-
|
|
3
|
+
import { Strand } from "./Strand";
|
|
4
|
+
export declare const disable: (tool: AiTool.Any) => Effect.Effect<void, never, Strand>;
|
package/dist/disable.js
CHANGED
package/dist/disable.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"disable.js","sourceRoot":"","sources":["../disable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"disable.js","sourceRoot":"","sources":["../disable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,MAAM,CAAC,MAAM,OAAO,GAA6D,CAAC,IAAI,EAAE,EAAE,CACxF,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IAC/B,KAAK,CAAC,MAAM,CAAC,IAAa,CAAC,CAAA;AAC7B,CAAC,CAAC,CAAA"}
|
package/dist/enable.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
import type { AiToolkit } from "@effect/ai/AiToolkit";
|
|
1
|
+
import type { AiTool, AnyStructSchema, Handler } from "@effect/ai/AiTool";
|
|
3
2
|
import * as Effect from "effect/Effect";
|
|
4
|
-
import type {
|
|
5
|
-
|
|
3
|
+
import type { Schema } from "effect/Schema";
|
|
4
|
+
import { Strand } from "./Strand.ts";
|
|
5
|
+
export declare const enable: <K extends string, E extends Schema.All, R>(toolkit: AiTool<K, AnyStructSchema, Schema.Any, E, R>) => Effect.Effect<void, E, Handler<K> | Strand | R>;
|
package/dist/enable.js
CHANGED
package/dist/enable.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enable.js","sourceRoot":"","sources":["../enable.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"enable.js","sourceRoot":"","sources":["../enable.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,MAAM,CAAC,MAAM,MAAM,GAMoC,CAAC,OAAO,EAAE,EAAE,CACjE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IAC/B,KAAK,CAAC,GAAG,CAAC,OAAgB,CAAC,CAAA;AAC7B,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AiError } from "@effect/ai/AiError";
|
|
2
|
+
import type { AiLanguageModel } from "@effect/ai/AiLanguageModel";
|
|
3
|
+
import type { AiModel } from "@effect/ai/AiModel";
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
import type { Strand } from "../Strand.ts";
|
|
6
|
+
export declare const coalesceModels: <E, R, M extends Array<AiModel<any, any>>>(effect: Effect.Effect<any, E, R>, models: M) => Effect.Effect<string, AiError | E, Strand | AiLanguageModel | ([M[number]] extends [AiModel<any, infer R>] ? R : never)>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import { assistant } from "../assistant.js";
|
|
3
|
+
import { user } from "../user.js";
|
|
4
|
+
export const coalesceModels = Effect.fn(function* (effect, models) {
|
|
5
|
+
const all = yield* Effect.all(models.map((model) => effect.pipe(Effect.provide(model))));
|
|
6
|
+
yield* user `
|
|
7
|
+
Coalesce the following items into a single item:
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
${all.map((item) => JSON.stringify(item, null, 2)).join("\n\n---")}
|
|
12
|
+
`;
|
|
13
|
+
return yield* assistant;
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=coalesce_models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coalesce_models.js","sourceRoot":"","sources":["../../patterns/coalesce_models.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEjC,MAAM,CAAC,MAAM,cAAc,GAOvB,MAAM,CAAC,EAAE,CACX,QAAQ,CAAC,EAAC,MAAM,EAAE,MAAM;IACtB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAEtF,CAAA;IACD,KAAK,CAAC,CAAC,IAAI,CAAA;;;;;QAKP,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;KACnE,CAAA;IACD,OAAO,KAAK,CAAC,CAAC,SAAS,CAAA;AACzB,CAAC,CACF,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=match_gist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"match_gist.js","sourceRoot":"","sources":["../../patterns/match_gist.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"}
|