@uploadista/flow-documents-replicate 0.1.3-beta.7 → 0.1.3

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.
@@ -1,5 +1,5 @@
1
1
 
2
- > @uploadista/flow-documents-replicate@0.1.3-beta.7 build /home/runner/work/uploadista-sdk/uploadista-sdk/packages/flow/documents/replicate
2
+ > @uploadista/flow-documents-replicate@0.1.3 build /home/runner/work/uploadista-sdk/uploadista-sdk/packages/flow/documents/replicate
3
3
  > tsc --noEmit && tsdown
4
4
 
5
5
  ℹ tsdown v0.20.1 powered by rolldown v1.0.0-rc.1
@@ -13,4 +13,4 @@
13
13
  ℹ 4 files, total: 18.87 kB
14
14
  [PLUGIN_TIMINGS] Warning: Your build spent significant time in plugin `rolldown-plugin-dts:generate`. See https://rolldown.rs/options/checks#plugintimings for more details.
15
15
 
16
- ✔ Build complete in 13240ms
16
+ ✔ Build complete in 13325ms
package/dist/index.mjs CHANGED
@@ -65,7 +65,7 @@ const documentAiPlugin = (config, options) => {
65
65
  const staticApiKey = isStatic ? config : null;
66
66
  const credentialProvider = isStatic ? null : config.credentialProvider;
67
67
  const useCredentialProviderService = isStatic ? false : config.useCredentialProviderService;
68
- const ocrModelId = (isStatic ? options?.ocrModelId : config.ocrModelId) || "lucataco/deepseek-ocr:0080ec8faf4da6a14afb8502e96f5bb53afbc28b40e2d4a5e17945b8f69eb863";
68
+ const ocrModelId = (isStatic ? options?.ocrModelId : config.ocrModelId) || "lucataco/deepseek-ocr:cb3b474fbfc56b1664c8c7841550bccecbe7b74c30e45ce938ffca1180b4dff5";
69
69
  const getApiToken = (context) => {
70
70
  if (staticApiKey) return Effect.succeed(staticApiKey);
71
71
  if (useCredentialProviderService) return Effect.gen(function* () {
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["CredentialProviderService"],"sources":["../src/document-ai-plugin.ts"],"sourcesContent":["import { UploadistaError } from \"@uploadista/core/errors\";\nimport {\n CredentialProvider as CredentialProviderService,\n type DocumentAiContext,\n DocumentAiPlugin,\n type OcrResult,\n} from \"@uploadista/core/flow\";\nimport { withOperationSpan } from \"@uploadista/observability\";\nimport { Effect, Layer, Option } from \"effect\";\nimport Replicate from \"replicate\";\n\ntype ModelId = `${string}/${string}` | `${string}/${string}:${string}`;\n\ntype ReplicateCredentials = {\n apiKey: string;\n};\n\n// Credential provider function type\ntype CredentialProvider = (\n context: DocumentAiContext & { serviceType: \"replicate\" },\n) => Effect.Effect<ReplicateCredentials, UploadistaError>;\n\n// Plugin configuration can be either a static API key or options with credential provider or service\ntype PluginConfig =\n | string\n | {\n credentialProvider?: CredentialProvider;\n useCredentialProviderService?: boolean;\n ocrModelId?: ModelId;\n };\n\n/**\n * Map OcrTaskType to Replicate model task type\n */\nfunction mapTaskType(taskType: string): string {\n switch (taskType) {\n case \"convertToMarkdown\":\n return \"Convert to Markdown\";\n case \"freeOcr\":\n return \"Free OCR\";\n case \"parseFigure\":\n return \"Parse Figure\";\n case \"locateObject\":\n return \"Locate Object by Reference\";\n default:\n return \"Convert to Markdown\";\n }\n}\n\n/**\n * Map OcrResolution to Replicate resolution parameter\n */\nfunction mapResolution(resolution?: string): string {\n switch (resolution) {\n case \"tiny\":\n return \"Tiny\";\n case \"small\":\n return \"Small\";\n case \"base\":\n return \"Base\";\n case \"gundam\":\n return \"Gundam (Recommended)\";\n case \"large\":\n return \"Large\";\n default:\n return \"Gundam (Recommended)\";\n }\n}\n\n/**\n * Determine format based on task type\n */\nfunction getFormatFromTaskType(\n taskType: string,\n): \"markdown\" | \"plain\" | \"structured\" {\n switch (taskType) {\n case \"convertToMarkdown\":\n return \"markdown\";\n case \"parseFigure\":\n return \"structured\";\n default:\n return \"plain\";\n }\n}\n\n/**\n * Create the Replicate DocumentAI plugin\n * Supports both static credentials (OSS) and dynamic credential providers (UploadistaCloud)\n *\n * @example\n * // Static credentials (OSS)\n * documentAiPlugin(process.env.REPLICATE_API_TOKEN)\n *\n * @example\n * // Dynamic credentials with function (UploadistaCloud)\n * documentAiPlugin({\n * credentialProvider: (context) => Effect.succeed({ apiKey: \"...\" })\n * })\n *\n * @example\n * // Dynamic credentials with Effect service (UploadistaCloud)\n * documentAiPlugin({\n * useCredentialProviderService: true\n * })\n */\nexport const documentAiPlugin = (\n config: PluginConfig,\n options?: {\n ocrModelId?: ModelId;\n },\n) => {\n // Parse configuration\n const isStatic = typeof config === \"string\";\n const staticApiKey = isStatic ? config : null;\n const credentialProvider = isStatic ? null : config.credentialProvider;\n const useCredentialProviderService = isStatic\n ? false\n : config.useCredentialProviderService;\n\n // Model ID for DeepSeek-OCR\n const ocrModelId =\n (isStatic ? options?.ocrModelId : config.ocrModelId) ||\n \"lucataco/deepseek-ocr:0080ec8faf4da6a14afb8502e96f5bb53afbc28b40e2d4a5e17945b8f69eb863\";\n\n // Helper to get API token (either static, from provider function, or from service)\n const getApiToken = (context: DocumentAiContext) => {\n if (staticApiKey) {\n return Effect.succeed(staticApiKey);\n }\n if (useCredentialProviderService) {\n return Effect.gen(function* () {\n const credentialProviderService = yield* Effect.serviceOption(\n CredentialProviderService,\n );\n\n if (Option.isNone(credentialProviderService)) {\n return yield* Effect.fail(\n UploadistaError.fromCode(\"UNKNOWN_ERROR\", {\n cause: new Error(\"Credential provider service not found\"),\n }),\n );\n }\n\n const credentials =\n yield* credentialProviderService.value.getCredential({\n clientId: context.clientId,\n serviceType: \"replicate\",\n });\n\n if (\n typeof credentials === \"object\" &&\n credentials !== null &&\n \"apiKey\" in credentials &&\n typeof credentials.apiKey === \"string\"\n ) {\n return credentials.apiKey;\n }\n\n return yield* Effect.fail(\n UploadistaError.fromCode(\"UNKNOWN_ERROR\", {\n cause: new Error(\"Invalid credential format from service\"),\n }),\n );\n });\n }\n if (credentialProvider) {\n return Effect.gen(function* () {\n const credentials = yield* credentialProvider({\n ...context,\n serviceType: \"replicate\",\n });\n return credentials.apiKey;\n });\n }\n return Effect.fail(\n UploadistaError.fromCode(\"UNKNOWN_ERROR\", {\n cause: new Error(\"No API credentials configured\"),\n }),\n );\n };\n\n return Layer.succeed(\n DocumentAiPlugin,\n DocumentAiPlugin.of({\n performOCR: (inputUrl, params, context) => {\n return Effect.gen(function* () {\n // Get API token (static or from credential provider)\n const apiToken = yield* getApiToken(context);\n\n yield* Effect.logInfo(\n `Starting OCR for document with task type: ${params.taskType}`,\n );\n\n const output = yield* Effect.tryPromise({\n try: async () => {\n const replicate = new Replicate({\n auth: apiToken,\n });\n\n const input: Record<string, unknown> = {\n image: inputUrl,\n task_type: mapTaskType(params.taskType),\n resolution_size: mapResolution(params.resolution),\n };\n\n // Add reference text if provided and task type is locateObject\n if (params.taskType === \"locateObject\" && params.referenceText) {\n input.reference_text = params.referenceText;\n }\n\n const result = await replicate.run(ocrModelId, {\n input,\n });\n\n return result;\n },\n catch: (error) => {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n\n return UploadistaError.fromCode(\"OCR_FAILED\", {\n cause: errorMessage,\n });\n },\n }).pipe(\n Effect.tapError((error) =>\n Effect.logError(\n `OCR failed: ${error instanceof UploadistaError ? error.cause : String(error)}`,\n ),\n ),\n );\n\n // Extract text from the result\n // Replicate OCR typically returns a string or an object with text\n let extractedText: string;\n\n if (typeof output === \"string\") {\n extractedText = output;\n } else if (\n typeof output === \"object\" &&\n output !== null &&\n \"text\" in output &&\n typeof output.text === \"string\"\n ) {\n extractedText = output.text;\n } else {\n // Try to stringify if it's a different format\n extractedText = JSON.stringify(output);\n }\n\n yield* Effect.logInfo(\n `OCR completed, extracted ${extractedText.length} characters`,\n );\n\n const result: OcrResult = {\n extractedText,\n format: getFormatFromTaskType(params.taskType),\n };\n\n return result;\n }).pipe(\n withOperationSpan(\"ai\", \"ocr\", {\n \"ai.provider\": \"replicate\",\n \"ai.model\": ocrModelId,\n \"ai.task_type\": params.taskType,\n \"ai.credential_id\": context.credentialId,\n }),\n );\n },\n }),\n );\n};\n\n// Export live layer with credential provider service\nexport const ReplicateDocumentAiPluginLive = documentAiPlugin({\n useCredentialProviderService: true,\n});\n\n// Export factory function for custom configuration\nexport const createReplicateDocumentAiPlugin = documentAiPlugin;\n"],"mappings":";;;;;;;;;;AAkCA,SAAS,YAAY,UAA0B;AAC7C,SAAQ,UAAR;EACE,KAAK,oBACH,QAAO;EACT,KAAK,UACH,QAAO;EACT,KAAK,cACH,QAAO;EACT,KAAK,eACH,QAAO;EACT,QACE,QAAO;;;;;;AAOb,SAAS,cAAc,YAA6B;AAClD,SAAQ,YAAR;EACE,KAAK,OACH,QAAO;EACT,KAAK,QACH,QAAO;EACT,KAAK,OACH,QAAO;EACT,KAAK,SACH,QAAO;EACT,KAAK,QACH,QAAO;EACT,QACE,QAAO;;;;;;AAOb,SAAS,sBACP,UACqC;AACrC,SAAQ,UAAR;EACE,KAAK,oBACH,QAAO;EACT,KAAK,cACH,QAAO;EACT,QACE,QAAO;;;;;;;;;;;;;;;;;;;;;;;AAwBb,MAAa,oBACX,QACA,YAGG;CAEH,MAAM,WAAW,OAAO,WAAW;CACnC,MAAM,eAAe,WAAW,SAAS;CACzC,MAAM,qBAAqB,WAAW,OAAO,OAAO;CACpD,MAAM,+BAA+B,WACjC,QACA,OAAO;CAGX,MAAM,cACH,WAAW,SAAS,aAAa,OAAO,eACzC;CAGF,MAAM,eAAe,YAA+B;AAClD,MAAI,aACF,QAAO,OAAO,QAAQ,aAAa;AAErC,MAAI,6BACF,QAAO,OAAO,IAAI,aAAa;GAC7B,MAAM,4BAA4B,OAAO,OAAO,cAC9CA,mBACD;AAED,OAAI,OAAO,OAAO,0BAA0B,CAC1C,QAAO,OAAO,OAAO,KACnB,gBAAgB,SAAS,iBAAiB,EACxC,uBAAO,IAAI,MAAM,wCAAwC,EAC1D,CAAC,CACH;GAGH,MAAM,cACJ,OAAO,0BAA0B,MAAM,cAAc;IACnD,UAAU,QAAQ;IAClB,aAAa;IACd,CAAC;AAEJ,OACE,OAAO,gBAAgB,YACvB,gBAAgB,QAChB,YAAY,eACZ,OAAO,YAAY,WAAW,SAE9B,QAAO,YAAY;AAGrB,UAAO,OAAO,OAAO,KACnB,gBAAgB,SAAS,iBAAiB,EACxC,uBAAO,IAAI,MAAM,yCAAyC,EAC3D,CAAC,CACH;IACD;AAEJ,MAAI,mBACF,QAAO,OAAO,IAAI,aAAa;AAK7B,WAJoB,OAAO,mBAAmB;IAC5C,GAAG;IACH,aAAa;IACd,CAAC,EACiB;IACnB;AAEJ,SAAO,OAAO,KACZ,gBAAgB,SAAS,iBAAiB,EACxC,uBAAO,IAAI,MAAM,gCAAgC,EAClD,CAAC,CACH;;AAGH,QAAO,MAAM,QACX,kBACA,iBAAiB,GAAG,EAClB,aAAa,UAAU,QAAQ,YAAY;AACzC,SAAO,OAAO,IAAI,aAAa;GAE7B,MAAM,WAAW,OAAO,YAAY,QAAQ;AAE5C,UAAO,OAAO,QACZ,6CAA6C,OAAO,WACrD;GAED,MAAM,SAAS,OAAO,OAAO,WAAW;IACtC,KAAK,YAAY;KACf,MAAM,YAAY,IAAI,UAAU,EAC9B,MAAM,UACP,CAAC;KAEF,MAAM,QAAiC;MACrC,OAAO;MACP,WAAW,YAAY,OAAO,SAAS;MACvC,iBAAiB,cAAc,OAAO,WAAW;MAClD;AAGD,SAAI,OAAO,aAAa,kBAAkB,OAAO,cAC/C,OAAM,iBAAiB,OAAO;AAOhC,YAJe,MAAM,UAAU,IAAI,YAAY,EAC7C,OACD,CAAC;;IAIJ,QAAQ,UAAU;KAChB,MAAM,eACJ,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AAExD,YAAO,gBAAgB,SAAS,cAAc,EAC5C,OAAO,cACR,CAAC;;IAEL,CAAC,CAAC,KACD,OAAO,UAAU,UACf,OAAO,SACL,eAAe,iBAAiB,kBAAkB,MAAM,QAAQ,OAAO,MAAM,GAC9E,CACF,CACF;GAID,IAAI;AAEJ,OAAI,OAAO,WAAW,SACpB,iBAAgB;YAEhB,OAAO,WAAW,YAClB,WAAW,QACX,UAAU,UACV,OAAO,OAAO,SAAS,SAEvB,iBAAgB,OAAO;OAGvB,iBAAgB,KAAK,UAAU,OAAO;AAGxC,UAAO,OAAO,QACZ,4BAA4B,cAAc,OAAO,aAClD;AAOD,UAL0B;IACxB;IACA,QAAQ,sBAAsB,OAAO,SAAS;IAC/C;IAGD,CAAC,KACD,kBAAkB,MAAM,OAAO;GAC7B,eAAe;GACf,YAAY;GACZ,gBAAgB,OAAO;GACvB,oBAAoB,QAAQ;GAC7B,CAAC,CACH;IAEJ,CAAC,CACH;;AAIH,MAAa,gCAAgC,iBAAiB,EAC5D,8BAA8B,MAC/B,CAAC;AAGF,MAAa,kCAAkC"}
1
+ {"version":3,"file":"index.mjs","names":["CredentialProviderService"],"sources":["../src/document-ai-plugin.ts"],"sourcesContent":["import { UploadistaError } from \"@uploadista/core/errors\";\nimport {\n CredentialProvider as CredentialProviderService,\n type DocumentAiContext,\n DocumentAiPlugin,\n type OcrResult,\n} from \"@uploadista/core/flow\";\nimport { withOperationSpan } from \"@uploadista/observability\";\nimport { Effect, Layer, Option } from \"effect\";\nimport Replicate from \"replicate\";\n\ntype ModelId = `${string}/${string}` | `${string}/${string}:${string}`;\n\ntype ReplicateCredentials = {\n apiKey: string;\n};\n\n// Credential provider function type\ntype CredentialProvider = (\n context: DocumentAiContext & { serviceType: \"replicate\" },\n) => Effect.Effect<ReplicateCredentials, UploadistaError>;\n\n// Plugin configuration can be either a static API key or options with credential provider or service\ntype PluginConfig =\n | string\n | {\n credentialProvider?: CredentialProvider;\n useCredentialProviderService?: boolean;\n ocrModelId?: ModelId;\n };\n\n/**\n * Map OcrTaskType to Replicate model task type\n */\nfunction mapTaskType(taskType: string): string {\n switch (taskType) {\n case \"convertToMarkdown\":\n return \"Convert to Markdown\";\n case \"freeOcr\":\n return \"Free OCR\";\n case \"parseFigure\":\n return \"Parse Figure\";\n case \"locateObject\":\n return \"Locate Object by Reference\";\n default:\n return \"Convert to Markdown\";\n }\n}\n\n/**\n * Map OcrResolution to Replicate resolution parameter\n */\nfunction mapResolution(resolution?: string): string {\n switch (resolution) {\n case \"tiny\":\n return \"Tiny\";\n case \"small\":\n return \"Small\";\n case \"base\":\n return \"Base\";\n case \"gundam\":\n return \"Gundam (Recommended)\";\n case \"large\":\n return \"Large\";\n default:\n return \"Gundam (Recommended)\";\n }\n}\n\n/**\n * Determine format based on task type\n */\nfunction getFormatFromTaskType(\n taskType: string,\n): \"markdown\" | \"plain\" | \"structured\" {\n switch (taskType) {\n case \"convertToMarkdown\":\n return \"markdown\";\n case \"parseFigure\":\n return \"structured\";\n default:\n return \"plain\";\n }\n}\n\n/**\n * Create the Replicate DocumentAI plugin\n * Supports both static credentials (OSS) and dynamic credential providers (UploadistaCloud)\n *\n * @example\n * // Static credentials (OSS)\n * documentAiPlugin(process.env.REPLICATE_API_TOKEN)\n *\n * @example\n * // Dynamic credentials with function (UploadistaCloud)\n * documentAiPlugin({\n * credentialProvider: (context) => Effect.succeed({ apiKey: \"...\" })\n * })\n *\n * @example\n * // Dynamic credentials with Effect service (UploadistaCloud)\n * documentAiPlugin({\n * useCredentialProviderService: true\n * })\n */\nexport const documentAiPlugin = (\n config: PluginConfig,\n options?: {\n ocrModelId?: ModelId;\n },\n) => {\n // Parse configuration\n const isStatic = typeof config === \"string\";\n const staticApiKey = isStatic ? config : null;\n const credentialProvider = isStatic ? null : config.credentialProvider;\n const useCredentialProviderService = isStatic\n ? false\n : config.useCredentialProviderService;\n\n // Model ID for DeepSeek-OCR\n const ocrModelId =\n (isStatic ? options?.ocrModelId : config.ocrModelId) ||\n \"lucataco/deepseek-ocr:cb3b474fbfc56b1664c8c7841550bccecbe7b74c30e45ce938ffca1180b4dff5\";\n\n // Helper to get API token (either static, from provider function, or from service)\n const getApiToken = (context: DocumentAiContext) => {\n if (staticApiKey) {\n return Effect.succeed(staticApiKey);\n }\n if (useCredentialProviderService) {\n return Effect.gen(function* () {\n const credentialProviderService = yield* Effect.serviceOption(\n CredentialProviderService,\n );\n\n if (Option.isNone(credentialProviderService)) {\n return yield* Effect.fail(\n UploadistaError.fromCode(\"UNKNOWN_ERROR\", {\n cause: new Error(\"Credential provider service not found\"),\n }),\n );\n }\n\n const credentials =\n yield* credentialProviderService.value.getCredential({\n clientId: context.clientId,\n serviceType: \"replicate\",\n });\n\n if (\n typeof credentials === \"object\" &&\n credentials !== null &&\n \"apiKey\" in credentials &&\n typeof credentials.apiKey === \"string\"\n ) {\n return credentials.apiKey;\n }\n\n return yield* Effect.fail(\n UploadistaError.fromCode(\"UNKNOWN_ERROR\", {\n cause: new Error(\"Invalid credential format from service\"),\n }),\n );\n });\n }\n if (credentialProvider) {\n return Effect.gen(function* () {\n const credentials = yield* credentialProvider({\n ...context,\n serviceType: \"replicate\",\n });\n return credentials.apiKey;\n });\n }\n return Effect.fail(\n UploadistaError.fromCode(\"UNKNOWN_ERROR\", {\n cause: new Error(\"No API credentials configured\"),\n }),\n );\n };\n\n return Layer.succeed(\n DocumentAiPlugin,\n DocumentAiPlugin.of({\n performOCR: (inputUrl, params, context) => {\n return Effect.gen(function* () {\n // Get API token (static or from credential provider)\n const apiToken = yield* getApiToken(context);\n\n yield* Effect.logInfo(\n `Starting OCR for document with task type: ${params.taskType}`,\n );\n\n const output = yield* Effect.tryPromise({\n try: async () => {\n const replicate = new Replicate({\n auth: apiToken,\n });\n\n const input: Record<string, unknown> = {\n image: inputUrl,\n task_type: mapTaskType(params.taskType),\n resolution_size: mapResolution(params.resolution),\n };\n\n // Add reference text if provided and task type is locateObject\n if (params.taskType === \"locateObject\" && params.referenceText) {\n input.reference_text = params.referenceText;\n }\n\n const result = await replicate.run(ocrModelId, {\n input,\n });\n\n return result;\n },\n catch: (error) => {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n\n return UploadistaError.fromCode(\"OCR_FAILED\", {\n cause: errorMessage,\n });\n },\n }).pipe(\n Effect.tapError((error) =>\n Effect.logError(\n `OCR failed: ${error instanceof UploadistaError ? error.cause : String(error)}`,\n ),\n ),\n );\n\n // Extract text from the result\n // Replicate OCR typically returns a string or an object with text\n let extractedText: string;\n\n if (typeof output === \"string\") {\n extractedText = output;\n } else if (\n typeof output === \"object\" &&\n output !== null &&\n \"text\" in output &&\n typeof output.text === \"string\"\n ) {\n extractedText = output.text;\n } else {\n // Try to stringify if it's a different format\n extractedText = JSON.stringify(output);\n }\n\n yield* Effect.logInfo(\n `OCR completed, extracted ${extractedText.length} characters`,\n );\n\n const result: OcrResult = {\n extractedText,\n format: getFormatFromTaskType(params.taskType),\n };\n\n return result;\n }).pipe(\n withOperationSpan(\"ai\", \"ocr\", {\n \"ai.provider\": \"replicate\",\n \"ai.model\": ocrModelId,\n \"ai.task_type\": params.taskType,\n \"ai.credential_id\": context.credentialId,\n }),\n );\n },\n }),\n );\n};\n\n// Export live layer with credential provider service\nexport const ReplicateDocumentAiPluginLive = documentAiPlugin({\n useCredentialProviderService: true,\n});\n\n// Export factory function for custom configuration\nexport const createReplicateDocumentAiPlugin = documentAiPlugin;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@uploadista/flow-documents-replicate",
3
3
  "type": "module",
4
- "version": "0.1.3-beta.7",
4
+ "version": "0.1.3",
5
5
  "description": "Replicate OCR plugin for Uploadista document processing",
6
6
  "license": "MIT",
7
7
  "author": "Uploadista",
@@ -15,8 +15,8 @@
15
15
  },
16
16
  "dependencies": {
17
17
  "replicate": "1.4.0",
18
- "@uploadista/core": "0.1.3-beta.7",
19
- "@uploadista/observability": "0.1.3-beta.7"
18
+ "@uploadista/core": "0.1.3",
19
+ "@uploadista/observability": "0.1.3"
20
20
  },
21
21
  "peerDependencies": {
22
22
  "effect": "^3.0.0"
@@ -25,7 +25,7 @@
25
25
  "@types/node": "24.10.9",
26
26
  "effect": "3.19.15",
27
27
  "tsdown": "0.20.1",
28
- "@uploadista/typescript-config": "0.1.3-beta.7"
28
+ "@uploadista/typescript-config": "0.1.3"
29
29
  },
30
30
  "scripts": {
31
31
  "build": "tsc --noEmit && tsdown",
@@ -120,7 +120,7 @@ export const documentAiPlugin = (
120
120
  // Model ID for DeepSeek-OCR
121
121
  const ocrModelId =
122
122
  (isStatic ? options?.ocrModelId : config.ocrModelId) ||
123
- "lucataco/deepseek-ocr:0080ec8faf4da6a14afb8502e96f5bb53afbc28b40e2d4a5e17945b8f69eb863";
123
+ "lucataco/deepseek-ocr:cb3b474fbfc56b1664c8c7841550bccecbe7b74c30e45ce938ffca1180b4dff5";
124
124
 
125
125
  // Helper to get API token (either static, from provider function, or from service)
126
126
  const getApiToken = (context: DocumentAiContext) => {