mindee-lite 5.0.0.beta1

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 (510) hide show
  1. checksums.yaml +7 -0
  2. data/.editorconfig +24 -0
  3. data/.gitattributes +14 -0
  4. data/.gitignore +76 -0
  5. data/.gitmodules +3 -0
  6. data/.pre-commit-config.yaml +36 -0
  7. data/.rubocop.yml +49 -0
  8. data/.yardopts +4 -0
  9. data/CHANGELOG.md +515 -0
  10. data/CODE_OF_CONDUCT.md +129 -0
  11. data/CONTRIBUTING.md +107 -0
  12. data/Gemfile +14 -0
  13. data/LICENSE +21 -0
  14. data/README.md +42 -0
  15. data/Rakefile +40 -0
  16. data/Steepfile +30 -0
  17. data/bin/console +14 -0
  18. data/bin/mindee.rb +30 -0
  19. data/bin/v1/parser.rb +153 -0
  20. data/bin/v1/products.rb +88 -0
  21. data/bin/v2/parser.rb +235 -0
  22. data/bin/v2/products.rb +34 -0
  23. data/docs/code_samples/bank_account_details_v1.txt +24 -0
  24. data/docs/code_samples/bank_account_details_v2.txt +24 -0
  25. data/docs/code_samples/bank_statement_fr_v2_async.txt +24 -0
  26. data/docs/code_samples/barcode_reader_v1.txt +24 -0
  27. data/docs/code_samples/cropper_v1.txt +21 -0
  28. data/docs/code_samples/default.txt +30 -0
  29. data/docs/code_samples/default_async.txt +29 -0
  30. data/docs/code_samples/expense_receipts_v5.txt +25 -0
  31. data/docs/code_samples/expense_receipts_v5_async.txt +24 -0
  32. data/docs/code_samples/financial_document_v1.txt +25 -0
  33. data/docs/code_samples/financial_document_v1_async.txt +24 -0
  34. data/docs/code_samples/idcard_fr_v1.txt +24 -0
  35. data/docs/code_samples/idcard_fr_v2.txt +24 -0
  36. data/docs/code_samples/international_id_v2_async.txt +24 -0
  37. data/docs/code_samples/invoice_splitter_v1_async.txt +24 -0
  38. data/docs/code_samples/invoices_v4.txt +25 -0
  39. data/docs/code_samples/invoices_v4_async.txt +24 -0
  40. data/docs/code_samples/multi_receipts_detector_v1.txt +24 -0
  41. data/docs/code_samples/passport_v1.txt +24 -0
  42. data/docs/code_samples/resume_v1_async.txt +24 -0
  43. data/docs/code_samples/v2_classification.txt +30 -0
  44. data/docs/code_samples/v2_crop.txt +30 -0
  45. data/docs/code_samples/v2_extraction.txt +42 -0
  46. data/docs/code_samples/v2_extraction_webhook.txt +45 -0
  47. data/docs/code_samples/v2_ocr.txt +30 -0
  48. data/docs/code_samples/v2_split.txt +30 -0
  49. data/docs/code_samples/workflow_execution.txt +28 -0
  50. data/docs/code_samples/workflow_polling.txt +35 -0
  51. data/examples/auto_invoice_splitter_extraction.rb +48 -0
  52. data/examples/auto_multi_receipts_detector_extraction.rb +30 -0
  53. data/lib/mindee/dependency.rb +29 -0
  54. data/lib/mindee/error/mindee_error.rb +17 -0
  55. data/lib/mindee/error/mindee_http_error.rb +36 -0
  56. data/lib/mindee/error/mindee_http_error_v2.rb +45 -0
  57. data/lib/mindee/error/mindee_http_unknown_error_v2.rb +18 -0
  58. data/lib/mindee/error/mindee_input_error.rb +30 -0
  59. data/lib/mindee/error.rb +6 -0
  60. data/lib/mindee/geometry/min_max.rb +23 -0
  61. data/lib/mindee/geometry/point.rb +41 -0
  62. data/lib/mindee/geometry/polygon.rb +37 -0
  63. data/lib/mindee/geometry/quadrilateral.rb +50 -0
  64. data/lib/mindee/geometry/utils.rb +88 -0
  65. data/lib/mindee/geometry.rb +7 -0
  66. data/lib/mindee/http/.rubocop.yml +7 -0
  67. data/lib/mindee/http/http_error_handler.rb +106 -0
  68. data/lib/mindee/http/response_validation.rb +81 -0
  69. data/lib/mindee/http.rb +3 -0
  70. data/lib/mindee/image/extracted_image.rb +89 -0
  71. data/lib/mindee/image/image_compressor.rb +29 -0
  72. data/lib/mindee/image/image_extractor.rb +118 -0
  73. data/lib/mindee/image/image_utils.rb +165 -0
  74. data/lib/mindee/image.rb +6 -0
  75. data/lib/mindee/input/base_parameters.rb +149 -0
  76. data/lib/mindee/input/local_response.rb +80 -0
  77. data/lib/mindee/input/polling_options.rb +26 -0
  78. data/lib/mindee/input/sources/base64_input_source.rb +31 -0
  79. data/lib/mindee/input/sources/bytes_input_source.rb +21 -0
  80. data/lib/mindee/input/sources/file_input_source.rb +20 -0
  81. data/lib/mindee/input/sources/local_input_source.rb +216 -0
  82. data/lib/mindee/input/sources/path_input_source.rb +20 -0
  83. data/lib/mindee/input/sources/url_input_source.rb +130 -0
  84. data/lib/mindee/input/sources.rb +8 -0
  85. data/lib/mindee/input.rb +4 -0
  86. data/lib/mindee/logging/logger.rb +24 -0
  87. data/lib/mindee/logging.rb +3 -0
  88. data/lib/mindee/page_options.rb +24 -0
  89. data/lib/mindee/pdf/extracted_pdf.rb +70 -0
  90. data/lib/mindee/pdf/pdf_compressor.rb +121 -0
  91. data/lib/mindee/pdf/pdf_extractor.rb +121 -0
  92. data/lib/mindee/pdf/pdf_processor.rb +91 -0
  93. data/lib/mindee/pdf/pdf_tools.rb +201 -0
  94. data/lib/mindee/pdf.rb +7 -0
  95. data/lib/mindee/v1/client.rb +490 -0
  96. data/lib/mindee/v1/extraction/multi_receipts_extractor.rb +32 -0
  97. data/lib/mindee/v1/extraction.rb +3 -0
  98. data/lib/mindee/v1/http/.rubocop.yml +7 -0
  99. data/lib/mindee/v1/http/endpoint.rb +221 -0
  100. data/lib/mindee/v1/http/workflow_endpoint.rb +93 -0
  101. data/lib/mindee/v1/http.rb +4 -0
  102. data/lib/mindee/v1/parsing/common/api_request.rb +38 -0
  103. data/lib/mindee/v1/parsing/common/api_response.rb +63 -0
  104. data/lib/mindee/v1/parsing/common/document.rb +86 -0
  105. data/lib/mindee/v1/parsing/common/execution.rb +78 -0
  106. data/lib/mindee/v1/parsing/common/execution_file.rb +26 -0
  107. data/lib/mindee/v1/parsing/common/execution_priority.rb +38 -0
  108. data/lib/mindee/v1/parsing/common/extras/cropper_extra.rb +32 -0
  109. data/lib/mindee/v1/parsing/common/extras/extras.rb +62 -0
  110. data/lib/mindee/v1/parsing/common/extras/full_text_ocr_extra.rb +35 -0
  111. data/lib/mindee/v1/parsing/common/extras/rag_extra.rb +28 -0
  112. data/lib/mindee/v1/parsing/common/extras.rb +6 -0
  113. data/lib/mindee/v1/parsing/common/inference.rb +69 -0
  114. data/lib/mindee/v1/parsing/common/job.rb +48 -0
  115. data/lib/mindee/v1/parsing/common/ocr/mvision_v1.rb +52 -0
  116. data/lib/mindee/v1/parsing/common/ocr/ocr.rb +180 -0
  117. data/lib/mindee/v1/parsing/common/ocr.rb +3 -0
  118. data/lib/mindee/v1/parsing/common/orientation.rb +28 -0
  119. data/lib/mindee/v1/parsing/common/page.rb +49 -0
  120. data/lib/mindee/v1/parsing/common/prediction.rb +19 -0
  121. data/lib/mindee/v1/parsing/common/product.rb +26 -0
  122. data/lib/mindee/v1/parsing/common/workflow_response.rb +30 -0
  123. data/lib/mindee/v1/parsing/common.rb +15 -0
  124. data/lib/mindee/v1/parsing/standard/abstract_field.rb +74 -0
  125. data/lib/mindee/v1/parsing/standard/address_field.rb +51 -0
  126. data/lib/mindee/v1/parsing/standard/amount_field.rb +28 -0
  127. data/lib/mindee/v1/parsing/standard/base_field.rb +30 -0
  128. data/lib/mindee/v1/parsing/standard/boolean_field.rb +29 -0
  129. data/lib/mindee/v1/parsing/standard/classification_field.rb +18 -0
  130. data/lib/mindee/v1/parsing/standard/company_registration_field.rb +45 -0
  131. data/lib/mindee/v1/parsing/standard/date_field.rb +40 -0
  132. data/lib/mindee/v1/parsing/standard/feature_field.rb +26 -0
  133. data/lib/mindee/v1/parsing/standard/locale_field.rb +52 -0
  134. data/lib/mindee/v1/parsing/standard/payment_details_field.rb +44 -0
  135. data/lib/mindee/v1/parsing/standard/position_field.rb +61 -0
  136. data/lib/mindee/v1/parsing/standard/string_field.rb +26 -0
  137. data/lib/mindee/v1/parsing/standard/tax_field.rb +110 -0
  138. data/lib/mindee/v1/parsing/standard.rb +15 -0
  139. data/lib/mindee/v1/parsing/universal/universal_list_field.rb +60 -0
  140. data/lib/mindee/v1/parsing/universal/universal_object_field.rb +123 -0
  141. data/lib/mindee/v1/parsing/universal.rb +4 -0
  142. data/lib/mindee/v1/parsing.rb +5 -0
  143. data/lib/mindee/v1/product/.rubocop.yml +12 -0
  144. data/lib/mindee/v1/product/barcode_reader/barcode_reader_v1.rb +47 -0
  145. data/lib/mindee/v1/product/barcode_reader/barcode_reader_v1_document.rb +47 -0
  146. data/lib/mindee/v1/product/barcode_reader/barcode_reader_v1_page.rb +38 -0
  147. data/lib/mindee/v1/product/cropper/cropper_v1.rb +47 -0
  148. data/lib/mindee/v1/product/cropper/cropper_v1_document.rb +15 -0
  149. data/lib/mindee/v1/product/cropper/cropper_v1_page.rb +55 -0
  150. data/lib/mindee/v1/product/financial_document/financial_document_v1.rb +47 -0
  151. data/lib/mindee/v1/product/financial_document/financial_document_v1_document.rb +329 -0
  152. data/lib/mindee/v1/product/financial_document/financial_document_v1_line_item.rb +124 -0
  153. data/lib/mindee/v1/product/financial_document/financial_document_v1_line_items.rb +64 -0
  154. data/lib/mindee/v1/product/financial_document/financial_document_v1_page.rb +38 -0
  155. data/lib/mindee/v1/product/fr/bank_account_details/bank_account_details_v1.rb +49 -0
  156. data/lib/mindee/v1/product/fr/bank_account_details/bank_account_details_v1_document.rb +49 -0
  157. data/lib/mindee/v1/product/fr/bank_account_details/bank_account_details_v1_page.rb +40 -0
  158. data/lib/mindee/v1/product/fr/bank_account_details/bank_account_details_v2.rb +49 -0
  159. data/lib/mindee/v1/product/fr/bank_account_details/bank_account_details_v2_bban.rb +63 -0
  160. data/lib/mindee/v1/product/fr/bank_account_details/bank_account_details_v2_document.rb +60 -0
  161. data/lib/mindee/v1/product/fr/bank_account_details/bank_account_details_v2_page.rb +40 -0
  162. data/lib/mindee/v1/product/fr/bank_statement/bank_statement_v2.rb +49 -0
  163. data/lib/mindee/v1/product/fr/bank_statement/bank_statement_v2_document.rb +169 -0
  164. data/lib/mindee/v1/product/fr/bank_statement/bank_statement_v2_page.rb +40 -0
  165. data/lib/mindee/v1/product/fr/bank_statement/bank_statement_v2_transaction.rb +78 -0
  166. data/lib/mindee/v1/product/fr/bank_statement/bank_statement_v2_transactions.rb +56 -0
  167. data/lib/mindee/v1/product/fr/id_card/id_card_v1.rb +49 -0
  168. data/lib/mindee/v1/product/fr/id_card/id_card_v1_document.rb +106 -0
  169. data/lib/mindee/v1/product/fr/id_card/id_card_v1_page.rb +57 -0
  170. data/lib/mindee/v1/product/fr/id_card/id_card_v2.rb +49 -0
  171. data/lib/mindee/v1/product/fr/id_card/id_card_v2_document.rb +143 -0
  172. data/lib/mindee/v1/product/fr/id_card/id_card_v2_page.rb +65 -0
  173. data/lib/mindee/v1/product/international_id/international_id_v2.rb +47 -0
  174. data/lib/mindee/v1/product/international_id/international_id_v2_document.rb +164 -0
  175. data/lib/mindee/v1/product/international_id/international_id_v2_page.rb +38 -0
  176. data/lib/mindee/v1/product/invoice/invoice_v4.rb +47 -0
  177. data/lib/mindee/v1/product/invoice/invoice_v4_document.rb +300 -0
  178. data/lib/mindee/v1/product/invoice/invoice_v4_line_item.rb +124 -0
  179. data/lib/mindee/v1/product/invoice/invoice_v4_line_items.rb +64 -0
  180. data/lib/mindee/v1/product/invoice/invoice_v4_page.rb +38 -0
  181. data/lib/mindee/v1/product/invoice_splitter/invoice_splitter_v1.rb +47 -0
  182. data/lib/mindee/v1/product/invoice_splitter/invoice_splitter_v1_document.rb +66 -0
  183. data/lib/mindee/v1/product/invoice_splitter/invoice_splitter_v1_invoice_page_group.rb +58 -0
  184. data/lib/mindee/v1/product/invoice_splitter/invoice_splitter_v1_invoice_page_groups.rb +50 -0
  185. data/lib/mindee/v1/product/invoice_splitter/invoice_splitter_v1_page.rb +38 -0
  186. data/lib/mindee/v1/product/multi_receipts_detector/multi_receipts_detector_v1.rb +47 -0
  187. data/lib/mindee/v1/product/multi_receipts_detector/multi_receipts_detector_v1_document.rb +38 -0
  188. data/lib/mindee/v1/product/multi_receipts_detector/multi_receipts_detector_v1_page.rb +38 -0
  189. data/lib/mindee/v1/product/passport/passport_v1.rb +47 -0
  190. data/lib/mindee/v1/product/passport/passport_v1_document.rb +112 -0
  191. data/lib/mindee/v1/product/passport/passport_v1_page.rb +38 -0
  192. data/lib/mindee/v1/product/receipt/receipt_v5.rb +47 -0
  193. data/lib/mindee/v1/product/receipt/receipt_v5_document.rb +187 -0
  194. data/lib/mindee/v1/product/receipt/receipt_v5_line_item.rb +88 -0
  195. data/lib/mindee/v1/product/receipt/receipt_v5_line_items.rb +56 -0
  196. data/lib/mindee/v1/product/receipt/receipt_v5_page.rb +38 -0
  197. data/lib/mindee/v1/product/resume/resume_v1.rb +47 -0
  198. data/lib/mindee/v1/product/resume/resume_v1_certificate.rb +82 -0
  199. data/lib/mindee/v1/product/resume/resume_v1_certificates.rb +60 -0
  200. data/lib/mindee/v1/product/resume/resume_v1_document.rb +340 -0
  201. data/lib/mindee/v1/product/resume/resume_v1_education.rb +106 -0
  202. data/lib/mindee/v1/product/resume/resume_v1_educations.rb +66 -0
  203. data/lib/mindee/v1/product/resume/resume_v1_language.rb +66 -0
  204. data/lib/mindee/v1/product/resume/resume_v1_languages.rb +56 -0
  205. data/lib/mindee/v1/product/resume/resume_v1_page.rb +38 -0
  206. data/lib/mindee/v1/product/resume/resume_v1_professional_experience.rb +122 -0
  207. data/lib/mindee/v1/product/resume/resume_v1_professional_experiences.rb +70 -0
  208. data/lib/mindee/v1/product/resume/resume_v1_social_networks_url.rb +66 -0
  209. data/lib/mindee/v1/product/resume/resume_v1_social_networks_urls.rb +56 -0
  210. data/lib/mindee/v1/product/universal/universal.rb +48 -0
  211. data/lib/mindee/v1/product/universal/universal_document.rb +35 -0
  212. data/lib/mindee/v1/product/universal/universal_page.rb +54 -0
  213. data/lib/mindee/v1/product/universal/universal_prediction.rb +128 -0
  214. data/lib/mindee/v1/product.rb +18 -0
  215. data/lib/mindee/v1.rb +7 -0
  216. data/lib/mindee/v2/client.rb +132 -0
  217. data/lib/mindee/v2/file_operation/crop.rb +51 -0
  218. data/lib/mindee/v2/file_operation/crop_files.rb +25 -0
  219. data/lib/mindee/v2/file_operation/split.rb +37 -0
  220. data/lib/mindee/v2/file_operation/split_files.rb +25 -0
  221. data/lib/mindee/v2/file_operation.rb +6 -0
  222. data/lib/mindee/v2/http/.rubocop.yml +7 -0
  223. data/lib/mindee/v2/http/api_v2_settings.rb +65 -0
  224. data/lib/mindee/v2/http/mindee_api_v2.rb +230 -0
  225. data/lib/mindee/v2/http.rb +4 -0
  226. data/lib/mindee/v2/parsing/base_inference.rb +44 -0
  227. data/lib/mindee/v2/parsing/base_response.rb +15 -0
  228. data/lib/mindee/v2/parsing/common_response.rb +20 -0
  229. data/lib/mindee/v2/parsing/error_item.rb +21 -0
  230. data/lib/mindee/v2/parsing/error_response.rb +51 -0
  231. data/lib/mindee/v2/parsing/field/base_field.rb +63 -0
  232. data/lib/mindee/v2/parsing/field/field_confidence.rb +128 -0
  233. data/lib/mindee/v2/parsing/field/field_location.rb +33 -0
  234. data/lib/mindee/v2/parsing/field/inference_fields.rb +105 -0
  235. data/lib/mindee/v2/parsing/field/list_field.rb +79 -0
  236. data/lib/mindee/v2/parsing/field/object_field.rb +138 -0
  237. data/lib/mindee/v2/parsing/field/simple_field.rb +60 -0
  238. data/lib/mindee/v2/parsing/field.rb +9 -0
  239. data/lib/mindee/v2/parsing/inference_active_options.rb +67 -0
  240. data/lib/mindee/v2/parsing/inference_file.rb +38 -0
  241. data/lib/mindee/v2/parsing/inference_job.rb +25 -0
  242. data/lib/mindee/v2/parsing/inference_model.rb +30 -0
  243. data/lib/mindee/v2/parsing/job.rb +93 -0
  244. data/lib/mindee/v2/parsing/job_response.rb +30 -0
  245. data/lib/mindee/v2/parsing/job_webhook.rb +59 -0
  246. data/lib/mindee/v2/parsing/rag_metadata.rb +17 -0
  247. data/lib/mindee/v2/parsing/raw_text.rb +27 -0
  248. data/lib/mindee/v2/parsing/raw_text_page.rb +24 -0
  249. data/lib/mindee/v2/parsing/search/pagination_metadata.rb +44 -0
  250. data/lib/mindee/v2/parsing/search/search_model.rb +38 -0
  251. data/lib/mindee/v2/parsing/search/search_models.rb +34 -0
  252. data/lib/mindee/v2/parsing/search/search_response.rb +38 -0
  253. data/lib/mindee/v2/parsing/search.rb +6 -0
  254. data/lib/mindee/v2/parsing.rb +16 -0
  255. data/lib/mindee/v2/product/base_product.rb +28 -0
  256. data/lib/mindee/v2/product/classification/classification.rb +20 -0
  257. data/lib/mindee/v2/product/classification/classification_classifier.rb +25 -0
  258. data/lib/mindee/v2/product/classification/classification_inference.rb +35 -0
  259. data/lib/mindee/v2/product/classification/classification_response.rb +32 -0
  260. data/lib/mindee/v2/product/classification/classification_result.rb +27 -0
  261. data/lib/mindee/v2/product/classification/params/classification_parameters.rb +47 -0
  262. data/lib/mindee/v2/product/crop/crop.rb +20 -0
  263. data/lib/mindee/v2/product/crop/crop_inference.rb +34 -0
  264. data/lib/mindee/v2/product/crop/crop_item.rb +39 -0
  265. data/lib/mindee/v2/product/crop/crop_response.rb +40 -0
  266. data/lib/mindee/v2/product/crop/crop_result.rb +34 -0
  267. data/lib/mindee/v2/product/crop/params/crop_parameters.rb +47 -0
  268. data/lib/mindee/v2/product/extraction/extraction.rb +21 -0
  269. data/lib/mindee/v2/product/extraction/extraction_inference.rb +40 -0
  270. data/lib/mindee/v2/product/extraction/extraction_response.rb +32 -0
  271. data/lib/mindee/v2/product/extraction/extraction_result.rb +44 -0
  272. data/lib/mindee/v2/product/extraction/params/data_schema.rb +51 -0
  273. data/lib/mindee/v2/product/extraction/params/data_schema_field.rb +69 -0
  274. data/lib/mindee/v2/product/extraction/params/data_schema_replace.rb +39 -0
  275. data/lib/mindee/v2/product/extraction/params/extraction_parameters.rb +125 -0
  276. data/lib/mindee/v2/product/ocr/ocr.rb +20 -0
  277. data/lib/mindee/v2/product/ocr/ocr_inference.rb +34 -0
  278. data/lib/mindee/v2/product/ocr/ocr_page.rb +33 -0
  279. data/lib/mindee/v2/product/ocr/ocr_response.rb +32 -0
  280. data/lib/mindee/v2/product/ocr/ocr_result.rb +34 -0
  281. data/lib/mindee/v2/product/ocr/ocr_word.rb +29 -0
  282. data/lib/mindee/v2/product/ocr/params/ocr_parameters.rb +47 -0
  283. data/lib/mindee/v2/product/split/params/split_parameters.rb +48 -0
  284. data/lib/mindee/v2/product/split/split.rb +19 -0
  285. data/lib/mindee/v2/product/split/split_inference.rb +34 -0
  286. data/lib/mindee/v2/product/split/split_range.rb +38 -0
  287. data/lib/mindee/v2/product/split/split_response.rb +40 -0
  288. data/lib/mindee/v2/product/split/split_result.rb +34 -0
  289. data/lib/mindee/v2/product.rb +7 -0
  290. data/lib/mindee/v2.rb +7 -0
  291. data/lib/mindee/version.rb +26 -0
  292. data/lib/mindee.rb +135 -0
  293. data/mindee-lite.gemspec +36 -0
  294. data/mindee.gemspec +44 -0
  295. data/sig/custom/marcel.rbs +3 -0
  296. data/sig/custom/mini_magick.rbs +31 -0
  297. data/sig/custom/net_http.rbs +43 -0
  298. data/sig/custom/origami.rbs +59 -0
  299. data/sig/mindee/dependency.rbs +13 -0
  300. data/sig/mindee/error/mindee_error.rbs +13 -0
  301. data/sig/mindee/error/mindee_http_error.rbs +17 -0
  302. data/sig/mindee/error/mindee_http_error_v2.rbs +15 -0
  303. data/sig/mindee/error/mindee_http_unknown_error_v2.rbs +9 -0
  304. data/sig/mindee/error/mindee_input_error.rbs +18 -0
  305. data/sig/mindee/geometry/min_max.rbs +11 -0
  306. data/sig/mindee/geometry/point.rbs +14 -0
  307. data/sig/mindee/geometry/polygon.rbs +12 -0
  308. data/sig/mindee/geometry/quadrilateral.rbs +15 -0
  309. data/sig/mindee/geometry/utils.rbs +13 -0
  310. data/sig/mindee/http/http_error_handler.rbs +15 -0
  311. data/sig/mindee/http/response_validation.rbs +11 -0
  312. data/sig/mindee/image/extracted_image.rbs +21 -0
  313. data/sig/mindee/image/image_compressor.rbs +8 -0
  314. data/sig/mindee/image/image_extractor.rbs +13 -0
  315. data/sig/mindee/image/image_utils.rbs +19 -0
  316. data/sig/mindee/input/base_parameters.rbs +35 -0
  317. data/sig/mindee/input/local_response.rbs +14 -0
  318. data/sig/mindee/input/polling_options.rbs +12 -0
  319. data/sig/mindee/input/sources/base64_input_source.rbs +11 -0
  320. data/sig/mindee/input/sources/bytes_input_source.rbs +10 -0
  321. data/sig/mindee/input/sources/file_input_source.rbs +10 -0
  322. data/sig/mindee/input/sources/local_input_source.rbs +30 -0
  323. data/sig/mindee/input/sources/path_input_source.rbs +10 -0
  324. data/sig/mindee/input/sources/url_input_source.rbs +20 -0
  325. data/sig/mindee/logging/logger.rbs +11 -0
  326. data/sig/mindee/page_options.rbs +11 -0
  327. data/sig/mindee/pdf/extracted_pdf.rbs +17 -0
  328. data/sig/mindee/pdf/pdf_compressor.rbs +15 -0
  329. data/sig/mindee/pdf/pdf_extractor.rbs +19 -0
  330. data/sig/mindee/pdf/pdf_processor.rbs +12 -0
  331. data/sig/mindee/pdf/pdf_tools.rbs +31 -0
  332. data/sig/mindee/v1/client.rbs +84 -0
  333. data/sig/mindee/v1/extraction/multi_receipts_extractor.rbs +8 -0
  334. data/sig/mindee/v1/http/endpoint.rbs +41 -0
  335. data/sig/mindee/v1/http/workflow_endpoint.rbs +22 -0
  336. data/sig/mindee/v1/parsing/common/api_request.rbs +22 -0
  337. data/sig/mindee/v1/parsing/common/api_response.rbs +31 -0
  338. data/sig/mindee/v1/parsing/common/document.rbs +32 -0
  339. data/sig/mindee/v1/parsing/common/execution.rbs +26 -0
  340. data/sig/mindee/v1/parsing/common/execution_file.rbs +16 -0
  341. data/sig/mindee/v1/parsing/common/execution_priority.rbs +16 -0
  342. data/sig/mindee/v1/parsing/common/extras/cropper_extra.rbs +18 -0
  343. data/sig/mindee/v1/parsing/common/extras/extras.rbs +24 -0
  344. data/sig/mindee/v1/parsing/common/extras/full_text_ocr_extra.rbs +22 -0
  345. data/sig/mindee/v1/parsing/common/extras/rag_extra.rbs +19 -0
  346. data/sig/mindee/v1/parsing/common/inference.rbs +31 -0
  347. data/sig/mindee/v1/parsing/common/job.rbs +24 -0
  348. data/sig/mindee/v1/parsing/common/ocr/mvision_v1.rbs +20 -0
  349. data/sig/mindee/v1/parsing/common/ocr/ocr.rbs +56 -0
  350. data/sig/mindee/v1/parsing/common/orientation.rbs +15 -0
  351. data/sig/mindee/v1/parsing/common/page.rbs +19 -0
  352. data/sig/mindee/v1/parsing/common/prediction.rbs +14 -0
  353. data/sig/mindee/v1/parsing/common/product.rbs +16 -0
  354. data/sig/mindee/v1/parsing/common/workflow_response.rbs +22 -0
  355. data/sig/mindee/v1/parsing/standard/abstract_field.rbs +30 -0
  356. data/sig/mindee/v1/parsing/standard/address_field.rbs +28 -0
  357. data/sig/mindee/v1/parsing/standard/amount_field.rbs +16 -0
  358. data/sig/mindee/v1/parsing/standard/base_field.rbs +16 -0
  359. data/sig/mindee/v1/parsing/standard/boolean_field.rbs +16 -0
  360. data/sig/mindee/v1/parsing/standard/classification_field.rbs +12 -0
  361. data/sig/mindee/v1/parsing/standard/company_registration_field.rbs +20 -0
  362. data/sig/mindee/v1/parsing/standard/date_field.rbs +20 -0
  363. data/sig/mindee/v1/parsing/standard/feature_field.rbs +12 -0
  364. data/sig/mindee/v1/parsing/standard/locale_field.rbs +24 -0
  365. data/sig/mindee/v1/parsing/standard/payment_details_field.rbs +19 -0
  366. data/sig/mindee/v1/parsing/standard/position_field.rbs +26 -0
  367. data/sig/mindee/v1/parsing/standard/string_field.rbs +16 -0
  368. data/sig/mindee/v1/parsing/standard/tax_field.rbs +33 -0
  369. data/sig/mindee/v1/parsing/universal/universal_list_field.rbs +21 -0
  370. data/sig/mindee/v1/parsing/universal/universal_object_field.rbs +38 -0
  371. data/sig/mindee/v1/product/barcode_reader/barcode_reader_v1.rbs +13 -0
  372. data/sig/mindee/v1/product/barcode_reader/barcode_reader_v1_document.rbs +16 -0
  373. data/sig/mindee/v1/product/barcode_reader/barcode_reader_v1_page.rbs +17 -0
  374. data/sig/mindee/v1/product/cropper/cropper_v1.rbs +13 -0
  375. data/sig/mindee/v1/product/cropper/cropper_v1_document.rbs +14 -0
  376. data/sig/mindee/v1/product/cropper/cropper_v1_page.rbs +19 -0
  377. data/sig/mindee/v1/product/financial_document/financial_document_v1.rbs +13 -0
  378. data/sig/mindee/v1/product/financial_document/financial_document_v1_document.rbs +49 -0
  379. data/sig/mindee/v1/product/financial_document/financial_document_v1_line_item.rbs +35 -0
  380. data/sig/mindee/v1/product/financial_document/financial_document_v1_line_items.rbs +15 -0
  381. data/sig/mindee/v1/product/financial_document/financial_document_v1_page.rbs +17 -0
  382. data/sig/mindee/v1/product/fr/bank_account_details/bank_account_details_v1.rbs +15 -0
  383. data/sig/mindee/v1/product/fr/bank_account_details/bank_account_details_v1_document.rbs +19 -0
  384. data/sig/mindee/v1/product/fr/bank_account_details/bank_account_details_v1_page.rbs +19 -0
  385. data/sig/mindee/v1/product/fr/bank_account_details/bank_account_details_v2.rbs +15 -0
  386. data/sig/mindee/v1/product/fr/bank_account_details/bank_account_details_v2_bban.rbs +25 -0
  387. data/sig/mindee/v1/product/fr/bank_account_details/bank_account_details_v2_document.rbs +20 -0
  388. data/sig/mindee/v1/product/fr/bank_account_details/bank_account_details_v2_page.rbs +19 -0
  389. data/sig/mindee/v1/product/fr/bank_statement/bank_statement_v2.rbs +15 -0
  390. data/sig/mindee/v1/product/fr/bank_statement/bank_statement_v2_document.rbs +31 -0
  391. data/sig/mindee/v1/product/fr/bank_statement/bank_statement_v2_page.rbs +19 -0
  392. data/sig/mindee/v1/product/fr/bank_statement/bank_statement_v2_transaction.rbs +27 -0
  393. data/sig/mindee/v1/product/fr/bank_statement/bank_statement_v2_transactions.rbs +17 -0
  394. data/sig/mindee/v1/product/fr/id_card/id_card_v1.rbs +15 -0
  395. data/sig/mindee/v1/product/fr/id_card/id_card_v1_document.rbs +26 -0
  396. data/sig/mindee/v1/product/fr/id_card/id_card_v1_page.rbs +20 -0
  397. data/sig/mindee/v1/product/fr/id_card/id_card_v2.rbs +15 -0
  398. data/sig/mindee/v1/product/fr/id_card/id_card_v2_document.rbs +31 -0
  399. data/sig/mindee/v1/product/fr/id_card/id_card_v2_page.rbs +21 -0
  400. data/sig/mindee/v1/product/international_id/international_id_v2.rbs +13 -0
  401. data/sig/mindee/v1/product/international_id/international_id_v2_document.rbs +31 -0
  402. data/sig/mindee/v1/product/international_id/international_id_v2_page.rbs +17 -0
  403. data/sig/mindee/v1/product/invoice/invoice_v4.rbs +13 -0
  404. data/sig/mindee/v1/product/invoice/invoice_v4_document.rbs +45 -0
  405. data/sig/mindee/v1/product/invoice/invoice_v4_line_item.rbs +35 -0
  406. data/sig/mindee/v1/product/invoice/invoice_v4_line_items.rbs +15 -0
  407. data/sig/mindee/v1/product/invoice/invoice_v4_page.rbs +17 -0
  408. data/sig/mindee/v1/product/invoice_splitter/invoice_splitter_v1.rbs +13 -0
  409. data/sig/mindee/v1/product/invoice_splitter/invoice_splitter_v1_document.rbs +17 -0
  410. data/sig/mindee/v1/product/invoice_splitter/invoice_splitter_v1_invoice_page_group.rbs +21 -0
  411. data/sig/mindee/v1/product/invoice_splitter/invoice_splitter_v1_invoice_page_groups.rbs +15 -0
  412. data/sig/mindee/v1/product/invoice_splitter/invoice_splitter_v1_page.rbs +17 -0
  413. data/sig/mindee/v1/product/multi_receipts_detector/multi_receipts_detector_v1.rbs +14 -0
  414. data/sig/mindee/v1/product/multi_receipts_detector/multi_receipts_detector_v1_document.rbs +15 -0
  415. data/sig/mindee/v1/product/multi_receipts_detector/multi_receipts_detector_v1_page.rbs +17 -0
  416. data/sig/mindee/v1/product/passport/passport_v1.rbs +13 -0
  417. data/sig/mindee/v1/product/passport/passport_v1_document.rbs +25 -0
  418. data/sig/mindee/v1/product/passport/passport_v1_page.rbs +17 -0
  419. data/sig/mindee/v1/product/receipt/receipt_v5.rbs +13 -0
  420. data/sig/mindee/v1/product/receipt/receipt_v5_document.rbs +33 -0
  421. data/sig/mindee/v1/product/receipt/receipt_v5_line_item.rbs +27 -0
  422. data/sig/mindee/v1/product/receipt/receipt_v5_line_items.rbs +15 -0
  423. data/sig/mindee/v1/product/receipt/receipt_v5_page.rbs +17 -0
  424. data/sig/mindee/v1/product/resume/resume_v1.rbs +13 -0
  425. data/sig/mindee/v1/product/resume/resume_v1_certificate.rbs +27 -0
  426. data/sig/mindee/v1/product/resume/resume_v1_certificates.rbs +17 -0
  427. data/sig/mindee/v1/product/resume/resume_v1_document.rbs +69 -0
  428. data/sig/mindee/v1/product/resume/resume_v1_education.rbs +33 -0
  429. data/sig/mindee/v1/product/resume/resume_v1_educations.rbs +17 -0
  430. data/sig/mindee/v1/product/resume/resume_v1_language.rbs +23 -0
  431. data/sig/mindee/v1/product/resume/resume_v1_languages.rbs +17 -0
  432. data/sig/mindee/v1/product/resume/resume_v1_page.rbs +19 -0
  433. data/sig/mindee/v1/product/resume/resume_v1_professional_experience.rbs +37 -0
  434. data/sig/mindee/v1/product/resume/resume_v1_professional_experiences.rbs +17 -0
  435. data/sig/mindee/v1/product/resume/resume_v1_social_networks_url.rbs +23 -0
  436. data/sig/mindee/v1/product/resume/resume_v1_social_networks_urls.rbs +17 -0
  437. data/sig/mindee/v1/product/universal/universal.rbs +16 -0
  438. data/sig/mindee/v1/product/universal/universal_document.rbs +12 -0
  439. data/sig/mindee/v1/product/universal/universal_page.rbs +18 -0
  440. data/sig/mindee/v1/product/universal/universal_prediction.rbs +30 -0
  441. data/sig/mindee/v2/client.rbs +29 -0
  442. data/sig/mindee/v2/file_operation/crop.rbs +10 -0
  443. data/sig/mindee/v2/file_operation/crop_files.rbs +9 -0
  444. data/sig/mindee/v2/file_operation/split.rbs +11 -0
  445. data/sig/mindee/v2/file_operation/split_files.rbs +9 -0
  446. data/sig/mindee/v2/http/api_v2_settings.rbs +27 -0
  447. data/sig/mindee/v2/http/mindee_api_v2.rbs +52 -0
  448. data/sig/mindee/v2/parsing/base_inference.rbs +18 -0
  449. data/sig/mindee/v2/parsing/base_response.rbs +11 -0
  450. data/sig/mindee/v2/parsing/common_response.rbs +12 -0
  451. data/sig/mindee/v2/parsing/error_item.rbs +13 -0
  452. data/sig/mindee/v2/parsing/error_response.rbs +20 -0
  453. data/sig/mindee/v2/parsing/field/base_field.rbs +17 -0
  454. data/sig/mindee/v2/parsing/field/field_confidence.rbs +30 -0
  455. data/sig/mindee/v2/parsing/field/field_location.rbs +16 -0
  456. data/sig/mindee/v2/parsing/field/inference_fields.rbs +20 -0
  457. data/sig/mindee/v2/parsing/field/list_field.rbs +23 -0
  458. data/sig/mindee/v2/parsing/field/object_field.rbs +27 -0
  459. data/sig/mindee/v2/parsing/field/simple_field.rbs +16 -0
  460. data/sig/mindee/v2/parsing/inference_active_options.rbs +26 -0
  461. data/sig/mindee/v2/parsing/inference_file.rbs +17 -0
  462. data/sig/mindee/v2/parsing/inference_job.rbs +13 -0
  463. data/sig/mindee/v2/parsing/inference_model.rbs +12 -0
  464. data/sig/mindee/v2/parsing/job.rbs +24 -0
  465. data/sig/mindee/v2/parsing/job_response.rbs +14 -0
  466. data/sig/mindee/v2/parsing/job_webhook.rbs +19 -0
  467. data/sig/mindee/v2/parsing/rag_metadata.rbs +13 -0
  468. data/sig/mindee/v2/parsing/raw_text.rbs +12 -0
  469. data/sig/mindee/v2/parsing/raw_text_page.rbs +11 -0
  470. data/sig/mindee/v2/parsing/search/pagination_metadata.rbs +20 -0
  471. data/sig/mindee/v2/parsing/search/search_model.rbs +19 -0
  472. data/sig/mindee/v2/parsing/search/search_response.rbs +17 -0
  473. data/sig/mindee/v2/parsing/search_models.rbs +14 -0
  474. data/sig/mindee/v2/product/base_product.rbs +19 -0
  475. data/sig/mindee/v2/product/classification/classification.rbs +10 -0
  476. data/sig/mindee/v2/product/classification/classification_classifier.rbs +15 -0
  477. data/sig/mindee/v2/product/classification/classification_inference.rbs +15 -0
  478. data/sig/mindee/v2/product/classification/classification_response.rbs +23 -0
  479. data/sig/mindee/v2/product/classification/classification_result.rbs +15 -0
  480. data/sig/mindee/v2/product/classification/params/classification_parameters/classification_parameters.rbs +23 -0
  481. data/sig/mindee/v2/product/crop/crop.rbs +10 -0
  482. data/sig/mindee/v2/product/crop/crop_inference.rbs +14 -0
  483. data/sig/mindee/v2/product/crop/crop_item.rbs +18 -0
  484. data/sig/mindee/v2/product/crop/crop_response.rbs +25 -0
  485. data/sig/mindee/v2/product/crop/crop_result.rbs +14 -0
  486. data/sig/mindee/v2/product/crop/params/crop_parameters/crop_parameters.rbs +23 -0
  487. data/sig/mindee/v2/product/extraction/extraction.rbs +15 -0
  488. data/sig/mindee/v2/product/extraction/extraction_inference.rbs +19 -0
  489. data/sig/mindee/v2/product/extraction/extraction_response.rbs +24 -0
  490. data/sig/mindee/v2/product/extraction/extraction_result.rbs +18 -0
  491. data/sig/mindee/v2/product/extraction/params/data_schema.rbs +21 -0
  492. data/sig/mindee/v2/product/extraction/params/data_schema_field.rbs +29 -0
  493. data/sig/mindee/v2/product/extraction/params/data_schema_replace.rbs +21 -0
  494. data/sig/mindee/v2/product/extraction/params/extraction_parameters.rbs +38 -0
  495. data/sig/mindee/v2/product/ocr/ocr.rbs +10 -0
  496. data/sig/mindee/v2/product/ocr/ocr_inference.rbs +14 -0
  497. data/sig/mindee/v2/product/ocr/ocr_page.rbs +15 -0
  498. data/sig/mindee/v2/product/ocr/ocr_response.rbs +23 -0
  499. data/sig/mindee/v2/product/ocr/ocr_result.rbs +14 -0
  500. data/sig/mindee/v2/product/ocr/ocr_word.rbs +15 -0
  501. data/sig/mindee/v2/product/ocr/params/ocr_parameters/ocr_parameters.rbs +24 -0
  502. data/sig/mindee/v2/product/split/params/split_parameters/split_parameters.rbs +23 -0
  503. data/sig/mindee/v2/product/split/split.rbs +10 -0
  504. data/sig/mindee/v2/product/split/split_inference.rbs +14 -0
  505. data/sig/mindee/v2/product/split/split_range.rbs +18 -0
  506. data/sig/mindee/v2/product/split/split_response.rbs +25 -0
  507. data/sig/mindee/v2/product/split/split_result.rbs +14 -0
  508. data/sig/mindee/version.rbs +6 -0
  509. data/sig/mindee.rbs +62 -0
  510. metadata +600 -0
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mindee
4
+ module V2
5
+ module Parsing
6
+ # Individual error item.
7
+ class ErrorItem
8
+ # @return [String, nil] A JSON Pointer to the location of the body property.
9
+ attr_reader :pointer
10
+ # @return [String, nil] Explicit information on the issue.
11
+ attr_reader :detail
12
+
13
+ # @param server_response [Hash] Raw JSON parsed into a Hash.
14
+ def initialize(server_response)
15
+ @pointer = server_response['pointer']
16
+ @detail = server_response['detail']
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mindee
4
+ module V2
5
+ module Parsing
6
+ # Encapsulates information returned by the API when an error occurs.
7
+ class ErrorResponse
8
+ # @return [Integer] The HTTP status code returned by the server.
9
+ attr_reader :status
10
+ # @return [String] A human-readable explanation specific to the occurrence of the problem.
11
+ attr_reader :detail
12
+ # @return [String] A short, human-readable summary of the problem.
13
+ attr_reader :title
14
+ # @return [String] A machine-readable code specific to the occurrence of the problem.
15
+ attr_reader :code
16
+ # @return [Array<ErrorItem>] A list of explicit error details.
17
+ attr_reader :errors
18
+
19
+ # @param server_response [Hash] Raw JSON parsed into a Hash.
20
+ def initialize(server_response)
21
+ @status = server_response['status']
22
+ @detail = server_response['detail']
23
+ @title = server_response['title']
24
+ @code = server_response['code']
25
+ @errors = if server_response.key?('errors')
26
+ server_response['errors'].map do |error|
27
+ ErrorItem.new(error)
28
+ end
29
+ else
30
+ []
31
+ end
32
+ end
33
+
34
+ # String representation.
35
+ # @return [String]
36
+ def to_s
37
+ "HTTP #{@status} - #{@title} :: #{@code} - #{@detail}"
38
+ end
39
+
40
+ # Hash representation
41
+ # @return [Hash] Hash representation of the object.
42
+ def as_hash
43
+ {
44
+ status: @status,
45
+ detail: @detail,
46
+ }
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mindee
4
+ module V2
5
+ module Parsing
6
+ # Field submodule for V2.
7
+ module Field
8
+ # Base class for V2 fields.
9
+ class BaseField
10
+ # @return [Integer] Level of indentation for rst display.
11
+ attr_reader :indent_level
12
+
13
+ # @return [FieldConfidence, nil] Confidence score for the field.
14
+ attr_reader :confidence
15
+
16
+ # @return [Array<FieldLocation>] List of locations the field was found at.
17
+ attr_reader :locations
18
+
19
+ # @param raw_prediction [Hash] Raw prediction hash.
20
+ # @param indent_level [Integer] Level of indentation for rst display.
21
+ def initialize(raw_prediction, indent_level = 0)
22
+ @indent_level = indent_level
23
+ confidence = raw_prediction['confidence']
24
+ @confidence = FieldConfidence.new(confidence) unless confidence.nil? || confidence.empty?
25
+
26
+ locations = raw_prediction['locations']
27
+ @locations = if locations.nil? || locations.empty?
28
+ []
29
+ else
30
+ locations.map do |location|
31
+ FieldLocation.new(location)
32
+ end
33
+ end
34
+ end
35
+
36
+ # Factory method to create appropriate field types.
37
+ # @param raw_prediction [Hash] Raw prediction hash.
38
+ # @param indent_level [Integer] Level of indentation for rst display.
39
+ # @return [BaseField] Appropriate field instance.
40
+ # @raise [MindeeError] If the field type isn't recognized.
41
+ def self.create_field(raw_prediction, indent_level = 0)
42
+ if raw_prediction.key?('items')
43
+ require_relative 'list_field'
44
+ return ListField.new(raw_prediction, indent_level)
45
+ end
46
+
47
+ if raw_prediction.key?('fields')
48
+ require_relative 'object_field'
49
+ return ObjectField.new(raw_prediction, indent_level)
50
+ end
51
+
52
+ if raw_prediction.key?('value')
53
+ require_relative 'simple_field'
54
+ return SimpleField.new(raw_prediction, indent_level)
55
+ end
56
+
57
+ raise Error::MindeeError, "Unrecognized field format in #{raw_prediction.to_json}"
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,128 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mindee
4
+ module V2
5
+ module Parsing
6
+ module Field
7
+ # Confidence level of a field as returned by the V2 API.
8
+ class FieldConfidence
9
+ # @return [String] The confidence level value.
10
+ attr_reader :value
11
+
12
+ # Absolute certainty about the field's extraction.
13
+ CERTAIN = 'Certain'
14
+ # High certainty about the field's extraction.
15
+ HIGH = 'High'
16
+ # Medium certainty about the field's extraction.
17
+ MEDIUM = 'Medium'
18
+ # Low certainty about the field's extraction.
19
+ LOW = 'Low'
20
+
21
+ # List of valid values, as frozen strings.
22
+ VALID_VALUES = ['Certain', 'High', 'Medium', 'Low'].freeze
23
+
24
+ # @param value [String] The confidence level value.
25
+ # @raise [ArgumentError] If the value is not a valid confidence level.
26
+ def initialize(value)
27
+ case value
28
+ when 'Certain' then @value = CERTAIN
29
+ when 'High' then @value = HIGH
30
+ when 'Medium' then @value = MEDIUM
31
+ when 'Low' then @value = LOW
32
+ else
33
+ raise ArgumentError,
34
+ "Invalid confidence level: '#{value}'. Must be one of: #{VALID_VALUES.join(', ')}"
35
+ end
36
+
37
+ @value = value
38
+ end
39
+
40
+ # String representation of the confidence level.
41
+ # @return [String] The confidence level value.
42
+ def to_s
43
+ @value
44
+ end
45
+
46
+ # String representation of the confidence level.
47
+ # @return [Integer] The confidence level value as an integer: 1 is LOW, 4 is HIGH.
48
+ def to_i
49
+ val_to_i(@value)
50
+ end
51
+
52
+ # Inspect method for debugging.
53
+ # @return [String] Debug representation.
54
+ def inspect
55
+ "#<#{self.class.name}:#{@value}>"
56
+ end
57
+
58
+ # Using 'case' breaks steep ...
59
+ # rubocop:disable Style/CaseLikeIf
60
+
61
+ # Equality of two FieldConfidence instances.
62
+ # @param other [String, Integer, FieldConfidence] The other confidence to compare.
63
+ # @return [Boolean] `true` if they have the same value.
64
+ def ==(other)
65
+ if other.is_a?(FieldConfidence)
66
+ @value == other.value
67
+ elsif other.is_a?(String)
68
+ @value == other
69
+ elsif other.is_a?(Integer)
70
+ to_i == other
71
+ else
72
+ raise ArgumentError, "Invalid type: #{other.class}"
73
+ end
74
+ end
75
+
76
+ # Greater than or equality of two FieldConfidence instances.
77
+ # @param other [String, Integer, FieldConfidence] The other confidence to compare.
78
+ def >=(other)
79
+ if other.is_a?(FieldConfidence)
80
+ to_i >= val_to_i(other.value)
81
+ elsif other.is_a?(String)
82
+ to_i >= val_to_i(other)
83
+ elsif other.is_a?(Integer)
84
+ to_i >= other
85
+ else
86
+ raise ArgumentError, "Invalid type: #{other.class}"
87
+ end
88
+ end
89
+
90
+ # less than or equality of two FieldConfidence instances.
91
+ # # @param other [String, Integer, FieldConfidence] The other confidence to compare.
92
+ def <=(other)
93
+ if other.is_a?(FieldConfidence)
94
+ to_i <= val_to_i(other.value)
95
+ elsif other.is_a?(String)
96
+ to_i <= val_to_i(other)
97
+ elsif other.is_a?(Integer)
98
+ to_i <= other
99
+ else
100
+ raise ArgumentError, "Invalid type: #{other.class}"
101
+ end
102
+ end
103
+
104
+ # rubocop:enable Style/CaseLikeIf
105
+
106
+ # Aliases for the comparison operators.
107
+ alias eql? ==
108
+ alias gteql? >=
109
+ alias lteql? <=
110
+
111
+ protected
112
+
113
+ def val_to_i(value)
114
+ case value
115
+ when CERTAIN then 4
116
+ when HIGH then 3
117
+ when MEDIUM then 2
118
+ when LOW then 1
119
+ else
120
+ raise ArgumentError,
121
+ "Invalid confidence level: '#{value}'. Must be one of: #{VALID_VALUES.join(', ')}"
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../../geometry/polygon'
4
+
5
+ module Mindee
6
+ module V2
7
+ module Parsing
8
+ module Field
9
+ # Location of a field.
10
+ class FieldLocation
11
+ # @return [Mindee::Geometry::Polygon, nil] Polygon corresponding to the field location.
12
+ attr_reader :polygon
13
+
14
+ # @return [Integer, nil] Page on which the field is located.
15
+ attr_reader :page
16
+
17
+ # @param server_response [Hash] Raw server response hash.
18
+ def initialize(server_response)
19
+ @polygon = Mindee::Geometry::Polygon.new(server_response['polygon'])
20
+ @page = server_response['page']
21
+ end
22
+
23
+ # String representation of the polygon (empty string when none).
24
+ #
25
+ # @return [String]
26
+ def to_s
27
+ "#{polygon} on page #{page}"
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,105 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base_field'
4
+
5
+ module Mindee
6
+ module V2
7
+ module Parsing
8
+ module Field
9
+ # Represents a hash-like collection of inference fields, providing methods for
10
+ # retrieval and string representation.
11
+ class InferenceFields < Hash
12
+ # @return [Integer] Level of indentation for rst display.
13
+ attr_reader :indent_level
14
+
15
+ # @param server_response [Hash] Raw server response hash.
16
+ # @param indent_level [Integer] Level of indentation for rst display.
17
+ def initialize(server_response, indent_level = 0)
18
+ super()
19
+ @indent_level = indent_level
20
+
21
+ server_response.each do |key, value|
22
+ self[key.to_s] = BaseField.create_field(value, 1)
23
+ end
24
+ end
25
+
26
+ # Get a field by key with nil fallback.
27
+ # @param key [String] Field key to retrieve.
28
+ # @return [BaseField, nil] The field or nil if not found.
29
+ def get(key)
30
+ self[key]
31
+ end
32
+
33
+ # Get a field by key and ensure it is a SimpleField.
34
+ # @param key [String] Field key to retrieve.
35
+ # @return [SimpleField] The SimpleField.
36
+ # @raise [TypeError] If the field is not a SimpleField.
37
+ def get_simple_field(key)
38
+ field = self[key]
39
+ raise TypeError, "Field #{key} is not a SimpleField" unless field.is_a?(SimpleField)
40
+
41
+ field
42
+ end
43
+
44
+ # Get a field by key and ensure it is a ListField.
45
+ # @param key [String] Field key to retrieve.
46
+ # @return [ListField] The ListField.
47
+ # @raise [TypeError] If the field is not a ListField.
48
+ def get_list_field(key)
49
+ field = self[key]
50
+ raise TypeError, "Field #{key} is not a ListField" unless field.is_a?(ListField)
51
+
52
+ field
53
+ end
54
+
55
+ # Get a field by key and ensure it is an ObjectField.
56
+ # @param key [String] Field key to retrieve.
57
+ # @return [ObjectField] The ObjectField.
58
+ # @raise [TypeError] If the field is not an ObjectField.
59
+ def get_object_field(key)
60
+ field = self[key]
61
+ raise TypeError, "Field #{key} is not a ObjectField" unless field.is_a?(ObjectField)
62
+
63
+ field
64
+ end
65
+
66
+ # rubocop:disable Metrics/CyclomaticComplexity
67
+ # rubocop:disable Metrics/PerceivedComplexity
68
+ # Convert the fields to a string representation.
69
+ # @param indent [Integer, nil] Optional indentation level.
70
+ # @return [String] String representation of all fields.
71
+ def to_s(indent = 0)
72
+ return '' if empty?
73
+
74
+ indent ||= @indent_level
75
+ padding = ' ' * indent
76
+ lines = [] # @type var lines: Array[String]
77
+
78
+ each do |field_key, field_value|
79
+ line = "#{padding}:#{field_key}:"
80
+
81
+ case (field_value.class.name || '').split('::').last
82
+ when 'ListField', 'ObjectField'
83
+ line += field_value.to_s
84
+ when 'SimpleField'
85
+ # Check if SimpleField has a non-empty value
86
+ simple_f = field_value # @type var simple_f: SimpleField
87
+ if defined?(simple_f.value) && simple_f.value && !simple_f.value.to_s.empty?
88
+ line += " #{simple_f}"
89
+ end
90
+ else
91
+ logger.debug("Unknown value was passed to the field creator: #{field_key} : #{field_value}")
92
+ end
93
+
94
+ lines << line
95
+ end
96
+
97
+ lines.join("\n").rstrip
98
+ end
99
+ # rubocop:enable Metrics/CyclomaticComplexity
100
+ # rubocop:enable Metrics/PerceivedComplexity
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,79 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base_field'
4
+
5
+ module Mindee
6
+ module V2
7
+ module Parsing
8
+ module Field
9
+ # Represents a field that contains a list of items.
10
+ class ListField < BaseField
11
+ # @return [Array<ListField | ObjectField | SimpleField>] Items contained in the list.
12
+ attr_reader :items
13
+
14
+ # @param server_response [Hash] Raw server response hash.
15
+ # @param indent_level [Integer] Level of indentation for rst display.
16
+ # @raise [MindeeError] If the 'items' key is missing or not an array.
17
+ def initialize(server_response, indent_level = 0)
18
+ super
19
+
20
+ unless server_response.key?('items') && server_response['items'].is_a?(Array)
21
+ raise Error::MindeeError,
22
+ "Expected \"items\" to be an array in #{server_response.to_json}."
23
+ end
24
+
25
+ @items = []
26
+ server_response['items'].each do |item|
27
+ @items << BaseField.create_field(item, indent_level + 1)
28
+ end
29
+ end
30
+
31
+ # Return only simple fields.
32
+ # @return [Array<SimpleField>] Simple fields contained in the list.
33
+ # @raise [TypeError] If the fields are not SimpleField.
34
+ def simple_items
35
+ fields = [] # @type var fields: Array[SimpleField]
36
+ @items.each do |item|
37
+ raise TypeError, "Invalid field type detected: #{item.class}" unless item.is_a?(SimpleField)
38
+
39
+ fields << item
40
+ end
41
+ fields
42
+ end
43
+
44
+ # Return only object fields.
45
+ # @return [Array<ObjectField>] Object fields contained in the list.
46
+ # @raise [TypeError] If the fields are not ObjectField.
47
+ def object_items
48
+ fields = [] # @type var fields: Array[ObjectField]
49
+ @items.each do |item|
50
+ raise TypeError, "Invalid field type detected: #{item.class}" unless item.is_a?(ObjectField)
51
+
52
+ fields << item
53
+ end
54
+ fields
55
+ end
56
+
57
+ # String representation of the list field.
58
+ # @return [String] Formatted string with bullet points for each item.
59
+ def to_s
60
+ return '' unless @items && !@items.empty?
61
+
62
+ parts = ['']
63
+ @items.each do |item|
64
+ next unless item
65
+
66
+ parts << if item.is_a?(ObjectField)
67
+ item.to_s_from_list
68
+ else
69
+ item.to_s
70
+ end
71
+ end
72
+
73
+ parts.join("\n * ")
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,138 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base_field'
4
+ require_relative 'inference_fields'
5
+
6
+ module Mindee
7
+ module V2
8
+ module Parsing
9
+ module Field
10
+ # A field containing a nested set of inference fields.
11
+ class ObjectField < BaseField
12
+ # @return [InferenceFields] Fields contained in the object.
13
+ attr_reader :fields
14
+
15
+ # @param raw_prediction [Hash] Raw server response hash.
16
+ # @param indent_level [Integer] Level of indentation for rst display.
17
+ def initialize(raw_prediction, indent_level = 0)
18
+ super
19
+
20
+ inner_fields = raw_prediction.fetch('fields', raw_prediction)
21
+ @fields = InferenceFields.new(inner_fields, @indent_level + 1)
22
+ end
23
+
24
+ # String representation of the object field.
25
+ # @return [String] String representation with newline prefix.
26
+ def to_s
27
+ return "\n" unless @fields && !@fields.empty?
28
+
29
+ "\n#{@fields.to_s(1)}"
30
+ end
31
+
32
+ # String representation suitable for list display.
33
+ # @return [String] String representation without leading spaces.
34
+ def to_s_from_list
35
+ return '' if @fields.nil?
36
+ return '' unless @fields && !@fields.empty?
37
+
38
+ field_str = @fields.to_s(2)
39
+ field_str.length > 4 ? (field_str[4..] || '') : ''
40
+ end
41
+
42
+ # String representation of a single object field
43
+ # @return [String] Multi-line string with proper indentation.
44
+ def single_str
45
+ return '' unless @fields && !@fields.empty?
46
+
47
+ out_str = ''
48
+ indent = ' ' * @indent_level
49
+
50
+ @fields.each do |field_key, field_value|
51
+ value_str = field_value && !field_value.to_s.empty? ? field_value.to_s : ''
52
+ out_str += "\n#{indent} :#{field_key}: #{value_str}"
53
+ end
54
+
55
+ out_str
56
+ end
57
+
58
+ # String representation for multi-object display
59
+ # @return [String] Formatted string for list context.
60
+ def multi_str
61
+ return '' unless @fields && !@fields.empty?
62
+
63
+ out_str = ''
64
+ indent = ' ' * @indent_level
65
+ first = true
66
+
67
+ @fields.each do |field_key, field_value|
68
+ value_str = field_value ? field_value.to_s : ''
69
+
70
+ if first
71
+ out_str += "#{indent}:#{field_key}: #{value_str}"
72
+ first = false
73
+ else
74
+ out_str += "\n#{indent} :#{field_key}: #{value_str}"
75
+ end
76
+ end
77
+
78
+ out_str
79
+ end
80
+
81
+ # Get a field by key and ensure it is a SimpleField.
82
+ # @param key [String] Field key to retrieve.
83
+ # @return [SimpleField] The SimpleField.
84
+ # @raise [TypeError] If the field is not a SimpleField.
85
+ def get_simple_field(key)
86
+ @fields.get_simple_field(key)
87
+ end
88
+
89
+ # Get a field by key and ensure it is a ListField.
90
+ # @param key [String] Field key to retrieve.
91
+ # @return [ListField] The ListField.
92
+ # @raise [TypeError] If the field is not a ListField.
93
+ def get_list_field(key)
94
+ field = @fields.get_list_field(key)
95
+ raise TypeError, "Field #{key} is not a ListField" unless field.is_a?(ListField)
96
+
97
+ field
98
+ end
99
+
100
+ # Get a field by key and ensure it is an ObjectField.
101
+ # @param key [String] Field key to retrieve.
102
+ # @return [ObjectField] The ObjectField.
103
+ # @raise [TypeError] If the field is not an ObjectField.
104
+ def get_object_field(key)
105
+ field = @fields.get_object_field(key)
106
+ raise TypeError, "Field #{key} is not an ObjectField" unless field.is_a?(ObjectField)
107
+
108
+ field
109
+ end
110
+
111
+ # Get all simple fields.
112
+ # @return [Hash<String, SimpleField>] Simple fields contained in the object.
113
+ def simple_fields
114
+ # @type var result: Hash[String, SimpleField]
115
+ result = @fields.select { |_, value| value.is_a?(SimpleField) } # rubocop:disable Style/RedundantAssignment
116
+ result
117
+ end
118
+
119
+ # Get all list fields.
120
+ # @return [Hash<String, ListField>] List fields contained in the object.
121
+ def list_fields
122
+ # @type var result: Hash[String, ListField]
123
+ result = @fields.select { |_, value| value.is_a?(ListField) } # rubocop:disable Style/RedundantAssignment
124
+ result
125
+ end
126
+
127
+ # Get all object fields.
128
+ # @return [Hash<String, ObjectField>] Object fields contained in the object.
129
+ def object_fields
130
+ # @type var result: Hash[String, ObjectField]
131
+ result = @fields.select { |_, value| value.is_a?(ObjectField) } # rubocop:disable Style/RedundantAssignment
132
+ result
133
+ end
134
+ end
135
+ end
136
+ end
137
+ end
138
+ end
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base_field'
4
+
5
+ module Mindee
6
+ module V2
7
+ module Parsing
8
+ module Field
9
+ # A simple field with a scalar value.
10
+ class SimpleField < BaseField
11
+ # @return [String, Integer, Float, Boolean, nil] Value contained in the field.
12
+ attr_reader :value
13
+
14
+ # @param server_response [Hash] Raw server response hash.
15
+ # @param indent_level [Integer] Level of indentation for rst display.
16
+ def initialize(server_response, indent_level = 0)
17
+ super
18
+ value = server_response['value']
19
+ @value = if value.is_a?(Integer)
20
+ value.to_f
21
+ else
22
+ value
23
+ end
24
+ end
25
+
26
+ # String representation of the field value.
27
+ # @return [String] String representation of the value.
28
+ def to_s
29
+ return '' if @value.nil?
30
+
31
+ if @value.is_a?(TrueClass) || @value.is_a?(FalseClass)
32
+ @value ? 'True' : 'False'
33
+ elsif @value.is_a?(Integer) || @value.is_a?(Float)
34
+ num = @value # @type var num: Integer | Float
35
+ format_numeric_value(num)
36
+ else
37
+ @value.to_s
38
+ end
39
+ end
40
+
41
+ private
42
+
43
+ # Format numeric values to display '.0' in string reps.
44
+ # @param value [Numeric] The numeric value to format.
45
+ # @return [String] Formatted numeric string.
46
+ def format_numeric_value(value)
47
+ float_value = value.to_f
48
+
49
+ if float_value == float_value.to_i
50
+ format('%.1f', float_value)
51
+ else
52
+ formatted = format('%.5f', float_value)
53
+ formatted.sub(%r{\.?0+$}, '')
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'field/base_field'
4
+ require_relative 'field/field_confidence'
5
+ require_relative 'field/field_location'
6
+ require_relative 'field/inference_fields'
7
+ require_relative 'field/list_field'
8
+ require_relative 'field/object_field'
9
+ require_relative 'field/simple_field'