mindee-lite 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 +25 -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-lite
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
@@ -63,10 +63,11 @@ extensions: []
63
63
  extra_rdoc_files: []
64
64
  files:
65
65
  - ".editorconfig"
66
+ - ".git-hooks/pre_commit/gitleaks.rb"
66
67
  - ".gitattributes"
67
68
  - ".gitignore"
68
69
  - ".gitmodules"
69
- - ".pre-commit-config.yaml"
70
+ - ".overcommit.yml"
70
71
  - ".rubocop.yml"
71
72
  - ".yardopts"
72
73
  - CHANGELOG.md
@@ -84,6 +85,7 @@ files:
84
85
  - bin/v1/products.rb
85
86
  - bin/v2/parser.rb
86
87
  - bin/v2/products.rb
88
+ - bin/v2/search_commands.rb
87
89
  - docs/code_samples/bank_account_details_v1.txt
88
90
  - docs/code_samples/bank_account_details_v2.txt
89
91
  - docs/code_samples/bank_statement_fr_v2_async.txt
@@ -140,7 +142,6 @@ files:
140
142
  - lib/mindee/image/image_extractor.rb
141
143
  - lib/mindee/image/image_utils.rb
142
144
  - lib/mindee/input.rb
143
- - lib/mindee/input/base_parameters.rb
144
145
  - lib/mindee/input/local_response.rb
145
146
  - lib/mindee/input/polling_options.rb
146
147
  - lib/mindee/input/sources.rb
@@ -283,6 +284,9 @@ files:
283
284
  - lib/mindee/v1/product/universal/universal_prediction.rb
284
285
  - lib/mindee/v2.rb
285
286
  - lib/mindee/v2/client.rb
287
+ - lib/mindee/v2/client_options.rb
288
+ - lib/mindee/v2/client_options/base_product_parameters.rb
289
+ - lib/mindee/v2/client_options/base_search_parameters.rb
286
290
  - lib/mindee/v2/file_operations.rb
287
291
  - lib/mindee/v2/file_operations/crop.rb
288
292
  - lib/mindee/v2/file_operations/split.rb
@@ -316,10 +320,13 @@ files:
316
320
  - lib/mindee/v2/parsing/raw_text.rb
317
321
  - lib/mindee/v2/parsing/raw_text_page.rb
318
322
  - lib/mindee/v2/parsing/search.rb
323
+ - lib/mindee/v2/parsing/search/base_search_response.rb
319
324
  - lib/mindee/v2/parsing/search/model_webhook.rb
320
325
  - lib/mindee/v2/parsing/search/pagination_metadata.rb
321
326
  - lib/mindee/v2/parsing/search/search_model.rb
322
327
  - lib/mindee/v2/parsing/search/search_models.rb
328
+ - lib/mindee/v2/parsing/search/search_rag_document.rb
329
+ - lib/mindee/v2/parsing/search/search_rag_documents.rb
323
330
  - lib/mindee/v2/parsing/search/search_response.rb
324
331
  - lib/mindee/v2/product.rb
325
332
  - lib/mindee/v2/product/base_product.rb
@@ -356,6 +363,11 @@ files:
356
363
  - lib/mindee/v2/product/split/split_range.rb
357
364
  - lib/mindee/v2/product/split/split_response.rb
358
365
  - lib/mindee/v2/product/split/split_result.rb
366
+ - lib/mindee/v2/search.rb
367
+ - lib/mindee/v2/search/models/model_search_parameters.rb
368
+ - lib/mindee/v2/search/models/model_search_response.rb
369
+ - lib/mindee/v2/search/rag_documents/rag_document_search_parameters.rb
370
+ - lib/mindee/v2/search/rag_documents/rag_document_search_response.rb
359
371
  - lib/mindee/version.rb
360
372
  - mindee-lite.gemspec
361
373
  - mindee.gemspec
@@ -383,7 +395,6 @@ files:
383
395
  - sig/mindee/image/image_compressor.rbs
384
396
  - sig/mindee/image/image_extractor.rbs
385
397
  - sig/mindee/image/image_utils.rbs
386
- - sig/mindee/input/base_parameters.rbs
387
398
  - sig/mindee/input/local_response.rbs
388
399
  - sig/mindee/input/polling_options.rbs
389
400
  - sig/mindee/input/sources/base64_input_source.rbs
@@ -510,6 +521,8 @@ files:
510
521
  - sig/mindee/v1/product/universal/universal_page.rbs
511
522
  - sig/mindee/v1/product/universal/universal_prediction.rbs
512
523
  - sig/mindee/v2/client.rbs
524
+ - sig/mindee/v2/client_options/base_product_parameters.rbs
525
+ - sig/mindee/v2/client_options/base_search_parameters.rbs
513
526
  - sig/mindee/v2/file_operation/crop.rbs
514
527
  - sig/mindee/v2/file_operation/split.rbs
515
528
  - sig/mindee/v2/http/api_v2_settings.rbs
@@ -537,10 +550,13 @@ files:
537
550
  - sig/mindee/v2/parsing/rag_metadata.rbs
538
551
  - sig/mindee/v2/parsing/raw_text.rbs
539
552
  - sig/mindee/v2/parsing/raw_text_page.rbs
553
+ - sig/mindee/v2/parsing/search/base_search_response.rbs
540
554
  - sig/mindee/v2/parsing/search/model_webhook.rbs
541
555
  - sig/mindee/v2/parsing/search/pagination_metadata.rbs
542
556
  - sig/mindee/v2/parsing/search/search_model.rbs
543
557
  - sig/mindee/v2/parsing/search/search_models.rbs
558
+ - sig/mindee/v2/parsing/search/search_rag_document.rbs
559
+ - sig/mindee/v2/parsing/search/search_rag_documents.rbs
544
560
  - sig/mindee/v2/parsing/search/search_response.rbs
545
561
  - sig/mindee/v2/parsing/search_models.rbs
546
562
  - sig/mindee/v2/product/base_product.rbs
@@ -577,6 +593,10 @@ files:
577
593
  - sig/mindee/v2/product/split/split_range.rbs
578
594
  - sig/mindee/v2/product/split/split_response.rbs
579
595
  - sig/mindee/v2/product/split/split_result.rbs
596
+ - sig/mindee/v2/search/models/model_search_parameters.rbs
597
+ - sig/mindee/v2/search/models/model_search_response.rbs
598
+ - sig/mindee/v2/search/rag_documents/rag_document_search_parameters.rbs
599
+ - sig/mindee/v2/search/rag_documents/rag_document_search_response.rbs
580
600
  - sig/mindee/version.rbs
581
601
  homepage: https://github.com/mindee/mindee-api-ruby
582
602
  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