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.
- checksums.yaml +7 -0
- data/.editorconfig +24 -0
- data/.gitattributes +14 -0
- data/.gitignore +76 -0
- data/.gitmodules +3 -0
- data/.pre-commit-config.yaml +36 -0
- data/.rubocop.yml +49 -0
- data/.yardopts +4 -0
- data/CHANGELOG.md +515 -0
- data/CODE_OF_CONDUCT.md +129 -0
- data/CONTRIBUTING.md +107 -0
- data/Gemfile +14 -0
- data/LICENSE +21 -0
- data/README.md +42 -0
- data/Rakefile +40 -0
- data/Steepfile +30 -0
- data/bin/console +14 -0
- data/bin/mindee.rb +30 -0
- data/bin/v1/parser.rb +153 -0
- data/bin/v1/products.rb +88 -0
- data/bin/v2/parser.rb +235 -0
- data/bin/v2/products.rb +34 -0
- data/docs/code_samples/bank_account_details_v1.txt +24 -0
- data/docs/code_samples/bank_account_details_v2.txt +24 -0
- data/docs/code_samples/bank_statement_fr_v2_async.txt +24 -0
- data/docs/code_samples/barcode_reader_v1.txt +24 -0
- data/docs/code_samples/cropper_v1.txt +21 -0
- data/docs/code_samples/default.txt +30 -0
- data/docs/code_samples/default_async.txt +29 -0
- data/docs/code_samples/expense_receipts_v5.txt +25 -0
- data/docs/code_samples/expense_receipts_v5_async.txt +24 -0
- data/docs/code_samples/financial_document_v1.txt +25 -0
- data/docs/code_samples/financial_document_v1_async.txt +24 -0
- data/docs/code_samples/idcard_fr_v1.txt +24 -0
- data/docs/code_samples/idcard_fr_v2.txt +24 -0
- data/docs/code_samples/international_id_v2_async.txt +24 -0
- data/docs/code_samples/invoice_splitter_v1_async.txt +24 -0
- data/docs/code_samples/invoices_v4.txt +25 -0
- data/docs/code_samples/invoices_v4_async.txt +24 -0
- data/docs/code_samples/multi_receipts_detector_v1.txt +24 -0
- data/docs/code_samples/passport_v1.txt +24 -0
- data/docs/code_samples/resume_v1_async.txt +24 -0
- data/docs/code_samples/v2_classification.txt +30 -0
- data/docs/code_samples/v2_crop.txt +30 -0
- data/docs/code_samples/v2_extraction.txt +42 -0
- data/docs/code_samples/v2_extraction_webhook.txt +45 -0
- data/docs/code_samples/v2_ocr.txt +30 -0
- data/docs/code_samples/v2_split.txt +30 -0
- data/docs/code_samples/workflow_execution.txt +28 -0
- data/docs/code_samples/workflow_polling.txt +35 -0
- data/examples/auto_invoice_splitter_extraction.rb +48 -0
- data/examples/auto_multi_receipts_detector_extraction.rb +30 -0
- data/lib/mindee/dependency.rb +29 -0
- data/lib/mindee/error/mindee_error.rb +17 -0
- data/lib/mindee/error/mindee_http_error.rb +36 -0
- data/lib/mindee/error/mindee_http_error_v2.rb +45 -0
- data/lib/mindee/error/mindee_http_unknown_error_v2.rb +18 -0
- data/lib/mindee/error/mindee_input_error.rb +30 -0
- data/lib/mindee/error.rb +6 -0
- data/lib/mindee/geometry/min_max.rb +23 -0
- data/lib/mindee/geometry/point.rb +41 -0
- data/lib/mindee/geometry/polygon.rb +37 -0
- data/lib/mindee/geometry/quadrilateral.rb +50 -0
- data/lib/mindee/geometry/utils.rb +88 -0
- data/lib/mindee/geometry.rb +7 -0
- data/lib/mindee/http/.rubocop.yml +7 -0
- data/lib/mindee/http/http_error_handler.rb +106 -0
- data/lib/mindee/http/response_validation.rb +81 -0
- data/lib/mindee/http.rb +3 -0
- data/lib/mindee/image/extracted_image.rb +89 -0
- data/lib/mindee/image/image_compressor.rb +29 -0
- data/lib/mindee/image/image_extractor.rb +118 -0
- data/lib/mindee/image/image_utils.rb +165 -0
- data/lib/mindee/image.rb +6 -0
- data/lib/mindee/input/base_parameters.rb +149 -0
- data/lib/mindee/input/local_response.rb +80 -0
- data/lib/mindee/input/polling_options.rb +26 -0
- data/lib/mindee/input/sources/base64_input_source.rb +31 -0
- data/lib/mindee/input/sources/bytes_input_source.rb +21 -0
- data/lib/mindee/input/sources/file_input_source.rb +20 -0
- data/lib/mindee/input/sources/local_input_source.rb +216 -0
- data/lib/mindee/input/sources/path_input_source.rb +20 -0
- data/lib/mindee/input/sources/url_input_source.rb +130 -0
- data/lib/mindee/input/sources.rb +8 -0
- data/lib/mindee/input.rb +4 -0
- data/lib/mindee/logging/logger.rb +24 -0
- data/lib/mindee/logging.rb +3 -0
- data/lib/mindee/page_options.rb +24 -0
- data/lib/mindee/pdf/extracted_pdf.rb +70 -0
- data/lib/mindee/pdf/pdf_compressor.rb +121 -0
- data/lib/mindee/pdf/pdf_extractor.rb +121 -0
- data/lib/mindee/pdf/pdf_processor.rb +91 -0
- data/lib/mindee/pdf/pdf_tools.rb +201 -0
- data/lib/mindee/pdf.rb +7 -0
- data/lib/mindee/v1/client.rb +490 -0
- data/lib/mindee/v1/extraction/multi_receipts_extractor.rb +32 -0
- data/lib/mindee/v1/extraction.rb +3 -0
- data/lib/mindee/v1/http/.rubocop.yml +7 -0
- data/lib/mindee/v1/http/endpoint.rb +221 -0
- data/lib/mindee/v1/http/workflow_endpoint.rb +93 -0
- data/lib/mindee/v1/http.rb +4 -0
- data/lib/mindee/v1/parsing/common/api_request.rb +38 -0
- data/lib/mindee/v1/parsing/common/api_response.rb +63 -0
- data/lib/mindee/v1/parsing/common/document.rb +86 -0
- data/lib/mindee/v1/parsing/common/execution.rb +78 -0
- data/lib/mindee/v1/parsing/common/execution_file.rb +26 -0
- data/lib/mindee/v1/parsing/common/execution_priority.rb +38 -0
- data/lib/mindee/v1/parsing/common/extras/cropper_extra.rb +32 -0
- data/lib/mindee/v1/parsing/common/extras/extras.rb +62 -0
- data/lib/mindee/v1/parsing/common/extras/full_text_ocr_extra.rb +35 -0
- data/lib/mindee/v1/parsing/common/extras/rag_extra.rb +28 -0
- data/lib/mindee/v1/parsing/common/extras.rb +6 -0
- data/lib/mindee/v1/parsing/common/inference.rb +69 -0
- data/lib/mindee/v1/parsing/common/job.rb +48 -0
- data/lib/mindee/v1/parsing/common/ocr/mvision_v1.rb +52 -0
- data/lib/mindee/v1/parsing/common/ocr/ocr.rb +180 -0
- data/lib/mindee/v1/parsing/common/ocr.rb +3 -0
- data/lib/mindee/v1/parsing/common/orientation.rb +28 -0
- data/lib/mindee/v1/parsing/common/page.rb +49 -0
- data/lib/mindee/v1/parsing/common/prediction.rb +19 -0
- data/lib/mindee/v1/parsing/common/product.rb +26 -0
- data/lib/mindee/v1/parsing/common/workflow_response.rb +30 -0
- data/lib/mindee/v1/parsing/common.rb +15 -0
- data/lib/mindee/v1/parsing/standard/abstract_field.rb +74 -0
- data/lib/mindee/v1/parsing/standard/address_field.rb +51 -0
- data/lib/mindee/v1/parsing/standard/amount_field.rb +28 -0
- data/lib/mindee/v1/parsing/standard/base_field.rb +30 -0
- data/lib/mindee/v1/parsing/standard/boolean_field.rb +29 -0
- data/lib/mindee/v1/parsing/standard/classification_field.rb +18 -0
- data/lib/mindee/v1/parsing/standard/company_registration_field.rb +45 -0
- data/lib/mindee/v1/parsing/standard/date_field.rb +40 -0
- data/lib/mindee/v1/parsing/standard/feature_field.rb +26 -0
- data/lib/mindee/v1/parsing/standard/locale_field.rb +52 -0
- data/lib/mindee/v1/parsing/standard/payment_details_field.rb +44 -0
- data/lib/mindee/v1/parsing/standard/position_field.rb +61 -0
- data/lib/mindee/v1/parsing/standard/string_field.rb +26 -0
- data/lib/mindee/v1/parsing/standard/tax_field.rb +110 -0
- data/lib/mindee/v1/parsing/standard.rb +15 -0
- data/lib/mindee/v1/parsing/universal/universal_list_field.rb +60 -0
- data/lib/mindee/v1/parsing/universal/universal_object_field.rb +123 -0
- data/lib/mindee/v1/parsing/universal.rb +4 -0
- data/lib/mindee/v1/parsing.rb +5 -0
- data/lib/mindee/v1/product/.rubocop.yml +12 -0
- data/lib/mindee/v1/product/barcode_reader/barcode_reader_v1.rb +47 -0
- data/lib/mindee/v1/product/barcode_reader/barcode_reader_v1_document.rb +47 -0
- data/lib/mindee/v1/product/barcode_reader/barcode_reader_v1_page.rb +38 -0
- data/lib/mindee/v1/product/cropper/cropper_v1.rb +47 -0
- data/lib/mindee/v1/product/cropper/cropper_v1_document.rb +15 -0
- data/lib/mindee/v1/product/cropper/cropper_v1_page.rb +55 -0
- data/lib/mindee/v1/product/financial_document/financial_document_v1.rb +47 -0
- data/lib/mindee/v1/product/financial_document/financial_document_v1_document.rb +329 -0
- data/lib/mindee/v1/product/financial_document/financial_document_v1_line_item.rb +124 -0
- data/lib/mindee/v1/product/financial_document/financial_document_v1_line_items.rb +64 -0
- data/lib/mindee/v1/product/financial_document/financial_document_v1_page.rb +38 -0
- data/lib/mindee/v1/product/fr/bank_account_details/bank_account_details_v1.rb +49 -0
- data/lib/mindee/v1/product/fr/bank_account_details/bank_account_details_v1_document.rb +49 -0
- data/lib/mindee/v1/product/fr/bank_account_details/bank_account_details_v1_page.rb +40 -0
- data/lib/mindee/v1/product/fr/bank_account_details/bank_account_details_v2.rb +49 -0
- data/lib/mindee/v1/product/fr/bank_account_details/bank_account_details_v2_bban.rb +63 -0
- data/lib/mindee/v1/product/fr/bank_account_details/bank_account_details_v2_document.rb +60 -0
- data/lib/mindee/v1/product/fr/bank_account_details/bank_account_details_v2_page.rb +40 -0
- data/lib/mindee/v1/product/fr/bank_statement/bank_statement_v2.rb +49 -0
- data/lib/mindee/v1/product/fr/bank_statement/bank_statement_v2_document.rb +169 -0
- data/lib/mindee/v1/product/fr/bank_statement/bank_statement_v2_page.rb +40 -0
- data/lib/mindee/v1/product/fr/bank_statement/bank_statement_v2_transaction.rb +78 -0
- data/lib/mindee/v1/product/fr/bank_statement/bank_statement_v2_transactions.rb +56 -0
- data/lib/mindee/v1/product/fr/id_card/id_card_v1.rb +49 -0
- data/lib/mindee/v1/product/fr/id_card/id_card_v1_document.rb +106 -0
- data/lib/mindee/v1/product/fr/id_card/id_card_v1_page.rb +57 -0
- data/lib/mindee/v1/product/fr/id_card/id_card_v2.rb +49 -0
- data/lib/mindee/v1/product/fr/id_card/id_card_v2_document.rb +143 -0
- data/lib/mindee/v1/product/fr/id_card/id_card_v2_page.rb +65 -0
- data/lib/mindee/v1/product/international_id/international_id_v2.rb +47 -0
- data/lib/mindee/v1/product/international_id/international_id_v2_document.rb +164 -0
- data/lib/mindee/v1/product/international_id/international_id_v2_page.rb +38 -0
- data/lib/mindee/v1/product/invoice/invoice_v4.rb +47 -0
- data/lib/mindee/v1/product/invoice/invoice_v4_document.rb +300 -0
- data/lib/mindee/v1/product/invoice/invoice_v4_line_item.rb +124 -0
- data/lib/mindee/v1/product/invoice/invoice_v4_line_items.rb +64 -0
- data/lib/mindee/v1/product/invoice/invoice_v4_page.rb +38 -0
- data/lib/mindee/v1/product/invoice_splitter/invoice_splitter_v1.rb +47 -0
- data/lib/mindee/v1/product/invoice_splitter/invoice_splitter_v1_document.rb +66 -0
- data/lib/mindee/v1/product/invoice_splitter/invoice_splitter_v1_invoice_page_group.rb +58 -0
- data/lib/mindee/v1/product/invoice_splitter/invoice_splitter_v1_invoice_page_groups.rb +50 -0
- data/lib/mindee/v1/product/invoice_splitter/invoice_splitter_v1_page.rb +38 -0
- data/lib/mindee/v1/product/multi_receipts_detector/multi_receipts_detector_v1.rb +47 -0
- data/lib/mindee/v1/product/multi_receipts_detector/multi_receipts_detector_v1_document.rb +38 -0
- data/lib/mindee/v1/product/multi_receipts_detector/multi_receipts_detector_v1_page.rb +38 -0
- data/lib/mindee/v1/product/passport/passport_v1.rb +47 -0
- data/lib/mindee/v1/product/passport/passport_v1_document.rb +112 -0
- data/lib/mindee/v1/product/passport/passport_v1_page.rb +38 -0
- data/lib/mindee/v1/product/receipt/receipt_v5.rb +47 -0
- data/lib/mindee/v1/product/receipt/receipt_v5_document.rb +187 -0
- data/lib/mindee/v1/product/receipt/receipt_v5_line_item.rb +88 -0
- data/lib/mindee/v1/product/receipt/receipt_v5_line_items.rb +56 -0
- data/lib/mindee/v1/product/receipt/receipt_v5_page.rb +38 -0
- data/lib/mindee/v1/product/resume/resume_v1.rb +47 -0
- data/lib/mindee/v1/product/resume/resume_v1_certificate.rb +82 -0
- data/lib/mindee/v1/product/resume/resume_v1_certificates.rb +60 -0
- data/lib/mindee/v1/product/resume/resume_v1_document.rb +340 -0
- data/lib/mindee/v1/product/resume/resume_v1_education.rb +106 -0
- data/lib/mindee/v1/product/resume/resume_v1_educations.rb +66 -0
- data/lib/mindee/v1/product/resume/resume_v1_language.rb +66 -0
- data/lib/mindee/v1/product/resume/resume_v1_languages.rb +56 -0
- data/lib/mindee/v1/product/resume/resume_v1_page.rb +38 -0
- data/lib/mindee/v1/product/resume/resume_v1_professional_experience.rb +122 -0
- data/lib/mindee/v1/product/resume/resume_v1_professional_experiences.rb +70 -0
- data/lib/mindee/v1/product/resume/resume_v1_social_networks_url.rb +66 -0
- data/lib/mindee/v1/product/resume/resume_v1_social_networks_urls.rb +56 -0
- data/lib/mindee/v1/product/universal/universal.rb +48 -0
- data/lib/mindee/v1/product/universal/universal_document.rb +35 -0
- data/lib/mindee/v1/product/universal/universal_page.rb +54 -0
- data/lib/mindee/v1/product/universal/universal_prediction.rb +128 -0
- data/lib/mindee/v1/product.rb +18 -0
- data/lib/mindee/v1.rb +7 -0
- data/lib/mindee/v2/client.rb +132 -0
- data/lib/mindee/v2/file_operation/crop.rb +51 -0
- data/lib/mindee/v2/file_operation/crop_files.rb +25 -0
- data/lib/mindee/v2/file_operation/split.rb +37 -0
- data/lib/mindee/v2/file_operation/split_files.rb +25 -0
- data/lib/mindee/v2/file_operation.rb +6 -0
- data/lib/mindee/v2/http/.rubocop.yml +7 -0
- data/lib/mindee/v2/http/api_v2_settings.rb +65 -0
- data/lib/mindee/v2/http/mindee_api_v2.rb +230 -0
- data/lib/mindee/v2/http.rb +4 -0
- data/lib/mindee/v2/parsing/base_inference.rb +44 -0
- data/lib/mindee/v2/parsing/base_response.rb +15 -0
- data/lib/mindee/v2/parsing/common_response.rb +20 -0
- data/lib/mindee/v2/parsing/error_item.rb +21 -0
- data/lib/mindee/v2/parsing/error_response.rb +51 -0
- data/lib/mindee/v2/parsing/field/base_field.rb +63 -0
- data/lib/mindee/v2/parsing/field/field_confidence.rb +128 -0
- data/lib/mindee/v2/parsing/field/field_location.rb +33 -0
- data/lib/mindee/v2/parsing/field/inference_fields.rb +105 -0
- data/lib/mindee/v2/parsing/field/list_field.rb +79 -0
- data/lib/mindee/v2/parsing/field/object_field.rb +138 -0
- data/lib/mindee/v2/parsing/field/simple_field.rb +60 -0
- data/lib/mindee/v2/parsing/field.rb +9 -0
- data/lib/mindee/v2/parsing/inference_active_options.rb +67 -0
- data/lib/mindee/v2/parsing/inference_file.rb +38 -0
- data/lib/mindee/v2/parsing/inference_job.rb +25 -0
- data/lib/mindee/v2/parsing/inference_model.rb +30 -0
- data/lib/mindee/v2/parsing/job.rb +93 -0
- data/lib/mindee/v2/parsing/job_response.rb +30 -0
- data/lib/mindee/v2/parsing/job_webhook.rb +59 -0
- data/lib/mindee/v2/parsing/rag_metadata.rb +17 -0
- data/lib/mindee/v2/parsing/raw_text.rb +27 -0
- data/lib/mindee/v2/parsing/raw_text_page.rb +24 -0
- data/lib/mindee/v2/parsing/search/pagination_metadata.rb +44 -0
- data/lib/mindee/v2/parsing/search/search_model.rb +38 -0
- data/lib/mindee/v2/parsing/search/search_models.rb +34 -0
- data/lib/mindee/v2/parsing/search/search_response.rb +38 -0
- data/lib/mindee/v2/parsing/search.rb +6 -0
- data/lib/mindee/v2/parsing.rb +16 -0
- data/lib/mindee/v2/product/base_product.rb +28 -0
- data/lib/mindee/v2/product/classification/classification.rb +20 -0
- data/lib/mindee/v2/product/classification/classification_classifier.rb +25 -0
- data/lib/mindee/v2/product/classification/classification_inference.rb +35 -0
- data/lib/mindee/v2/product/classification/classification_response.rb +32 -0
- data/lib/mindee/v2/product/classification/classification_result.rb +27 -0
- data/lib/mindee/v2/product/classification/params/classification_parameters.rb +47 -0
- data/lib/mindee/v2/product/crop/crop.rb +20 -0
- data/lib/mindee/v2/product/crop/crop_inference.rb +34 -0
- data/lib/mindee/v2/product/crop/crop_item.rb +39 -0
- data/lib/mindee/v2/product/crop/crop_response.rb +40 -0
- data/lib/mindee/v2/product/crop/crop_result.rb +34 -0
- data/lib/mindee/v2/product/crop/params/crop_parameters.rb +47 -0
- data/lib/mindee/v2/product/extraction/extraction.rb +21 -0
- data/lib/mindee/v2/product/extraction/extraction_inference.rb +40 -0
- data/lib/mindee/v2/product/extraction/extraction_response.rb +32 -0
- data/lib/mindee/v2/product/extraction/extraction_result.rb +44 -0
- data/lib/mindee/v2/product/extraction/params/data_schema.rb +51 -0
- data/lib/mindee/v2/product/extraction/params/data_schema_field.rb +69 -0
- data/lib/mindee/v2/product/extraction/params/data_schema_replace.rb +39 -0
- data/lib/mindee/v2/product/extraction/params/extraction_parameters.rb +125 -0
- data/lib/mindee/v2/product/ocr/ocr.rb +20 -0
- data/lib/mindee/v2/product/ocr/ocr_inference.rb +34 -0
- data/lib/mindee/v2/product/ocr/ocr_page.rb +33 -0
- data/lib/mindee/v2/product/ocr/ocr_response.rb +32 -0
- data/lib/mindee/v2/product/ocr/ocr_result.rb +34 -0
- data/lib/mindee/v2/product/ocr/ocr_word.rb +29 -0
- data/lib/mindee/v2/product/ocr/params/ocr_parameters.rb +47 -0
- data/lib/mindee/v2/product/split/params/split_parameters.rb +48 -0
- data/lib/mindee/v2/product/split/split.rb +19 -0
- data/lib/mindee/v2/product/split/split_inference.rb +34 -0
- data/lib/mindee/v2/product/split/split_range.rb +38 -0
- data/lib/mindee/v2/product/split/split_response.rb +40 -0
- data/lib/mindee/v2/product/split/split_result.rb +34 -0
- data/lib/mindee/v2/product.rb +7 -0
- data/lib/mindee/v2.rb +7 -0
- data/lib/mindee/version.rb +26 -0
- data/lib/mindee.rb +135 -0
- data/mindee-lite.gemspec +36 -0
- data/mindee.gemspec +44 -0
- data/sig/custom/marcel.rbs +3 -0
- data/sig/custom/mini_magick.rbs +31 -0
- data/sig/custom/net_http.rbs +43 -0
- data/sig/custom/origami.rbs +59 -0
- data/sig/mindee/dependency.rbs +13 -0
- data/sig/mindee/error/mindee_error.rbs +13 -0
- data/sig/mindee/error/mindee_http_error.rbs +17 -0
- data/sig/mindee/error/mindee_http_error_v2.rbs +15 -0
- data/sig/mindee/error/mindee_http_unknown_error_v2.rbs +9 -0
- data/sig/mindee/error/mindee_input_error.rbs +18 -0
- data/sig/mindee/geometry/min_max.rbs +11 -0
- data/sig/mindee/geometry/point.rbs +14 -0
- data/sig/mindee/geometry/polygon.rbs +12 -0
- data/sig/mindee/geometry/quadrilateral.rbs +15 -0
- data/sig/mindee/geometry/utils.rbs +13 -0
- data/sig/mindee/http/http_error_handler.rbs +15 -0
- data/sig/mindee/http/response_validation.rbs +11 -0
- data/sig/mindee/image/extracted_image.rbs +21 -0
- data/sig/mindee/image/image_compressor.rbs +8 -0
- data/sig/mindee/image/image_extractor.rbs +13 -0
- data/sig/mindee/image/image_utils.rbs +19 -0
- data/sig/mindee/input/base_parameters.rbs +35 -0
- data/sig/mindee/input/local_response.rbs +14 -0
- data/sig/mindee/input/polling_options.rbs +12 -0
- data/sig/mindee/input/sources/base64_input_source.rbs +11 -0
- data/sig/mindee/input/sources/bytes_input_source.rbs +10 -0
- data/sig/mindee/input/sources/file_input_source.rbs +10 -0
- data/sig/mindee/input/sources/local_input_source.rbs +30 -0
- data/sig/mindee/input/sources/path_input_source.rbs +10 -0
- data/sig/mindee/input/sources/url_input_source.rbs +20 -0
- data/sig/mindee/logging/logger.rbs +11 -0
- data/sig/mindee/page_options.rbs +11 -0
- data/sig/mindee/pdf/extracted_pdf.rbs +17 -0
- data/sig/mindee/pdf/pdf_compressor.rbs +15 -0
- data/sig/mindee/pdf/pdf_extractor.rbs +19 -0
- data/sig/mindee/pdf/pdf_processor.rbs +12 -0
- data/sig/mindee/pdf/pdf_tools.rbs +31 -0
- data/sig/mindee/v1/client.rbs +84 -0
- data/sig/mindee/v1/extraction/multi_receipts_extractor.rbs +8 -0
- data/sig/mindee/v1/http/endpoint.rbs +41 -0
- data/sig/mindee/v1/http/workflow_endpoint.rbs +22 -0
- data/sig/mindee/v1/parsing/common/api_request.rbs +22 -0
- data/sig/mindee/v1/parsing/common/api_response.rbs +31 -0
- data/sig/mindee/v1/parsing/common/document.rbs +32 -0
- data/sig/mindee/v1/parsing/common/execution.rbs +26 -0
- data/sig/mindee/v1/parsing/common/execution_file.rbs +16 -0
- data/sig/mindee/v1/parsing/common/execution_priority.rbs +16 -0
- data/sig/mindee/v1/parsing/common/extras/cropper_extra.rbs +18 -0
- data/sig/mindee/v1/parsing/common/extras/extras.rbs +24 -0
- data/sig/mindee/v1/parsing/common/extras/full_text_ocr_extra.rbs +22 -0
- data/sig/mindee/v1/parsing/common/extras/rag_extra.rbs +19 -0
- data/sig/mindee/v1/parsing/common/inference.rbs +31 -0
- data/sig/mindee/v1/parsing/common/job.rbs +24 -0
- data/sig/mindee/v1/parsing/common/ocr/mvision_v1.rbs +20 -0
- data/sig/mindee/v1/parsing/common/ocr/ocr.rbs +56 -0
- data/sig/mindee/v1/parsing/common/orientation.rbs +15 -0
- data/sig/mindee/v1/parsing/common/page.rbs +19 -0
- data/sig/mindee/v1/parsing/common/prediction.rbs +14 -0
- data/sig/mindee/v1/parsing/common/product.rbs +16 -0
- data/sig/mindee/v1/parsing/common/workflow_response.rbs +22 -0
- data/sig/mindee/v1/parsing/standard/abstract_field.rbs +30 -0
- data/sig/mindee/v1/parsing/standard/address_field.rbs +28 -0
- data/sig/mindee/v1/parsing/standard/amount_field.rbs +16 -0
- data/sig/mindee/v1/parsing/standard/base_field.rbs +16 -0
- data/sig/mindee/v1/parsing/standard/boolean_field.rbs +16 -0
- data/sig/mindee/v1/parsing/standard/classification_field.rbs +12 -0
- data/sig/mindee/v1/parsing/standard/company_registration_field.rbs +20 -0
- data/sig/mindee/v1/parsing/standard/date_field.rbs +20 -0
- data/sig/mindee/v1/parsing/standard/feature_field.rbs +12 -0
- data/sig/mindee/v1/parsing/standard/locale_field.rbs +24 -0
- data/sig/mindee/v1/parsing/standard/payment_details_field.rbs +19 -0
- data/sig/mindee/v1/parsing/standard/position_field.rbs +26 -0
- data/sig/mindee/v1/parsing/standard/string_field.rbs +16 -0
- data/sig/mindee/v1/parsing/standard/tax_field.rbs +33 -0
- data/sig/mindee/v1/parsing/universal/universal_list_field.rbs +21 -0
- data/sig/mindee/v1/parsing/universal/universal_object_field.rbs +38 -0
- data/sig/mindee/v1/product/barcode_reader/barcode_reader_v1.rbs +13 -0
- data/sig/mindee/v1/product/barcode_reader/barcode_reader_v1_document.rbs +16 -0
- data/sig/mindee/v1/product/barcode_reader/barcode_reader_v1_page.rbs +17 -0
- data/sig/mindee/v1/product/cropper/cropper_v1.rbs +13 -0
- data/sig/mindee/v1/product/cropper/cropper_v1_document.rbs +14 -0
- data/sig/mindee/v1/product/cropper/cropper_v1_page.rbs +19 -0
- data/sig/mindee/v1/product/financial_document/financial_document_v1.rbs +13 -0
- data/sig/mindee/v1/product/financial_document/financial_document_v1_document.rbs +49 -0
- data/sig/mindee/v1/product/financial_document/financial_document_v1_line_item.rbs +35 -0
- data/sig/mindee/v1/product/financial_document/financial_document_v1_line_items.rbs +15 -0
- data/sig/mindee/v1/product/financial_document/financial_document_v1_page.rbs +17 -0
- data/sig/mindee/v1/product/fr/bank_account_details/bank_account_details_v1.rbs +15 -0
- data/sig/mindee/v1/product/fr/bank_account_details/bank_account_details_v1_document.rbs +19 -0
- data/sig/mindee/v1/product/fr/bank_account_details/bank_account_details_v1_page.rbs +19 -0
- data/sig/mindee/v1/product/fr/bank_account_details/bank_account_details_v2.rbs +15 -0
- data/sig/mindee/v1/product/fr/bank_account_details/bank_account_details_v2_bban.rbs +25 -0
- data/sig/mindee/v1/product/fr/bank_account_details/bank_account_details_v2_document.rbs +20 -0
- data/sig/mindee/v1/product/fr/bank_account_details/bank_account_details_v2_page.rbs +19 -0
- data/sig/mindee/v1/product/fr/bank_statement/bank_statement_v2.rbs +15 -0
- data/sig/mindee/v1/product/fr/bank_statement/bank_statement_v2_document.rbs +31 -0
- data/sig/mindee/v1/product/fr/bank_statement/bank_statement_v2_page.rbs +19 -0
- data/sig/mindee/v1/product/fr/bank_statement/bank_statement_v2_transaction.rbs +27 -0
- data/sig/mindee/v1/product/fr/bank_statement/bank_statement_v2_transactions.rbs +17 -0
- data/sig/mindee/v1/product/fr/id_card/id_card_v1.rbs +15 -0
- data/sig/mindee/v1/product/fr/id_card/id_card_v1_document.rbs +26 -0
- data/sig/mindee/v1/product/fr/id_card/id_card_v1_page.rbs +20 -0
- data/sig/mindee/v1/product/fr/id_card/id_card_v2.rbs +15 -0
- data/sig/mindee/v1/product/fr/id_card/id_card_v2_document.rbs +31 -0
- data/sig/mindee/v1/product/fr/id_card/id_card_v2_page.rbs +21 -0
- data/sig/mindee/v1/product/international_id/international_id_v2.rbs +13 -0
- data/sig/mindee/v1/product/international_id/international_id_v2_document.rbs +31 -0
- data/sig/mindee/v1/product/international_id/international_id_v2_page.rbs +17 -0
- data/sig/mindee/v1/product/invoice/invoice_v4.rbs +13 -0
- data/sig/mindee/v1/product/invoice/invoice_v4_document.rbs +45 -0
- data/sig/mindee/v1/product/invoice/invoice_v4_line_item.rbs +35 -0
- data/sig/mindee/v1/product/invoice/invoice_v4_line_items.rbs +15 -0
- data/sig/mindee/v1/product/invoice/invoice_v4_page.rbs +17 -0
- data/sig/mindee/v1/product/invoice_splitter/invoice_splitter_v1.rbs +13 -0
- data/sig/mindee/v1/product/invoice_splitter/invoice_splitter_v1_document.rbs +17 -0
- data/sig/mindee/v1/product/invoice_splitter/invoice_splitter_v1_invoice_page_group.rbs +21 -0
- data/sig/mindee/v1/product/invoice_splitter/invoice_splitter_v1_invoice_page_groups.rbs +15 -0
- data/sig/mindee/v1/product/invoice_splitter/invoice_splitter_v1_page.rbs +17 -0
- data/sig/mindee/v1/product/multi_receipts_detector/multi_receipts_detector_v1.rbs +14 -0
- data/sig/mindee/v1/product/multi_receipts_detector/multi_receipts_detector_v1_document.rbs +15 -0
- data/sig/mindee/v1/product/multi_receipts_detector/multi_receipts_detector_v1_page.rbs +17 -0
- data/sig/mindee/v1/product/passport/passport_v1.rbs +13 -0
- data/sig/mindee/v1/product/passport/passport_v1_document.rbs +25 -0
- data/sig/mindee/v1/product/passport/passport_v1_page.rbs +17 -0
- data/sig/mindee/v1/product/receipt/receipt_v5.rbs +13 -0
- data/sig/mindee/v1/product/receipt/receipt_v5_document.rbs +33 -0
- data/sig/mindee/v1/product/receipt/receipt_v5_line_item.rbs +27 -0
- data/sig/mindee/v1/product/receipt/receipt_v5_line_items.rbs +15 -0
- data/sig/mindee/v1/product/receipt/receipt_v5_page.rbs +17 -0
- data/sig/mindee/v1/product/resume/resume_v1.rbs +13 -0
- data/sig/mindee/v1/product/resume/resume_v1_certificate.rbs +27 -0
- data/sig/mindee/v1/product/resume/resume_v1_certificates.rbs +17 -0
- data/sig/mindee/v1/product/resume/resume_v1_document.rbs +69 -0
- data/sig/mindee/v1/product/resume/resume_v1_education.rbs +33 -0
- data/sig/mindee/v1/product/resume/resume_v1_educations.rbs +17 -0
- data/sig/mindee/v1/product/resume/resume_v1_language.rbs +23 -0
- data/sig/mindee/v1/product/resume/resume_v1_languages.rbs +17 -0
- data/sig/mindee/v1/product/resume/resume_v1_page.rbs +19 -0
- data/sig/mindee/v1/product/resume/resume_v1_professional_experience.rbs +37 -0
- data/sig/mindee/v1/product/resume/resume_v1_professional_experiences.rbs +17 -0
- data/sig/mindee/v1/product/resume/resume_v1_social_networks_url.rbs +23 -0
- data/sig/mindee/v1/product/resume/resume_v1_social_networks_urls.rbs +17 -0
- data/sig/mindee/v1/product/universal/universal.rbs +16 -0
- data/sig/mindee/v1/product/universal/universal_document.rbs +12 -0
- data/sig/mindee/v1/product/universal/universal_page.rbs +18 -0
- data/sig/mindee/v1/product/universal/universal_prediction.rbs +30 -0
- data/sig/mindee/v2/client.rbs +29 -0
- data/sig/mindee/v2/file_operation/crop.rbs +10 -0
- data/sig/mindee/v2/file_operation/crop_files.rbs +9 -0
- data/sig/mindee/v2/file_operation/split.rbs +11 -0
- data/sig/mindee/v2/file_operation/split_files.rbs +9 -0
- data/sig/mindee/v2/http/api_v2_settings.rbs +27 -0
- data/sig/mindee/v2/http/mindee_api_v2.rbs +52 -0
- data/sig/mindee/v2/parsing/base_inference.rbs +18 -0
- data/sig/mindee/v2/parsing/base_response.rbs +11 -0
- data/sig/mindee/v2/parsing/common_response.rbs +12 -0
- data/sig/mindee/v2/parsing/error_item.rbs +13 -0
- data/sig/mindee/v2/parsing/error_response.rbs +20 -0
- data/sig/mindee/v2/parsing/field/base_field.rbs +17 -0
- data/sig/mindee/v2/parsing/field/field_confidence.rbs +30 -0
- data/sig/mindee/v2/parsing/field/field_location.rbs +16 -0
- data/sig/mindee/v2/parsing/field/inference_fields.rbs +20 -0
- data/sig/mindee/v2/parsing/field/list_field.rbs +23 -0
- data/sig/mindee/v2/parsing/field/object_field.rbs +27 -0
- data/sig/mindee/v2/parsing/field/simple_field.rbs +16 -0
- data/sig/mindee/v2/parsing/inference_active_options.rbs +26 -0
- data/sig/mindee/v2/parsing/inference_file.rbs +17 -0
- data/sig/mindee/v2/parsing/inference_job.rbs +13 -0
- data/sig/mindee/v2/parsing/inference_model.rbs +12 -0
- data/sig/mindee/v2/parsing/job.rbs +24 -0
- data/sig/mindee/v2/parsing/job_response.rbs +14 -0
- data/sig/mindee/v2/parsing/job_webhook.rbs +19 -0
- data/sig/mindee/v2/parsing/rag_metadata.rbs +13 -0
- data/sig/mindee/v2/parsing/raw_text.rbs +12 -0
- data/sig/mindee/v2/parsing/raw_text_page.rbs +11 -0
- data/sig/mindee/v2/parsing/search/pagination_metadata.rbs +20 -0
- data/sig/mindee/v2/parsing/search/search_model.rbs +19 -0
- data/sig/mindee/v2/parsing/search/search_response.rbs +17 -0
- data/sig/mindee/v2/parsing/search_models.rbs +14 -0
- data/sig/mindee/v2/product/base_product.rbs +19 -0
- data/sig/mindee/v2/product/classification/classification.rbs +10 -0
- data/sig/mindee/v2/product/classification/classification_classifier.rbs +15 -0
- data/sig/mindee/v2/product/classification/classification_inference.rbs +15 -0
- data/sig/mindee/v2/product/classification/classification_response.rbs +23 -0
- data/sig/mindee/v2/product/classification/classification_result.rbs +15 -0
- data/sig/mindee/v2/product/classification/params/classification_parameters/classification_parameters.rbs +23 -0
- data/sig/mindee/v2/product/crop/crop.rbs +10 -0
- data/sig/mindee/v2/product/crop/crop_inference.rbs +14 -0
- data/sig/mindee/v2/product/crop/crop_item.rbs +18 -0
- data/sig/mindee/v2/product/crop/crop_response.rbs +25 -0
- data/sig/mindee/v2/product/crop/crop_result.rbs +14 -0
- data/sig/mindee/v2/product/crop/params/crop_parameters/crop_parameters.rbs +23 -0
- data/sig/mindee/v2/product/extraction/extraction.rbs +15 -0
- data/sig/mindee/v2/product/extraction/extraction_inference.rbs +19 -0
- data/sig/mindee/v2/product/extraction/extraction_response.rbs +24 -0
- data/sig/mindee/v2/product/extraction/extraction_result.rbs +18 -0
- data/sig/mindee/v2/product/extraction/params/data_schema.rbs +21 -0
- data/sig/mindee/v2/product/extraction/params/data_schema_field.rbs +29 -0
- data/sig/mindee/v2/product/extraction/params/data_schema_replace.rbs +21 -0
- data/sig/mindee/v2/product/extraction/params/extraction_parameters.rbs +38 -0
- data/sig/mindee/v2/product/ocr/ocr.rbs +10 -0
- data/sig/mindee/v2/product/ocr/ocr_inference.rbs +14 -0
- data/sig/mindee/v2/product/ocr/ocr_page.rbs +15 -0
- data/sig/mindee/v2/product/ocr/ocr_response.rbs +23 -0
- data/sig/mindee/v2/product/ocr/ocr_result.rbs +14 -0
- data/sig/mindee/v2/product/ocr/ocr_word.rbs +15 -0
- data/sig/mindee/v2/product/ocr/params/ocr_parameters/ocr_parameters.rbs +24 -0
- data/sig/mindee/v2/product/split/params/split_parameters/split_parameters.rbs +23 -0
- data/sig/mindee/v2/product/split/split.rbs +10 -0
- data/sig/mindee/v2/product/split/split_inference.rbs +14 -0
- data/sig/mindee/v2/product/split/split_range.rbs +18 -0
- data/sig/mindee/v2/product/split/split_response.rbs +25 -0
- data/sig/mindee/v2/product/split/split_result.rbs +14 -0
- data/sig/mindee/version.rbs +6 -0
- data/sig/mindee.rbs +62 -0
- metadata +600 -0
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'json'
|
|
4
|
+
require 'net/http'
|
|
5
|
+
require_relative '../../http/http_error_handler'
|
|
6
|
+
require_relative '../../version'
|
|
7
|
+
require_relative '../../http/response_validation'
|
|
8
|
+
|
|
9
|
+
module Mindee
|
|
10
|
+
# Mindee internal HTTP module.
|
|
11
|
+
module V1
|
|
12
|
+
module HTTP
|
|
13
|
+
# API key's default environment key name.
|
|
14
|
+
API_KEY_ENV_NAME = 'MINDEE_API_KEY'
|
|
15
|
+
# API key's default value.
|
|
16
|
+
API_KEY_DEFAULT = nil
|
|
17
|
+
|
|
18
|
+
# Base URL default environment key name.
|
|
19
|
+
BASE_URL_ENV_NAME = 'MINDEE_BASE_URL'
|
|
20
|
+
# Base URL's default value.
|
|
21
|
+
BASE_URL_DEFAULT = 'https://api.mindee.net/v1'
|
|
22
|
+
|
|
23
|
+
# HTTP request timeout default environment key name.
|
|
24
|
+
REQUEST_TIMEOUT_ENV_NAME = 'MINDEE_REQUEST_TIMEOUT'
|
|
25
|
+
# HTTP request timeout default value.
|
|
26
|
+
TIMEOUT_DEFAULT = 120
|
|
27
|
+
|
|
28
|
+
# Default value for the user agent.
|
|
29
|
+
USER_AGENT = "mindee-api-ruby@v#{Mindee::VERSION} ruby-v#{RUBY_VERSION} #{Mindee::PLATFORM}".freeze
|
|
30
|
+
|
|
31
|
+
# Generic API endpoint for a product.
|
|
32
|
+
class Endpoint
|
|
33
|
+
# @return [String]
|
|
34
|
+
attr_reader :api_key
|
|
35
|
+
# @return [Integer]
|
|
36
|
+
attr_reader :request_timeout
|
|
37
|
+
# @return [String]
|
|
38
|
+
attr_reader :url_root
|
|
39
|
+
# @return [String]
|
|
40
|
+
attr_reader :base_url
|
|
41
|
+
|
|
42
|
+
def initialize(owner, url_name, version, api_key: '')
|
|
43
|
+
@owner = owner
|
|
44
|
+
@url_name = url_name
|
|
45
|
+
@version = version
|
|
46
|
+
@request_timeout = ENV.fetch(REQUEST_TIMEOUT_ENV_NAME, TIMEOUT_DEFAULT).to_i
|
|
47
|
+
if api_key.nil? && !ENV.fetch(API_KEY_ENV_NAME, API_KEY_DEFAULT).to_s.empty?
|
|
48
|
+
logger.debug('API key set from environment')
|
|
49
|
+
end
|
|
50
|
+
@api_key = api_key.nil? || api_key.empty? ? ENV.fetch(API_KEY_ENV_NAME, API_KEY_DEFAULT) : api_key
|
|
51
|
+
@base_url = ENV.fetch(BASE_URL_ENV_NAME, BASE_URL_DEFAULT).chomp('/')
|
|
52
|
+
@url_root = "#{@base_url}/products/#{@owner}/#{@url_name}/v#{@version}"
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Call the prediction API.
|
|
56
|
+
# @param input_source [Mindee::Input::Source::LocalInputSource, Mindee::Input::Source::URLInputSource]
|
|
57
|
+
# @param opts [ParseOptions] Parse options.
|
|
58
|
+
# @return [Array]
|
|
59
|
+
def predict(input_source, opts)
|
|
60
|
+
check_api_key
|
|
61
|
+
response = predict_req_post(
|
|
62
|
+
input_source,
|
|
63
|
+
opts
|
|
64
|
+
)
|
|
65
|
+
if !response.nil? && response.respond_to?(:body)
|
|
66
|
+
hashed_response = JSON.parse(response.body, object_class: Hash)
|
|
67
|
+
return [hashed_response, response.body] if Mindee::HTTP::ResponseValidation.valid_sync_response?(response)
|
|
68
|
+
|
|
69
|
+
Mindee::HTTP::ResponseValidation.clean_request!(response)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
raise Error::MindeeError, 'Could not resolve server response.' if response.nil?
|
|
73
|
+
|
|
74
|
+
error = Mindee::HTTP::ErrorHandler.handle_error(@url_name, response)
|
|
75
|
+
raise error
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# Call the prediction API.
|
|
79
|
+
# @param input_source [Mindee::Input::Source::LocalInputSource, Mindee::Input::Source::URLInputSource]
|
|
80
|
+
# @param opts [ParseOptions, Hash] Parse options.
|
|
81
|
+
# @return [Array]
|
|
82
|
+
def predict_async(input_source, opts)
|
|
83
|
+
check_api_key
|
|
84
|
+
response = document_queue_req_post(input_source, opts)
|
|
85
|
+
if !response.nil? && response.respond_to?(:body)
|
|
86
|
+
hashed_response = JSON.parse(response.body, object_class: Hash)
|
|
87
|
+
return [hashed_response, response.body] if Mindee::HTTP::ResponseValidation.valid_async_response?(response)
|
|
88
|
+
|
|
89
|
+
Mindee::HTTP::ResponseValidation.clean_request!(response)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
raise Error::MindeeError, 'Could not resolve server response.' if response.nil?
|
|
93
|
+
|
|
94
|
+
raise Mindee::HTTP::ErrorHandler.handle_error(@url_name, response)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# Calls the parsed async doc.
|
|
98
|
+
# @param job_id [String]
|
|
99
|
+
# @return [Array]
|
|
100
|
+
def parse_async(job_id)
|
|
101
|
+
check_api_key
|
|
102
|
+
response = document_queue_req_get(job_id)
|
|
103
|
+
hashed_response = JSON.parse(response.body, object_class: Hash)
|
|
104
|
+
return [hashed_response, response.body] if Mindee::HTTP::ResponseValidation.valid_async_response?(response)
|
|
105
|
+
|
|
106
|
+
Mindee::HTTP::ResponseValidation.clean_request!(response)
|
|
107
|
+
error = Mindee::HTTP::ErrorHandler.handle_error(@url_name, response)
|
|
108
|
+
raise error
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
private
|
|
112
|
+
|
|
113
|
+
# @param input_source [Mindee::Input::Source::LocalInputSource, Mindee::Input::Source::URLInputSource]
|
|
114
|
+
# @param opts [ParseOptions] Parse options.
|
|
115
|
+
# @return [Net::HTTPResponse, nil]
|
|
116
|
+
def predict_req_post(input_source, opts)
|
|
117
|
+
uri = URI("#{@url_root}/predict")
|
|
118
|
+
|
|
119
|
+
params = {} # : Hash[String | Symbol, untyped]
|
|
120
|
+
params[:cropper] = 'true' if opts.cropper
|
|
121
|
+
params[:full_text_ocr] = 'true' if opts.full_text
|
|
122
|
+
uri.query = URI.encode_www_form(params)
|
|
123
|
+
|
|
124
|
+
headers = {
|
|
125
|
+
'Authorization' => "Token #{@api_key}",
|
|
126
|
+
'User-Agent' => USER_AGENT,
|
|
127
|
+
}
|
|
128
|
+
req = Net::HTTP::Post.new(uri, headers)
|
|
129
|
+
form_data = if input_source.is_a?(Mindee::Input::Source::URLInputSource)
|
|
130
|
+
[['document', input_source.url]] # : Array[untyped]
|
|
131
|
+
else
|
|
132
|
+
[['document', *input_source.read_contents(close: opts.close_file)]] # : Array[untyped]
|
|
133
|
+
end
|
|
134
|
+
form_data.push ['include_mvision', 'true'] if opts.all_words
|
|
135
|
+
|
|
136
|
+
req.set_form(form_data, 'multipart/form-data')
|
|
137
|
+
req['Transfer-Encoding'] = 'chunked'
|
|
138
|
+
|
|
139
|
+
Net::HTTP.start(uri.hostname, uri.port, use_ssl: true, read_timeout: @request_timeout) do |http|
|
|
140
|
+
return http.request(req)
|
|
141
|
+
end
|
|
142
|
+
raise Mindee::Error::MindeeError, 'Could not resolve server response.'
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
# @param input_source [Mindee::Input::Source::LocalInputSource, Mindee::Input::Source::URLInputSource]
|
|
146
|
+
# @param opts [ParseOptions] Parse options.
|
|
147
|
+
# @return [Net::HTTPResponse]
|
|
148
|
+
def document_queue_req_post(input_source, opts)
|
|
149
|
+
uri = if opts.workflow_id
|
|
150
|
+
URI("#{@base_url}/workflows/#{opts.workflow_id}/predict_async")
|
|
151
|
+
else
|
|
152
|
+
URI("#{@url_root}/predict_async")
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
params = {} # : Hash[String | Symbol, untyped]
|
|
156
|
+
params[:cropper] = 'true' if opts.cropper
|
|
157
|
+
params[:full_text_ocr] = 'true' if opts.full_text
|
|
158
|
+
params[:rag] = 'true' if opts.rag
|
|
159
|
+
uri.query = URI.encode_www_form(params)
|
|
160
|
+
|
|
161
|
+
headers = {
|
|
162
|
+
'Authorization' => "Token #{@api_key}",
|
|
163
|
+
'User-Agent' => USER_AGENT,
|
|
164
|
+
}
|
|
165
|
+
req = Net::HTTP::Post.new(uri, headers)
|
|
166
|
+
form_data = if input_source.is_a?(Mindee::Input::Source::URLInputSource)
|
|
167
|
+
[['document', input_source.url]] # : Array[untyped]
|
|
168
|
+
else
|
|
169
|
+
[['document', *input_source.read_contents(close: opts.close_file)]] # : Array[untyped]
|
|
170
|
+
end
|
|
171
|
+
form_data.push ['include_mvision', 'true'] if opts.all_words
|
|
172
|
+
|
|
173
|
+
req.set_form(form_data, 'multipart/form-data')
|
|
174
|
+
req['Transfer-Encoding'] = 'chunked'
|
|
175
|
+
|
|
176
|
+
Net::HTTP.start(uri.hostname, uri.port, use_ssl: true, read_timeout: @request_timeout) do |http|
|
|
177
|
+
return http.request(req)
|
|
178
|
+
end
|
|
179
|
+
raise Mindee::Error::MindeeError, 'Could not resolve server response.'
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
# @param job_id [String]
|
|
183
|
+
# @return [Net::HTTPResponse, nil]
|
|
184
|
+
def document_queue_req_get(job_id)
|
|
185
|
+
uri = URI("#{@url_root}/documents/queue/#{job_id}")
|
|
186
|
+
|
|
187
|
+
headers = {
|
|
188
|
+
'Authorization' => "Token #{@api_key}",
|
|
189
|
+
'User-Agent' => USER_AGENT,
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
req = Net::HTTP::Get.new(uri, headers)
|
|
193
|
+
|
|
194
|
+
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true, read_timeout: @request_timeout) do |http|
|
|
195
|
+
http.request(req)
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
raise Error::MindeeError, 'Could not resolve server response.' if response.nil?
|
|
199
|
+
|
|
200
|
+
if response.code.to_i > 299 && response.code.to_i < 400
|
|
201
|
+
req = Net::HTTP::Get.new(response['location'], headers)
|
|
202
|
+
Net::HTTP.start(uri.hostname, uri.port, use_ssl: true, read_timeout: @request_timeout) do |http|
|
|
203
|
+
response = http.request(req)
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
response
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
# Checks API key
|
|
210
|
+
def check_api_key
|
|
211
|
+
return unless @api_key.nil? || @api_key.empty?
|
|
212
|
+
|
|
213
|
+
raise Error::MindeeAPIError,
|
|
214
|
+
"Missing API key for product \"'#{@url_name}' v#{@version}\" (belonging to \"#{@owner}\"), " \
|
|
215
|
+
"check your Client Configuration.\nYou can set this using the " \
|
|
216
|
+
"'#{HTTP::API_KEY_ENV_NAME}' environment variable."
|
|
217
|
+
end
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
end
|
|
221
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'json'
|
|
4
|
+
require 'net/http'
|
|
5
|
+
require_relative '../../http/http_error_handler'
|
|
6
|
+
|
|
7
|
+
module Mindee
|
|
8
|
+
module V1
|
|
9
|
+
module HTTP
|
|
10
|
+
# Handles the routing for workflow calls.
|
|
11
|
+
class WorkflowEndpoint
|
|
12
|
+
# @return [String]
|
|
13
|
+
attr_reader :api_key
|
|
14
|
+
# @return [Integer]
|
|
15
|
+
attr_reader :request_timeout
|
|
16
|
+
# @return [String]
|
|
17
|
+
attr_reader :url
|
|
18
|
+
|
|
19
|
+
def initialize(workflow_id, api_key: '')
|
|
20
|
+
@request_timeout = ENV.fetch(REQUEST_TIMEOUT_ENV_NAME, TIMEOUT_DEFAULT).to_i
|
|
21
|
+
@api_key = api_key.nil? || api_key.empty? ? ENV.fetch(API_KEY_ENV_NAME, API_KEY_DEFAULT) : api_key
|
|
22
|
+
base_url = ENV.fetch(BASE_URL_ENV_NAME, BASE_URL_DEFAULT)
|
|
23
|
+
@url = "#{base_url.chomp('/')}/workflows/#{workflow_id}/executions"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Sends a document to the workflow.
|
|
27
|
+
# @param input_source [Mindee::Input::Source::LocalInputSource, Mindee::Input::Source::URLInputSource]
|
|
28
|
+
# @param opts [WorkflowOptions] Options to configure workflow execution behavior.
|
|
29
|
+
# @return [Array]
|
|
30
|
+
def execute_workflow(input_source, opts)
|
|
31
|
+
check_api_key
|
|
32
|
+
response = workflow_execution_req_post(input_source, opts)
|
|
33
|
+
if response.nil?
|
|
34
|
+
raise Mindee::Error::MindeeHTTPError.new(
|
|
35
|
+
{ code: 0, details: 'Server response was nil.', message: 'Unknown error.' }, @url, 0
|
|
36
|
+
)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
hashed_response = JSON.parse(response.body, object_class: Hash)
|
|
40
|
+
return [hashed_response, response.body] if Mindee::HTTP::ResponseValidation.valid_async_response?(response)
|
|
41
|
+
|
|
42
|
+
Mindee::HTTP::ResponseValidation.clean_request!(response)
|
|
43
|
+
error = Mindee::HTTP::ErrorHandler.handle_error(@url_name, response)
|
|
44
|
+
raise error
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# @param input_source [Mindee::Input::Source::LocalInputSource, Mindee::Input::Source::URLInputSource]
|
|
48
|
+
# @param opts [WorkflowOptions] Options to configure workflow execution behavior.
|
|
49
|
+
# @return [Net::HTTPResponse, nil]
|
|
50
|
+
def workflow_execution_req_post(input_source, opts)
|
|
51
|
+
uri = URI(@url)
|
|
52
|
+
params = {} # : Hash[String | Symbol, untyped]
|
|
53
|
+
params[:full_text_ocr] = 'true' if opts.full_text
|
|
54
|
+
params[:rag] = 'true' if opts.rag
|
|
55
|
+
uri.query = URI.encode_www_form(params) if params.any?
|
|
56
|
+
|
|
57
|
+
headers = {
|
|
58
|
+
'Authorization' => "Token #{@api_key}",
|
|
59
|
+
'User-Agent' => USER_AGENT,
|
|
60
|
+
}
|
|
61
|
+
req = Net::HTTP::Post.new(uri, headers)
|
|
62
|
+
form_data = [] # : Array[untyped]
|
|
63
|
+
if input_source.is_a?(Mindee::Input::Source::URLInputSource)
|
|
64
|
+
form_data.push ['document', input_source.url]
|
|
65
|
+
else
|
|
66
|
+
form_data.push ['document', *input_source.read_contents(close: opts.close_file)]
|
|
67
|
+
end
|
|
68
|
+
form_data.push ['alias', opts.document_alias] if opts.document_alias
|
|
69
|
+
form_data.push ['public_url', opts.public_url] if opts.public_url
|
|
70
|
+
form_data.push ['priority', opts.priority.to_s] if opts.priority
|
|
71
|
+
|
|
72
|
+
req.set_form(form_data, 'multipart/form-data')
|
|
73
|
+
req['Transfer-Encoding'] = 'chunked'
|
|
74
|
+
|
|
75
|
+
response = nil
|
|
76
|
+
Net::HTTP.start(uri.hostname, uri.port, use_ssl: true, read_timeout: @request_timeout) do |http|
|
|
77
|
+
response = http.request(req)
|
|
78
|
+
end
|
|
79
|
+
response
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Checks API key
|
|
83
|
+
def check_api_key
|
|
84
|
+
return unless @api_key.nil? || @api_key.empty?
|
|
85
|
+
|
|
86
|
+
raise Error::MindeeConfigurationError, "Missing API key. Check your Client Configuration.\n" \
|
|
87
|
+
"You can set this using the '#{HTTP::API_KEY_ENV_NAME}'" \
|
|
88
|
+
'environment variable.'
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Mindee
|
|
4
|
+
module V1
|
|
5
|
+
module Parsing
|
|
6
|
+
module Common
|
|
7
|
+
# HTTP request response.
|
|
8
|
+
class ApiRequest
|
|
9
|
+
# @return [Hash]
|
|
10
|
+
attr_reader :error
|
|
11
|
+
# @return [Array<String>]
|
|
12
|
+
attr_reader :resources
|
|
13
|
+
# @return [RequestStatus, Symbol]
|
|
14
|
+
attr_reader :status
|
|
15
|
+
# @return [Integer]
|
|
16
|
+
attr_reader :status_code
|
|
17
|
+
# @return [String]
|
|
18
|
+
attr_reader :url
|
|
19
|
+
|
|
20
|
+
def initialize(server_response)
|
|
21
|
+
@error = server_response['error']
|
|
22
|
+
@resources = server_response['resources']
|
|
23
|
+
|
|
24
|
+
@status = if server_response['status'] == 'failure'
|
|
25
|
+
RequestStatus::FAILURE
|
|
26
|
+
elsif server_response['status'] == 'success'
|
|
27
|
+
RequestStatus::SUCCESS
|
|
28
|
+
else
|
|
29
|
+
server_response['status']&.to_sym
|
|
30
|
+
end
|
|
31
|
+
@status_code = server_response['status_code']
|
|
32
|
+
@url = server_response['url']
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'document'
|
|
4
|
+
require_relative '../../../logging'
|
|
5
|
+
|
|
6
|
+
module Mindee
|
|
7
|
+
module V1
|
|
8
|
+
module Parsing
|
|
9
|
+
module Common
|
|
10
|
+
# Potential values for queue in asynchronous calls.
|
|
11
|
+
module JobStatus
|
|
12
|
+
# Job is waiting.
|
|
13
|
+
WAITING = :waiting
|
|
14
|
+
# Job is processing.
|
|
15
|
+
PROCESSING = :processing
|
|
16
|
+
# Job is done.
|
|
17
|
+
COMPLETED = :completed
|
|
18
|
+
# Job failed.
|
|
19
|
+
FAILURE = :failed
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Potential values for requests.
|
|
23
|
+
module RequestStatus
|
|
24
|
+
# Failed.
|
|
25
|
+
FAILURE = :failure
|
|
26
|
+
# Success.
|
|
27
|
+
SUCCESS = :success
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Wrapper class for all predictions (synchronous and asynchronous)
|
|
31
|
+
class ApiResponse
|
|
32
|
+
# @return [Mindee::V1::Parsing::Common::Document, nil]
|
|
33
|
+
attr_reader :document
|
|
34
|
+
# @return [Mindee::V1::Parsing::Common::Job, nil]
|
|
35
|
+
attr_reader :job
|
|
36
|
+
# @return [Mindee::V1::Parsing::Common::ApiRequest]
|
|
37
|
+
attr_reader :api_request
|
|
38
|
+
# @return [String]
|
|
39
|
+
attr_reader :raw_http
|
|
40
|
+
|
|
41
|
+
# @param product_class [Mindee::Inference]
|
|
42
|
+
# @param http_response [Hash]
|
|
43
|
+
# @param raw_http [String]
|
|
44
|
+
def initialize(product_class, http_response, raw_http)
|
|
45
|
+
logger.debug('Handling API response')
|
|
46
|
+
@raw_http = raw_http
|
|
47
|
+
raise Error::MindeeAPIError, 'Invalid response format.' unless http_response.key?('api_request')
|
|
48
|
+
|
|
49
|
+
@api_request = Mindee::V1::Parsing::Common::ApiRequest.new(http_response['api_request'])
|
|
50
|
+
|
|
51
|
+
if http_response.key?('document') &&
|
|
52
|
+
(!http_response.key?('job') ||
|
|
53
|
+
http_response['job']['status'] == 'completed') &&
|
|
54
|
+
@api_request.status == RequestStatus::SUCCESS
|
|
55
|
+
@document = Mindee::V1::Parsing::Common::Document.new(product_class, http_response['document'])
|
|
56
|
+
end
|
|
57
|
+
@job = Mindee::V1::Parsing::Common::Job.new(http_response['job']) if http_response.key?('job')
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'inference'
|
|
4
|
+
require_relative 'extras'
|
|
5
|
+
|
|
6
|
+
module Mindee
|
|
7
|
+
module V1
|
|
8
|
+
module Parsing
|
|
9
|
+
module Common
|
|
10
|
+
# Stores all response attributes.
|
|
11
|
+
class Document
|
|
12
|
+
# @return [Mindee::Inference]
|
|
13
|
+
attr_reader :inference
|
|
14
|
+
# @return [String] Filename sent to the API
|
|
15
|
+
attr_reader :name
|
|
16
|
+
# @return [String] Mindee ID of the document
|
|
17
|
+
attr_reader :id
|
|
18
|
+
# @return [Mindee::V1::Parsing::Common::Extras::Extras] Potential Extras fields sent back along the prediction
|
|
19
|
+
attr_reader :extras
|
|
20
|
+
# @return [Mindee::V1::Parsing::Common::OCR::OCR, nil] OCR text results (limited availability)
|
|
21
|
+
attr_reader :ocr
|
|
22
|
+
# @return [Integer] Amount of pages of the document
|
|
23
|
+
attr_reader :n_pages
|
|
24
|
+
|
|
25
|
+
# Loads the MVision OCR response.
|
|
26
|
+
# @param http_response [Hash] Full HTTP contents of the response.
|
|
27
|
+
# @return [Mindee::V1::Parsing::Common::OCR::OCR]
|
|
28
|
+
def self.load_ocr(http_response)
|
|
29
|
+
ocr_prediction = http_response.fetch('ocr', nil)
|
|
30
|
+
return nil if ocr_prediction.nil? || ocr_prediction.fetch('mvision-v1', nil).nil?
|
|
31
|
+
|
|
32
|
+
OCR::OCR.new(ocr_prediction)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Loads extras into the document prediction.
|
|
36
|
+
# @param http_response [Hash] Full HTTP contents of the response.
|
|
37
|
+
# @return [Mindee::V1::Parsing::Common::OCR::OCR]
|
|
38
|
+
def self.extract_extras(http_response)
|
|
39
|
+
extras_prediction = http_response['inference'].fetch('extras', nil)
|
|
40
|
+
return nil if extras_prediction.nil? || extras_prediction.fetch('mvision-v1', nil).nil?
|
|
41
|
+
|
|
42
|
+
Mindee::V1::Parsing::Common::Extras::Extras.new(extras_prediction)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# @param product_class [Mindee::Inference]
|
|
46
|
+
# @param http_response [Hash]
|
|
47
|
+
def initialize(product_class, http_response)
|
|
48
|
+
@id = http_response['id']
|
|
49
|
+
@name = http_response['name']
|
|
50
|
+
@inference = product_class.new(http_response['inference'])
|
|
51
|
+
@ocr = self.class.load_ocr(http_response)
|
|
52
|
+
@extras = self.class.extract_extras(http_response)
|
|
53
|
+
inject_full_text_ocr(http_response)
|
|
54
|
+
@n_pages = http_response['n_pages']
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# @return [String]
|
|
58
|
+
def to_s
|
|
59
|
+
out_str = String.new
|
|
60
|
+
out_str << "########\nDocument\n########"
|
|
61
|
+
out_str << "\n:Mindee ID: #{@id}"
|
|
62
|
+
out_str << "\n:Filename: #{@name}"
|
|
63
|
+
out_str << "\n\n#{@inference}"
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
private
|
|
67
|
+
|
|
68
|
+
def inject_full_text_ocr(raw_prediction)
|
|
69
|
+
return unless raw_prediction.dig('inference', 'pages', 0, 'extras', 'full_text_ocr')
|
|
70
|
+
|
|
71
|
+
full_text_ocr = String.new
|
|
72
|
+
raw_prediction.dig('inference', 'pages').each do |page|
|
|
73
|
+
full_text_ocr << page['extras']['full_text_ocr']['content']
|
|
74
|
+
end
|
|
75
|
+
artificial_text_obj = { 'content' => full_text_ocr }
|
|
76
|
+
if @extras.nil? || @extras.empty?
|
|
77
|
+
@extras = Mindee::V1::Parsing::Common::Extras::Extras.new({ 'full_text_ocr' => artificial_text_obj })
|
|
78
|
+
else
|
|
79
|
+
@extras.add_artificial_extra({ 'full_text_ocr' => artificial_text_obj })
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Mindee
|
|
4
|
+
module V1
|
|
5
|
+
module Parsing
|
|
6
|
+
module Common
|
|
7
|
+
# Identifier for the batch to which the execution belongs.
|
|
8
|
+
class Execution
|
|
9
|
+
# Identifier for the batch to which the execution belongs.
|
|
10
|
+
# @return [String]
|
|
11
|
+
attr_reader :batch_name
|
|
12
|
+
# The time at which the execution started.
|
|
13
|
+
# @return [Time, nil]
|
|
14
|
+
attr_reader :created_at
|
|
15
|
+
# File representation within a workflow execution.
|
|
16
|
+
# @return [ExecutionFile]
|
|
17
|
+
attr_reader :file
|
|
18
|
+
# Identifier for the execution.
|
|
19
|
+
# @return [String]
|
|
20
|
+
attr_reader :id
|
|
21
|
+
# Deserialized inference object.
|
|
22
|
+
# @return [Mindee::Inference]
|
|
23
|
+
attr_reader :inference
|
|
24
|
+
# Priority of the execution.
|
|
25
|
+
# @return [ExecutionPriority, Symbol, nil]
|
|
26
|
+
attr_reader :priority
|
|
27
|
+
# The time at which the file was tagged as reviewed.
|
|
28
|
+
# @return [Time, nil]
|
|
29
|
+
attr_reader :reviewed_at
|
|
30
|
+
# The time at which the file was uploaded to a workflow.
|
|
31
|
+
# @return [Time, nil]
|
|
32
|
+
attr_reader :available_at
|
|
33
|
+
# Reviewed fields and values.
|
|
34
|
+
# @return [Mindee::V1::Product::Universal::UniversalDocument]
|
|
35
|
+
attr_reader :reviewed_prediction
|
|
36
|
+
# Execution Status.
|
|
37
|
+
# @return [String]
|
|
38
|
+
attr_reader :status
|
|
39
|
+
# Execution type.
|
|
40
|
+
# @return [String]
|
|
41
|
+
attr_reader :type
|
|
42
|
+
# The time at which the file was uploaded to a workflow.
|
|
43
|
+
# @return [Time, nil]
|
|
44
|
+
attr_reader :uploaded_at
|
|
45
|
+
# Identifier for the workflow.
|
|
46
|
+
# @return [String]
|
|
47
|
+
attr_reader :workflow_id
|
|
48
|
+
|
|
49
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
|
50
|
+
|
|
51
|
+
# @param product_class [Mindee::Inference]
|
|
52
|
+
# @param http_response [Hash]
|
|
53
|
+
def initialize(product_class, http_response)
|
|
54
|
+
@batch_name = http_response['batch_name']
|
|
55
|
+
@created_at = Time.iso8601(http_response['created_at']) if http_response['created_at']
|
|
56
|
+
@file = ExecutionFile.new(http_response['file']) if http_response['file']
|
|
57
|
+
@id = http_response['id']
|
|
58
|
+
@inference = product_class.new(http_response['inference']) if http_response['inference']
|
|
59
|
+
@priority = Mindee::V1::Parsing::Common::ExecutionPriority.to_priority(http_response['priority'])
|
|
60
|
+
@reviewed_at = Time.iso8601(http_response['reviewed_at']) if http_response['reviewed_at']
|
|
61
|
+
@available_at = Time.iso8601(http_response['available_at']) if http_response['available_at']
|
|
62
|
+
if http_response['reviewed_prediction']
|
|
63
|
+
@reviewed_prediction = Mindee::V1::Product::Universal::UniversalDocument.new(
|
|
64
|
+
http_response['reviewed_prediction']
|
|
65
|
+
)
|
|
66
|
+
end
|
|
67
|
+
@status = http_response['status']
|
|
68
|
+
@type = http_response['type']
|
|
69
|
+
@uploaded_at = Time.iso8601(http_response['uploaded_at']) if http_response['uploaded_at']
|
|
70
|
+
@workflow_id = http_response['workflow_id']
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Mindee
|
|
4
|
+
module V1
|
|
5
|
+
module Parsing
|
|
6
|
+
module Common
|
|
7
|
+
# Representation of a workflow execution's file data.
|
|
8
|
+
class ExecutionFile
|
|
9
|
+
# File name.
|
|
10
|
+
# @return [String]
|
|
11
|
+
attr_reader :name
|
|
12
|
+
|
|
13
|
+
# Optional alias for the file.
|
|
14
|
+
# @return [String]
|
|
15
|
+
attr_reader :alias
|
|
16
|
+
|
|
17
|
+
# @param http_response [Hash]
|
|
18
|
+
def initialize(http_response)
|
|
19
|
+
@name = http_response['name']
|
|
20
|
+
@alias = http_response['alias']
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Mindee
|
|
4
|
+
module V1
|
|
5
|
+
module Parsing
|
|
6
|
+
module Common
|
|
7
|
+
# Execution policy priority values.
|
|
8
|
+
module ExecutionPriority
|
|
9
|
+
# Low priority execution.
|
|
10
|
+
# @return [Symbol] :low
|
|
11
|
+
LOW = :low
|
|
12
|
+
# Medium priority execution.
|
|
13
|
+
# @return [Symbol] :low
|
|
14
|
+
MEDIUM = :medium
|
|
15
|
+
# High priority execution.
|
|
16
|
+
# @return [Symbol] :low
|
|
17
|
+
HIGH = :high
|
|
18
|
+
|
|
19
|
+
# Sets the priority to one of its possibly values, defaults to nil otherwise.
|
|
20
|
+
# @param [String, nil] priority_str
|
|
21
|
+
# @return [Symbol, nil]
|
|
22
|
+
def self.to_priority(priority_str)
|
|
23
|
+
return nil if priority_str.nil?
|
|
24
|
+
|
|
25
|
+
case priority_str.downcase
|
|
26
|
+
when 'low'
|
|
27
|
+
:low
|
|
28
|
+
when 'high'
|
|
29
|
+
:high
|
|
30
|
+
else
|
|
31
|
+
:medium
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../../standard/position_field'
|
|
4
|
+
|
|
5
|
+
module Mindee
|
|
6
|
+
module V1
|
|
7
|
+
module Parsing
|
|
8
|
+
module Common
|
|
9
|
+
module Extras
|
|
10
|
+
# Contains information on the cropping of a prediction.
|
|
11
|
+
class CropperExtra
|
|
12
|
+
# Cropper extra initialization.
|
|
13
|
+
# @return [Array<Mindee::V1::Parsing::Standard::PositionField>]
|
|
14
|
+
attr_reader :croppings
|
|
15
|
+
|
|
16
|
+
def initialize(raw_prediction, page_id = nil)
|
|
17
|
+
@croppings = [] # : Array[Mindee::V1::Parsing::Standard::PositionField]
|
|
18
|
+
raw_prediction['cropping']&.each do |crop|
|
|
19
|
+
@croppings.push(Mindee::V1::Parsing::Standard::PositionField.new(crop, page_id))
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# @return [String]
|
|
24
|
+
def to_s
|
|
25
|
+
@croppings.join("\n ")
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|