mindee-lite 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 +27 -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-lite
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
@@ -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
@@ -130,6 +132,7 @@ files:
130
132
  - lib/mindee/geometry/utils.rb
131
133
  - lib/mindee/http.rb
132
134
  - lib/mindee/http/.rubocop.yml
135
+ - lib/mindee/http/cancellation_token.rb
133
136
  - lib/mindee/http/http_error_handler.rb
134
137
  - lib/mindee/http/response_validation.rb
135
138
  - lib/mindee/image.rb
@@ -139,7 +142,6 @@ files:
139
142
  - lib/mindee/image/image_extractor.rb
140
143
  - lib/mindee/image/image_utils.rb
141
144
  - lib/mindee/input.rb
142
- - lib/mindee/input/base_parameters.rb
143
145
  - lib/mindee/input/local_response.rb
144
146
  - lib/mindee/input/polling_options.rb
145
147
  - lib/mindee/input/sources.rb
@@ -282,6 +284,9 @@ files:
282
284
  - lib/mindee/v1/product/universal/universal_prediction.rb
283
285
  - lib/mindee/v2.rb
284
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
285
290
  - lib/mindee/v2/file_operations.rb
286
291
  - lib/mindee/v2/file_operations/crop.rb
287
292
  - lib/mindee/v2/file_operations/split.rb
@@ -315,10 +320,13 @@ files:
315
320
  - lib/mindee/v2/parsing/raw_text.rb
316
321
  - lib/mindee/v2/parsing/raw_text_page.rb
317
322
  - lib/mindee/v2/parsing/search.rb
323
+ - lib/mindee/v2/parsing/search/base_search_response.rb
318
324
  - lib/mindee/v2/parsing/search/model_webhook.rb
319
325
  - lib/mindee/v2/parsing/search/pagination_metadata.rb
320
326
  - lib/mindee/v2/parsing/search/search_model.rb
321
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
322
330
  - lib/mindee/v2/parsing/search/search_response.rb
323
331
  - lib/mindee/v2/product.rb
324
332
  - lib/mindee/v2/product/base_product.rb
@@ -355,6 +363,11 @@ files:
355
363
  - lib/mindee/v2/product/split/split_range.rb
356
364
  - lib/mindee/v2/product/split/split_response.rb
357
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
358
371
  - lib/mindee/version.rb
359
372
  - mindee-lite.gemspec
360
373
  - mindee.gemspec
@@ -374,6 +387,7 @@ files:
374
387
  - sig/mindee/geometry/polygon.rbs
375
388
  - sig/mindee/geometry/quadrilateral.rbs
376
389
  - sig/mindee/geometry/utils.rbs
390
+ - sig/mindee/http/cancellation_token.rbs
377
391
  - sig/mindee/http/http_error_handler.rbs
378
392
  - sig/mindee/http/response_validation.rbs
379
393
  - sig/mindee/image/extracted_image.rbs
@@ -381,7 +395,6 @@ files:
381
395
  - sig/mindee/image/image_compressor.rbs
382
396
  - sig/mindee/image/image_extractor.rbs
383
397
  - sig/mindee/image/image_utils.rbs
384
- - sig/mindee/input/base_parameters.rbs
385
398
  - sig/mindee/input/local_response.rbs
386
399
  - sig/mindee/input/polling_options.rbs
387
400
  - sig/mindee/input/sources/base64_input_source.rbs
@@ -508,6 +521,8 @@ files:
508
521
  - sig/mindee/v1/product/universal/universal_page.rbs
509
522
  - sig/mindee/v1/product/universal/universal_prediction.rbs
510
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
511
526
  - sig/mindee/v2/file_operation/crop.rbs
512
527
  - sig/mindee/v2/file_operation/split.rbs
513
528
  - sig/mindee/v2/http/api_v2_settings.rbs
@@ -535,10 +550,13 @@ files:
535
550
  - sig/mindee/v2/parsing/rag_metadata.rbs
536
551
  - sig/mindee/v2/parsing/raw_text.rbs
537
552
  - sig/mindee/v2/parsing/raw_text_page.rbs
553
+ - sig/mindee/v2/parsing/search/base_search_response.rbs
538
554
  - sig/mindee/v2/parsing/search/model_webhook.rbs
539
555
  - sig/mindee/v2/parsing/search/pagination_metadata.rbs
540
556
  - sig/mindee/v2/parsing/search/search_model.rbs
541
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
542
560
  - sig/mindee/v2/parsing/search/search_response.rbs
543
561
  - sig/mindee/v2/parsing/search_models.rbs
544
562
  - sig/mindee/v2/product/base_product.rbs
@@ -575,6 +593,10 @@ files:
575
593
  - sig/mindee/v2/product/split/split_range.rbs
576
594
  - sig/mindee/v2/product/split/split_response.rbs
577
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
578
600
  - sig/mindee/version.rbs
579
601
  homepage: https://github.com/mindee/mindee-api-ruby
580
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