@carlonicora/nestjs-neo4jsonapi 2.3.0 → 2.4.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 (220) hide show
  1. package/dist/agents/common/usage-attribution.d.ts +218 -0
  2. package/dist/agents/common/usage-attribution.d.ts.map +1 -0
  3. package/dist/agents/common/usage-attribution.js +235 -0
  4. package/dist/agents/common/usage-attribution.js.map +1 -0
  5. package/dist/agents/community.summariser/services/community.summariser.service.d.ts.map +1 -1
  6. package/dist/agents/community.summariser/services/community.summariser.service.js +13 -1
  7. package/dist/agents/community.summariser/services/community.summariser.service.js.map +1 -1
  8. package/dist/agents/contextualiser/contexts/contextualiser.context.d.ts +24 -1
  9. package/dist/agents/contextualiser/contexts/contextualiser.context.d.ts.map +1 -1
  10. package/dist/agents/contextualiser/contexts/contextualiser.context.js +32 -0
  11. package/dist/agents/contextualiser/contexts/contextualiser.context.js.map +1 -1
  12. package/dist/agents/contextualiser/factories/contextualiser.context.factory.d.ts +7 -0
  13. package/dist/agents/contextualiser/factories/contextualiser.context.factory.d.ts.map +1 -1
  14. package/dist/agents/contextualiser/factories/contextualiser.context.factory.js +5 -0
  15. package/dist/agents/contextualiser/factories/contextualiser.context.factory.js.map +1 -1
  16. package/dist/agents/contextualiser/nodes/atomicfacts.node.service.d.ts.map +1 -1
  17. package/dist/agents/contextualiser/nodes/atomicfacts.node.service.js +4 -0
  18. package/dist/agents/contextualiser/nodes/atomicfacts.node.service.js.map +1 -1
  19. package/dist/agents/contextualiser/nodes/chunk.node.service.d.ts.map +1 -1
  20. package/dist/agents/contextualiser/nodes/chunk.node.service.js +4 -0
  21. package/dist/agents/contextualiser/nodes/chunk.node.service.js.map +1 -1
  22. package/dist/agents/contextualiser/nodes/chunk.vector.node.service.d.ts.map +1 -1
  23. package/dist/agents/contextualiser/nodes/chunk.vector.node.service.js +15 -0
  24. package/dist/agents/contextualiser/nodes/chunk.vector.node.service.js.map +1 -1
  25. package/dist/agents/contextualiser/nodes/keyconcepts.node.service.d.ts.map +1 -1
  26. package/dist/agents/contextualiser/nodes/keyconcepts.node.service.js +11 -0
  27. package/dist/agents/contextualiser/nodes/keyconcepts.node.service.js.map +1 -1
  28. package/dist/agents/contextualiser/nodes/question.refiner.node.service.d.ts.map +1 -1
  29. package/dist/agents/contextualiser/nodes/question.refiner.node.service.js +4 -0
  30. package/dist/agents/contextualiser/nodes/question.refiner.node.service.js.map +1 -1
  31. package/dist/agents/contextualiser/nodes/rational.node.service.d.ts.map +1 -1
  32. package/dist/agents/contextualiser/nodes/rational.node.service.js +4 -0
  33. package/dist/agents/contextualiser/nodes/rational.node.service.js.map +1 -1
  34. package/dist/agents/contextualiser/services/contextualiser.service.d.ts +7 -0
  35. package/dist/agents/contextualiser/services/contextualiser.service.d.ts.map +1 -1
  36. package/dist/agents/contextualiser/services/contextualiser.service.js +17 -5
  37. package/dist/agents/contextualiser/services/contextualiser.service.js.map +1 -1
  38. package/dist/agents/drift/contexts/drift.context.d.ts +25 -1
  39. package/dist/agents/drift/contexts/drift.context.d.ts.map +1 -1
  40. package/dist/agents/drift/contexts/drift.context.js +32 -0
  41. package/dist/agents/drift/contexts/drift.context.js.map +1 -1
  42. package/dist/agents/drift/nodes/followup.node.service.d.ts.map +1 -1
  43. package/dist/agents/drift/nodes/followup.node.service.js +4 -0
  44. package/dist/agents/drift/nodes/followup.node.service.js.map +1 -1
  45. package/dist/agents/drift/nodes/hyde.node.service.d.ts.map +1 -1
  46. package/dist/agents/drift/nodes/hyde.node.service.js +9 -1
  47. package/dist/agents/drift/nodes/hyde.node.service.js.map +1 -1
  48. package/dist/agents/drift/nodes/primer.answer.node.service.d.ts.map +1 -1
  49. package/dist/agents/drift/nodes/primer.answer.node.service.js +4 -0
  50. package/dist/agents/drift/nodes/primer.answer.node.service.js.map +1 -1
  51. package/dist/agents/drift/nodes/synthesis.node.service.d.ts.map +1 -1
  52. package/dist/agents/drift/nodes/synthesis.node.service.js +4 -0
  53. package/dist/agents/drift/nodes/synthesis.node.service.js.map +1 -1
  54. package/dist/agents/drift/services/drift.search.service.d.ts +9 -0
  55. package/dist/agents/drift/services/drift.search.service.d.ts.map +1 -1
  56. package/dist/agents/drift/services/drift.search.service.js +22 -5
  57. package/dist/agents/drift/services/drift.search.service.js.map +1 -1
  58. package/dist/agents/graph/services/graph.search.service.d.ts.map +1 -1
  59. package/dist/agents/graph/services/graph.search.service.js +10 -1
  60. package/dist/agents/graph/services/graph.search.service.js.map +1 -1
  61. package/dist/agents/graph/tools/tool.factory.d.ts +6 -0
  62. package/dist/agents/graph/tools/tool.factory.d.ts.map +1 -1
  63. package/dist/agents/graph/tools/tool.factory.js.map +1 -1
  64. package/dist/agents/index.d.ts +7 -0
  65. package/dist/agents/index.d.ts.map +1 -1
  66. package/dist/agents/index.js +13 -1
  67. package/dist/agents/index.js.map +1 -1
  68. package/dist/agents/operator/contexts/operator.context.d.ts +37 -1
  69. package/dist/agents/operator/contexts/operator.context.d.ts.map +1 -1
  70. package/dist/agents/operator/contexts/operator.context.js +8 -0
  71. package/dist/agents/operator/contexts/operator.context.js.map +1 -1
  72. package/dist/agents/operator/interfaces/operator.tool.interface.d.ts +8 -0
  73. package/dist/agents/operator/interfaces/operator.tool.interface.d.ts.map +1 -1
  74. package/dist/agents/operator/interfaces/operator.tool.interface.js.map +1 -1
  75. package/dist/agents/operator/services/operator.service.d.ts +8 -0
  76. package/dist/agents/operator/services/operator.service.d.ts.map +1 -1
  77. package/dist/agents/operator/services/operator.service.js +29 -0
  78. package/dist/agents/operator/services/operator.service.js.map +1 -1
  79. package/dist/agents/operator/tools/operator.tool.registry.d.ts.map +1 -1
  80. package/dist/agents/operator/tools/operator.tool.registry.js +2 -1
  81. package/dist/agents/operator/tools/operator.tool.registry.js.map +1 -1
  82. package/dist/agents/operator/tools/search-communities.tool.d.ts +8 -2
  83. package/dist/agents/operator/tools/search-communities.tool.d.ts.map +1 -1
  84. package/dist/agents/operator/tools/search-communities.tool.js +16 -4
  85. package/dist/agents/operator/tools/search-communities.tool.js.map +1 -1
  86. package/dist/agents/operator/tools/search-documents.tool.d.ts.map +1 -1
  87. package/dist/agents/operator/tools/search-documents.tool.js +5 -0
  88. package/dist/agents/operator/tools/search-documents.tool.js.map +1 -1
  89. package/dist/agents/responder/contexts/responder.context.d.ts +31 -0
  90. package/dist/agents/responder/contexts/responder.context.d.ts.map +1 -1
  91. package/dist/agents/responder/contexts/responder.context.js +8 -0
  92. package/dist/agents/responder/contexts/responder.context.js.map +1 -1
  93. package/dist/agents/responder/factories/responder.context.factory.d.ts +4 -0
  94. package/dist/agents/responder/factories/responder.context.factory.d.ts.map +1 -1
  95. package/dist/agents/responder/factories/responder.context.factory.js +2 -0
  96. package/dist/agents/responder/factories/responder.context.factory.js.map +1 -1
  97. package/dist/agents/responder/nodes/graph.node.service.d.ts +6 -0
  98. package/dist/agents/responder/nodes/graph.node.service.d.ts.map +1 -1
  99. package/dist/agents/responder/nodes/graph.node.service.js +20 -0
  100. package/dist/agents/responder/nodes/graph.node.service.js.map +1 -1
  101. package/dist/agents/responder/nodes/planner.node.service.d.ts.map +1 -1
  102. package/dist/agents/responder/nodes/planner.node.service.js +9 -0
  103. package/dist/agents/responder/nodes/planner.node.service.js.map +1 -1
  104. package/dist/agents/responder/nodes/responder.answer.node.service.d.ts.map +1 -1
  105. package/dist/agents/responder/nodes/responder.answer.node.service.js +9 -0
  106. package/dist/agents/responder/nodes/responder.answer.node.service.js.map +1 -1
  107. package/dist/agents/responder/services/responder.service.d.ts +16 -0
  108. package/dist/agents/responder/services/responder.service.d.ts.map +1 -1
  109. package/dist/agents/responder/services/responder.service.js +29 -5
  110. package/dist/agents/responder/services/responder.service.js.map +1 -1
  111. package/dist/agents/summariser/services/summariser.service.d.ts +7 -0
  112. package/dist/agents/summariser/services/summariser.service.d.ts.map +1 -1
  113. package/dist/agents/summariser/services/summariser.service.js +15 -3
  114. package/dist/agents/summariser/services/summariser.service.js.map +1 -1
  115. package/dist/common/helpers/index.d.ts +1 -0
  116. package/dist/common/helpers/index.d.ts.map +1 -1
  117. package/dist/common/helpers/index.js +1 -0
  118. package/dist/common/helpers/index.js.map +1 -1
  119. package/dist/common/helpers/map-with-concurrency.d.ts +23 -0
  120. package/dist/common/helpers/map-with-concurrency.d.ts.map +1 -0
  121. package/dist/common/helpers/map-with-concurrency.js +60 -0
  122. package/dist/common/helpers/map-with-concurrency.js.map +1 -0
  123. package/dist/common/tokens.d.ts +2 -1
  124. package/dist/common/tokens.d.ts.map +1 -1
  125. package/dist/common/tokens.js +2 -1
  126. package/dist/common/tokens.js.map +1 -1
  127. package/dist/config/base.config.d.ts +19 -0
  128. package/dist/config/base.config.d.ts.map +1 -1
  129. package/dist/config/base.config.js +30 -3
  130. package/dist/config/base.config.js.map +1 -1
  131. package/dist/config/interfaces/config.ai.interface.d.ts +10 -1
  132. package/dist/config/interfaces/config.ai.interface.d.ts.map +1 -1
  133. package/dist/config/interfaces/config.chunk.queues.interface.d.ts +13 -0
  134. package/dist/config/interfaces/config.chunk.queues.interface.d.ts.map +1 -1
  135. package/dist/config/interfaces/config.credits.interface.d.ts +1 -1
  136. package/dist/core/blocknote/services/blocknote.service.d.ts.map +1 -1
  137. package/dist/core/blocknote/services/blocknote.service.js +7 -0
  138. package/dist/core/blocknote/services/blocknote.service.js.map +1 -1
  139. package/dist/core/llm/services/audio.llm.service.d.ts +70 -1
  140. package/dist/core/llm/services/audio.llm.service.d.ts.map +1 -1
  141. package/dist/core/llm/services/audio.llm.service.js +118 -3
  142. package/dist/core/llm/services/audio.llm.service.js.map +1 -1
  143. package/dist/core/llm/services/document-ai.service.d.ts +6 -0
  144. package/dist/core/llm/services/document-ai.service.d.ts.map +1 -1
  145. package/dist/core/llm/services/document-ai.service.js +1 -0
  146. package/dist/core/llm/services/document-ai.service.js.map +1 -1
  147. package/dist/core/llm/services/embedder.service.d.ts +105 -0
  148. package/dist/core/llm/services/embedder.service.d.ts.map +1 -1
  149. package/dist/core/llm/services/embedder.service.js +237 -7
  150. package/dist/core/llm/services/embedder.service.js.map +1 -1
  151. package/dist/core/llm/services/llm.service.d.ts +103 -6
  152. package/dist/core/llm/services/llm.service.d.ts.map +1 -1
  153. package/dist/core/llm/services/llm.service.js +570 -148
  154. package/dist/core/llm/services/llm.service.js.map +1 -1
  155. package/dist/core/llm/services/model.service.d.ts +25 -0
  156. package/dist/core/llm/services/model.service.d.ts.map +1 -1
  157. package/dist/core/llm/services/model.service.js +76 -4
  158. package/dist/core/llm/services/model.service.js.map +1 -1
  159. package/dist/core/llm/utils/repair-truncated-json.d.ts +29 -0
  160. package/dist/core/llm/utils/repair-truncated-json.d.ts.map +1 -0
  161. package/dist/core/llm/utils/repair-truncated-json.js +111 -0
  162. package/dist/core/llm/utils/repair-truncated-json.js.map +1 -0
  163. package/dist/foundations/assistant/services/assistant.service.d.ts.map +1 -1
  164. package/dist/foundations/assistant/services/assistant.service.js +12 -0
  165. package/dist/foundations/assistant/services/assistant.service.js.map +1 -1
  166. package/dist/foundations/atomicfact/services/atomicfact.service.d.ts +7 -0
  167. package/dist/foundations/atomicfact/services/atomicfact.service.d.ts.map +1 -1
  168. package/dist/foundations/atomicfact/services/atomicfact.service.js +6 -0
  169. package/dist/foundations/atomicfact/services/atomicfact.service.js.map +1 -1
  170. package/dist/foundations/chunk/processors/chunk.processor.d.ts.map +1 -1
  171. package/dist/foundations/chunk/processors/chunk.processor.js +7 -1
  172. package/dist/foundations/chunk/processors/chunk.processor.js.map +1 -1
  173. package/dist/foundations/chunk/repositories/chunk.repository.d.ts +90 -2
  174. package/dist/foundations/chunk/repositories/chunk.repository.d.ts.map +1 -1
  175. package/dist/foundations/chunk/repositories/chunk.repository.js +205 -31
  176. package/dist/foundations/chunk/repositories/chunk.repository.js.map +1 -1
  177. package/dist/foundations/chunk/services/chunk.service.d.ts.map +1 -1
  178. package/dist/foundations/chunk/services/chunk.service.js +50 -1
  179. package/dist/foundations/chunk/services/chunk.service.js.map +1 -1
  180. package/dist/foundations/chunker/chunker.module.d.ts.map +1 -1
  181. package/dist/foundations/chunker/chunker.module.js +4 -1
  182. package/dist/foundations/chunker/chunker.module.js.map +1 -1
  183. package/dist/foundations/chunker/services/chunker.service.d.ts +57 -1
  184. package/dist/foundations/chunker/services/chunker.service.d.ts.map +1 -1
  185. package/dist/foundations/chunker/services/chunker.service.js +207 -16
  186. package/dist/foundations/chunker/services/chunker.service.js.map +1 -1
  187. package/dist/foundations/chunker/services/types/pdf.service.d.ts +42 -1
  188. package/dist/foundations/chunker/services/types/pdf.service.d.ts.map +1 -1
  189. package/dist/foundations/chunker/services/types/pdf.service.js +111 -22
  190. package/dist/foundations/chunker/services/types/pdf.service.js.map +1 -1
  191. package/dist/foundations/chunker/services/types/semanticsplitter.service.d.ts.map +1 -1
  192. package/dist/foundations/chunker/services/types/semanticsplitter.service.js +24 -3
  193. package/dist/foundations/chunker/services/types/semanticsplitter.service.js.map +1 -1
  194. package/dist/foundations/company/repositories/company.repository.d.ts +1 -1
  195. package/dist/foundations/company/repositories/company.repository.d.ts.map +1 -1
  196. package/dist/foundations/company/repositories/company.repository.js +31 -14
  197. package/dist/foundations/company/repositories/company.repository.js.map +1 -1
  198. package/dist/foundations/how-to/processors/how-to.processor.d.ts.map +1 -1
  199. package/dist/foundations/how-to/processors/how-to.processor.js +20 -7
  200. package/dist/foundations/how-to/processors/how-to.processor.js.map +1 -1
  201. package/dist/foundations/keyconcept/repositories/keyconcept.repository.d.ts +25 -1
  202. package/dist/foundations/keyconcept/repositories/keyconcept.repository.d.ts.map +1 -1
  203. package/dist/foundations/keyconcept/repositories/keyconcept.repository.js +38 -2
  204. package/dist/foundations/keyconcept/repositories/keyconcept.repository.js.map +1 -1
  205. package/dist/foundations/keyconcept/services/keyconcept.service.d.ts +5 -0
  206. package/dist/foundations/keyconcept/services/keyconcept.service.d.ts.map +1 -1
  207. package/dist/foundations/keyconcept/services/keyconcept.service.js +4 -0
  208. package/dist/foundations/keyconcept/services/keyconcept.service.js.map +1 -1
  209. package/dist/foundations/tokenusage/entities/tokenusage.js +1 -1
  210. package/dist/foundations/tokenusage/enums/tokenusage.type.d.ts +4 -1
  211. package/dist/foundations/tokenusage/enums/tokenusage.type.d.ts.map +1 -1
  212. package/dist/foundations/tokenusage/enums/tokenusage.type.js +3 -0
  213. package/dist/foundations/tokenusage/enums/tokenusage.type.js.map +1 -1
  214. package/dist/foundations/tokenusage/repositories/tokenusage.admin.repository.js +3 -3
  215. package/dist/foundations/tokenusage/repositories/tokenusage.repository.js +2 -2
  216. package/dist/foundations/tokenusage/services/tokenusage.service.d.ts +6 -1
  217. package/dist/foundations/tokenusage/services/tokenusage.service.d.ts.map +1 -1
  218. package/dist/foundations/tokenusage/services/tokenusage.service.js +7 -2
  219. package/dist/foundations/tokenusage/services/tokenusage.service.js.map +1 -1
  220. package/package.json +1 -1
@@ -1,5 +1,7 @@
1
1
  import { ConfigService } from "@nestjs/config";
2
+ import { TokenUsageRecorderInterface } from "../../../common/tokens";
2
3
  import { BaseConfigInterface } from "../../../config/interfaces";
4
+ import { TokenUsageService } from "../../../foundations/tokenusage/services/tokenusage.service";
3
5
  import { type TranscodeOptions } from "./audio/ffmpeg-transcode";
4
6
  import { LLMCallDumper } from "./llm-call-dumper.service";
5
7
  import { ModelService } from "./model.service";
@@ -23,6 +25,19 @@ export interface AudioCallParams {
23
25
  * (high-pass, silence trim). Omit for the plain resample. See TranscodeOptions.
24
26
  */
25
27
  transcode?: TranscodeOptions;
28
+ /**
29
+ * Cost-attribution category written to the usage record. Free-form so each
30
+ * application owns its own vocabulary; defaults to "transcription".
31
+ */
32
+ tokenUsageType?: string;
33
+ /**
34
+ * Opt-in cost attribution, exactly like `LLMCallParams`: BOTH of these must
35
+ * be present or no usage record is written at all. The package stays
36
+ * domain-agnostic — the caller decides what the transcription is billed
37
+ * against (narr8: the Session the recording belongs to).
38
+ */
39
+ relationshipId?: string;
40
+ relationshipType?: string;
26
41
  }
27
42
  export interface TranscriptionResult {
28
43
  text: string;
@@ -64,9 +79,63 @@ export declare class AudioLLMService {
64
79
  private readonly modelService;
65
80
  private readonly config;
66
81
  private readonly dumper;
82
+ private readonly tokenUsageService?;
83
+ private readonly tokenUsageRecorder?;
67
84
  private readonly logger;
68
- constructor(modelService: ModelService, config: ConfigService<BaseConfigInterface>, dumper: LLMCallDumper);
85
+ constructor(modelService: ModelService, config: ConfigService<BaseConfigInterface>, dumper: LLMCallDumper, tokenUsageService?: TokenUsageService, tokenUsageRecorder?: TokenUsageRecorderInterface);
69
86
  call(params: AudioCallParams): Promise<TranscriptionResult>;
87
+ /**
88
+ * True once the "direct STT reports no tokens" warning has been emitted by
89
+ * this instance. The audio service is a singleton, so this throttles the
90
+ * warning to once per process instead of once per utterance.
91
+ */
92
+ private directPathUnbilledWarned;
93
+ /**
94
+ * Makes an unbillable engine LOUD instead of silent.
95
+ *
96
+ * The direct `/audio/transcriptions` engine (AUDIO_DIRECT_URL) reports no
97
+ * token counts at all, and the zero-token rule in {@link persistUsage} then
98
+ * writes no usage record — so switching an application to that engine
99
+ * silently turns transcription back into completely unbilled work. There is
100
+ * no per-minute rate to fall back on (`audioSeconds` is available on the
101
+ * result, but no price for it is configured anywhere), and inventing a token
102
+ * count would be a lie, so the honest fix is a warning that names the
103
+ * consequence. Emitted once per process — never in the hot per-utterance
104
+ * path beyond a boolean check.
105
+ */
106
+ private warnIfDirectPathUnbilled;
107
+ /**
108
+ * Records transcription usage. Attribution is opt-in — same contract as
109
+ * `LLMService.persistUsage`: no relationship, no record, so the package stays
110
+ * domain-agnostic. Cost comes from the `audio` config block rather than
111
+ * `computeCost()`, which only knows the text tiers (`configForWeight` never
112
+ * looks at `ai.audio`), hence `costOverride`.
113
+ *
114
+ * ZERO-TOKEN RULE (mirrors `LLMService.persistUsageOnFailure`): a call that
115
+ * reports no tokens records NOTHING. `recordTokenUsage` floors every row at
116
+ * `minCreditsPerRecord`, so a 0/0 row would invent a charge for tokens nobody
117
+ * spent. This is what the direct `/audio/transcriptions` path always hits —
118
+ * it returns no token counts by design — so that engine bills nothing until
119
+ * the endpoint reports usage (and says so loudly: see
120
+ * {@link warnIfDirectPathUnbilled}). The chat path (AUDIO_DIRECT_URL unset)
121
+ * returns real counts and is billed normally.
122
+ *
123
+ * FLOOR-EXEMPT (`applyMinimum: false`), same rationale as EmbedderService:
124
+ * transcription is per-utterance, not per-request. A session averages a few
125
+ * hundred segments and can exceed a thousand, each truly worth a fraction of
126
+ * a credit, so applying the per-record floor to every one of them would bill
127
+ * a large multiple of the real cost. The floor exists to stop sub-cent REAL
128
+ * usage rounding to nothing on a handful of records, not to price a thousand
129
+ * of them.
130
+ *
131
+ * Writes through the application-provided `TOKEN_USAGE_RECORDER` when one is
132
+ * bound, falling back to the module-local `TokenUsageService` otherwise (see
133
+ * the token's docblock for why package code must use this seam).
134
+ *
135
+ * Never throws: a persistence failure logs a warning and the transcription
136
+ * result stands.
137
+ */
138
+ private persistUsage;
70
139
  private callChat;
71
140
  /**
72
141
  * Dump the full upstream error for diagnostics. LangChain wraps the openai
@@ -1 +1 @@
1
- {"version":3,"file":"audio.llm.service.d.ts","sourceRoot":"","sources":["../../../../src/core/llm/services/audio.llm.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAE,mBAAmB,EAAqB,MAAM,4BAA4B,CAAC;AACpF,OAAO,EAAsB,KAAK,gBAAgB,EAAwB,MAAM,0BAA0B,CAAC;AAC3G,OAAO,EAAe,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,SAAS,CAAC,EAAE,gBAAgB,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,oFAAoF;IACpF,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,yEAAyE;IACzE,YAAY,EAAE,MAAM,CAAC;CACtB;AAwBD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBACa,eAAe;IAIxB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IALzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;gBAGxC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,aAAa,CAAC,mBAAmB,CAAC,EAC1C,MAAM,EAAE,aAAa;IAGlC,IAAI,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC;YAuCnD,QAAQ;IA8EtB;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;YAkDX,UAAU;CAuFzB"}
1
+ {"version":3,"file":"audio.llm.service.d.ts","sourceRoot":"","sources":["../../../../src/core/llm/services/audio.llm.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAwB,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EAAE,mBAAmB,EAAqB,MAAM,4BAA4B,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,6DAA6D,CAAC;AAChG,OAAO,EAAsB,KAAK,gBAAgB,EAAwB,MAAM,0BAA0B,CAAC;AAC3G,OAAO,EAAe,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAK/C;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,oFAAoF;IACpF,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,yEAAyE;IACzE,YAAY,EAAE,MAAM,CAAC;CACtB;AAwBD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBACa,eAAe;IAIxB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAIX,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IACL,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAVhF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;gBAGxC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,aAAa,CAAC,mBAAmB,CAAC,EAC1C,MAAM,EAAE,aAAa,EAIT,iBAAiB,CAAC,EAAE,iBAAiB,EACP,kBAAkB,CAAC,EAAE,2BAA2B;IAGvG,IAAI,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA8CjE;;;;OAIG;IACH,OAAO,CAAC,wBAAwB,CAAS;IAEzC;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,wBAAwB;IAehC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;YACW,YAAY;YAiCZ,QAAQ;IA8EtB;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;YAkDX,UAAU;CAuFzB"}
@@ -41,6 +41,9 @@ var __importStar = (this && this.__importStar) || (function () {
41
41
  var __metadata = (this && this.__metadata) || function (k, v) {
42
42
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
43
43
  };
44
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
45
+ return function (target, key) { decorator(target, key, paramIndex); }
46
+ };
44
47
  var AudioLLMService_1;
45
48
  Object.defineProperty(exports, "__esModule", { value: true });
46
49
  exports.AudioLLMService = void 0;
@@ -48,9 +51,13 @@ const messages_1 = require("@langchain/core/messages");
48
51
  const common_1 = require("@nestjs/common");
49
52
  const config_1 = require("@nestjs/config");
50
53
  const fs = __importStar(require("fs"));
54
+ const tokens_1 = require("../../../common/tokens");
55
+ const tokenusage_service_1 = require("../../../foundations/tokenusage/services/tokenusage.service");
51
56
  const ffmpeg_transcode_1 = require("./audio/ffmpeg-transcode");
52
57
  const llm_call_dumper_service_1 = require("./llm-call-dumper.service");
53
58
  const model_service_1 = require("./model.service");
59
+ /** Default `tokenUsageType` written when a caller attributes a call but names no category. */
60
+ const DEFAULT_AUDIO_TOKEN_USAGE_TYPE = "transcription";
54
61
  function extractText(content) {
55
62
  if (typeof content === "string")
56
63
  return content;
@@ -89,11 +96,19 @@ function extractText(content) {
89
96
  * No retry layer — BullMQ's job-level retry handles transient failures.
90
97
  */
91
98
  let AudioLLMService = AudioLLMService_1 = class AudioLLMService {
92
- constructor(modelService, config, dumper) {
99
+ constructor(modelService, config, dumper, tokenUsageService, tokenUsageRecorder) {
93
100
  this.modelService = modelService;
94
101
  this.config = config;
95
102
  this.dumper = dumper;
103
+ this.tokenUsageService = tokenUsageService;
104
+ this.tokenUsageRecorder = tokenUsageRecorder;
96
105
  this.logger = new common_1.Logger(AudioLLMService_1.name);
106
+ /**
107
+ * True once the "direct STT reports no tokens" warning has been emitted by
108
+ * this instance. The audio service is a singleton, so this throttles the
109
+ * warning to once per process instead of once per utterance.
110
+ */
111
+ this.directPathUnbilledWarned = false;
97
112
  }
98
113
  async call(params) {
99
114
  const audio = this.config.get("ai").audio;
@@ -113,9 +128,21 @@ let AudioLLMService = AudioLLMService_1 = class AudioLLMService {
113
128
  });
114
129
  this.logger.log(`audio-call: transcode done → ${transcode.path} durationSeconds=${transcode.durationSeconds.toFixed(2)}`);
115
130
  try {
116
- return audio.directUrl
131
+ const result = audio.directUrl
117
132
  ? await this.callDirect(params, audio, transcode)
118
133
  : await this.callChat(params, audio, transcode);
134
+ this.warnIfDirectPathUnbilled(audio, result.tokenUsage);
135
+ await this.persistUsage(params, result.tokenUsage);
136
+ return result;
137
+ }
138
+ catch (error) {
139
+ // A failed transcription is not a free call in principle, but neither
140
+ // branch surfaces the tokens it burned before throwing (LangChain drops
141
+ // usage_metadata on error; /audio/transcriptions never reports any), so
142
+ // this is {0,0} today and the zero-token rule in persistUsage skips it.
143
+ // Wired anyway so partial usage is billed the day a branch can report it.
144
+ await this.persistUsage(params, { input: 0, output: 0 });
145
+ throw error;
119
146
  }
120
147
  finally {
121
148
  await transcode.cleanup().catch((err) => {
@@ -123,6 +150,90 @@ let AudioLLMService = AudioLLMService_1 = class AudioLLMService {
123
150
  });
124
151
  }
125
152
  }
153
+ /**
154
+ * Makes an unbillable engine LOUD instead of silent.
155
+ *
156
+ * The direct `/audio/transcriptions` engine (AUDIO_DIRECT_URL) reports no
157
+ * token counts at all, and the zero-token rule in {@link persistUsage} then
158
+ * writes no usage record — so switching an application to that engine
159
+ * silently turns transcription back into completely unbilled work. There is
160
+ * no per-minute rate to fall back on (`audioSeconds` is available on the
161
+ * result, but no price for it is configured anywhere), and inventing a token
162
+ * count would be a lie, so the honest fix is a warning that names the
163
+ * consequence. Emitted once per process — never in the hot per-utterance
164
+ * path beyond a boolean check.
165
+ */
166
+ warnIfDirectPathUnbilled(audio, tokens) {
167
+ if (!audio.directUrl)
168
+ return;
169
+ if (tokens.input + tokens.output > 0)
170
+ return;
171
+ if (this.directPathUnbilledWarned)
172
+ return;
173
+ this.directPathUnbilledWarned = true;
174
+ this.logger.warn(`audio-billing: TRANSCRIPTION USAGE IS NOT BEING BILLED — the direct STT endpoint ` +
175
+ `(AUDIO_DIRECT_URL=${audio.directUrl}, model=${audio.model}) returns no token counts, so every ` +
176
+ `transcription records zero usage and deducts no credits. Billing this engine needs a ` +
177
+ `per-duration rate (the call already measures audioSeconds); until one exists this cost is ` +
178
+ `invisible. Unset AUDIO_DIRECT_URL to use the chat engine, which reports real tokens and bills ` +
179
+ `normally. Logged once per process.`);
180
+ }
181
+ /**
182
+ * Records transcription usage. Attribution is opt-in — same contract as
183
+ * `LLMService.persistUsage`: no relationship, no record, so the package stays
184
+ * domain-agnostic. Cost comes from the `audio` config block rather than
185
+ * `computeCost()`, which only knows the text tiers (`configForWeight` never
186
+ * looks at `ai.audio`), hence `costOverride`.
187
+ *
188
+ * ZERO-TOKEN RULE (mirrors `LLMService.persistUsageOnFailure`): a call that
189
+ * reports no tokens records NOTHING. `recordTokenUsage` floors every row at
190
+ * `minCreditsPerRecord`, so a 0/0 row would invent a charge for tokens nobody
191
+ * spent. This is what the direct `/audio/transcriptions` path always hits —
192
+ * it returns no token counts by design — so that engine bills nothing until
193
+ * the endpoint reports usage (and says so loudly: see
194
+ * {@link warnIfDirectPathUnbilled}). The chat path (AUDIO_DIRECT_URL unset)
195
+ * returns real counts and is billed normally.
196
+ *
197
+ * FLOOR-EXEMPT (`applyMinimum: false`), same rationale as EmbedderService:
198
+ * transcription is per-utterance, not per-request. A session averages a few
199
+ * hundred segments and can exceed a thousand, each truly worth a fraction of
200
+ * a credit, so applying the per-record floor to every one of them would bill
201
+ * a large multiple of the real cost. The floor exists to stop sub-cent REAL
202
+ * usage rounding to nothing on a handful of records, not to price a thousand
203
+ * of them.
204
+ *
205
+ * Writes through the application-provided `TOKEN_USAGE_RECORDER` when one is
206
+ * bound, falling back to the module-local `TokenUsageService` otherwise (see
207
+ * the token's docblock for why package code must use this seam).
208
+ *
209
+ * Never throws: a persistence failure logs a warning and the transcription
210
+ * result stands.
211
+ */
212
+ async persistUsage(params, tokens) {
213
+ if (!params.relationshipId || !params.relationshipType)
214
+ return;
215
+ if (tokens.input + tokens.output === 0)
216
+ return;
217
+ const recorder = this.tokenUsageRecorder ?? this.tokenUsageService;
218
+ if (!recorder)
219
+ return;
220
+ const audio = this.config.get("ai")?.audio;
221
+ const cost = (tokens.input * (audio?.inputCostPer1MTokens ?? 0) + tokens.output * (audio?.outputCostPer1MTokens ?? 0)) /
222
+ 1_000_000;
223
+ try {
224
+ await recorder.recordTokenUsage({
225
+ tokens,
226
+ type: params.tokenUsageType ?? DEFAULT_AUDIO_TOKEN_USAGE_TYPE,
227
+ relationshipId: params.relationshipId,
228
+ relationshipType: params.relationshipType,
229
+ costOverride: cost,
230
+ applyMinimum: false,
231
+ });
232
+ }
233
+ catch (err) {
234
+ this.logger.warn(`Transcription usage persistence failed — continuing: ${String(err)}`);
235
+ }
236
+ }
126
237
  // ─────────────────────────────────────────────────────────────────────────
127
238
  // Chat-LLM branch (audio.directUrl unset) — provider routing via ModelService
128
239
  // ─────────────────────────────────────────────────────────────────────────
@@ -320,8 +431,12 @@ let AudioLLMService = AudioLLMService_1 = class AudioLLMService {
320
431
  exports.AudioLLMService = AudioLLMService;
321
432
  exports.AudioLLMService = AudioLLMService = AudioLLMService_1 = __decorate([
322
433
  (0, common_1.Injectable)(),
434
+ __param(3, (0, common_1.Optional)()),
435
+ __param(4, (0, common_1.Optional)()),
436
+ __param(4, (0, common_1.Inject)(tokens_1.TOKEN_USAGE_RECORDER)),
323
437
  __metadata("design:paramtypes", [model_service_1.ModelService,
324
438
  config_1.ConfigService,
325
- llm_call_dumper_service_1.LLMCallDumper])
439
+ llm_call_dumper_service_1.LLMCallDumper,
440
+ tokenusage_service_1.TokenUsageService, Object])
326
441
  ], AudioLLMService);
327
442
  //# sourceMappingURL=audio.llm.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"audio.llm.service.js","sourceRoot":"","sources":["../../../../src/core/llm/services/audio.llm.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audio.llm.service.js","sourceRoot":"","sources":["../../../../src/core/llm/services/audio.llm.service.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,12 @@ export declare class DocumentAiService {
30
30
  output: number;
31
31
  };
32
32
  ocrText: string;
33
+ /**
34
+ * Number of pages the OCR provider actually processed. OCR is billed PER PAGE, not
35
+ * per token, so this is the only usable cost signal for this call — callers multiply
36
+ * it by `ai.documentAi.costPerPage` and record it as a `costOverride`.
37
+ */
38
+ pages: number;
33
39
  }>;
34
40
  }
35
41
  //# sourceMappingURL=document-ai.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"document-ai.service.d.ts","sourceRoot":"","sources":["../../../../src/core/llm/services/document-ai.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAqB,MAAM,4BAA4B,CAAC;AAGpF;;;;;;;;;;;GAWG;AACH,qBACa,iBAAiB;IAIhB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsC;IAC7D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;gBAEb,MAAM,EAAE,aAAa,CAAC,mBAAmB,CAAC;IAEjE,OAAO,CAAC,MAAM,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC;QACnF,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5B,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QAC9C,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CAgEH"}
1
+ {"version":3,"file":"document-ai.service.d.ts","sourceRoot":"","sources":["../../../../src/core/llm/services/document-ai.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAqB,MAAM,4BAA4B,CAAC;AAGpF;;;;;;;;;;;GAWG;AACH,qBACa,iBAAiB;IAIhB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsC;IAC7D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;gBAEb,MAAM,EAAE,aAAa,CAAC,mBAAmB,CAAC;IAEjE,OAAO,CAAC,MAAM,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC;QACnF,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5B,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QAC9C,OAAO,EAAE,MAAM,CAAC;QAChB;;;;WAIG;QACH,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CAiEH"}
@@ -89,6 +89,7 @@ let DocumentAiService = DocumentAiService_1 = class DocumentAiService {
89
89
  confidence: typeof parsed.confidence === "number" ? parsed.confidence : 90,
90
90
  tokenUsage: { input: 0, output: 0 }, // OCR is billed per page, not tokens
91
91
  ocrText,
92
+ pages: json?.pages?.length ?? 0,
92
93
  };
93
94
  }
94
95
  };
@@ -1 +1 @@
1
- {"version":3,"file":"document-ai.service.js","sourceRoot":"","sources":["../../../../src/core/llm/services/document-ai.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"document-ai.service.js","sourceRoot":"","sources":["../../../../src/core/llm/services/document-ai.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAoD;AAEpD,2CAA+C;AAE/C,wDAA+D;AAE/D;;;;;;;;;;;GAWG;AAEI,IAAM,iBAAiB,yBAAvB,MAAM,iBAAiB;IAI5B,YAA6B,MAA0C;QAA1C,WAAM,GAAN,MAAM,CAAoC;QAHtD,WAAM,GAAG,IAAI,eAAM,CAAC,mBAAiB,CAAC,IAAI,CAAC,CAAC;QAC5C,oBAAe,GAAG,MAAM,CAAC;IAEgC,CAAC;IAE3E,KAAK,CAAC,OAAO,CAAC,MAA4D;QAaxE,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAoB,IAAI,CAAC,CAAC,UAAU,CAAC;QAChE,+EAA+E;QAC/E,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,8BAA8B,CAAC;QAC/E,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,gBAAgB,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAEjF,MAAM,IAAI,GAAG;YACX,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,YAAY,EAAE;YAC/D,0BAA0B,EAAE;gBAC1B,IAAI,EAAE,aAAa;gBACnB,WAAW,EAAE;oBACX,IAAI,EAAE,wBAAwB;oBAC9B,MAAM,EAAE,IAAA,qCAAsB,EAAC,MAAM,CAAC,YAAY,CAAC;oBACnD,MAAM,EAAE,KAAK;iBACd;aACF;SACF,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QACzE,IAAI,QAAkB,CAAC;QACvB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;gBAC/B,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,GAAG,CAAC,MAAM,EAAE;iBACtC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAC1B,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;QACxE,CAAC;QAED,MAAM,IAAI,GAAQ,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,UAAU,GAAG,IAAI,EAAE,mBAAmB,IAAI,IAAI,EAAE,kBAAkB,CAAC;QACzE,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAEtC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;YACxC,CAAC,CAAC,IAAI,CAAC,KAAK;iBACP,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,IAAI,EAAE,CAAC;iBAClC,IAAI,CAAC,MAAM,CAAC;iBACZ,IAAI,EAAE;YACX,CAAC,CAAC,EAAE,CAAC;QAEP,OAAO;YACL,YAAY,EAAE,CAAC,MAAM,CAAC,YAAY,IAAI,IAAI,CAAkB;YAC5D,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;YAC3B,UAAU,EAAE,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;YAC1E,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,qCAAqC;YAC1E,OAAO;YACP,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC;SAChC,CAAC;IACJ,CAAC;CACF,CAAA;AAnFY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;qCAK0B,sBAAa;GAJvC,iBAAiB,CAmF7B"}
@@ -26,6 +26,42 @@ export declare class EmbedderService {
26
26
  attribution?: EmbedderAttribution;
27
27
  }): Promise<any>;
28
28
  vectoriseTextBatch(texts: string[], attribution?: EmbedderAttribution): Promise<any[]>;
29
+ /**
30
+ * Embeds ONE text, slicing it first when it exceeds the provider's per-input
31
+ * cap: every slice goes through the same (rate-limited) embedder and the
32
+ * slice vectors are mean-pooled, so the caller always gets exactly one vector
33
+ * for one text and no oversized request ever reaches the provider.
34
+ */
35
+ private embedGuarded;
36
+ /**
37
+ * Sequential on purpose: it mirrors RateLimitedEmbedder.embedDocuments, which
38
+ * walks its sub-batches one at a time (rate-limited-embedder.ts:77) so a
39
+ * single large input never raids the shared token bucket in one burst.
40
+ */
41
+ private embedSlices;
42
+ private warnOversizedInput;
43
+ /**
44
+ * Slices `text` into pieces that each measure at most MAX_EMBED_INPUT_TOKENS
45
+ * with the SAME tokenizer used for billing. A text that already fits is
46
+ * returned as-is (single element), and the slices always concatenate back to
47
+ * the original text — nothing is dropped.
48
+ */
49
+ private splitByTokenBudget;
50
+ /** Longest measured-within-budget prefix of `text` (never empty). */
51
+ private takeBudgetedHead;
52
+ /**
53
+ * Pulls the cut back to the nearest whitespace within the last fifth of the
54
+ * window, so slices break between words. A stretch with no whitespace at all
55
+ * (a long unbroken blob) is cut mid-word rather than left oversized.
56
+ */
57
+ private snapToWordBoundary;
58
+ /**
59
+ * Element-wise mean of the slice vectors, L2-normalized: the standard
60
+ * long-input reduction. Normalising keeps the pooled vector comparable with
61
+ * single-call vectors under cosine similarity, which is what every Neo4j
62
+ * vector index in this package searches with.
63
+ */
64
+ private meanPool;
29
65
  /** Lazily-built tokenizer for the configured embedder model; null after a failed init. */
30
66
  private tokenizer;
31
67
  /**
@@ -39,6 +75,75 @@ export declare class EmbedderService {
39
75
  * false): sub-cent embedding calls must never floor to 0.1 credits.
40
76
  */
41
77
  private persistUsage;
78
+ /**
79
+ * Records what a FAILED embedding call already burned — but ONLY when the
80
+ * rejection is evidence the provider actually did work.
81
+ *
82
+ * A failure is not automatically a free call: a batch that dies on the
83
+ * provider's LAST internal sub-batch has still been charged for every chunk
84
+ * the provider served, and `RateLimitedEmbedder` surfaces that as a single
85
+ * rejection. Recording nothing there understates real spend.
86
+ *
87
+ * BUT the counts here are computed LOCALLY with tiktoken, never read off a
88
+ * provider response, so they exist even when the provider was never reached.
89
+ * Billing every rejection would therefore charge the customer for OUR
90
+ * outages, inverting the very rule this path claims parity with:
91
+ * `LLMService.persistUsageOnFailure` bills provider-REPORTED tokens, which
92
+ * are 0 when nothing was served. The damage would be real —
93
+ * `RateLimitedEmbedder` rejects with `EmbedderBucketStarvedError` before any
94
+ * HTTP request when our own token bucket cannot grant within `maxWaitMs`, and
95
+ * these calls sit inside BullMQ jobs with `attempts: 3`, so one transient
96
+ * local failure could bill the same batch up to four times.
97
+ *
98
+ * So the local count is only trusted when {@link providerServedWork} says the
99
+ * rejection carries positive evidence of provider-side work. See that method
100
+ * for the signal and for the residual over-billing it knowingly accepts.
101
+ *
102
+ * ZERO-TOKEN RULE, as everywhere else on this path: an operation that burned
103
+ * nothing records NOTHING — a 0-token row would assert a call that never
104
+ * happened.
105
+ *
106
+ * Never throws: it sits in a catch block and must not mask the original error.
107
+ */
108
+ private persistUsageOnFailure;
109
+ /**
110
+ * Does this rejection carry positive evidence that the provider did billable
111
+ * work? Nothing is billed unless it does.
112
+ *
113
+ * THE SIGNAL: a SERVER-side HTTP status (5xx) reported by the provider. That
114
+ * is the only class of rejection in which the provider accepted the request
115
+ * and failed during or after processing it — the case the failure-billing
116
+ * exists for (a multi-sub-batch call whose last sub-batch 500s, after earlier
117
+ * sub-batches were served and charged).
118
+ *
119
+ * Everything else records NOTHING, because in every other case the provider
120
+ * demonstrably served none of this input:
121
+ * - NO status at all — raised locally before or without any HTTP exchange:
122
+ * `EmbedderBucketStarvedError` (our own bucket refusing to grant), DNS
123
+ * failures, connection refused, aborts and client-side timeouts. This is
124
+ * the "our outage must not charge the customer" case.
125
+ * - A 4xx — the provider REFUSED the request rather than serving it: 401/403
126
+ * auth, 400/422 malformed, 413 too large, 429 rate-limited (including the
127
+ * retry-exhausted path). Providers do not charge for a request they
128
+ * rejected, so neither do we.
129
+ *
130
+ * RESIDUAL OVER-BILLING, KNOWINGLY ACCEPTED: on a 5xx this bills the WHOLE
131
+ * submitted input, including sub-batches the provider never got to.
132
+ * `RateLimitedEmbedder.embedDocuments` splits the input into sequential
133
+ * sub-batches and is all-or-nothing to its caller — it returns vectors or it
134
+ * throws, never a partial result — so this service cannot know how many
135
+ * sub-batches were served. Over-billing is bounded by the batch size and only
136
+ * on provider-side faults; the alternative (recording nothing) silently
137
+ * under-bills every genuinely-served chunk. Narrowing this needs
138
+ * `RateLimitedEmbedder` to report served-sub-batch counts, which would change
139
+ * its published surface.
140
+ */
141
+ private providerServedWork;
142
+ /**
143
+ * Token count for a SINGLE text, through the very tokenizer billing uses — so
144
+ * the oversize guard slices by the same measure the provider charges by.
145
+ */
146
+ private countText;
42
147
  private countTokens;
43
148
  }
44
149
  //# sourceMappingURL=embedder.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"embedder.service.d.ts","sourceRoot":"","sources":["../../../../src/core/llm/services/embedder.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAwB,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EAAE,mBAAmB,EAAqB,MAAM,4BAA4B,CAAC;AAEpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,6DAA6D,CAAC;AAChG,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAEhE;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBACa,eAAe;IAIxB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAIX,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IACL,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAThF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;gBAGxC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,aAAa,CAAC,mBAAmB,CAAC,EAI9B,iBAAiB,CAAC,EAAE,iBAAiB,EACP,kBAAkB,CAAC,EAAE,2BAA2B;IAGvG,aAAa,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,mBAAmB,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAMxF,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,WAAW,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAM5F,0FAA0F;IAC1F,OAAO,CAAC,SAAS,CAA8B;IAE/C;;;;;;;;;OASG;YACW,YAAY;IAsB1B,OAAO,CAAC,WAAW;CAsBpB"}
1
+ {"version":3,"file":"embedder.service.d.ts","sourceRoot":"","sources":["../../../../src/core/llm/services/embedder.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAwB,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EAAE,mBAAmB,EAAqB,MAAM,4BAA4B,CAAC;AAEpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,6DAA6D,CAAC;AAChG,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAEhE;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAcD,qBACa,eAAe;IAIxB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAIX,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IACL,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAThF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;gBAGxC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,aAAa,CAAC,mBAAmB,CAAC,EAI9B,iBAAiB,CAAC,EAAE,iBAAiB,EACP,kBAAkB,CAAC,EAAE,2BAA2B;IAGvG,aAAa,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,mBAAmB,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAWxF,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,WAAW,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IA2B5F;;;;;OAKG;YACW,YAAY;IAO1B;;;;OAIG;YACW,WAAW;IAMzB,OAAO,CAAC,kBAAkB;IAW1B;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAuB1B,qEAAqE;IACrE,OAAO,CAAC,gBAAgB;IAaxB;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAS1B;;;;;OAKG;IACH,OAAO,CAAC,QAAQ;IAYhB,0FAA0F;IAC1F,OAAO,CAAC,SAAS,CAA8B;IAE/C;;;;;;;;;OASG;YACW,YAAY;IA4B1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;YACW,qBAAqB;IASnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACH,OAAO,CAAC,kBAAkB;IAO1B;;;OAGG;IACH,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,WAAW;CAsBpB"}