quidproquo-actionprocessor-awslambda 0.1.6 → 0.1.8
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/lib/commonjs/getActionProcessor/core/ai/getAiPromptActionProcessor.js +8 -3
- package/lib/commonjs/getActionProcessor/core/ai/getAiPromptActionProcessor.js.map +1 -1
- package/lib/commonjs/getActionProcessor/core/ai/getAiPromptStreamActionProcessor.js +23 -5
- package/lib/commonjs/getActionProcessor/core/ai/getAiPromptStreamActionProcessor.js.map +1 -1
- package/lib/commonjs/getActionProcessor/core/ai/logic/createDriveFileResolver.js +2 -2
- package/lib/commonjs/getActionProcessor/core/ai/logic/createDriveFileResolver.js.map +1 -1
- package/lib/commonjs/getActionProcessor/core/ai/logic/index.d.ts +3 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/index.js +3 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/index.js.map +1 -1
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamFinish.js +2 -1
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamFinish.js.map +1 -1
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamFinishStep.js +2 -1
- package/lib/commonjs/getActionProcessor/core/ai/logic/mapAiStreamFinishStep.js.map +1 -1
- package/lib/commonjs/getActionProcessor/core/ai/logic/prepareAiPromptCall.js +10 -12
- package/lib/commonjs/getActionProcessor/core/ai/logic/prepareAiPromptCall.js.map +1 -1
- package/lib/commonjs/getActionProcessor/core/ai/logic/toAiStreamFinishReason.d.ts +2 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/toAiStreamFinishReason.js +10 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/toAiStreamFinishReason.js.map +1 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/toCacheableMessages.d.ts +2 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/toCacheableMessages.js +19 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/toCacheableMessages.js.map +1 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/toCacheableSystem.d.ts +2 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/toCacheableSystem.js +23 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/toCacheableSystem.js.map +1 -0
- package/lib/commonjs/getActionProcessor/core/ai/logic/toSdkMessages.d.ts +1 -1
- package/lib/commonjs/getActionProcessor/core/ai/logic/toSdkMessages.js +1 -1
- package/lib/commonjs/getActionProcessor/core/ai/logic/toSdkMessages.js.map +1 -1
- package/lib/commonjs/getActionProcessor/core/event/sqs/queue/getEventMatchStoryActionProcessor.d.ts +2 -2
- package/lib/commonjs/getActionProcessor/core/event/sqs/queue/getEventMatchStoryActionProcessor.js +10 -6
- package/lib/commonjs/getActionProcessor/core/event/sqs/queue/getEventMatchStoryActionProcessor.js.map +1 -1
- package/lib/commonjs/getActionProcessor/core/file/getFileDeleteActionProcessor.js +4 -2
- package/lib/commonjs/getActionProcessor/core/file/getFileDeleteActionProcessor.js.map +1 -1
- package/lib/commonjs/getActionProcessor/core/file/getFileExistsActionProcessor.js +4 -2
- package/lib/commonjs/getActionProcessor/core/file/getFileExistsActionProcessor.js.map +1 -1
- package/lib/commonjs/getActionProcessor/core/file/getFileGenerateTemporarySecureUrlActionProcessor.js +7 -3
- package/lib/commonjs/getActionProcessor/core/file/getFileGenerateTemporarySecureUrlActionProcessor.js.map +1 -1
- package/lib/commonjs/getActionProcessor/core/file/getFileGenerateTemporaryUploadSecureUrlActionProcessor.js +7 -3
- package/lib/commonjs/getActionProcessor/core/file/getFileGenerateTemporaryUploadSecureUrlActionProcessor.js.map +1 -1
- package/lib/commonjs/getActionProcessor/core/file/getFileIsColdStorageActionProcessor.js +4 -2
- package/lib/commonjs/getActionProcessor/core/file/getFileIsColdStorageActionProcessor.js.map +1 -1
- package/lib/commonjs/getActionProcessor/core/file/getFileListDirectoryActionProcessor.js +6 -4
- package/lib/commonjs/getActionProcessor/core/file/getFileListDirectoryActionProcessor.js.map +1 -1
- package/lib/commonjs/getActionProcessor/core/file/getFileReadBinaryContentsActionProcessor.js +4 -2
- package/lib/commonjs/getActionProcessor/core/file/getFileReadBinaryContentsActionProcessor.js.map +1 -1
- package/lib/commonjs/getActionProcessor/core/file/getFileReadObjectJsonActionProcessor.js +7 -2
- package/lib/commonjs/getActionProcessor/core/file/getFileReadObjectJsonActionProcessor.js.map +1 -1
- package/lib/commonjs/getActionProcessor/core/file/getFileReadTextContentsActionProcessor.js +6 -2
- package/lib/commonjs/getActionProcessor/core/file/getFileReadTextContentsActionProcessor.js.map +1 -1
- package/lib/commonjs/getActionProcessor/core/file/getFileStreamOpenActionProcessor.js +3 -2
- package/lib/commonjs/getActionProcessor/core/file/getFileStreamOpenActionProcessor.js.map +1 -1
- package/lib/commonjs/getActionProcessor/core/file/getFileWriteBinaryContentsActionProcessor.js +3 -2
- package/lib/commonjs/getActionProcessor/core/file/getFileWriteBinaryContentsActionProcessor.js.map +1 -1
- package/lib/commonjs/getActionProcessor/core/file/getFileWriteObjectJsonActionProcessor.js +3 -2
- package/lib/commonjs/getActionProcessor/core/file/getFileWriteObjectJsonActionProcessor.js.map +1 -1
- package/lib/commonjs/getActionProcessor/core/file/getFileWriteTextContentsActionProcessor.js +3 -2
- package/lib/commonjs/getActionProcessor/core/file/getFileWriteTextContentsActionProcessor.js.map +1 -1
- package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreDeleteActionProcessor.js +11 -9
- package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreDeleteActionProcessor.js.map +1 -1
- package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreGetActionProcessor.js +7 -3
- package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreGetActionProcessor.js.map +1 -1
- package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreGetAllActionProcessor.js +8 -3
- package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreGetAllActionProcessor.js.map +1 -1
- package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreQueryActionProcessor.js +9 -5
- package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreQueryActionProcessor.js.map +1 -1
- package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreScanActionProcessor.js +9 -2
- package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreScanActionProcessor.js.map +1 -1
- package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreUpdateActionProcessor.js +10 -8
- package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreUpdateActionProcessor.js.map +1 -1
- package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreUpsertActionProcessor.js +13 -11
- package/lib/commonjs/getActionProcessor/core/keyValueStore/getKeyValueStoreUpsertActionProcessor.js.map +1 -1
- package/lib/commonjs/getActionProcessor/core/keyValueStore/index.js +2 -1
- package/lib/commonjs/getActionProcessor/core/keyValueStore/index.js.map +1 -1
- package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryRequestEmailVerificationActionProcessor.js +2 -2
- package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectoryRequestEmailVerificationActionProcessor.js.map +1 -1
- package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectorySetAccessTokenActionProcessor.js +11 -1
- package/lib/commonjs/getActionProcessor/core/userDirectory/getUserDirectorySetAccessTokenActionProcessor.js.map +1 -1
- package/lib/commonjs/lambdaHandlers/getSqsEvent_queueEvent.js +3 -3
- package/lib/commonjs/lambdaHandlers/getSqsEvent_queueEvent.js.map +1 -1
- package/lib/commonjs/logic/cognito/requestEmailVerificationCode.d.ts +2 -1
- package/lib/commonjs/logic/cognito/requestEmailVerificationCode.js +8 -1
- package/lib/commonjs/logic/cognito/requestEmailVerificationCode.js.map +1 -1
- package/lib/commonjs/logic/dynamo/getAllItems.d.ts +2 -1
- package/lib/commonjs/logic/dynamo/getAllItems.js +7 -2
- package/lib/commonjs/logic/dynamo/getAllItems.js.map +1 -1
- package/lib/commonjs/logic/dynamo/getItem.d.ts +2 -1
- package/lib/commonjs/logic/dynamo/getItem.js +8 -5
- package/lib/commonjs/logic/dynamo/getItem.js.map +1 -1
- package/lib/esm/getActionProcessor/core/ai/getAiPromptActionProcessor.js +9 -4
- package/lib/esm/getActionProcessor/core/ai/getAiPromptActionProcessor.js.map +1 -1
- package/lib/esm/getActionProcessor/core/ai/getAiPromptStreamActionProcessor.js +21 -5
- package/lib/esm/getActionProcessor/core/ai/getAiPromptStreamActionProcessor.js.map +1 -1
- package/lib/esm/getActionProcessor/core/ai/logic/createDriveFileResolver.js +2 -2
- package/lib/esm/getActionProcessor/core/ai/logic/createDriveFileResolver.js.map +1 -1
- package/lib/esm/getActionProcessor/core/ai/logic/index.d.ts +3 -0
- package/lib/esm/getActionProcessor/core/ai/logic/index.js +3 -0
- package/lib/esm/getActionProcessor/core/ai/logic/index.js.map +1 -1
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamFinish.js +2 -1
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamFinish.js.map +1 -1
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamFinishStep.js +2 -1
- package/lib/esm/getActionProcessor/core/ai/logic/mapAiStreamFinishStep.js.map +1 -1
- package/lib/esm/getActionProcessor/core/ai/logic/prepareAiPromptCall.js +13 -8
- package/lib/esm/getActionProcessor/core/ai/logic/prepareAiPromptCall.js.map +1 -1
- package/lib/esm/getActionProcessor/core/ai/logic/toAiStreamFinishReason.d.ts +2 -0
- package/lib/esm/getActionProcessor/core/ai/logic/toAiStreamFinishReason.js +6 -0
- package/lib/esm/getActionProcessor/core/ai/logic/toAiStreamFinishReason.js.map +1 -0
- package/lib/esm/getActionProcessor/core/ai/logic/toCacheableMessages.d.ts +2 -0
- package/lib/esm/getActionProcessor/core/ai/logic/toCacheableMessages.js +21 -0
- package/lib/esm/getActionProcessor/core/ai/logic/toCacheableMessages.js.map +1 -0
- package/lib/esm/getActionProcessor/core/ai/logic/toCacheableSystem.d.ts +2 -0
- package/lib/esm/getActionProcessor/core/ai/logic/toCacheableSystem.js +19 -0
- package/lib/esm/getActionProcessor/core/ai/logic/toCacheableSystem.js.map +1 -0
- package/lib/esm/getActionProcessor/core/ai/logic/toSdkMessages.d.ts +1 -1
- package/lib/esm/getActionProcessor/core/ai/logic/toSdkMessages.js +1 -1
- package/lib/esm/getActionProcessor/core/ai/logic/toSdkMessages.js.map +1 -1
- package/lib/esm/getActionProcessor/core/event/sqs/queue/getEventMatchStoryActionProcessor.d.ts +2 -2
- package/lib/esm/getActionProcessor/core/event/sqs/queue/getEventMatchStoryActionProcessor.js +10 -6
- package/lib/esm/getActionProcessor/core/event/sqs/queue/getEventMatchStoryActionProcessor.js.map +1 -1
- package/lib/esm/getActionProcessor/core/file/getFileDeleteActionProcessor.js +5 -3
- package/lib/esm/getActionProcessor/core/file/getFileDeleteActionProcessor.js.map +1 -1
- package/lib/esm/getActionProcessor/core/file/getFileExistsActionProcessor.js +5 -3
- package/lib/esm/getActionProcessor/core/file/getFileExistsActionProcessor.js.map +1 -1
- package/lib/esm/getActionProcessor/core/file/getFileGenerateTemporarySecureUrlActionProcessor.js +9 -5
- package/lib/esm/getActionProcessor/core/file/getFileGenerateTemporarySecureUrlActionProcessor.js.map +1 -1
- package/lib/esm/getActionProcessor/core/file/getFileGenerateTemporaryUploadSecureUrlActionProcessor.js +9 -5
- package/lib/esm/getActionProcessor/core/file/getFileGenerateTemporaryUploadSecureUrlActionProcessor.js.map +1 -1
- package/lib/esm/getActionProcessor/core/file/getFileIsColdStorageActionProcessor.js +5 -3
- package/lib/esm/getActionProcessor/core/file/getFileIsColdStorageActionProcessor.js.map +1 -1
- package/lib/esm/getActionProcessor/core/file/getFileListDirectoryActionProcessor.js +7 -4
- package/lib/esm/getActionProcessor/core/file/getFileListDirectoryActionProcessor.js.map +1 -1
- package/lib/esm/getActionProcessor/core/file/getFileReadBinaryContentsActionProcessor.js +5 -3
- package/lib/esm/getActionProcessor/core/file/getFileReadBinaryContentsActionProcessor.js.map +1 -1
- package/lib/esm/getActionProcessor/core/file/getFileReadObjectJsonActionProcessor.js +8 -3
- package/lib/esm/getActionProcessor/core/file/getFileReadObjectJsonActionProcessor.js.map +1 -1
- package/lib/esm/getActionProcessor/core/file/getFileReadTextContentsActionProcessor.js +7 -3
- package/lib/esm/getActionProcessor/core/file/getFileReadTextContentsActionProcessor.js.map +1 -1
- package/lib/esm/getActionProcessor/core/file/getFileStreamOpenActionProcessor.js +4 -3
- package/lib/esm/getActionProcessor/core/file/getFileStreamOpenActionProcessor.js.map +1 -1
- package/lib/esm/getActionProcessor/core/file/getFileWriteBinaryContentsActionProcessor.js +4 -3
- package/lib/esm/getActionProcessor/core/file/getFileWriteBinaryContentsActionProcessor.js.map +1 -1
- package/lib/esm/getActionProcessor/core/file/getFileWriteObjectJsonActionProcessor.js +4 -3
- package/lib/esm/getActionProcessor/core/file/getFileWriteObjectJsonActionProcessor.js.map +1 -1
- package/lib/esm/getActionProcessor/core/file/getFileWriteTextContentsActionProcessor.js +4 -3
- package/lib/esm/getActionProcessor/core/file/getFileWriteTextContentsActionProcessor.js.map +1 -1
- package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreDeleteActionProcessor.js +7 -5
- package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreDeleteActionProcessor.js.map +1 -1
- package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreGetActionProcessor.js +8 -4
- package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreGetActionProcessor.js.map +1 -1
- package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreGetAllActionProcessor.js +9 -4
- package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreGetAllActionProcessor.js.map +1 -1
- package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreQueryActionProcessor.js +10 -6
- package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreQueryActionProcessor.js.map +1 -1
- package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreScanActionProcessor.js +11 -4
- package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreScanActionProcessor.js.map +1 -1
- package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreUpdateActionProcessor.js +7 -5
- package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreUpdateActionProcessor.js.map +1 -1
- package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreUpsertActionProcessor.js +14 -12
- package/lib/esm/getActionProcessor/core/keyValueStore/getKeyValueStoreUpsertActionProcessor.js.map +1 -1
- package/lib/esm/getActionProcessor/core/keyValueStore/index.js +2 -0
- package/lib/esm/getActionProcessor/core/keyValueStore/index.js.map +1 -1
- package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryRequestEmailVerificationActionProcessor.js +2 -2
- package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectoryRequestEmailVerificationActionProcessor.js.map +1 -1
- package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectorySetAccessTokenActionProcessor.js +12 -2
- package/lib/esm/getActionProcessor/core/userDirectory/getUserDirectorySetAccessTokenActionProcessor.js.map +1 -1
- package/lib/esm/lambdaHandlers/getSqsEvent_queueEvent.js +3 -3
- package/lib/esm/lambdaHandlers/getSqsEvent_queueEvent.js.map +1 -1
- package/lib/esm/logic/cognito/requestEmailVerificationCode.d.ts +2 -1
- package/lib/esm/logic/cognito/requestEmailVerificationCode.js +7 -1
- package/lib/esm/logic/cognito/requestEmailVerificationCode.js.map +1 -1
- package/lib/esm/logic/dynamo/getAllItems.d.ts +2 -1
- package/lib/esm/logic/dynamo/getAllItems.js +7 -2
- package/lib/esm/logic/dynamo/getAllItems.js.map +1 -1
- package/lib/esm/logic/dynamo/getItem.d.ts +2 -1
- package/lib/esm/logic/dynamo/getItem.js +8 -5
- package/lib/esm/logic/dynamo/getItem.js.map +1 -1
- package/lib/extension-layer/qpq-log-extension/index.js +37 -37
- package/package.json +7 -7
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import { KvsQueryOperation } from 'quidproquo-core';
|
|
2
|
+
export declare function getAllItems(tableName: string, region: string, filterExpression?: KvsQueryOperation): Promise<any[]>;
|
|
@@ -12,7 +12,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.getAllItems = getAllItems;
|
|
13
13
|
const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
|
|
14
14
|
const createAwsClient_1 = require("../createAwsClient");
|
|
15
|
-
|
|
15
|
+
const convertObjectToDynamoMap_1 = require("./convertObjectToDynamoMap");
|
|
16
|
+
const qpqDynamoOrm_1 = require("./qpqDynamoOrm");
|
|
17
|
+
function getAllItems(tableName, region, filterExpression) {
|
|
16
18
|
return __awaiter(this, void 0, void 0, function* () {
|
|
17
19
|
const dynamoDBClient = (0, createAwsClient_1.createAwsClient)(client_dynamodb_1.DynamoDBClient, { region });
|
|
18
20
|
let records = [];
|
|
@@ -20,11 +22,14 @@ function getAllItems(tableName, region) {
|
|
|
20
22
|
do {
|
|
21
23
|
const scanParams = {
|
|
22
24
|
TableName: tableName,
|
|
25
|
+
FilterExpression: (0, qpqDynamoOrm_1.buildDynamoQueryExpression)(filterExpression),
|
|
26
|
+
ExpressionAttributeValues: filterExpression && (0, qpqDynamoOrm_1.buildExpressionAttributeValues)([filterExpression]),
|
|
27
|
+
ExpressionAttributeNames: filterExpression && (0, qpqDynamoOrm_1.buildExpressionAttributeNames)([filterExpression]),
|
|
23
28
|
ExclusiveStartKey: lastEvaluatedKey,
|
|
24
29
|
};
|
|
25
30
|
try {
|
|
26
31
|
const result = yield dynamoDBClient.send(new client_dynamodb_1.ScanCommand(scanParams));
|
|
27
|
-
records = records.concat(result.Items);
|
|
32
|
+
records = records.concat((result.Items || []).map((item) => (0, convertObjectToDynamoMap_1.convertDynamoMapToObject)(item)));
|
|
28
33
|
lastEvaluatedKey = result.LastEvaluatedKey;
|
|
29
34
|
}
|
|
30
35
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAllItems.js","sourceRoot":"","sources":["../../../../src/logic/dynamo/getAllItems.ts"],"names":[],"mappings":";;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"getAllItems.js","sourceRoot":"","sources":["../../../../src/logic/dynamo/getAllItems.ts"],"names":[],"mappings":";;;;;;;;;;;AAQA,kCA0BC;AAhCD,8DAAyF;AAEzF,wDAAqD;AACrD,yEAAsE;AACtE,iDAA2H;AAE3H,SAAsB,WAAW,CAAC,SAAiB,EAAE,MAAc,EAAE,gBAAoC;;QACvG,MAAM,cAAc,GAAG,IAAA,iCAAe,EAAC,gCAAc,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAEnE,IAAI,OAAO,GAAU,EAAE,CAAC;QACxB,IAAI,gBAAoD,CAAC;QAEzD,GAAG,CAAC;YACF,MAAM,UAAU,GAAqB;gBACnC,SAAS,EAAE,SAAS;gBACpB,gBAAgB,EAAE,IAAA,yCAA0B,EAAC,gBAAgB,CAAC;gBAC9D,yBAAyB,EAAE,gBAAgB,IAAI,IAAA,6CAA8B,EAAC,CAAC,gBAAgB,CAAC,CAAC;gBACjG,wBAAwB,EAAE,gBAAgB,IAAI,IAAA,4CAA6B,EAAC,CAAC,gBAAgB,CAAC,CAAC;gBAC/F,iBAAiB,EAAE,gBAAgB;aACpC,CAAC;YAEF,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,IAAI,6BAAW,CAAC,UAAU,CAAC,CAAC,CAAC;gBACtE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,mDAAwB,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7F,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;YAC7C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;gBACvD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC,QAAQ,gBAAgB,EAAE;QAE3B,OAAO,OAAO,CAAC;IACjB,CAAC;CAAA","sourcesContent":["import { KvsQueryOperation } from 'quidproquo-core';\n\nimport { DynamoDBClient, ScanCommand, ScanCommandInput } from '@aws-sdk/client-dynamodb';\n\nimport { createAwsClient } from '../createAwsClient';\nimport { convertDynamoMapToObject } from './convertObjectToDynamoMap';\nimport { buildDynamoQueryExpression, buildExpressionAttributeNames, buildExpressionAttributeValues } from './qpqDynamoOrm';\n\nexport async function getAllItems(tableName: string, region: string, filterExpression?: KvsQueryOperation): Promise<any[]> {\n const dynamoDBClient = createAwsClient(DynamoDBClient, { region });\n\n let records: any[] = [];\n let lastEvaluatedKey: { [key: string]: any } | undefined;\n\n do {\n const scanParams: ScanCommandInput = {\n TableName: tableName,\n FilterExpression: buildDynamoQueryExpression(filterExpression),\n ExpressionAttributeValues: filterExpression && buildExpressionAttributeValues([filterExpression]),\n ExpressionAttributeNames: filterExpression && buildExpressionAttributeNames([filterExpression]),\n ExclusiveStartKey: lastEvaluatedKey,\n };\n\n try {\n const result = await dynamoDBClient.send(new ScanCommand(scanParams));\n records = records.concat((result.Items || []).map((item) => convertDynamoMapToObject(item)));\n lastEvaluatedKey = result.LastEvaluatedKey;\n } catch (error) {\n console.error('Error scanning DynamoDB table:', error);\n throw error;\n }\n } while (lastEvaluatedKey);\n\n return records;\n}\n"]}
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import { KvsCoreDataType } from 'quidproquo-core';
|
|
2
|
+
export declare function getItem(tableName: string, region: string, keyName: string, key: KvsCoreDataType, sortKeyName?: string, sortKey?: KvsCoreDataType): Promise<any | null>;
|
|
@@ -12,20 +12,23 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.getItem = getItem;
|
|
13
13
|
const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
|
|
14
14
|
const createAwsClient_1 = require("../createAwsClient");
|
|
15
|
-
|
|
15
|
+
const convertObjectToDynamoMap_1 = require("./convertObjectToDynamoMap");
|
|
16
|
+
const qpqDynamoOrm_1 = require("./qpqDynamoOrm");
|
|
17
|
+
function getItem(tableName, region, keyName, key, sortKeyName, sortKey) {
|
|
16
18
|
return __awaiter(this, void 0, void 0, function* () {
|
|
17
19
|
const dynamoDBClient = (0, createAwsClient_1.createAwsClient)(client_dynamodb_1.DynamoDBClient, { region });
|
|
18
20
|
const getItemParams = {
|
|
19
21
|
TableName: tableName,
|
|
20
22
|
Key: {
|
|
21
|
-
|
|
22
|
-
S: key,
|
|
23
|
-
},
|
|
23
|
+
[keyName]: (0, qpqDynamoOrm_1.buildAttributeValue)(key),
|
|
24
24
|
},
|
|
25
25
|
};
|
|
26
|
+
if (sortKeyName && sortKey !== undefined) {
|
|
27
|
+
getItemParams.Key[sortKeyName] = (0, qpqDynamoOrm_1.buildAttributeValue)(sortKey);
|
|
28
|
+
}
|
|
26
29
|
try {
|
|
27
30
|
const result = yield dynamoDBClient.send(new client_dynamodb_1.GetItemCommand(getItemParams));
|
|
28
|
-
return result.Item ?
|
|
31
|
+
return result.Item ? (0, convertObjectToDynamoMap_1.convertDynamoMapToObject)(result.Item) : null;
|
|
29
32
|
}
|
|
30
33
|
catch (error) {
|
|
31
34
|
console.error('Error getting item from DynamoDB:', error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getItem.js","sourceRoot":"","sources":["../../../../src/logic/dynamo/getItem.ts"],"names":[],"mappings":";;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"getItem.js","sourceRoot":"","sources":["../../../../src/logic/dynamo/getItem.ts"],"names":[],"mappings":";;;;;;;;;;;AAQA,0BA4BC;AAlCD,8DAA+F;AAE/F,wDAAqD;AACrD,yEAAsE;AACtE,iDAAqD;AAErD,SAAsB,OAAO,CAC3B,SAAiB,EACjB,MAAc,EACd,OAAe,EACf,GAAoB,EACpB,WAAoB,EACpB,OAAyB;;QAEzB,MAAM,cAAc,GAAG,IAAA,iCAAe,EAAC,gCAAc,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAEnE,MAAM,aAAa,GAAwB;YACzC,SAAS,EAAE,SAAS;YACpB,GAAG,EAAE;gBACH,CAAC,OAAO,CAAC,EAAE,IAAA,kCAAmB,EAAC,GAAG,CAAC;aACpC;SACF,CAAC;QAEF,IAAI,WAAW,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YACzC,aAAa,CAAC,GAAI,CAAC,WAAW,CAAC,GAAG,IAAA,kCAAmB,EAAC,OAAO,CAAC,CAAC;QACjE,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,IAAI,gCAAc,CAAC,aAAa,CAAC,CAAC,CAAC;YAC5E,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAA,mDAAwB,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACpE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;YAC1D,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CAAA","sourcesContent":["import { KvsCoreDataType } from 'quidproquo-core';\n\nimport { DynamoDBClient, GetItemCommand, GetItemCommandInput } from '@aws-sdk/client-dynamodb';\n\nimport { createAwsClient } from '../createAwsClient';\nimport { convertDynamoMapToObject } from './convertObjectToDynamoMap';\nimport { buildAttributeValue } from './qpqDynamoOrm';\n\nexport async function getItem(\n tableName: string,\n region: string,\n keyName: string,\n key: KvsCoreDataType,\n sortKeyName?: string,\n sortKey?: KvsCoreDataType,\n): Promise<any | null> {\n const dynamoDBClient = createAwsClient(DynamoDBClient, { region });\n\n const getItemParams: GetItemCommandInput = {\n TableName: tableName,\n Key: {\n [keyName]: buildAttributeValue(key),\n },\n };\n\n if (sortKeyName && sortKey !== undefined) {\n getItemParams.Key![sortKeyName] = buildAttributeValue(sortKey);\n }\n\n try {\n const result = await dynamoDBClient.send(new GetItemCommand(getItemParams));\n return result.Item ? convertDynamoMapToObject(result.Item) : null;\n } catch (error) {\n console.error('Error getting item from DynamoDB:', error);\n throw error;\n }\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { actionResult, actionResultError, AiActionType, ErrorTypeEnum, } from 'quidproquo-core';
|
|
2
2
|
import { generateText, stepCountIs } from 'ai';
|
|
3
|
-
import { createDriveFileResolver, prepareAiPromptCall, toSdkMessages } from './logic';
|
|
3
|
+
import { createDriveFileResolver, prepareAiPromptCall, toCacheableMessages, toCacheableSystem, toSdkMessages } from './logic';
|
|
4
4
|
const getProcessAiPrompt = (qpqConfig) => {
|
|
5
5
|
return async (payload, session, actionProcessorList, logger, updateSession, dynamicModuleLoader, streamRegistry) => {
|
|
6
6
|
const prepared = prepareAiPromptCall(qpqConfig, payload, session, actionProcessorList, logger, dynamicModuleLoader, streamRegistry);
|
|
@@ -10,7 +10,7 @@ const getProcessAiPrompt = (qpqConfig) => {
|
|
|
10
10
|
try {
|
|
11
11
|
const promptOrMessages = payload.messages
|
|
12
12
|
? {
|
|
13
|
-
messages: await toSdkMessages(payload.messages, createDriveFileResolver(qpqConfig, session, actionProcessorList, logger, dynamicModuleLoader, streamRegistry)),
|
|
13
|
+
messages: toCacheableMessages(await toSdkMessages(payload.messages, createDriveFileResolver(qpqConfig, session, actionProcessorList, logger, dynamicModuleLoader, streamRegistry)), payload.caching),
|
|
14
14
|
}
|
|
15
15
|
: { prompt: payload.prompt };
|
|
16
16
|
// Extended thinking — the model reasons before answering, within the token budget.
|
|
@@ -19,12 +19,17 @@ const getProcessAiPrompt = (qpqConfig) => {
|
|
|
19
19
|
: undefined;
|
|
20
20
|
const result = await generateText({
|
|
21
21
|
model: prepared.model,
|
|
22
|
-
system: payload.system,
|
|
22
|
+
system: toCacheableSystem(payload.system, payload.caching),
|
|
23
23
|
...promptOrMessages,
|
|
24
24
|
tools: prepared.tools,
|
|
25
25
|
providerOptions,
|
|
26
|
-
stopWhen: stepCountIs(
|
|
26
|
+
stopWhen: stepCountIs(20),
|
|
27
27
|
});
|
|
28
|
+
if (payload.caching) {
|
|
29
|
+
// The SDK's cross-provider usage breakdown, not providerMetadata.bedrock.usage — that
|
|
30
|
+
// field never carries cacheReadInputTokens through on @ai-sdk/amazon-bedrock (5.0.11).
|
|
31
|
+
console.log('AI prompt cache usage:', result.finalStep?.usage?.inputTokenDetails);
|
|
32
|
+
}
|
|
28
33
|
return actionResult({ text: result.text });
|
|
29
34
|
}
|
|
30
35
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAiPromptActionProcessor.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/ai/getAiPromptActionProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,YAAY,EACZ,iBAAiB,EACjB,YAAY,EAEZ,aAAa,GAEd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAE/C,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"getAiPromptActionProcessor.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/ai/getAiPromptActionProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,YAAY,EACZ,iBAAiB,EACjB,YAAY,EAEZ,aAAa,GAEd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAE/C,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE9H,MAAM,kBAAkB,GAAG,CAAC,SAAoB,EAA2B,EAAE;IAC3E,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,aAAa,EAAE,mBAAmB,EAAE,cAAc,EAAE,EAAE;QACjH,MAAM,QAAQ,GAAG,mBAAmB,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,mBAAmB,EAAE,cAAc,CAAC,CAAC;QACpI,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;YACxB,OAAO,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACxE,CAAC;QAED,IAAI,CAAC;YACH,MAAM,gBAAgB,GAAG,OAAO,CAAC,QAAQ;gBACvC,CAAC,CAAC;oBACE,QAAQ,EAAE,mBAAmB,CAC3B,MAAM,aAAa,CACjB,OAAO,CAAC,QAAQ,EAChB,uBAAuB,CAAC,SAAS,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,mBAAmB,EAAE,cAAc,CAAC,CAC9G,EACD,OAAO,CAAC,OAAO,CAChB;iBACF;gBACH,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;YAE/B,mFAAmF;YACnF,MAAM,eAAe,GAAG,OAAO,CAAC,SAAS;gBACvC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,SAAkB,EAAE,YAAY,EAAE,OAAO,CAAC,SAAS,CAAC,YAAY,IAAI,IAAI,EAAE,EAAE,EAAE;gBACtH,CAAC,CAAC,SAAS,CAAC;YAEd,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;gBAChC,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,MAAM,EAAE,iBAAiB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC;gBAC1D,GAAG,gBAAgB;gBACnB,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,eAAe;gBACf,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC;aAC1B,CAAC,CAAC;YAEH,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,sFAAsF;gBACtF,uFAAuF;gBACvF,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;YACpF,CAAC;YAED,OAAO,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,OAAO,iBAAiB,CAAC,aAAa,CAAC,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACtE,CAAC;YAED,OAAO,iBAAiB,CAAC,aAAa,CAAC,YAAY,EAAE,+CAA+C,CAAC,CAAC;QACxG,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAgC,KAAK,EAAE,SAAoB,EAAgC,EAAE,CAAC,CAAC;IACpI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC,SAAS,CAAC;CACrD,CAAC,CAAC","sourcesContent":["import {\n ActionProcessorList,\n ActionProcessorListResolver,\n actionResult,\n actionResultError,\n AiActionType,\n AiPromptActionProcessor,\n ErrorTypeEnum,\n QPQConfig,\n} from 'quidproquo-core';\n\nimport { generateText, stepCountIs } from 'ai';\n\nimport { createDriveFileResolver, prepareAiPromptCall, toCacheableMessages, toCacheableSystem, toSdkMessages } from './logic';\n\nconst getProcessAiPrompt = (qpqConfig: QPQConfig): AiPromptActionProcessor => {\n return async (payload, session, actionProcessorList, logger, updateSession, dynamicModuleLoader, streamRegistry) => {\n const prepared = prepareAiPromptCall(qpqConfig, payload, session, actionProcessorList, logger, dynamicModuleLoader, streamRegistry);\n if ('error' in prepared) {\n return actionResultError(prepared.error.type, prepared.error.message);\n }\n\n try {\n const promptOrMessages = payload.messages\n ? {\n messages: toCacheableMessages(\n await toSdkMessages(\n payload.messages,\n createDriveFileResolver(qpqConfig, session, actionProcessorList, logger, dynamicModuleLoader, streamRegistry),\n ),\n payload.caching,\n ),\n }\n : { prompt: payload.prompt };\n\n // Extended thinking — the model reasons before answering, within the token budget.\n const providerOptions = payload.reasoning\n ? { bedrock: { reasoningConfig: { type: 'enabled' as const, budgetTokens: payload.reasoning.budgetTokens ?? 4096 } } }\n : undefined;\n\n const result = await generateText({\n model: prepared.model,\n system: toCacheableSystem(payload.system, payload.caching),\n ...promptOrMessages,\n tools: prepared.tools,\n providerOptions,\n stopWhen: stepCountIs(20),\n });\n\n if (payload.caching) {\n // The SDK's cross-provider usage breakdown, not providerMetadata.bedrock.usage — that\n // field never carries cacheReadInputTokens through on @ai-sdk/amazon-bedrock (5.0.11).\n console.log('AI prompt cache usage:', result.finalStep?.usage?.inputTokenDetails);\n }\n\n return actionResult({ text: result.text });\n } catch (error) {\n if (error instanceof Error) {\n return actionResultError(ErrorTypeEnum.GenericError, error.message);\n }\n\n return actionResultError(ErrorTypeEnum.GenericError, 'An error occurred during AI prompt execution.');\n }\n };\n};\n\nexport const getAiPromptActionProcessor: ActionProcessorListResolver = async (qpqConfig: QPQConfig): Promise<ActionProcessorList> => ({\n [AiActionType.Prompt]: getProcessAiPrompt(qpqConfig),\n});\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { actionResult, actionResultError, AiActionType, ErrorTypeEnum, } from 'quidproquo-core';
|
|
2
2
|
import { stepCountIs, streamText } from 'ai';
|
|
3
3
|
import { randomGuid } from '../../../awsLambdaUtils';
|
|
4
|
-
import { createDriveFileResolver, mapAiStreamPart, prepareAiPromptCall, toSdkMessages } from './logic';
|
|
4
|
+
import { createDriveFileResolver, mapAiStreamPart, prepareAiPromptCall, toCacheableMessages, toCacheableSystem, toErrorMessage, toSdkMessages, } from './logic';
|
|
5
5
|
const getProcessAiPromptStream = (qpqConfig) => {
|
|
6
6
|
return async (payload, session, actionProcessorList, logger, updateSession, dynamicModuleLoader, streamRegistry) => {
|
|
7
7
|
const prepared = prepareAiPromptCall(qpqConfig, payload, session, actionProcessorList, logger, dynamicModuleLoader, streamRegistry);
|
|
@@ -11,20 +11,22 @@ const getProcessAiPromptStream = (qpqConfig) => {
|
|
|
11
11
|
try {
|
|
12
12
|
const promptOrMessages = payload.messages
|
|
13
13
|
? {
|
|
14
|
-
messages: await toSdkMessages(payload.messages, createDriveFileResolver(qpqConfig, session, actionProcessorList, logger, dynamicModuleLoader, streamRegistry)),
|
|
14
|
+
messages: toCacheableMessages(await toSdkMessages(payload.messages, createDriveFileResolver(qpqConfig, session, actionProcessorList, logger, dynamicModuleLoader, streamRegistry)), payload.caching),
|
|
15
15
|
}
|
|
16
16
|
: { prompt: payload.prompt };
|
|
17
17
|
// Extended thinking — thinking progress streams out as Reasoning* parts.
|
|
18
18
|
const providerOptions = payload.reasoning
|
|
19
19
|
? { bedrock: { reasoningConfig: { type: 'enabled', budgetTokens: payload.reasoning.budgetTokens ?? 4096 } } }
|
|
20
20
|
: undefined;
|
|
21
|
-
const { fullStream } = streamText({
|
|
21
|
+
const { fullStream, finalStep } = streamText({
|
|
22
22
|
model: prepared.model,
|
|
23
|
-
system: payload.system,
|
|
23
|
+
system: toCacheableSystem(payload.system, payload.caching),
|
|
24
24
|
...promptOrMessages,
|
|
25
25
|
tools: prepared.tools,
|
|
26
26
|
providerOptions,
|
|
27
|
-
|
|
27
|
+
// Proof of concept for halt/resume: stop after every single step so the
|
|
28
|
+
// caller sees finishReason 'tool-calls' and must loop the turn back in.
|
|
29
|
+
stopWhen: stepCountIs(20),
|
|
28
30
|
// streamText swallows errors by default to keep the server alive — surface them to CloudWatch.
|
|
29
31
|
onError: ({ error }) => {
|
|
30
32
|
// todo yeild this out
|
|
@@ -36,6 +38,20 @@ const getProcessAiPromptStream = (qpqConfig) => {
|
|
|
36
38
|
for await (const part of fullStream) {
|
|
37
39
|
yield JSON.stringify(mapAiStreamPart(part));
|
|
38
40
|
}
|
|
41
|
+
if (payload.caching) {
|
|
42
|
+
try {
|
|
43
|
+
// The SDK's cross-provider usage breakdown, not providerMetadata.bedrock.usage — that
|
|
44
|
+
// field never carries cacheReadInputTokens through on @ai-sdk/amazon-bedrock (5.0.11).
|
|
45
|
+
const step = await finalStep;
|
|
46
|
+
console.log('AI prompt cache usage:', step.usage?.inputTokenDetails);
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
// finalStep rejects (AI_NoOutputGeneratedError) when the stream errored before
|
|
50
|
+
// completing a step. The error part has already been streamed to the consumer;
|
|
51
|
+
// throwing here would replace that real error with the unhelpful wrapper.
|
|
52
|
+
console.warn('AI prompt cache usage unavailable:', toErrorMessage(error));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
39
55
|
}
|
|
40
56
|
streamRegistry.register(streamId, aiStreamIterator());
|
|
41
57
|
return actionResult({ id: streamId, encoding: 'json' });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAiPromptStreamActionProcessor.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/ai/getAiPromptStreamActionProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,YAAY,EACZ,iBAAiB,EACjB,YAAY,EAEZ,aAAa,GAEd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,
|
|
1
|
+
{"version":3,"file":"getAiPromptStreamActionProcessor.js","sourceRoot":"","sources":["../../../../../src/getActionProcessor/core/ai/getAiPromptStreamActionProcessor.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ActionProcessorList,\n ActionProcessorListResolver,\n actionResult,\n actionResultError,\n AiActionType,\n AiPromptStreamActionProcessor,\n ErrorTypeEnum,\n QPQConfig,\n} from 'quidproquo-core';\n\nimport { stepCountIs, streamText } from 'ai';\n\nimport { randomGuid } from '../../../awsLambdaUtils';\nimport {\n createDriveFileResolver,\n mapAiStreamPart,\n prepareAiPromptCall,\n toCacheableMessages,\n toCacheableSystem,\n toErrorMessage,\n toSdkMessages,\n} from './logic';\n\nconst getProcessAiPromptStream = (qpqConfig: QPQConfig): AiPromptStreamActionProcessor => {\n return async (payload, session, actionProcessorList, logger, updateSession, dynamicModuleLoader, streamRegistry) => {\n const prepared = prepareAiPromptCall(qpqConfig, payload, session, actionProcessorList, logger, dynamicModuleLoader, streamRegistry);\n if ('error' in prepared) {\n return actionResultError(prepared.error.type, prepared.error.message);\n }\n\n try {\n const promptOrMessages = payload.messages\n ? {\n messages: toCacheableMessages(\n await toSdkMessages(\n payload.messages,\n createDriveFileResolver(qpqConfig, session, actionProcessorList, logger, dynamicModuleLoader, streamRegistry),\n ),\n payload.caching,\n ),\n }\n : { prompt: payload.prompt };\n\n // Extended thinking — thinking progress streams out as Reasoning* parts.\n const providerOptions = payload.reasoning\n ? { bedrock: { reasoningConfig: { type: 'enabled' as const, budgetTokens: payload.reasoning.budgetTokens ?? 4096 } } }\n : undefined;\n\n const { fullStream, finalStep } = streamText({\n model: prepared.model,\n system: toCacheableSystem(payload.system, payload.caching),\n ...promptOrMessages,\n tools: prepared.tools,\n providerOptions,\n // Proof of concept for halt/resume: stop after every single step so the\n // caller sees finishReason 'tool-calls' and must loop the turn back in.\n stopWhen: stepCountIs(20),\n // streamText swallows errors by default to keep the server alive — surface them to CloudWatch.\n onError: ({ error }) => {\n // todo yeild this out\n console.error('AI prompt stream error:', error);\n },\n });\n\n const streamId = `ai-prompt-${Date.now()}-${randomGuid()}`;\n\n async function* aiStreamIterator(): AsyncIterableIterator<string> {\n for await (const part of fullStream) {\n yield JSON.stringify(mapAiStreamPart(part));\n }\n\n if (payload.caching) {\n try {\n // The SDK's cross-provider usage breakdown, not providerMetadata.bedrock.usage — that\n // field never carries cacheReadInputTokens through on @ai-sdk/amazon-bedrock (5.0.11).\n const step = await finalStep;\n console.log('AI prompt cache usage:', step.usage?.inputTokenDetails);\n } catch (error) {\n // finalStep rejects (AI_NoOutputGeneratedError) when the stream errored before\n // completing a step. The error part has already been streamed to the consumer;\n // throwing here would replace that real error with the unhelpful wrapper.\n console.warn('AI prompt cache usage unavailable:', toErrorMessage(error));\n }\n }\n }\n\n streamRegistry.register(streamId, aiStreamIterator());\n\n return actionResult({ id: streamId, encoding: 'json' as const });\n } catch (error) {\n if (error instanceof Error) {\n return actionResultError(ErrorTypeEnum.GenericError, error.message);\n }\n\n return actionResultError(ErrorTypeEnum.GenericError, 'An error occurred during AI prompt stream.');\n }\n };\n};\n\nexport const getAiPromptStreamActionProcessor: ActionProcessorListResolver = async (qpqConfig: QPQConfig): Promise<ActionProcessorList> => ({\n [AiActionType.PromptStream]: getProcessAiPromptStream(qpqConfig),\n});\n"]}
|
|
@@ -3,9 +3,9 @@ import { randomGuid } from '../../../../awsLambdaUtils';
|
|
|
3
3
|
// Reads drive-referenced files through the active file action processor, so the
|
|
4
4
|
// same message works against S3 in production and local disk under the dev server.
|
|
5
5
|
export const createDriveFileResolver = (qpqConfig, session, actionProcessorList, logger, dynamicModuleLoader, streamRegistry) => {
|
|
6
|
-
return async (drive, filepath) => {
|
|
6
|
+
return async (drive, filepath, scope) => {
|
|
7
7
|
const resolveStory = createImplementationRuntime(qpqConfig, [`AI File: ${drive}/${filepath}`], () => new Date().toISOString(), randomGuid, session, actionProcessorList, logger, dynamicModuleLoader, streamRegistry);
|
|
8
|
-
const storyResult = await resolveStory(askFileReadBinaryContents, [drive, filepath]);
|
|
8
|
+
const storyResult = await resolveStory(askFileReadBinaryContents, [drive, filepath, scope]);
|
|
9
9
|
if (storyResult.error) {
|
|
10
10
|
throw new Error(storyResult.error.errorText);
|
|
11
11
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createDriveFileResolver.js","sourceRoot":"","sources":["../../../../../../src/getActionProcessor/core/ai/logic/createDriveFileResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,yBAAyB,EACzB,2BAA2B,GAM5B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAGxD,gFAAgF;AAChF,mFAAmF;AACnF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,SAAoB,EACpB,OAAqB,EACrB,mBAAwC,EACxC,MAAiB,EACjB,mBAAwC,EACxC,cAA+B,EACV,EAAE;IACvB,OAAO,KAAK,EAAE,KAAa,EAAE,QAAgB,EAAE,EAAE;QAC/
|
|
1
|
+
{"version":3,"file":"createDriveFileResolver.js","sourceRoot":"","sources":["../../../../../../src/getActionProcessor/core/ai/logic/createDriveFileResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,yBAAyB,EACzB,2BAA2B,GAM5B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAGxD,gFAAgF;AAChF,mFAAmF;AACnF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,SAAoB,EACpB,OAAqB,EACrB,mBAAwC,EACxC,MAAiB,EACjB,mBAAwC,EACxC,cAA+B,EACV,EAAE;IACvB,OAAO,KAAK,EAAE,KAAa,EAAE,QAAgB,EAAE,KAAc,EAAE,EAAE;QAC/D,MAAM,YAAY,GAAG,2BAA2B,CAC9C,SAAS,EACT,CAAC,YAAY,KAAK,IAAI,QAAQ,EAAE,CAAC,EACjC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAC9B,UAAU,EACV,OAAO,EACP,mBAAmB,EACnB,MAAM,EACN,mBAAmB,EACnB,cAAc,CACf,CAAC;QAEF,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,yBAAyB,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;QAE5F,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO,WAAW,CAAC,MAAM,CAAC;IAC5B,CAAC,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {\n ActionProcessorList,\n askFileReadBinaryContents,\n createImplementationRuntime,\n DynamicModuleLoader,\n QPQConfig,\n QpqLogger,\n StorySession,\n StreamRegistry,\n} from 'quidproquo-core';\n\nimport { randomGuid } from '../../../../awsLambdaUtils';\nimport { AiDriveFileResolver } from './toSdkMessages';\n\n// Reads drive-referenced files through the active file action processor, so the\n// same message works against S3 in production and local disk under the dev server.\nexport const createDriveFileResolver = (\n qpqConfig: QPQConfig,\n session: StorySession,\n actionProcessorList: ActionProcessorList,\n logger: QpqLogger,\n dynamicModuleLoader: DynamicModuleLoader,\n streamRegistry?: StreamRegistry,\n): AiDriveFileResolver => {\n return async (drive: string, filepath: string, scope?: string) => {\n const resolveStory = createImplementationRuntime(\n qpqConfig,\n [`AI File: ${drive}/${filepath}`],\n () => new Date().toISOString(),\n randomGuid,\n session,\n actionProcessorList,\n logger,\n dynamicModuleLoader,\n streamRegistry,\n );\n\n const storyResult = await resolveStory(askFileReadBinaryContents, [drive, filepath, scope]);\n\n if (storyResult.error) {\n throw new Error(storyResult.error.errorText);\n }\n\n return storyResult.result;\n };\n};\n"]}
|
|
@@ -28,6 +28,9 @@ export * from './mapAiStreamToolInputStart';
|
|
|
28
28
|
export * from './mapAiStreamToolOutputDenied';
|
|
29
29
|
export * from './mapAiStreamToolResult';
|
|
30
30
|
export * from './prepareAiPromptCall';
|
|
31
|
+
export * from './toAiStreamFinishReason';
|
|
31
32
|
export * from './toAiStreamUsage';
|
|
33
|
+
export * from './toCacheableMessages';
|
|
34
|
+
export * from './toCacheableSystem';
|
|
32
35
|
export * from './toErrorMessage';
|
|
33
36
|
export * from './toSdkMessages';
|
|
@@ -28,7 +28,10 @@ export * from './mapAiStreamToolInputStart';
|
|
|
28
28
|
export * from './mapAiStreamToolOutputDenied';
|
|
29
29
|
export * from './mapAiStreamToolResult';
|
|
30
30
|
export * from './prepareAiPromptCall';
|
|
31
|
+
export * from './toAiStreamFinishReason';
|
|
31
32
|
export * from './toAiStreamUsage';
|
|
33
|
+
export * from './toCacheableMessages';
|
|
34
|
+
export * from './toCacheableSystem';
|
|
32
35
|
export * from './toErrorMessage';
|
|
33
36
|
export * from './toSdkMessages';
|
|
34
37
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/getActionProcessor/core/ai/logic/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kCAAkC,CAAC;AACjD,cAAc,mCAAmC,CAAC;AAClD,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC","sourcesContent":["export * from './aiStreamPartMappers';\nexport * from './createDriveFileResolver';\nexport * from './mapAiStreamAbort';\nexport * from './mapAiStreamCustom';\nexport * from './mapAiStreamError';\nexport * from './mapAiStreamFilePart';\nexport * from './mapAiStreamFinish';\nexport * from './mapAiStreamFinishStep';\nexport * from './mapAiStreamPart';\nexport * from './mapAiStreamRaw';\nexport * from './mapAiStreamReasoningDelta';\nexport * from './mapAiStreamReasoningEnd';\nexport * from './mapAiStreamReasoningFilePart';\nexport * from './mapAiStreamReasoningStart';\nexport * from './mapAiStreamSourcePart';\nexport * from './mapAiStreamStart';\nexport * from './mapAiStreamStartStep';\nexport * from './mapAiStreamTextDelta';\nexport * from './mapAiStreamTextEnd';\nexport * from './mapAiStreamTextStart';\nexport * from './mapAiStreamToolApprovalRequest';\nexport * from './mapAiStreamToolApprovalResponse';\nexport * from './mapAiStreamToolCall';\nexport * from './mapAiStreamToolError';\nexport * from './mapAiStreamToolInputDelta';\nexport * from './mapAiStreamToolInputEnd';\nexport * from './mapAiStreamToolInputStart';\nexport * from './mapAiStreamToolOutputDenied';\nexport * from './mapAiStreamToolResult';\nexport * from './prepareAiPromptCall';\nexport * from './toAiStreamUsage';\nexport * from './toErrorMessage';\nexport * from './toSdkMessages';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/getActionProcessor/core/ai/logic/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kCAAkC,CAAC;AACjD,cAAc,mCAAmC,CAAC;AAClD,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC","sourcesContent":["export * from './aiStreamPartMappers';\nexport * from './createDriveFileResolver';\nexport * from './mapAiStreamAbort';\nexport * from './mapAiStreamCustom';\nexport * from './mapAiStreamError';\nexport * from './mapAiStreamFilePart';\nexport * from './mapAiStreamFinish';\nexport * from './mapAiStreamFinishStep';\nexport * from './mapAiStreamPart';\nexport * from './mapAiStreamRaw';\nexport * from './mapAiStreamReasoningDelta';\nexport * from './mapAiStreamReasoningEnd';\nexport * from './mapAiStreamReasoningFilePart';\nexport * from './mapAiStreamReasoningStart';\nexport * from './mapAiStreamSourcePart';\nexport * from './mapAiStreamStart';\nexport * from './mapAiStreamStartStep';\nexport * from './mapAiStreamTextDelta';\nexport * from './mapAiStreamTextEnd';\nexport * from './mapAiStreamTextStart';\nexport * from './mapAiStreamToolApprovalRequest';\nexport * from './mapAiStreamToolApprovalResponse';\nexport * from './mapAiStreamToolCall';\nexport * from './mapAiStreamToolError';\nexport * from './mapAiStreamToolInputDelta';\nexport * from './mapAiStreamToolInputEnd';\nexport * from './mapAiStreamToolInputStart';\nexport * from './mapAiStreamToolOutputDenied';\nexport * from './mapAiStreamToolResult';\nexport * from './prepareAiPromptCall';\nexport * from './toAiStreamFinishReason';\nexport * from './toAiStreamUsage';\nexport * from './toCacheableMessages';\nexport * from './toCacheableSystem';\nexport * from './toErrorMessage';\nexport * from './toSdkMessages';\n"]}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { AiStreamPartType } from 'quidproquo-core';
|
|
2
|
+
import { toAiStreamFinishReason } from './toAiStreamFinishReason';
|
|
2
3
|
import { toAiStreamUsage } from './toAiStreamUsage';
|
|
3
4
|
export const mapAiStreamFinish = (part) => ({
|
|
4
5
|
type: AiStreamPartType.Finish,
|
|
5
|
-
finishReason: part.finishReason,
|
|
6
|
+
finishReason: toAiStreamFinishReason(part.finishReason),
|
|
6
7
|
usage: toAiStreamUsage(part.totalUsage),
|
|
7
8
|
});
|
|
8
9
|
//# sourceMappingURL=mapAiStreamFinish.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapAiStreamFinish.js","sourceRoot":"","sources":["../../../../../../src/getActionProcessor/core/ai/logic/mapAiStreamFinish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGnE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAqC,EAAkB,EAAE,CAAC,CAAC;IAC3F,IAAI,EAAE,gBAAgB,CAAC,MAAM;IAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;
|
|
1
|
+
{"version":3,"file":"mapAiStreamFinish.js","sourceRoot":"","sources":["../../../../../../src/getActionProcessor/core/ai/logic/mapAiStreamFinish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAqC,EAAkB,EAAE,CAAC,CAAC;IAC3F,IAAI,EAAE,gBAAgB,CAAC,MAAM;IAC7B,YAAY,EAAE,sBAAsB,CAAC,IAAI,CAAC,YAAY,CAAC;IACvD,KAAK,EAAE,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;CACxC,CAAC,CAAC","sourcesContent":["import { AiStreamFinish, AiStreamPartType } from 'quidproquo-core';\n\nimport { AiSdkStreamPartOfType } from '../types';\nimport { toAiStreamFinishReason } from './toAiStreamFinishReason';\nimport { toAiStreamUsage } from './toAiStreamUsage';\n\nexport const mapAiStreamFinish = (part: AiSdkStreamPartOfType<'finish'>): AiStreamFinish => ({\n type: AiStreamPartType.Finish,\n finishReason: toAiStreamFinishReason(part.finishReason),\n usage: toAiStreamUsage(part.totalUsage),\n});\n"]}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { AiStreamPartType } from 'quidproquo-core';
|
|
2
|
+
import { toAiStreamFinishReason } from './toAiStreamFinishReason';
|
|
2
3
|
import { toAiStreamUsage } from './toAiStreamUsage';
|
|
3
4
|
export const mapAiStreamFinishStep = (part) => ({
|
|
4
5
|
type: AiStreamPartType.FinishStep,
|
|
5
|
-
finishReason: part.finishReason,
|
|
6
|
+
finishReason: toAiStreamFinishReason(part.finishReason),
|
|
6
7
|
usage: toAiStreamUsage(part.usage),
|
|
7
8
|
});
|
|
8
9
|
//# sourceMappingURL=mapAiStreamFinishStep.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapAiStreamFinishStep.js","sourceRoot":"","sources":["../../../../../../src/getActionProcessor/core/ai/logic/mapAiStreamFinishStep.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGvE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,IAA0C,EAAsB,EAAE,CAAC,CAAC;IACxG,IAAI,EAAE,gBAAgB,CAAC,UAAU;IACjC,YAAY,EAAE,IAAI,CAAC,YAAY;
|
|
1
|
+
{"version":3,"file":"mapAiStreamFinishStep.js","sourceRoot":"","sources":["../../../../../../src/getActionProcessor/core/ai/logic/mapAiStreamFinishStep.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,IAA0C,EAAsB,EAAE,CAAC,CAAC;IACxG,IAAI,EAAE,gBAAgB,CAAC,UAAU;IACjC,YAAY,EAAE,sBAAsB,CAAC,IAAI,CAAC,YAAY,CAAC;IACvD,KAAK,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;CACnC,CAAC,CAAC","sourcesContent":["import { AiStreamFinishStep, AiStreamPartType } from 'quidproquo-core';\n\nimport { AiSdkStreamPartOfType } from '../types';\nimport { toAiStreamFinishReason } from './toAiStreamFinishReason';\nimport { toAiStreamUsage } from './toAiStreamUsage';\n\nexport const mapAiStreamFinishStep = (part: AiSdkStreamPartOfType<'finish-step'>): AiStreamFinishStep => ({\n type: AiStreamPartType.FinishStep,\n finishReason: toAiStreamFinishReason(part.finishReason),\n usage: toAiStreamUsage(part.usage),\n});\n"]}
|
|
@@ -18,18 +18,23 @@ export const prepareAiPromptCall = (qpqConfig, payload, session, actionProcessor
|
|
|
18
18
|
if (!aiConfig) {
|
|
19
19
|
return { error: { type: ErrorTypeEnum.NotFound, message: `AI config not found: ${payload.aiName}` } };
|
|
20
20
|
}
|
|
21
|
+
// Runs the tool's inline-function executor as its own story.
|
|
22
|
+
const createToolExecute = (toolName, executor) => async (args) => {
|
|
23
|
+
const resolveStory = createImplementationRuntime(qpqConfig, [`AI Tool: ${toolName}`], () => new Date().toISOString(), randomGuid, session, actionProcessorList, logger, dynamicModuleLoader, streamRegistry);
|
|
24
|
+
const storyResult = await resolveStory(askInlineFunctionExecute, [executor, args]);
|
|
25
|
+
if (storyResult.error) {
|
|
26
|
+
throw new Error(storyResult.error.errorText);
|
|
27
|
+
}
|
|
28
|
+
return storyResult.result;
|
|
29
|
+
};
|
|
21
30
|
for (const toolDef of aiConfig.tools) {
|
|
22
31
|
aiTools[toolDef.name] = {
|
|
23
32
|
description: toolDef.description,
|
|
24
33
|
inputSchema: jsonSchema(toolDef.inputSchema),
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
throw new Error(storyResult.error.errorText);
|
|
30
|
-
}
|
|
31
|
-
return storyResult.result;
|
|
32
|
-
},
|
|
34
|
+
// A tool without an executor is client-side: the AI SDK emits the tool call
|
|
35
|
+
// but has nothing to run, so the loop halts with the call unresolved and the
|
|
36
|
+
// client answers it out-of-band (see AiToolDefinition.executor).
|
|
37
|
+
...(toolDef.executor ? { execute: createToolExecute(toolDef.name, toolDef.executor) } : {}),
|
|
33
38
|
};
|
|
34
39
|
}
|
|
35
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepareAiPromptCall.js","sourceRoot":"","sources":["../../../../../../src/getActionProcessor/core/ai/logic/prepareAiPromptCall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAGL,wBAAwB,EACxB,2BAA2B,EAE3B,aAAa,EAEb,YAAY,GAIb,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAahD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,SAAoB,EACpB,OAAmC,EACnC,OAAqB,EACrB,mBAAwC,EACxC,MAAiB,EACjB,mBAAwC,EACxC,cAA+B,EACJ,EAAE;IAC7B,MAAM,MAAM,GAAG,iBAAiB,CAAC,gCAAgC,CAAC,SAAS,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAEhD,MAAM,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACtD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,CAAC,cAAc,EAAE,OAAO,EAAE,yBAAyB,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC;IAC9G,CAAC;IAED,MAAM,OAAO,GAAwB,EAAE,CAAC;IAExC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,SAAS,GAAG,YAAY,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;QAEpE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,wBAAwB,OAAO,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC;QACxG,CAAC;QAED,
|
|
1
|
+
{"version":3,"file":"prepareAiPromptCall.js","sourceRoot":"","sources":["../../../../../../src/getActionProcessor/core/ai/logic/prepareAiPromptCall.ts"],"names":[],"mappings":"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","sourcesContent":["import { qpqConfigAwsUtils } from 'quidproquo-config-aws';\nimport {\n ActionProcessorList,\n AiModel,\n askInlineFunctionExecute,\n createImplementationRuntime,\n DynamicModuleLoader,\n ErrorTypeEnum,\n QPQConfig,\n qpqCoreUtils,\n QpqLogger,\n StorySession,\n StreamRegistry,\n} from 'quidproquo-core';\n\nimport { jsonSchema } from 'ai';\nimport { createAmazonBedrock } from '@ai-sdk/amazon-bedrock';\n\nimport { randomGuid } from '../../../../awsLambdaUtils';\nimport { bedrockModelMap } from '../aiModelMap';\n\nexport interface PrepareAiPromptCallPayload {\n model: AiModel;\n aiName?: string;\n}\n\ntype BedrockProvider = ReturnType<typeof createAmazonBedrock>;\ntype BedrockLanguageModel = ReturnType<BedrockProvider>;\n\nexport type PrepareAiPromptCallResult =\n { error: { type: ErrorTypeEnum; message: string } } | { model: BedrockLanguageModel; tools: Record<string, any> | undefined };\n\nexport const prepareAiPromptCall = (\n qpqConfig: QPQConfig,\n payload: PrepareAiPromptCallPayload,\n session: StorySession,\n actionProcessorList: ActionProcessorList,\n logger: QpqLogger,\n dynamicModuleLoader: DynamicModuleLoader,\n streamRegistry?: StreamRegistry,\n): PrepareAiPromptCallResult => {\n const region = qpqConfigAwsUtils.getApplicationModuleDeployRegion(qpqConfig);\n const bedrock = createAmazonBedrock({ region });\n\n const bedrockModelId = bedrockModelMap[payload.model];\n if (!bedrockModelId) {\n return { error: { type: ErrorTypeEnum.NotImplemented, message: `Unsupported AI model: ${payload.model}` } };\n }\n\n const aiTools: Record<string, any> = {};\n\n if (payload.aiName) {\n const aiConfigs = qpqCoreUtils.getAllAiConfigs(qpqConfig);\n const aiConfig = aiConfigs.find((c) => c.aiName === payload.aiName);\n\n if (!aiConfig) {\n return { error: { type: ErrorTypeEnum.NotFound, message: `AI config not found: ${payload.aiName}` } };\n }\n\n // Runs the tool's inline-function executor as its own story.\n const createToolExecute = (toolName: string, executor: string) => async (args: unknown) => {\n const resolveStory = createImplementationRuntime(\n qpqConfig,\n [`AI Tool: ${toolName}`],\n () => new Date().toISOString(),\n randomGuid,\n session,\n actionProcessorList,\n logger,\n dynamicModuleLoader,\n streamRegistry,\n );\n\n const storyResult = await resolveStory(askInlineFunctionExecute, [executor, args]);\n\n if (storyResult.error) {\n throw new Error(storyResult.error.errorText);\n }\n\n return storyResult.result;\n };\n\n for (const toolDef of aiConfig.tools) {\n aiTools[toolDef.name] = {\n description: toolDef.description,\n inputSchema: jsonSchema(toolDef.inputSchema),\n // A tool without an executor is client-side: the AI SDK emits the tool call\n // but has nothing to run, so the loop halts with the call unresolved and the\n // client answers it out-of-band (see AiToolDefinition.executor).\n ...(toolDef.executor ? { execute: createToolExecute(toolDef.name, toolDef.executor) } : {}),\n };\n }\n }\n\n return {\n model: bedrock(bedrockModelId),\n tools: Object.keys(aiTools).length > 0 ? aiTools : undefined,\n };\n};\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { AiStreamFinishReasonEnum } from 'quidproquo-core';
|
|
2
|
+
const knownFinishReasons = new Set(Object.values(AiStreamFinishReasonEnum));
|
|
3
|
+
// The AI SDK's FinishReason strings map 1:1 onto the enum today; anything a future SDK version
|
|
4
|
+
// adds degrades to `unknown` instead of leaking an untyped string into core's typed parts.
|
|
5
|
+
export const toAiStreamFinishReason = (finishReason) => knownFinishReasons.has(finishReason) ? finishReason : AiStreamFinishReasonEnum.unknown;
|
|
6
|
+
//# sourceMappingURL=toAiStreamFinishReason.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toAiStreamFinishReason.js","sourceRoot":"","sources":["../../../../../../src/getActionProcessor/core/ai/logic/toAiStreamFinishReason.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAS,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC;AAEpF,+FAA+F;AAC/F,2FAA2F;AAC3F,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,YAAoB,EAA4B,EAAE,CACvF,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAE,YAAyC,CAAC,CAAC,CAAC,wBAAwB,CAAC,OAAO,CAAC","sourcesContent":["import { AiStreamFinishReasonEnum } from 'quidproquo-core';\n\nconst knownFinishReasons = new Set<string>(Object.values(AiStreamFinishReasonEnum));\n\n// The AI SDK's FinishReason strings map 1:1 onto the enum today; anything a future SDK version\n// adds degrades to `unknown` instead of leaking an untyped string into core's typed parts.\nexport const toAiStreamFinishReason = (finishReason: string): AiStreamFinishReasonEnum =>\n knownFinishReasons.has(finishReason) ? (finishReason as AiStreamFinishReasonEnum) : AiStreamFinishReasonEnum.unknown;\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const withCachePoint = (message) => ({
|
|
2
|
+
...message,
|
|
3
|
+
providerOptions: {
|
|
4
|
+
...message.providerOptions,
|
|
5
|
+
bedrock: { cachePoint: { type: 'default' } },
|
|
6
|
+
},
|
|
7
|
+
});
|
|
8
|
+
// Marks the newest TWO messages as cache points so the next call in the same conversation can
|
|
9
|
+
// read everything up to here from cache. The last message alone is not enough: callers that
|
|
10
|
+
// resume a halted turn append a transport-only continuation message each round, so the boundary
|
|
11
|
+
// after it never matches again. The second-to-last boundary (the newest durable message) is the
|
|
12
|
+
// one a resumed round's prefix actually re-sends byte-identically. See toCacheableSystem for the
|
|
13
|
+
// fixed system/tools cache point this is meant to be used alongside — Bedrock's cache lookback
|
|
14
|
+
// only covers a limited number of recent content blocks, so long conversations still need both.
|
|
15
|
+
export const toCacheableMessages = (messages, caching) => {
|
|
16
|
+
if (!caching || messages.length === 0) {
|
|
17
|
+
return messages;
|
|
18
|
+
}
|
|
19
|
+
return messages.map((message, index) => (index >= messages.length - 2 ? withCachePoint(message) : message));
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=toCacheableMessages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toCacheableMessages.js","sourceRoot":"","sources":["../../../../../../src/getActionProcessor/core/ai/logic/toCacheableMessages.ts"],"names":[],"mappings":"AAEA,MAAM,cAAc,GAAG,CAAC,OAAqB,EAAgB,EAAE,CAAC,CAAC;IAC/D,GAAG,OAAO;IACV,eAAe,EAAE;QACf,GAAG,OAAO,CAAC,eAAe;QAC1B,OAAO,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;KAC7C;CACF,CAAC,CAAC;AAEH,8FAA8F;AAC9F,4FAA4F;AAC5F,gGAAgG;AAChG,gGAAgG;AAChG,iGAAiG;AACjG,+FAA+F;AAC/F,gGAAgG;AAChG,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,QAAwB,EAAE,OAA4B,EAAkB,EAAE;IAC5G,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9G,CAAC,CAAC","sourcesContent":["import type { ModelMessage } from 'ai';\n\nconst withCachePoint = (message: ModelMessage): ModelMessage => ({\n ...message,\n providerOptions: {\n ...message.providerOptions,\n bedrock: { cachePoint: { type: 'default' } },\n },\n});\n\n// Marks the newest TWO messages as cache points so the next call in the same conversation can\n// read everything up to here from cache. The last message alone is not enough: callers that\n// resume a halted turn append a transport-only continuation message each round, so the boundary\n// after it never matches again. The second-to-last boundary (the newest durable message) is the\n// one a resumed round's prefix actually re-sends byte-identically. See toCacheableSystem for the\n// fixed system/tools cache point this is meant to be used alongside — Bedrock's cache lookback\n// only covers a limited number of recent content blocks, so long conversations still need both.\nexport const toCacheableMessages = (messages: ModelMessage[], caching: boolean | undefined): ModelMessage[] => {\n if (!caching || messages.length === 0) {\n return messages;\n }\n\n return messages.map((message, index) => (index >= messages.length - 2 ? withCachePoint(message) : message));\n};\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// Bedrock only reads cache points off message objects, not the bare `system` string, so caching
|
|
2
|
+
// requires shaping system as a SystemModelMessage. @ai-sdk/amazon-bedrock (5.0.11) has no
|
|
3
|
+
// equivalent hook for the tools array, so tool definitions can't be cached this way yet.
|
|
4
|
+
export const toCacheableSystem = (system, caching) => {
|
|
5
|
+
if (!system) {
|
|
6
|
+
return undefined;
|
|
7
|
+
}
|
|
8
|
+
if (!caching) {
|
|
9
|
+
return system;
|
|
10
|
+
}
|
|
11
|
+
return {
|
|
12
|
+
role: 'system',
|
|
13
|
+
content: system,
|
|
14
|
+
providerOptions: {
|
|
15
|
+
bedrock: { cachePoint: { type: 'default' } },
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=toCacheableSystem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toCacheableSystem.js","sourceRoot":"","sources":["../../../../../../src/getActionProcessor/core/ai/logic/toCacheableSystem.ts"],"names":[],"mappings":"AAEA,gGAAgG;AAChG,0FAA0F;AAC1F,yFAAyF;AACzF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAA0B,EAAE,OAA4B,EAA2C,EAAE;IACrI,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,MAAM;QACf,eAAe,EAAE;YACf,OAAO,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;SAC7C;KACF,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import type { SystemModelMessage } from 'ai';\n\n// Bedrock only reads cache points off message objects, not the bare `system` string, so caching\n// requires shaping system as a SystemModelMessage. @ai-sdk/amazon-bedrock (5.0.11) has no\n// equivalent hook for the tools array, so tool definitions can't be cached this way yet.\nexport const toCacheableSystem = (system: string | undefined, caching: boolean | undefined): string | SystemModelMessage | undefined => {\n if (!system) {\n return undefined;\n }\n\n if (!caching) {\n return system;\n }\n\n return {\n role: 'system',\n content: system,\n providerOptions: {\n bedrock: { cachePoint: { type: 'default' } },\n },\n };\n};\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { AiMessage, QPQBinaryData } from 'quidproquo-core';
|
|
2
2
|
import type { ModelMessage } from 'ai';
|
|
3
|
-
export type AiDriveFileResolver = (drive: string, filepath: string) => Promise<QPQBinaryData>;
|
|
3
|
+
export type AiDriveFileResolver = (drive: string, filepath: string, scope?: string) => Promise<QPQBinaryData>;
|
|
4
4
|
export declare const toSdkMessages: (messages: AiMessage[], resolveDriveFile: AiDriveFileResolver) => Promise<ModelMessage[]>;
|
|
@@ -7,7 +7,7 @@ const mapFilePart = async (part, resolveDriveFile) => {
|
|
|
7
7
|
filename: part.filename,
|
|
8
8
|
};
|
|
9
9
|
}
|
|
10
|
-
const binary = await resolveDriveFile(part.drive, part.filepath);
|
|
10
|
+
const binary = await resolveDriveFile(part.drive, part.filepath, part.scope);
|
|
11
11
|
return {
|
|
12
12
|
type: 'file',
|
|
13
13
|
data: binary.base64Data,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toSdkMessages.js","sourceRoot":"","sources":["../../../../../../src/getActionProcessor/core/ai/logic/toSdkMessages.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,GAAG,KAAK,EAAE,IAAgB,EAAE,gBAAqC,EAAE,EAAE;IACpF,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,OAAO;YACL,IAAI,EAAE,MAAe;YACrB,IAAI,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;YACvB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"toSdkMessages.js","sourceRoot":"","sources":["../../../../../../src/getActionProcessor/core/ai/logic/toSdkMessages.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AiAssistantMessage,\n AiAssistantMessagePart,\n AiFilePart,\n AiMessage,\n AiToolMessage,\n AiToolResultPart,\n AiUserMessage,\n AiUserMessagePart,\n QPQBinaryData,\n} from 'quidproquo-core';\n\nimport type { AssistantModelMessage, ModelMessage, ToolModelMessage, UserModelMessage } from 'ai';\n\nexport type AiDriveFileResolver = (drive: string, filepath: string, scope?: string) => Promise<QPQBinaryData>;\n\nconst mapFilePart = async (part: AiFilePart, resolveDriveFile: AiDriveFileResolver) => {\n if ('url' in part) {\n return {\n type: 'file' as const,\n data: new URL(part.url),\n mediaType: part.mediaType,\n filename: part.filename,\n };\n }\n\n const binary = await resolveDriveFile(part.drive, part.filepath, part.scope);\n\n return {\n type: 'file' as const,\n data: binary.base64Data,\n mediaType: part.mediaType,\n filename: part.filename ?? binary.filename,\n };\n};\n\nconst mapUserPart = async (part: AiUserMessagePart, resolveDriveFile: AiDriveFileResolver) => {\n if (part.type === 'text') {\n return { type: 'text' as const, text: part.text };\n }\n\n return mapFilePart(part, resolveDriveFile);\n};\n\nconst mapAssistantPart = async (part: AiAssistantMessagePart, resolveDriveFile: AiDriveFileResolver) => {\n switch (part.type) {\n case 'text':\n return { type: 'text' as const, text: part.text };\n case 'file':\n return mapFilePart(part, resolveDriveFile);\n case 'tool-call':\n return {\n type: 'tool-call' as const,\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n input: part.input,\n };\n case 'reasoning':\n return {\n type: 'reasoning' as const,\n text: part.text,\n providerOptions: part.providerOptions as never,\n };\n }\n};\n\nconst mapToolResult = (part: AiToolResultPart) => {\n const output = part.isError\n ? typeof part.output === 'string'\n ? { type: 'error-text' as const, value: part.output }\n : { type: 'error-json' as const, value: part.output as never }\n : typeof part.output === 'string'\n ? { type: 'text' as const, value: part.output }\n : { type: 'json' as const, value: part.output as never };\n\n return {\n type: 'tool-result' as const,\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n output,\n };\n};\n\nconst mapUserMessage = async (message: AiUserMessage, resolveDriveFile: AiDriveFileResolver): Promise<UserModelMessage> => {\n if (typeof message.content === 'string') {\n return { role: 'user', content: message.content };\n }\n\n return { role: 'user', content: await Promise.all(message.content.map((part) => mapUserPart(part, resolveDriveFile))) };\n};\n\nconst mapAssistantMessage = async (message: AiAssistantMessage, resolveDriveFile: AiDriveFileResolver): Promise<AssistantModelMessage> => {\n if (typeof message.content === 'string') {\n return { role: 'assistant', content: message.content };\n }\n\n return { role: 'assistant', content: await Promise.all(message.content.map((part) => mapAssistantPart(part, resolveDriveFile))) };\n};\n\nconst mapToolMessage = (message: AiToolMessage): ToolModelMessage => ({\n role: 'tool',\n content: message.content.map(mapToolResult),\n});\n\nexport const toSdkMessages = (messages: AiMessage[], resolveDriveFile: AiDriveFileResolver): Promise<ModelMessage[]> =>\n Promise.all(\n messages.map((message) => {\n switch (message.role) {\n case 'user':\n return mapUserMessage(message, resolveDriveFile);\n case 'assistant':\n return mapAssistantMessage(message, resolveDriveFile);\n case 'tool':\n return mapToolMessage(message);\n }\n }),\n );\n"]}
|
package/lib/esm/getActionProcessor/core/event/sqs/queue/getEventMatchStoryActionProcessor.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { ActionProcessorListResolver, QueueQPQConfigSetting } from 'quidproquo-core';
|
|
2
|
-
export declare const getQueueConfigSetting: () => QueueQPQConfigSetting;
|
|
1
|
+
import { ActionProcessorListResolver, QPQConfig, QueueQPQConfigSetting } from 'quidproquo-core';
|
|
2
|
+
export declare const getQueueConfigSetting: (qpqConfig: QPQConfig) => QueueQPQConfigSetting;
|
|
3
3
|
export declare const getEventMatchStoryActionProcessor: ActionProcessorListResolver;
|