@elizaos/plugin-local-inference 2.0.0-beta.1 → 2.0.3-beta.2
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/LICENSE +21 -0
- package/README.md +83 -0
- package/package.json +82 -15
- package/src/actions/generate-media.d.ts +59 -0
- package/src/actions/generate-media.d.ts.map +1 -0
- package/src/actions/generate-media.ts +647 -0
- package/src/actions/identify-speaker.d.ts +23 -0
- package/src/actions/identify-speaker.d.ts.map +1 -0
- package/src/actions/identify-speaker.ts +171 -0
- package/src/actions/transcription-control.d.ts +29 -0
- package/src/actions/transcription-control.d.ts.map +1 -0
- package/src/actions/transcription-control.test.ts +100 -0
- package/src/actions/transcription-control.ts +127 -0
- package/src/adapters/capacitor-llama/__tests__/compat-behavior.test.ts +218 -0
- package/src/adapters/capacitor-llama/__tests__/index.test.ts +68 -0
- package/src/adapters/capacitor-llama/__tests__/structured-output.test.ts +215 -0
- package/src/adapters/capacitor-llama/__tests__/text-streaming.test.ts +174 -0
- package/src/adapters/capacitor-llama/environment.ts +71 -0
- package/src/adapters/capacitor-llama/index.browser.ts +83 -0
- package/src/adapters/capacitor-llama/index.ts +807 -0
- package/src/adapters/capacitor-llama/loader.ts +109 -0
- package/src/adapters/capacitor-llama/structured-output.ts +165 -0
- package/src/adapters/capacitor-llama/text-streaming.ts +227 -0
- package/src/adapters/capacitor-llama/types.ts +374 -0
- package/src/backends/apple-foundation.ts +127 -0
- package/src/index.d.ts +8 -0
- package/src/index.d.ts.map +1 -0
- package/src/index.ts +62 -0
- package/src/local-inference-routes.d.ts +38 -0
- package/src/local-inference-routes.d.ts.map +1 -0
- package/src/local-inference-routes.test.ts +344 -0
- package/src/local-inference-routes.ts +1543 -0
- package/src/provider.d.ts +21 -0
- package/src/provider.d.ts.map +1 -0
- package/src/provider.ts +1082 -0
- package/src/routes/compat-helpers.d.ts +18 -0
- package/src/routes/compat-helpers.d.ts.map +1 -0
- package/src/routes/compat-helpers.ts +274 -0
- package/src/routes/family-member-route.d.ts +62 -0
- package/src/routes/family-member-route.d.ts.map +1 -0
- package/src/routes/family-member-route.ts +353 -0
- package/src/routes/index.d.ts +19 -0
- package/src/routes/index.d.ts.map +1 -0
- package/src/routes/index.ts +60 -0
- package/src/routes/live-diarization-route.d.ts +26 -0
- package/src/routes/live-diarization-route.d.ts.map +1 -0
- package/src/routes/live-diarization-route.test.ts +213 -0
- package/src/routes/live-diarization-route.ts +122 -0
- package/src/routes/local-inference-asr-route.d.ts +4 -0
- package/src/routes/local-inference-asr-route.d.ts.map +1 -0
- package/src/routes/local-inference-asr-route.test.ts +205 -0
- package/src/routes/local-inference-asr-route.ts +163 -0
- package/src/routes/local-inference-asr-transcribe.d.ts +20 -0
- package/src/routes/local-inference-asr-transcribe.d.ts.map +1 -0
- package/src/routes/local-inference-asr-transcribe.test.ts +118 -0
- package/src/routes/local-inference-asr-transcribe.ts +97 -0
- package/src/routes/local-inference-compat-routes.d.ts +16 -0
- package/src/routes/local-inference-compat-routes.d.ts.map +1 -0
- package/src/routes/local-inference-compat-routes.test.ts +485 -0
- package/src/routes/local-inference-compat-routes.ts +808 -0
- package/src/routes/local-inference-tts-route.d.ts +7 -0
- package/src/routes/local-inference-tts-route.d.ts.map +1 -0
- package/src/routes/local-inference-tts-route.test.ts +179 -0
- package/src/routes/local-inference-tts-route.ts +230 -0
- package/src/routes/transcript-audio-store.d.ts +15 -0
- package/src/routes/transcript-audio-store.d.ts.map +1 -0
- package/src/routes/transcript-audio-store.ts +27 -0
- package/src/routes/transcripts-routes.d.ts +36 -0
- package/src/routes/transcripts-routes.d.ts.map +1 -0
- package/src/routes/transcripts-routes.test.ts +144 -0
- package/src/routes/transcripts-routes.ts +159 -0
- package/src/routes/voice-first-run-routes.d.ts +62 -0
- package/src/routes/voice-first-run-routes.d.ts.map +1 -0
- package/src/routes/voice-first-run-routes.ts +524 -0
- package/src/routes/voice-models-routes.d.ts +62 -0
- package/src/routes/voice-models-routes.d.ts.map +1 -0
- package/src/routes/voice-models-routes.ts +554 -0
- package/src/routes/voice-profile-plugin-routes.d.ts +19 -0
- package/src/routes/voice-profile-plugin-routes.d.ts.map +1 -0
- package/src/routes/voice-profile-plugin-routes.ts +138 -0
- package/src/routes/voice-profiles-management-routes.d.ts +52 -0
- package/src/routes/voice-profiles-management-routes.d.ts.map +1 -0
- package/src/routes/voice-profiles-management-routes.ts +476 -0
- package/src/routes/voice-speaker-profile-routes.d.ts +57 -0
- package/src/routes/voice-speaker-profile-routes.d.ts.map +1 -0
- package/src/routes/voice-speaker-profile-routes.ts +199 -0
- package/src/runtime/aosp-llama-loader-selection.test.ts +80 -0
- package/src/runtime/capacitor-llama.d.ts +25 -0
- package/src/runtime/embedding-manager-support.d.ts +77 -0
- package/src/runtime/embedding-manager-support.d.ts.map +1 -0
- package/src/runtime/embedding-manager-support.ts +497 -0
- package/src/runtime/embedding-presets.d.ts +16 -0
- package/src/runtime/embedding-presets.d.ts.map +1 -0
- package/src/runtime/embedding-presets.ts +81 -0
- package/src/runtime/embedding-warmup-policy.d.ts +14 -0
- package/src/runtime/embedding-warmup-policy.d.ts.map +1 -0
- package/src/runtime/embedding-warmup-policy.test.ts +53 -0
- package/src/runtime/embedding-warmup-policy.ts +48 -0
- package/src/runtime/ensure-local-inference-handler.d.ts +62 -0
- package/src/runtime/ensure-local-inference-handler.d.ts.map +1 -0
- package/src/runtime/ensure-local-inference-handler.test.ts +528 -0
- package/src/runtime/ensure-local-inference-handler.ts +1448 -0
- package/src/runtime/index.d.ts +15 -0
- package/src/runtime/index.d.ts.map +1 -0
- package/src/runtime/index.ts +33 -0
- package/src/runtime/mobile-local-inference-gate.d.ts +31 -0
- package/src/runtime/mobile-local-inference-gate.d.ts.map +1 -0
- package/src/runtime/mobile-local-inference-gate.test.ts +69 -0
- package/src/runtime/mobile-local-inference-gate.ts +44 -0
- package/src/runtime/voice-entity-binding.d.ts +103 -0
- package/src/runtime/voice-entity-binding.d.ts.map +1 -0
- package/src/runtime/voice-entity-binding.transcript.test.ts +69 -0
- package/src/runtime/voice-entity-binding.ts +328 -0
- package/src/services/README.md +71 -0
- package/src/services/__tests__/backend-selector.test.ts +101 -0
- package/src/services/__tests__/checkpoint-manager.test.ts +376 -0
- package/src/services/__tests__/gpu-autotune.test.ts +400 -0
- package/src/services/__tests__/llm-streaming-binding.test.ts +85 -0
- package/src/services/__tests__/planner-grammar.test.ts +372 -0
- package/src/services/__tests__/runtime-target.test.ts +176 -0
- package/src/services/active-model-switch-rollback.test.ts +183 -0
- package/src/services/active-model.d.ts +282 -0
- package/src/services/active-model.d.ts.map +1 -0
- package/src/services/active-model.ts +1213 -0
- package/src/services/assignments.d.ts +71 -0
- package/src/services/assignments.d.ts.map +1 -0
- package/src/services/assignments.test.ts +80 -0
- package/src/services/assignments.ts +230 -0
- package/src/services/backend-selector.ts +95 -0
- package/src/services/backend.d.ts +346 -0
- package/src/services/backend.d.ts.map +1 -0
- package/src/services/backend.ts +612 -0
- package/src/services/bionic-host-loader.d.ts +46 -0
- package/src/services/bionic-host-loader.d.ts.map +1 -0
- package/src/services/bionic-host-loader.test.ts +133 -0
- package/src/services/bionic-host-loader.ts +180 -0
- package/src/services/bundled-models.d.ts +34 -0
- package/src/services/bundled-models.d.ts.map +1 -0
- package/src/services/bundled-models.ts +129 -0
- package/src/services/cache-bridge.d.ts +206 -0
- package/src/services/cache-bridge.d.ts.map +1 -0
- package/src/services/cache-bridge.test.ts +516 -0
- package/src/services/cache-bridge.ts +423 -0
- package/src/services/catalog.d.ts +10 -0
- package/src/services/catalog.d.ts.map +1 -0
- package/src/services/catalog.test.ts +238 -0
- package/src/services/catalog.ts +27 -0
- package/src/services/checkpoint-client.d.ts +109 -0
- package/src/services/checkpoint-client.d.ts.map +1 -0
- package/src/services/checkpoint-client.ts +258 -0
- package/src/services/checkpoint-manager.ts +474 -0
- package/src/services/cloud-fallback.d.ts +102 -0
- package/src/services/cloud-fallback.d.ts.map +1 -0
- package/src/services/cloud-fallback.ts +230 -0
- package/src/services/conversation-registry.d.ts +142 -0
- package/src/services/conversation-registry.d.ts.map +1 -0
- package/src/services/conversation-registry.test.ts +235 -0
- package/src/services/conversation-registry.ts +264 -0
- package/src/services/desktop-fused-ffi-backend-runtime.d.ts +95 -0
- package/src/services/desktop-fused-ffi-backend-runtime.d.ts.map +1 -0
- package/src/services/desktop-fused-ffi-backend-runtime.ts +339 -0
- package/src/services/device-bridge.d.ts +188 -0
- package/src/services/device-bridge.d.ts.map +1 -0
- package/src/services/device-bridge.ts +1237 -0
- package/src/services/device-resource-metrics.d.ts +149 -0
- package/src/services/device-resource-metrics.d.ts.map +1 -0
- package/src/services/device-resource-metrics.test.ts +98 -0
- package/src/services/device-resource-metrics.ts +346 -0
- package/src/services/device-tier.d.ts +115 -0
- package/src/services/device-tier.d.ts.map +1 -0
- package/src/services/device-tier.test.ts +371 -0
- package/src/services/device-tier.ts +410 -0
- package/src/services/downloader.d.ts +82 -0
- package/src/services/downloader.d.ts.map +1 -0
- package/src/services/downloader.test.ts +747 -0
- package/src/services/downloader.ts +925 -0
- package/src/services/engine-direct-bundle.test.ts +58 -0
- package/src/services/engine-streaming.test.ts +80 -0
- package/src/services/engine.d.ts +540 -0
- package/src/services/engine.d.ts.map +1 -0
- package/src/services/engine.ts +1909 -0
- package/src/services/ensure-local-artifacts.integration.test.ts +273 -0
- package/src/services/ensure-local-artifacts.test.ts +368 -0
- package/src/services/ensure-local-artifacts.ts +351 -0
- package/src/services/external-scanner.d.ts +17 -0
- package/src/services/external-scanner.d.ts.map +1 -0
- package/src/services/external-scanner.ts +312 -0
- package/src/services/ffi-llm-mock.ts +354 -0
- package/src/services/ffi-llm-streaming-abi.ts +442 -0
- package/src/services/ffi-streaming-backend.d.ts +180 -0
- package/src/services/ffi-streaming-backend.d.ts.map +1 -0
- package/src/services/ffi-streaming-backend.ts +382 -0
- package/src/services/ffi-streaming-runner.d.ts +122 -0
- package/src/services/ffi-streaming-runner.d.ts.map +1 -0
- package/src/services/ffi-streaming-runner.test.ts +60 -0
- package/src/services/ffi-streaming-runner.ts +354 -0
- package/src/services/ffi-unload-ordering.test.ts +162 -0
- package/src/services/gpu-autotune.ts +534 -0
- package/src/services/gpu-detect.d.ts +56 -0
- package/src/services/gpu-detect.d.ts.map +1 -0
- package/src/services/gpu-detect.ts +139 -0
- package/src/services/handler-registry.d.ts +72 -0
- package/src/services/handler-registry.d.ts.map +1 -0
- package/src/services/handler-registry.ts +240 -0
- package/src/services/hardware.d.ts +63 -0
- package/src/services/hardware.d.ts.map +1 -0
- package/src/services/hardware.test.ts +231 -0
- package/src/services/hardware.ts +410 -0
- package/src/services/hf-search.d.ts +26 -0
- package/src/services/hf-search.d.ts.map +1 -0
- package/src/services/hf-search.test.ts +69 -0
- package/src/services/hf-search.ts +420 -0
- package/src/services/image-description-runtime.d.ts +14 -0
- package/src/services/image-description-runtime.d.ts.map +1 -0
- package/src/services/image-description-runtime.test.ts +61 -0
- package/src/services/image-description-runtime.ts +118 -0
- package/src/services/imagegen/aosp-unavailable.d.ts +134 -0
- package/src/services/imagegen/aosp-unavailable.d.ts.map +1 -0
- package/src/services/imagegen/aosp-unavailable.ts +229 -0
- package/src/services/imagegen/backend-selector.d.ts +118 -0
- package/src/services/imagegen/backend-selector.d.ts.map +1 -0
- package/src/services/imagegen/backend-selector.ts +277 -0
- package/src/services/imagegen/coreml-unavailable.d.ts +105 -0
- package/src/services/imagegen/coreml-unavailable.d.ts.map +1 -0
- package/src/services/imagegen/coreml-unavailable.ts +237 -0
- package/src/services/imagegen/errors.d.ts +16 -0
- package/src/services/imagegen/errors.d.ts.map +1 -0
- package/src/services/imagegen/errors.ts +40 -0
- package/src/services/imagegen/index.d.ts +58 -0
- package/src/services/imagegen/index.d.ts.map +1 -0
- package/src/services/imagegen/index.ts +144 -0
- package/src/services/imagegen/mflux.d.ts +74 -0
- package/src/services/imagegen/mflux.d.ts.map +1 -0
- package/src/services/imagegen/mflux.ts +313 -0
- package/src/services/imagegen/sd-cpp.d.ts +180 -0
- package/src/services/imagegen/sd-cpp.d.ts.map +1 -0
- package/src/services/imagegen/sd-cpp.ts +718 -0
- package/src/services/imagegen/tensorrt-unavailable.d.ts +83 -0
- package/src/services/imagegen/tensorrt-unavailable.d.ts.map +1 -0
- package/src/services/imagegen/tensorrt-unavailable.ts +295 -0
- package/src/services/imagegen/types.d.ts +181 -0
- package/src/services/imagegen/types.d.ts.map +1 -0
- package/src/services/imagegen/types.ts +193 -0
- package/src/services/index.d.ts +29 -0
- package/src/services/index.d.ts.map +1 -0
- package/src/services/index.ts +211 -0
- package/src/services/inference-capabilities.d.ts +132 -0
- package/src/services/inference-capabilities.d.ts.map +1 -0
- package/src/services/inference-capabilities.test.ts +75 -0
- package/src/services/inference-capabilities.ts +204 -0
- package/src/services/inference-telemetry.d.ts +59 -0
- package/src/services/inference-telemetry.d.ts.map +1 -0
- package/src/services/inference-telemetry.ts +143 -0
- package/src/services/ios-llama-streaming.ts +248 -0
- package/src/services/kv-spill.d.ts +189 -0
- package/src/services/kv-spill.d.ts.map +1 -0
- package/src/services/kv-spill.test.ts +222 -0
- package/src/services/kv-spill.ts +356 -0
- package/src/services/latency-trace.d.ts +346 -0
- package/src/services/latency-trace.d.ts.map +1 -0
- package/src/services/latency-trace.test.ts +266 -0
- package/src/services/latency-trace.ts +844 -0
- package/src/services/llama-server-metrics.ts +304 -0
- package/src/services/llm-streaming-binding.d.ts +96 -0
- package/src/services/llm-streaming-binding.d.ts.map +1 -0
- package/src/services/llm-streaming-binding.ts +136 -0
- package/src/services/load-args.d.ts +82 -0
- package/src/services/load-args.d.ts.map +1 -0
- package/src/services/load-args.ts +81 -0
- package/src/services/manifest/eliza-1.manifest.v1.json +708 -0
- package/src/services/manifest/index.d.ts +4 -0
- package/src/services/manifest/index.d.ts.map +1 -0
- package/src/services/manifest/index.ts +66 -0
- package/src/services/manifest/manifest.test.ts +689 -0
- package/src/services/manifest/schema.d.ts +713 -0
- package/src/services/manifest/schema.d.ts.map +1 -0
- package/src/services/manifest/schema.ts +653 -0
- package/src/services/manifest/types.d.ts +30 -0
- package/src/services/manifest/types.d.ts.map +1 -0
- package/src/services/manifest/types.ts +55 -0
- package/src/services/manifest/validator.d.ts +66 -0
- package/src/services/manifest/validator.d.ts.map +1 -0
- package/src/services/manifest/validator.ts +567 -0
- package/src/services/memory-arbiter.d.ts +318 -0
- package/src/services/memory-arbiter.d.ts.map +1 -0
- package/src/services/memory-arbiter.test.ts +419 -0
- package/src/services/memory-arbiter.ts +925 -0
- package/src/services/memory-monitor.d.ts +122 -0
- package/src/services/memory-monitor.d.ts.map +1 -0
- package/src/services/memory-monitor.test.ts +208 -0
- package/src/services/memory-monitor.ts +297 -0
- package/src/services/memory-pressure.d.ts +130 -0
- package/src/services/memory-pressure.d.ts.map +1 -0
- package/src/services/memory-pressure.ts +414 -0
- package/src/services/mtp-doctor.d.ts +13 -0
- package/src/services/mtp-doctor.d.ts.map +1 -0
- package/src/services/mtp-doctor.ts +78 -0
- package/src/services/network-policy.d.ts +127 -0
- package/src/services/network-policy.d.ts.map +1 -0
- package/src/services/network-policy.ts +346 -0
- package/src/services/paths.d.ts +6 -0
- package/src/services/paths.d.ts.map +1 -0
- package/src/services/paths.ts +25 -0
- package/src/services/planner-skeleton.d.ts +124 -0
- package/src/services/planner-skeleton.d.ts.map +1 -0
- package/src/services/planner-skeleton.ts +175 -0
- package/src/services/providers.d.ts +38 -0
- package/src/services/providers.d.ts.map +1 -0
- package/src/services/providers.ts +507 -0
- package/src/services/ram-budget-cache.test.ts +163 -0
- package/src/services/ram-budget.d.ts +110 -0
- package/src/services/ram-budget.d.ts.map +1 -0
- package/src/services/ram-budget.ts +0 -0
- package/src/services/readiness.d.ts +9 -0
- package/src/services/readiness.d.ts.map +1 -0
- package/src/services/readiness.test.ts +87 -0
- package/src/services/readiness.ts +238 -0
- package/src/services/recommendation.d.ts +111 -0
- package/src/services/recommendation.d.ts.map +1 -0
- package/src/services/recommendation.ts +671 -0
- package/src/services/registry.d.ts +35 -0
- package/src/services/registry.d.ts.map +1 -0
- package/src/services/registry.ts +151 -0
- package/src/services/router-handler.d.ts +92 -0
- package/src/services/router-handler.d.ts.map +1 -0
- package/src/services/router-handler.test.ts +45 -0
- package/src/services/router-handler.ts +407 -0
- package/src/services/routing-policy.d.ts +69 -0
- package/src/services/routing-policy.d.ts.map +1 -0
- package/src/services/routing-policy.test.ts +164 -0
- package/src/services/routing-policy.ts +297 -0
- package/src/services/routing-preferences.d.ts +8 -0
- package/src/services/routing-preferences.d.ts.map +1 -0
- package/src/services/routing-preferences.ts +17 -0
- package/src/services/runtime-target.d.ts +98 -0
- package/src/services/runtime-target.d.ts.map +1 -0
- package/src/services/runtime-target.ts +154 -0
- package/src/services/service.d.ts +128 -0
- package/src/services/service.d.ts.map +1 -0
- package/src/services/service.test.ts +223 -0
- package/src/services/service.ts +735 -0
- package/src/services/session-pool.d.ts +72 -0
- package/src/services/session-pool.d.ts.map +1 -0
- package/src/services/session-pool.ts +153 -0
- package/src/services/structured-output/deterministic-repair.d.ts +23 -0
- package/src/services/structured-output/deterministic-repair.d.ts.map +1 -0
- package/src/services/structured-output/deterministic-repair.test.ts +169 -0
- package/src/services/structured-output/deterministic-repair.ts +443 -0
- package/src/services/structured-output/index.ts +4 -0
- package/src/services/structured-output.d.ts +311 -0
- package/src/services/structured-output.d.ts.map +1 -0
- package/src/services/structured-output.test.ts +483 -0
- package/src/services/structured-output.ts +712 -0
- package/src/services/system-memory.d.ts +33 -0
- package/src/services/system-memory.d.ts.map +1 -0
- package/src/services/system-memory.test.ts +47 -0
- package/src/services/system-memory.ts +67 -0
- package/src/services/transcription-priority.test.ts +211 -0
- package/src/services/types.d.ts +19 -0
- package/src/services/types.d.ts.map +1 -0
- package/src/services/types.ts +55 -0
- package/src/services/verify-on-device.d.ts +34 -0
- package/src/services/verify-on-device.d.ts.map +1 -0
- package/src/services/verify-on-device.test.ts +87 -0
- package/src/services/verify-on-device.ts +127 -0
- package/src/services/verify.d.ts +8 -0
- package/src/services/verify.d.ts.map +1 -0
- package/src/services/verify.ts +13 -0
- package/src/services/vision/aosp-unavailable.d.ts +115 -0
- package/src/services/vision/aosp-unavailable.d.ts.map +1 -0
- package/src/services/vision/aosp-unavailable.ts +163 -0
- package/src/services/vision/capacitor-llama.d.ts +99 -0
- package/src/services/vision/capacitor-llama.d.ts.map +1 -0
- package/src/services/vision/capacitor-llama.ts +255 -0
- package/src/services/vision/cloud-fallback.d.ts +47 -0
- package/src/services/vision/cloud-fallback.d.ts.map +1 -0
- package/src/services/vision/cloud-fallback.test.ts +243 -0
- package/src/services/vision/cloud-fallback.ts +268 -0
- package/src/services/vision/fallback-chain.test.ts +86 -0
- package/src/services/vision/hash.d.ts +71 -0
- package/src/services/vision/hash.d.ts.map +1 -0
- package/src/services/vision/hash.ts +157 -0
- package/src/services/vision/index.d.ts +95 -0
- package/src/services/vision/index.d.ts.map +1 -0
- package/src/services/vision/index.ts +251 -0
- package/src/services/vision/llama-server.d.ts +73 -0
- package/src/services/vision/llama-server.d.ts.map +1 -0
- package/src/services/vision/llama-server.ts +177 -0
- package/src/services/vision/types.d.ts +153 -0
- package/src/services/vision/types.d.ts.map +1 -0
- package/src/services/vision/types.ts +154 -0
- package/src/services/vision/vast-fallback.d.ts +18 -0
- package/src/services/vision/vast-fallback.d.ts.map +1 -0
- package/src/services/vision/vast-fallback.ts +127 -0
- package/src/services/vision-embedding-cache.d.ts +98 -0
- package/src/services/vision-embedding-cache.d.ts.map +1 -0
- package/src/services/vision-embedding-cache.ts +189 -0
- package/src/services/voice/VOICE_WORKBENCH.md +88 -0
- package/src/services/voice/__test-helpers__/fake-ffi.ts +94 -0
- package/src/services/voice/__test-helpers__/synthetic-speech.ts +124 -0
- package/src/services/voice/__tests__/checkpoint-manager.test.ts +241 -0
- package/src/services/voice/__tests__/checkpoint-policy.test.ts +270 -0
- package/src/services/voice/__tests__/eager-context-builder.test.ts +257 -0
- package/src/services/voice/__tests__/eliza1-eot-scorer.test.ts +288 -0
- package/src/services/voice/__tests__/eot-classifier.test.ts +431 -0
- package/src/services/voice/__tests__/optimistic-rollback.test.ts +312 -0
- package/src/services/voice/__tests__/prefill-client.test.ts +266 -0
- package/src/services/voice/__tests__/prefix-preserving-queue.test.ts +208 -0
- package/src/services/voice/__tests__/streaming-asr.test.ts +450 -0
- package/src/services/voice/__tests__/streaming-transcriber.test.ts +339 -0
- package/src/services/voice/__tests__/turn-detector-resolver.test.ts +195 -0
- package/src/services/voice/__tests__/voice-state-machine-prefill.test.ts +275 -0
- package/src/services/voice/__tests__/voice-state-machine.test.ts +354 -0
- package/src/services/voice/asr-timed.real.test.ts +141 -0
- package/src/services/voice/audio-frame-consumer.d.ts +212 -0
- package/src/services/voice/audio-frame-consumer.d.ts.map +1 -0
- package/src/services/voice/audio-frame-consumer.test.ts +343 -0
- package/src/services/voice/audio-frame-consumer.ts +491 -0
- package/src/services/voice/barge-in.d.ts +112 -0
- package/src/services/voice/barge-in.d.ts.map +1 -0
- package/src/services/voice/barge-in.test.ts +244 -0
- package/src/services/voice/barge-in.ts +336 -0
- package/src/services/voice/cancellation-coordinator.d.ts +127 -0
- package/src/services/voice/cancellation-coordinator.d.ts.map +1 -0
- package/src/services/voice/cancellation-coordinator.test.ts +196 -0
- package/src/services/voice/cancellation-coordinator.ts +269 -0
- package/src/services/voice/checkpoint-manager.d.ts +199 -0
- package/src/services/voice/checkpoint-manager.d.ts.map +1 -0
- package/src/services/voice/checkpoint-manager.ts +401 -0
- package/src/services/voice/checkpoint-policy.ts +336 -0
- package/src/services/voice/composite-eot-classifier.test.ts +59 -0
- package/src/services/voice/e2e-harness.test.ts +182 -0
- package/src/services/voice/e2e-harness.ts +743 -0
- package/src/services/voice/eager-context-builder.d.ts +170 -0
- package/src/services/voice/eager-context-builder.d.ts.map +1 -0
- package/src/services/voice/eager-context-builder.ts +262 -0
- package/src/services/voice/eliza1-eot-scorer.d.ts +124 -0
- package/src/services/voice/eliza1-eot-scorer.d.ts.map +1 -0
- package/src/services/voice/eliza1-eot-scorer.ts +242 -0
- package/src/services/voice/embedding-server.ts +200 -0
- package/src/services/voice/embedding.d.ts +133 -0
- package/src/services/voice/embedding.d.ts.map +1 -0
- package/src/services/voice/embedding.test.ts +131 -0
- package/src/services/voice/embedding.ts +243 -0
- package/src/services/voice/emotion-attribution.d.ts +68 -0
- package/src/services/voice/emotion-attribution.d.ts.map +1 -0
- package/src/services/voice/emotion-attribution.test.ts +129 -0
- package/src/services/voice/emotion-attribution.ts +361 -0
- package/src/services/voice/engine-bridge-cancellation.test.ts +422 -0
- package/src/services/voice/engine-bridge.d.ts +759 -0
- package/src/services/voice/engine-bridge.d.ts.map +1 -0
- package/src/services/voice/engine-bridge.test.ts +384 -0
- package/src/services/voice/engine-bridge.ts +2302 -0
- package/src/services/voice/eot-classifier-ggml.d.ts +179 -0
- package/src/services/voice/eot-classifier-ggml.d.ts.map +1 -0
- package/src/services/voice/eot-classifier-ggml.ts +566 -0
- package/src/services/voice/eot-classifier.d.ts +214 -0
- package/src/services/voice/eot-classifier.d.ts.map +1 -0
- package/src/services/voice/eot-classifier.ts +533 -0
- package/src/services/voice/errors.d.ts +20 -0
- package/src/services/voice/errors.d.ts.map +1 -0
- package/src/services/voice/errors.ts +32 -0
- package/src/services/voice/expressive-tags.d.ts +158 -0
- package/src/services/voice/expressive-tags.d.ts.map +1 -0
- package/src/services/voice/expressive-tags.ts +405 -0
- package/src/services/voice/ffi-bindings.d.ts +674 -0
- package/src/services/voice/ffi-bindings.d.ts.map +1 -0
- package/src/services/voice/ffi-bindings.test.ts +728 -0
- package/src/services/voice/ffi-bindings.ts +3225 -0
- package/src/services/voice/first-line-cache.d.ts +181 -0
- package/src/services/voice/first-line-cache.d.ts.map +1 -0
- package/src/services/voice/first-line-cache.ts +725 -0
- package/src/services/voice/fused-eot-scorer.d.ts +51 -0
- package/src/services/voice/fused-eot-scorer.d.ts.map +1 -0
- package/src/services/voice/fused-eot-scorer.ts +135 -0
- package/src/services/voice/index.d.ts +91 -0
- package/src/services/voice/index.d.ts.map +1 -0
- package/src/services/voice/index.ts +481 -0
- package/src/services/voice/kokoro/__tests__/kokoro-backend.test.ts +151 -0
- package/src/services/voice/kokoro/__tests__/kokoro-engine-bridge.real.test.ts +151 -0
- package/src/services/voice/kokoro/__tests__/kokoro-engine-bridge.test.ts +60 -0
- package/src/services/voice/kokoro/__tests__/kokoro-engine-discovery.test.ts +277 -0
- package/src/services/voice/kokoro/__tests__/kokoro-ffi-runtime.test.ts +235 -0
- package/src/services/voice/kokoro/__tests__/kokoro-runtime.test.ts +95 -0
- package/src/services/voice/kokoro/__tests__/phonemizer.test.ts +53 -0
- package/src/services/voice/kokoro/__tests__/runtime-selection.test.ts +231 -0
- package/src/services/voice/kokoro/__tests__/voices.test.ts +57 -0
- package/src/services/voice/kokoro/index.ts +79 -0
- package/src/services/voice/kokoro/kokoro-backend.d.ts +72 -0
- package/src/services/voice/kokoro/kokoro-backend.d.ts.map +1 -0
- package/src/services/voice/kokoro/kokoro-backend.ts +207 -0
- package/src/services/voice/kokoro/kokoro-engine-discovery.d.ts +58 -0
- package/src/services/voice/kokoro/kokoro-engine-discovery.d.ts.map +1 -0
- package/src/services/voice/kokoro/kokoro-engine-discovery.ts +177 -0
- package/src/services/voice/kokoro/kokoro-ffi-runtime.d.ts +75 -0
- package/src/services/voice/kokoro/kokoro-ffi-runtime.d.ts.map +1 -0
- package/src/services/voice/kokoro/kokoro-ffi-runtime.ts +233 -0
- package/src/services/voice/kokoro/kokoro-runtime.d.ts +100 -0
- package/src/services/voice/kokoro/kokoro-runtime.d.ts.map +1 -0
- package/src/services/voice/kokoro/kokoro-runtime.ts +170 -0
- package/src/services/voice/kokoro/phoneme-stream.ts +123 -0
- package/src/services/voice/kokoro/phonemizer.d.ts +50 -0
- package/src/services/voice/kokoro/phonemizer.d.ts.map +1 -0
- package/src/services/voice/kokoro/phonemizer.ts +344 -0
- package/src/services/voice/kokoro/pick-runtime.d.ts +61 -0
- package/src/services/voice/kokoro/pick-runtime.d.ts.map +1 -0
- package/src/services/voice/kokoro/pick-runtime.test.ts +91 -0
- package/src/services/voice/kokoro/pick-runtime.ts +130 -0
- package/src/services/voice/kokoro/runtime-selection.d.ts +92 -0
- package/src/services/voice/kokoro/runtime-selection.d.ts.map +1 -0
- package/src/services/voice/kokoro/runtime-selection.ts +237 -0
- package/src/services/voice/kokoro/types.d.ts +82 -0
- package/src/services/voice/kokoro/types.d.ts.map +1 -0
- package/src/services/voice/kokoro/types.ts +95 -0
- package/src/services/voice/kokoro/voice-presets.d.ts +23 -0
- package/src/services/voice/kokoro/voice-presets.d.ts.map +1 -0
- package/src/services/voice/kokoro/voice-presets.ts +129 -0
- package/src/services/voice/kokoro/voices.d.ts +30 -0
- package/src/services/voice/kokoro/voices.d.ts.map +1 -0
- package/src/services/voice/kokoro/voices.ts +64 -0
- package/src/services/voice/lifecycle.d.ts +135 -0
- package/src/services/voice/lifecycle.d.ts.map +1 -0
- package/src/services/voice/lifecycle.test.ts +315 -0
- package/src/services/voice/lifecycle.ts +301 -0
- package/src/services/voice/live-diarization-session.d.ts +96 -0
- package/src/services/voice/live-diarization-session.d.ts.map +1 -0
- package/src/services/voice/live-diarization-session.ts +289 -0
- package/src/services/voice/mic-source.d.ts +136 -0
- package/src/services/voice/mic-source.d.ts.map +1 -0
- package/src/services/voice/mic-source.test.ts +210 -0
- package/src/services/voice/mic-source.ts +503 -0
- package/src/services/voice/optimistic-policy.d.ts +109 -0
- package/src/services/voice/optimistic-policy.d.ts.map +1 -0
- package/src/services/voice/optimistic-policy.test.ts +101 -0
- package/src/services/voice/optimistic-policy.ts +192 -0
- package/src/services/voice/optimistic-rollback.ts +343 -0
- package/src/services/voice/partial-stabilizer.d.ts +73 -0
- package/src/services/voice/partial-stabilizer.d.ts.map +1 -0
- package/src/services/voice/partial-stabilizer.test.ts +68 -0
- package/src/services/voice/partial-stabilizer.ts +140 -0
- package/src/services/voice/phoneme-tokenizer.d.ts +49 -0
- package/src/services/voice/phoneme-tokenizer.d.ts.map +1 -0
- package/src/services/voice/phoneme-tokenizer.ts +158 -0
- package/src/services/voice/phrase-cache.d.ts +76 -0
- package/src/services/voice/phrase-cache.d.ts.map +1 -0
- package/src/services/voice/phrase-cache.test.ts +242 -0
- package/src/services/voice/phrase-cache.ts +186 -0
- package/src/services/voice/phrase-chunker.d.ts +62 -0
- package/src/services/voice/phrase-chunker.d.ts.map +1 -0
- package/src/services/voice/phrase-chunker.test.ts +239 -0
- package/src/services/voice/phrase-chunker.ts +281 -0
- package/src/services/voice/pipeline-impls.d.ts +151 -0
- package/src/services/voice/pipeline-impls.d.ts.map +1 -0
- package/src/services/voice/pipeline-impls.l6.test.ts +110 -0
- package/src/services/voice/pipeline-impls.test.ts +292 -0
- package/src/services/voice/pipeline-impls.ts +315 -0
- package/src/services/voice/pipeline.d.ts +216 -0
- package/src/services/voice/pipeline.d.ts.map +1 -0
- package/src/services/voice/pipeline.ts +505 -0
- package/src/services/voice/prefill-client.d.ts +123 -0
- package/src/services/voice/prefill-client.d.ts.map +1 -0
- package/src/services/voice/prefill-client.ts +316 -0
- package/src/services/voice/prefix-preserving-queue.d.ts +113 -0
- package/src/services/voice/prefix-preserving-queue.d.ts.map +1 -0
- package/src/services/voice/prefix-preserving-queue.ts +162 -0
- package/src/services/voice/profile-store.d.ts +248 -0
- package/src/services/voice/profile-store.d.ts.map +1 -0
- package/src/services/voice/profile-store.ts +887 -0
- package/src/services/voice/real-audio-decode.test.ts +148 -0
- package/src/services/voice/ring-buffer.d.ts +40 -0
- package/src/services/voice/ring-buffer.d.ts.map +1 -0
- package/src/services/voice/ring-buffer.test.ts +129 -0
- package/src/services/voice/ring-buffer.ts +123 -0
- package/src/services/voice/rollback-queue.d.ts +24 -0
- package/src/services/voice/rollback-queue.d.ts.map +1 -0
- package/src/services/voice/rollback-queue.ts +74 -0
- package/src/services/voice/samantha-preset-placeholder.d.ts +67 -0
- package/src/services/voice/samantha-preset-placeholder.d.ts.map +1 -0
- package/src/services/voice/samantha-preset-placeholder.test.ts +97 -0
- package/src/services/voice/samantha-preset-placeholder.ts +148 -0
- package/src/services/voice/samantha-preset-regenerator.d.ts +87 -0
- package/src/services/voice/samantha-preset-regenerator.d.ts.map +1 -0
- package/src/services/voice/samantha-preset-regenerator.ts +393 -0
- package/src/services/voice/scheduler.d.ts +146 -0
- package/src/services/voice/scheduler.d.ts.map +1 -0
- package/src/services/voice/scheduler.t2.test.ts +141 -0
- package/src/services/voice/scheduler.ts +927 -0
- package/src/services/voice/shared-resources.d.ts +190 -0
- package/src/services/voice/shared-resources.d.ts.map +1 -0
- package/src/services/voice/shared-resources.ts +320 -0
- package/src/services/voice/speaker/attribution-pipeline.d.ts +74 -0
- package/src/services/voice/speaker/attribution-pipeline.d.ts.map +1 -0
- package/src/services/voice/speaker/attribution-pipeline.ts +386 -0
- package/src/services/voice/speaker/diarizer-fused.d.ts +59 -0
- package/src/services/voice/speaker/diarizer-fused.d.ts.map +1 -0
- package/src/services/voice/speaker/diarizer-fused.real.test.ts +100 -0
- package/src/services/voice/speaker/diarizer-fused.ts +154 -0
- package/src/services/voice/speaker/diarizer.d.ts +75 -0
- package/src/services/voice/speaker/diarizer.d.ts.map +1 -0
- package/src/services/voice/speaker/diarizer.ts +218 -0
- package/src/services/voice/speaker/encoder-fused.d.ts +60 -0
- package/src/services/voice/speaker/encoder-fused.d.ts.map +1 -0
- package/src/services/voice/speaker/encoder-fused.real.test.ts +113 -0
- package/src/services/voice/speaker/encoder-fused.ts +138 -0
- package/src/services/voice/speaker/encoder-ggml.d.ts +33 -0
- package/src/services/voice/speaker/encoder-ggml.d.ts.map +1 -0
- package/src/services/voice/speaker/encoder-ggml.ts +79 -0
- package/src/services/voice/speaker/encoder.d.ts +37 -0
- package/src/services/voice/speaker/encoder.d.ts.map +1 -0
- package/src/services/voice/speaker/encoder.ts +105 -0
- package/src/services/voice/speaker-imprint.d.ts +83 -0
- package/src/services/voice/speaker-imprint.d.ts.map +1 -0
- package/src/services/voice/speaker-imprint.test.ts +185 -0
- package/src/services/voice/speaker-imprint.ts +312 -0
- package/src/services/voice/speaker-preset-cache.d.ts +77 -0
- package/src/services/voice/speaker-preset-cache.d.ts.map +1 -0
- package/src/services/voice/speaker-preset-cache.test.ts +154 -0
- package/src/services/voice/speaker-preset-cache.ts +195 -0
- package/src/services/voice/streaming-asr/streaming-pipeline-adapter.ts +292 -0
- package/src/services/voice/system-audio-sink.d.ts +73 -0
- package/src/services/voice/system-audio-sink.d.ts.map +1 -0
- package/src/services/voice/system-audio-sink.test.ts +29 -0
- package/src/services/voice/system-audio-sink.ts +366 -0
- package/src/services/voice/transcriber.d.ts +244 -0
- package/src/services/voice/transcriber.d.ts.map +1 -0
- package/src/services/voice/transcriber.test.ts +392 -0
- package/src/services/voice/transcriber.ts +704 -0
- package/src/services/voice/transcript-knowledge.d.ts +37 -0
- package/src/services/voice/transcript-knowledge.d.ts.map +1 -0
- package/src/services/voice/transcript-knowledge.test.ts +68 -0
- package/src/services/voice/transcript-knowledge.ts +75 -0
- package/src/services/voice/transcript-service.d.ts +41 -0
- package/src/services/voice/transcript-service.d.ts.map +1 -0
- package/src/services/voice/transcript-service.test.ts +137 -0
- package/src/services/voice/transcript-service.ts +141 -0
- package/src/services/voice/transcript-store.d.ts +53 -0
- package/src/services/voice/transcript-store.d.ts.map +1 -0
- package/src/services/voice/transcript-store.test.ts +153 -0
- package/src/services/voice/transcript-store.ts +132 -0
- package/src/services/voice/turn-controller.d.ts +183 -0
- package/src/services/voice/turn-controller.d.ts.map +1 -0
- package/src/services/voice/turn-controller.test.ts +575 -0
- package/src/services/voice/turn-controller.ts +596 -0
- package/src/services/voice/types.d.ts +643 -0
- package/src/services/voice/types.d.ts.map +1 -0
- package/src/services/voice/types.ts +699 -0
- package/src/services/voice/vad.d.ts +282 -0
- package/src/services/voice/vad.d.ts.map +1 -0
- package/src/services/voice/vad.test.ts +480 -0
- package/src/services/voice/vad.ts +827 -0
- package/src/services/voice/vad.v1-v4.test.ts +222 -0
- package/src/services/voice/voice-budget.d.ts +241 -0
- package/src/services/voice/voice-budget.d.ts.map +1 -0
- package/src/services/voice/voice-budget.test.ts +418 -0
- package/src/services/voice/voice-budget.ts +635 -0
- package/src/services/voice/voice-duet.test.ts +375 -0
- package/src/services/voice/voice-emotion-classifier.d.ts +95 -0
- package/src/services/voice/voice-emotion-classifier.d.ts.map +1 -0
- package/src/services/voice/voice-emotion-classifier.test.ts +210 -0
- package/src/services/voice/voice-emotion-classifier.ts +273 -0
- package/src/services/voice/voice-preset-format.d.ts +158 -0
- package/src/services/voice/voice-preset-format.d.ts.map +1 -0
- package/src/services/voice/voice-preset-format.ts +700 -0
- package/src/services/voice/voice-preset-generator.test.ts +89 -0
- package/src/services/voice/voice-profile-artifact.d.ts +116 -0
- package/src/services/voice/voice-profile-artifact.d.ts.map +1 -0
- package/src/services/voice/voice-profile-artifact.test.ts +138 -0
- package/src/services/voice/voice-profile-artifact.ts +518 -0
- package/src/services/voice/voice-profile-routes.d.ts +83 -0
- package/src/services/voice/voice-profile-routes.d.ts.map +1 -0
- package/src/services/voice/voice-profile-routes.test.ts +429 -0
- package/src/services/voice/voice-profile-routes.ts +425 -0
- package/src/services/voice/voice-scenario.ts +154 -0
- package/src/services/voice/voice-settings.d.ts +82 -0
- package/src/services/voice/voice-settings.d.ts.map +1 -0
- package/src/services/voice/voice-settings.ts +172 -0
- package/src/services/voice/voice-state-machine.d.ts +364 -0
- package/src/services/voice/voice-state-machine.d.ts.map +1 -0
- package/src/services/voice/voice-state-machine.ts +727 -0
- package/src/services/voice/voice-workbench-report.test.ts +168 -0
- package/src/services/voice/voice-workbench-report.ts +326 -0
- package/src/services/voice/voice-workbench.test.ts +158 -0
- package/src/services/voice/voice.test.ts +1070 -0
- package/src/services/voice/wake-word-ggml.d.ts +101 -0
- package/src/services/voice/wake-word-ggml.d.ts.map +1 -0
- package/src/services/voice/wake-word-ggml.ts +320 -0
- package/src/services/voice/wake-word.d.ts +255 -0
- package/src/services/voice/wake-word.d.ts.map +1 -0
- package/src/services/voice/wake-word.test.ts +298 -0
- package/src/services/voice/wake-word.ts +554 -0
- package/src/services/voice/wrap-with-first-line-cache.d.ts +70 -0
- package/src/services/voice/wrap-with-first-line-cache.d.ts.map +1 -0
- package/src/services/voice/wrap-with-first-line-cache.ts +267 -0
- package/src/services/voice-model-updater.d.ts +240 -0
- package/src/services/voice-model-updater.d.ts.map +1 -0
- package/src/services/voice-model-updater.ts +724 -0
- package/src/services/voice-prewarm.d.ts +3 -0
- package/src/services/voice-prewarm.d.ts.map +1 -0
- package/src/services/voice-prewarm.ts +51 -0
- package/dist/index.d.ts +0 -37
- package/dist/index.js +0 -1098
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transcript → knowledge (documents store) mapping (#8789 transcripts).
|
|
3
|
+
*
|
|
4
|
+
* A finished transcript is mirrored into the documents/knowledge store as a
|
|
5
|
+
* private, searchable text item so it is parsable/readable from the Knowledge
|
|
6
|
+
* view, surfaced by the documents provider, and found by the document `search`
|
|
7
|
+
* action — exactly as a user would expect "search my transcripts" to work. The
|
|
8
|
+
* structured record (audio + word timings + diarization) stays the source of
|
|
9
|
+
* truth in the transcript store; this is the denormalized search copy, linked
|
|
10
|
+
* back by `metadata.transcriptId`.
|
|
11
|
+
*
|
|
12
|
+
* Pure: it builds the documents-store *fields* from a shared `Transcript`; the
|
|
13
|
+
* service combines them with the runtime UUIDs (world/room/entity/client ids)
|
|
14
|
+
* and `addedFrom` to call `DocumentService.addDocument`.
|
|
15
|
+
*/
|
|
16
|
+
import type { Transcript, TranscriptScope } from "@elizaos/shared/transcripts";
|
|
17
|
+
/** The documents-store fields derived from a transcript (sans runtime UUIDs). */
|
|
18
|
+
export interface TranscriptKnowledgePayload {
|
|
19
|
+
/** Plain, speaker-labeled transcript text — the searchable + chunked body. */
|
|
20
|
+
content: string;
|
|
21
|
+
/** Suggested filename (slugified title + `.txt`). */
|
|
22
|
+
filename: string;
|
|
23
|
+
contentType: string;
|
|
24
|
+
scope: TranscriptScope;
|
|
25
|
+
/** Metadata merged onto the document — tags + the link back to the record. */
|
|
26
|
+
metadata: Record<string, unknown>;
|
|
27
|
+
}
|
|
28
|
+
/** Tag every mirrored transcript carries so it's filterable as a transcript. */
|
|
29
|
+
export declare const TRANSCRIPT_DOCUMENT_TAG = "transcript";
|
|
30
|
+
/**
|
|
31
|
+
* Build the documents-store fields for mirroring a transcript into knowledge.
|
|
32
|
+
* The body is the speaker-labeled plain text (what gets embedded + searched);
|
|
33
|
+
* `metadata.transcriptId` links the knowledge item back to the rich record so a
|
|
34
|
+
* Knowledge-view consumer can open it in the player.
|
|
35
|
+
*/
|
|
36
|
+
export declare function transcriptKnowledgePayload(transcript: Transcript): TranscriptKnowledgePayload;
|
|
37
|
+
//# sourceMappingURL=transcript-knowledge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcript-knowledge.d.ts","sourceRoot":"","sources":["transcript-knowledge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAG/E,iFAAiF;AACjF,MAAM,WAAW,0BAA0B;IAC1C,8EAA8E;IAC9E,OAAO,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,eAAe,CAAC;IACvB,8EAA8E;IAC9E,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,gFAAgF;AAChF,eAAO,MAAM,uBAAuB,eAAe,CAAC;AAYpD;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACzC,UAAU,EAAE,UAAU,GACpB,0BAA0B,CAsB5B"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { Transcript } from "@elizaos/shared/transcripts";
|
|
2
|
+
import { describe, expect, it } from "vitest";
|
|
3
|
+
import {
|
|
4
|
+
TRANSCRIPT_DOCUMENT_TAG,
|
|
5
|
+
transcriptKnowledgePayload,
|
|
6
|
+
} from "./transcript-knowledge";
|
|
7
|
+
|
|
8
|
+
const transcript: Transcript = {
|
|
9
|
+
id: "t-123",
|
|
10
|
+
title: "Standup — June 20",
|
|
11
|
+
createdAt: 1000,
|
|
12
|
+
endedAt: 5000,
|
|
13
|
+
durationMs: 4000,
|
|
14
|
+
audioUrl: "/api/media/abc.wav",
|
|
15
|
+
source: "voice-session",
|
|
16
|
+
scope: "owner-private",
|
|
17
|
+
status: "ready",
|
|
18
|
+
speakerCount: 2,
|
|
19
|
+
segments: [
|
|
20
|
+
{
|
|
21
|
+
id: "s1",
|
|
22
|
+
speakerLabel: "Alice",
|
|
23
|
+
startMs: 0,
|
|
24
|
+
endMs: 1000,
|
|
25
|
+
text: "ship the build",
|
|
26
|
+
words: [],
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
id: "s2",
|
|
30
|
+
speakerLabel: "Bob",
|
|
31
|
+
startMs: 1200,
|
|
32
|
+
endMs: 2000,
|
|
33
|
+
text: "on it",
|
|
34
|
+
words: [],
|
|
35
|
+
},
|
|
36
|
+
],
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
describe("transcriptKnowledgePayload", () => {
|
|
40
|
+
it("builds a searchable text document linked back to the transcript", () => {
|
|
41
|
+
const p = transcriptKnowledgePayload(transcript);
|
|
42
|
+
// Body is the speaker-labeled plain text (what gets embedded + searched).
|
|
43
|
+
expect(p.content).toBe("Alice: ship the build\nBob: on it");
|
|
44
|
+
expect(p.contentType).toBe("text/plain");
|
|
45
|
+
expect(p.scope).toBe("owner-private");
|
|
46
|
+
// Slugified filename.
|
|
47
|
+
expect(p.filename).toBe("standup-june-20.txt");
|
|
48
|
+
// Tagged + linked back to the rich record.
|
|
49
|
+
expect(p.metadata.tags).toEqual([TRANSCRIPT_DOCUMENT_TAG]);
|
|
50
|
+
expect(p.metadata.source).toBe(TRANSCRIPT_DOCUMENT_TAG);
|
|
51
|
+
expect(p.metadata.transcriptId).toBe("t-123");
|
|
52
|
+
expect(p.metadata.title).toBe("Standup — June 20");
|
|
53
|
+
expect(p.metadata.audioUrl).toBe("/api/media/abc.wav");
|
|
54
|
+
expect(p.metadata.durationMs).toBe(4000);
|
|
55
|
+
expect(p.metadata.speakerCount).toBe(2);
|
|
56
|
+
expect(p.metadata.textBacked).toBe(true);
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it("omits audioUrl when the transcript has no audio, and slugs an empty title", () => {
|
|
60
|
+
const p = transcriptKnowledgePayload({
|
|
61
|
+
...transcript,
|
|
62
|
+
title: " ",
|
|
63
|
+
audioUrl: undefined,
|
|
64
|
+
});
|
|
65
|
+
expect(p.metadata.audioUrl).toBeUndefined();
|
|
66
|
+
expect(p.filename).toBe("transcript.txt");
|
|
67
|
+
});
|
|
68
|
+
});
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transcript → knowledge (documents store) mapping (#8789 transcripts).
|
|
3
|
+
*
|
|
4
|
+
* A finished transcript is mirrored into the documents/knowledge store as a
|
|
5
|
+
* private, searchable text item so it is parsable/readable from the Knowledge
|
|
6
|
+
* view, surfaced by the documents provider, and found by the document `search`
|
|
7
|
+
* action — exactly as a user would expect "search my transcripts" to work. The
|
|
8
|
+
* structured record (audio + word timings + diarization) stays the source of
|
|
9
|
+
* truth in the transcript store; this is the denormalized search copy, linked
|
|
10
|
+
* back by `metadata.transcriptId`.
|
|
11
|
+
*
|
|
12
|
+
* Pure: it builds the documents-store *fields* from a shared `Transcript`; the
|
|
13
|
+
* service combines them with the runtime UUIDs (world/room/entity/client ids)
|
|
14
|
+
* and `addedFrom` to call `DocumentService.addDocument`.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import type { Transcript, TranscriptScope } from "@elizaos/shared/transcripts";
|
|
18
|
+
import { transcriptPlainText } from "@elizaos/shared/transcripts";
|
|
19
|
+
|
|
20
|
+
/** The documents-store fields derived from a transcript (sans runtime UUIDs). */
|
|
21
|
+
export interface TranscriptKnowledgePayload {
|
|
22
|
+
/** Plain, speaker-labeled transcript text — the searchable + chunked body. */
|
|
23
|
+
content: string;
|
|
24
|
+
/** Suggested filename (slugified title + `.txt`). */
|
|
25
|
+
filename: string;
|
|
26
|
+
contentType: string;
|
|
27
|
+
scope: TranscriptScope;
|
|
28
|
+
/** Metadata merged onto the document — tags + the link back to the record. */
|
|
29
|
+
metadata: Record<string, unknown>;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** Tag every mirrored transcript carries so it's filterable as a transcript. */
|
|
33
|
+
export const TRANSCRIPT_DOCUMENT_TAG = "transcript";
|
|
34
|
+
|
|
35
|
+
/** Lowercase ascii slug for a filename (fallback "transcript"). */
|
|
36
|
+
function slugify(title: string): string {
|
|
37
|
+
const slug = title
|
|
38
|
+
.toLowerCase()
|
|
39
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
40
|
+
.replace(/^-+|-+$/g, "")
|
|
41
|
+
.slice(0, 64);
|
|
42
|
+
return slug || "transcript";
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Build the documents-store fields for mirroring a transcript into knowledge.
|
|
47
|
+
* The body is the speaker-labeled plain text (what gets embedded + searched);
|
|
48
|
+
* `metadata.transcriptId` links the knowledge item back to the rich record so a
|
|
49
|
+
* Knowledge-view consumer can open it in the player.
|
|
50
|
+
*/
|
|
51
|
+
export function transcriptKnowledgePayload(
|
|
52
|
+
transcript: Transcript,
|
|
53
|
+
): TranscriptKnowledgePayload {
|
|
54
|
+
const metadata: Record<string, unknown> = {
|
|
55
|
+
source: TRANSCRIPT_DOCUMENT_TAG,
|
|
56
|
+
tags: [TRANSCRIPT_DOCUMENT_TAG],
|
|
57
|
+
transcriptId: transcript.id,
|
|
58
|
+
title: transcript.title,
|
|
59
|
+
durationMs: transcript.durationMs,
|
|
60
|
+
speakerCount: transcript.speakerCount,
|
|
61
|
+
createdAt: transcript.createdAt,
|
|
62
|
+
// Mark as text-backed so the documents UI treats it as editable/previewable
|
|
63
|
+
// text rather than an opaque binary upload.
|
|
64
|
+
textBacked: true,
|
|
65
|
+
};
|
|
66
|
+
if (transcript.audioUrl) metadata.audioUrl = transcript.audioUrl;
|
|
67
|
+
|
|
68
|
+
return {
|
|
69
|
+
content: transcriptPlainText(transcript.segments),
|
|
70
|
+
filename: `${slugify(transcript.title)}.txt`,
|
|
71
|
+
contentType: "text/plain",
|
|
72
|
+
scope: transcript.scope,
|
|
73
|
+
metadata,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TranscriptService (#8789) — orchestrates a finished recording into both homes:
|
|
3
|
+
* the rich {@link TranscriptStore} record (source of truth: audio + word-timed
|
|
4
|
+
* diarized segments) AND a searchable knowledge/documents mirror, linked by
|
|
5
|
+
* `knowledgeDocumentId`. Create mirrors first (best-effort — a search-index
|
|
6
|
+
* failure must not lose the recording), then persists the record carrying the
|
|
7
|
+
* link. Delete removes the mirror too.
|
|
8
|
+
*/
|
|
9
|
+
import { type UUID } from "@elizaos/core";
|
|
10
|
+
import type { Transcript, TranscriptSummary } from "@elizaos/shared/transcripts";
|
|
11
|
+
import { type TranscriptStoreRuntime } from "./transcript-store";
|
|
12
|
+
/** Store runtime + service resolution (the real IAgentRuntime satisfies it). */
|
|
13
|
+
export interface TranscriptServiceRuntime extends TranscriptStoreRuntime {
|
|
14
|
+
getService<T>(name: string): T | null;
|
|
15
|
+
}
|
|
16
|
+
export interface CreateTranscriptInput {
|
|
17
|
+
worldId: UUID;
|
|
18
|
+
roomId: UUID;
|
|
19
|
+
/** The owner/speaker entity the recording is attributed to. */
|
|
20
|
+
entityId: UUID;
|
|
21
|
+
transcript: Transcript;
|
|
22
|
+
}
|
|
23
|
+
export declare class TranscriptService {
|
|
24
|
+
private readonly runtime;
|
|
25
|
+
private readonly store;
|
|
26
|
+
constructor(runtime: TranscriptServiceRuntime);
|
|
27
|
+
/** Mirror the transcript text into knowledge, then persist the record. */
|
|
28
|
+
create(input: CreateTranscriptInput): Promise<Transcript>;
|
|
29
|
+
list(roomId?: UUID, limit?: number): Promise<TranscriptSummary[]>;
|
|
30
|
+
get(id: UUID): Promise<Transcript | null>;
|
|
31
|
+
/** Delete the record + its knowledge mirror (mirror removal best-effort). */
|
|
32
|
+
delete(id: UUID): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Best-effort mirror into the documents store. Returns the stored document id
|
|
35
|
+
* to link, or undefined when no documents service is loaded or the mirror
|
|
36
|
+
* fails — the recording still persists either way (the link is a secondary
|
|
37
|
+
* search index, never the source of truth).
|
|
38
|
+
*/
|
|
39
|
+
private mirrorToKnowledge;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=transcript-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcript-service.d.ts","sourceRoot":"","sources":["transcript-service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAU,KAAK,IAAI,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EACX,UAAU,EAEV,iBAAiB,EACjB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAEN,KAAK,sBAAsB,EAC3B,MAAM,oBAAoB,CAAC;AAkB5B,gFAAgF;AAChF,MAAM,WAAW,wBAAyB,SAAQ,sBAAsB;IACvE,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,qBAAqB;IACrC,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,IAAI,CAAC;IACb,+DAA+D;IAC/D,QAAQ,EAAE,IAAI,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;CACvB;AAED,qBAAa,iBAAiB;IAGjB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkB;gBAEX,OAAO,EAAE,wBAAwB;IAI9D,0EAA0E;IACpE,MAAM,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC;IAc/D,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAIjE,GAAG,CAAC,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAIzC,6EAA6E;IACvE,MAAM,CAAC,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBrC;;;;;OAKG;YACW,iBAAiB;CAkC/B"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import type { Memory, UUID } from "@elizaos/core";
|
|
2
|
+
import type { Transcript } from "@elizaos/shared/transcripts";
|
|
3
|
+
import { describe, expect, it, vi } from "vitest";
|
|
4
|
+
import {
|
|
5
|
+
type CreateTranscriptInput,
|
|
6
|
+
TranscriptService,
|
|
7
|
+
type TranscriptServiceRuntime,
|
|
8
|
+
} from "./transcript-service";
|
|
9
|
+
|
|
10
|
+
const WORLD = "00000000-0000-0000-0000-0000000000ww" as UUID;
|
|
11
|
+
const ROOM = "11111111-1111-1111-1111-111111111111" as UUID;
|
|
12
|
+
const ENTITY = "22222222-2222-2222-2222-222222222222" as UUID;
|
|
13
|
+
|
|
14
|
+
function makeTranscript(): Transcript {
|
|
15
|
+
return {
|
|
16
|
+
id: "aaaaaaaa-0000-0000-0000-000000000001",
|
|
17
|
+
title: "Standup",
|
|
18
|
+
createdAt: 1000,
|
|
19
|
+
durationMs: 2000,
|
|
20
|
+
audioUrl: "/api/media/x.wav",
|
|
21
|
+
source: "voice-session",
|
|
22
|
+
scope: "owner-private",
|
|
23
|
+
status: "ready",
|
|
24
|
+
speakerCount: 1,
|
|
25
|
+
segments: [
|
|
26
|
+
{
|
|
27
|
+
id: "s1",
|
|
28
|
+
speakerLabel: "Alice",
|
|
29
|
+
startMs: 0,
|
|
30
|
+
endMs: 2000,
|
|
31
|
+
text: "hi",
|
|
32
|
+
words: [],
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function fakeRuntime(opts: {
|
|
39
|
+
withDocuments: boolean;
|
|
40
|
+
}): TranscriptServiceRuntime & {
|
|
41
|
+
rows: Map<string, Memory>;
|
|
42
|
+
addDocument: ReturnType<typeof vi.fn>;
|
|
43
|
+
} {
|
|
44
|
+
const rows = new Map<string, Memory>();
|
|
45
|
+
const addDocument = vi.fn(async () => ({
|
|
46
|
+
storedDocumentMemoryId: "dddddddd-0000-0000-0000-000000000001" as UUID,
|
|
47
|
+
}));
|
|
48
|
+
return {
|
|
49
|
+
rows,
|
|
50
|
+
addDocument,
|
|
51
|
+
agentId: "agent-1" as UUID,
|
|
52
|
+
async createMemory(memory) {
|
|
53
|
+
rows.set(memory.id as string, memory);
|
|
54
|
+
return memory.id as UUID;
|
|
55
|
+
},
|
|
56
|
+
async getMemories() {
|
|
57
|
+
return [...rows.values()];
|
|
58
|
+
},
|
|
59
|
+
async getMemoryById(id) {
|
|
60
|
+
return rows.get(id) ?? null;
|
|
61
|
+
},
|
|
62
|
+
async deleteMemory(id) {
|
|
63
|
+
rows.delete(id);
|
|
64
|
+
},
|
|
65
|
+
getService<T>(name: string): T | null {
|
|
66
|
+
if (name === "documents" && opts.withDocuments) {
|
|
67
|
+
return { addDocument } as unknown as T;
|
|
68
|
+
}
|
|
69
|
+
return null;
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const input = (transcript: Transcript): CreateTranscriptInput => ({
|
|
75
|
+
worldId: WORLD,
|
|
76
|
+
roomId: ROOM,
|
|
77
|
+
entityId: ENTITY,
|
|
78
|
+
transcript,
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
describe("TranscriptService", () => {
|
|
82
|
+
it("mirrors the transcript into knowledge and links the document id", async () => {
|
|
83
|
+
const rt = fakeRuntime({ withDocuments: true });
|
|
84
|
+
const svc = new TranscriptService(rt);
|
|
85
|
+
const t = makeTranscript();
|
|
86
|
+
const saved = await svc.create(input(t));
|
|
87
|
+
|
|
88
|
+
// Mirror called with the searchable text + transcript link metadata.
|
|
89
|
+
expect(rt.addDocument).toHaveBeenCalledTimes(1);
|
|
90
|
+
const opts = rt.addDocument.mock.calls[0][0];
|
|
91
|
+
expect(opts.content).toBe("Alice: hi");
|
|
92
|
+
expect(opts.scope).toBe("owner-private");
|
|
93
|
+
expect(opts.clientDocumentId).toBe(t.id);
|
|
94
|
+
expect((opts.metadata as { transcriptId: string }).transcriptId).toBe(t.id);
|
|
95
|
+
|
|
96
|
+
// The stored record carries the knowledge link.
|
|
97
|
+
expect(saved.knowledgeDocumentId).toBe(
|
|
98
|
+
"dddddddd-0000-0000-0000-000000000001",
|
|
99
|
+
);
|
|
100
|
+
const got = await svc.get(t.id as UUID);
|
|
101
|
+
expect(got?.knowledgeDocumentId).toBe(
|
|
102
|
+
"dddddddd-0000-0000-0000-000000000001",
|
|
103
|
+
);
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
it("still persists the record when no documents service is loaded", async () => {
|
|
107
|
+
const rt = fakeRuntime({ withDocuments: false });
|
|
108
|
+
const svc = new TranscriptService(rt);
|
|
109
|
+
const t = makeTranscript();
|
|
110
|
+
const saved = await svc.create(input(t));
|
|
111
|
+
expect(rt.addDocument).not.toHaveBeenCalled();
|
|
112
|
+
expect(saved.knowledgeDocumentId).toBeUndefined();
|
|
113
|
+
expect(await svc.get(t.id as UUID)).toEqual(t);
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
it("persists the record even if the mirror throws (recording is never lost)", async () => {
|
|
117
|
+
const rt = fakeRuntime({ withDocuments: true });
|
|
118
|
+
rt.addDocument.mockRejectedValueOnce(new Error("docs down"));
|
|
119
|
+
const svc = new TranscriptService(rt);
|
|
120
|
+
const t = makeTranscript();
|
|
121
|
+
const saved = await svc.create(input(t));
|
|
122
|
+
expect(saved.knowledgeDocumentId).toBeUndefined();
|
|
123
|
+
expect(await svc.get(t.id as UUID)).not.toBeNull();
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
it("removes the knowledge mirror on delete", async () => {
|
|
127
|
+
const rt = fakeRuntime({ withDocuments: true });
|
|
128
|
+
const svc = new TranscriptService(rt);
|
|
129
|
+
const t = makeTranscript();
|
|
130
|
+
await svc.create(input(t));
|
|
131
|
+
const docId = "dddddddd-0000-0000-0000-000000000001";
|
|
132
|
+
rt.rows.set(docId, { id: docId } as Memory); // stand-in for the doc row
|
|
133
|
+
await svc.delete(t.id as UUID);
|
|
134
|
+
expect(rt.rows.has(t.id)).toBe(false);
|
|
135
|
+
expect(rt.rows.has(docId)).toBe(false);
|
|
136
|
+
});
|
|
137
|
+
});
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TranscriptService (#8789) — orchestrates a finished recording into both homes:
|
|
3
|
+
* the rich {@link TranscriptStore} record (source of truth: audio + word-timed
|
|
4
|
+
* diarized segments) AND a searchable knowledge/documents mirror, linked by
|
|
5
|
+
* `knowledgeDocumentId`. Create mirrors first (best-effort — a search-index
|
|
6
|
+
* failure must not lose the recording), then persists the record carrying the
|
|
7
|
+
* link. Delete removes the mirror too.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { logger, type UUID } from "@elizaos/core";
|
|
11
|
+
import type {
|
|
12
|
+
Transcript,
|
|
13
|
+
TranscriptScope,
|
|
14
|
+
TranscriptSummary,
|
|
15
|
+
} from "@elizaos/shared/transcripts";
|
|
16
|
+
import { transcriptKnowledgePayload } from "./transcript-knowledge";
|
|
17
|
+
import {
|
|
18
|
+
TranscriptStore,
|
|
19
|
+
type TranscriptStoreRuntime,
|
|
20
|
+
} from "./transcript-store";
|
|
21
|
+
|
|
22
|
+
/** The documents/knowledge service surface the mirror needs (structural). */
|
|
23
|
+
interface DocumentsLike {
|
|
24
|
+
addDocument(options: {
|
|
25
|
+
worldId: UUID;
|
|
26
|
+
roomId: UUID;
|
|
27
|
+
entityId: UUID;
|
|
28
|
+
clientDocumentId: UUID;
|
|
29
|
+
contentType: string;
|
|
30
|
+
originalFilename: string;
|
|
31
|
+
content: string;
|
|
32
|
+
scope?: TranscriptScope;
|
|
33
|
+
addedFrom?: string;
|
|
34
|
+
metadata?: Record<string, unknown>;
|
|
35
|
+
}): Promise<{ storedDocumentMemoryId: UUID }>;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** Store runtime + service resolution (the real IAgentRuntime satisfies it). */
|
|
39
|
+
export interface TranscriptServiceRuntime extends TranscriptStoreRuntime {
|
|
40
|
+
getService<T>(name: string): T | null;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface CreateTranscriptInput {
|
|
44
|
+
worldId: UUID;
|
|
45
|
+
roomId: UUID;
|
|
46
|
+
/** The owner/speaker entity the recording is attributed to. */
|
|
47
|
+
entityId: UUID;
|
|
48
|
+
transcript: Transcript;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export class TranscriptService {
|
|
52
|
+
private readonly store: TranscriptStore;
|
|
53
|
+
|
|
54
|
+
constructor(private readonly runtime: TranscriptServiceRuntime) {
|
|
55
|
+
this.store = new TranscriptStore(runtime);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/** Mirror the transcript text into knowledge, then persist the record. */
|
|
59
|
+
async create(input: CreateTranscriptInput): Promise<Transcript> {
|
|
60
|
+
const { worldId, roomId, entityId, transcript } = input;
|
|
61
|
+
const knowledgeDocumentId = await this.mirrorToKnowledge(
|
|
62
|
+
worldId,
|
|
63
|
+
roomId,
|
|
64
|
+
entityId,
|
|
65
|
+
transcript,
|
|
66
|
+
);
|
|
67
|
+
const record = knowledgeDocumentId
|
|
68
|
+
? { ...transcript, knowledgeDocumentId }
|
|
69
|
+
: transcript;
|
|
70
|
+
return this.store.create({ roomId, entityId, transcript: record });
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
list(roomId?: UUID, limit?: number): Promise<TranscriptSummary[]> {
|
|
74
|
+
return this.store.list(roomId, limit);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
get(id: UUID): Promise<Transcript | null> {
|
|
78
|
+
return this.store.get(id);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/** Delete the record + its knowledge mirror (mirror removal best-effort). */
|
|
82
|
+
async delete(id: UUID): Promise<void> {
|
|
83
|
+
const existing = await this.store.get(id);
|
|
84
|
+
if (existing?.knowledgeDocumentId) {
|
|
85
|
+
try {
|
|
86
|
+
await this.runtime.deleteMemory(existing.knowledgeDocumentId as UUID);
|
|
87
|
+
} catch (err) {
|
|
88
|
+
logger.warn(
|
|
89
|
+
{
|
|
90
|
+
transcriptId: id,
|
|
91
|
+
knowledgeDocumentId: existing.knowledgeDocumentId,
|
|
92
|
+
error: err instanceof Error ? err.message : String(err),
|
|
93
|
+
},
|
|
94
|
+
"[TranscriptService] failed to remove knowledge mirror",
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
await this.store.delete(id);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Best-effort mirror into the documents store. Returns the stored document id
|
|
103
|
+
* to link, or undefined when no documents service is loaded or the mirror
|
|
104
|
+
* fails — the recording still persists either way (the link is a secondary
|
|
105
|
+
* search index, never the source of truth).
|
|
106
|
+
*/
|
|
107
|
+
private async mirrorToKnowledge(
|
|
108
|
+
worldId: UUID,
|
|
109
|
+
roomId: UUID,
|
|
110
|
+
entityId: UUID,
|
|
111
|
+
transcript: Transcript,
|
|
112
|
+
): Promise<string | undefined> {
|
|
113
|
+
const documents = this.runtime.getService<DocumentsLike>("documents");
|
|
114
|
+
if (!documents) return undefined;
|
|
115
|
+
try {
|
|
116
|
+
const payload = transcriptKnowledgePayload(transcript);
|
|
117
|
+
const res = await documents.addDocument({
|
|
118
|
+
worldId,
|
|
119
|
+
roomId,
|
|
120
|
+
entityId,
|
|
121
|
+
clientDocumentId: transcript.id as UUID,
|
|
122
|
+
contentType: payload.contentType,
|
|
123
|
+
originalFilename: payload.filename,
|
|
124
|
+
content: payload.content,
|
|
125
|
+
scope: payload.scope,
|
|
126
|
+
addedFrom: "runtime-internal",
|
|
127
|
+
metadata: payload.metadata,
|
|
128
|
+
});
|
|
129
|
+
return res.storedDocumentMemoryId;
|
|
130
|
+
} catch (err) {
|
|
131
|
+
logger.warn(
|
|
132
|
+
{
|
|
133
|
+
transcriptId: transcript.id,
|
|
134
|
+
error: err instanceof Error ? err.message : String(err),
|
|
135
|
+
},
|
|
136
|
+
"[TranscriptService] knowledge mirror failed",
|
|
137
|
+
);
|
|
138
|
+
return undefined;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transcript store (#8789 transcripts) — persistence for the rich transcript
|
|
3
|
+
* record (audio URL + word-timed diarized segments).
|
|
4
|
+
*
|
|
5
|
+
* Reuses the runtime's proven `memories` partition mechanism (exactly how the
|
|
6
|
+
* documents store works) rather than a new table/migration: each transcript is
|
|
7
|
+
* one memory row in the `"transcripts"` partition, with the full {@link Transcript}
|
|
8
|
+
* in `content.transcript`. The player loads a whole record by id and the list
|
|
9
|
+
* reads recent rows — no querying INSIDE segments is needed, because search is
|
|
10
|
+
* served by the knowledge mirror (see `transcript-knowledge.ts`). A custom
|
|
11
|
+
* `metadata.type` keeps it clear of the document/fragment CHECK constraints.
|
|
12
|
+
*/
|
|
13
|
+
import type { Memory, UUID } from "@elizaos/core";
|
|
14
|
+
import type { Transcript, TranscriptSummary } from "@elizaos/shared/transcripts";
|
|
15
|
+
/** The `type` column partition transcripts live in (sibling to "messages"). */
|
|
16
|
+
export declare const TRANSCRIPTS_TABLE = "transcripts";
|
|
17
|
+
/** `metadata.type` marker — NOT "document"/"fragment", so no CHECK fires. */
|
|
18
|
+
export declare const TRANSCRIPT_METADATA_TYPE = "transcript";
|
|
19
|
+
/** The subset of `IAgentRuntime` the store needs (real runtime satisfies it). */
|
|
20
|
+
export interface TranscriptStoreRuntime {
|
|
21
|
+
agentId: UUID;
|
|
22
|
+
createMemory(memory: Memory, tableName: string, unique?: boolean): Promise<UUID>;
|
|
23
|
+
getMemories(params: {
|
|
24
|
+
tableName: string;
|
|
25
|
+
roomId?: UUID;
|
|
26
|
+
count?: number;
|
|
27
|
+
orderBy?: "createdAt";
|
|
28
|
+
orderDirection?: "asc" | "desc";
|
|
29
|
+
}): Promise<Memory[]>;
|
|
30
|
+
getMemoryById(id: UUID): Promise<Memory | null>;
|
|
31
|
+
deleteMemory(id: UUID): Promise<void>;
|
|
32
|
+
}
|
|
33
|
+
export interface CreateTranscriptInput {
|
|
34
|
+
roomId: UUID;
|
|
35
|
+
/** The owner/speaker entity the recording is attributed to. */
|
|
36
|
+
entityId: UUID;
|
|
37
|
+
/** The fully-built transcript record (audio + segments + words). */
|
|
38
|
+
transcript: Transcript;
|
|
39
|
+
}
|
|
40
|
+
/** CRUD for transcript records over the runtime memory partition. */
|
|
41
|
+
export declare class TranscriptStore {
|
|
42
|
+
private readonly runtime;
|
|
43
|
+
constructor(runtime: TranscriptStoreRuntime);
|
|
44
|
+
/** Persist a transcript record; returns it unchanged. */
|
|
45
|
+
create(input: CreateTranscriptInput): Promise<Transcript>;
|
|
46
|
+
/** List recent transcripts (newest first) as compact summaries. */
|
|
47
|
+
list(roomId?: UUID, limit?: number): Promise<TranscriptSummary[]>;
|
|
48
|
+
/** Load one full transcript record by id. */
|
|
49
|
+
get(id: UUID): Promise<Transcript | null>;
|
|
50
|
+
/** Delete a transcript record (the knowledge mirror is removed separately). */
|
|
51
|
+
delete(id: UUID): Promise<void>;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=transcript-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcript-store.d.ts","sourceRoot":"","sources":["transcript-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAkB,IAAI,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,KAAK,EACX,UAAU,EACV,iBAAiB,EACjB,MAAM,6BAA6B,CAAC;AAMrC,+EAA+E;AAC/E,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAC/C,6EAA6E;AAC7E,eAAO,MAAM,wBAAwB,eAAe,CAAC;AAErD,iFAAiF;AACjF,MAAM,WAAW,sBAAsB;IACtC,OAAO,EAAE,IAAI,CAAC;IACd,YAAY,CACX,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,OAAO,GACd,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,WAAW,CAAC,MAAM,EAAE;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,IAAI,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,WAAW,CAAC;QACtB,cAAc,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;KAChC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACtB,aAAa,CAAC,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAChD,YAAY,CAAC,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,qBAAqB;IACrC,MAAM,EAAE,IAAI,CAAC;IACb,+DAA+D;IAC/D,QAAQ,EAAE,IAAI,CAAC;IACf,oEAAoE;IACpE,UAAU,EAAE,UAAU,CAAC;CACvB;AAeD,qEAAqE;AACrE,qBAAa,eAAe;IACf,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,sBAAsB;IAE5D,yDAAyD;IACnD,MAAM,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC;IA+B/D,mEAAmE;IAC7D,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,SAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAgBpE,6CAA6C;IACvC,GAAG,CAAC,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAK/C,+EAA+E;IACzE,MAAM,CAAC,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAGrC"}
|