mindee 5.4.0 → 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 (62) 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 +8 -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/v1/client.rb +1 -2
  10. data/lib/mindee/v2/client.rb +18 -11
  11. data/lib/mindee/v2/client_options/base_product_parameters.rb +162 -0
  12. data/lib/mindee/v2/client_options/base_search_parameters.rb +51 -0
  13. data/lib/mindee/v2/client_options.rb +4 -0
  14. data/lib/mindee/v2/http/mindee_api_v2.rb +28 -32
  15. data/lib/mindee/v2/parsing/search/base_search_response.rb +47 -0
  16. data/lib/mindee/v2/parsing/search/model_webhook.rb +3 -3
  17. data/lib/mindee/v2/parsing/search/pagination_metadata.rb +1 -1
  18. data/lib/mindee/v2/parsing/search/search_models.rb +2 -1
  19. data/lib/mindee/v2/parsing/search/search_rag_document.rb +60 -0
  20. data/lib/mindee/v2/parsing/search/search_rag_documents.rb +39 -0
  21. data/lib/mindee/v2/parsing/search/search_response.rb +2 -29
  22. data/lib/mindee/v2/parsing/search.rb +5 -1
  23. data/lib/mindee/v2/product/base_product.rb +2 -2
  24. data/lib/mindee/v2/product/classification/classification_classifier.rb +1 -2
  25. data/lib/mindee/v2/product/classification/params/classification_parameters.rb +1 -1
  26. data/lib/mindee/v2/product/crop/crop_item.rb +1 -2
  27. data/lib/mindee/v2/product/crop/params/crop_parameters.rb +1 -1
  28. data/lib/mindee/v2/product/extraction/params/extraction_parameters.rb +2 -2
  29. data/lib/mindee/v2/product/ocr/params/ocr_parameters.rb +1 -1
  30. data/lib/mindee/v2/product/split/params/split_parameters.rb +1 -1
  31. data/lib/mindee/v2/product/split/split_range.rb +1 -2
  32. data/lib/mindee/v2/search/models/model_search_parameters.rb +51 -0
  33. data/lib/mindee/v2/search/models/model_search_response.rb +28 -0
  34. data/lib/mindee/v2/search/rag_documents/rag_document_search_parameters.rb +52 -0
  35. data/lib/mindee/v2/search/rag_documents/rag_document_search_response.rb +28 -0
  36. data/lib/mindee/v2/search.rb +6 -0
  37. data/lib/mindee/v2.rb +2 -0
  38. data/lib/mindee/version.rb +1 -1
  39. data/mindee.gemspec +1 -0
  40. data/sig/custom/net_http.rbs +1 -1
  41. data/sig/mindee/v2/client.rbs +7 -4
  42. data/sig/mindee/v2/client_options/base_product_parameters.rbs +41 -0
  43. data/sig/mindee/v2/client_options/base_search_parameters.rbs +19 -0
  44. data/sig/mindee/v2/http/mindee_api_v2.rbs +12 -6
  45. data/sig/mindee/v2/parsing/search/base_search_response.rbs +19 -0
  46. data/sig/mindee/v2/parsing/search/search_rag_document.rbs +23 -0
  47. data/sig/mindee/v2/parsing/search/search_rag_documents.rbs +16 -0
  48. data/sig/mindee/v2/parsing/search/search_response.rbs +4 -9
  49. data/sig/mindee/v2/product/base_product.rbs +3 -3
  50. data/sig/mindee/v2/product/classification/params/classification_parameters/classification_parameters.rbs +1 -1
  51. data/sig/mindee/v2/product/crop/params/crop_parameters/crop_parameters.rbs +1 -1
  52. data/sig/mindee/v2/product/extraction/params/extraction_parameters.rbs +1 -1
  53. data/sig/mindee/v2/product/ocr/params/ocr_parameters/ocr_parameters.rbs +1 -1
  54. data/sig/mindee/v2/product/split/params/split_parameters/split_parameters.rbs +1 -1
  55. data/sig/mindee/v2/search/models/model_search_parameters.rbs +22 -0
  56. data/sig/mindee/v2/search/models/model_search_response.rbs +17 -0
  57. data/sig/mindee/v2/search/rag_documents/rag_document_search_parameters.rbs +22 -0
  58. data/sig/mindee/v2/search/rag_documents/rag_document_search_response.rbs +17 -0
  59. metadata +39 -5
  60. data/.pre-commit-config.yaml +0 -36
  61. data/lib/mindee/input/base_parameters.rb +0 -156
  62. data/sig/mindee/input/base_parameters.rbs +0 -36
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.4.0
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-21 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
@@ -257,7 +273,6 @@ files:
257
273
  - lib/mindee/image/image_extractor.rb
258
274
  - lib/mindee/image/image_utils.rb
259
275
  - lib/mindee/input.rb
260
- - lib/mindee/input/base_parameters.rb
261
276
  - lib/mindee/input/local_response.rb
262
277
  - lib/mindee/input/polling_options.rb
263
278
  - lib/mindee/input/sources.rb
@@ -400,6 +415,9 @@ files:
400
415
  - lib/mindee/v1/product/universal/universal_prediction.rb
401
416
  - lib/mindee/v2.rb
402
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
403
421
  - lib/mindee/v2/file_operations.rb
404
422
  - lib/mindee/v2/file_operations/crop.rb
405
423
  - lib/mindee/v2/file_operations/split.rb
@@ -433,10 +451,13 @@ files:
433
451
  - lib/mindee/v2/parsing/raw_text.rb
434
452
  - lib/mindee/v2/parsing/raw_text_page.rb
435
453
  - lib/mindee/v2/parsing/search.rb
454
+ - lib/mindee/v2/parsing/search/base_search_response.rb
436
455
  - lib/mindee/v2/parsing/search/model_webhook.rb
437
456
  - lib/mindee/v2/parsing/search/pagination_metadata.rb
438
457
  - lib/mindee/v2/parsing/search/search_model.rb
439
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
440
461
  - lib/mindee/v2/parsing/search/search_response.rb
441
462
  - lib/mindee/v2/product.rb
442
463
  - lib/mindee/v2/product/base_product.rb
@@ -473,6 +494,11 @@ files:
473
494
  - lib/mindee/v2/product/split/split_range.rb
474
495
  - lib/mindee/v2/product/split/split_response.rb
475
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
476
502
  - lib/mindee/version.rb
477
503
  - mindee-lite.gemspec
478
504
  - mindee.gemspec
@@ -500,7 +526,6 @@ files:
500
526
  - sig/mindee/image/image_compressor.rbs
501
527
  - sig/mindee/image/image_extractor.rbs
502
528
  - sig/mindee/image/image_utils.rbs
503
- - sig/mindee/input/base_parameters.rbs
504
529
  - sig/mindee/input/local_response.rbs
505
530
  - sig/mindee/input/polling_options.rbs
506
531
  - sig/mindee/input/sources/base64_input_source.rbs
@@ -627,6 +652,8 @@ files:
627
652
  - sig/mindee/v1/product/universal/universal_page.rbs
628
653
  - sig/mindee/v1/product/universal/universal_prediction.rbs
629
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
630
657
  - sig/mindee/v2/file_operation/crop.rbs
631
658
  - sig/mindee/v2/file_operation/split.rbs
632
659
  - sig/mindee/v2/http/api_v2_settings.rbs
@@ -654,10 +681,13 @@ files:
654
681
  - sig/mindee/v2/parsing/rag_metadata.rbs
655
682
  - sig/mindee/v2/parsing/raw_text.rbs
656
683
  - sig/mindee/v2/parsing/raw_text_page.rbs
684
+ - sig/mindee/v2/parsing/search/base_search_response.rbs
657
685
  - sig/mindee/v2/parsing/search/model_webhook.rbs
658
686
  - sig/mindee/v2/parsing/search/pagination_metadata.rbs
659
687
  - sig/mindee/v2/parsing/search/search_model.rbs
660
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
661
691
  - sig/mindee/v2/parsing/search/search_response.rbs
662
692
  - sig/mindee/v2/parsing/search_models.rbs
663
693
  - sig/mindee/v2/product/base_product.rbs
@@ -694,6 +724,10 @@ files:
694
724
  - sig/mindee/v2/product/split/split_range.rbs
695
725
  - sig/mindee/v2/product/split/split_response.rbs
696
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
697
731
  - sig/mindee/version.rbs
698
732
  homepage: https://github.com/mindee/mindee-api-ruby
699
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