@usecortex_ai/node 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Client.d.ts +5 -11
- package/dist/Client.js +12 -63
- package/dist/api/resources/document/client/Client.d.ts +59 -0
- package/dist/api/resources/document/client/Client.js +128 -0
- package/dist/api/resources/document/client/index.d.ts +1 -0
- package/dist/api/resources/document/client/index.js +2 -0
- package/dist/api/resources/document/index.d.ts +1 -0
- package/dist/api/resources/document/index.js +17 -0
- package/dist/api/resources/embeddings/client/Client.d.ts +13 -39
- package/dist/api/resources/embeddings/client/Client.js +12 -42
- package/dist/api/resources/embeddings/client/requests/EmbeddingsCreateCollectionRequest.d.ts +1 -0
- package/dist/api/resources/embeddings/client/requests/EmbeddingsDeleteRequest.d.ts +3 -0
- package/dist/api/resources/embeddings/client/requests/EmbeddingsSearchRequest.d.ts +4 -3
- package/dist/api/resources/embeddings/client/requests/GetEmbeddingsBasedOnChunkIdsRequest.d.ts +3 -0
- package/dist/api/resources/fetch/client/Client.d.ts +3 -3
- package/dist/api/resources/fetch/client/Client.js +2 -6
- package/dist/api/resources/fetch/client/requests/FetchContentRequest.d.ts +5 -0
- package/dist/api/resources/index.d.ts +1 -0
- package/dist/api/resources/index.js +2 -1
- package/dist/api/resources/search/client/Client.d.ts +11 -38
- package/dist/api/resources/search/client/Client.js +10 -41
- package/dist/api/resources/search/client/requests/FullTextSearchRequest.d.ts +5 -0
- package/dist/api/resources/search/client/requests/QnARequest.d.ts +17 -0
- package/dist/api/resources/search/client/requests/SearchRequest.d.ts +9 -1
- package/dist/api/resources/sources/client/Client.d.ts +15 -3
- package/dist/api/resources/sources/client/Client.js +14 -6
- package/dist/api/resources/sources/client/requests/SourcesGetAllRequest.d.ts +2 -0
- package/dist/api/resources/sources/client/requests/SourcesGetSubTenantIdsRequest.d.ts +12 -0
- package/dist/api/resources/sources/client/requests/SourcesGetSubTenantIdsRequest.js +5 -0
- package/dist/api/resources/tenant/client/Client.d.ts +55 -5
- package/dist/api/resources/tenant/client/Client.js +173 -8
- package/dist/api/resources/tenant/client/requests/TenantDeleteSubTenantRequest.d.ts +14 -0
- package/dist/api/resources/tenant/client/requests/TenantDeleteSubTenantRequest.js +5 -0
- package/dist/api/resources/tenant/client/requests/TenantGetSubTenantIdsRequest.d.ts +12 -0
- package/dist/api/resources/tenant/client/requests/TenantGetSubTenantIdsRequest.js +5 -0
- package/dist/api/resources/tenant/client/requests/TenantStatsRequest.d.ts +2 -0
- package/dist/api/resources/tenant/client/requests/index.d.ts +2 -0
- package/dist/api/resources/upload/client/Client.d.ts +108 -26
- package/dist/api/resources/upload/client/Client.js +107 -41
- package/dist/api/resources/upload/client/requests/BodyBatchUpdateUploadBatchUpdatePatch.d.ts +17 -1
- package/dist/api/resources/upload/client/requests/BodyBatchUploadUploadBatchUploadPost.d.ts +16 -1
- package/dist/api/resources/upload/client/requests/BodyUpdateFileUploadUpdateDocumentPatch.d.ts +17 -1
- package/dist/api/resources/upload/client/requests/BodyUploadFilesUploadUploadDocumentPost.d.ts +16 -1
- package/dist/api/resources/upload/client/requests/EmbeddingsUpdateRequest.d.ts +5 -6
- package/dist/api/resources/upload/client/requests/EmbeddingsUploadRequest.d.ts +4 -0
- package/dist/api/resources/upload/client/requests/UploadScrapeWebpageRequest.d.ts +4 -0
- package/dist/api/resources/upload/client/requests/UploadUpdateMarkdownRequest.d.ts +23 -0
- package/dist/api/resources/upload/client/requests/UploadUpdateMarkdownRequest.js +5 -0
- package/dist/api/resources/upload/client/requests/UploadUpdateTextRequest.d.ts +23 -0
- package/dist/api/resources/upload/client/requests/UploadUpdateTextRequest.js +5 -0
- package/dist/api/resources/upload/client/requests/UploadUpdateWebpageRequest.d.ts +4 -0
- package/dist/api/resources/upload/client/requests/UploadUploadAppSourcesRequest.d.ts +3 -0
- package/dist/api/resources/upload/client/requests/UploadUploadMarkdownRequest.d.ts +20 -0
- package/dist/api/resources/upload/client/requests/UploadUploadMarkdownRequest.js +5 -0
- package/dist/api/resources/upload/client/requests/UploadUploadTextRequest.d.ts +20 -0
- package/dist/api/resources/upload/client/requests/UploadUploadTextRequest.js +5 -0
- package/dist/api/resources/upload/client/requests/UploadVerifyProcessingRequest.d.ts +2 -0
- package/dist/api/resources/upload/client/requests/index.d.ts +4 -4
- package/dist/api/resources/user/client/Client.d.ts +9 -6
- package/dist/api/resources/user/client/Client.js +8 -9
- package/dist/api/resources/user/client/requests/BodyCreateTenantUserCreateTenantPost.d.ts +1 -0
- package/dist/api/resources/userMemory/client/Client.d.ts +89 -21
- package/dist/api/resources/userMemory/client/Client.js +183 -33
- package/dist/api/resources/userMemory/client/requests/AddUserMemoryRequest.d.ts +18 -0
- package/dist/api/resources/userMemory/client/requests/AddUserMemoryRequest.js +5 -0
- package/dist/api/resources/userMemory/client/requests/GenerateUserMemoryRequest.d.ts +21 -0
- package/dist/api/resources/userMemory/client/requests/GenerateUserMemoryRequest.js +5 -0
- package/dist/api/resources/userMemory/client/requests/RetrieveUserMemoryRequest.d.ts +20 -0
- package/dist/api/resources/userMemory/client/requests/RetrieveUserMemoryRequest.js +5 -0
- package/dist/api/resources/userMemory/client/requests/UserMemoryDeleteUserMemoryRequest.d.ts +5 -3
- package/dist/api/resources/userMemory/client/requests/UserMemoryListUserMemoriesRequest.d.ts +4 -3
- package/dist/api/resources/userMemory/client/requests/index.d.ts +3 -3
- package/dist/api/types/AddUserMemoryResponse.d.ts +14 -0
- package/dist/api/types/AddUserMemoryResponse.js +5 -0
- package/dist/api/types/AppSourcesUploadData.d.ts +4 -2
- package/dist/api/types/AttachmentModel.d.ts +7 -0
- package/dist/api/types/BatchUploadData.d.ts +4 -2
- package/dist/api/types/BodyScrapeWebpageUploadScrapeWebpagePost.d.ts +0 -1
- package/dist/api/types/BodyUpdateScrapeJobUploadUpdateWebpagePatch.d.ts +0 -1
- package/dist/api/types/ContentModel.d.ts +6 -0
- package/dist/api/types/DeleteMemoryRequest.d.ts +3 -0
- package/dist/api/types/DeleteSources.d.ts +7 -0
- package/dist/api/types/DeleteSources.js +5 -0
- package/dist/api/types/DeleteSubTenantData.d.ts +15 -0
- package/dist/api/types/DeleteSubTenantData.js +5 -0
- package/dist/api/types/DeleteUserMemoryResponse.d.ts +12 -0
- package/dist/api/types/DeleteUserMemoryResponse.js +5 -0
- package/dist/api/types/EmbeddingsCreateCollectionData.d.ts +6 -2
- package/dist/api/types/EmbeddingsDeleteData.d.ts +6 -2
- package/dist/api/types/EmbeddingsGetData.d.ts +6 -2
- package/dist/api/types/EmbeddingsSearchData.d.ts +6 -2
- package/dist/api/types/ErrorResponse.d.ts +0 -1
- package/dist/api/types/FetchContentData.d.ts +6 -3
- package/dist/api/types/FileUploadResult.d.ts +2 -0
- package/dist/api/types/GenerateUserMemoryResponse.d.ts +13 -0
- package/dist/api/types/GenerateUserMemoryResponse.js +5 -0
- package/dist/api/types/ListSourcesResponse.d.ts +4 -1
- package/dist/api/types/ListUserMemoriesResponse.d.ts +13 -0
- package/dist/api/types/ListUserMemoriesResponse.js +5 -0
- package/dist/api/types/MarkdownUploadRequest.d.ts +12 -0
- package/dist/api/types/ProcessingStatus.d.ts +5 -2
- package/dist/api/types/Relations.d.ts +2 -2
- package/dist/api/types/RetrieveUserMemoryResponse.d.ts +13 -0
- package/dist/api/types/RetrieveUserMemoryResponse.js +5 -0
- package/dist/api/types/SearchChunk.d.ts +13 -7
- package/dist/api/types/SingleUploadData.d.ts +4 -2
- package/dist/api/types/Source.d.ts +9 -9
- package/dist/api/types/SourceContent.d.ts +2 -2
- package/dist/api/types/SourceModel.d.ts +23 -2
- package/dist/api/types/SubTenantIdsData.d.ts +15 -0
- package/dist/api/types/SubTenantIdsData.js +5 -0
- package/dist/api/types/TenantCreateData.d.ts +6 -2
- package/dist/api/types/TenantStats.d.ts +8 -3
- package/dist/api/types/UserMemory.d.ts +12 -0
- package/dist/api/types/UserMemory.js +5 -0
- package/dist/api/types/index.d.ts +9 -1
- package/dist/api/types/index.js +9 -1
- package/package.json +1 -1
|
@@ -44,10 +44,16 @@ const CortexAI = __importStar(require("../../../index.js"));
|
|
|
44
44
|
const headers_js_1 = require("../../../../core/headers.js");
|
|
45
45
|
const errors = __importStar(require("../../../../errors/index.js"));
|
|
46
46
|
class Upload {
|
|
47
|
-
constructor(_options
|
|
47
|
+
constructor(_options) {
|
|
48
48
|
this._options = _options;
|
|
49
49
|
}
|
|
50
50
|
/**
|
|
51
|
+
* Upload multiple documents simultaneously for efficient bulk processing.
|
|
52
|
+
*
|
|
53
|
+
* This endpoint allows you to upload several files at once, which is ideal for large document collections or periodic data imports. Each file gets processed asynchronously, and you can track the progress of individual files using their returned file IDs.
|
|
54
|
+
*
|
|
55
|
+
* The system automatically handles file parsing, content extraction, and indexing across all uploaded documents. You'll receive confirmation once all files are queued for processing.
|
|
56
|
+
*
|
|
51
57
|
* @param {CortexAI.BodyBatchUploadUploadBatchUploadPost} request
|
|
52
58
|
* @param {Upload.RequestOptions} requestOptions - Request-specific configuration.
|
|
53
59
|
*
|
|
@@ -86,9 +92,6 @@ class Upload {
|
|
|
86
92
|
if (request.document_metadata != null) {
|
|
87
93
|
_request.append("document_metadata", request.document_metadata);
|
|
88
94
|
}
|
|
89
|
-
if (request.relations != null) {
|
|
90
|
-
_request.append("relations", request.relations);
|
|
91
|
-
}
|
|
92
95
|
const _maybeEncodedRequest = await _request.getRequest();
|
|
93
96
|
let _headers = (0, headers_js_1.mergeHeaders)((_a = this._options) === null || _a === void 0 ? void 0 : _a.headers, (0, headers_js_1.mergeOnlyDefinedHeaders)(Object.assign({ Authorization: await this._getAuthorizationHeader() }, _maybeEncodedRequest.headers)), requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.headers);
|
|
94
97
|
const _response = await core.fetcher({
|
|
@@ -147,6 +150,12 @@ class Upload {
|
|
|
147
150
|
}
|
|
148
151
|
}
|
|
149
152
|
/**
|
|
153
|
+
* Update multiple existing documents with new content and metadata.
|
|
154
|
+
*
|
|
155
|
+
* Use this endpoint when you need to replace or modify several documents that are already in your knowledge base. Each file must correspond to an existing source ID, ensuring that updates are applied to the correct documents.
|
|
156
|
+
*
|
|
157
|
+
* The system processes updates asynchronously, allowing you to continue working while your documents are re-indexed. Track the progress using the returned file IDs to know when updates are complete.
|
|
158
|
+
*
|
|
150
159
|
* @param {CortexAI.BodyBatchUpdateUploadBatchUpdatePatch} request
|
|
151
160
|
* @param {Upload.RequestOptions} requestOptions - Request-specific configuration.
|
|
152
161
|
*
|
|
@@ -190,9 +199,6 @@ class Upload {
|
|
|
190
199
|
if (request.document_metadata != null) {
|
|
191
200
|
_request.append("document_metadata", request.document_metadata);
|
|
192
201
|
}
|
|
193
|
-
if (request.relations != null) {
|
|
194
|
-
_request.append("relations", request.relations);
|
|
195
|
-
}
|
|
196
202
|
const _maybeEncodedRequest = await _request.getRequest();
|
|
197
203
|
let _headers = (0, headers_js_1.mergeHeaders)((_a = this._options) === null || _a === void 0 ? void 0 : _a.headers, (0, headers_js_1.mergeOnlyDefinedHeaders)(Object.assign({ Authorization: await this._getAuthorizationHeader() }, _maybeEncodedRequest.headers)), requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.headers);
|
|
198
204
|
const _response = await core.fetcher({
|
|
@@ -251,6 +257,12 @@ class Upload {
|
|
|
251
257
|
}
|
|
252
258
|
}
|
|
253
259
|
/**
|
|
260
|
+
* Upload a single document for processing and indexing into your knowledge base.
|
|
261
|
+
*
|
|
262
|
+
* This endpoint accepts documents in various formats and processes them for search and retrieval. You can include custom metadata to help organize and categorize your content.
|
|
263
|
+
*
|
|
264
|
+
* The system extracts text content, processes it asynchronously, and makes it available for search queries. You can track the processing status using the returned file ID.
|
|
265
|
+
*
|
|
254
266
|
* @param {CortexAI.BodyUploadFilesUploadUploadDocumentPost} request
|
|
255
267
|
* @param {Upload.RequestOptions} requestOptions - Request-specific configuration.
|
|
256
268
|
*
|
|
@@ -287,9 +299,6 @@ class Upload {
|
|
|
287
299
|
if (request.document_metadata != null) {
|
|
288
300
|
_request.append("document_metadata", request.document_metadata);
|
|
289
301
|
}
|
|
290
|
-
if (request.relations != null) {
|
|
291
|
-
_request.append("relations", request.relations);
|
|
292
|
-
}
|
|
293
302
|
const _maybeEncodedRequest = await _request.getRequest();
|
|
294
303
|
let _headers = (0, headers_js_1.mergeHeaders)((_a = this._options) === null || _a === void 0 ? void 0 : _a.headers, (0, headers_js_1.mergeOnlyDefinedHeaders)(Object.assign({ Authorization: await this._getAuthorizationHeader() }, _maybeEncodedRequest.headers)), requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.headers);
|
|
295
304
|
const _response = await core.fetcher({
|
|
@@ -348,6 +357,12 @@ class Upload {
|
|
|
348
357
|
}
|
|
349
358
|
}
|
|
350
359
|
/**
|
|
360
|
+
* Replace an existing document with updated content.
|
|
361
|
+
*
|
|
362
|
+
* This endpoint allows you to update a specific document that's already in your knowledge base. Provide the source ID of the document you want to modify, along with the new file content.
|
|
363
|
+
*
|
|
364
|
+
* The system will process your update asynchronously and re-index the document with the new content. You can monitor the progress using the returned file ID.
|
|
365
|
+
*
|
|
351
366
|
* @param {CortexAI.BodyUpdateFileUploadUpdateDocumentPatch} request
|
|
352
367
|
* @param {Upload.RequestOptions} requestOptions - Request-specific configuration.
|
|
353
368
|
*
|
|
@@ -386,9 +401,6 @@ class Upload {
|
|
|
386
401
|
if (request.document_metadata != null) {
|
|
387
402
|
_request.append("document_metadata", request.document_metadata);
|
|
388
403
|
}
|
|
389
|
-
if (request.relations != null) {
|
|
390
|
-
_request.append("relations", request.relations);
|
|
391
|
-
}
|
|
392
404
|
const _maybeEncodedRequest = await _request.getRequest();
|
|
393
405
|
let _headers = (0, headers_js_1.mergeHeaders)((_a = this._options) === null || _a === void 0 ? void 0 : _a.headers, (0, headers_js_1.mergeOnlyDefinedHeaders)(Object.assign({ Authorization: await this._getAuthorizationHeader() }, _maybeEncodedRequest.headers)), requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.headers);
|
|
394
406
|
const _response = await core.fetcher({
|
|
@@ -447,6 +459,12 @@ class Upload {
|
|
|
447
459
|
}
|
|
448
460
|
}
|
|
449
461
|
/**
|
|
462
|
+
* Upload structured data from applications or APIs for indexing.
|
|
463
|
+
*
|
|
464
|
+
* This endpoint is designed for importing data from applications. If you are specifically using Cortex to provide search to an application, you should prefer this endpoint. It accepts structured source objects and allows you to clearly define contents of attachments
|
|
465
|
+
*
|
|
466
|
+
* The system processes each source asynchronously and makes the content available for search and retrieval. Use this when you need to integrate search and indexing from data in your applications into your knowledge base.
|
|
467
|
+
*
|
|
450
468
|
* @param {CortexAI.UploadUploadAppSourcesRequest} request
|
|
451
469
|
* @param {Upload.RequestOptions} requestOptions - Request-specific configuration.
|
|
452
470
|
*
|
|
@@ -532,10 +550,13 @@ class Upload {
|
|
|
532
550
|
}
|
|
533
551
|
}
|
|
534
552
|
/**
|
|
535
|
-
* Upload markdown content
|
|
536
|
-
*
|
|
553
|
+
* Upload text or markdown content directly for processing.
|
|
554
|
+
*
|
|
555
|
+
* This endpoint accepts plain text or markdown-formatted content that you want to add to your knowledge base. It's perfect for notes, documentation, articles, or any text-based content you want to make searchable.
|
|
556
|
+
*
|
|
557
|
+
* You can include custom metadata to help organize and categorize your content. You can track the processing status using the returned file ID.
|
|
537
558
|
*
|
|
538
|
-
* @param {CortexAI.
|
|
559
|
+
* @param {CortexAI.UploadUploadMarkdownRequest} request
|
|
539
560
|
* @param {Upload.RequestOptions} requestOptions - Request-specific configuration.
|
|
540
561
|
*
|
|
541
562
|
* @throws {@link CortexAI.BadRequestError}
|
|
@@ -549,7 +570,7 @@ class Upload {
|
|
|
549
570
|
* @example
|
|
550
571
|
* await client.upload.uploadMarkdown({
|
|
551
572
|
* tenant_id: "tenant_id",
|
|
552
|
-
*
|
|
573
|
+
* body: {
|
|
553
574
|
* content: "content"
|
|
554
575
|
* }
|
|
555
576
|
* })
|
|
@@ -559,7 +580,7 @@ class Upload {
|
|
|
559
580
|
}
|
|
560
581
|
async __uploadMarkdown(request, requestOptions) {
|
|
561
582
|
var _a, _b, _c;
|
|
562
|
-
const { tenant_id: tenantId, sub_tenant_id: subTenantId
|
|
583
|
+
const { tenant_id: tenantId, sub_tenant_id: subTenantId, body: _body } = request;
|
|
563
584
|
const _queryParams = {};
|
|
564
585
|
_queryParams["tenant_id"] = tenantId;
|
|
565
586
|
if (subTenantId != null) {
|
|
@@ -622,10 +643,13 @@ class Upload {
|
|
|
622
643
|
}
|
|
623
644
|
}
|
|
624
645
|
/**
|
|
625
|
-
* Upload markdown content
|
|
626
|
-
*
|
|
646
|
+
* Upload text or markdown content directly for processing.
|
|
647
|
+
*
|
|
648
|
+
* This endpoint accepts plain text or markdown-formatted content that you want to add to your knowledge base. It's perfect for notes, documentation, articles, or any text-based content you want to make searchable.
|
|
649
|
+
*
|
|
650
|
+
* You can include custom metadata to help organize and categorize your content. You can track the processing status using the returned file ID.
|
|
627
651
|
*
|
|
628
|
-
* @param {CortexAI.
|
|
652
|
+
* @param {CortexAI.UploadUploadTextRequest} request
|
|
629
653
|
* @param {Upload.RequestOptions} requestOptions - Request-specific configuration.
|
|
630
654
|
*
|
|
631
655
|
* @throws {@link CortexAI.BadRequestError}
|
|
@@ -639,7 +663,7 @@ class Upload {
|
|
|
639
663
|
* @example
|
|
640
664
|
* await client.upload.uploadText({
|
|
641
665
|
* tenant_id: "tenant_id",
|
|
642
|
-
*
|
|
666
|
+
* body: {
|
|
643
667
|
* content: "content"
|
|
644
668
|
* }
|
|
645
669
|
* })
|
|
@@ -649,7 +673,7 @@ class Upload {
|
|
|
649
673
|
}
|
|
650
674
|
async __uploadText(request, requestOptions) {
|
|
651
675
|
var _a, _b, _c;
|
|
652
|
-
const { tenant_id: tenantId, sub_tenant_id: subTenantId
|
|
676
|
+
const { tenant_id: tenantId, sub_tenant_id: subTenantId, body: _body } = request;
|
|
653
677
|
const _queryParams = {};
|
|
654
678
|
_queryParams["tenant_id"] = tenantId;
|
|
655
679
|
if (subTenantId != null) {
|
|
@@ -712,7 +736,13 @@ class Upload {
|
|
|
712
736
|
}
|
|
713
737
|
}
|
|
714
738
|
/**
|
|
715
|
-
*
|
|
739
|
+
* Update existing text or markdown content with new information.
|
|
740
|
+
*
|
|
741
|
+
* This endpoint allows you to modify text or markdown content that's already in your knowledge base. Provide the source ID of the content you want to update, along with the new text.
|
|
742
|
+
*
|
|
743
|
+
* The system will reprocess and re-index the updated content asynchronously. Use this when you need to correct information, add details, or refresh existing documentation.
|
|
744
|
+
*
|
|
745
|
+
* @param {CortexAI.UploadUpdateMarkdownRequest} request
|
|
716
746
|
* @param {Upload.RequestOptions} requestOptions - Request-specific configuration.
|
|
717
747
|
*
|
|
718
748
|
* @throws {@link CortexAI.BadRequestError}
|
|
@@ -727,7 +757,7 @@ class Upload {
|
|
|
727
757
|
* await client.upload.updateMarkdown({
|
|
728
758
|
* source_id: "source_id",
|
|
729
759
|
* tenant_id: "tenant_id",
|
|
730
|
-
*
|
|
760
|
+
* body: {
|
|
731
761
|
* content: "content"
|
|
732
762
|
* }
|
|
733
763
|
* })
|
|
@@ -737,7 +767,7 @@ class Upload {
|
|
|
737
767
|
}
|
|
738
768
|
async __updateMarkdown(request, requestOptions) {
|
|
739
769
|
var _a, _b, _c;
|
|
740
|
-
const { source_id: sourceId, tenant_id: tenantId, sub_tenant_id: subTenantId
|
|
770
|
+
const { source_id: sourceId, tenant_id: tenantId, sub_tenant_id: subTenantId, body: _body } = request;
|
|
741
771
|
const _queryParams = {};
|
|
742
772
|
_queryParams["source_id"] = sourceId;
|
|
743
773
|
_queryParams["tenant_id"] = tenantId;
|
|
@@ -801,7 +831,13 @@ class Upload {
|
|
|
801
831
|
}
|
|
802
832
|
}
|
|
803
833
|
/**
|
|
804
|
-
*
|
|
834
|
+
* Update existing text or markdown content with new information.
|
|
835
|
+
*
|
|
836
|
+
* This endpoint allows you to modify text or markdown content that's already in your knowledge base. Provide the source ID of the content you want to update, along with the new text.
|
|
837
|
+
*
|
|
838
|
+
* The system will reprocess and re-index the updated content asynchronously. Use this when you need to correct information, add details, or refresh existing documentation.
|
|
839
|
+
*
|
|
840
|
+
* @param {CortexAI.UploadUpdateTextRequest} request
|
|
805
841
|
* @param {Upload.RequestOptions} requestOptions - Request-specific configuration.
|
|
806
842
|
*
|
|
807
843
|
* @throws {@link CortexAI.BadRequestError}
|
|
@@ -816,7 +852,7 @@ class Upload {
|
|
|
816
852
|
* await client.upload.updateText({
|
|
817
853
|
* source_id: "source_id",
|
|
818
854
|
* tenant_id: "tenant_id",
|
|
819
|
-
*
|
|
855
|
+
* body: {
|
|
820
856
|
* content: "content"
|
|
821
857
|
* }
|
|
822
858
|
* })
|
|
@@ -826,7 +862,7 @@ class Upload {
|
|
|
826
862
|
}
|
|
827
863
|
async __updateText(request, requestOptions) {
|
|
828
864
|
var _a, _b, _c;
|
|
829
|
-
const { source_id: sourceId, tenant_id: tenantId, sub_tenant_id: subTenantId
|
|
865
|
+
const { source_id: sourceId, tenant_id: tenantId, sub_tenant_id: subTenantId, body: _body } = request;
|
|
830
866
|
const _queryParams = {};
|
|
831
867
|
_queryParams["source_id"] = sourceId;
|
|
832
868
|
_queryParams["tenant_id"] = tenantId;
|
|
@@ -890,6 +926,12 @@ class Upload {
|
|
|
890
926
|
}
|
|
891
927
|
}
|
|
892
928
|
/**
|
|
929
|
+
* Upload pre-computed embeddings for advanced similarity search.
|
|
930
|
+
*
|
|
931
|
+
* This endpoint accepts vector embeddings that you've generated externally, allowing you to integrate with custom embedding models or existing vector databases. The embeddings represent chunks of your content as numerical vectors.
|
|
932
|
+
*
|
|
933
|
+
* The system stores these embeddings and makes them available for semantic search and similarity matching. Use this when you want to leverage specialized embedding models or have existing vector representations.
|
|
934
|
+
*
|
|
893
935
|
* @param {CortexAI.EmbeddingsUploadRequest} request
|
|
894
936
|
* @param {Upload.RequestOptions} requestOptions - Request-specific configuration.
|
|
895
937
|
*
|
|
@@ -975,6 +1017,12 @@ class Upload {
|
|
|
975
1017
|
}
|
|
976
1018
|
}
|
|
977
1019
|
/**
|
|
1020
|
+
* Update existing embeddings with new vector representations.
|
|
1021
|
+
*
|
|
1022
|
+
* This endpoint allows you to modify embeddings that are already stored in your knowledge base. Provide updated vector representations for specific chunks of content, identified by their chunk IDs.
|
|
1023
|
+
*
|
|
1024
|
+
* The system will replace the existing embeddings with your new ones, ensuring that similarity searches reflect the most current vector representations. Use this when you need to update embeddings due to model improvements or content changes.
|
|
1025
|
+
*
|
|
978
1026
|
* @param {CortexAI.EmbeddingsUpdateRequest} request
|
|
979
1027
|
* @param {Upload.RequestOptions} requestOptions - Request-specific configuration.
|
|
980
1028
|
*
|
|
@@ -988,10 +1036,7 @@ class Upload {
|
|
|
988
1036
|
*
|
|
989
1037
|
* @example
|
|
990
1038
|
* await client.upload.updateEmbeddings({
|
|
991
|
-
* tenant_id: "tenant_id"
|
|
992
|
-
* embeddings: {
|
|
993
|
-
* "key": [1.1]
|
|
994
|
-
* }
|
|
1039
|
+
* tenant_id: "tenant_id"
|
|
995
1040
|
* })
|
|
996
1041
|
*/
|
|
997
1042
|
updateEmbeddings(request, requestOptions) {
|
|
@@ -1062,6 +1107,12 @@ class Upload {
|
|
|
1062
1107
|
}
|
|
1063
1108
|
}
|
|
1064
1109
|
/**
|
|
1110
|
+
* Extract and index content from web pages automatically.
|
|
1111
|
+
*
|
|
1112
|
+
* This endpoint initiates web scraping for the specified URL, extracting the main content, text, and structure from the webpage. It's perfect for capturing articles, documentation, or any web content you want to include in your knowledge base.
|
|
1113
|
+
*
|
|
1114
|
+
* The system processes the webpage content asynchronously, cleaning and structuring the information for optimal search and retrieval. Use this when you need to add web content without manual copying and pasting.
|
|
1115
|
+
*
|
|
1065
1116
|
* @param {CortexAI.UploadScrapeWebpageRequest} request
|
|
1066
1117
|
* @param {Upload.RequestOptions} requestOptions - Request-specific configuration.
|
|
1067
1118
|
*
|
|
@@ -1152,6 +1203,12 @@ class Upload {
|
|
|
1152
1203
|
}
|
|
1153
1204
|
}
|
|
1154
1205
|
/**
|
|
1206
|
+
* Update web scraping content with fresh data from the source URL.
|
|
1207
|
+
*
|
|
1208
|
+
* This endpoint refreshes the content for an existing web scraping job. Provide the source ID of the webpage content you want to update, and the system will re-scrape the URL to capture any changes.
|
|
1209
|
+
*
|
|
1210
|
+
* The updated content gets processed asynchronously and re-indexed in your knowledge base. Use this to keep web content current when the source pages are frequently updated.
|
|
1211
|
+
*
|
|
1155
1212
|
* @param {CortexAI.UploadUpdateWebpageRequest} request
|
|
1156
1213
|
* @param {Upload.RequestOptions} requestOptions - Request-specific configuration.
|
|
1157
1214
|
*
|
|
@@ -1241,6 +1298,12 @@ class Upload {
|
|
|
1241
1298
|
}
|
|
1242
1299
|
}
|
|
1243
1300
|
/**
|
|
1301
|
+
* Remove documents and content from your knowledge base.
|
|
1302
|
+
*
|
|
1303
|
+
* This endpoint permanently deletes the specified sources from your knowledge base. Once deleted, the content will no longer be available for search or retrieval.
|
|
1304
|
+
*
|
|
1305
|
+
* Use this carefully as the action cannot be undone. The system will confirm successful deletion of each source ID you specify.
|
|
1306
|
+
*
|
|
1244
1307
|
* @param {CortexAI.DeleteMemoryRequest} request
|
|
1245
1308
|
* @param {Upload.RequestOptions} requestOptions - Request-specific configuration.
|
|
1246
1309
|
*
|
|
@@ -1302,6 +1365,12 @@ class Upload {
|
|
|
1302
1365
|
}
|
|
1303
1366
|
}
|
|
1304
1367
|
/**
|
|
1368
|
+
* Remove documents and content from your knowledge base.
|
|
1369
|
+
*
|
|
1370
|
+
* This endpoint permanently deletes the specified sources from your knowledge base. Once deleted, the content will no longer be available for search or retrieval.
|
|
1371
|
+
*
|
|
1372
|
+
* Use this carefully as the action cannot be undone. The system will confirm successful deletion of each source ID you specify.
|
|
1373
|
+
*
|
|
1305
1374
|
* @param {CortexAI.DeleteMemoryRequest} request
|
|
1306
1375
|
* @param {Upload.RequestOptions} requestOptions - Request-specific configuration.
|
|
1307
1376
|
*
|
|
@@ -1363,10 +1432,11 @@ class Upload {
|
|
|
1363
1432
|
}
|
|
1364
1433
|
}
|
|
1365
1434
|
/**
|
|
1366
|
-
*
|
|
1435
|
+
* Check the current processing status of your uploaded content.
|
|
1436
|
+
*
|
|
1437
|
+
* This endpoint allows you to monitor the progress of documents, text, or other content you've uploaded. Simply provide the file ID to see whether processing is complete, still in progress, or if any errors occurred.
|
|
1367
1438
|
*
|
|
1368
|
-
*
|
|
1369
|
-
* ProcessingStatusResponse: Processing status information
|
|
1439
|
+
* Use this to determine when your content is ready for search and retrieval, or to troubleshoot any processing issues.
|
|
1370
1440
|
*
|
|
1371
1441
|
* @param {CortexAI.UploadVerifyProcessingRequest} request
|
|
1372
1442
|
* @param {Upload.RequestOptions} requestOptions - Request-specific configuration.
|
|
@@ -1449,11 +1519,7 @@ class Upload {
|
|
|
1449
1519
|
}
|
|
1450
1520
|
}
|
|
1451
1521
|
async _getAuthorizationHeader() {
|
|
1452
|
-
|
|
1453
|
-
if (bearer != null) {
|
|
1454
|
-
return `Bearer ${bearer}`;
|
|
1455
|
-
}
|
|
1456
|
-
return undefined;
|
|
1522
|
+
return `Bearer ${await core.Supplier.get(this._options.token)}`;
|
|
1457
1523
|
}
|
|
1458
1524
|
}
|
|
1459
1525
|
exports.Upload = Upload;
|
package/dist/api/resources/upload/client/requests/BodyBatchUpdateUploadBatchUpdatePatch.d.ts
CHANGED
|
@@ -10,11 +10,27 @@ import * as core from "../../../../../core/index.js";
|
|
|
10
10
|
* }
|
|
11
11
|
*/
|
|
12
12
|
export interface BodyBatchUpdateUploadBatchUpdatePatch {
|
|
13
|
+
/** Unique identifier for the tenant/organization */
|
|
13
14
|
tenant_id: string;
|
|
15
|
+
/** Optional sub-tenant identifier for organizing data within a tenant. If not provided, defaults to tenant_id */
|
|
14
16
|
sub_tenant_id?: string;
|
|
17
|
+
/** The document file to upload (e.g., PDF, DOCX, TXT) */
|
|
15
18
|
files: core.file.Uploadable.FileLike[];
|
|
19
|
+
/** List of source IDs corresponding to the files being updated */
|
|
16
20
|
source_ids?: string[];
|
|
21
|
+
/**
|
|
22
|
+
* JSON string containing tenant-level document metadata (e.g., department, compliance_tag)
|
|
23
|
+
*
|
|
24
|
+
* Example: > "{"department":"Finance","compliance_tag":"GDPR"}"
|
|
25
|
+
*
|
|
26
|
+
*/
|
|
17
27
|
tenant_metadata?: string;
|
|
28
|
+
/**
|
|
29
|
+
* JSON string containing document-specific metadata (e.g., title, author, file_id). If file_id is not provided, the system will generate an ID automatically.
|
|
30
|
+
*
|
|
31
|
+
* Example: > "{"title":"Q1 Report.pdf","author":"Alice Smith","file_id":"custom_file_123"}"
|
|
32
|
+
*
|
|
33
|
+
*
|
|
34
|
+
*/
|
|
18
35
|
document_metadata?: string;
|
|
19
|
-
relations?: string;
|
|
20
36
|
}
|
|
@@ -10,10 +10,25 @@ import * as core from "../../../../../core/index.js";
|
|
|
10
10
|
* }
|
|
11
11
|
*/
|
|
12
12
|
export interface BodyBatchUploadUploadBatchUploadPost {
|
|
13
|
+
/** Unique identifier for the tenant/organization */
|
|
13
14
|
tenant_id: string;
|
|
15
|
+
/** Optional sub-tenant identifier for organizing data within a tenant. If not provided, defaults to tenant_id */
|
|
14
16
|
sub_tenant_id?: string;
|
|
17
|
+
/** The document file to upload (e.g., PDF, DOCX, TXT) */
|
|
15
18
|
files: core.file.Uploadable.FileLike[];
|
|
19
|
+
/**
|
|
20
|
+
* JSON string containing tenant-level document metadata (e.g., department, compliance_tag)
|
|
21
|
+
*
|
|
22
|
+
* Example: > "{"department":"Finance","compliance_tag":"GDPR"}"
|
|
23
|
+
*
|
|
24
|
+
*/
|
|
16
25
|
tenant_metadata?: string;
|
|
26
|
+
/**
|
|
27
|
+
* JSON string containing document-specific metadata (e.g., title, author, file_id). If file_id is not provided, the system will generate an ID automatically.
|
|
28
|
+
*
|
|
29
|
+
* Example: > "{"title":"Q1 Report.pdf","author":"Alice Smith","file_id":"custom_file_123"}"
|
|
30
|
+
*
|
|
31
|
+
*
|
|
32
|
+
*/
|
|
17
33
|
document_metadata?: string;
|
|
18
|
-
relations?: string;
|
|
19
34
|
}
|
package/dist/api/resources/upload/client/requests/BodyUpdateFileUploadUpdateDocumentPatch.d.ts
CHANGED
|
@@ -11,11 +11,27 @@ import * as core from "../../../../../core/index.js";
|
|
|
11
11
|
* }
|
|
12
12
|
*/
|
|
13
13
|
export interface BodyUpdateFileUploadUpdateDocumentPatch {
|
|
14
|
+
/** The source ID of the document to update */
|
|
14
15
|
source_id: string;
|
|
16
|
+
/** Unique identifier for the tenant/organization */
|
|
15
17
|
tenant_id: string;
|
|
18
|
+
/** Optional sub-tenant identifier for organizing data within a tenant. If not provided, defaults to tenant_id */
|
|
16
19
|
sub_tenant_id?: string;
|
|
20
|
+
/** The document file to upload (e.g., PDF, DOCX, TXT) */
|
|
17
21
|
file: core.file.Uploadable.FileLike;
|
|
22
|
+
/**
|
|
23
|
+
* JSON string containing tenant-level document metadata (e.g., department, compliance_tag)
|
|
24
|
+
*
|
|
25
|
+
* Example: > "{"department":"Finance","compliance_tag":"GDPR"}"
|
|
26
|
+
*
|
|
27
|
+
*/
|
|
18
28
|
tenant_metadata?: string;
|
|
29
|
+
/**
|
|
30
|
+
* JSON string containing document-specific metadata (e.g., title, author, file_id). If file_id is not provided, the system will generate an ID automatically.
|
|
31
|
+
*
|
|
32
|
+
* Example: > "{"title":"Q1 Report.pdf","author":"Alice Smith","file_id":"custom_file_123"}"
|
|
33
|
+
*
|
|
34
|
+
*
|
|
35
|
+
*/
|
|
19
36
|
document_metadata?: string;
|
|
20
|
-
relations?: string;
|
|
21
37
|
}
|
package/dist/api/resources/upload/client/requests/BodyUploadFilesUploadUploadDocumentPost.d.ts
CHANGED
|
@@ -10,10 +10,25 @@ import * as core from "../../../../../core/index.js";
|
|
|
10
10
|
* }
|
|
11
11
|
*/
|
|
12
12
|
export interface BodyUploadFilesUploadUploadDocumentPost {
|
|
13
|
+
/** Unique identifier for the tenant/organization */
|
|
13
14
|
tenant_id: string;
|
|
15
|
+
/** Optional sub-tenant identifier for organizing data within a tenant. If not provided, defaults to tenant_id */
|
|
14
16
|
sub_tenant_id?: string;
|
|
17
|
+
/** The document file to upload (e.g., PDF, DOCX, TXT) */
|
|
15
18
|
file: core.file.Uploadable.FileLike;
|
|
19
|
+
/**
|
|
20
|
+
* JSON string containing tenant-level document metadata (e.g., department, compliance_tag)
|
|
21
|
+
*
|
|
22
|
+
* Example: > "{"department":"Finance","compliance_tag":"GDPR"}"
|
|
23
|
+
*
|
|
24
|
+
*/
|
|
16
25
|
tenant_metadata?: string;
|
|
26
|
+
/**
|
|
27
|
+
* JSON string containing document-specific metadata (e.g., title, author, file_id). If file_id is not provided, the system will generate an ID automatically.
|
|
28
|
+
*
|
|
29
|
+
* Example: > "{"title":"Q1 Report.pdf","author":"Alice Smith","file_id":"custom_file_123"}"
|
|
30
|
+
*
|
|
31
|
+
*
|
|
32
|
+
*/
|
|
17
33
|
document_metadata?: string;
|
|
18
|
-
relations?: string;
|
|
19
34
|
}
|
|
@@ -4,15 +4,14 @@
|
|
|
4
4
|
/**
|
|
5
5
|
* @example
|
|
6
6
|
* {
|
|
7
|
-
* tenant_id: "tenant_id"
|
|
8
|
-
* embeddings: {
|
|
9
|
-
* "key": [1.1]
|
|
10
|
-
* }
|
|
7
|
+
* tenant_id: "tenant_id"
|
|
11
8
|
* }
|
|
12
9
|
*/
|
|
13
10
|
export interface EmbeddingsUpdateRequest {
|
|
11
|
+
/** Unique identifier for the tenant/organization */
|
|
14
12
|
tenant_id: string;
|
|
13
|
+
/** Optional sub-tenant identifier for organizing data within a tenant. If not provided, defaults to tenant_id */
|
|
15
14
|
sub_tenant_id?: string;
|
|
16
|
-
/**
|
|
17
|
-
embeddings
|
|
15
|
+
/** The embeddings of source you want to index */
|
|
16
|
+
embeddings?: Record<string, number[]>;
|
|
18
17
|
}
|
|
@@ -9,8 +9,12 @@
|
|
|
9
9
|
* }
|
|
10
10
|
*/
|
|
11
11
|
export interface EmbeddingsUploadRequest {
|
|
12
|
+
/** Unique identifier for the tenant/organization */
|
|
12
13
|
tenant_id: string;
|
|
14
|
+
/** Optional sub-tenant identifier for organizing data within a tenant. If not provided, defaults to tenant_id */
|
|
13
15
|
sub_tenant_id?: string;
|
|
16
|
+
/** The embeddings of source you want to index */
|
|
14
17
|
embeddings: number[][];
|
|
18
|
+
/** The Source ID of the target source you want to index */
|
|
15
19
|
file_id?: string;
|
|
16
20
|
}
|
|
@@ -11,9 +11,13 @@ import * as CortexAI from "../../../../index.js";
|
|
|
11
11
|
* }
|
|
12
12
|
*/
|
|
13
13
|
export interface UploadScrapeWebpageRequest {
|
|
14
|
+
/** The URL of the webpage to scrape and index */
|
|
14
15
|
web_url: string;
|
|
16
|
+
/** Unique identifier for the tenant/organization */
|
|
15
17
|
tenant_id: string;
|
|
18
|
+
/** Optional sub-tenant identifier for organizing data within a tenant. If not provided, defaults to tenant_id */
|
|
16
19
|
sub_tenant_id?: string;
|
|
20
|
+
/** Optional custom file ID for the scraped content. If not provided, a unique ID will be generated */
|
|
17
21
|
file_id?: string;
|
|
18
22
|
body: CortexAI.BodyScrapeWebpageUploadScrapeWebpagePost;
|
|
19
23
|
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file was auto-generated by Fern from our API Definition.
|
|
3
|
+
*/
|
|
4
|
+
import * as CortexAI from "../../../../index.js";
|
|
5
|
+
/**
|
|
6
|
+
* @example
|
|
7
|
+
* {
|
|
8
|
+
* source_id: "source_id",
|
|
9
|
+
* tenant_id: "tenant_id",
|
|
10
|
+
* body: {
|
|
11
|
+
* content: "content"
|
|
12
|
+
* }
|
|
13
|
+
* }
|
|
14
|
+
*/
|
|
15
|
+
export interface UploadUpdateMarkdownRequest {
|
|
16
|
+
/** The source ID of the document to update */
|
|
17
|
+
source_id: string;
|
|
18
|
+
/** Unique identifier for the tenant/organization */
|
|
19
|
+
tenant_id: string;
|
|
20
|
+
/** Optional sub-tenant identifier for organizing data within a tenant. If not provided, defaults to tenant_id */
|
|
21
|
+
sub_tenant_id?: string;
|
|
22
|
+
body: CortexAI.MarkdownUploadRequest;
|
|
23
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file was auto-generated by Fern from our API Definition.
|
|
3
|
+
*/
|
|
4
|
+
import * as CortexAI from "../../../../index.js";
|
|
5
|
+
/**
|
|
6
|
+
* @example
|
|
7
|
+
* {
|
|
8
|
+
* source_id: "source_id",
|
|
9
|
+
* tenant_id: "tenant_id",
|
|
10
|
+
* body: {
|
|
11
|
+
* content: "content"
|
|
12
|
+
* }
|
|
13
|
+
* }
|
|
14
|
+
*/
|
|
15
|
+
export interface UploadUpdateTextRequest {
|
|
16
|
+
/** The source ID of the document to update */
|
|
17
|
+
source_id: string;
|
|
18
|
+
/** Unique identifier for the tenant/organization */
|
|
19
|
+
tenant_id: string;
|
|
20
|
+
/** Optional sub-tenant identifier for organizing data within a tenant. If not provided, defaults to tenant_id */
|
|
21
|
+
sub_tenant_id?: string;
|
|
22
|
+
body: CortexAI.MarkdownUploadRequest;
|
|
23
|
+
}
|
|
@@ -12,9 +12,13 @@ import * as CortexAI from "../../../../index.js";
|
|
|
12
12
|
* }
|
|
13
13
|
*/
|
|
14
14
|
export interface UploadUpdateWebpageRequest {
|
|
15
|
+
/** The URL of the webpage to re-scrape */
|
|
15
16
|
web_url: string;
|
|
17
|
+
/** The file ID of the existing web scraping job to update */
|
|
16
18
|
source_id: string;
|
|
19
|
+
/** Unique identifier for the tenant/organization */
|
|
17
20
|
tenant_id: string;
|
|
21
|
+
/** Optional sub-tenant identifier for organizing data within a tenant. If not provided, defaults to tenant_id */
|
|
18
22
|
sub_tenant_id?: string;
|
|
19
23
|
body: CortexAI.BodyUpdateScrapeJobUploadUpdateWebpagePatch;
|
|
20
24
|
}
|
|
@@ -10,7 +10,10 @@ import * as CortexAI from "../../../../index.js";
|
|
|
10
10
|
* }
|
|
11
11
|
*/
|
|
12
12
|
export interface UploadUploadAppSourcesRequest {
|
|
13
|
+
/** Unique identifier for the tenant/organization */
|
|
13
14
|
tenant_id: string;
|
|
15
|
+
/** Optional sub-tenant identifier for organizing data within a tenant. If not provided, defaults to tenant_id */
|
|
14
16
|
sub_tenant_id?: string;
|
|
17
|
+
/** List of structured source objects containing app-generated data to be indexed */
|
|
15
18
|
body: CortexAI.SourceModel[];
|
|
16
19
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file was auto-generated by Fern from our API Definition.
|
|
3
|
+
*/
|
|
4
|
+
import * as CortexAI from "../../../../index.js";
|
|
5
|
+
/**
|
|
6
|
+
* @example
|
|
7
|
+
* {
|
|
8
|
+
* tenant_id: "tenant_id",
|
|
9
|
+
* body: {
|
|
10
|
+
* content: "content"
|
|
11
|
+
* }
|
|
12
|
+
* }
|
|
13
|
+
*/
|
|
14
|
+
export interface UploadUploadMarkdownRequest {
|
|
15
|
+
/** Unique identifier for the tenant/organization */
|
|
16
|
+
tenant_id: string;
|
|
17
|
+
/** Optional sub-tenant identifier for organizing data within a tenant. If not provided, defaults to tenant_id */
|
|
18
|
+
sub_tenant_id?: string;
|
|
19
|
+
body: CortexAI.MarkdownUploadRequest;
|
|
20
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file was auto-generated by Fern from our API Definition.
|
|
3
|
+
*/
|
|
4
|
+
import * as CortexAI from "../../../../index.js";
|
|
5
|
+
/**
|
|
6
|
+
* @example
|
|
7
|
+
* {
|
|
8
|
+
* tenant_id: "tenant_id",
|
|
9
|
+
* body: {
|
|
10
|
+
* content: "content"
|
|
11
|
+
* }
|
|
12
|
+
* }
|
|
13
|
+
*/
|
|
14
|
+
export interface UploadUploadTextRequest {
|
|
15
|
+
/** Unique identifier for the tenant/organization */
|
|
16
|
+
tenant_id: string;
|
|
17
|
+
/** Optional sub-tenant identifier for organizing data within a tenant. If not provided, defaults to tenant_id */
|
|
18
|
+
sub_tenant_id?: string;
|
|
19
|
+
body: CortexAI.MarkdownUploadRequest;
|
|
20
|
+
}
|