@effect-uai/core 0.14.0 → 0.16.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/README.md +30 -16
- package/dist/{AiError-eLV9t1lU.d.mts → AiError-DvhLIbmd.d.mts} +15 -4
- package/dist/{AiError-eLV9t1lU.d.mts.map → AiError-DvhLIbmd.d.mts.map} +1 -1
- package/dist/{Loop-B54AB1ME.d.mts → Loop-ChpaO-ya.d.mts} +2 -2
- package/dist/{Loop-B54AB1ME.d.mts.map → Loop-ChpaO-ya.d.mts.map} +1 -1
- package/dist/MessengerError-CeK6VAcu.d.mts +64 -0
- package/dist/MessengerError-CeK6VAcu.d.mts.map +1 -0
- package/dist/{Toolkit-DAjJ9Tvl.d.mts → Toolkit-tlL0F2YR.d.mts} +2 -2
- package/dist/{Toolkit-DAjJ9Tvl.d.mts.map → Toolkit-tlL0F2YR.d.mts.map} +1 -1
- package/dist/chunker/Chunker.d.mts +1 -1
- package/dist/domain/AiError.d.mts +2 -2
- package/dist/domain/AiError.mjs +9 -2
- package/dist/domain/AiError.mjs.map +1 -1
- package/dist/domain/Realtime.d.mts +616 -0
- package/dist/domain/Realtime.d.mts.map +1 -0
- package/dist/domain/Realtime.mjs +21 -0
- package/dist/domain/Realtime.mjs.map +1 -0
- package/dist/domain/Transcript.d.mts +17 -3
- package/dist/domain/Transcript.d.mts.map +1 -1
- package/dist/domain/Transcript.mjs +30 -1
- package/dist/domain/Transcript.mjs.map +1 -1
- package/dist/domain/Transcript.test.d.mts +1 -0
- package/dist/domain/Transcript.test.mjs +110 -0
- package/dist/domain/Transcript.test.mjs.map +1 -0
- package/dist/embedding-model/EmbeddingModel.d.mts +1 -1
- package/dist/image-generator/ImageGenerator.d.mts +1 -1
- package/dist/index.d.mts +11 -4
- package/dist/index.mjs +9 -2
- package/dist/job/Job.d.mts +1 -1
- package/dist/language-model/LanguageModel.d.mts +2 -2
- package/dist/loop/Loop.d.mts +1 -1
- package/dist/messenger/Messenger.d.mts +472 -0
- package/dist/messenger/Messenger.d.mts.map +1 -0
- package/dist/messenger/Messenger.mjs +66 -0
- package/dist/messenger/Messenger.mjs.map +1 -0
- package/dist/messenger/MessengerAdapter.d.mts +35 -0
- package/dist/messenger/MessengerAdapter.d.mts.map +1 -0
- package/dist/messenger/MessengerAdapter.mjs +102 -0
- package/dist/messenger/MessengerAdapter.mjs.map +1 -0
- package/dist/messenger/MessengerAdapter.test.d.mts +1 -0
- package/dist/messenger/MessengerAdapter.test.mjs +138 -0
- package/dist/messenger/MessengerAdapter.test.mjs.map +1 -0
- package/dist/messenger/MessengerError.d.mts +2 -0
- package/dist/messenger/MessengerError.mjs +39 -0
- package/dist/messenger/MessengerError.mjs.map +1 -0
- package/dist/music-generator/MusicGenerator.d.mts +1 -1
- package/dist/realtime/RealtimeSession.d.mts +50 -0
- package/dist/realtime/RealtimeSession.d.mts.map +1 -0
- package/dist/realtime/RealtimeSession.mjs +45 -0
- package/dist/realtime/RealtimeSession.mjs.map +1 -0
- package/dist/realtime/RealtimeSession.test.d.mts +1 -0
- package/dist/realtime/RealtimeSession.test.mjs +95 -0
- package/dist/realtime/RealtimeSession.test.mjs.map +1 -0
- package/dist/reranker/Reranker.d.mts +1 -1
- package/dist/research/DeepResearch.d.mts +1 -1
- package/dist/retry/Retry.d.mts +1 -1
- package/dist/speech-synthesizer/SpeechSynthesizer.d.mts +1 -1
- package/dist/streaming/Settle.d.mts +45 -0
- package/dist/streaming/Settle.d.mts.map +1 -0
- package/dist/streaming/Settle.mjs +95 -0
- package/dist/streaming/Settle.mjs.map +1 -0
- package/dist/streaming/Settle.test.d.mts +1 -0
- package/dist/streaming/Settle.test.mjs +252 -0
- package/dist/streaming/Settle.test.mjs.map +1 -0
- package/dist/streaming/WebSocketSession.d.mts +36 -0
- package/dist/streaming/WebSocketSession.d.mts.map +1 -0
- package/dist/streaming/WebSocketSession.mjs +89 -0
- package/dist/streaming/WebSocketSession.mjs.map +1 -0
- package/dist/streaming/WebSocketSession.test.d.mts +1 -0
- package/dist/streaming/WebSocketSession.test.mjs +51 -0
- package/dist/streaming/WebSocketSession.test.mjs.map +1 -0
- package/dist/testing/FakeWebSocket.d.mts +25 -0
- package/dist/testing/FakeWebSocket.d.mts.map +1 -0
- package/dist/testing/FakeWebSocket.mjs +79 -0
- package/dist/testing/FakeWebSocket.mjs.map +1 -0
- package/dist/testing/MockMessenger.d.mts +192 -0
- package/dist/testing/MockMessenger.d.mts.map +1 -0
- package/dist/testing/MockMessenger.mjs +76 -0
- package/dist/testing/MockMessenger.mjs.map +1 -0
- package/dist/testing/MockRealtimeSession.d.mts +30 -0
- package/dist/testing/MockRealtimeSession.d.mts.map +1 -0
- package/dist/testing/MockRealtimeSession.mjs +52 -0
- package/dist/testing/MockRealtimeSession.mjs.map +1 -0
- package/dist/tool/Toolkit.d.mts +1 -1
- package/dist/transcriber/Transcriber.d.mts +1 -1
- package/dist/web-read/WebRead.d.mts +1 -1
- package/dist/web-read/WebReadTool.d.mts +1 -1
- package/dist/web-search/WebSearch.d.mts +1 -1
- package/dist/web-search/WebSearchTool.d.mts +1 -1
- package/package.json +41 -1
- package/src/domain/AiError.ts +11 -0
- package/src/domain/Realtime.ts +101 -0
- package/src/domain/Transcript.test.ts +98 -0
- package/src/domain/Transcript.ts +53 -1
- package/src/index.ts +7 -0
- package/src/messenger/Messenger.ts +293 -0
- package/src/messenger/MessengerAdapter.test.ts +179 -0
- package/src/messenger/MessengerAdapter.ts +189 -0
- package/src/messenger/MessengerError.ts +67 -0
- package/src/realtime/RealtimeSession.test.ts +100 -0
- package/src/realtime/RealtimeSession.ts +77 -0
- package/src/streaming/Settle.test.ts +344 -0
- package/src/streaming/Settle.ts +196 -0
- package/src/streaming/WebSocketSession.test.ts +52 -0
- package/src/streaming/WebSocketSession.ts +132 -0
- package/src/testing/FakeWebSocket.ts +120 -0
- package/src/testing/MockMessenger.ts +147 -0
- package/src/testing/MockRealtimeSession.ts +92 -0
package/README.md
CHANGED
|
@@ -6,22 +6,36 @@ The core thesis: **the user owns the loop**. State is a plain record;
|
|
|
6
6
|
`Loop` events control iteration; the body is a `Stream`. There is no
|
|
7
7
|
agent runtime, no orchestrator, no provider lock-in.
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
- **
|
|
15
|
-
|
|
16
|
-
- **
|
|
17
|
-
|
|
18
|
-
- **
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
9
|
+
## Capabilities
|
|
10
|
+
|
|
11
|
+
Each is a service tag that provider packages implement, so switching
|
|
12
|
+
provider is swapping a Layer:
|
|
13
|
+
|
|
14
|
+
- **Language models** - `LanguageModel`, with `Loop`, `Items`, `Turn`,
|
|
15
|
+
`Tool`, `Toolkit` and `StructuredFormat`
|
|
16
|
+
- **Speech** - `Transcriber` (file and streaming STT),
|
|
17
|
+
`SpeechSynthesizer` (finished and incremental TTS)
|
|
18
|
+
- **Realtime** - `RealtimeSession`: a live conversation with a realtime
|
|
19
|
+
model, voice both ways and camera frames where the provider takes them
|
|
20
|
+
- **Embeddings and retrieval** - `EmbeddingModel`, `Reranker`,
|
|
21
|
+
`Chunker`, `Tokenizer`
|
|
22
|
+
- **Images and music** - `ImageGenerator`, `MusicGenerator`
|
|
23
|
+
- **Web** - `WebSearch`, `WebRead`, `DeepResearch`, `Browser`
|
|
24
|
+
- **Runtime** - `Sandbox` for running model-written code
|
|
25
|
+
- **Messaging** - `Messenger`: the agent as a Telegram, Discord or
|
|
26
|
+
Slack bot
|
|
27
|
+
|
|
28
|
+
Plus the pieces underneath: `AiError` (typed failures across every
|
|
29
|
+
capability), streaming codecs (`SSE`, `JSONL`, `Lines`), `Settle` for
|
|
30
|
+
acting on a pause in a stream of arrivals, `Metrics`, and a mock layer
|
|
31
|
+
per capability under `testing/`.
|
|
32
|
+
|
|
33
|
+
No provider deps. Pair with one or more provider packages:
|
|
34
|
+
[`@effect-uai/openai`](https://www.npmjs.com/package/@effect-uai/openai),
|
|
35
|
+
[`@effect-uai/anthropic`](https://www.npmjs.com/package/@effect-uai/anthropic),
|
|
36
|
+
[`@effect-uai/google`](https://www.npmjs.com/package/@effect-uai/google),
|
|
37
|
+
[`@effect-uai/mistral`](https://www.npmjs.com/package/@effect-uai/mistral)
|
|
38
|
+
and [the rest](https://effect-uai.betalyra.com/providers/).
|
|
25
39
|
|
|
26
40
|
## Install
|
|
27
41
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Duration } from "effect";
|
|
2
2
|
declare namespace AiError_d_exports {
|
|
3
|
-
export { AiError, AuthFailed, AuthSubtype, Cancelled, ContentFiltered, ContextLengthExceeded, GenerationFailed, IncompleteTurn, InvalidRequest, RateLimited, Scope$1 as Scope, Timeout, Unavailable, Unsupported, describe };
|
|
3
|
+
export { AiError, AuthFailed, AuthSubtype, Cancelled, ContentFiltered, ContextLengthExceeded, GenerationFailed, IncompleteTurn, InvalidRequest, RateLimited, Scope$1 as Scope, SessionExpired, Timeout, Unavailable, Unsupported, describe };
|
|
4
4
|
}
|
|
5
5
|
type Scope$1 = "rpm" | "tpm" | "rpd" | "tpd";
|
|
6
6
|
declare const RateLimited_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
@@ -122,12 +122,23 @@ declare class Unsupported extends Unsupported_base<{
|
|
|
122
122
|
capability: string;
|
|
123
123
|
reason?: string;
|
|
124
124
|
}> {}
|
|
125
|
-
|
|
125
|
+
declare const SessionExpired_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
126
|
+
readonly _tag: "SessionExpired";
|
|
127
|
+
} & Readonly<A>;
|
|
128
|
+
/**
|
|
129
|
+
* A long-lived session hit the provider's lifetime cap. Distinct from
|
|
130
|
+
* `Unavailable`: reconnecting works, retrying the same session does not.
|
|
131
|
+
*/
|
|
132
|
+
declare class SessionExpired extends SessionExpired_base<{
|
|
133
|
+
provider: string;
|
|
134
|
+
raw?: unknown;
|
|
135
|
+
}> {}
|
|
136
|
+
type AiError = RateLimited | Unavailable | Timeout | ContentFiltered | ContextLengthExceeded | InvalidRequest | AuthFailed | Cancelled | IncompleteTurn | GenerationFailed | Unsupported | SessionExpired;
|
|
126
137
|
/**
|
|
127
138
|
* Short human-readable description of an error, for logs and model-facing
|
|
128
139
|
* failure messages. Prose, not a contract; branch on `_tag` instead.
|
|
129
140
|
*/
|
|
130
141
|
declare const describe: (e: AiError) => string;
|
|
131
142
|
//#endregion
|
|
132
|
-
export { Cancelled as a, GenerationFailed as c, RateLimited as d, Scope$1 as f,
|
|
133
|
-
//# sourceMappingURL=AiError-
|
|
143
|
+
export { describe as _, Cancelled as a, GenerationFailed as c, RateLimited as d, Scope$1 as f, Unsupported as g, Unavailable as h, AuthSubtype as i, IncompleteTurn as l, Timeout as m, AiError_d_exports as n, ContentFiltered as o, SessionExpired as p, AuthFailed as r, ContextLengthExceeded as s, AiError as t, InvalidRequest as u };
|
|
144
|
+
//# sourceMappingURL=AiError-DvhLIbmd.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AiError-
|
|
1
|
+
{"version":3,"file":"AiError-DvhLIbmd.d.mts","names":[],"sources":["../src/domain/AiError.ts"],"mappings":";;;;KAEY;;;;cAEC,oBAAoB;EAC/B;EACA,aAAa,SAAS;EACtB,QAAQ;EACR;EACA;;;;;cAGW,oBAAoB;EAC/B;EACA,aAAa,SAAS;EACtB;EACA;EACA;;;;;cAGW,gBAAgB;EAC3B;EACA;EACA;;;;;cAGW,wBAAwB;EACnC;EACA;EACA;EACA;;;;;cAGW,8BAA8B;EACzC;EACA;EACA;EACA;;;;;cAGW,uBAAuB;EAClC;EACA;EACA;EACA;;KAGU;;;;cAEC,mBAAmB;EAC9B;EACA,SAAS;EACT;;;;;cAGW,kBAAkB;EAC7B;;;;;;;;;;;cASW,yBAAyB;EACpC;EACA;EACA;EACA;EACA;;;;;;;;;;cAQW,uBAAuB;EAClC;;;;;;;;;;;;;;;;;;;cAiBW,oBAAoB;EAC/B;EACA;EACA;;;;;;;;;cAOW,uBAAuB;EAClC;EACA;;KAGU,UACR,cACA,cACA,UACA,kBACA,wBACA,iBACA,aACA,YACA,iBACA,mBACA,cACA;;;;;cASS,WAAW,GAAG"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { l as IncompleteTurn } from "./AiError-
|
|
1
|
+
import { l as IncompleteTurn } from "./AiError-DvhLIbmd.mjs";
|
|
2
2
|
import { Turn, TurnEvent } from "./domain/Turn.mjs";
|
|
3
3
|
import { Data, Effect, Stream, SubscriptionRef } from "effect";
|
|
4
4
|
declare namespace Loop_d_exports {
|
|
@@ -168,4 +168,4 @@ declare const loopWithState: <S, A, E, R>(initial: S, body: LoopBody<S, A, E, R>
|
|
|
168
168
|
}>;
|
|
169
169
|
//#endregion
|
|
170
170
|
export { StopWith as a, loopOver as c, onTurnComplete as d, stop as f, Stop as i, loopWithState as l, Next as n, Value as o, value as p, Step as r, loop as s, Loop_d_exports as t, next as u };
|
|
171
|
-
//# sourceMappingURL=Loop-
|
|
171
|
+
//# sourceMappingURL=Loop-ChpaO-ya.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Loop-
|
|
1
|
+
{"version":3,"file":"Loop-ChpaO-ya.d.mts","names":[],"sources":["../src/loop/Loop.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;KAwDY,KAAK,GAAG,KAAK,KAAK;EAC5B;aAAkB,OAAO;;EACzB;aAAiB,OAAO;;EACxB;EACA;aAAqB,OAAO;;;;;;;;;;;cAiBf,QAAK,GAAA,GAAA;;;;;GAAE,OAAI,GAAA,GAAA;;;;;GAAE,OAAI,GAAA,GAAA;;GAAE,WAAQ,GAAA,GAAA;;;;;;;cAG7B,QAAS,GAAC,GAAK,MAAI,KAAK;;;;;;cAOxB,OAAQ,GAAC,OAAS,MAAI,OAAO,OAAO,YAAY;;;;;;;;cAUhD,OAAQ,WAAS,QAAU,MAAI,OAAO,OAAO,YAAY;;;;;;;;;;;;;;;;;;;;;;;;KA8BjE,iBAAiB,GAAG,GAAG,IAAI,MAC5B,OAAO,OAAO,KAAK,GAAG,IAAI,IAAI,MAC9B,OAAO,OAAO,OAAO,OAAO,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI;cAE5C;GACV,GAAG,GAAG,YAAY,YACjB,OAAO,MAAM,SAAS,iBAAiB,GAAG,GAAG,IAAI,OAC/C,GAAG,GACL,QAAQ,OAAO,OAAO,WAAW,GAAG,OACjC,OAAO,OAAO,KAAK,YAAY,GAAG,IAAI,IAAI,KAAK,gBAAgB,IAAI;GACvE,GAAG,GAAG,GAAG,GAAG,YAAY,YACvB,QAAQ,OAAO,OAAO,WAAW,GAAG,IACpC,OAAO,MAAM,SAAS,iBAAiB,GAAG,GAAG,IAAI,MAChD,OAAO,OAAO,KAAK,YAAY,GAAG,IAAI,IAAI,KAAK,gBAAgB,IAAI;;KA2EnE,SAAS,GAAG,GAAG,GAAG,MACrB,OAAO,MACJ,OAAO,OAAO,KAAK,GAAG,IAAI,GAAG,KAAK,OAAO,OAAO,OAAO,OAAO,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG;;;;;;;;;;cAW5E;GACV,GAAG,GAAG,GAAG,GAAG,MAAM,SAAS,GAAG,GAAG,GAAG,MAAM,SAAS,MAAM,OAAO,OAAO,GAAG,GAAG;GAC7E,GAAG,GAAG,GAAG,GAAG,SAAS,GAAG,MAAM,SAAS,GAAG,GAAG,GAAG,KAAK,OAAO,OAAO,GAAG,GAAG;;KA2FvE,aAAa,GAAG,GAAG,GAAG,GAAG,MAC5B,OAAO,GACP,OAAO,MACJ,OAAO,OAAO,KAAK,GAAG,IAAI,GAAG,KAAK,OAAO,OAAO,OAAO,OAAO,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;cAyB5E;GACV,GAAG,GAAG,GAAG,GAAG,GACX,SAAS,GACT,MAAM,aAAa,GAAG,GAAG,GAAG,GAAG,MAC7B,IAAI,IAAI,OAAO,OAAO,OAAO,GAAG,IAAI,QAAQ,OAAO,OAAO,GAAG,IAAI,IAAI,IAAI;GAC5E,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAClB,OAAO,OAAO,OAAO,GAAG,IAAI,KAC5B,SAAS,GACT,MAAM,aAAa,GAAG,GAAG,GAAG,GAAG,KAC9B,OAAO,OAAO,GAAG,IAAI,IAAI,IAAI;;;;;;;;;;;;;;;;;;;;;;cAmErB,gBAAiB,GAAG,GAAG,GAAG,GAAC,SAC7B,GAAC,MACJ,SAAS,GAAG,GAAG,GAAG,OACvB,OAAO;WACC,QAAQ,OAAO,OAAO,GAAG,GAAG;WAC5B,OAAO,gBAAgB,gBAAgB"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Duration } from "effect";
|
|
2
|
+
declare namespace MessengerError_d_exports {
|
|
3
|
+
export { MessengerConnectFailed, MessengerError, MessengerOperation, MessengerRateLimited, MessengerRequestFailed, MessengerTransportClosed, MessengerUnsupported, describe };
|
|
4
|
+
}
|
|
5
|
+
declare const MessengerConnectFailed_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
6
|
+
readonly _tag: "MessengerConnectFailed";
|
|
7
|
+
} & Readonly<A>;
|
|
8
|
+
/** Transport never came up: bad token, rejected handshake. Raised at layer build. */
|
|
9
|
+
declare class MessengerConnectFailed extends MessengerConnectFailed_base<{
|
|
10
|
+
provider: string;
|
|
11
|
+
reason: string;
|
|
12
|
+
raw: unknown;
|
|
13
|
+
}> {}
|
|
14
|
+
declare const MessengerTransportClosed_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
15
|
+
readonly _tag: "MessengerTransportClosed";
|
|
16
|
+
} & Readonly<A>;
|
|
17
|
+
/**
|
|
18
|
+
* Inbound transport ended for good (reconnect budget spent, fatal close).
|
|
19
|
+
* Routine reconnects stay inside the adapter and never surface here.
|
|
20
|
+
*/
|
|
21
|
+
declare class MessengerTransportClosed extends MessengerTransportClosed_base<{
|
|
22
|
+
provider: string;
|
|
23
|
+
reason: string;
|
|
24
|
+
raw?: unknown;
|
|
25
|
+
}> {}
|
|
26
|
+
/** Which verb was rejected. */
|
|
27
|
+
type MessengerOperation = "post" | "edit" | "react" | "typing";
|
|
28
|
+
declare const MessengerRequestFailed_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
29
|
+
readonly _tag: "MessengerRequestFailed";
|
|
30
|
+
} & Readonly<A>;
|
|
31
|
+
/** An outbound verb was rejected: permission, unknown chat, text too long, no-op edit. */
|
|
32
|
+
declare class MessengerRequestFailed extends MessengerRequestFailed_base<{
|
|
33
|
+
provider: string;
|
|
34
|
+
operation: MessengerOperation;
|
|
35
|
+
reason: string;
|
|
36
|
+
raw: unknown;
|
|
37
|
+
}> {}
|
|
38
|
+
declare const MessengerRateLimited_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
39
|
+
readonly _tag: "MessengerRateLimited";
|
|
40
|
+
} & Readonly<A>;
|
|
41
|
+
/**
|
|
42
|
+
* Slow down, for this long. Typed rather than retried blindly so callers -
|
|
43
|
+
* `streamViaEdits` above all - decide whether waiting is still worth it.
|
|
44
|
+
*/
|
|
45
|
+
declare class MessengerRateLimited extends MessengerRateLimited_base<{
|
|
46
|
+
provider: string;
|
|
47
|
+
retryAfter: Duration.Duration;
|
|
48
|
+
raw?: unknown;
|
|
49
|
+
}> {}
|
|
50
|
+
declare const MessengerUnsupported_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
51
|
+
readonly _tag: "MessengerUnsupported";
|
|
52
|
+
} & Readonly<A>;
|
|
53
|
+
/** The platform cannot express this at all: off-set reaction emoji, edits on WhatsApp. */
|
|
54
|
+
declare class MessengerUnsupported extends MessengerUnsupported_base<{
|
|
55
|
+
provider: string;
|
|
56
|
+
capability: string;
|
|
57
|
+
reason: string;
|
|
58
|
+
}> {}
|
|
59
|
+
type MessengerError = MessengerConnectFailed | MessengerTransportClosed | MessengerRequestFailed | MessengerRateLimited | MessengerUnsupported;
|
|
60
|
+
/** Human-readable description for logs. Prose, not a contract; branch on `_tag`. */
|
|
61
|
+
declare const describe: (e: MessengerError) => string;
|
|
62
|
+
//#endregion
|
|
63
|
+
export { MessengerRateLimited as a, MessengerUnsupported as c, MessengerOperation as i, describe as l, MessengerError as n, MessengerRequestFailed as o, MessengerError_d_exports as r, MessengerTransportClosed as s, MessengerConnectFailed as t };
|
|
64
|
+
//# sourceMappingURL=MessengerError-CeK6VAcu.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessengerError-CeK6VAcu.d.mts","names":[],"sources":["../src/messenger/MessengerError.ts"],"mappings":";;;;;;;;cAMa,+BAA+B;EAC1C;EACA;EACA;;;;;;;;;cAOW,iCAAiC;EAC5C;EACA;EACA;;;KAIU;;;;;cAGC,+BAA+B;EAC1C;EACA,WAAW;EACX;EACA;;;;;;;;;cAOW,6BAA6B;EACxC;EACA,YAAY,SAAS;EACrB;;;;;;cAIW,6BAA6B;EACxC;EACA;EACA;;KAGU,iBACR,yBACA,2BACA,yBACA,uBACA;;cAGS,WAAW,GAAG"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { o as HistoryItem, y as ToolCall } from "./Items-C7MyrYPX.mjs";
|
|
2
2
|
import { a as Emit, c as SignalTool, d as ToolE, h as ToolR, l as Tool, n as AnyTool, o as InteractionTool, p as ToolFailed, s as ProviderTool, u as ToolDescriptor } from "./Tool-BF78QWtn.mjs";
|
|
3
3
|
import { Turn } from "./domain/Turn.mjs";
|
|
4
|
-
import { r as Step } from "./Loop-
|
|
4
|
+
import { r as Step } from "./Loop-ChpaO-ya.mjs";
|
|
5
5
|
import { t as ToolResult } from "./ToolResult-BsYQRjmW.mjs";
|
|
6
6
|
import { t as ToolEvent } from "./ToolEvent-Di4a723B.mjs";
|
|
7
7
|
import { Cause, Effect, Stream } from "effect";
|
|
@@ -190,4 +190,4 @@ declare const continueWithResults: {
|
|
|
190
190
|
};
|
|
191
191
|
//#endregion
|
|
192
192
|
export { wrap as S, fromArray as _, ToolMap as a, namespace as b, ToolkitR as c, appendToolResults as d, collectResults as f, descriptors as g, describeFailures as h, NoDuplicateNames as i, Toolkit_d_exports as l, continueWithResults as m, ExecuteOptions as n, Toolkit as o, compose as p, Middleware as r, ToolkitE as s, DuplicateToolName as t, UniqueTools as u, make as v, run as x, makeNamespaced as y };
|
|
193
|
-
//# sourceMappingURL=Toolkit-
|
|
193
|
+
//# sourceMappingURL=Toolkit-tlL0F2YR.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Toolkit-
|
|
1
|
+
{"version":3,"file":"Toolkit-tlL0F2YR.d.mts","names":[],"sources":["../src/tool/Toolkit.ts"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as Cancelled, c as GenerationFailed, d as RateLimited, f as Scope, g as
|
|
2
|
-
export { AiError, AuthFailed, AuthSubtype, Cancelled, ContentFiltered, ContextLengthExceeded, GenerationFailed, IncompleteTurn, InvalidRequest, RateLimited, Scope, Timeout, Unavailable, Unsupported, describe };
|
|
1
|
+
import { _ as describe, a as Cancelled, c as GenerationFailed, d as RateLimited, f as Scope, g as Unsupported, h as Unavailable, i as AuthSubtype, l as IncompleteTurn, m as Timeout, o as ContentFiltered, p as SessionExpired, r as AuthFailed, s as ContextLengthExceeded, t as AiError, u as InvalidRequest } from "../AiError-DvhLIbmd.mjs";
|
|
2
|
+
export { AiError, AuthFailed, AuthSubtype, Cancelled, ContentFiltered, ContextLengthExceeded, GenerationFailed, IncompleteTurn, InvalidRequest, RateLimited, Scope, SessionExpired, Timeout, Unavailable, Unsupported, describe };
|
package/dist/domain/AiError.mjs
CHANGED
|
@@ -10,6 +10,7 @@ var AiError_exports = /* @__PURE__ */ __exportAll({
|
|
|
10
10
|
IncompleteTurn: () => IncompleteTurn,
|
|
11
11
|
InvalidRequest: () => InvalidRequest,
|
|
12
12
|
RateLimited: () => RateLimited,
|
|
13
|
+
SessionExpired: () => SessionExpired,
|
|
13
14
|
Timeout: () => Timeout,
|
|
14
15
|
Unavailable: () => Unavailable,
|
|
15
16
|
Unsupported: () => Unsupported,
|
|
@@ -51,6 +52,11 @@ var IncompleteTurn = class extends Data.TaggedError("IncompleteTurn") {};
|
|
|
51
52
|
* (`TtsIncrementalText`, `SttStreaming`) on the R channel instead.
|
|
52
53
|
*/
|
|
53
54
|
var Unsupported = class extends Data.TaggedError("Unsupported") {};
|
|
55
|
+
/**
|
|
56
|
+
* A long-lived session hit the provider's lifetime cap. Distinct from
|
|
57
|
+
* `Unavailable`: reconnecting works, retrying the same session does not.
|
|
58
|
+
*/
|
|
59
|
+
var SessionExpired = class extends Data.TaggedError("SessionExpired") {};
|
|
54
60
|
const withReason = (base, reason) => reason === void 0 ? base : `${base}: ${reason}`;
|
|
55
61
|
/**
|
|
56
62
|
* Short human-readable description of an error, for logs and model-facing
|
|
@@ -67,9 +73,10 @@ const describe = Match.type().pipe(Match.discriminatorsExhaustive("_tag")({
|
|
|
67
73
|
Cancelled: (e) => `the ${e.provider} request was cancelled`,
|
|
68
74
|
IncompleteTurn: () => "the provider stream ended without completing",
|
|
69
75
|
GenerationFailed: (e) => e.message ?? `${e.provider} failed mid-generation`,
|
|
70
|
-
Unsupported: (e) => withReason(`${e.provider} does not support ${e.capability}`, e.reason)
|
|
76
|
+
Unsupported: (e) => withReason(`${e.provider} does not support ${e.capability}`, e.reason),
|
|
77
|
+
SessionExpired: (e) => `the ${e.provider} session reached its lifetime limit`
|
|
71
78
|
}));
|
|
72
79
|
//#endregion
|
|
73
|
-
export { AuthFailed, Cancelled, ContentFiltered, ContextLengthExceeded, GenerationFailed, IncompleteTurn, InvalidRequest, RateLimited, Timeout, Unavailable, Unsupported, describe, AiError_exports as t };
|
|
80
|
+
export { AuthFailed, Cancelled, ContentFiltered, ContextLengthExceeded, GenerationFailed, IncompleteTurn, InvalidRequest, RateLimited, SessionExpired, Timeout, Unavailable, Unsupported, describe, AiError_exports as t };
|
|
74
81
|
|
|
75
82
|
//# sourceMappingURL=AiError.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AiError.mjs","names":[],"sources":["../../src/domain/AiError.ts"],"sourcesContent":["import { Data, Duration, Match } from \"effect\"\n\nexport type Scope = \"rpm\" | \"tpm\" | \"rpd\" | \"tpd\"\n\nexport class RateLimited extends Data.TaggedError(\"RateLimited\")<{\n provider: string\n retryAfter?: Duration.Duration\n scope?: Scope\n requestId?: string\n raw: unknown\n}> {}\n\nexport class Unavailable extends Data.TaggedError(\"Unavailable\")<{\n provider: string\n retryAfter?: Duration.Duration\n status?: number\n requestId?: string\n raw: unknown\n}> {}\n\nexport class Timeout extends Data.TaggedError(\"Timeout\")<{\n provider: string\n requestId?: string\n raw: unknown\n}> {}\n\nexport class ContentFiltered extends Data.TaggedError(\"ContentFiltered\")<{\n provider: string\n reason?: string\n requestId?: string\n raw: unknown\n}> {}\n\nexport class ContextLengthExceeded extends Data.TaggedError(\"ContextLengthExceeded\")<{\n provider: string\n modelLimit?: number\n requested?: number\n raw: unknown\n}> {}\n\nexport class InvalidRequest extends Data.TaggedError(\"InvalidRequest\")<{\n provider: string\n param?: string\n requestId?: string\n raw: unknown\n}> {}\n\nexport type AuthSubtype = \"auth\" | \"permission\" | \"billing\" | \"quota\"\n\nexport class AuthFailed extends Data.TaggedError(\"AuthFailed\")<{\n provider: string\n subtype: AuthSubtype\n raw: unknown\n}> {}\n\nexport class Cancelled extends Data.TaggedError(\"Cancelled\")<{\n provider: string\n}> {}\n\n/**\n * The model errored mid-generation. Distinct from `Unavailable` (transport\n * problem before generation started) and from `IncompleteTurn` (provider\n * stream ended without a terminal event). The provider's own error message,\n * if any, is on `message`.\n */\nexport class GenerationFailed extends Data.TaggedError(\"GenerationFailed\")<{\n provider: string\n code?: string\n message?: string\n requestId?: string\n raw: unknown\n}> {}\n\n/**\n * The provider's delta stream ended without a terminal `TurnComplete`.\n * Indicates a misbehaving provider or a connection that dropped mid-flight.\n * Non-terminal deltas seen so far have already been emitted downstream.\n */\nexport class IncompleteTurn extends Data.TaggedError(\"IncompleteTurn\")<{\n raw?: unknown\n}> {}\n\n/**\n * The provider does not implement the requested capability for this\n * specific request. Distinct from `InvalidRequest` (the request shape is\n * malformed) and `AuthFailed` (the request was rejected).\n *\n * Reserved for request-data-dependent gaps where the provider supports\n * the method in general but not for these inputs — e.g. Google's\n * `streamSynthesisFrom` works only for Chirp 3 HD voices; calling it\n * with a Neural2 voice ID fails `Unsupported`.\n *\n * Blanket provider-level gaps (e.g. OpenAI has no incremental-text-in\n * TTS at all) are gated at compile time via capability marker tags\n * (`TtsIncrementalText`, `SttStreaming`) on the R channel instead.\n */\nexport class Unsupported extends Data.TaggedError(\"Unsupported\")<{\n provider: string\n capability: string\n reason?: string\n}> {}\n\nexport type AiError =\n | RateLimited\n | Unavailable\n | Timeout\n | ContentFiltered\n | ContextLengthExceeded\n | InvalidRequest\n | AuthFailed\n | Cancelled\n | IncompleteTurn\n | GenerationFailed\n | Unsupported\n\nconst withReason = (base: string, reason: string | undefined): string =>\n reason === undefined ? base : `${base}: ${reason}`\n\n/**\n * Short human-readable description of an error, for logs and model-facing\n * failure messages. Prose, not a contract; branch on `_tag` instead.\n */\nexport const describe: (e: AiError) => string = Match.type<AiError>().pipe(\n Match.discriminatorsExhaustive(\"_tag\")({\n RateLimited: (e) => `rate limited by ${e.provider}; try again later`,\n Unavailable: (e) => `${e.provider} is temporarily unavailable`,\n Timeout: (e) => `the ${e.provider} request timed out`,\n ContentFiltered: (e) => withReason(`blocked by ${e.provider}'s content filter`, e.reason),\n ContextLengthExceeded: (e) => `the request exceeded ${e.provider}'s context limit`,\n InvalidRequest: (e) =>\n e.param === undefined\n ? `${e.provider} rejected the request`\n : `${e.provider} rejected the request (param: ${e.param})`,\n AuthFailed: (e) => `authentication against ${e.provider} failed (${e.subtype})`,\n Cancelled: (e) => `the ${e.provider} request was cancelled`,\n IncompleteTurn: () => \"the provider stream ended without completing\",\n GenerationFailed: (e) => e.message ?? `${e.provider} failed mid-generation`,\n Unsupported: (e) => withReason(`${e.provider} does not support ${e.capability}`, e.reason),\n }),\n)\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"AiError.mjs","names":[],"sources":["../../src/domain/AiError.ts"],"sourcesContent":["import { Data, Duration, Match } from \"effect\"\n\nexport type Scope = \"rpm\" | \"tpm\" | \"rpd\" | \"tpd\"\n\nexport class RateLimited extends Data.TaggedError(\"RateLimited\")<{\n provider: string\n retryAfter?: Duration.Duration\n scope?: Scope\n requestId?: string\n raw: unknown\n}> {}\n\nexport class Unavailable extends Data.TaggedError(\"Unavailable\")<{\n provider: string\n retryAfter?: Duration.Duration\n status?: number\n requestId?: string\n raw: unknown\n}> {}\n\nexport class Timeout extends Data.TaggedError(\"Timeout\")<{\n provider: string\n requestId?: string\n raw: unknown\n}> {}\n\nexport class ContentFiltered extends Data.TaggedError(\"ContentFiltered\")<{\n provider: string\n reason?: string\n requestId?: string\n raw: unknown\n}> {}\n\nexport class ContextLengthExceeded extends Data.TaggedError(\"ContextLengthExceeded\")<{\n provider: string\n modelLimit?: number\n requested?: number\n raw: unknown\n}> {}\n\nexport class InvalidRequest extends Data.TaggedError(\"InvalidRequest\")<{\n provider: string\n param?: string\n requestId?: string\n raw: unknown\n}> {}\n\nexport type AuthSubtype = \"auth\" | \"permission\" | \"billing\" | \"quota\"\n\nexport class AuthFailed extends Data.TaggedError(\"AuthFailed\")<{\n provider: string\n subtype: AuthSubtype\n raw: unknown\n}> {}\n\nexport class Cancelled extends Data.TaggedError(\"Cancelled\")<{\n provider: string\n}> {}\n\n/**\n * The model errored mid-generation. Distinct from `Unavailable` (transport\n * problem before generation started) and from `IncompleteTurn` (provider\n * stream ended without a terminal event). The provider's own error message,\n * if any, is on `message`.\n */\nexport class GenerationFailed extends Data.TaggedError(\"GenerationFailed\")<{\n provider: string\n code?: string\n message?: string\n requestId?: string\n raw: unknown\n}> {}\n\n/**\n * The provider's delta stream ended without a terminal `TurnComplete`.\n * Indicates a misbehaving provider or a connection that dropped mid-flight.\n * Non-terminal deltas seen so far have already been emitted downstream.\n */\nexport class IncompleteTurn extends Data.TaggedError(\"IncompleteTurn\")<{\n raw?: unknown\n}> {}\n\n/**\n * The provider does not implement the requested capability for this\n * specific request. Distinct from `InvalidRequest` (the request shape is\n * malformed) and `AuthFailed` (the request was rejected).\n *\n * Reserved for request-data-dependent gaps where the provider supports\n * the method in general but not for these inputs — e.g. Google's\n * `streamSynthesisFrom` works only for Chirp 3 HD voices; calling it\n * with a Neural2 voice ID fails `Unsupported`.\n *\n * Blanket provider-level gaps (e.g. OpenAI has no incremental-text-in\n * TTS at all) are gated at compile time via capability marker tags\n * (`TtsIncrementalText`, `SttStreaming`) on the R channel instead.\n */\nexport class Unsupported extends Data.TaggedError(\"Unsupported\")<{\n provider: string\n capability: string\n reason?: string\n}> {}\n\n/**\n * A long-lived session hit the provider's lifetime cap. Distinct from\n * `Unavailable`: reconnecting works, retrying the same session does not.\n */\nexport class SessionExpired extends Data.TaggedError(\"SessionExpired\")<{\n provider: string\n raw?: unknown\n}> {}\n\nexport type AiError =\n | RateLimited\n | Unavailable\n | Timeout\n | ContentFiltered\n | ContextLengthExceeded\n | InvalidRequest\n | AuthFailed\n | Cancelled\n | IncompleteTurn\n | GenerationFailed\n | Unsupported\n | SessionExpired\n\nconst withReason = (base: string, reason: string | undefined): string =>\n reason === undefined ? base : `${base}: ${reason}`\n\n/**\n * Short human-readable description of an error, for logs and model-facing\n * failure messages. Prose, not a contract; branch on `_tag` instead.\n */\nexport const describe: (e: AiError) => string = Match.type<AiError>().pipe(\n Match.discriminatorsExhaustive(\"_tag\")({\n RateLimited: (e) => `rate limited by ${e.provider}; try again later`,\n Unavailable: (e) => `${e.provider} is temporarily unavailable`,\n Timeout: (e) => `the ${e.provider} request timed out`,\n ContentFiltered: (e) => withReason(`blocked by ${e.provider}'s content filter`, e.reason),\n ContextLengthExceeded: (e) => `the request exceeded ${e.provider}'s context limit`,\n InvalidRequest: (e) =>\n e.param === undefined\n ? `${e.provider} rejected the request`\n : `${e.provider} rejected the request (param: ${e.param})`,\n AuthFailed: (e) => `authentication against ${e.provider} failed (${e.subtype})`,\n Cancelled: (e) => `the ${e.provider} request was cancelled`,\n IncompleteTurn: () => \"the provider stream ended without completing\",\n GenerationFailed: (e) => e.message ?? `${e.provider} failed mid-generation`,\n Unsupported: (e) => withReason(`${e.provider} does not support ${e.capability}`, e.reason),\n SessionExpired: (e) => `the ${e.provider} session reached its lifetime limit`,\n }),\n)\n"],"mappings":";;;;;;;;;;;;;;;;;;AAIA,IAAa,cAAb,cAAiC,KAAK,YAAY,aAAa,CAAC,CAM7D,CAAC;AAEJ,IAAa,cAAb,cAAiC,KAAK,YAAY,aAAa,CAAC,CAM7D,CAAC;AAEJ,IAAa,UAAb,cAA6B,KAAK,YAAY,SAAS,CAAC,CAIrD,CAAC;AAEJ,IAAa,kBAAb,cAAqC,KAAK,YAAY,iBAAiB,CAAC,CAKrE,CAAC;AAEJ,IAAa,wBAAb,cAA2C,KAAK,YAAY,uBAAuB,CAAC,CAKjF,CAAC;AAEJ,IAAa,iBAAb,cAAoC,KAAK,YAAY,gBAAgB,CAAC,CAKnE,CAAC;AAIJ,IAAa,aAAb,cAAgC,KAAK,YAAY,YAAY,CAAC,CAI3D,CAAC;AAEJ,IAAa,YAAb,cAA+B,KAAK,YAAY,WAAW,CAAC,CAEzD,CAAC;;;;;;;AAQJ,IAAa,mBAAb,cAAsC,KAAK,YAAY,kBAAkB,CAAC,CAMvE,CAAC;;;;;;AAOJ,IAAa,iBAAb,cAAoC,KAAK,YAAY,gBAAgB,CAAC,CAEnE,CAAC;;;;;;;;;;;;;;;AAgBJ,IAAa,cAAb,cAAiC,KAAK,YAAY,aAAa,CAAC,CAI7D,CAAC;;;;;AAMJ,IAAa,iBAAb,cAAoC,KAAK,YAAY,gBAAgB,CAAC,CAGnE,CAAC;AAgBJ,MAAM,cAAc,MAAc,WAChC,WAAW,KAAA,IAAY,OAAO,GAAG,KAAK,IAAI;;;;;AAM5C,MAAa,WAAmC,MAAM,KAAc,CAAC,CAAC,KACpE,MAAM,yBAAyB,MAAM,CAAC,CAAC;CACrC,cAAc,MAAM,mBAAmB,EAAE,SAAS;CAClD,cAAc,MAAM,GAAG,EAAE,SAAS;CAClC,UAAU,MAAM,OAAO,EAAE,SAAS;CAClC,kBAAkB,MAAM,WAAW,cAAc,EAAE,SAAS,oBAAoB,EAAE,MAAM;CACxF,wBAAwB,MAAM,wBAAwB,EAAE,SAAS;CACjE,iBAAiB,MACf,EAAE,UAAU,KAAA,IACR,GAAG,EAAE,SAAS,yBACd,GAAG,EAAE,SAAS,gCAAgC,EAAE,MAAM;CAC5D,aAAa,MAAM,0BAA0B,EAAE,SAAS,WAAW,EAAE,QAAQ;CAC7E,YAAY,MAAM,OAAO,EAAE,SAAS;CACpC,sBAAsB;CACtB,mBAAmB,MAAM,EAAE,WAAW,GAAG,EAAE,SAAS;CACpD,cAAc,MAAM,WAAW,GAAG,EAAE,SAAS,oBAAoB,EAAE,cAAc,EAAE,MAAM;CACzF,iBAAiB,MAAM,OAAO,EAAE,SAAS;AAC3C,CAAC,CACH"}
|