@memberjunction/ng-core-entity-forms 6.2.0-edge.3 → 6.2.0-edge.5
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/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +12 -0
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +43 -26
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +7 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +191 -178
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/prompt-run-data-capture-note.component.d.ts +48 -0
- package/dist/lib/custom/AIPromptRuns/prompt-run-data-capture-note.component.d.ts.map +1 -0
- package/dist/lib/custom/AIPromptRuns/prompt-run-data-capture-note.component.js +195 -0
- package/dist/lib/custom/AIPromptRuns/prompt-run-data-capture-note.component.js.map +1 -0
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +324 -322
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
- package/dist/lib/custom/Conversations/conversation-overview.panel.d.ts +16 -3
- package/dist/lib/custom/Conversations/conversation-overview.panel.d.ts.map +1 -1
- package/dist/lib/custom/Conversations/conversation-overview.panel.js +103 -43
- package/dist/lib/custom/Conversations/conversation-overview.panel.js.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.d.ts +8 -0
- package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.js +18 -4
- package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
- package/dist/lib/custom/Files/file-form.component.d.ts +5 -5
- package/dist/lib/custom/Files/file-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Files/file-form.component.js +227 -157
- package/dist/lib/custom/Files/file-form.component.js.map +1 -1
- package/dist/lib/custom/Files/file-form.logic.d.ts +24 -0
- package/dist/lib/custom/Files/file-form.logic.d.ts.map +1 -0
- package/dist/lib/custom/Files/file-form.logic.js +57 -0
- package/dist/lib/custom/Files/file-form.logic.js.map +1 -0
- package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Lists/list-form.component.js +3 -2
- package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.js +2 -2
- package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts.map +1 -1
- package/dist/lib/custom/RecordProcesses/record-process-form.component.js +6 -3
- package/dist/lib/custom/RecordProcesses/record-process-form.component.js.map +1 -1
- package/dist/lib/custom/SearchScopes/searchscope-form.component.d.ts +3 -3
- package/dist/lib/custom/SearchScopes/searchscope-form.component.d.ts.map +1 -1
- package/dist/lib/custom/SearchScopes/searchscope-form.component.js +5 -7
- package/dist/lib/custom/SearchScopes/searchscope-form.component.js.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.js +2 -2
- package/dist/lib/custom/ai-agent-run/agent-run-cost-split.d.ts +34 -0
- package/dist/lib/custom/ai-agent-run/agent-run-cost-split.d.ts.map +1 -0
- package/dist/lib/custom/ai-agent-run/agent-run-cost-split.js +33 -0
- package/dist/lib/custom/ai-agent-run/agent-run-cost-split.js.map +1 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts +3 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +261 -242
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js +8 -8
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts +37 -5
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js +155 -79
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts +8 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +59 -8
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +34 -9
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +164 -43
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/run-tree-timeline-projection.js +3 -1
- package/dist/lib/custom/ai-agent-run/run-tree-timeline-projection.js.map +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts +82 -79
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +16 -2
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +65 -47
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +115 -117
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentRunStep/mjaiagentrunstep.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentRunStep/mjaiagentrunstep.form.component.js +64 -24
- package/dist/lib/generated/Entities/MJAIAgentRunStep/mjaiagentrunstep.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js +74 -52
- package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentSessionRecordingShard/mjaiagentsessionrecordingshard.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJAIAgentSessionRecordingShard/mjaiagentsessionrecordingshard.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJAIAgentSessionRecordingShard/mjaiagentsessionrecordingshard.form.component.js +86 -0
- package/dist/lib/generated/Entities/MJAIAgentSessionRecordingShard/mjaiagentsessionrecordingshard.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJAIAgentUserPolicy/mjaiagentuserpolicy.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJAIAgentUserPolicy/mjaiagentuserpolicy.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJAIAgentUserPolicy/mjaiagentuserpolicy.form.component.js +132 -0
- package/dist/lib/generated/Entities/MJAIAgentUserPolicy/mjaiagentuserpolicy.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJAIBridgeAgentIdentity/mjaibridgeagentidentity.form.component.js +12 -10
- package/dist/lib/generated/Entities/MJAIBridgeAgentIdentity/mjaibridgeagentidentity.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js +86 -32
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIPersona/mjaipersona.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIPersona/mjaipersona.form.component.js +25 -7
- package/dist/lib/generated/Entities/MJAIPersona/mjaipersona.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js +180 -160
- package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJActionParam/mjactionparam.form.component.js +16 -14
- package/dist/lib/generated/Entities/MJActionParam/mjactionparam.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJArchiveConfiguration/mjarchiveconfiguration.form.component.js +23 -21
- package/dist/lib/generated/Entities/MJArchiveConfiguration/mjarchiveconfiguration.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJArchiveRun/mjarchiverun.form.component.js +21 -19
- package/dist/lib/generated/Entities/MJArchiveRun/mjarchiverun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJCommunicationProvider/mjcommunicationprovider.form.component.js +30 -20
- package/dist/lib/generated/Entities/MJCommunicationProvider/mjcommunicationprovider.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js +32 -14
- package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJConversationBranch/mjconversationbranch.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJConversationBranch/mjconversationbranch.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJConversationBranch/mjconversationbranch.form.component.js +111 -0
- package/dist/lib/generated/Entities/MJConversationBranch/mjconversationbranch.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js +59 -67
- package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js +35 -17
- package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +112 -94
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJFeaturePipelineVersion/mjfeaturepipelineversion.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJFeaturePipelineVersion/mjfeaturepipelineversion.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJFeaturePipelineVersion/mjfeaturepipelineversion.form.component.js +130 -0
- package/dist/lib/generated/Entities/MJFeaturePipelineVersion/mjfeaturepipelineversion.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.js +26 -14
- package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJFeatureValueCache/mjfeaturevaluecache.form.component.js +23 -19
- package/dist/lib/generated/Entities/MJFeatureValueCache/mjfeaturevaluecache.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.js +29 -27
- package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJProcessRunDetail/mjprocessrundetail.form.component.js +17 -15
- package/dist/lib/generated/Entities/MJProcessRunDetail/mjprocessrundetail.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js +27 -9
- package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJScopedNotificationConfig/mjscopednotificationconfig.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJScopedNotificationConfig/mjscopednotificationconfig.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJScopedNotificationConfig/mjscopednotificationconfig.form.component.js +106 -0
- package/dist/lib/generated/Entities/MJScopedNotificationConfig/mjscopednotificationconfig.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJTest/mjtest.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJTest/mjtest.form.component.js +24 -6
- package/dist/lib/generated/Entities/MJTest/mjtest.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJTestRun/mjtestrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJTestRun/mjtestrun.form.component.js +29 -11
- package/dist/lib/generated/Entities/MJTestRun/mjtestrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJTheme/mjtheme.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJTheme/mjtheme.form.component.js +13 -3
- package/dist/lib/generated/Entities/MJTheme/mjtheme.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +788 -714
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJUserNotificationType/mjusernotificationtype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJUserNotificationType/mjusernotificationtype.form.component.js +24 -6
- package/dist/lib/generated/Entities/MJUserNotificationType/mjusernotificationtype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJUserRoutine/mjuserroutine.form.component.js +31 -25
- package/dist/lib/generated/Entities/MJUserRoutine/mjuserroutine.form.component.js.map +1 -1
- package/dist/lib/generated/generated-forms.module.d.ts +286 -281
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +15 -0
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/dist/lib/panels/feature-values/feature-values.logic.d.ts +55 -0
- package/dist/lib/panels/feature-values/feature-values.logic.d.ts.map +1 -0
- package/dist/lib/panels/feature-values/feature-values.logic.js +88 -0
- package/dist/lib/panels/feature-values/feature-values.logic.js.map +1 -0
- package/dist/lib/panels/feature-values/feature-values.panel.d.ts +39 -0
- package/dist/lib/panels/feature-values/feature-values.panel.d.ts.map +1 -0
- package/dist/lib/panels/feature-values/feature-values.panel.js +303 -0
- package/dist/lib/panels/feature-values/feature-values.panel.js.map +1 -0
- package/dist/lib/shared/components/template-editor.component.js +2 -2
- package/dist/lib/shared/components/template-editor.component.js.map +1 -1
- package/dist/public-api.d.ts +1 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +1 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +48 -47
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { TemplateDataCaptureMode, TemplateDataShape } from '@memberjunction/ai-core-plus';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/** A template input that a shape record can describe. */
|
|
4
|
+
type TemplateInputName = keyof TemplateDataShape;
|
|
5
|
+
/** One row of the key-size table. */
|
|
6
|
+
interface DataShapeRow {
|
|
7
|
+
/** The template input that holds the key. */
|
|
8
|
+
Input: TemplateInputName;
|
|
9
|
+
/** The top-level key name. */
|
|
10
|
+
Key: string;
|
|
11
|
+
/** The display text for the size of the key's value. */
|
|
12
|
+
Size: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Tells the user which template data an AI prompt run stored in `Messages`, by capture mode.
|
|
16
|
+
* For a `None` run it also shows the stored key sizes of `data` and `templateData`.
|
|
17
|
+
* It renders nothing for runs saved before capture modes existed.
|
|
18
|
+
*/
|
|
19
|
+
export declare class PromptRunDataCaptureNoteComponent {
|
|
20
|
+
private _dataCapture;
|
|
21
|
+
private _dataShape;
|
|
22
|
+
private _dataCaptureNote;
|
|
23
|
+
/** Template-data capture mode stored with the run; null for runs saved before capture modes existed. */
|
|
24
|
+
set DataCapture(value: TemplateDataCaptureMode | null);
|
|
25
|
+
get DataCapture(): TemplateDataCaptureMode | null;
|
|
26
|
+
/** Key sizes of the template inputs, stored in `None` mode. */
|
|
27
|
+
set DataShape(value: TemplateDataShape | null);
|
|
28
|
+
get DataShape(): TemplateDataShape | null;
|
|
29
|
+
/** Why a `Referenced` run stored `Full`. */
|
|
30
|
+
set DataCaptureNote(value: string | null);
|
|
31
|
+
get DataCaptureNote(): string | null;
|
|
32
|
+
/** The sentence that tells what the run stored; null when the note shows nothing. */
|
|
33
|
+
Message: string | null;
|
|
34
|
+
/** Key sizes of a `None` run: `data` rows, then `templateData` rows, each largest first. */
|
|
35
|
+
Rows: DataShapeRow[];
|
|
36
|
+
/** One notice for each input whose shape lists only its largest keys. */
|
|
37
|
+
ElidedNotices: string[];
|
|
38
|
+
/** Computes `Message`, `Rows` and `ElidedNotices` from the three inputs. */
|
|
39
|
+
private updateNote;
|
|
40
|
+
private buildMessage;
|
|
41
|
+
private buildFullMessage;
|
|
42
|
+
/** Adds the rows of one input and, when keys were left out, its notice. A malformed entry adds nothing. */
|
|
43
|
+
private addShape;
|
|
44
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PromptRunDataCaptureNoteComponent, never>;
|
|
45
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PromptRunDataCaptureNoteComponent, "mj-prompt-run-data-capture-note", never, { "DataCapture": { "alias": "DataCapture"; "required": false; }; "DataShape": { "alias": "DataShape"; "required": false; }; "DataCaptureNote": { "alias": "DataCaptureNote"; "required": false; }; }, {}, never, never, false, never>;
|
|
46
|
+
}
|
|
47
|
+
export {};
|
|
48
|
+
//# sourceMappingURL=prompt-run-data-capture-note.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-run-data-capture-note.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/AIPromptRuns/prompt-run-data-capture-note.component.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAA2B,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;;AAExH,yDAAyD;AACzD,KAAK,iBAAiB,GAAG,MAAM,iBAAiB,CAAC;AAEjD,qCAAqC;AACrC,UAAU,YAAY;IAClB,6CAA6C;IAC7C,KAAK,EAAE,iBAAiB,CAAC;IACzB,8BAA8B;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;CAChB;AAOD;;;;GAIG;AACH,qBAOa,iCAAiC;IAC1C,OAAO,CAAC,YAAY,CAAwC;IAC5D,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,gBAAgB,CAAuB;IAE/C,wGAAwG;IACxG,IACI,WAAW,CAAC,KAAK,EAAE,uBAAuB,GAAG,IAAI,EAGpD;IACD,IAAI,WAAW,IAAI,uBAAuB,GAAG,IAAI,CAEhD;IAED,+DAA+D;IAC/D,IACI,SAAS,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,EAG5C;IACD,IAAI,SAAS,IAAI,iBAAiB,GAAG,IAAI,CAExC;IAED,4CAA4C;IAC5C,IACI,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAGvC;IACD,IAAI,eAAe,IAAI,MAAM,GAAG,IAAI,CAEnC;IAED,qFAAqF;IAC9E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAQ;IACrC,4FAA4F;IACrF,IAAI,EAAE,YAAY,EAAE,CAAM;IACjC,yEAAyE;IAClE,aAAa,EAAE,MAAM,EAAE,CAAM;IAEpC,4EAA4E;IAC5E,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,gBAAgB;IAKxB,2GAA2G;IAC3G,OAAO,CAAC,QAAQ;yCAzEP,iCAAiC;2CAAjC,iCAAiC;CAmF7C"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@memberjunction/ng-ui-components";
|
|
4
|
+
const _forTrack0 = ($index, $item) => $item.Input + "." + $item.Key;
|
|
5
|
+
function PromptRunDataCaptureNoteComponent_Conditional_0_Conditional_2_For_11_Template(rf, ctx) { if (rf & 1) {
|
|
6
|
+
i0.ɵɵelementStart(0, "tr")(1, "td", 6);
|
|
7
|
+
i0.ɵɵtext(2);
|
|
8
|
+
i0.ɵɵelementEnd();
|
|
9
|
+
i0.ɵɵelementStart(3, "td", 6);
|
|
10
|
+
i0.ɵɵtext(4);
|
|
11
|
+
i0.ɵɵelementEnd();
|
|
12
|
+
i0.ɵɵelementStart(5, "td", 7);
|
|
13
|
+
i0.ɵɵtext(6);
|
|
14
|
+
i0.ɵɵelementEnd()();
|
|
15
|
+
} if (rf & 2) {
|
|
16
|
+
const row_r1 = ctx.$implicit;
|
|
17
|
+
i0.ɵɵadvance(2);
|
|
18
|
+
i0.ɵɵtextInterpolate(row_r1.Input);
|
|
19
|
+
i0.ɵɵadvance(2);
|
|
20
|
+
i0.ɵɵtextInterpolate(row_r1.Key);
|
|
21
|
+
i0.ɵɵadvance(2);
|
|
22
|
+
i0.ɵɵtextInterpolate(row_r1.Size);
|
|
23
|
+
} }
|
|
24
|
+
function PromptRunDataCaptureNoteComponent_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
25
|
+
i0.ɵɵelementStart(0, "table", 2)(1, "thead")(2, "tr")(3, "th", 4);
|
|
26
|
+
i0.ɵɵtext(4, "Input");
|
|
27
|
+
i0.ɵɵelementEnd();
|
|
28
|
+
i0.ɵɵelementStart(5, "th", 4);
|
|
29
|
+
i0.ɵɵtext(6, "Key");
|
|
30
|
+
i0.ɵɵelementEnd();
|
|
31
|
+
i0.ɵɵelementStart(7, "th", 5);
|
|
32
|
+
i0.ɵɵtext(8, "Size");
|
|
33
|
+
i0.ɵɵelementEnd()()();
|
|
34
|
+
i0.ɵɵelementStart(9, "tbody");
|
|
35
|
+
i0.ɵɵrepeaterCreate(10, PromptRunDataCaptureNoteComponent_Conditional_0_Conditional_2_For_11_Template, 7, 3, "tr", null, _forTrack0);
|
|
36
|
+
i0.ɵɵelementEnd()();
|
|
37
|
+
} if (rf & 2) {
|
|
38
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
39
|
+
i0.ɵɵadvance(10);
|
|
40
|
+
i0.ɵɵrepeater(ctx_r1.Rows);
|
|
41
|
+
} }
|
|
42
|
+
function PromptRunDataCaptureNoteComponent_Conditional_0_For_4_Template(rf, ctx) { if (rf & 1) {
|
|
43
|
+
i0.ɵɵelementStart(0, "p", 3);
|
|
44
|
+
i0.ɵɵtext(1);
|
|
45
|
+
i0.ɵɵelementEnd();
|
|
46
|
+
} if (rf & 2) {
|
|
47
|
+
const notice_r3 = ctx.$implicit;
|
|
48
|
+
i0.ɵɵadvance();
|
|
49
|
+
i0.ɵɵtextInterpolate(notice_r3);
|
|
50
|
+
} }
|
|
51
|
+
function PromptRunDataCaptureNoteComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
52
|
+
i0.ɵɵelementStart(0, "div", 0);
|
|
53
|
+
i0.ɵɵelement(1, "mj-alert", 1);
|
|
54
|
+
i0.ɵɵconditionalCreate(2, PromptRunDataCaptureNoteComponent_Conditional_0_Conditional_2_Template, 12, 0, "table", 2);
|
|
55
|
+
i0.ɵɵrepeaterCreate(3, PromptRunDataCaptureNoteComponent_Conditional_0_For_4_Template, 2, 1, "p", 3, i0.ɵɵrepeaterTrackByIdentity);
|
|
56
|
+
i0.ɵɵelementEnd();
|
|
57
|
+
} if (rf & 2) {
|
|
58
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
59
|
+
i0.ɵɵadvance();
|
|
60
|
+
i0.ɵɵproperty("Message", ctx_r1.Message);
|
|
61
|
+
i0.ɵɵadvance();
|
|
62
|
+
i0.ɵɵconditional(ctx_r1.Rows.length > 0 ? 2 : -1);
|
|
63
|
+
i0.ɵɵadvance();
|
|
64
|
+
i0.ɵɵrepeater(ctx_r1.ElidedNotices);
|
|
65
|
+
} }
|
|
66
|
+
/** Table order of the template inputs. */
|
|
67
|
+
const TEMPLATE_INPUTS = ['data', 'templateData'];
|
|
68
|
+
const BYTES_PER_KB = 1024;
|
|
69
|
+
const BYTES_PER_MB = 1024 * 1024;
|
|
70
|
+
/**
|
|
71
|
+
* Tells the user which template data an AI prompt run stored in `Messages`, by capture mode.
|
|
72
|
+
* For a `None` run it also shows the stored key sizes of `data` and `templateData`.
|
|
73
|
+
* It renders nothing for runs saved before capture modes existed.
|
|
74
|
+
*/
|
|
75
|
+
export class PromptRunDataCaptureNoteComponent {
|
|
76
|
+
constructor() {
|
|
77
|
+
this._dataCapture = null;
|
|
78
|
+
this._dataShape = null;
|
|
79
|
+
this._dataCaptureNote = null;
|
|
80
|
+
/** The sentence that tells what the run stored; null when the note shows nothing. */
|
|
81
|
+
this.Message = null;
|
|
82
|
+
/** Key sizes of a `None` run: `data` rows, then `templateData` rows, each largest first. */
|
|
83
|
+
this.Rows = [];
|
|
84
|
+
/** One notice for each input whose shape lists only its largest keys. */
|
|
85
|
+
this.ElidedNotices = [];
|
|
86
|
+
}
|
|
87
|
+
/** Template-data capture mode stored with the run; null for runs saved before capture modes existed. */
|
|
88
|
+
set DataCapture(value) {
|
|
89
|
+
this._dataCapture = value;
|
|
90
|
+
this.updateNote();
|
|
91
|
+
}
|
|
92
|
+
get DataCapture() {
|
|
93
|
+
return this._dataCapture;
|
|
94
|
+
}
|
|
95
|
+
/** Key sizes of the template inputs, stored in `None` mode. */
|
|
96
|
+
set DataShape(value) {
|
|
97
|
+
this._dataShape = value;
|
|
98
|
+
this.updateNote();
|
|
99
|
+
}
|
|
100
|
+
get DataShape() {
|
|
101
|
+
return this._dataShape;
|
|
102
|
+
}
|
|
103
|
+
/** Why a `Referenced` run stored `Full`. */
|
|
104
|
+
set DataCaptureNote(value) {
|
|
105
|
+
this._dataCaptureNote = value;
|
|
106
|
+
this.updateNote();
|
|
107
|
+
}
|
|
108
|
+
get DataCaptureNote() {
|
|
109
|
+
return this._dataCaptureNote;
|
|
110
|
+
}
|
|
111
|
+
/** Computes `Message`, `Rows` and `ElidedNotices` from the three inputs. */
|
|
112
|
+
updateNote() {
|
|
113
|
+
this.Message = this.buildMessage();
|
|
114
|
+
this.Rows = [];
|
|
115
|
+
this.ElidedNotices = [];
|
|
116
|
+
if (this._dataCapture === 'None') {
|
|
117
|
+
for (const input of TEMPLATE_INPUTS) {
|
|
118
|
+
this.addShape(input, this._dataShape?.[input]);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
buildMessage() {
|
|
123
|
+
switch (this._dataCapture) {
|
|
124
|
+
case 'None':
|
|
125
|
+
return 'Template data was not stored for this run (capture: None).';
|
|
126
|
+
case 'Referenced':
|
|
127
|
+
return "Only the template data keys the prompt's templates read were stored (capture: Referenced).";
|
|
128
|
+
case 'Full':
|
|
129
|
+
return this.buildFullMessage();
|
|
130
|
+
default:
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
buildFullMessage() {
|
|
135
|
+
const note = this._dataCaptureNote?.trim();
|
|
136
|
+
return note ? `All template data was stored (capture: Full). ${note}` : null;
|
|
137
|
+
}
|
|
138
|
+
/** Adds the rows of one input and, when keys were left out, its notice. A malformed entry adds nothing. */
|
|
139
|
+
addShape(input, shape) {
|
|
140
|
+
if (!hasKeySizes(shape)) {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
const rows = buildRows(input, shape.keys);
|
|
144
|
+
this.Rows.push(...rows);
|
|
145
|
+
if (shape.keysElided === true) {
|
|
146
|
+
this.ElidedNotices.push(`Showing the ${rows.length} largest of ${shape.keyCount} keys in ${input}.`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
static { this.ɵfac = function PromptRunDataCaptureNoteComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PromptRunDataCaptureNoteComponent)(); }; }
|
|
150
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PromptRunDataCaptureNoteComponent, selectors: [["mj-prompt-run-data-capture-note"]], inputs: { DataCapture: "DataCapture", DataShape: "DataShape", DataCaptureNote: "DataCaptureNote" }, standalone: false, decls: 1, vars: 1, consts: [[1, "data-capture-note"], ["Variant", "info", 1, "data-capture-message", 3, "Message"], [1, "data-shape-table"], [1, "data-shape-elided"], ["scope", "col"], ["scope", "col", 1, "size-cell"], [1, "name-cell"], [1, "size-cell"]], template: function PromptRunDataCaptureNoteComponent_Template(rf, ctx) { if (rf & 1) {
|
|
151
|
+
i0.ɵɵconditionalCreate(0, PromptRunDataCaptureNoteComponent_Conditional_0_Template, 5, 2, "div", 0);
|
|
152
|
+
} if (rf & 2) {
|
|
153
|
+
i0.ɵɵconditional(ctx.Message ? 0 : -1);
|
|
154
|
+
} }, dependencies: [i1.MJAlertComponent], styles: ["[_nghost-%COMP%] {\n display: block;\n}\n\n.data-capture-note[_ngcontent-%COMP%] {\n margin-bottom: var(--mj-space-3);\n}\n\n.data-shape-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n}\n\n.data-shape-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%], \n.data-shape-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: var(--mj-space-1-5) var(--mj-space-3);\n border-bottom: 1px solid var(--mj-border-default);\n text-align: left;\n}\n\n.data-shape-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n font-weight: var(--mj-font-semibold);\n}\n\n.data-shape-table[_ngcontent-%COMP%] .name-cell[_ngcontent-%COMP%] {\n font-family: var(--mj-font-family-mono);\n overflow-wrap: anywhere;\n}\n\n.data-shape-table[_ngcontent-%COMP%] .size-cell[_ngcontent-%COMP%] {\n text-align: right;\n white-space: nowrap;\n}\n\n.data-shape-elided[_ngcontent-%COMP%] {\n margin: var(--mj-space-2) 0 0;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-secondary);\n}"], changeDetection: 0 }); }
|
|
155
|
+
}
|
|
156
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PromptRunDataCaptureNoteComponent, [{
|
|
157
|
+
type: Component,
|
|
158
|
+
args: [{ standalone: false, selector: 'mj-prompt-run-data-capture-note', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (Message) {\n <div class=\"data-capture-note\">\n <mj-alert class=\"data-capture-message\" Variant=\"info\" [Message]=\"Message\" />\n @if (Rows.length > 0) {\n <table class=\"data-shape-table\">\n <thead>\n <tr>\n <th scope=\"col\">Input</th>\n <th scope=\"col\">Key</th>\n <th scope=\"col\" class=\"size-cell\">Size</th>\n </tr>\n </thead>\n <tbody>\n @for (row of Rows; track row.Input + '.' + row.Key) {\n <tr>\n <td class=\"name-cell\">{{ row.Input }}</td>\n <td class=\"name-cell\">{{ row.Key }}</td>\n <td class=\"size-cell\">{{ row.Size }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n @for (notice of ElidedNotices; track notice) {\n <p class=\"data-shape-elided\">{{ notice }}</p>\n }\n </div>\n}\n", styles: [":host {\n display: block;\n}\n\n.data-capture-note {\n margin-bottom: var(--mj-space-3);\n}\n\n.data-shape-table {\n width: 100%;\n border-collapse: collapse;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n}\n\n.data-shape-table th,\n.data-shape-table td {\n padding: var(--mj-space-1-5) var(--mj-space-3);\n border-bottom: 1px solid var(--mj-border-default);\n text-align: left;\n}\n\n.data-shape-table th {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n font-weight: var(--mj-font-semibold);\n}\n\n.data-shape-table .name-cell {\n font-family: var(--mj-font-family-mono);\n overflow-wrap: anywhere;\n}\n\n.data-shape-table .size-cell {\n text-align: right;\n white-space: nowrap;\n}\n\n.data-shape-elided {\n margin: var(--mj-space-2) 0 0;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-secondary);\n}\n"] }]
|
|
159
|
+
}], null, { DataCapture: [{
|
|
160
|
+
type: Input
|
|
161
|
+
}], DataShape: [{
|
|
162
|
+
type: Input
|
|
163
|
+
}], DataCaptureNote: [{
|
|
164
|
+
type: Input
|
|
165
|
+
}] }); })();
|
|
166
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PromptRunDataCaptureNoteComponent, { className: "PromptRunDataCaptureNoteComponent", filePath: "src/lib/custom/AIPromptRuns/prompt-run-data-capture-note.component.ts", lineNumber: 34 }); })();
|
|
167
|
+
/** True when `shape` is an object whose `keys` is a key-size map. Stored JSON is not validated when it is parsed. */
|
|
168
|
+
function hasKeySizes(shape) {
|
|
169
|
+
return shape != null
|
|
170
|
+
&& typeof shape === 'object'
|
|
171
|
+
&& typeof shape.keys === 'object'
|
|
172
|
+
&& shape.keys !== null
|
|
173
|
+
&& !Array.isArray(shape.keys);
|
|
174
|
+
}
|
|
175
|
+
/** Rows for one input, largest first. Keys whose size is not a number are left out. */
|
|
176
|
+
function buildRows(input, keys) {
|
|
177
|
+
return Object.entries(keys)
|
|
178
|
+
.filter(([, bytes]) => typeof bytes === 'number')
|
|
179
|
+
.sort(([, a], [, b]) => b - a)
|
|
180
|
+
.map(([key, bytes]) => ({ Input: input, Key: key, Size: formatSize(bytes) }));
|
|
181
|
+
}
|
|
182
|
+
/** Display text for a byte size; -1 marks a value that could not be serialized. */
|
|
183
|
+
function formatSize(bytes) {
|
|
184
|
+
if (bytes === -1) {
|
|
185
|
+
return 'not serializable';
|
|
186
|
+
}
|
|
187
|
+
if (bytes < BYTES_PER_KB) {
|
|
188
|
+
return `${bytes} B`;
|
|
189
|
+
}
|
|
190
|
+
if (bytes < BYTES_PER_MB) {
|
|
191
|
+
return `${(bytes / BYTES_PER_KB).toFixed(1)} KB`;
|
|
192
|
+
}
|
|
193
|
+
return `${(bytes / BYTES_PER_MB).toFixed(1)} MB`;
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=prompt-run-data-capture-note.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-run-data-capture-note.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/AIPromptRuns/prompt-run-data-capture-note.component.ts","../../../../src/lib/custom/AIPromptRuns/prompt-run-data-capture-note.component.html"],"names":[],"mappings":"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","sourcesContent":["import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport type { TemplateDataCaptureMode, TemplateDataObjectShape, TemplateDataShape } from '@memberjunction/ai-core-plus';\n\n/** A template input that a shape record can describe. */\ntype TemplateInputName = keyof TemplateDataShape;\n\n/** One row of the key-size table. */\ninterface DataShapeRow {\n /** The template input that holds the key. */\n Input: TemplateInputName;\n /** The top-level key name. */\n Key: string;\n /** The display text for the size of the key's value. */\n Size: string;\n}\n\n/** Table order of the template inputs. */\nconst TEMPLATE_INPUTS: readonly TemplateInputName[] = ['data', 'templateData'];\nconst BYTES_PER_KB = 1024;\nconst BYTES_PER_MB = 1024 * 1024;\n\n/**\n * Tells the user which template data an AI prompt run stored in `Messages`, by capture mode.\n * For a `None` run it also shows the stored key sizes of `data` and `templateData`.\n * It renders nothing for runs saved before capture modes existed.\n */\n@Component({\n standalone: false,\n selector: 'mj-prompt-run-data-capture-note',\n templateUrl: './prompt-run-data-capture-note.component.html',\n styleUrls: ['./prompt-run-data-capture-note.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PromptRunDataCaptureNoteComponent {\n private _dataCapture: TemplateDataCaptureMode | null = null;\n private _dataShape: TemplateDataShape | null = null;\n private _dataCaptureNote: string | null = null;\n\n /** Template-data capture mode stored with the run; null for runs saved before capture modes existed. */\n @Input()\n set DataCapture(value: TemplateDataCaptureMode | null) {\n this._dataCapture = value;\n this.updateNote();\n }\n get DataCapture(): TemplateDataCaptureMode | null {\n return this._dataCapture;\n }\n\n /** Key sizes of the template inputs, stored in `None` mode. */\n @Input()\n set DataShape(value: TemplateDataShape | null) {\n this._dataShape = value;\n this.updateNote();\n }\n get DataShape(): TemplateDataShape | null {\n return this._dataShape;\n }\n\n /** Why a `Referenced` run stored `Full`. */\n @Input()\n set DataCaptureNote(value: string | null) {\n this._dataCaptureNote = value;\n this.updateNote();\n }\n get DataCaptureNote(): string | null {\n return this._dataCaptureNote;\n }\n\n /** The sentence that tells what the run stored; null when the note shows nothing. */\n public Message: string | null = null;\n /** Key sizes of a `None` run: `data` rows, then `templateData` rows, each largest first. */\n public Rows: DataShapeRow[] = [];\n /** One notice for each input whose shape lists only its largest keys. */\n public ElidedNotices: string[] = [];\n\n /** Computes `Message`, `Rows` and `ElidedNotices` from the three inputs. */\n private updateNote(): void {\n this.Message = this.buildMessage();\n this.Rows = [];\n this.ElidedNotices = [];\n if (this._dataCapture === 'None') {\n for (const input of TEMPLATE_INPUTS) {\n this.addShape(input, this._dataShape?.[input]);\n }\n }\n }\n\n private buildMessage(): string | null {\n switch (this._dataCapture) {\n case 'None':\n return 'Template data was not stored for this run (capture: None).';\n case 'Referenced':\n return \"Only the template data keys the prompt's templates read were stored (capture: Referenced).\";\n case 'Full':\n return this.buildFullMessage();\n default:\n return null;\n }\n }\n\n private buildFullMessage(): string | null {\n const note = this._dataCaptureNote?.trim();\n return note ? `All template data was stored (capture: Full). ${note}` : null;\n }\n\n /** Adds the rows of one input and, when keys were left out, its notice. A malformed entry adds nothing. */\n private addShape(input: TemplateInputName, shape: TemplateDataObjectShape | undefined): void {\n if (!hasKeySizes(shape)) {\n return;\n }\n const rows = buildRows(input, shape.keys);\n this.Rows.push(...rows);\n if (shape.keysElided === true) {\n this.ElidedNotices.push(`Showing the ${rows.length} largest of ${shape.keyCount} keys in ${input}.`);\n }\n }\n}\n\n/** True when `shape` is an object whose `keys` is a key-size map. Stored JSON is not validated when it is parsed. */\nfunction hasKeySizes(shape: TemplateDataObjectShape | undefined): shape is TemplateDataObjectShape {\n return shape != null\n && typeof shape === 'object'\n && typeof shape.keys === 'object'\n && shape.keys !== null\n && !Array.isArray(shape.keys);\n}\n\n/** Rows for one input, largest first. Keys whose size is not a number are left out. */\nfunction buildRows(input: TemplateInputName, keys: Record<string, number>): DataShapeRow[] {\n return Object.entries(keys)\n .filter(([, bytes]) => typeof bytes === 'number')\n .sort(([, a], [, b]) => b - a)\n .map(([key, bytes]) => ({ Input: input, Key: key, Size: formatSize(bytes) }));\n}\n\n/** Display text for a byte size; -1 marks a value that could not be serialized. */\nfunction formatSize(bytes: number): string {\n if (bytes === -1) {\n return 'not serializable';\n }\n if (bytes < BYTES_PER_KB) {\n return `${bytes} B`;\n }\n if (bytes < BYTES_PER_MB) {\n return `${(bytes / BYTES_PER_KB).toFixed(1)} KB`;\n }\n return `${(bytes / BYTES_PER_MB).toFixed(1)} MB`;\n}\n","@if (Message) {\n <div class=\"data-capture-note\">\n <mj-alert class=\"data-capture-message\" Variant=\"info\" [Message]=\"Message\" />\n @if (Rows.length > 0) {\n <table class=\"data-shape-table\">\n <thead>\n <tr>\n <th scope=\"col\">Input</th>\n <th scope=\"col\">Key</th>\n <th scope=\"col\" class=\"size-cell\">Size</th>\n </tr>\n </thead>\n <tbody>\n @for (row of Rows; track row.Input + '.' + row.Key) {\n <tr>\n <td class=\"name-cell\">{{ row.Input }}</td>\n <td class=\"name-cell\">{{ row.Key }}</td>\n <td class=\"size-cell\">{{ row.Size }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n @for (notice of ElidedNotices; track notice) {\n <p class=\"data-shape-elided\">{{ notice }}</p>\n }\n </div>\n}\n"]}
|