@retab/node 1.0.96 → 1.0.99
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/README.md +39 -42
- package/dist/api/client.d.ts +4 -2
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +4 -2
- package/dist/api/documents/client.d.ts +17 -11
- package/dist/api/documents/client.d.ts.map +1 -1
- package/dist/api/documents/client.js +85 -38
- package/dist/api/edit/agent/client.js +1 -1
- package/dist/api/edit/client.d.ts +1 -1
- package/dist/api/edit/client.js +1 -1
- package/dist/api/edit/templates/client.d.ts +1 -75
- package/dist/api/edit/templates/client.d.ts.map +1 -1
- package/dist/api/edit/templates/client.js +3 -130
- package/dist/api/evals/classify/client.d.ts +20 -0
- package/dist/api/evals/classify/client.d.ts.map +1 -0
- package/dist/api/evals/classify/client.js +25 -0
- package/dist/api/evals/client.d.ts +11 -0
- package/dist/api/evals/client.d.ts.map +1 -0
- package/dist/api/evals/client.js +12 -0
- package/dist/api/evals/extract/client.d.ts +287 -0
- package/dist/api/evals/extract/client.d.ts.map +1 -0
- package/dist/api/evals/extract/client.js +56 -0
- package/dist/api/evals/helpers.d.ts +30 -0
- package/dist/api/evals/helpers.d.ts.map +1 -0
- package/dist/api/evals/helpers.js +46 -0
- package/dist/api/evals/schemas.d.ts +6522 -0
- package/dist/api/evals/schemas.d.ts.map +1 -0
- package/dist/api/evals/schemas.js +219 -0
- package/dist/api/evals/split/client.d.ts +105 -0
- package/dist/api/evals/split/client.d.ts.map +1 -0
- package/dist/api/evals/split/client.js +28 -0
- package/dist/api/extractions/client.d.ts +3 -43
- package/dist/api/extractions/client.d.ts.map +1 -1
- package/dist/api/extractions/client.js +6 -67
- package/dist/api/files/client.d.ts +9 -1
- package/dist/api/files/client.d.ts.map +1 -1
- package/dist/api/files/client.js +11 -5
- package/dist/api/jobs/client.d.ts +12 -10
- package/dist/api/jobs/client.d.ts.map +1 -1
- package/dist/api/jobs/client.js +13 -17
- package/dist/api/models/client.d.ts +3 -10
- package/dist/api/models/client.d.ts.map +1 -1
- package/dist/api/models/client.js +9 -8
- package/dist/api/projects/client.d.ts +1640 -4
- package/dist/api/projects/client.d.ts.map +1 -1
- package/dist/api/projects/client.js +457 -28
- package/dist/api/schemas/client.d.ts +3 -0
- package/dist/api/schemas/client.d.ts.map +1 -1
- package/dist/api/schemas/client.js +1 -1
- package/dist/api/workflows/blocks/client.d.ts +67 -0
- package/dist/api/workflows/blocks/client.d.ts.map +1 -0
- package/dist/api/workflows/blocks/client.js +132 -0
- package/dist/api/workflows/client.d.ts +90 -2
- package/dist/api/workflows/client.d.ts.map +1 -1
- package/dist/api/workflows/client.js +153 -1
- package/dist/api/workflows/edges/client.d.ts +66 -0
- package/dist/api/workflows/edges/client.d.ts.map +1 -0
- package/dist/api/workflows/edges/client.js +120 -0
- package/dist/api/workflows/runs/client.d.ts +57 -113
- package/dist/api/workflows/runs/client.d.ts.map +1 -1
- package/dist/api/workflows/runs/client.js +118 -119
- package/dist/api/workflows/runs/steps/client.d.ts +35 -13
- package/dist/api/workflows/runs/steps/client.d.ts.map +1 -1
- package/dist/api/workflows/runs/steps/client.js +63 -15
- package/dist/client.d.ts +4 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +79 -5
- package/dist/generated_types.d.ts +7778 -2745
- package/dist/generated_types.d.ts.map +1 -1
- package/dist/generated_types.js +711 -70
- package/dist/mime.d.ts.map +1 -1
- package/dist/mime.js +11 -1
- package/dist/schema_types.d.ts +2 -2
- package/dist/schema_types.d.ts.map +1 -1
- package/dist/schema_types.js +2 -2
- package/dist/types.d.ts +655 -109
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +84 -14
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,86 +1,83 @@
|
|
|
1
1
|
# Retab Node.js SDK
|
|
2
2
|
|
|
3
|
-
Official Node.js SDK for the Retab API
|
|
3
|
+
Official Node.js SDK for the Retab API.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
7
|
-
### From npm Registry
|
|
8
|
-
|
|
9
7
|
```bash
|
|
10
8
|
npm install @retab/node
|
|
11
9
|
```
|
|
12
10
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
To install and test the SDK locally using npm link:
|
|
11
|
+
## Local Development
|
|
16
12
|
|
|
17
13
|
```bash
|
|
18
|
-
|
|
19
|
-
cd open_source/sdk/clients/node
|
|
14
|
+
cd open-source/sdk/clients/node
|
|
20
15
|
bun install
|
|
21
16
|
bun run build
|
|
22
|
-
bun link
|
|
23
|
-
|
|
24
|
-
# From your project directory
|
|
25
|
-
bun link @retab/node
|
|
26
|
-
|
|
27
17
|
bun test tests/
|
|
28
18
|
```
|
|
29
19
|
|
|
30
20
|
## Quick Start
|
|
31
21
|
|
|
32
22
|
```typescript
|
|
33
|
-
import
|
|
23
|
+
import fs from "fs";
|
|
24
|
+
import { Retab } from "@retab/node";
|
|
34
25
|
|
|
35
|
-
// Initialize the client
|
|
36
26
|
const retab = new Retab({
|
|
37
|
-
apiKey:
|
|
27
|
+
apiKey: "your-api-key",
|
|
38
28
|
});
|
|
39
29
|
|
|
40
|
-
// Extract data from a document
|
|
41
30
|
const extraction = await retab.documents.extract({
|
|
42
|
-
document:
|
|
31
|
+
document: "path/to/invoice.pdf",
|
|
43
32
|
schema: {
|
|
44
33
|
json_schema: {
|
|
45
|
-
type:
|
|
34
|
+
type: "object",
|
|
46
35
|
properties: {
|
|
47
|
-
invoice_number: { type:
|
|
48
|
-
total_amount: { type:
|
|
49
|
-
due_date: { type:
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
36
|
+
invoice_number: { type: "string" },
|
|
37
|
+
total_amount: { type: "number" },
|
|
38
|
+
due_date: { type: "string", format: "date" },
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
},
|
|
53
42
|
});
|
|
54
43
|
|
|
55
44
|
console.log(extraction.extracted_data);
|
|
56
45
|
|
|
57
|
-
|
|
58
|
-
const
|
|
59
|
-
document: 'path/to/document.pdf',
|
|
60
|
-
schema: mySchema
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
// From buffer
|
|
64
|
-
const buffer = fs.readFileSync('document.pdf');
|
|
65
|
-
const result = await retab.documents.extract({
|
|
46
|
+
const buffer = fs.readFileSync("document.pdf");
|
|
47
|
+
const parsed = await retab.documents.parse({
|
|
66
48
|
document: buffer,
|
|
67
|
-
schema: mySchema
|
|
68
49
|
});
|
|
69
50
|
|
|
70
|
-
|
|
71
|
-
const result = await retab.documents.extract({
|
|
72
|
-
document: 'document.pdf',
|
|
73
|
-
schema: mySchema,
|
|
74
|
-
model: 'gpt-5.4'
|
|
51
|
+
console.log(parsed.pages[0]);
|
|
75
52
|
```
|
|
76
53
|
|
|
77
|
-
##
|
|
54
|
+
## Workflows
|
|
55
|
+
|
|
56
|
+
```typescript
|
|
57
|
+
import { Retab, raiseForStatus } from "@retab/node";
|
|
78
58
|
|
|
59
|
+
const retab = new Retab({
|
|
60
|
+
apiKey: "your-api-key",
|
|
61
|
+
});
|
|
79
62
|
|
|
63
|
+
const run = await retab.workflows.runs.createAndWait({
|
|
64
|
+
workflowId: "wf_abc123",
|
|
65
|
+
documents: { "start-node-1": "invoice.pdf" },
|
|
66
|
+
onStatus: (currentRun) => console.log(currentRun.status),
|
|
67
|
+
});
|
|
80
68
|
|
|
69
|
+
raiseForStatus(run);
|
|
70
|
+
|
|
71
|
+
const steps = await retab.workflows.runs.steps.list(run.id);
|
|
72
|
+
const outputs = await retab.workflows.runs.steps.getMany(run.id, ["extract-1"]);
|
|
73
|
+
|
|
74
|
+
console.log(run.final_outputs);
|
|
75
|
+
console.log(steps.map((step) => `${step.node_id}: ${step.status}`));
|
|
76
|
+
console.log(outputs.outputs["extract-1"]?.handle_outputs);
|
|
77
|
+
```
|
|
81
78
|
|
|
82
79
|
## Support
|
|
83
80
|
|
|
84
81
|
- Documentation: https://docs.retab.com
|
|
85
82
|
- Issues: https://github.com/retab-inc/retab/issues
|
|
86
|
-
- Discord: https://discord.gg/retab
|
|
83
|
+
- Discord: https://discord.gg/retab
|
package/dist/api/client.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { AbstractClient, CompositionClient } from "../client.js";
|
|
2
|
-
import APIModels from "./models/client";
|
|
3
2
|
import APIDocuments from "./documents/client";
|
|
4
3
|
import APISchemas from "./schemas/client";
|
|
5
4
|
import APIProjects from "./projects/client";
|
|
@@ -8,16 +7,19 @@ import APIWorkflows from "./workflows/client";
|
|
|
8
7
|
import APIEdit from "./edit/client";
|
|
9
8
|
import APIFiles from "./files/client";
|
|
10
9
|
import APIJobs from "./jobs/client";
|
|
10
|
+
import APIEvals from "./evals/client";
|
|
11
|
+
import APIModels from "./models/client";
|
|
11
12
|
export default class APIV1 extends CompositionClient {
|
|
12
13
|
constructor(client: AbstractClient);
|
|
13
14
|
files: APIFiles;
|
|
14
|
-
models: APIModels;
|
|
15
15
|
documents: APIDocuments;
|
|
16
16
|
schemas: APISchemas;
|
|
17
17
|
projects: APIProjects;
|
|
18
|
+
evals: APIEvals;
|
|
18
19
|
extractions: APIExtractions;
|
|
19
20
|
workflows: APIWorkflows;
|
|
20
21
|
edit: APIEdit;
|
|
21
22
|
jobs: APIJobs;
|
|
23
|
+
models: APIModels;
|
|
22
24
|
}
|
|
23
25
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/api/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,cAAc,MAAM,sBAAsB,CAAC;AAClD,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,OAAO,MAAM,eAAe,CAAC;AACpC,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,OAAO,MAAM,eAAe,CAAC;AACpC,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,SAAS,MAAM,iBAAiB,CAAC;AAExC,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,iBAAiB;gBACpC,MAAM,EAAE,cAAc;IAGlC,KAAK,WAAsB;IAC3B,SAAS,eAA0B;IACnC,OAAO,aAAwB;IAC/B,QAAQ,cAAyB;IACjC,KAAK,WAAsB;IAC3B,WAAW,iBAA4B;IACvC,SAAS,eAA0B;IACnC,IAAI,UAAqB;IACzB,IAAI,UAAqB;IACzB,MAAM,YAAuB;CAChC"}
|
package/dist/api/client.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { CompositionClient } from "../client.js";
|
|
2
|
-
import APIModels from "./models/client";
|
|
3
2
|
import APIDocuments from "./documents/client";
|
|
4
3
|
import APISchemas from "./schemas/client";
|
|
5
4
|
import APIProjects from "./projects/client";
|
|
@@ -8,17 +7,20 @@ import APIWorkflows from "./workflows/client";
|
|
|
8
7
|
import APIEdit from "./edit/client";
|
|
9
8
|
import APIFiles from "./files/client";
|
|
10
9
|
import APIJobs from "./jobs/client";
|
|
10
|
+
import APIEvals from "./evals/client";
|
|
11
|
+
import APIModels from "./models/client";
|
|
11
12
|
export default class APIV1 extends CompositionClient {
|
|
12
13
|
constructor(client) {
|
|
13
14
|
super(client);
|
|
14
15
|
this.files = new APIFiles(this);
|
|
15
|
-
this.models = new APIModels(this);
|
|
16
16
|
this.documents = new APIDocuments(this);
|
|
17
17
|
this.schemas = new APISchemas(this);
|
|
18
18
|
this.projects = new APIProjects(this);
|
|
19
|
+
this.evals = new APIEvals(this);
|
|
19
20
|
this.extractions = new APIExtractions(this);
|
|
20
21
|
this.workflows = new APIWorkflows(this);
|
|
21
22
|
this.edit = new APIEdit(this);
|
|
22
23
|
this.jobs = new APIJobs(this);
|
|
24
|
+
this.models = new APIModels(this);
|
|
23
25
|
}
|
|
24
26
|
}
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { CompositionClient, RequestOptions } from "../../client.js";
|
|
2
|
-
import { DocumentExtractRequest, RetabParsedChatCompletion, ParseRequest,
|
|
3
|
-
import type { SplitResponse, ClassifyResponse
|
|
2
|
+
import { DocumentExtractRequest, RetabParsedChatCompletion, ParseRequest, ParseResponse, RetabParsedChatCompletionChunk, EditRequest, EditResponse, SplitRequest, ClassifyRequest, MIMEDataInput } from "../../types.js";
|
|
3
|
+
import type { SplitResponse, ClassifyResponse } from "../../generated_types.js";
|
|
4
4
|
export default class APIDocuments extends CompositionClient {
|
|
5
5
|
constructor(client: CompositionClient);
|
|
6
6
|
extract(params: DocumentExtractRequest, options?: RequestOptions): Promise<RetabParsedChatCompletion>;
|
|
7
|
+
sources(extraction_id: string, { file, file_id, fileId, }?: {
|
|
8
|
+
file?: MIMEDataInput;
|
|
9
|
+
file_id?: string;
|
|
10
|
+
fileId?: string;
|
|
11
|
+
}, options?: RequestOptions): Promise<Record<string, unknown>>;
|
|
7
12
|
extract_stream(params: DocumentExtractRequest, options?: RequestOptions): Promise<AsyncGenerator<RetabParsedChatCompletionChunk>>;
|
|
8
|
-
parse(params: ParseRequest, options?: RequestOptions): Promise<
|
|
9
|
-
create_messages(params: DocumentCreateMessageRequest, options?: RequestOptions): Promise<DocumentMessage>;
|
|
10
|
-
create_inputs(params: DocumentCreateInputRequest, options?: RequestOptions): Promise<DocumentMessage>;
|
|
13
|
+
parse(params: ParseRequest, options?: RequestOptions): Promise<ParseResponse>;
|
|
11
14
|
/**
|
|
12
15
|
* Edit a PDF document by automatically detecting and filling form fields.
|
|
13
16
|
*
|
|
@@ -32,14 +35,17 @@ export default class APIDocuments extends CompositionClient {
|
|
|
32
35
|
* Split a document into sections based on provided subdocuments.
|
|
33
36
|
*
|
|
34
37
|
* This method analyzes a multi-page document and classifies pages into
|
|
35
|
-
* user-defined subdocuments, returning the
|
|
38
|
+
* user-defined subdocuments, returning the assigned pages for each section.
|
|
36
39
|
*
|
|
37
40
|
* @param params - SplitRequest containing:
|
|
38
41
|
* - document: MIMEData object, file path, Buffer, or Readable stream
|
|
39
|
-
* - subdocuments: Array of subdocuments with 'name' and '
|
|
42
|
+
* - subdocuments: Array of subdocuments with 'name', 'description', and optional 'partition_key'
|
|
40
43
|
* - model: LLM model for inference (e.g., "retab-small")
|
|
44
|
+
* - context: Optional business context for the split
|
|
45
|
+
* - n_consensus: Optional number of split runs to use for consensus scoring
|
|
41
46
|
* @param options - Optional request options
|
|
42
|
-
* @returns SplitResponse containing splits
|
|
47
|
+
* @returns SplitResponse containing splits with page lists, optional likelihood/votes,
|
|
48
|
+
* and partitions when partition_key is configured
|
|
43
49
|
*
|
|
44
50
|
* @example
|
|
45
51
|
* ```typescript
|
|
@@ -50,10 +56,11 @@ export default class APIDocuments extends CompositionClient {
|
|
|
50
56
|
* { name: "invoice", description: "Invoice documents with billing information" },
|
|
51
57
|
* { name: "receipt", description: "Receipt documents for payments" },
|
|
52
58
|
* { name: "contract", description: "Legal contract documents" },
|
|
53
|
-
* ]
|
|
59
|
+
* ],
|
|
60
|
+
* n_consensus: 3,
|
|
54
61
|
* });
|
|
55
62
|
* for (const split of response.splits) {
|
|
56
|
-
* console.log(`${split.name}: pages ${split.pages.join(', ')}`);
|
|
63
|
+
* console.log(`${split.name}: pages ${split.pages.join(', ')} likelihood=${split.likelihood}`);
|
|
57
64
|
* }
|
|
58
65
|
* ```
|
|
59
66
|
*/
|
|
@@ -90,6 +97,5 @@ export default class APIDocuments extends CompositionClient {
|
|
|
90
97
|
* ```
|
|
91
98
|
*/
|
|
92
99
|
classify(params: ClassifyRequest, options?: RequestOptions): Promise<ClassifyResponse>;
|
|
93
|
-
generate_split_config(params: GenerateSplitConfigRequest, options?: RequestOptions): Promise<GenerateSplitConfigResponse>;
|
|
94
100
|
}
|
|
95
101
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/api/documents/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/api/documents/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAA2B,sBAAsB,EAAE,yBAAyB,EAA8B,YAAY,EAAE,aAAa,EAAiC,8BAA8B,EAAmC,WAAW,EAAE,YAAY,EAA+B,YAAY,EAAiC,eAAe,EAAkD,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC1b,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAGhF,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,iBAAiB;gBAC3C,MAAM,EAAE,iBAAiB;IAG/B,OAAO,CAAC,MAAM,EAAE,sBAAsB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAUrG,OAAO,CACT,aAAa,EAAE,MAAM,EACrB,EACI,IAAI,EACJ,OAAO,EACP,MAAM,GACT,GAAE;QACC,IAAI,CAAC,EAAE,aAAa,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;KACd,EACN,OAAO,CAAC,EAAE,cAAc,GACzB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAyE7B,cAAc,CAAC,MAAM,EAAE,sBAAsB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,8BAA8B,CAAC,CAAC;IAUjI,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IASnF;;;;;;;;;;;;;;;;;;OAkBG;IACG,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC;IAShF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACG,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IASnF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACG,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAS/F"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import * as z from "zod";
|
|
1
2
|
import { CompositionClient } from "../../client.js";
|
|
2
|
-
import { ZDocumentExtractRequest, ZRetabParsedChatCompletion,
|
|
3
|
-
import { ZGenerateSplitConfigResponse } from "../../generated_types.js";
|
|
3
|
+
import { ZDocumentExtractRequest, ZRetabParsedChatCompletion, ZParseResponse, ZParseRequest, ZRetabParsedChatCompletionChunk, ZEditRequest, ZEditResponse, ZSplitRequest, ZSplitResponse, ZClassifyRequest, ZClassifyResponse, ZMIMEData } from "../../types.js";
|
|
4
4
|
export default class APIDocuments extends CompositionClient {
|
|
5
5
|
constructor(client) {
|
|
6
6
|
super(client);
|
|
@@ -8,46 +8,98 @@ export default class APIDocuments extends CompositionClient {
|
|
|
8
8
|
async extract(params, options) {
|
|
9
9
|
let request = await ZDocumentExtractRequest.parseAsync(params);
|
|
10
10
|
return this._fetchJson(ZRetabParsedChatCompletion, {
|
|
11
|
-
url: "/
|
|
11
|
+
url: "/documents/extract",
|
|
12
12
|
method: "POST",
|
|
13
13
|
body: { ...request, ...(options?.body || {}) },
|
|
14
14
|
params: options?.params,
|
|
15
15
|
headers: options?.headers,
|
|
16
16
|
});
|
|
17
17
|
}
|
|
18
|
-
async
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
async sources(extraction_id, { file, file_id, fileId, } = {}, options) {
|
|
19
|
+
const extraction = await this._fetchJson(z.any(), {
|
|
20
|
+
url: `/extractions/${extraction_id}`,
|
|
21
|
+
method: "GET",
|
|
22
|
+
params: options?.params,
|
|
23
|
+
headers: options?.headers,
|
|
24
|
+
});
|
|
25
|
+
let inferredFileId = file_id ?? fileId;
|
|
26
|
+
if (!inferredFileId && file) {
|
|
27
|
+
const parsedFile = await ZMIMEData.parseAsync(file);
|
|
28
|
+
const maybeId = parsedFile.id;
|
|
29
|
+
if (typeof maybeId === "string" && maybeId.length > 0) {
|
|
30
|
+
inferredFileId = maybeId;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
if (!inferredFileId) {
|
|
34
|
+
const extractionFileIds = Array.isArray(extraction?.file_ids)
|
|
35
|
+
? extraction.file_ids.filter((candidate) => typeof candidate === "string" && candidate.length > 0)
|
|
36
|
+
: [];
|
|
37
|
+
if (extractionFileIds.length === 1) {
|
|
38
|
+
inferredFileId = extractionFileIds[0];
|
|
39
|
+
}
|
|
40
|
+
else if (typeof extraction?.file_id === "string" && extraction.file_id.length > 0) {
|
|
41
|
+
inferredFileId = extraction.file_id;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (!inferredFileId) {
|
|
45
|
+
throw new Error("Unable to infer file_id. Provide file_id explicitly, pass a MIMEData with an id, or use an extraction with a single file.");
|
|
46
|
+
}
|
|
47
|
+
let data = {};
|
|
48
|
+
const completion = extraction?.completion;
|
|
49
|
+
const message = completion?.choices?.[0]?.message;
|
|
50
|
+
if (message?.parsed && typeof message.parsed === "object") {
|
|
51
|
+
data = message.parsed;
|
|
52
|
+
}
|
|
53
|
+
else if (typeof message?.content === "string") {
|
|
54
|
+
try {
|
|
55
|
+
data = JSON.parse(message.content);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
data = {};
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const ocrResponse = await this._fetchJson(z.any(), {
|
|
62
|
+
url: "/documents/perform_ocr_only",
|
|
22
63
|
method: "POST",
|
|
23
|
-
body: {
|
|
64
|
+
body: {
|
|
65
|
+
file_id: inferredFileId,
|
|
66
|
+
...(options?.body || {}),
|
|
67
|
+
},
|
|
24
68
|
params: options?.params,
|
|
25
69
|
headers: options?.headers,
|
|
26
70
|
});
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
71
|
+
const ocrFileId = ocrResponse?.ocr_file_id;
|
|
72
|
+
if (typeof ocrFileId !== "string" || ocrFileId.length === 0) {
|
|
73
|
+
throw new Error("perform_ocr_only did not return a valid ocr_file_id");
|
|
74
|
+
}
|
|
75
|
+
return this._fetchJson(z.record(z.any()), {
|
|
76
|
+
url: "/documents/compute_field_locations",
|
|
31
77
|
method: "POST",
|
|
32
|
-
body: {
|
|
78
|
+
body: {
|
|
79
|
+
ocr_file_id: ocrFileId,
|
|
80
|
+
ocr_result: ocrResponse?.ocr_result,
|
|
81
|
+
data,
|
|
82
|
+
...(options?.body || {}),
|
|
83
|
+
},
|
|
33
84
|
params: options?.params,
|
|
34
85
|
headers: options?.headers,
|
|
35
86
|
});
|
|
36
87
|
}
|
|
37
|
-
async
|
|
38
|
-
|
|
39
|
-
|
|
88
|
+
async extract_stream(params, options) {
|
|
89
|
+
let request = await ZDocumentExtractRequest.parseAsync(params);
|
|
90
|
+
return this._fetchStream(ZRetabParsedChatCompletionChunk, {
|
|
91
|
+
url: "/documents/extractions",
|
|
40
92
|
method: "POST",
|
|
41
|
-
body: { ...
|
|
93
|
+
body: { ...request, stream: true, ...(options?.body || {}) },
|
|
42
94
|
params: options?.params,
|
|
43
95
|
headers: options?.headers,
|
|
44
96
|
});
|
|
45
97
|
}
|
|
46
|
-
async
|
|
47
|
-
return this._fetchJson(
|
|
48
|
-
url: "/
|
|
98
|
+
async parse(params, options) {
|
|
99
|
+
return this._fetchJson(ZParseResponse, {
|
|
100
|
+
url: "/documents/parse",
|
|
49
101
|
method: "POST",
|
|
50
|
-
body: { ...(await
|
|
102
|
+
body: { ...(await ZParseRequest.parseAsync(params)), ...(options?.body || {}) },
|
|
51
103
|
params: options?.params,
|
|
52
104
|
headers: options?.headers,
|
|
53
105
|
});
|
|
@@ -73,7 +125,7 @@ export default class APIDocuments extends CompositionClient {
|
|
|
73
125
|
*/
|
|
74
126
|
async edit(params, options) {
|
|
75
127
|
return this._fetchJson(ZEditResponse, {
|
|
76
|
-
url: "/
|
|
128
|
+
url: "/documents/edit",
|
|
77
129
|
method: "POST",
|
|
78
130
|
body: { ...(await ZEditRequest.parseAsync(params)), ...(options?.body || {}) },
|
|
79
131
|
params: options?.params,
|
|
@@ -84,14 +136,17 @@ export default class APIDocuments extends CompositionClient {
|
|
|
84
136
|
* Split a document into sections based on provided subdocuments.
|
|
85
137
|
*
|
|
86
138
|
* This method analyzes a multi-page document and classifies pages into
|
|
87
|
-
* user-defined subdocuments, returning the
|
|
139
|
+
* user-defined subdocuments, returning the assigned pages for each section.
|
|
88
140
|
*
|
|
89
141
|
* @param params - SplitRequest containing:
|
|
90
142
|
* - document: MIMEData object, file path, Buffer, or Readable stream
|
|
91
|
-
* - subdocuments: Array of subdocuments with 'name' and '
|
|
143
|
+
* - subdocuments: Array of subdocuments with 'name', 'description', and optional 'partition_key'
|
|
92
144
|
* - model: LLM model for inference (e.g., "retab-small")
|
|
145
|
+
* - context: Optional business context for the split
|
|
146
|
+
* - n_consensus: Optional number of split runs to use for consensus scoring
|
|
93
147
|
* @param options - Optional request options
|
|
94
|
-
* @returns SplitResponse containing splits
|
|
148
|
+
* @returns SplitResponse containing splits with page lists, optional likelihood/votes,
|
|
149
|
+
* and partitions when partition_key is configured
|
|
95
150
|
*
|
|
96
151
|
* @example
|
|
97
152
|
* ```typescript
|
|
@@ -102,16 +157,17 @@ export default class APIDocuments extends CompositionClient {
|
|
|
102
157
|
* { name: "invoice", description: "Invoice documents with billing information" },
|
|
103
158
|
* { name: "receipt", description: "Receipt documents for payments" },
|
|
104
159
|
* { name: "contract", description: "Legal contract documents" },
|
|
105
|
-
* ]
|
|
160
|
+
* ],
|
|
161
|
+
* n_consensus: 3,
|
|
106
162
|
* });
|
|
107
163
|
* for (const split of response.splits) {
|
|
108
|
-
* console.log(`${split.name}: pages ${split.pages.join(', ')}`);
|
|
164
|
+
* console.log(`${split.name}: pages ${split.pages.join(', ')} likelihood=${split.likelihood}`);
|
|
109
165
|
* }
|
|
110
166
|
* ```
|
|
111
167
|
*/
|
|
112
168
|
async split(params, options) {
|
|
113
169
|
return this._fetchJson(ZSplitResponse, {
|
|
114
|
-
url: "/
|
|
170
|
+
url: "/documents/split",
|
|
115
171
|
method: "POST",
|
|
116
172
|
body: { ...(await ZSplitRequest.parseAsync(params)), ...(options?.body || {}) },
|
|
117
173
|
params: options?.params,
|
|
@@ -151,20 +207,11 @@ export default class APIDocuments extends CompositionClient {
|
|
|
151
207
|
*/
|
|
152
208
|
async classify(params, options) {
|
|
153
209
|
return this._fetchJson(ZClassifyResponse, {
|
|
154
|
-
url: "/
|
|
210
|
+
url: "/documents/classify",
|
|
155
211
|
method: "POST",
|
|
156
212
|
body: { ...(await ZClassifyRequest.parseAsync(params)), ...(options?.body || {}) },
|
|
157
213
|
params: options?.params,
|
|
158
214
|
headers: options?.headers,
|
|
159
215
|
});
|
|
160
216
|
}
|
|
161
|
-
async generate_split_config(params, options) {
|
|
162
|
-
return this._fetchJson(ZGenerateSplitConfigResponse, {
|
|
163
|
-
url: "/v1/documents/split/generate_config",
|
|
164
|
-
method: "POST",
|
|
165
|
-
body: { ...(await ZGenerateSplitConfigRequest.parseAsync(params)), ...(options?.body || {}) },
|
|
166
|
-
params: options?.params,
|
|
167
|
-
headers: options?.headers,
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
217
|
}
|
|
@@ -28,7 +28,7 @@ export default class APIEditAgent extends CompositionClient {
|
|
|
28
28
|
*/
|
|
29
29
|
async fill(params, options) {
|
|
30
30
|
return this._fetchJson(ZEditResponse, {
|
|
31
|
-
url: "/
|
|
31
|
+
url: "/edit/agent/fill",
|
|
32
32
|
method: "POST",
|
|
33
33
|
body: { ...(await ZEditRequest.parseAsync(params)), ...(options?.body || {}) },
|
|
34
34
|
params: options?.params,
|
|
@@ -6,7 +6,7 @@ import APIEditAgent from "./agent/client.js";
|
|
|
6
6
|
*
|
|
7
7
|
* Sub-clients:
|
|
8
8
|
* - agent: Agent-based document editing (fill any document with AI)
|
|
9
|
-
* - templates: Template
|
|
9
|
+
* - templates: Template generation and fill helpers for PDF workflows
|
|
10
10
|
*/
|
|
11
11
|
export default class APIEdit extends CompositionClient {
|
|
12
12
|
agent: APIEditAgent;
|
package/dist/api/edit/client.js
CHANGED
|
@@ -6,7 +6,7 @@ import APIEditAgent from "./agent/client.js";
|
|
|
6
6
|
*
|
|
7
7
|
* Sub-clients:
|
|
8
8
|
* - agent: Agent-based document editing (fill any document with AI)
|
|
9
|
-
* - templates: Template
|
|
9
|
+
* - templates: Template generation and fill helpers for PDF workflows
|
|
10
10
|
*/
|
|
11
11
|
export default class APIEdit extends CompositionClient {
|
|
12
12
|
constructor(client) {
|
|
@@ -1,81 +1,7 @@
|
|
|
1
1
|
import { CompositionClient, RequestOptions } from "../../../client.js";
|
|
2
|
-
import {
|
|
3
|
-
import { EditTemplate, FormField } from "../../../generated_types.js";
|
|
2
|
+
import { EditResponse, InferFormSchemaRequest, InferFormSchemaResponse } from "../../../types.js";
|
|
4
3
|
export default class APIEditTemplates extends CompositionClient {
|
|
5
4
|
constructor(client: CompositionClient);
|
|
6
|
-
/**
|
|
7
|
-
* List edit templates with pagination and optional filtering.
|
|
8
|
-
*
|
|
9
|
-
* @param params - Pagination and filter parameters
|
|
10
|
-
* @param options - Optional request options
|
|
11
|
-
* @returns PaginatedList of EditTemplate objects
|
|
12
|
-
*/
|
|
13
|
-
list({ before, after, limit, order, filename, mime_type, include_embeddings, sort_by, }?: {
|
|
14
|
-
before?: string;
|
|
15
|
-
after?: string;
|
|
16
|
-
limit?: number;
|
|
17
|
-
order?: "asc" | "desc";
|
|
18
|
-
filename?: string;
|
|
19
|
-
mime_type?: string;
|
|
20
|
-
include_embeddings?: boolean;
|
|
21
|
-
sort_by?: string;
|
|
22
|
-
}, options?: RequestOptions): Promise<PaginatedList>;
|
|
23
|
-
/**
|
|
24
|
-
* Get an edit template by ID.
|
|
25
|
-
*
|
|
26
|
-
* @param template_id - The ID of the template to retrieve
|
|
27
|
-
* @param options - Optional request options
|
|
28
|
-
* @returns EditTemplate object
|
|
29
|
-
*/
|
|
30
|
-
get(template_id: string, options?: RequestOptions): Promise<EditTemplate>;
|
|
31
|
-
/**
|
|
32
|
-
* Create a new edit template.
|
|
33
|
-
*
|
|
34
|
-
* @param params - CreateEditTemplateRequest containing:
|
|
35
|
-
* - name: Name of the template
|
|
36
|
-
* - document: The document to use as a template (MIMEData, file path, Buffer, or Readable)
|
|
37
|
-
* - form_fields: Array of form field definitions
|
|
38
|
-
* @param options - Optional request options
|
|
39
|
-
* @returns EditTemplate object
|
|
40
|
-
*/
|
|
41
|
-
create({ name, document, form_fields, }: {
|
|
42
|
-
name: string;
|
|
43
|
-
document: MIMEDataInput;
|
|
44
|
-
form_fields: FormField[];
|
|
45
|
-
}, options?: RequestOptions): Promise<EditTemplate>;
|
|
46
|
-
/**
|
|
47
|
-
* Update an existing edit template.
|
|
48
|
-
*
|
|
49
|
-
* @param template_id - The ID of the template to update
|
|
50
|
-
* @param params - UpdateEditTemplateRequest containing optional fields to update:
|
|
51
|
-
* - name: New name for the template
|
|
52
|
-
* - form_fields: Updated array of form field definitions
|
|
53
|
-
* @param options - Optional request options
|
|
54
|
-
* @returns EditTemplate object
|
|
55
|
-
*/
|
|
56
|
-
update(template_id: string, { name, form_fields, }?: {
|
|
57
|
-
name?: string;
|
|
58
|
-
form_fields?: FormField[];
|
|
59
|
-
}, options?: RequestOptions): Promise<EditTemplate>;
|
|
60
|
-
/**
|
|
61
|
-
* Delete an edit template by ID.
|
|
62
|
-
*
|
|
63
|
-
* @param template_id - The ID of the template to delete
|
|
64
|
-
* @param options - Optional request options
|
|
65
|
-
*/
|
|
66
|
-
delete(template_id: string, options?: RequestOptions): Promise<void>;
|
|
67
|
-
/**
|
|
68
|
-
* Duplicate an existing edit template.
|
|
69
|
-
*
|
|
70
|
-
* @param template_id - The ID of the template to duplicate
|
|
71
|
-
* @param params - DuplicateEditTemplateRequest containing optional:
|
|
72
|
-
* - name: Name for the duplicated template (defaults to "{original_name} (copy)")
|
|
73
|
-
* @param options - Optional request options
|
|
74
|
-
* @returns EditTemplate object (the new duplicated template)
|
|
75
|
-
*/
|
|
76
|
-
duplicate(template_id: string, { name }?: {
|
|
77
|
-
name?: string;
|
|
78
|
-
}, options?: RequestOptions): Promise<EditTemplate>;
|
|
79
5
|
/**
|
|
80
6
|
* Generate (infer) form schema from a PDF document.
|
|
81
7
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/api/edit/templates/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/api/edit/templates/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EACH,YAAY,EACZ,sBAAsB,EACtB,uBAAuB,EAI1B,MAAM,mBAAmB,CAAC;AAE3B,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,iBAAiB;gBAC/C,MAAM,EAAE,iBAAiB;IAIrC;;;;;;;;;;;;;;;;;;OAkBG;IACG,QAAQ,CACV,MAAM,EAAE,sBAAsB,EAC9B,OAAO,CAAC,EAAE,cAAc,GACzB,OAAO,CAAC,uBAAuB,CAAC;IAUnC;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,IAAI,CACN,EACI,WAAW,EACX,YAAY,EACZ,KAAqB,EACrB,KAAK,GACR,EAAE;QACC,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KAClB,EACD,OAAO,CAAC,EAAE,cAAc,GACzB,OAAO,CAAC,YAAY,CAAC;CAqB3B"}
|