liminal 0.14.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 CHANGED
@@ -1,5 +1,12 @@
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
+
3
10
  ## 0.14.0
4
11
 
5
12
  ### Minor Changes
package/Strand.ts CHANGED
@@ -1,10 +1,11 @@
1
1
  import type { Message } from "@effect/ai/AiInput"
2
- import type * as AiToolkit from "@effect/ai/AiToolkit"
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<AiToolkit.Any>
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<AiToolkit.Any> | undefined
31
- }) => Layer.Layer<Strand> = ({ system, messages, tools } = {}) =>
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
@@ -14,7 +14,7 @@ export const assistant: Effect.Effect<string, AiError, AiLanguageModel | Strand>
14
14
  let { text, results } = yield* model.generateText({
15
15
  system: Option.getOrUndefined(system),
16
16
  prompt: messages,
17
- toolkit: AiToolkit.merge(...tools) as never,
17
+ toolkit: AiToolkit.make(...tools) as never,
18
18
  })
19
19
  // TODO: this shouldn't be necessary. Bug in Effect AI?
20
20
  if (!text.trim()) {
@@ -19,7 +19,7 @@ export const assistantStream: Stream.Stream<
19
19
  return model.streamText({
20
20
  system: Option.getOrUndefined(system),
21
21
  prompt: messages,
22
- toolkit: AiToolkit.merge(...tools) as never,
22
+ toolkit: AiToolkit.make(...tools),
23
23
  })
24
24
  }),
25
25
  )
package/disable.ts CHANGED
@@ -1,9 +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"
4
3
  import { Strand } from "./Strand"
5
4
 
6
- export const disable: (toolkit: AiToolkit<AiTool.Any>) => Effect.Effect<void, never, Strand> = (toolkit) =>
5
+ export const disable: (tool: AiTool.Any) => Effect.Effect<void, never, Strand> = (tool) =>
7
6
  Effect.map(Strand, ({ tools }) => {
8
- tools.delete(toolkit)
7
+ tools.delete(tool as never)
9
8
  })
package/dist/Strand.d.ts CHANGED
@@ -1,9 +1,10 @@
1
1
  import type { Message } from "@effect/ai/AiInput";
2
- import type * as AiToolkit from "@effect/ai/AiToolkit";
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<AiToolkit.Any>;
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<AiToolkit.Any> | undefined;
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 {};
@@ -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;AAkBvC,yEAAyE;AACzE,MAAM,OAAO,MAAO,SAAQ,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAA0B;IACjF,MAAM,CAAC,KAAK,GAIgB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,CAC/D,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,KAAK,IAAI,EAAE,CAAC;SAC5B,CAAC,CAAA;IACJ,CAAC,CAAC,CACH,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
@@ -12,7 +12,7 @@ export const assistant = Effect.gen(function* () {
12
12
  let { text, results } = yield* model.generateText({
13
13
  system: Option.getOrUndefined(system),
14
14
  prompt: messages,
15
- toolkit: AiToolkit.merge(...tools),
15
+ toolkit: AiToolkit.make(...tools),
16
16
  });
17
17
  // TODO: this shouldn't be necessary. Bug in Effect AI?
18
18
  if (!text.trim()) {
@@ -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,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"}
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"}
@@ -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.merge(...tools),
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,KAAK,CAAC,GAAG,KAAK,CAAU;KAC5C,CAAC,CAAA;AACJ,CAAC,CAAC,CACH,CAAA"}
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,5 +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";
5
- export declare const disable: (toolkit: AiToolkit<AiTool.Any>) => Effect.Effect<void, never, Strand>;
4
+ export declare const disable: (tool: AiTool.Any) => Effect.Effect<void, never, Strand>;
package/dist/disable.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as AiTool from "@effect/ai/AiTool";
2
2
  import * as Effect from "effect/Effect";
3
3
  import { Strand } from "./Strand";
4
- export const disable = (toolkit) => Effect.map(Strand, ({ tools }) => {
5
- tools.delete(toolkit);
4
+ export const disable = (tool) => Effect.map(Strand, ({ tools }) => {
5
+ tools.delete(tool);
6
6
  });
7
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;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"}
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 * as AiTool from "@effect/ai/AiTool";
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";
3
+ import type { Schema } from "effect/Schema";
4
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>;
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
@@ -1,4 +1,3 @@
1
- import * as AiTool from "@effect/ai/AiTool";
2
1
  import * as Effect from "effect/Effect";
3
2
  import { Strand } from "./Strand.js";
4
3
  export const enable = (toolkit) => Effect.map(Strand, ({ tools }) => {
@@ -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;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"}
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"}
@@ -13,4 +13,4 @@ export const matchGist = Effect.fnUntraced(function* (routes) {
13
13
  `, assistantSchema(Schema.Literal(...descriptions)));
14
14
  return yield* routes[description];
15
15
  });
16
- //# sourceMappingURL=matchGist.js.map
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"}