mindee 5.3.1 → 5.5.0

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 (67) hide show
  1. checksums.yaml +4 -4
  2. data/.git-hooks/pre_commit/gitleaks.rb +19 -0
  3. data/.overcommit.yml +46 -0
  4. data/CHANGELOG.md +14 -0
  5. data/CONTRIBUTING.md +128 -0
  6. data/bin/mindee.rb +4 -1
  7. data/bin/v2/parser.rb +40 -45
  8. data/bin/v2/search_commands.rb +100 -0
  9. data/lib/mindee/http/cancellation_token.rb +24 -0
  10. data/lib/mindee/http.rb +1 -0
  11. data/lib/mindee/v1/client.rb +15 -1
  12. data/lib/mindee/v2/client.rb +25 -10
  13. data/lib/mindee/v2/client_options/base_product_parameters.rb +162 -0
  14. data/lib/mindee/v2/client_options/base_search_parameters.rb +51 -0
  15. data/lib/mindee/v2/client_options.rb +4 -0
  16. data/lib/mindee/v2/http/mindee_api_v2.rb +28 -32
  17. data/lib/mindee/v2/parsing/field/field_confidence.rb +37 -2
  18. data/lib/mindee/v2/parsing/search/base_search_response.rb +47 -0
  19. data/lib/mindee/v2/parsing/search/model_webhook.rb +3 -3
  20. data/lib/mindee/v2/parsing/search/pagination_metadata.rb +1 -1
  21. data/lib/mindee/v2/parsing/search/search_models.rb +2 -1
  22. data/lib/mindee/v2/parsing/search/search_rag_document.rb +60 -0
  23. data/lib/mindee/v2/parsing/search/search_rag_documents.rb +39 -0
  24. data/lib/mindee/v2/parsing/search/search_response.rb +2 -29
  25. data/lib/mindee/v2/parsing/search.rb +5 -1
  26. data/lib/mindee/v2/product/base_product.rb +2 -2
  27. data/lib/mindee/v2/product/classification/classification_classifier.rb +1 -2
  28. data/lib/mindee/v2/product/classification/params/classification_parameters.rb +1 -1
  29. data/lib/mindee/v2/product/crop/crop_item.rb +1 -2
  30. data/lib/mindee/v2/product/crop/params/crop_parameters.rb +1 -1
  31. data/lib/mindee/v2/product/extraction/params/extraction_parameters.rb +2 -2
  32. data/lib/mindee/v2/product/ocr/params/ocr_parameters.rb +1 -1
  33. data/lib/mindee/v2/product/split/params/split_parameters.rb +1 -1
  34. data/lib/mindee/v2/product/split/split_range.rb +1 -2
  35. data/lib/mindee/v2/search/models/model_search_parameters.rb +51 -0
  36. data/lib/mindee/v2/search/models/model_search_response.rb +28 -0
  37. data/lib/mindee/v2/search/rag_documents/rag_document_search_parameters.rb +52 -0
  38. data/lib/mindee/v2/search/rag_documents/rag_document_search_response.rb +28 -0
  39. data/lib/mindee/v2/search.rb +6 -0
  40. data/lib/mindee/v2.rb +2 -0
  41. data/lib/mindee/version.rb +1 -1
  42. data/mindee.gemspec +1 -0
  43. data/sig/custom/net_http.rbs +1 -1
  44. data/sig/mindee/http/cancellation_token.rbs +15 -0
  45. data/sig/mindee/v2/client.rbs +7 -4
  46. data/sig/mindee/v2/client_options/base_product_parameters.rbs +41 -0
  47. data/sig/mindee/v2/client_options/base_search_parameters.rbs +19 -0
  48. data/sig/mindee/v2/http/mindee_api_v2.rbs +12 -6
  49. data/sig/mindee/v2/parsing/field/field_confidence.rbs +9 -0
  50. data/sig/mindee/v2/parsing/search/base_search_response.rbs +19 -0
  51. data/sig/mindee/v2/parsing/search/search_rag_document.rbs +23 -0
  52. data/sig/mindee/v2/parsing/search/search_rag_documents.rbs +16 -0
  53. data/sig/mindee/v2/parsing/search/search_response.rbs +4 -9
  54. data/sig/mindee/v2/product/base_product.rbs +3 -3
  55. data/sig/mindee/v2/product/classification/params/classification_parameters/classification_parameters.rbs +1 -1
  56. data/sig/mindee/v2/product/crop/params/crop_parameters/crop_parameters.rbs +1 -1
  57. data/sig/mindee/v2/product/extraction/params/extraction_parameters.rbs +1 -1
  58. data/sig/mindee/v2/product/ocr/params/ocr_parameters/ocr_parameters.rbs +1 -1
  59. data/sig/mindee/v2/product/split/params/split_parameters/split_parameters.rbs +1 -1
  60. data/sig/mindee/v2/search/models/model_search_parameters.rbs +22 -0
  61. data/sig/mindee/v2/search/models/model_search_response.rbs +17 -0
  62. data/sig/mindee/v2/search/rag_documents/rag_document_search_parameters.rbs +22 -0
  63. data/sig/mindee/v2/search/rag_documents/rag_document_search_response.rbs +17 -0
  64. metadata +41 -5
  65. data/.pre-commit-config.yaml +0 -36
  66. data/lib/mindee/input/base_parameters.rb +0 -156
  67. data/sig/mindee/input/base_parameters.rbs +0 -36
@@ -0,0 +1,17 @@
1
+ # lib/mindee/v2/search/models/model_search_response.rb
2
+
3
+ module Mindee
4
+ module V2
5
+ module Search
6
+ module Models
7
+ class ModelSearchResponse < V2::Parsing::Search::BaseSearchResponse
8
+ attr_reader models: V2::Parsing::Search::SearchModels
9
+
10
+ def initialize: (Hash[String|Symbol, untyped]) -> void
11
+
12
+ def body_lines: -> Array[String]
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,22 @@
1
+ # lib/mindee/v2/search/rag_documents/rag_document_search_parameters.rb
2
+
3
+ module Mindee
4
+ module V2
5
+ module Search
6
+ module RAGDocuments
7
+ class RAGDocumentSearchParameters < ClientOptions::BaseSearchParameters
8
+ attr_reader filename: String?
9
+ attr_reader model_id: String
10
+
11
+ def initialize: (model_id: String, ?filename: String?, ?page: Integer?, ?per_page: Integer?) -> void
12
+
13
+ def self.slug: -> String
14
+ def self.response_class: -> singleton(RAGDocumentSearchResponse)
15
+ def response_class: -> singleton(RAGDocumentSearchResponse)
16
+
17
+ def request_parameters: -> Hash[String, String | Array[String]]
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,17 @@
1
+ # lib/mindee/v2/search/rag_documents/rag_document_search_response.rb
2
+
3
+ module Mindee
4
+ module V2
5
+ module Search
6
+ module RAGDocuments
7
+ class RAGDocumentSearchResponse < V2::Parsing::Search::BaseSearchResponse
8
+ attr_reader rag_documents: V2::Parsing::Search::SearchRAGDocuments
9
+
10
+ def initialize: (Hash[String|Symbol, untyped]) -> void
11
+
12
+ def body_lines: -> Array[String]
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mindee
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.3.1
4
+ version: 5.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mindee, SA
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-07-15 00:00:00.000000000 Z
11
+ date: 2026-09-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: base64
@@ -114,6 +114,20 @@ dependencies:
114
114
  - - "~>"
115
115
  - !ruby/object:Gem::Version
116
116
  version: 0.2.0
117
+ - !ruby/object:Gem::Dependency
118
+ name: overcommit
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '0.71'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '0.71'
117
131
  - !ruby/object:Gem::Dependency
118
132
  name: rbs
119
133
  requirement: !ruby/object:Gem::Requirement
@@ -180,10 +194,11 @@ extensions: []
180
194
  extra_rdoc_files: []
181
195
  files:
182
196
  - ".editorconfig"
197
+ - ".git-hooks/pre_commit/gitleaks.rb"
183
198
  - ".gitattributes"
184
199
  - ".gitignore"
185
200
  - ".gitmodules"
186
- - ".pre-commit-config.yaml"
201
+ - ".overcommit.yml"
187
202
  - ".rubocop.yml"
188
203
  - ".yardopts"
189
204
  - CHANGELOG.md
@@ -201,6 +216,7 @@ files:
201
216
  - bin/v1/products.rb
202
217
  - bin/v2/parser.rb
203
218
  - bin/v2/products.rb
219
+ - bin/v2/search_commands.rb
204
220
  - docs/code_samples/bank_account_details_v1.txt
205
221
  - docs/code_samples/bank_account_details_v2.txt
206
222
  - docs/code_samples/bank_statement_fr_v2_async.txt
@@ -247,6 +263,7 @@ files:
247
263
  - lib/mindee/geometry/utils.rb
248
264
  - lib/mindee/http.rb
249
265
  - lib/mindee/http/.rubocop.yml
266
+ - lib/mindee/http/cancellation_token.rb
250
267
  - lib/mindee/http/http_error_handler.rb
251
268
  - lib/mindee/http/response_validation.rb
252
269
  - lib/mindee/image.rb
@@ -256,7 +273,6 @@ files:
256
273
  - lib/mindee/image/image_extractor.rb
257
274
  - lib/mindee/image/image_utils.rb
258
275
  - lib/mindee/input.rb
259
- - lib/mindee/input/base_parameters.rb
260
276
  - lib/mindee/input/local_response.rb
261
277
  - lib/mindee/input/polling_options.rb
262
278
  - lib/mindee/input/sources.rb
@@ -399,6 +415,9 @@ files:
399
415
  - lib/mindee/v1/product/universal/universal_prediction.rb
400
416
  - lib/mindee/v2.rb
401
417
  - lib/mindee/v2/client.rb
418
+ - lib/mindee/v2/client_options.rb
419
+ - lib/mindee/v2/client_options/base_product_parameters.rb
420
+ - lib/mindee/v2/client_options/base_search_parameters.rb
402
421
  - lib/mindee/v2/file_operations.rb
403
422
  - lib/mindee/v2/file_operations/crop.rb
404
423
  - lib/mindee/v2/file_operations/split.rb
@@ -432,10 +451,13 @@ files:
432
451
  - lib/mindee/v2/parsing/raw_text.rb
433
452
  - lib/mindee/v2/parsing/raw_text_page.rb
434
453
  - lib/mindee/v2/parsing/search.rb
454
+ - lib/mindee/v2/parsing/search/base_search_response.rb
435
455
  - lib/mindee/v2/parsing/search/model_webhook.rb
436
456
  - lib/mindee/v2/parsing/search/pagination_metadata.rb
437
457
  - lib/mindee/v2/parsing/search/search_model.rb
438
458
  - lib/mindee/v2/parsing/search/search_models.rb
459
+ - lib/mindee/v2/parsing/search/search_rag_document.rb
460
+ - lib/mindee/v2/parsing/search/search_rag_documents.rb
439
461
  - lib/mindee/v2/parsing/search/search_response.rb
440
462
  - lib/mindee/v2/product.rb
441
463
  - lib/mindee/v2/product/base_product.rb
@@ -472,6 +494,11 @@ files:
472
494
  - lib/mindee/v2/product/split/split_range.rb
473
495
  - lib/mindee/v2/product/split/split_response.rb
474
496
  - lib/mindee/v2/product/split/split_result.rb
497
+ - lib/mindee/v2/search.rb
498
+ - lib/mindee/v2/search/models/model_search_parameters.rb
499
+ - lib/mindee/v2/search/models/model_search_response.rb
500
+ - lib/mindee/v2/search/rag_documents/rag_document_search_parameters.rb
501
+ - lib/mindee/v2/search/rag_documents/rag_document_search_response.rb
475
502
  - lib/mindee/version.rb
476
503
  - mindee-lite.gemspec
477
504
  - mindee.gemspec
@@ -491,6 +518,7 @@ files:
491
518
  - sig/mindee/geometry/polygon.rbs
492
519
  - sig/mindee/geometry/quadrilateral.rbs
493
520
  - sig/mindee/geometry/utils.rbs
521
+ - sig/mindee/http/cancellation_token.rbs
494
522
  - sig/mindee/http/http_error_handler.rbs
495
523
  - sig/mindee/http/response_validation.rbs
496
524
  - sig/mindee/image/extracted_image.rbs
@@ -498,7 +526,6 @@ files:
498
526
  - sig/mindee/image/image_compressor.rbs
499
527
  - sig/mindee/image/image_extractor.rbs
500
528
  - sig/mindee/image/image_utils.rbs
501
- - sig/mindee/input/base_parameters.rbs
502
529
  - sig/mindee/input/local_response.rbs
503
530
  - sig/mindee/input/polling_options.rbs
504
531
  - sig/mindee/input/sources/base64_input_source.rbs
@@ -625,6 +652,8 @@ files:
625
652
  - sig/mindee/v1/product/universal/universal_page.rbs
626
653
  - sig/mindee/v1/product/universal/universal_prediction.rbs
627
654
  - sig/mindee/v2/client.rbs
655
+ - sig/mindee/v2/client_options/base_product_parameters.rbs
656
+ - sig/mindee/v2/client_options/base_search_parameters.rbs
628
657
  - sig/mindee/v2/file_operation/crop.rbs
629
658
  - sig/mindee/v2/file_operation/split.rbs
630
659
  - sig/mindee/v2/http/api_v2_settings.rbs
@@ -652,10 +681,13 @@ files:
652
681
  - sig/mindee/v2/parsing/rag_metadata.rbs
653
682
  - sig/mindee/v2/parsing/raw_text.rbs
654
683
  - sig/mindee/v2/parsing/raw_text_page.rbs
684
+ - sig/mindee/v2/parsing/search/base_search_response.rbs
655
685
  - sig/mindee/v2/parsing/search/model_webhook.rbs
656
686
  - sig/mindee/v2/parsing/search/pagination_metadata.rbs
657
687
  - sig/mindee/v2/parsing/search/search_model.rbs
658
688
  - sig/mindee/v2/parsing/search/search_models.rbs
689
+ - sig/mindee/v2/parsing/search/search_rag_document.rbs
690
+ - sig/mindee/v2/parsing/search/search_rag_documents.rbs
659
691
  - sig/mindee/v2/parsing/search/search_response.rbs
660
692
  - sig/mindee/v2/parsing/search_models.rbs
661
693
  - sig/mindee/v2/product/base_product.rbs
@@ -692,6 +724,10 @@ files:
692
724
  - sig/mindee/v2/product/split/split_range.rbs
693
725
  - sig/mindee/v2/product/split/split_response.rbs
694
726
  - sig/mindee/v2/product/split/split_result.rbs
727
+ - sig/mindee/v2/search/models/model_search_parameters.rbs
728
+ - sig/mindee/v2/search/models/model_search_response.rbs
729
+ - sig/mindee/v2/search/rag_documents/rag_document_search_parameters.rbs
730
+ - sig/mindee/v2/search/rag_documents/rag_document_search_response.rbs
695
731
  - sig/mindee/version.rbs
696
732
  homepage: https://github.com/mindee/mindee-api-ruby
697
733
  licenses:
@@ -1,36 +0,0 @@
1
- repos:
2
- - repo: https://github.com/pre-commit/pre-commit-hooks
3
- rev: v6.0.0
4
- hooks:
5
- - id: check-merge-conflict
6
- - id: check-yaml
7
- - id: end-of-file-fixer
8
- - id: trailing-whitespace
9
- - id: check-added-large-files
10
- args: ["--maxkb=1024"]
11
-
12
- - repo: https://github.com/gitleaks/gitleaks
13
- rev: v8.30.0
14
- hooks:
15
- - id: gitleaks
16
- exclude: ^(spec/data/|docs/code_samples/|local_test/)
17
-
18
- - repo: local
19
- hooks:
20
- - id: rubocop
21
- name: RuboCop
22
- entry: bundle exec rubocop --force-exclusion --no-server
23
- language: system
24
- pass_filenames: false
25
- - id: steep
26
- name: Steep
27
- entry: bundle exec steep check
28
- language: system
29
- pass_filenames: false
30
- stages: [pre-commit, pre-push]
31
- - id: bundle-audit
32
- name: Bundle Audit
33
- entry: bundle exec bundle-audit check
34
- language: system
35
- pass_filenames: false
36
- stages: [pre-commit, pre-push]
@@ -1,156 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Mindee
4
- module Input
5
- # Base class for parameters accepted by all V2 endpoints.
6
- class BaseParameters
7
- # @return [String] ID of the model (required).
8
- attr_reader :model_id
9
-
10
- # @return [String, nil] Optional alias for the file.
11
- attr_reader :file_alias
12
-
13
- # @return [Array<String>, nil] Optional list of Webhooks IDs to propagate the API response to.
14
- attr_reader :webhook_ids
15
-
16
- # @return [PollingOptions] Options for polling. Set only if having timeout issues.
17
- attr_reader :polling_options
18
-
19
- # @return [Boolean, nil] Whether to close the file after parsing.
20
- attr_reader :close_file
21
-
22
- # @param [String] model_id ID of the model
23
- # @param [String, nil] file_alias File alias, if applicable.
24
- # @param [Array<String>, nil] webhook_ids List of webhook IDs to propagate the API response to.
25
- # @param [Hash, PollingOptions, nil] polling_options Options for polling. Set only if having timeout issues.
26
- # @param [Boolean, nil] close_file Whether to close the file after parsing.
27
- def initialize(
28
- model_id,
29
- file_alias: nil,
30
- webhook_ids: nil,
31
- polling_options: nil,
32
- close_file: true
33
- )
34
- raise Error::MindeeInputError, 'Model ID is required.' if model_id.empty? || model_id.nil?
35
-
36
- @model_id = model_id
37
- @file_alias = file_alias
38
- @webhook_ids = webhook_ids || []
39
- @polling_options = get_clean_polling_options(polling_options)
40
- @close_file = close_file.nil? || close_file
41
- end
42
-
43
- # Sets polling options after normalizing hash inputs.
44
- # @param [Hash, PollingOptions, nil] polling_options
45
- # @return [PollingOptions]
46
- def polling_options=(polling_options)
47
- @polling_options = get_clean_polling_options(polling_options)
48
- end
49
-
50
- # @return [String] Slug for the endpoint.
51
- def self.slug
52
- if self == BaseParameters
53
- raise NotImplementedError, 'Cannot access `slug` directly on the BaseParameters class.'
54
- end
55
-
56
- ''
57
- end
58
-
59
- # @return [String] Slug for the endpoint.
60
- def slug
61
- self.class.slug
62
- end
63
-
64
- # Load from a hash
65
- # @param [Hash] params Parameters to provide as a hash.
66
- # @return [BaseParameters]
67
- def self.from_hash(params: {})
68
- load_from_hash(params: params)
69
- new(
70
- params[:model_id],
71
- file_alias: params[:file_alias],
72
- webhook_ids: params[:webhook_ids],
73
- polling_options: params[:polling_options],
74
- close_file: params[:close_file]
75
- )
76
- end
77
-
78
- # Loads a prediction from a Hash.
79
- # @param [Hash] params Parameters to provide as a hash.
80
- # @return [Hash]
81
- def self.load_from_hash(params: {})
82
- params.transform_keys!(&:to_sym)
83
-
84
- if params.empty? || params[:model_id].nil? || params[:model_id].empty?
85
- raise Error::MindeeInputError, 'Model ID is required.'
86
- end
87
-
88
- polling_options_input = params.fetch(:page_options, PollingOptions.new)
89
- if polling_options_input.is_a?(Hash)
90
- polling_options_input = polling_options_input.transform_keys(&:to_sym)
91
- PollingOptions.new(
92
- initial_delay_sec: polling_options_input.fetch(:initial_delay_sec, 2.0),
93
- delay_sec: polling_options_input.fetch(:delay_sec, 1.5),
94
- max_retries: polling_options_input.fetch(:max_retries, 80)
95
- )
96
- end
97
- params
98
- end
99
-
100
- # Appends base form data to the provided array.
101
- # @param [Array] form_data Array of form fields
102
- # @return [Array]
103
- def append_form_data(form_data)
104
- form_data.push(['alias', @file_alias]) if @file_alias
105
- webhook_ids = @webhook_ids || []
106
- form_data.push(['webhook_ids', webhook_ids.join(',')]) unless @webhook_ids.nil? || webhook_ids.empty?
107
- form_data
108
- end
109
-
110
- # Validates the parameters for async auto-polling
111
- def validate_async_params
112
- min_delay_sec = 1
113
- min_initial_delay_sec = 1
114
- min_retries = 2
115
-
116
- if @polling_options.delay_sec < min_delay_sec
117
- raise ArgumentError,
118
- "Cannot set auto-poll delay to less than #{min_delay_sec} second(s)"
119
- end
120
- if @polling_options.initial_delay_sec < min_initial_delay_sec
121
- raise ArgumentError,
122
- "Cannot set initial parsing delay to less than #{min_initial_delay_sec} second(s)"
123
- end
124
- return unless @polling_options.max_retries < min_retries
125
-
126
- raise ArgumentError,
127
- "Cannot set auto-poll retries to less than #{min_retries}"
128
- end
129
-
130
- private
131
-
132
- # Cleans a proper polling options object potentially from a hash.
133
- # @param [Hash, PollingOptions, nil] polling_options Polling options.
134
- # @return [PollingOptions] Valid polling options object.
135
- def get_clean_polling_options(polling_options)
136
- return PollingOptions.new if polling_options.is_a?(PollingOptions)
137
-
138
- if polling_options.is_a?(Hash)
139
- polling_options = polling_options.transform_keys(&:to_sym)
140
- output_polling_options = PollingOptions.new(
141
- initial_delay_sec: polling_options.fetch(:initial_delay_sec, 2.0),
142
- delay_sec: polling_options.fetch(:delay_sec, 1.5),
143
- max_retries: polling_options.fetch(:max_retries, 80)
144
- )
145
- else
146
- output_polling_options = if polling_options.is_a?(PollingOptions)
147
- polling_options || PollingOptions.new
148
- else
149
- PollingOptions.new
150
- end
151
- end
152
- output_polling_options
153
- end
154
- end
155
- end
156
- end
@@ -1,36 +0,0 @@
1
- # lib/mindee/input/base_parameters.rb
2
-
3
- module Mindee
4
- module Input
5
- class BaseParameters
6
- attr_reader self.slug: String
7
-
8
- def self.from_hash: (params: Hash[String | Symbol, untyped]) -> BaseParameters
9
- def self.load_from_hash: (params: Hash[String | Symbol, untyped]) -> Hash[String | Symbol, untyped]
10
-
11
- def slug: -> String
12
-
13
- attr_reader model_id: String
14
- attr_reader file_alias: String?
15
- attr_reader webhook_ids: Array[String]?
16
- attr_reader polling_options: PollingOptions
17
- attr_reader close_file: bool
18
-
19
- def initialize: (
20
- String,
21
- ?file_alias: String?,
22
- ?webhook_ids: Array[String]?,
23
- ?polling_options: Hash[Symbol | String, untyped] | PollingOptions | nil,
24
- ?close_file: bool?
25
- ) -> void
26
-
27
- def append_form_data: (Array[Array[untyped]]) -> Array[Array[untyped]]
28
- def validate_async_params: () -> void
29
- def polling_options=: (Hash[Symbol | String, untyped] | PollingOptions | nil) -> PollingOptions
30
-
31
- private
32
-
33
- def get_clean_polling_options: (Hash[String | Symbol, untyped] | PollingOptions | nil) -> PollingOptions
34
- end
35
- end
36
- end