@memberjunction/ai-prompts 6.2.0-edge.1 → 6.2.0-edge.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.
Files changed (82) hide show
  1. package/README.md +41 -0
  2. package/dist/AIModelRunner.d.ts +9 -88
  3. package/dist/AIModelRunner.d.ts.map +1 -1
  4. package/dist/AIModelRunner.js +11 -283
  5. package/dist/AIModelRunner.js.map +1 -1
  6. package/dist/BaseModelRunner.d.ts +36 -1
  7. package/dist/BaseModelRunner.d.ts.map +1 -1
  8. package/dist/BaseModelRunner.js +82 -3
  9. package/dist/BaseModelRunner.js.map +1 -1
  10. package/dist/audio/AISpeechToTextRunner.d.ts +46 -0
  11. package/dist/audio/AISpeechToTextRunner.d.ts.map +1 -0
  12. package/dist/audio/AISpeechToTextRunner.js +93 -0
  13. package/dist/audio/AISpeechToTextRunner.js.map +1 -0
  14. package/dist/audio/AITextToSpeechRunner.d.ts +43 -0
  15. package/dist/audio/AITextToSpeechRunner.d.ts.map +1 -0
  16. package/dist/audio/AITextToSpeechRunner.js +80 -0
  17. package/dist/audio/AITextToSpeechRunner.js.map +1 -0
  18. package/dist/audio/audio-description.d.ts +22 -0
  19. package/dist/audio/audio-description.d.ts.map +1 -0
  20. package/dist/audio/audio-description.js +52 -0
  21. package/dist/audio/audio-description.js.map +1 -0
  22. package/dist/audio/audio-runner.types.d.ts +46 -0
  23. package/dist/audio/audio-runner.types.d.ts.map +1 -0
  24. package/dist/audio/audio-runner.types.js +7 -0
  25. package/dist/audio/audio-runner.types.js.map +1 -0
  26. package/dist/decision/AIDecisionRunner.d.ts +134 -0
  27. package/dist/decision/AIDecisionRunner.d.ts.map +1 -0
  28. package/dist/decision/AIDecisionRunner.js +498 -0
  29. package/dist/decision/AIDecisionRunner.js.map +1 -0
  30. package/dist/decision/LLMDecision.d.ts +158 -0
  31. package/dist/decision/LLMDecision.d.ts.map +1 -0
  32. package/dist/decision/LLMDecision.js +493 -0
  33. package/dist/decision/LLMDecision.js.map +1 -0
  34. package/dist/decision/decision-questions.d.ts +28 -0
  35. package/dist/decision/decision-questions.d.ts.map +1 -0
  36. package/dist/decision/decision-questions.js +123 -0
  37. package/dist/decision/decision-questions.js.map +1 -0
  38. package/dist/decision/decision-runner.types.d.ts +29 -0
  39. package/dist/decision/decision-runner.types.d.ts.map +1 -0
  40. package/dist/decision/decision-runner.types.js +14 -0
  41. package/dist/decision/decision-runner.types.js.map +1 -0
  42. package/dist/embedding/AIEmbeddingRunner.d.ts +115 -0
  43. package/dist/embedding/AIEmbeddingRunner.d.ts.map +1 -0
  44. package/dist/embedding/AIEmbeddingRunner.js +462 -0
  45. package/dist/embedding/AIEmbeddingRunner.js.map +1 -0
  46. package/dist/embedding/embedding-runner.types.d.ts +72 -0
  47. package/dist/embedding/embedding-runner.types.d.ts.map +1 -0
  48. package/dist/embedding/embedding-runner.types.js +2 -0
  49. package/dist/embedding/embedding-runner.types.js.map +1 -0
  50. package/dist/image/AIImageGenerationRunner.d.ts +101 -0
  51. package/dist/image/AIImageGenerationRunner.d.ts.map +1 -0
  52. package/dist/image/AIImageGenerationRunner.js +355 -0
  53. package/dist/image/AIImageGenerationRunner.js.map +1 -0
  54. package/dist/image/image-runner.types.d.ts +90 -0
  55. package/dist/image/image-runner.types.d.ts.map +1 -0
  56. package/dist/image/image-runner.types.js +7 -0
  57. package/dist/image/image-runner.types.js.map +1 -0
  58. package/dist/index.d.ts +16 -1
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +15 -0
  61. package/dist/index.js.map +1 -1
  62. package/dist/media/BaseMediaRunner.d.ts +143 -0
  63. package/dist/media/BaseMediaRunner.d.ts.map +1 -0
  64. package/dist/media/BaseMediaRunner.js +448 -0
  65. package/dist/media/BaseMediaRunner.js.map +1 -0
  66. package/dist/media/media-runner.types.d.ts +128 -0
  67. package/dist/media/media-runner.types.d.ts.map +1 -0
  68. package/dist/media/media-runner.types.js +8 -0
  69. package/dist/media/media-runner.types.js.map +1 -0
  70. package/dist/media/media-usage.d.ts +13 -0
  71. package/dist/media/media-usage.d.ts.map +1 -0
  72. package/dist/media/media-usage.js +18 -0
  73. package/dist/media/media-usage.js.map +1 -0
  74. package/dist/video/AIVideoRunner.d.ts +46 -0
  75. package/dist/video/AIVideoRunner.d.ts.map +1 -0
  76. package/dist/video/AIVideoRunner.js +88 -0
  77. package/dist/video/AIVideoRunner.js.map +1 -0
  78. package/dist/video/video-runner.types.d.ts +29 -0
  79. package/dist/video/video-runner.types.d.ts.map +1 -0
  80. package/dist/video/video-runner.types.js +7 -0
  81. package/dist/video/video-runner.types.js.map +1 -0
  82. package/package.json +12 -12
package/README.md CHANGED
@@ -202,6 +202,47 @@ Hierarchical credential resolution for API keys:
202
202
 
203
203
  When a model fails due to rate limiting, authentication errors, or other transient issues, the runner can automatically retry with alternate models from the selection candidates.
204
204
 
205
+ ### Media Runners
206
+
207
+ Non-chat models run through runners built on the same `BaseModelRunner`, so they get the same model selection, credential resolution, failover and `MJ: AI Prompt Runs` row as a chat prompt. Each requires one model type, and uses a default carrier prompt, found by name, unless the caller passes a `PromptID`. A `ModelID` pins the model, and failover then stays within its vendors. The run row never holds media bytes.
208
+
209
+ | Runner | Model type | Method | Default prompt | Usage recorded |
210
+ |---|---|---|---|---|
211
+ | `AIImageGenerationRunner` | `Image Generator` | `RunImageGeneration`, `RunImageEdit` | `Default Image Generation` | the driver's, else images returned (`Images`) |
212
+ | `AITextToSpeechRunner` | `TTS` | `RunTextToSpeech` | `Default Text To Speech` | the driver's, else characters sent (`Characters`) |
213
+ | `AISpeechToTextRunner` | `Speech to Text` | `RunSpeechToText` | `Default Speech To Text` | the driver's: audio seconds (`Seconds`) when reported, otherwise nothing |
214
+ | `AIVideoRunner` | `Video` | `RunAvatarVideo` | `Default Video Generation` | the driver's: video seconds (`Seconds`) when reported, otherwise nothing |
215
+
216
+ The text-to-speech, speech-to-text and video runners share their lifecycle through `BaseMediaRunner`. It follows the carrier prompt's `FailoverStrategy`, narrowing `SameModelDifferentVendor` to the selected model's vendors.
217
+
218
+ Whether a failed call fails over is `ErrorAnalyzer`'s decision, as it is for chat prompts. The shipped audio and video drivers report it on `SpeechResult.errorInfo` / `VideoResult.errorInfo`, from the error their SDK threw, so it keeps the HTTP status:
219
+
220
+ - a rate limit, an outage, a server error or a timeout fails over;
221
+ - a request the vendor rejected as invalid (a 400 or 422, such as an unknown voice or an unsupported audio format) does not, since every other candidate would reject it too;
222
+ - a 400 whose message reads as vendor-specific validation (`required`, `must be`, …) fails over to another vendor, as it does for chat;
223
+ - a 401 stops failover, as it does for chat.
224
+
225
+ A driver that reports only `errorMessage` is classified from the message, which recognizes rate limits, outages and a few malformed requests; any other message reads as `Unknown`, which fails over. A driver should set `errorInfo` with `ErrorAnalyzer.AnalyzeError(error)` on the error it caught.
226
+
227
+ `TimeoutMS` and `CancellationToken` bound each driver call as `timeoutMS` and `cancellationToken` bound a chat call. A call that exceeds `TimeoutMS` fails with an `AIPromptTimeoutError` and fails over. A cancelled call ends at once, never fails over, and its run row is recorded as `Cancelled`. The media drivers take no abort signal, so in both cases the request already sent is abandoned rather than torn down.
228
+
229
+ Video generation is asynchronous at the provider, and the primitive offers no status call, so `AIVideoRunner` does not wait for a render. A successful run means the provider accepted the request; the row records the video ID (for HeyGen, the render job's ID) and records the video's length only if a driver reports it.
230
+
231
+ Usage is recorded with `BaseModelRunner.ApplyUsageToRunRecord`, which writes non-token quantities as `InputUnitsUsed` / `OutputUnitsUsed` with the `MJ: AI Usage Types` row that names their measure. The runners never set a cost. The row's save prices it from the model's cost rows, and declines when no price unit type claims the measure, as none yet does for `Characters`.
232
+
233
+ ```typescript
234
+ import { AITextToSpeechRunner } from '@memberjunction/ai-prompts';
235
+
236
+ const result = await new AITextToSpeechRunner().RunTextToSpeech({
237
+ text: 'Your report is ready.',
238
+ voice: 'alloy',
239
+ ContextUser: contextUser,
240
+ });
241
+ if (result.Success) {
242
+ const audio = result.SpeechResult?.data; // the run row describes the audio but never stores it
243
+ }
244
+ ```
245
+
205
246
  ## Usage
206
247
 
207
248
  ### Basic Prompt Execution
@@ -1,109 +1,30 @@
1
- import { UserInfo, IMetadataProvider } from '@memberjunction/core';
2
- /**
3
- * Result from an embedding execution via AIModelRunner.
4
- */
5
- export interface EmbeddingRunResult {
6
- /** Whether the embedding call succeeded */
7
- Success: boolean;
8
- /** The embedding vectors (one per input text) */
9
- Vectors: number[][];
10
- /** The AIPromptRun ID created for tracking */
11
- PromptRunID: string | null;
12
- /** Total tokens used */
13
- TokensUsed: number;
14
- /** Cost of the call */
15
- Cost: number;
16
- /** Error message if failed */
17
- ErrorMessage: string | null;
18
- /** Execution time in milliseconds */
19
- ExecutionTimeMs: number;
20
- }
21
- /**
22
- * Parameters for running an embedding via AIModelRunner.
23
- */
24
- export interface EmbeddingRunParams {
25
- /** The texts to embed */
26
- Texts: string[];
27
- /** Optional: specific AIPrompt ID for this embedding operation (type=Embedding).
28
- * If not provided, uses the first active Embedding prompt found. */
29
- PromptID?: string;
30
- /** Optional: specific model ID to use. If not provided, uses the prompt's model configuration. */
31
- ModelID?: string;
32
- /** The user context for permissions and audit */
33
- ContextUser: UserInfo;
34
- /** Optional: parent prompt run ID (e.g. parent parallel run) for hierarchical tracking */
35
- ParentRunID?: string;
36
- /** Optional: human-readable description for the AIPromptRun record */
37
- Description?: string;
38
- /**
39
- * Optional: reduced embedding dimensions. Forwarded to the embedding provider's EmbedTexts call
40
- * for models that support dimension reduction (e.g. OpenAI text-embedding-3-*); ignored by
41
- * models that don't. The authoritative source is `MJ: Vector Indexes.Dimensions` — callers
42
- * should read it from there and pass it here.
43
- */
44
- Dimensions?: number;
45
- }
1
+ import { IMetadataProvider } from '@memberjunction/core';
2
+ import { EmbeddingRunParams, EmbeddingRunResult } from './embedding/embedding-runner.types.js';
3
+ export type { EmbeddingRunResult, EmbeddingRunParams } from './embedding/embedding-runner.types.js';
46
4
  /**
47
5
  * AIModelRunner — Lightweight AI model execution tracker for non-LLM model types.
48
6
  *
49
- * Creates AIPromptRun records for embedding calls (and future: image, audio, video)
50
- * with full token/cost tracking. Uses the same model selection and vendor failover
51
- * infrastructure as AIPromptRunner but without template rendering or validation.
52
- *
53
- * Architecture:
54
- * - @memberjunction/ai (no MJ infra): BaseEmbeddings, ModelUsage
55
- * - @memberjunction/ai-core-plus (this class): AIModelRunner — creates AIPromptRun records
56
- * - @memberjunction/ai-prompts: AIPromptRunner — LLM-specific (template rendering, validation)
57
- *
58
- * Usage:
59
- * ```typescript
60
- * const runner = new AIModelRunner();
61
- * const result = await runner.RunEmbedding({
62
- * Texts: ['Hello world', 'How are you'],
63
- * ContextUser: currentUser,
64
- * Description: 'Content item vectorization'
65
- * });
66
- * // result.PromptRunID links to the AIPromptRun record with token/cost data
67
- * ```
7
+ * @deprecated Use {@link AIEmbeddingRunner} instead. AIModelRunner is retained for backward
8
+ * compatibility and delegates all execution and prompt-run queuing to AIEmbeddingRunner.
68
9
  */
69
10
  export declare class AIModelRunner {
70
- private _provider;
11
+ private _embeddingRunner;
71
12
  /**
72
- * Fire-and-forget AIPromptRun persistence via the shared {@link BaseEntitySaveQueue}. The
73
- * embedding/model run record is observability — the caller gets its vectors regardless of whether
74
- * the tracking row persists — so saves are queued, not awaited, and the embedding call is never
75
- * blocked on a DB round-trip. The queue sequences saves per entity (the initial 'Running' INSERT
76
- * always completes before the 'Completed'/'Failed' UPDATE). `PromptRunID` is returned immediately
77
- * because `NewRecord()` client-generates the UUID.
78
- */
79
- private _promptRunQueue;
80
- /**
81
- * Optional metadata provider override. Callers should set
82
- * `instance.Provider = providerToUse` before invoking run methods
83
- * in multi-provider contexts. Falls back to the global default provider when unset.
13
+ * Optional metadata provider override.
84
14
  */
85
15
  get Provider(): IMetadataProvider;
86
16
  set Provider(value: IMetadataProvider | null);
87
17
  /**
88
18
  * Execute an embedding call with full AIPromptRun tracking.
89
- *
90
- * Creates an AIPromptRun record before the call, invokes the embedding model,
91
- * stores tokens/cost/timing on the run record, and returns the result.
19
+ * Delegates to {@link AIEmbeddingRunner.RunEmbedding}.
92
20
  *
93
21
  * @param params - Embedding execution parameters
94
22
  * @returns Result with vectors, run ID, and usage metrics
95
23
  */
96
24
  RunEmbedding(params: EmbeddingRunParams): Promise<EmbeddingRunResult>;
97
- private resolveEmbeddingModel;
98
- private findBestVendor;
99
- private createRunRecord;
100
25
  /**
101
- * Awaits all in-flight prompt-run saves queued by this runner. The normal path does NOT
102
- * call this — persistence is intentionally fire-and-forget. For tests / durability needs.
26
+ * Awaits all in-flight prompt-run saves queued by this runner.
103
27
  */
104
28
  WaitForPendingPromptRunSaves(): Promise<void>;
105
- private completeRunRecord;
106
- private failRunRecord;
107
- private errorResult;
108
29
  }
109
30
  //# sourceMappingURL=AIModelRunner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AIModelRunner.d.ts","sourceRoot":"","sources":["../src/AIModelRunner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiC,QAAQ,EAAuB,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAMvH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,2CAA2C;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,iDAAiD;IACjD,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;IACpB,8CAA8C;IAC9C,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,wBAAwB;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,qCAAqC;IACrC,eAAe,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,yBAAyB;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB;yEACqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kGAAkG;IAClG,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,WAAW,EAAE,QAAQ,CAAC;IACtB,0FAA0F;IAC1F,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,aAAa;IACtB,OAAO,CAAC,SAAS,CAAkC;IAEnD;;;;;;;OAOG;IACH,OAAO,CAAC,eAAe,CAA6B;IAEpD;;;;OAIG;IACH,IAAW,QAAQ,IAAI,iBAAiB,CAEvC;IACD,IAAW,QAAQ,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,EAElD;IAED;;;;;;;;OAQG;IACU,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;YA+DpE,qBAAqB;IAyFnC,OAAO,CAAC,cAAc;YAmBR,eAAe;IAiD7B;;;OAGG;IACU,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC;YAI5C,iBAAiB;YA0CjB,aAAa;IAsB3B,OAAO,CAAC,WAAW;CAWtB"}
1
+ {"version":3,"file":"AIModelRunner.d.ts","sourceRoot":"","sources":["../src/AIModelRunner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAE5F,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAEjG;;;;;GAKG;AACH,qBAAa,aAAa;IACtB,OAAO,CAAC,gBAAgB,CAA2B;IAEnD;;OAEG;IACH,IAAW,QAAQ,IAAI,iBAAiB,CAEvC;IACD,IAAW,QAAQ,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,EAElD;IAED;;;;;;OAMG;IACU,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAIlF;;OAEG;IACU,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7D"}
@@ -1,310 +1,38 @@
1
- import { BaseEntitySaveQueue, Metadata, LogError } from '@memberjunction/core';
2
- import { MJGlobal, UUIDsEqual } from '@memberjunction/global';
3
- import { BaseEmbeddings, GetAIAPIKey } from '@memberjunction/ai';
4
- import { AIEngineBase } from '@memberjunction/ai-engine-base';
5
- import { ResolvePromptRunUserID } from '@memberjunction/ai-core-plus';
1
+ import { AIEmbeddingRunner } from './embedding/AIEmbeddingRunner.js';
6
2
  /**
7
3
  * AIModelRunner — Lightweight AI model execution tracker for non-LLM model types.
8
4
  *
9
- * Creates AIPromptRun records for embedding calls (and future: image, audio, video)
10
- * with full token/cost tracking. Uses the same model selection and vendor failover
11
- * infrastructure as AIPromptRunner but without template rendering or validation.
12
- *
13
- * Architecture:
14
- * - @memberjunction/ai (no MJ infra): BaseEmbeddings, ModelUsage
15
- * - @memberjunction/ai-core-plus (this class): AIModelRunner — creates AIPromptRun records
16
- * - @memberjunction/ai-prompts: AIPromptRunner — LLM-specific (template rendering, validation)
17
- *
18
- * Usage:
19
- * ```typescript
20
- * const runner = new AIModelRunner();
21
- * const result = await runner.RunEmbedding({
22
- * Texts: ['Hello world', 'How are you'],
23
- * ContextUser: currentUser,
24
- * Description: 'Content item vectorization'
25
- * });
26
- * // result.PromptRunID links to the AIPromptRun record with token/cost data
27
- * ```
5
+ * @deprecated Use {@link AIEmbeddingRunner} instead. AIModelRunner is retained for backward
6
+ * compatibility and delegates all execution and prompt-run queuing to AIEmbeddingRunner.
28
7
  */
29
8
  export class AIModelRunner {
30
9
  constructor() {
31
- this._provider = null;
32
- /**
33
- * Fire-and-forget AIPromptRun persistence via the shared {@link BaseEntitySaveQueue}. The
34
- * embedding/model run record is observability — the caller gets its vectors regardless of whether
35
- * the tracking row persists — so saves are queued, not awaited, and the embedding call is never
36
- * blocked on a DB round-trip. The queue sequences saves per entity (the initial 'Running' INSERT
37
- * always completes before the 'Completed'/'Failed' UPDATE). `PromptRunID` is returned immediately
38
- * because `NewRecord()` client-generates the UUID.
39
- */
40
- this._promptRunQueue = new BaseEntitySaveQueue();
10
+ this._embeddingRunner = new AIEmbeddingRunner();
41
11
  }
42
12
  /**
43
- * Optional metadata provider override. Callers should set
44
- * `instance.Provider = providerToUse` before invoking run methods
45
- * in multi-provider contexts. Falls back to the global default provider when unset.
13
+ * Optional metadata provider override.
46
14
  */
47
15
  get Provider() {
48
- return this._provider ?? new Metadata();
16
+ return this._embeddingRunner.Provider;
49
17
  }
50
18
  set Provider(value) {
51
- this._provider = value;
19
+ this._embeddingRunner.Provider = value;
52
20
  }
53
21
  /**
54
22
  * Execute an embedding call with full AIPromptRun tracking.
55
- *
56
- * Creates an AIPromptRun record before the call, invokes the embedding model,
57
- * stores tokens/cost/timing on the run record, and returns the result.
23
+ * Delegates to {@link AIEmbeddingRunner.RunEmbedding}.
58
24
  *
59
25
  * @param params - Embedding execution parameters
60
26
  * @returns Result with vectors, run ID, and usage metrics
61
27
  */
62
28
  async RunEmbedding(params) {
63
- const startTime = Date.now();
64
- try {
65
- // Ensure AIEngine is loaded
66
- await AIEngineBase.Instance.Config(false, params.ContextUser);
67
- // Resolve the embedding prompt and model
68
- const { prompt, modelInfo } = await this.resolveEmbeddingModel(params);
69
- if (!modelInfo) {
70
- return this.errorResult('No embedding model available', startTime);
71
- }
72
- // Create AIPromptRun record (before the call)
73
- const promptRun = await this.createRunRecord(prompt, modelInfo.ModelID, modelInfo.VendorID, params, startTime);
74
- // Execute the embedding call
75
- const embeddingInstance = MJGlobal.Instance.ClassFactory.CreateInstance(BaseEmbeddings, modelInfo.DriverClass, GetAIAPIKey(modelInfo.DriverClass));
76
- if (!embeddingInstance) {
77
- await this.failRunRecord(promptRun, 'Failed to create embedding instance', startTime);
78
- return this.errorResult(`No embedding provider for driver: ${modelInfo.DriverClass}`, startTime);
79
- }
80
- const embedResult = await embeddingInstance.EmbedTexts({
81
- texts: params.Texts,
82
- model: modelInfo.APIName,
83
- dimensions: params.Dimensions
84
- });
85
- if (!embedResult || !embedResult.vectors || embedResult.vectors.length === 0) {
86
- await this.failRunRecord(promptRun, 'Embedding returned no vectors', startTime);
87
- return this.errorResult('Embedding returned no vectors', startTime);
88
- }
89
- // Update AIPromptRun with usage data
90
- await this.completeRunRecord(promptRun, embedResult, startTime);
91
- return {
92
- Success: true,
93
- Vectors: embedResult.vectors,
94
- PromptRunID: promptRun?.ID ?? null,
95
- TokensUsed: embedResult.ModelUsage?.totalTokens ?? 0,
96
- Cost: embedResult.ModelUsage?.cost ?? 0,
97
- ErrorMessage: null,
98
- ExecutionTimeMs: Date.now() - startTime,
99
- };
100
- }
101
- catch (error) {
102
- const msg = error instanceof Error ? error.message : String(error);
103
- LogError(`AIModelRunner.RunEmbedding failed: ${msg}`);
104
- return this.errorResult(msg, startTime);
105
- }
106
- }
107
- // ================================================================
108
- // Private: Model Resolution
109
- // ================================================================
110
- async resolveEmbeddingModel(params) {
111
- const aiEngine = AIEngineBase.Instance;
112
- // Find the embedding prompt
113
- let prompt = null;
114
- if (params.PromptID) {
115
- prompt = aiEngine.Prompts.find(p => UUIDsEqual(p.ID, params.PromptID)) ?? null;
116
- }
117
- else {
118
- // Find first active Embedding-type prompt
119
- prompt = aiEngine.Prompts.find(p => p.Type?.toLowerCase() === 'embedding' && p.Status === 'Active') ?? null;
120
- }
121
- // If explicit model ID provided, use it directly
122
- if (params.ModelID) {
123
- const model = aiEngine.Models.find(m => UUIDsEqual(m.ID, params.ModelID));
124
- if (model) {
125
- const vendor = this.findBestVendor(model.ID);
126
- if (vendor) {
127
- return {
128
- prompt,
129
- modelInfo: {
130
- ModelID: model.ID,
131
- VendorID: vendor.VendorID,
132
- DriverClass: vendor.DriverClass,
133
- APIName: vendor.APIName ?? model.APIName ?? model.Name,
134
- }
135
- };
136
- }
137
- }
138
- }
139
- // Use prompt's model configuration if available
140
- if (prompt) {
141
- const promptModels = aiEngine.PromptModels
142
- .filter(pm => pm.PromptID === prompt.ID)
143
- .sort((a, b) => (b.Priority ?? 0) - (a.Priority ?? 0));
144
- for (const pm of promptModels) {
145
- // Look up model vendor to get driver class
146
- const vendor = this.findBestVendor(pm.ModelID);
147
- if (vendor) {
148
- return {
149
- prompt,
150
- modelInfo: {
151
- ModelID: pm.ModelID,
152
- VendorID: vendor.VendorID,
153
- DriverClass: vendor.DriverClass,
154
- APIName: vendor.APIName ?? '',
155
- }
156
- };
157
- }
158
- }
159
- }
160
- // Fallback: find smallest active embedding model
161
- const embeddingModels = aiEngine.Models.filter(m => {
162
- const modelType = typeof m.AIModelType === 'string' ? m.AIModelType.trim().toLowerCase() : '';
163
- return modelType === 'embeddings';
164
- });
165
- if (embeddingModels.length === 0)
166
- return { prompt, modelInfo: null };
167
- const sorted = [...embeddingModels].sort((a, b) => (a.InputTokenLimit ?? Number.MAX_SAFE_INTEGER) - (b.InputTokenLimit ?? Number.MAX_SAFE_INTEGER));
168
- for (const model of sorted) {
169
- const vendor = this.findBestVendor(model.ID);
170
- if (vendor) {
171
- return {
172
- prompt,
173
- modelInfo: {
174
- ModelID: model.ID,
175
- VendorID: vendor.VendorID,
176
- DriverClass: vendor.DriverClass,
177
- APIName: vendor.APIName ?? model.APIName ?? model.Name,
178
- }
179
- };
180
- }
181
- }
182
- return { prompt, modelInfo: null };
183
- }
184
- findBestVendor(modelID) {
185
- const aiEngine = AIEngineBase.Instance;
186
- const vendors = aiEngine.ModelVendors
187
- .filter(mv => mv.ModelID === modelID && mv.Status === 'Active' && mv.DriverClass != null)
188
- .sort((a, b) => (b.Priority ?? 0) - (a.Priority ?? 0));
189
- for (const v of vendors) {
190
- const apiKey = GetAIAPIKey(v.DriverClass);
191
- if (apiKey) {
192
- return { VendorID: v.VendorID ?? '', DriverClass: v.DriverClass, APIName: v.APIName };
193
- }
194
- }
195
- return null;
196
- }
197
- // ================================================================
198
- // Private: AIPromptRun CRUD
199
- // ================================================================
200
- async createRunRecord(prompt, modelID, vendorID, params, startTime) {
201
- try {
202
- const md = this.Provider;
203
- const promptRun = await md.GetEntityObject('MJ: AI Prompt Runs', params.ContextUser);
204
- promptRun.NewRecord();
205
- if (prompt) {
206
- promptRun.PromptID = prompt.ID;
207
- }
208
- promptRun.ModelID = modelID;
209
- promptRun.VendorID = vendorID || null;
210
- promptRun.Status = 'Running';
211
- promptRun.RunAt = new Date(startTime);
212
- promptRun.Cancelled = false;
213
- promptRun.CacheHit = false;
214
- promptRun.StreamingEnabled = false;
215
- if (params.ParentRunID) {
216
- promptRun.ParentID = params.ParentRunID;
217
- }
218
- promptRun.UserID = ResolvePromptRunUserID({ ContextUser: params.ContextUser });
219
- // Store description in Messages field as context
220
- if (params.Description) {
221
- promptRun.Messages = JSON.stringify({
222
- description: params.Description,
223
- textCount: params.Texts.length,
224
- totalChars: params.Texts.reduce((sum, t) => sum + t.length, 0),
225
- });
226
- }
227
- // Fire-and-forget the initial 'Running' INSERT — ID is already assigned by NewRecord()
228
- // so the returned PromptRunID is valid immediately; the UPDATE chains after this.
229
- this._promptRunQueue.Insert(promptRun);
230
- return promptRun;
231
- }
232
- catch (error) {
233
- LogError(`AIModelRunner: Error creating AIPromptRun: ${error}`);
234
- return null;
235
- }
29
+ return this._embeddingRunner.RunEmbedding(params);
236
30
  }
237
31
  /**
238
- * Awaits all in-flight prompt-run saves queued by this runner. The normal path does NOT
239
- * call this — persistence is intentionally fire-and-forget. For tests / durability needs.
32
+ * Awaits all in-flight prompt-run saves queued by this runner.
240
33
  */
241
34
  async WaitForPendingPromptRunSaves() {
242
- await this._promptRunQueue.Flush();
243
- }
244
- async completeRunRecord(promptRun, embedResult, startTime) {
245
- if (!promptRun)
246
- return;
247
- try {
248
- promptRun.Status = 'Completed';
249
- promptRun.Success = true;
250
- promptRun.CompletedAt = new Date();
251
- promptRun.ExecutionTimeMS = Date.now() - startTime;
252
- // Store token/cost from ModelUsage
253
- if (embedResult.ModelUsage) {
254
- // TokensPrompt = UNCACHED ("net-new") input; cache reads/writes tracked separately.
255
- // TokensUsed = totalTokens = promptTokens + completionTokens (EXCLUDES cache), to
256
- // satisfy the AIPromptRun invariant TokensUsed === TokensPrompt + TokensCompletion.
257
- // (Embeddings don't cache, so cache buckets are 0 here regardless.)
258
- promptRun.TokensPrompt = embedResult.ModelUsage.promptTokens ?? 0;
259
- promptRun.TokensCompletion = embedResult.ModelUsage.completionTokens ?? 0;
260
- promptRun.TokensUsed = embedResult.ModelUsage.totalTokens ?? 0;
261
- promptRun.TokensCacheRead = embedResult.ModelUsage.cacheReadTokens ?? 0;
262
- promptRun.TokensCacheWrite = embedResult.ModelUsage.cacheWriteTokens ?? 0;
263
- promptRun.Cost = embedResult.ModelUsage.cost ?? 0;
264
- promptRun.CostCurrency = embedResult.ModelUsage.costCurrency ?? 'USD';
265
- promptRun.QueueTime = embedResult.ModelUsage.queueTime ?? 0;
266
- promptRun.PromptTime = embedResult.ModelUsage.promptTime ?? 0;
267
- promptRun.CompletionTime = embedResult.ModelUsage.completionTime ?? 0;
268
- }
269
- // Store vector count in Result
270
- promptRun.Result = JSON.stringify({
271
- vectorCount: embedResult.vectors?.length ?? 0,
272
- dimensions: embedResult.vectors?.[0]?.length ?? 0,
273
- });
274
- this._promptRunQueue.Update(promptRun); // fire-and-forget UPDATE; the INSERT landed during the embedding call
275
- }
276
- catch (error) {
277
- LogError(`AIModelRunner: Error completing AIPromptRun: ${error}`);
278
- }
279
- }
280
- async failRunRecord(promptRun, errorMessage, startTime) {
281
- if (!promptRun)
282
- return;
283
- try {
284
- promptRun.Status = 'Failed';
285
- promptRun.Success = false;
286
- promptRun.ErrorMessage = errorMessage;
287
- promptRun.CompletedAt = new Date();
288
- promptRun.ExecutionTimeMS = Date.now() - startTime;
289
- this._promptRunQueue.Update(promptRun); // fire-and-forget UPDATE; the INSERT landed during the embedding call
290
- }
291
- catch (error) {
292
- LogError(`AIModelRunner: Error failing AIPromptRun: ${error}`);
293
- }
294
- }
295
- // ================================================================
296
- // Private: Helpers
297
- // ================================================================
298
- errorResult(message, startTime) {
299
- return {
300
- Success: false,
301
- Vectors: [],
302
- PromptRunID: null,
303
- TokensUsed: 0,
304
- Cost: 0,
305
- ErrorMessage: message,
306
- ExecutionTimeMs: Date.now() - startTime,
307
- };
35
+ await this._embeddingRunner.WaitForPendingPromptRunSaves();
308
36
  }
309
37
  }
310
38
  //# sourceMappingURL=AIModelRunner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AIModelRunner.js","sourceRoot":"","sources":["../src/AIModelRunner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AIModelRunner.js","sourceRoot":"","sources":["../src/AIModelRunner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAKlE;;;;;GAKG;AACH,MAAM,OAAO,aAAa;IAA1B;QACY,qBAAgB,GAAG,IAAI,iBAAiB,EAAE,CAAC;IA6BvD,CAAC;IA3BG;;OAEG;IACH,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;IAC1C,CAAC;IACD,IAAW,QAAQ,CAAC,KAA+B;QAC/C,IAAI,CAAC,gBAAgB,CAAC,QAAQ,GAAG,KAAK,CAAC;IAC3C,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,YAAY,CAAC,MAA0B;QAChD,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,4BAA4B;QACrC,MAAM,IAAI,CAAC,gBAAgB,CAAC,4BAA4B,EAAE,CAAC;IAC/D,CAAC;CACJ"}
@@ -14,7 +14,7 @@
14
14
  import { BaseEntitySaveQueue, Metadata, IMetadataProvider } from '@memberjunction/core';
15
15
  import { MJAIModelVendorEntity } from '@memberjunction/core-entities';
16
16
  import { MJAIModelEntityExtended, MJAIPromptEntityExtended, MJAIPromptRunEntityExtended, AIPromptParams, AIModelSelectionInfo } from '@memberjunction/ai-core-plus';
17
- import { BaseResult, AIPromptConfiguration } from '@memberjunction/ai';
17
+ import { BaseResult, AIPromptConfiguration, ModelUsage } from '@memberjunction/ai';
18
18
  /**
19
19
  * The composed bound applied to a single model call: the caller's cancellation token (if any) merged
20
20
  * with the prompt's configured `AIPrompt.TimeoutMS` (if any).
@@ -80,6 +80,13 @@ export interface FailoverAttempt {
80
80
  duration: number;
81
81
  timestamp: Date;
82
82
  }
83
+ /**
84
+ * The `MJ: AI Prompt Runs` columns that {@link BaseModelRunner.ApplyUsageToRunRecord} writes, with
85
+ * the row's `ID` for its log line. Narrower than the entity, so the helper states exactly what it
86
+ * touches. Exported because it names a protected method's parameter, which a subclass outside this
87
+ * package must be able to write.
88
+ */
89
+ export type PromptRunUsageFields = Pick<MJAIPromptRunEntityExtended, 'ID' | 'TokensPrompt' | 'TokensCompletion' | 'TokensUsed' | 'UsageTypeID' | 'InputUnitsUsed' | 'OutputUnitsUsed' | 'Cost' | 'CostCurrency'>;
83
90
  /**
84
91
  * Shared machinery for runners that invoke a model and record the call as an `MJ: AI Prompt Runs`
85
92
  * row: candidate model/vendor selection, credential resolution, execution bounds (timeout and
@@ -490,6 +497,34 @@ export declare abstract class BaseModelRunner {
490
497
  * inside the queued save task, and anything it sets after an `await` can miss the UPDATE.
491
498
  */
492
499
  protected FinalizeRunRecord(promptRun: MJAIPromptRunEntityExtended, success: boolean, endTime: Date, executionTimeMS: number, applyResultFields: (promptRun: MJAIPromptRunEntityExtended) => void): Promise<void>;
500
+ /**
501
+ * The usage to record for one call: the driver's when it reports a quantity (tokens, or units in
502
+ * a measure), otherwise the runner's own count, which keeps any cost the driver gave. With neither,
503
+ * the driver's usage (possibly undefined) is returned, and nothing is invented.
504
+ *
505
+ * A runner counts what it can see without the driver: the images returned, or the characters it
506
+ * sent. The driver's figure wins because it is the vendor's own measure.
507
+ *
508
+ * @param reported The usage the driver returned, if any.
509
+ * @param counted The runner's own count as `ModelUsage.ForMedia`, or undefined when it has none.
510
+ */
511
+ protected ResolveUsageToRecord(reported: ModelUsage | undefined, counted: ModelUsage | undefined): ModelUsage | undefined;
512
+ /**
513
+ * Records one call's usage on its run row, for runners whose calls are not chat calls: tokens;
514
+ * continuous units (seconds, characters, images) with the `MJ: AI Usage Types` row that names
515
+ * their measure; and a cost only when the driver gave one. With no usage nothing is recorded, so
516
+ * the cost stays empty and the row's save prices it from the model's cost rows, or declines to.
517
+ *
518
+ * Call it from the {@link FinalizeRunRecord} callback.
519
+ */
520
+ protected ApplyUsageToRunRecord(run: PromptRunUsageFields, usage: ModelUsage | undefined): void;
521
+ /** Whether the usage names any quantity: tokens, or units in a measure other than tokens. */
522
+ private reportsUsageQuantity;
523
+ /**
524
+ * Records continuous units with the usage type that names their measure. Units without a
525
+ * resolvable usage type would be read as tokens, so they are skipped with a log line.
526
+ */
527
+ private applyUnitUsage;
493
528
  /**
494
529
  * Estimates the number of tokens in a rendered prompt and conversation messages.
495
530
  * This is a rough estimation based on character count and typical token ratios.
@@ -1 +1 @@
1
- {"version":3,"file":"BaseModelRunner.d.ts","sourceRoot":"","sources":["../src/BaseModelRunner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BaseModelRunner.d.ts","sourceRoot":"","sources":["../src/BaseModelRunner.ts"],"names":[],"mappings":"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"}