@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.
Files changed (79) hide show
  1. package/README.md +39 -42
  2. package/dist/api/client.d.ts +4 -2
  3. package/dist/api/client.d.ts.map +1 -1
  4. package/dist/api/client.js +4 -2
  5. package/dist/api/documents/client.d.ts +17 -11
  6. package/dist/api/documents/client.d.ts.map +1 -1
  7. package/dist/api/documents/client.js +85 -38
  8. package/dist/api/edit/agent/client.js +1 -1
  9. package/dist/api/edit/client.d.ts +1 -1
  10. package/dist/api/edit/client.js +1 -1
  11. package/dist/api/edit/templates/client.d.ts +1 -75
  12. package/dist/api/edit/templates/client.d.ts.map +1 -1
  13. package/dist/api/edit/templates/client.js +3 -130
  14. package/dist/api/evals/classify/client.d.ts +20 -0
  15. package/dist/api/evals/classify/client.d.ts.map +1 -0
  16. package/dist/api/evals/classify/client.js +25 -0
  17. package/dist/api/evals/client.d.ts +11 -0
  18. package/dist/api/evals/client.d.ts.map +1 -0
  19. package/dist/api/evals/client.js +12 -0
  20. package/dist/api/evals/extract/client.d.ts +287 -0
  21. package/dist/api/evals/extract/client.d.ts.map +1 -0
  22. package/dist/api/evals/extract/client.js +56 -0
  23. package/dist/api/evals/helpers.d.ts +30 -0
  24. package/dist/api/evals/helpers.d.ts.map +1 -0
  25. package/dist/api/evals/helpers.js +46 -0
  26. package/dist/api/evals/schemas.d.ts +6522 -0
  27. package/dist/api/evals/schemas.d.ts.map +1 -0
  28. package/dist/api/evals/schemas.js +219 -0
  29. package/dist/api/evals/split/client.d.ts +105 -0
  30. package/dist/api/evals/split/client.d.ts.map +1 -0
  31. package/dist/api/evals/split/client.js +28 -0
  32. package/dist/api/extractions/client.d.ts +3 -43
  33. package/dist/api/extractions/client.d.ts.map +1 -1
  34. package/dist/api/extractions/client.js +6 -67
  35. package/dist/api/files/client.d.ts +9 -1
  36. package/dist/api/files/client.d.ts.map +1 -1
  37. package/dist/api/files/client.js +11 -5
  38. package/dist/api/jobs/client.d.ts +12 -10
  39. package/dist/api/jobs/client.d.ts.map +1 -1
  40. package/dist/api/jobs/client.js +13 -17
  41. package/dist/api/models/client.d.ts +3 -10
  42. package/dist/api/models/client.d.ts.map +1 -1
  43. package/dist/api/models/client.js +9 -8
  44. package/dist/api/projects/client.d.ts +1640 -4
  45. package/dist/api/projects/client.d.ts.map +1 -1
  46. package/dist/api/projects/client.js +457 -28
  47. package/dist/api/schemas/client.d.ts +3 -0
  48. package/dist/api/schemas/client.d.ts.map +1 -1
  49. package/dist/api/schemas/client.js +1 -1
  50. package/dist/api/workflows/blocks/client.d.ts +67 -0
  51. package/dist/api/workflows/blocks/client.d.ts.map +1 -0
  52. package/dist/api/workflows/blocks/client.js +132 -0
  53. package/dist/api/workflows/client.d.ts +90 -2
  54. package/dist/api/workflows/client.d.ts.map +1 -1
  55. package/dist/api/workflows/client.js +153 -1
  56. package/dist/api/workflows/edges/client.d.ts +66 -0
  57. package/dist/api/workflows/edges/client.d.ts.map +1 -0
  58. package/dist/api/workflows/edges/client.js +120 -0
  59. package/dist/api/workflows/runs/client.d.ts +57 -113
  60. package/dist/api/workflows/runs/client.d.ts.map +1 -1
  61. package/dist/api/workflows/runs/client.js +118 -119
  62. package/dist/api/workflows/runs/steps/client.d.ts +35 -13
  63. package/dist/api/workflows/runs/steps/client.d.ts.map +1 -1
  64. package/dist/api/workflows/runs/steps/client.js +63 -15
  65. package/dist/client.d.ts +4 -2
  66. package/dist/client.d.ts.map +1 -1
  67. package/dist/client.js +79 -5
  68. package/dist/generated_types.d.ts +7778 -2745
  69. package/dist/generated_types.d.ts.map +1 -1
  70. package/dist/generated_types.js +711 -70
  71. package/dist/mime.d.ts.map +1 -1
  72. package/dist/mime.js +11 -1
  73. package/dist/schema_types.d.ts +2 -2
  74. package/dist/schema_types.d.ts.map +1 -1
  75. package/dist/schema_types.js +2 -2
  76. package/dist/types.d.ts +655 -109
  77. package/dist/types.d.ts.map +1 -1
  78. package/dist/types.js +84 -14
  79. 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 - extract structured data from documents using AI.
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
- ### For Local Development
14
-
15
- To install and test the SDK locally using npm link:
11
+ ## Local Development
16
12
 
17
13
  ```bash
18
- # From the SDK directory
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 { Retab } from '@retab/node';
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: 'your-api-key', // Or set RETAB_API_KEY environment variable
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: 'path/to/invoice.pdf',
31
+ document: "path/to/invoice.pdf",
43
32
  schema: {
44
33
  json_schema: {
45
- type: 'object',
34
+ type: "object",
46
35
  properties: {
47
- invoice_number: { type: 'string' },
48
- total_amount: { type: 'number' },
49
- due_date: { type: 'string', format: 'date' }
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
- // From file path
58
- const result = await retab.documents.extract({
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
- // With specific AI model
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
- ## Key Features
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
@@ -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
@@ -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,SAAS,MAAM,iBAAiB,CAAC;AACxC,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;AAEpC,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,iBAAiB;gBACpC,MAAM,EAAE,cAAc;IAGlC,KAAK,WAAsB;IAC3B,MAAM,YAAuB;IAC7B,SAAS,eAA0B;IACnC,OAAO,aAAwB;IAC/B,QAAQ,cAAyB;IACjC,WAAW,iBAA4B;IACvC,SAAS,eAA0B;IACnC,IAAI,UAAqB;IACzB,IAAI,UAAqB;CAC5B"}
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"}
@@ -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, ParseResult, DocumentCreateMessageRequest, DocumentMessage, DocumentCreateInputRequest, RetabParsedChatCompletionChunk, EditRequest, EditResponse, SplitRequest, ClassifyRequest, GenerateSplitConfigRequest } from "../../types.js";
3
- import type { SplitResponse, ClassifyResponse, GenerateSplitConfigResponse } from "../../generated_types.js";
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<ParseResult>;
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 page ranges for each section.
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 'description'
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 array with name and pages for each section
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":"AAAA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAA2B,sBAAsB,EAAE,yBAAyB,EAA8B,YAAY,EAAE,WAAW,EAA+B,4BAA4B,EAAE,eAAe,EAAmD,0BAA0B,EAA+B,8BAA8B,EAAmC,WAAW,EAAE,YAAY,EAA+B,YAAY,EAAiC,eAAe,EAAuC,0BAA0B,EAA+B,MAAM,gBAAgB,CAAC;AAC9mB,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAI7G,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,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,WAAW,CAAC;IAS3E,eAAe,CAAC,MAAM,EAAE,4BAA4B,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IASzG,aAAa,CAAC,MAAM,EAAE,0BAA0B,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAS3G;;;;;;;;;;;;;;;;;;OAkBG;IACG,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC;IAShF;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;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;IAStF,qBAAqB,CAAC,MAAM,EAAE,0BAA0B,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,2BAA2B,CAAC;CASlI"}
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, ZParseResult, ZParseRequest, ZDocumentMessage, ZDocumentCreateMessageRequest, ZDocumentCreateInputRequest, ZRetabParsedChatCompletionChunk, ZEditRequest, ZEditResponse, ZSplitRequest, ZSplitResponse, ZClassifyRequest, ZClassifyResponse, ZGenerateSplitConfigRequest } from "../../types.js";
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: "/v1/documents/extract",
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 extract_stream(params, options) {
19
- let request = await ZDocumentExtractRequest.parseAsync(params);
20
- return this._fetchStream(ZRetabParsedChatCompletionChunk, {
21
- url: "/v1/documents/extract",
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: { ...request, stream: true, ...(options?.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
- async parse(params, options) {
29
- return this._fetchJson(ZParseResult, {
30
- url: "/v1/documents/parse",
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: { ...(await ZParseRequest.parseAsync(params)), ...(options?.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 create_messages(params, options) {
38
- return this._fetchJson(ZDocumentMessage, {
39
- url: "/v1/documents/create_messages",
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: { ...(await ZDocumentCreateMessageRequest.parseAsync(params)), ...(options?.body || {}) },
93
+ body: { ...request, stream: true, ...(options?.body || {}) },
42
94
  params: options?.params,
43
95
  headers: options?.headers,
44
96
  });
45
97
  }
46
- async create_inputs(params, options) {
47
- return this._fetchJson(ZDocumentMessage, {
48
- url: "/v1/documents/create_inputs",
98
+ async parse(params, options) {
99
+ return this._fetchJson(ZParseResponse, {
100
+ url: "/documents/parse",
49
101
  method: "POST",
50
- body: { ...(await ZDocumentCreateInputRequest.parseAsync(params)), ...(options?.body || {}) },
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: "/v1/documents/edit",
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 page ranges for each section.
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 'description'
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 array with name and pages for each section
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: "/v1/documents/split",
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: "/v1/documents/classify",
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: "/v1/edit/agent/fill",
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-based PDF form filling (for batch processing)
9
+ * - templates: Template generation and fill helpers for PDF workflows
10
10
  */
11
11
  export default class APIEdit extends CompositionClient {
12
12
  agent: APIEditAgent;
@@ -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-based PDF form filling (for batch processing)
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 { PaginatedList, InferFormSchemaRequest, InferFormSchemaResponse, MIMEDataInput, EditResponse } from "../../../types.js";
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,EAEH,aAAa,EACb,sBAAsB,EACtB,uBAAuB,EAGvB,aAAa,EAEb,YAAY,EAEf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACH,YAAY,EAEZ,SAAS,EACZ,MAAM,6BAA6B,CAAC;AAErC,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,iBAAiB;gBAC/C,MAAM,EAAE,iBAAiB;IAIrC;;;;;;OAMG;IACG,IAAI,CACN,EACI,MAAM,EACN,KAAK,EACL,KAAU,EACV,KAAc,EACd,QAAQ,EACR,SAAS,EACT,kBAA0B,EAC1B,OAAsB,GACzB,GAAE;QACC,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;KACf,EACN,OAAO,CAAC,EAAE,cAAc,GACzB,OAAO,CAAC,aAAa,CAAC;IAyBzB;;;;;;OAMG;IACG,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC;IAS/E;;;;;;;;;OASG;IACG,MAAM,CACR,EACI,IAAI,EACJ,QAAQ,EACR,WAAW,GACd,EAAE;QACC,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,aAAa,CAAC;QACxB,WAAW,EAAE,SAAS,EAAE,CAAC;KAC5B,EACD,OAAO,CAAC,EAAE,cAAc,GACzB,OAAO,CAAC,YAAY,CAAC;IAiBxB;;;;;;;;;OASG;IACG,MAAM,CACR,WAAW,EAAE,MAAM,EACnB,EACI,IAAI,EACJ,WAAW,GACd,GAAE;QACC,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC;KACxB,EACN,OAAO,CAAC,EAAE,cAAc,GACzB,OAAO,CAAC,YAAY,CAAC;IAcxB;;;;;OAKG;IACG,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAS1E;;;;;;;;OAQG;IACG,SAAS,CACX,WAAW,EAAE,MAAM,EACnB,EAAE,IAAI,EAAE,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAO,EAChC,OAAO,CAAC,EAAE,cAAc,GACzB,OAAO,CAAC,YAAY,CAAC;IAaxB;;;;;;;;;;;;;;;;;;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"}
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"}