@effect-uai/core 0.3.0 → 0.5.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.
Files changed (169) hide show
  1. package/dist/{AiError-CBuPHVKA.d.mts → AiError-CAX_48RU.d.mts} +27 -5
  2. package/dist/{AiError-CBuPHVKA.d.mts.map → AiError-CAX_48RU.d.mts.map} +1 -1
  3. package/dist/Audio-BfCTGnH3.d.mts +61 -0
  4. package/dist/Audio-BfCTGnH3.d.mts.map +1 -0
  5. package/dist/{Image-BZmKfIdq.d.mts → Image-HNmMpMTh.d.mts} +1 -1
  6. package/dist/{Image-BZmKfIdq.d.mts.map → Image-HNmMpMTh.d.mts.map} +1 -1
  7. package/dist/{Items-CB8Bo3FI.d.mts → Items-DqbaJoz7.d.mts} +5 -5
  8. package/dist/{Items-CB8Bo3FI.d.mts.map → Items-DqbaJoz7.d.mts.map} +1 -1
  9. package/dist/{StructuredFormat-BWq5Hd1O.d.mts → StructuredFormat-BbN4dosH.d.mts} +11 -4
  10. package/dist/StructuredFormat-BbN4dosH.d.mts.map +1 -0
  11. package/dist/{Tool-DjVufH7i.d.mts → Tool-Y0__Py1H.d.mts} +20 -4
  12. package/dist/Tool-Y0__Py1H.d.mts.map +1 -0
  13. package/dist/Turn-ChbL2foc.d.mts +388 -0
  14. package/dist/Turn-ChbL2foc.d.mts.map +1 -0
  15. package/dist/domain/AiError.d.mts +2 -2
  16. package/dist/domain/AiError.mjs +19 -3
  17. package/dist/domain/AiError.mjs.map +1 -1
  18. package/dist/domain/Audio.d.mts +2 -0
  19. package/dist/domain/Audio.mjs +14 -0
  20. package/dist/domain/Audio.mjs.map +1 -0
  21. package/dist/domain/Image.d.mts +1 -1
  22. package/dist/domain/Items.d.mts +1 -1
  23. package/dist/domain/Items.mjs +1 -1
  24. package/dist/domain/Items.mjs.map +1 -1
  25. package/dist/domain/Music.d.mts +116 -0
  26. package/dist/domain/Music.d.mts.map +1 -0
  27. package/dist/domain/Music.mjs +29 -0
  28. package/dist/domain/Music.mjs.map +1 -0
  29. package/dist/domain/Transcript.d.mts +95 -0
  30. package/dist/domain/Transcript.d.mts.map +1 -0
  31. package/dist/domain/Transcript.mjs +22 -0
  32. package/dist/domain/Transcript.mjs.map +1 -0
  33. package/dist/domain/Turn.d.mts +2 -2
  34. package/dist/domain/Turn.mjs +22 -4
  35. package/dist/domain/Turn.mjs.map +1 -1
  36. package/dist/domain/Turn.test.d.mts +1 -0
  37. package/dist/domain/Turn.test.mjs +136 -0
  38. package/dist/domain/Turn.test.mjs.map +1 -0
  39. package/dist/embedding-model/Embedding.d.mts +15 -3
  40. package/dist/embedding-model/Embedding.d.mts.map +1 -1
  41. package/dist/embedding-model/Embedding.mjs.map +1 -1
  42. package/dist/embedding-model/EmbeddingModel.d.mts +33 -17
  43. package/dist/embedding-model/EmbeddingModel.d.mts.map +1 -1
  44. package/dist/embedding-model/EmbeddingModel.mjs.map +1 -1
  45. package/dist/embedding-model/EmbeddingModel.test.d.mts +1 -0
  46. package/dist/embedding-model/EmbeddingModel.test.mjs +59 -0
  47. package/dist/embedding-model/EmbeddingModel.test.mjs.map +1 -0
  48. package/dist/index.d.mts +13 -7
  49. package/dist/index.mjs +7 -1
  50. package/dist/language-model/LanguageModel.d.mts +30 -8
  51. package/dist/language-model/LanguageModel.d.mts.map +1 -1
  52. package/dist/language-model/LanguageModel.mjs +33 -3
  53. package/dist/language-model/LanguageModel.mjs.map +1 -1
  54. package/dist/language-model/LanguageModel.test.d.mts +1 -0
  55. package/dist/language-model/LanguageModel.test.mjs +143 -0
  56. package/dist/language-model/LanguageModel.test.mjs.map +1 -0
  57. package/dist/loop/Loop.d.mts +94 -11
  58. package/dist/loop/Loop.d.mts.map +1 -1
  59. package/dist/loop/Loop.mjs +92 -26
  60. package/dist/loop/Loop.mjs.map +1 -1
  61. package/dist/loop/Loop.test.mjs +171 -3
  62. package/dist/loop/Loop.test.mjs.map +1 -1
  63. package/dist/music-generator/MusicGenerator.d.mts +77 -0
  64. package/dist/music-generator/MusicGenerator.d.mts.map +1 -0
  65. package/dist/music-generator/MusicGenerator.mjs +51 -0
  66. package/dist/music-generator/MusicGenerator.mjs.map +1 -0
  67. package/dist/music-generator/MusicGenerator.test.d.mts +1 -0
  68. package/dist/music-generator/MusicGenerator.test.mjs +154 -0
  69. package/dist/music-generator/MusicGenerator.test.mjs.map +1 -0
  70. package/dist/observability/Metrics.d.mts +1 -1
  71. package/dist/observability/Metrics.mjs +1 -1
  72. package/dist/observability/Metrics.mjs.map +1 -1
  73. package/dist/speech-synthesizer/SpeechSynthesizer.d.mts +96 -0
  74. package/dist/speech-synthesizer/SpeechSynthesizer.d.mts.map +1 -0
  75. package/dist/speech-synthesizer/SpeechSynthesizer.mjs +48 -0
  76. package/dist/speech-synthesizer/SpeechSynthesizer.mjs.map +1 -0
  77. package/dist/speech-synthesizer/SpeechSynthesizer.test.d.mts +1 -0
  78. package/dist/speech-synthesizer/SpeechSynthesizer.test.mjs +112 -0
  79. package/dist/speech-synthesizer/SpeechSynthesizer.test.mjs.map +1 -0
  80. package/dist/streaming/JSONL.d.mts +10 -3
  81. package/dist/streaming/JSONL.d.mts.map +1 -1
  82. package/dist/streaming/JSONL.mjs +15 -9
  83. package/dist/streaming/JSONL.mjs.map +1 -1
  84. package/dist/structured-format/StructuredFormat.d.mts +2 -2
  85. package/dist/structured-format/StructuredFormat.mjs +9 -1
  86. package/dist/structured-format/StructuredFormat.mjs.map +1 -1
  87. package/dist/structured-format/StructuredFormat.test.d.mts +1 -0
  88. package/dist/structured-format/StructuredFormat.test.mjs +70 -0
  89. package/dist/structured-format/StructuredFormat.test.mjs.map +1 -0
  90. package/dist/testing/MockMusicGenerator.d.mts +39 -0
  91. package/dist/testing/MockMusicGenerator.d.mts.map +1 -0
  92. package/dist/testing/MockMusicGenerator.mjs +96 -0
  93. package/dist/testing/MockMusicGenerator.mjs.map +1 -0
  94. package/dist/testing/MockProvider.d.mts +23 -18
  95. package/dist/testing/MockProvider.d.mts.map +1 -1
  96. package/dist/testing/MockProvider.mjs +56 -72
  97. package/dist/testing/MockProvider.mjs.map +1 -1
  98. package/dist/testing/MockSpeechSynthesizer.d.mts +37 -0
  99. package/dist/testing/MockSpeechSynthesizer.d.mts.map +1 -0
  100. package/dist/testing/MockSpeechSynthesizer.mjs +95 -0
  101. package/dist/testing/MockSpeechSynthesizer.mjs.map +1 -0
  102. package/dist/testing/MockTranscriber.d.mts +37 -0
  103. package/dist/testing/MockTranscriber.d.mts.map +1 -0
  104. package/dist/testing/MockTranscriber.mjs +77 -0
  105. package/dist/testing/MockTranscriber.mjs.map +1 -0
  106. package/dist/tool/HistoryCheck.d.mts +1 -1
  107. package/dist/tool/Outcome.d.mts +1 -1
  108. package/dist/tool/Resolvers.d.mts +65 -8
  109. package/dist/tool/Resolvers.d.mts.map +1 -1
  110. package/dist/tool/Resolvers.mjs +8 -12
  111. package/dist/tool/Resolvers.mjs.map +1 -1
  112. package/dist/tool/Resolvers.test.mjs +6 -5
  113. package/dist/tool/Resolvers.test.mjs.map +1 -1
  114. package/dist/tool/Tool.d.mts +2 -2
  115. package/dist/tool/Tool.mjs +18 -1
  116. package/dist/tool/Tool.mjs.map +1 -1
  117. package/dist/tool/Tool.test.d.mts +1 -0
  118. package/dist/tool/Tool.test.mjs +66 -0
  119. package/dist/tool/Tool.test.mjs.map +1 -0
  120. package/dist/tool/Toolkit.d.mts +4 -6
  121. package/dist/tool/Toolkit.d.mts.map +1 -1
  122. package/dist/tool/Toolkit.mjs +14 -43
  123. package/dist/tool/Toolkit.mjs.map +1 -1
  124. package/dist/transcriber/Transcriber.d.mts +101 -0
  125. package/dist/transcriber/Transcriber.d.mts.map +1 -0
  126. package/dist/transcriber/Transcriber.mjs +49 -0
  127. package/dist/transcriber/Transcriber.mjs.map +1 -0
  128. package/dist/transcriber/Transcriber.test.d.mts +1 -0
  129. package/dist/transcriber/Transcriber.test.mjs +130 -0
  130. package/dist/transcriber/Transcriber.test.mjs.map +1 -0
  131. package/package.json +37 -1
  132. package/src/domain/AiError.ts +22 -1
  133. package/src/domain/Audio.ts +88 -0
  134. package/src/domain/Items.ts +1 -1
  135. package/src/domain/Music.ts +121 -0
  136. package/src/domain/Transcript.ts +83 -0
  137. package/src/domain/Turn.test.ts +141 -0
  138. package/src/domain/Turn.ts +50 -43
  139. package/src/embedding-model/Embedding.ts +23 -0
  140. package/src/embedding-model/EmbeddingModel.test.ts +92 -0
  141. package/src/embedding-model/EmbeddingModel.ts +30 -20
  142. package/src/index.ts +6 -0
  143. package/src/language-model/LanguageModel.test.ts +170 -0
  144. package/src/language-model/LanguageModel.ts +64 -1
  145. package/src/loop/Loop.test.ts +256 -3
  146. package/src/loop/Loop.ts +225 -49
  147. package/src/music-generator/MusicGenerator.test.ts +170 -0
  148. package/src/music-generator/MusicGenerator.ts +123 -0
  149. package/src/observability/Metrics.ts +1 -1
  150. package/src/speech-synthesizer/SpeechSynthesizer.test.ts +141 -0
  151. package/src/speech-synthesizer/SpeechSynthesizer.ts +131 -0
  152. package/src/streaming/JSONL.ts +16 -13
  153. package/src/structured-format/StructuredFormat.test.ts +105 -0
  154. package/src/structured-format/StructuredFormat.ts +14 -1
  155. package/src/testing/MockMusicGenerator.ts +168 -0
  156. package/src/testing/MockProvider.ts +126 -105
  157. package/src/testing/MockSpeechSynthesizer.ts +163 -0
  158. package/src/testing/MockTranscriber.ts +137 -0
  159. package/src/tool/Resolvers.test.ts +8 -5
  160. package/src/tool/Resolvers.ts +17 -19
  161. package/src/tool/Tool.test.ts +105 -0
  162. package/src/tool/Tool.ts +20 -0
  163. package/src/tool/Toolkit.ts +49 -50
  164. package/src/transcriber/Transcriber.test.ts +125 -0
  165. package/src/transcriber/Transcriber.ts +127 -0
  166. package/dist/StructuredFormat-BWq5Hd1O.d.mts.map +0 -1
  167. package/dist/Tool-DjVufH7i.d.mts.map +0 -1
  168. package/dist/Turn-OPaILVIB.d.mts +0 -194
  169. package/dist/Turn-OPaILVIB.d.mts.map +0 -1
@@ -0,0 +1,127 @@
1
+ import { Context, Effect, Function, Stream } from "effect"
2
+ import * as AiError from "../domain/AiError.js"
3
+ import type { AudioFormat, AudioSource } from "../domain/Audio.js"
4
+ import type { TranscriptEvent, TranscriptResult } from "../domain/Transcript.js"
5
+
6
+ /**
7
+ * Cross-provider sync transcription request. Provider-specific
8
+ * extensions (Deepgram `keyterm[]`, ElevenLabs `diarize`, Google
9
+ * `adaptation`, …) live on each provider's typed request which extends
10
+ * this and narrows `model`.
11
+ */
12
+ export type CommonTranscribeRequest = {
13
+ readonly audio: AudioSource
14
+ /** Model identifier. Each provider narrows to its typed literal union. */
15
+ readonly model: string
16
+ /** ISO-639-1 / BCP-47. Omit for autodetection (where supported). */
17
+ readonly language?: string
18
+ /**
19
+ * Vocab biasing. Single-string covers OpenAI/Whisper-style prompts;
20
+ * `terms[]` covers Deepgram `keyterm`, Google adaptation phrases, AWS
21
+ * `vocabularyName`. Providers ignore what they don't support.
22
+ */
23
+ readonly prompt?: string | { readonly terms: ReadonlyArray<string> }
24
+ readonly diarization?: boolean
25
+ readonly wordTimestamps?: boolean
26
+ }
27
+
28
+ /**
29
+ * Streaming-transcription request. `inputFormat` declares what the
30
+ * bytes in the input stream will look like — providers reject
31
+ * mismatches at stream startup with `AiError.InvalidRequest`.
32
+ */
33
+ export type CommonStreamTranscribeRequest = Omit<CommonTranscribeRequest, "audio"> & {
34
+ readonly inputFormat: AudioFormat
35
+ readonly interimResults?: boolean
36
+ readonly vadEvents?: boolean
37
+ }
38
+
39
+ export type TranscriberService = {
40
+ /**
41
+ * One-shot transcription. Universal — AWS Transcribe (which has no
42
+ * native sync endpoint) emulates this by draining a streaming session
43
+ * internally.
44
+ */
45
+ readonly transcribe: (
46
+ request: CommonTranscribeRequest,
47
+ ) => Effect.Effect<TranscriptResult, AiError.AiError>
48
+ /**
49
+ * Live transcription as a Stream transformer. Consumes audio bytes
50
+ * from `audioIn`; emits `TranscriptEvent`s as they arrive. The
51
+ * underlying WS / gRPC connection is acquired on first pull and
52
+ * released when the output stream is finalized (success, failure, or
53
+ * interruption) via `Stream.scoped` — no explicit Scope handling at
54
+ * the call site.
55
+ *
56
+ * Gated by the `SttStreaming` capability marker on the top-level
57
+ * helper — providers without streaming-STT support don't ship the
58
+ * marker, so calls fail at `Effect.provide` with a type error.
59
+ */
60
+ readonly streamTranscriptionFrom: <E, R>(
61
+ audioIn: Stream.Stream<Uint8Array, E, R>,
62
+ request: CommonStreamTranscribeRequest,
63
+ ) => Stream.Stream<TranscriptEvent, AiError.AiError | E, R>
64
+ }
65
+
66
+ export class Transcriber extends Context.Service<Transcriber, TranscriberService>()(
67
+ "@betalyra/effect-uai/Transcriber",
68
+ ) {}
69
+
70
+ /**
71
+ * Capability marker — provided by provider layers whose
72
+ * `streamTranscriptionFrom` is wired up at the wire level. Azure does
73
+ * not ship it (streaming-STT is SDK-internal). Calling
74
+ * `streamTranscriptionFrom` while only Azure's Layer is in scope fails
75
+ * at `Effect.provide` with a type error, not at runtime.
76
+ *
77
+ * Phantom — the value is `void`; providers register with
78
+ * `Layer.succeed(SttStreaming, undefined)`.
79
+ */
80
+ export class SttStreaming extends Context.Service<SttStreaming, void>()(
81
+ "@betalyra/effect-uai/capability/SttStreaming",
82
+ ) {}
83
+
84
+ /** One-shot transcription. */
85
+ export const transcribe = (
86
+ request: CommonTranscribeRequest,
87
+ ): Effect.Effect<TranscriptResult, AiError.AiError, Transcriber> =>
88
+ Effect.flatMap(Transcriber.asEffect(), (t) => t.transcribe(request))
89
+
90
+ /**
91
+ * Live transcription. Dual-arity: pipeable (data-last) and direct
92
+ * (data-first). Requires `SttStreaming` in R — providers without
93
+ * streaming support are a type error at provide time.
94
+ *
95
+ * @example
96
+ * ```ts
97
+ * // Pipeable — composes with other Stream operators
98
+ * mic.frames.pipe(
99
+ * Transcriber.streamTranscriptionFrom(req),
100
+ * Stream.filter((e) => e._tag === "final"),
101
+ * )
102
+ *
103
+ * // Direct
104
+ * Transcriber.streamTranscriptionFrom(mic.frames, req)
105
+ * ```
106
+ */
107
+ export const streamTranscriptionFrom: {
108
+ (
109
+ request: CommonStreamTranscribeRequest,
110
+ ): <E, R>(
111
+ audioIn: Stream.Stream<Uint8Array, E, R>,
112
+ ) => Stream.Stream<TranscriptEvent, AiError.AiError | E, R | Transcriber | SttStreaming>
113
+ <E, R>(
114
+ audioIn: Stream.Stream<Uint8Array, E, R>,
115
+ request: CommonStreamTranscribeRequest,
116
+ ): Stream.Stream<TranscriptEvent, AiError.AiError | E, R | Transcriber | SttStreaming>
117
+ } = Function.dual(
118
+ 2,
119
+ <E, R>(audioIn: Stream.Stream<Uint8Array, E, R>, request: CommonStreamTranscribeRequest) =>
120
+ Stream.unwrap(
121
+ Effect.gen(function* () {
122
+ const t = yield* Transcriber.asEffect()
123
+ yield* SttStreaming.asEffect()
124
+ return t.streamTranscriptionFrom(audioIn, request)
125
+ }),
126
+ ),
127
+ )
@@ -1 +0,0 @@
1
- {"version":3,"file":"StructuredFormat-BWq5Hd1O.d.mts","names":[],"sources":["../src/structured-format/StructuredFormat.ts"],"mappings":";;;;;;;;;;;;;;;KAaY,gBAAA,qBAAqC,gBAAA,UAA0B,MAAA,IACzE,oBAAA,UAA8B,MAAA;;;;;;KAOpB,gBAAA;EAAA,SACD,IAAA;EAAA,SACA,WAAA;EAAA,SACA,MAAA,EAAQ,gBAAA,CAAiB,CAAA;EAXxB;;;;EAAA,SAgBD,MAAA;AAAA;;KAIC,WAAA;EAAA,SACD,IAAA,EAAM,aAAA;EAAA,SACN,OAAA;AAAA;AAAA,cACV,0BAAA;;;;;AAfD;;cAyBa,qBAAA,SAA8B,0BAAA;EAAA,SAChC,GAAA;EAAA,SACA,MAAA,EAAQ,aAAA,CAAc,WAAA;AAAA;AAAA,cAC5B,mBAAA;;;;;;AAhBL;cAsBa,cAAA,SAAuB,mBAAA;EAAA,SACzB,GAAA;EAAA,SACA,KAAA;AAAA;;;;AArBV;;cAiCY,gBAAA,aAA8B,MAAA,CAAO,KAAA,wBAChD,MAAA,EAAQ,CAAA,EACR,OAAA;EAAA,SACW,IAAA;EAAA,SACA,WAAA;EAAA,SACA,MAAA;AAAA,MAEV,gBAAA,CAAiB,CAAA;;;;;;cAyCP,MAAA,MACP,MAAA,EAAQ,gBAAA,CAAiB,CAAA,OAC5B,GAAA,cAAe,MAAA,CAAO,MAAA,CAAO,CAAA,EAAG,qBAAA;;;;;;cAoBtB,SAAA,MACP,MAAA,EAAQ,gBAAA,CAAiB,CAAA,OAC5B,GAAA,aAAc,MAAA,CAAO,MAAA,CAAO,CAAA,EAAG,cAAA,GAAiB,qBAAA;;;;;cAatC,eAAA,MACP,MAAA,EAAQ,gBAAA,CAAiB,CAAA,aAE3B,IAAA,EAAM,MAAA,CAAO,MAAA,SAAe,CAAA,EAAG,CAAA,MAC9B,MAAA,CAAO,MAAA,CAAO,CAAA,EAAG,CAAA,GAAI,cAAA,GAAiB,qBAAA,EAAuB,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Tool-DjVufH7i.d.mts","names":[],"sources":["../src/tool/Tool.ts"],"mappings":";;;;;;;;;cAE0E,cAAA;;;;;;cAG7D,SAAA,SAAkB,cAAA;;;;;;;;;;KAmBnB,eAAA,oBAAmC,gBAAA,UAA0B,KAAA,IACvE,oBAAA,UAA8B,KAAA;;;AAvB0C;;;cA8B7D,gBAAA,aAA8B,MAAA,CAAO,KAAA,wBAChD,MAAA,EAAQ,CAAA,KACP,CAAA,GAAI,eAAA,CAAgB,CAAA;AAAA,KAIX,IAAA;EAAA,SACD,IAAA,EAAM,IAAA;EAAA,SACN,WAAA;EAAA,SACA,WAAA,EAAa,eAAA,CAAgB,KAAA;EAAA,SAC7B,GAAA,GAAM,KAAA,EAAO,KAAA,KAAU,MAAA,CAAO,MAAA,CAAO,MAAA,WAAiB,CAAA;;;;;;;WAOtD,MAAA;AAAA;;;;;;KAQC,cAAA;EAAA,SACD,IAAA;EAAA,SACA,WAAA;EAAA,SACA,WAAA,EAAa,MAAA;EAAA,SACb,MAAA;AAAA;AAAA,cAGE,IAAA,kDACX,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,CAAA,MAC/B,IAAA,CAAK,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,CAAA;AAAA,KAWjB,aAAA;EAAA,SACD,KAAA;EAAA,SACA,IAAA,EAAM,IAAA;EAAA,SACN,WAAA;EAAA,SACA,WAAA,EAAa,eAAA,CAAgB,KAAA;EAAA,SAC7B,GAAA,GAAM,KAAA,EAAO,KAAA,KAAU,MAAA,CAAO,MAAA,CAAO,KAAA,WAAgB,CAAA;EAAA,SACrD,QAAA,GAAW,MAAA,EAAQ,aAAA,CAAc,KAAA,MAAW,MAAA;EAAA,SAC5C,MAAA;AAAA;AAAA,cAGE,SAAA,yDACX,IAAA,EAAM,IAAA,CAAK,aAAA,CAAc,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,CAAA,gBACpD,aAAA,CAAc,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,CAAA;AAAA,KAEjC,gBAAA,YAA4B,aAAA,wBAAqC,CAAA;AAAA,KACjE,YAAA,YAAwB,IAAA,mBAAuB,CAAA;AAAA,KAC/C,WAAA,YAAuB,gBAAA,CAAiB,CAAA,IAAK,YAAA,CAAa,CAAA;AAAA,cAEzD,eAAA,MAAsB,CAAA,EAAG,WAAA,CAAY,CAAA,MAAK,CAAA,IAAK,gBAAA,CAAiB,CAAA;;;;;;cAQhE,aAAA,MACX,KAAA,EAAO,aAAA,CAAc,WAAA,CAAY,CAAA,OAChC,aAAA,CAAc,cAAA;;;;;;cAkBJ,OAAA,0CACX,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,CAAA,GAChC,IAAA,EAAM,YAAA,KACL,MAAA,CAAO,MAAA,CAAO,kBAAA,EAAoB,SAAA,EAAW,CAAA"}
@@ -1,194 +0,0 @@
1
- import { i as ImageSource } from "./Image-BZmKfIdq.mjs";
2
- import { d as Item, g as Reasoning, o as FunctionCall, p as Message, s as FunctionCallOutput, x as Usage } from "./Items-CB8Bo3FI.mjs";
3
- import { i as StructuredFormat, n as JsonParseError, r as StructuredDecodeError } from "./StructuredFormat-BWq5Hd1O.mjs";
4
- import { Effect, Schema, Stream } from "effect";
5
- import * as _$effect_Types0 from "effect/Types";
6
- import * as _$effect_Cause0 from "effect/Cause";
7
-
8
- //#region src/domain/Turn.d.ts
9
- declare namespace Turn_d_exports {
10
- export { InteractionEvent, RefusalRejected, Turn, TurnEvent, appendTurn, assistantMessages, functionCalls, isTurnComplete, reasonings, textDeltas, toStructured };
11
- }
12
- /**
13
- * The result of a single LLM generation. A turn produces zero or more items
14
- * (typically one assistant message and zero or more function_call items)
15
- * and reports usage + a stop reason.
16
- */
17
- declare const Turn: Schema.Struct<{
18
- readonly items: Schema.$Array<Schema.Union<readonly [Schema.Struct<{
19
- readonly type: Schema.Literal<"message">;
20
- readonly role: Schema.Literals<readonly ["user", "assistant", "system"]>;
21
- readonly content: Schema.$Array<Schema.Union<readonly [Schema.Struct<{
22
- readonly type: Schema.Literal<"input_text">;
23
- readonly text: Schema.String;
24
- }>, Schema.Struct<{
25
- readonly type: Schema.Literal<"input_image">;
26
- readonly source: Schema.Schema<ImageSource>;
27
- }>, Schema.Struct<{
28
- readonly type: Schema.Literal<"output_text">;
29
- readonly text: Schema.String;
30
- readonly annotations: Schema.optional<Schema.$Array<Schema.Union<readonly [Schema.Struct<{
31
- readonly type: Schema.Literal<"url_citation">;
32
- readonly url: Schema.String;
33
- readonly start_index: Schema.Number;
34
- readonly end_index: Schema.Number;
35
- readonly title: Schema.String;
36
- }>, Schema.Struct<{
37
- readonly type: Schema.Literal<"file_citation">;
38
- readonly file_id: Schema.String;
39
- readonly index: Schema.Number;
40
- }>, Schema.Struct<{
41
- readonly type: Schema.Literal<"container_file_citation">;
42
- readonly container_id: Schema.String;
43
- readonly file_id: Schema.String;
44
- readonly start_index: Schema.Number;
45
- readonly end_index: Schema.Number;
46
- }>, Schema.Struct<{
47
- readonly type: Schema.Literal<"file_path">;
48
- readonly file_id: Schema.String;
49
- readonly index: Schema.Number;
50
- }>]>>>;
51
- }>, Schema.Struct<{
52
- readonly type: Schema.Literal<"refusal">;
53
- readonly text: Schema.String;
54
- }>]>>;
55
- readonly providerData: Schema.optional<Schema.Unknown>;
56
- }>, Schema.Struct<{
57
- readonly type: Schema.Literal<"function_call">;
58
- readonly call_id: Schema.String;
59
- readonly name: Schema.String;
60
- readonly arguments: Schema.String;
61
- readonly providerData: Schema.optional<Schema.Unknown>;
62
- }>, Schema.Struct<{
63
- readonly type: Schema.Literal<"function_call_output">;
64
- readonly call_id: Schema.String;
65
- readonly output: Schema.String;
66
- readonly providerData: Schema.optional<Schema.Unknown>;
67
- }>, Schema.Struct<{
68
- readonly type: Schema.Literal<"reasoning">;
69
- readonly id: Schema.optional<Schema.String>;
70
- readonly summary: Schema.optional<Schema.String>;
71
- readonly signature: Schema.optional<Schema.String>;
72
- readonly providerData: Schema.optional<Schema.Unknown>;
73
- }>]>>;
74
- readonly usage: Schema.Struct<{
75
- readonly input_tokens: Schema.optional<Schema.Number>;
76
- readonly output_tokens: Schema.optional<Schema.Number>;
77
- readonly total_tokens: Schema.optional<Schema.Number>;
78
- readonly input_tokens_details: Schema.optional<Schema.Struct<{
79
- readonly cached_tokens: Schema.optional<Schema.Number>;
80
- }>>;
81
- readonly output_tokens_details: Schema.optional<Schema.Struct<{
82
- readonly reasoning_tokens: Schema.optional<Schema.Number>;
83
- }>>;
84
- }>;
85
- readonly stop_reason: Schema.Literals<readonly ["stop", "tool_calls", "max_tokens", "refusal", "content_filter", "max_tool_calls"]>;
86
- }>;
87
- type Turn = typeof Turn.Type;
88
- /**
89
- * Canonical events emitted while a single turn is being generated. Most
90
- * variants are streaming deltas (text, reasoning, tool-call args); the
91
- * terminal `turn_complete` carries the assembled `Turn`. Lifecycle members
92
- * aren't deltas, hence the union name.
93
- */
94
- type TurnEvent = {
95
- readonly type: "text_delta";
96
- readonly text: string;
97
- } | {
98
- readonly type: "reasoning_delta";
99
- readonly text: string;
100
- /**
101
- * `trace` is the model's raw chain-of-thought; `summary` is a
102
- * model-written summary intended for display. OpenAI Responses emits
103
- * both as separate wire events; Anthropic and Gemini only emit
104
- * `trace`. Consumers who just want any reasoning text match once;
105
- * those who want only summaries filter `kind === "summary"`.
106
- */
107
- readonly kind: "trace" | "summary";
108
- }
109
- /**
110
- * The model declined to answer. `text` is the (streamed) explanation.
111
- * Distinct from the failure channel: a refusal is normal model output and
112
- * the stream still completes with `turn_complete`. OpenAI Responses emits
113
- * this; Anthropic surfaces refusals via `stop_reason`, and Gemini collapses
114
- * them into `finishReason: SAFETY` - both go without a `refusal_delta`.
115
- */
116
- | {
117
- readonly type: "refusal_delta";
118
- readonly text: string;
119
- } | {
120
- readonly type: "tool_call_start";
121
- readonly call_id: string;
122
- readonly name: string;
123
- } | {
124
- readonly type: "tool_call_args_delta";
125
- readonly call_id: string;
126
- readonly delta: string;
127
- }
128
- /**
129
- * Mid-stream cumulative usage. Carries the full `Usage` (including cache
130
- * token fields when the provider surfaces them) so consumers can drive
131
- * live budget / cost tracking without waiting for `turn_complete`.
132
- * Anthropic emits this on `message_start` and `message_delta`; other
133
- * providers may not emit any `usage_update` and only deliver usage via
134
- * `turn_complete.turn.usage`.
135
- */
136
- | {
137
- readonly type: "usage_update";
138
- readonly usage: Usage;
139
- } | {
140
- readonly type: "turn_complete";
141
- readonly turn: Turn;
142
- };
143
- /**
144
- * What flows out of an agent loop body to its consumer per turn: every
145
- * `TurnEvent` the provider emits (including the terminal `turn_complete`
146
- * carrying the assembled `Turn`), plus the output of any tool the loop ran.
147
- * Both variants carry a `type` discriminator.
148
- */
149
- type InteractionEvent = TurnEvent | FunctionCallOutput;
150
- declare const isTurnComplete: (d: TurnEvent) => d is Extract<TurnEvent, {
151
- type: "turn_complete";
152
- }>;
153
- declare const functionCalls: (turn: Turn) => ReadonlyArray<FunctionCall>;
154
- declare const reasonings: (turn: Turn) => ReadonlyArray<Reasoning>;
155
- declare const assistantMessages: (turn: Turn) => ReadonlyArray<Message>;
156
- /**
157
- * Append a completed turn and optional follow-up items to a state record's
158
- * history. Recipes use this at the point where structured tool results are
159
- * converted to model-facing `FunctionCallOutput`s.
160
- */
161
- declare const appendTurn: <S extends {
162
- readonly history: ReadonlyArray<Item>;
163
- }>(state: S, turn: Turn, items?: ReadonlyArray<Item>) => S;
164
- /**
165
- * Project a `TurnEvent` stream onto its `text_delta` payloads. Other
166
- * variants are dropped. Composes with `Lines.lines` +
167
- * `decodeJsonLines` for prompted-JSONL streaming.
168
- */
169
- declare const textDeltas: <E, R>(self: Stream.Stream<TurnEvent, E, R>) => Stream.Stream<string, E, R>;
170
- declare const RefusalRejected_base: new <A extends Record<string, any> = {}>(args: _$effect_Types0.VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P] }>) => _$effect_Cause0.YieldableError & {
171
- readonly _tag: "RefusalRejected";
172
- } & Readonly<A>;
173
- /**
174
- * The assistant message on the just-completed turn was a refusal block,
175
- * not an `output_text` payload. Returned by `toStructured` to short-circuit
176
- * decoding before `JSON.parse` / schema validation runs.
177
- */
178
- declare class RefusalRejected extends RefusalRejected_base<{
179
- readonly turn: Turn;
180
- }> {}
181
- /**
182
- * Validate a completed `Turn` against a `StructuredFormat`. Concatenates
183
- * `output_text` blocks on the last assistant message, then runs
184
- * `JSON.parse` + the format's schema validation.
185
- *
186
- * Three failure modes:
187
- * - `RefusalRejected` — the assistant emitted a refusal block.
188
- * - `JsonParseError` — the assembled text wasn't valid JSON.
189
- * - `StructuredDecodeError` — the JSON didn't match the schema.
190
- */
191
- declare const toStructured: <A>(turn: Turn, format: StructuredFormat<A>) => Effect.Effect<A, RefusalRejected | JsonParseError | StructuredDecodeError>;
192
- //#endregion
193
- export { Turn_d_exports as a, functionCalls as c, textDeltas as d, toStructured as f, TurnEvent as i, isTurnComplete as l, RefusalRejected as n, appendTurn as o, Turn as r, assistantMessages as s, InteractionEvent as t, reasonings as u };
194
- //# sourceMappingURL=Turn-OPaILVIB.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Turn-OPaILVIB.d.mts","names":[],"sources":["../src/domain/Turn.ts"],"mappings":";;;;;;;;;;;;;;;;cAmBa,IAAA,EAAI,MAAA,CAAA,MAAA;EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAKL,IAAA,UAAc,IAAA,CAAK,IAAA;;;;;;;KAQnB,SAAA;EAAA,SACG,IAAA;EAAA,SAA6B,IAAA;AAAA;EAAA,SAE7B,IAAA;EAAA,SACA,IAAA;;;;;;;;WAQA,IAAA;AAAA;;;;;;;;;WASA,IAAA;EAAA,SAAgC,IAAA;AAAA;EAAA,SAChC,IAAA;EAAA,SAAkC,OAAA;EAAA,SAA0B,IAAA;AAAA;EAAA,SAC5D,IAAA;EAAA,SAAuC,OAAA;EAAA,SAA0B,KAAA;AAAA;;;;;;;;;;WASjE,IAAA;EAAA,SAA+B,KAAA,EAAO,KAAA;AAAA;EAAA,SACtC,IAAA;EAAA,SAAgC,IAAA,EAAM,IAAA;AAAA;;;;;;;KAQzC,gBAAA,GAAmB,SAAA,GAAY,kBAAA;AAAA,cAE9B,cAAA,GAAkB,CAAA,EAAG,SAAA,KAAY,CAAA,IAAK,OAAA,CAAQ,SAAA;EAAa,IAAA;AAAA;AAAA,cAG3D,aAAA,GAAiB,IAAA,EAAM,IAAA,KAAO,aAAA,CAAc,YAAA;AAAA,cAG5C,UAAA,GAAc,IAAA,EAAM,IAAA,KAAO,aAAA,CAAc,SAAA;AAAA,cAGzC,iBAAA,GAAqB,IAAA,EAAM,IAAA,KAAO,aAAA,CAAc,OAAA;;;;;;cAQhD,UAAA;EAAA,SAAmC,OAAA,EAAS,aAAA,CAAc,IAAA;AAAA,GACrE,KAAA,EAAO,CAAA,EACP,IAAA,EAAM,IAAA,EACN,KAAA,GAAO,aAAA,CAAc,IAAA,MACpB,CAAA;;;;;;cAcU,UAAA,SACX,IAAA,EAAM,MAAA,CAAO,MAAA,CAAO,SAAA,EAAW,CAAA,EAAG,CAAA,MACjC,MAAA,CAAO,MAAA,SAAe,CAAA,EAAG,CAAA;AAAA,cAKzB,oBAAA;;;;;;;;cAWU,eAAA,SAAwB,oBAAA;EAAA,SAC1B,IAAA,EAAM,IAAA;AAAA;;;;;;;;;;;cAyBJ,YAAA,MACX,IAAA,EAAM,IAAA,EACN,MAAA,EAAQ,gBAAA,CAAkC,CAAA,MACzC,MAAA,CAAO,MAAA,CACR,CAAA,EACA,eAAA,GAAkB,cAAA,GAAkC,qBAAA"}