deepl-rb 3.0.2 → 3.2.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +16 -1
- data/README.md +72 -0
- data/VERSION +1 -1
- data/deepl-rb.gemspec +17 -6
- data/lib/deepl/constants/base_constant.rb +18 -0
- data/lib/deepl/constants/formality.rb +16 -0
- data/lib/deepl/constants/model_type.rb +14 -0
- data/lib/deepl/constants/split_sentences.rb +14 -0
- data/lib/deepl/constants/tag_handling.rb +13 -0
- data/lib/deepl/constants/tone.rb +20 -0
- data/lib/deepl/constants/writing_style.rb +20 -0
- data/lib/deepl/requests/rephrase.rb +54 -0
- data/lib/deepl/requests/translate.rb +2 -2
- data/lib/deepl/resources/text.rb +3 -2
- data/lib/deepl.rb +10 -0
- data/spec/constants/constants_spec.rb +158 -0
- data/spec/fixtures/vcr_cassettes/rephrase_texts.yml +401 -0
- data/spec/fixtures/vcr_cassettes/translate_texts.yml +132 -0
- data/spec/requests/rephrase_spec.rb +172 -0
- data/spec/requests/translate_spec.rb +50 -0
- data/spec/resources/text_spec.rb +1 -1
- data/spec/spec_helper.rb +6 -2
- metadata +14 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 47bf797967929a4b7775e21ce7021cdc1871283b3358cbb36d13a8f6f6b5ac6b
|
4
|
+
data.tar.gz: df4399cc6c552fb5c03b79b0566d2370101b58246bfd5e0b05d27c83e994ae6c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4639c87e107dfa0a13b1bace938e9a3580fb15bb1e2f280267527e3d5d0c9b8913752b841bd095039f1e4f7d15b13813075131c0767216855bf5e7d28a4b81a1
|
7
|
+
data.tar.gz: 19743f57e84c550e5fe35b1d6c39f853df1d0d1d357eb8c0f061a0202831af8a557651f34f50dcad10928b45638a3a09b9ab64652fdadab6d6ad62ec3f2a1242
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,20 @@ All notable changes to this project will be documented in this file.
|
|
4
4
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
5
5
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
6
6
|
|
7
|
+
## [3.2.0]
|
8
|
+
### Added
|
9
|
+
* Added `rephrase` functionality to get a new version of submitted text with various possible styles or tones applied
|
10
|
+
* Added `DeepL::Constants` namespace and associated constant values for options possibilities
|
11
|
+
|
12
|
+
## [3.1.0]
|
13
|
+
### Added
|
14
|
+
* Added `model_type` option to `translate()` to use models with higher
|
15
|
+
translation quality (available for some language pairs), or better latency.
|
16
|
+
Options are `'quality_optimized'`, `'latency_optimized'`, and `'prefer_quality_optimized'`
|
17
|
+
* Added the `model_type_used` field to the `translate()` response, that
|
18
|
+
indicates the translation model used when the `model_type` option is
|
19
|
+
specified.
|
20
|
+
|
7
21
|
|
8
22
|
## [3.0.2] - 2024-10-02
|
9
23
|
### Added
|
@@ -40,7 +54,8 @@ The change in major version is only due to the change in maintainership, there i
|
|
40
54
|
### Fixed
|
41
55
|
* Make RequestEntityTooLarge error message more clear
|
42
56
|
|
43
|
-
|
57
|
+
[3.2.0]: https://github.com/DeepLcom/deepl-rb/compare/v3.1.0...3.2.0
|
58
|
+
[3.1.0]: https://github.com/DeepLcom/deepl-rb/compare/v3.0.2...v3.1.0
|
44
59
|
[3.0.2]: https://github.com/DeepLcom/deepl-rb/compare/v3.0.1...v3.0.2
|
45
60
|
[3.0.1]: https://github.com/DeepLcom/deepl-rb/compare/v3.0.0...v3.0.1
|
46
61
|
[3.0.0]: https://github.com/DeepLcom/deepl-rb/compare/v2.5.3...v3.0.0
|
data/README.md
CHANGED
@@ -137,6 +137,23 @@ puts translation.text
|
|
137
137
|
# => "¡Eso es picante!"
|
138
138
|
```
|
139
139
|
|
140
|
+
To specify a type of translation model to use, you can use the `model_type` option:
|
141
|
+
|
142
|
+
```rb
|
143
|
+
translation = DeepL.translate 'That is hot!', 'EN', 'DE',
|
144
|
+
model_type: 'quality_optimized'
|
145
|
+
```
|
146
|
+
|
147
|
+
This would use next-gen translation models for the translation. The available values are
|
148
|
+
|
149
|
+
- `'quality_optimized'`: use a translation model that maximizes translation quality, at the
|
150
|
+
cost of response time. This option may be unavailable for some language pairs.
|
151
|
+
- `'prefer_quality_optimized'`: use the highest-quality translation model for the given
|
152
|
+
language pair.
|
153
|
+
- `'latency_optimized'`: use a translation model that minimizes response time, at the cost
|
154
|
+
of translation quality.
|
155
|
+
|
156
|
+
|
140
157
|
The following parameters will be automatically converted:
|
141
158
|
|
142
159
|
| Parameter | Conversion
|
@@ -151,6 +168,37 @@ The following parameters will be automatically converted:
|
|
151
168
|
| `glossary_id` | No conversion applied
|
152
169
|
| `context` | No conversion applied
|
153
170
|
|
171
|
+
### Rephrase Text
|
172
|
+
|
173
|
+
To rephrase or improve text, including changing the writing style or tone of the text, use the `rephrase` method:
|
174
|
+
|
175
|
+
```rb
|
176
|
+
rephrased_text = DeepL.rephrase 'you will acquire new rephrased text', 'EN'
|
177
|
+
|
178
|
+
puts rephrased_text.class
|
179
|
+
# => DeepL::Resources::Text
|
180
|
+
puts rephrased_text.text
|
181
|
+
# => 'You get new rephrased text.'
|
182
|
+
```
|
183
|
+
|
184
|
+
As with translate, the text input can be a single string or an array of strings.
|
185
|
+
|
186
|
+
You can use the additional arguments to specify the writing style or tone you want for the rephrased text:
|
187
|
+
|
188
|
+
```rb
|
189
|
+
rephrased_text = DeepL.rephrase 'you will acquire new rephrased text', 'EN', 'casual'
|
190
|
+
|
191
|
+
puts rephrased_text.text
|
192
|
+
# => 'You'll get new, rephrased text.'
|
193
|
+
```
|
194
|
+
|
195
|
+
```rb
|
196
|
+
rephrased_text = DeepL.rephrase 'you will acquire new rephrased text', 'EN', nil, 'friendly'
|
197
|
+
|
198
|
+
puts rephrased_text.text
|
199
|
+
# => 'You'll get to enjoy new, rephrased text!'
|
200
|
+
```
|
201
|
+
|
154
202
|
### Glossaries
|
155
203
|
|
156
204
|
To create a glossary, use the `glossaries.create` method. The glossary `entries` argument should be an array of text pairs. Each pair includes the source and the target translations.
|
@@ -372,6 +420,30 @@ end
|
|
372
420
|
|
373
421
|
This information is passed along when the library makes calls to the DeepL API. Both name and version are required. Please note that setting the `User-Agent` header via `deepl.configure` will override this setting, if you need to use this, please manually identify your Application in the `User-Agent` header.
|
374
422
|
|
423
|
+
## Options Constants
|
424
|
+
|
425
|
+
The available values for various possible options are provided under the `DeepL::Constants` namespace. The currently available options are
|
426
|
+
|
427
|
+
`TagHandling`
|
428
|
+
`SplitSentences`
|
429
|
+
`ModelType`
|
430
|
+
`Formality`
|
431
|
+
`WritingStyle`
|
432
|
+
`Tone`
|
433
|
+
|
434
|
+
To view all the possible options for a given constant, call `options`:
|
435
|
+
|
436
|
+
```rb
|
437
|
+
all_available_tones = DeepL::Constants::Tones.options
|
438
|
+
```
|
439
|
+
|
440
|
+
To check if a given string is a possible option for a given constant, call `valid?`:
|
441
|
+
|
442
|
+
```rb
|
443
|
+
DeepL::Constants::Tones.valid?('friendly') # true
|
444
|
+
DeepL::Constants::Tones.valid?('rude') # false
|
445
|
+
```
|
446
|
+
|
375
447
|
## Integrations
|
376
448
|
|
377
449
|
### Ruby on Rails
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.0
|
1
|
+
3.2.0
|
data/deepl-rb.gemspec
CHANGED
@@ -2,17 +2,17 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: deepl-rb 3.0
|
5
|
+
# stub: deepl-rb 3.2.0 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "deepl-rb".freeze
|
9
|
-
s.version = "3.0.
|
9
|
+
s.version = "3.2.0".freeze
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
12
|
s.metadata = { "bug_tracker_uri" => "https://github.com/DeepLcom/deepl-rb/issues", "changelog_uri" => "https://github.com/DeepLcom/deepl-rb/blob/main/CHANGELOG.md", "documentation_uri" => "https://github.com/DeepLcom/deepl-rb/blob/main/README.md", "homepage_uri" => "https://github.com/DeepLcom/deepl-rb" } if s.respond_to? :metadata=
|
13
13
|
s.require_paths = ["lib".freeze]
|
14
14
|
s.authors = ["DeepL SE".freeze]
|
15
|
-
s.date = "
|
15
|
+
s.date = "2025-01-15"
|
16
16
|
s.description = "Official Ruby library for the DeepL language translation API (v2). For more information, check this: https://www.deepl.com/docs/api-reference.html".freeze
|
17
17
|
s.email = "open-source@deepl.com".freeze
|
18
18
|
s.extra_rdoc_files = [
|
@@ -39,6 +39,13 @@ Gem::Specification.new do |s|
|
|
39
39
|
"lib/deepl.rb",
|
40
40
|
"lib/deepl/api.rb",
|
41
41
|
"lib/deepl/configuration.rb",
|
42
|
+
"lib/deepl/constants/base_constant.rb",
|
43
|
+
"lib/deepl/constants/formality.rb",
|
44
|
+
"lib/deepl/constants/model_type.rb",
|
45
|
+
"lib/deepl/constants/split_sentences.rb",
|
46
|
+
"lib/deepl/constants/tag_handling.rb",
|
47
|
+
"lib/deepl/constants/tone.rb",
|
48
|
+
"lib/deepl/constants/writing_style.rb",
|
42
49
|
"lib/deepl/document_api.rb",
|
43
50
|
"lib/deepl/exceptions/authorization_failed.rb",
|
44
51
|
"lib/deepl/exceptions/bad_request.rb",
|
@@ -63,6 +70,7 @@ Gem::Specification.new do |s|
|
|
63
70
|
"lib/deepl/requests/glossary/language_pairs.rb",
|
64
71
|
"lib/deepl/requests/glossary/list.rb",
|
65
72
|
"lib/deepl/requests/languages.rb",
|
73
|
+
"lib/deepl/requests/rephrase.rb",
|
66
74
|
"lib/deepl/requests/translate.rb",
|
67
75
|
"lib/deepl/requests/usage.rb",
|
68
76
|
"lib/deepl/resources/base.rb",
|
@@ -80,6 +88,7 @@ Gem::Specification.new do |s|
|
|
80
88
|
"spec/api/api_spec.rb",
|
81
89
|
"spec/api/configuration_spec.rb",
|
82
90
|
"spec/api/deepl_spec.rb",
|
91
|
+
"spec/constants/constants_spec.rb",
|
83
92
|
"spec/fixtures/vcr_cassettes/deepl_document.yml",
|
84
93
|
"spec/fixtures/vcr_cassettes/deepl_document_download.yml",
|
85
94
|
"spec/fixtures/vcr_cassettes/deepl_glossaries.yml",
|
@@ -88,6 +97,7 @@ Gem::Specification.new do |s|
|
|
88
97
|
"spec/fixtures/vcr_cassettes/deepl_usage.yml",
|
89
98
|
"spec/fixtures/vcr_cassettes/glossaries.yml",
|
90
99
|
"spec/fixtures/vcr_cassettes/languages.yml",
|
100
|
+
"spec/fixtures/vcr_cassettes/rephrase_texts.yml",
|
91
101
|
"spec/fixtures/vcr_cassettes/translate_texts.yml",
|
92
102
|
"spec/fixtures/vcr_cassettes/usage.yml",
|
93
103
|
"spec/integration_tests/document_api_spec.rb",
|
@@ -99,6 +109,7 @@ Gem::Specification.new do |s|
|
|
99
109
|
"spec/requests/glossary/language_pairs_spec.rb",
|
100
110
|
"spec/requests/glossary/list_spec.rb",
|
101
111
|
"spec/requests/languages_spec.rb",
|
112
|
+
"spec/requests/rephrase_spec.rb",
|
102
113
|
"spec/requests/translate_spec.rb",
|
103
114
|
"spec/requests/usage_spec.rb",
|
104
115
|
"spec/resources/glossary_spec.rb",
|
@@ -110,12 +121,12 @@ Gem::Specification.new do |s|
|
|
110
121
|
]
|
111
122
|
s.homepage = "https://github.com/DeepLcom/deepl-rb".freeze
|
112
123
|
s.licenses = ["MIT".freeze]
|
113
|
-
s.rubygems_version = "3.
|
124
|
+
s.rubygems_version = "3.5.3".freeze
|
114
125
|
s.summary = "Official Ruby library for the DeepL language translation API.".freeze
|
115
126
|
|
116
127
|
s.specification_version = 4
|
117
128
|
|
118
|
-
s.add_development_dependency(%q<juwelier>.freeze, [">= 0"])
|
119
|
-
s.add_development_dependency(%q<byebug>.freeze, [">= 0"])
|
129
|
+
s.add_development_dependency(%q<juwelier>.freeze, [">= 0".freeze])
|
130
|
+
s.add_development_dependency(%q<byebug>.freeze, [">= 0".freeze])
|
120
131
|
end
|
121
132
|
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# Copyright 2025 DeepL SE (https://www.deepl.com)
|
2
|
+
# Use of this source code is governed by an MIT
|
3
|
+
# license that can be found in the LICENSE.md file.
|
4
|
+
# frozen_string_literal: true
|
5
|
+
|
6
|
+
module DeepL
|
7
|
+
module Constants
|
8
|
+
class BaseConstant
|
9
|
+
def self.options
|
10
|
+
constants.map { |const| const_get(const) }
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.valid?(value)
|
14
|
+
options.include?(value)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# Copyright 2025 DeepL SE (https://www.deepl.com)
|
2
|
+
# Use of this source code is governed by an MIT
|
3
|
+
# license that can be found in the LICENSE.md file.
|
4
|
+
# frozen_string_literal: true
|
5
|
+
|
6
|
+
module DeepL
|
7
|
+
module Constants
|
8
|
+
class Formality < BaseConstant
|
9
|
+
DEFAULT = 'default'
|
10
|
+
MORE = 'more'
|
11
|
+
LESS = 'less'
|
12
|
+
PREFER_MORE = 'prefer_more'
|
13
|
+
PREFER_LESS = 'prefer_less'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# Copyright 2025 DeepL SE (https://www.deepl.com)
|
2
|
+
# Use of this source code is governed by an MIT
|
3
|
+
# license that can be found in the LICENSE.md file.
|
4
|
+
# frozen_string_literal: true
|
5
|
+
|
6
|
+
module DeepL
|
7
|
+
module Constants
|
8
|
+
class ModelType < BaseConstant
|
9
|
+
QUALITY_OPTIMIZED = 'quality_optimized'
|
10
|
+
PREFER_QUALITY_OPTIMIZED = 'prefer_quality_optimized'
|
11
|
+
LATENCY_OPTIMIZED = 'latency_optimized'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# Copyright 2025 DeepL SE (https://www.deepl.com)
|
2
|
+
# Use of this source code is governed by an MIT
|
3
|
+
# license that can be found in the LICENSE.md file.
|
4
|
+
# frozen_string_literal: true
|
5
|
+
|
6
|
+
module DeepL
|
7
|
+
module Constants
|
8
|
+
class SplitSentences < BaseConstant
|
9
|
+
NO_SPLITTING = '0'
|
10
|
+
SPLIT_ON_PUNCTUATION_AND_NEWLINES = '1'
|
11
|
+
SPLIT_ON_PUNCTUATION_ONLY = 'nonewlines'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# Copyright 2025 DeepL SE (https://www.deepl.com)
|
2
|
+
# Use of this source code is governed by an MIT
|
3
|
+
# license that can be found in the LICENSE.md file.
|
4
|
+
# frozen_string_literal: true
|
5
|
+
|
6
|
+
module DeepL
|
7
|
+
module Constants
|
8
|
+
class TagHandling < BaseConstant
|
9
|
+
XML = 'xml'
|
10
|
+
HTML = 'html'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# Copyright 2025 DeepL SE (https://www.deepl.com)
|
2
|
+
# Use of this source code is governed by an MIT
|
3
|
+
# license that can be found in the LICENSE.md file.
|
4
|
+
# frozen_string_literal: true
|
5
|
+
|
6
|
+
module DeepL
|
7
|
+
module Constants
|
8
|
+
class Tone < BaseConstant
|
9
|
+
DEFAULT = 'default'
|
10
|
+
ENTHUSIASTIC = 'enthusiastic'
|
11
|
+
FRIENDLY = 'friendly'
|
12
|
+
CONFIDENT = 'confident'
|
13
|
+
DIPLOMATIC = 'diplomatic'
|
14
|
+
PREFER_ENTHUSIASTIC = 'prefer_enthusiastic'
|
15
|
+
PREFER_FRIENDLY = 'prefer_friendly'
|
16
|
+
PREFER_CONFIDENT = 'prefer_confident'
|
17
|
+
PREFER_DIPLOMATIC = 'prefer_diplomatic'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# Copyright 2025 DeepL SE (https://www.deepl.com)
|
2
|
+
# Use of this source code is governed by an MIT
|
3
|
+
# license that can be found in the LICENSE.md file.
|
4
|
+
# frozen_string_literal: true
|
5
|
+
|
6
|
+
module DeepL
|
7
|
+
module Constants
|
8
|
+
class WritingStyle < BaseConstant
|
9
|
+
DEFAULT = 'default'
|
10
|
+
SIMPLE = 'simple'
|
11
|
+
BUSINESS = 'business'
|
12
|
+
ACADEMIC = 'academic'
|
13
|
+
CASUAL = 'casual'
|
14
|
+
PREFER_SIMPLE = 'prefer_simple'
|
15
|
+
PREFER_BUSINESS = 'prefer_business'
|
16
|
+
PREFER_ACADEMIC = 'prefer_academic'
|
17
|
+
PREFER_CASUAL = 'prefer_casual'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# Copyright 2025 DeepL SE (https://www.deepl.com)
|
2
|
+
# Use of this source code is governed by an MIT
|
3
|
+
# license that can be found in the LICENSE.md file.
|
4
|
+
# frozen_string_literal: true
|
5
|
+
|
6
|
+
module DeepL
|
7
|
+
module Requests
|
8
|
+
class Rephrase < Base
|
9
|
+
attr_reader :text, :target_lang, :writing_style, :tone
|
10
|
+
|
11
|
+
def initialize(api, text, target_lang, writing_style = nil, tone = nil, options = {})
|
12
|
+
super(api, options)
|
13
|
+
@text = text
|
14
|
+
@target_lang = target_lang
|
15
|
+
@writing_style = writing_style
|
16
|
+
@tone = tone
|
17
|
+
end
|
18
|
+
|
19
|
+
def request
|
20
|
+
text_arrayified = text.is_a?(Array) ? text : [text]
|
21
|
+
payload = { text: text_arrayified, target_lang: target_lang }
|
22
|
+
payload[:writing_style] = writing_style unless writing_style.nil?
|
23
|
+
payload[:tone] = tone unless tone.nil?
|
24
|
+
build_texts(*execute_request_with_retries(post_request(payload)))
|
25
|
+
end
|
26
|
+
|
27
|
+
def details
|
28
|
+
"HTTP Headers: #{headers}\nPayload #{{ text: text, target_lang: target_lang,
|
29
|
+
writing_style: writing_style, tone: tone }}"
|
30
|
+
end
|
31
|
+
|
32
|
+
def to_s
|
33
|
+
"POST #{uri.request_uri}"
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def build_texts(request, response)
|
39
|
+
data = JSON.parse(response.body)
|
40
|
+
|
41
|
+
texts = data['improvements'].map do |improvement|
|
42
|
+
Resources::Text.new(improvement['text'], improvement['detected_source_language'], nil,
|
43
|
+
request, response)
|
44
|
+
end
|
45
|
+
|
46
|
+
texts.size == 1 ? texts.first : texts
|
47
|
+
end
|
48
|
+
|
49
|
+
def path
|
50
|
+
'write/rephrase'
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -27,7 +27,7 @@ module DeepL
|
|
27
27
|
}.freeze
|
28
28
|
|
29
29
|
attr_reader :text, :source_lang, :target_lang, :ignore_tags, :splitting_tags,
|
30
|
-
:non_splitting_tags
|
30
|
+
:non_splitting_tags, :model_type
|
31
31
|
|
32
32
|
def initialize(api, text, source_lang, target_lang, options = {})
|
33
33
|
super(api, options)
|
@@ -68,7 +68,7 @@ module DeepL
|
|
68
68
|
|
69
69
|
texts = data['translations'].map do |translation|
|
70
70
|
Resources::Text.new(translation['text'], translation['detected_source_language'],
|
71
|
-
request, response)
|
71
|
+
translation['model_type_used'], request, response)
|
72
72
|
end
|
73
73
|
|
74
74
|
texts.size == 1 ? texts.first : texts
|
data/lib/deepl/resources/text.rb
CHANGED
@@ -6,13 +6,14 @@
|
|
6
6
|
module DeepL
|
7
7
|
module Resources
|
8
8
|
class Text < Base
|
9
|
-
attr_reader :text, :detected_source_language
|
9
|
+
attr_reader :text, :detected_source_language, :model_type_used
|
10
10
|
|
11
|
-
def initialize(text, detected_source_language, *args)
|
11
|
+
def initialize(text, detected_source_language, model_type_used, *args)
|
12
12
|
super(*args)
|
13
13
|
|
14
14
|
@text = text
|
15
15
|
@detected_source_language = detected_source_language
|
16
|
+
@model_type_used = model_type_used
|
16
17
|
end
|
17
18
|
|
18
19
|
def to_s
|
data/lib/deepl.rb
CHANGED
@@ -34,6 +34,7 @@ require 'deepl/requests/glossary/list'
|
|
34
34
|
require 'deepl/requests/languages'
|
35
35
|
require 'deepl/requests/translate'
|
36
36
|
require 'deepl/requests/usage'
|
37
|
+
require 'deepl/requests/rephrase'
|
37
38
|
|
38
39
|
# -- Responses and resources
|
39
40
|
require 'deepl/resources/base'
|
@@ -49,6 +50,15 @@ require 'deepl/resources/usage'
|
|
49
50
|
require 'deepl/utils/exception_builder'
|
50
51
|
require 'deepl/utils/backoff_timer'
|
51
52
|
|
53
|
+
# -- Constants
|
54
|
+
require 'deepl/constants/base_constant'
|
55
|
+
require 'deepl/constants/formality'
|
56
|
+
require 'deepl/constants/model_type'
|
57
|
+
require 'deepl/constants/split_sentences'
|
58
|
+
require 'deepl/constants/tag_handling'
|
59
|
+
require 'deepl/constants/tone'
|
60
|
+
require 'deepl/constants/writing_style'
|
61
|
+
|
52
62
|
# -- HTTP Utils
|
53
63
|
require 'http_client_options'
|
54
64
|
|
@@ -0,0 +1,158 @@
|
|
1
|
+
# Copyright 2025 DeepL SE (https://www.deepl.com)
|
2
|
+
# Use of this source code is governed by an MIT
|
3
|
+
# license that can be found in the LICENSE.md file.
|
4
|
+
# frozen_string_literal: true
|
5
|
+
|
6
|
+
require 'spec_helper'
|
7
|
+
|
8
|
+
describe 'DeepL::Constants' do
|
9
|
+
describe DeepL::Constants::Tone do
|
10
|
+
subject(:tone) { described_class }
|
11
|
+
|
12
|
+
it 'includes all expected tone values' do # rubocop:disable RSpec/ExampleLength
|
13
|
+
expect(tone.options).to contain_exactly(
|
14
|
+
'confident',
|
15
|
+
'default',
|
16
|
+
'diplomatic',
|
17
|
+
'enthusiastic',
|
18
|
+
'friendly',
|
19
|
+
'prefer_confident',
|
20
|
+
'prefer_diplomatic',
|
21
|
+
'prefer_enthusiastic',
|
22
|
+
'prefer_friendly'
|
23
|
+
)
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'validates correct tone values' do
|
27
|
+
expect(tone.valid?('enthusiastic')).to be true
|
28
|
+
expect(tone.valid?('friendly')).to be true
|
29
|
+
expect(tone.valid?('confident')).to be true
|
30
|
+
expect(tone.valid?('diplomatic')).to be true
|
31
|
+
expect(tone.valid?('default')).to be true
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'invalidates incorrect tone values' do
|
35
|
+
expect(tone.valid?('angry')).to be false
|
36
|
+
expect(tone.valid?('')).to be false
|
37
|
+
expect(tone.valid?(nil)).to be false
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe DeepL::Constants::WritingStyle do
|
42
|
+
subject(:writing_style) { described_class }
|
43
|
+
|
44
|
+
it 'includes all expected writing style values' do # rubocop:disable RSpec/ExampleLength
|
45
|
+
expect(writing_style.options).to contain_exactly(
|
46
|
+
'default',
|
47
|
+
'simple',
|
48
|
+
'business',
|
49
|
+
'academic',
|
50
|
+
'casual',
|
51
|
+
'prefer_academic',
|
52
|
+
'prefer_business',
|
53
|
+
'prefer_casual',
|
54
|
+
'prefer_simple'
|
55
|
+
)
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'validates correct writing style values' do
|
59
|
+
expect(writing_style.valid?('simple')).to be true
|
60
|
+
expect(writing_style.valid?('business')).to be true
|
61
|
+
expect(writing_style.valid?('academic')).to be true
|
62
|
+
expect(writing_style.valid?('casual')).to be true
|
63
|
+
expect(writing_style.valid?('default')).to be true
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'invalidates incorrect writing style values' do
|
67
|
+
expect(writing_style.valid?('wordy')).to be false
|
68
|
+
expect(writing_style.valid?('')).to be false
|
69
|
+
expect(writing_style.valid?(nil)).to be false
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe DeepL::Constants::TagHandling do
|
74
|
+
subject(:tag_handling) { described_class }
|
75
|
+
|
76
|
+
it 'includes all expected tag handling values' do
|
77
|
+
expect(tag_handling.options).to contain_exactly('xml', 'html')
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'validates correct tag handling values' do
|
81
|
+
expect(tag_handling.valid?('xml')).to be true
|
82
|
+
expect(tag_handling.valid?('html')).to be true
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'invalidates incorrect tag handling values' do
|
86
|
+
expect(tag_handling.valid?('json')).to be false
|
87
|
+
expect(tag_handling.valid?('')).to be false
|
88
|
+
expect(tag_handling.valid?(nil)).to be false
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
describe DeepL::Constants::SplitSentences do
|
93
|
+
subject(:split_sentences) { described_class }
|
94
|
+
|
95
|
+
it 'includes all expected split sentences values' do
|
96
|
+
expect(split_sentences.options).to contain_exactly('0', '1', 'nonewlines')
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'validates correct split sentences values' do
|
100
|
+
expect(split_sentences.valid?('0')).to be true
|
101
|
+
expect(split_sentences.valid?('1')).to be true
|
102
|
+
expect(split_sentences.valid?('nonewlines')).to be true
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'invalidates incorrect split sentences values' do
|
106
|
+
expect(split_sentences.valid?('2')).to be false
|
107
|
+
expect(split_sentences.valid?('')).to be false
|
108
|
+
expect(split_sentences.valid?(nil)).to be false
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
describe DeepL::Constants::ModelType do
|
113
|
+
subject(:model_type) { described_class }
|
114
|
+
|
115
|
+
it 'includes all expected model type values' do
|
116
|
+
expect(model_type.options).to contain_exactly(
|
117
|
+
'quality_optimized',
|
118
|
+
'prefer_quality_optimized',
|
119
|
+
'latency_optimized'
|
120
|
+
)
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'validates correct model type values' do
|
124
|
+
expect(model_type.valid?('quality_optimized')).to be true
|
125
|
+
expect(model_type.valid?('prefer_quality_optimized')).to be true
|
126
|
+
expect(model_type.valid?('latency_optimized')).to be true
|
127
|
+
end
|
128
|
+
|
129
|
+
it 'invalidates incorrect model type values' do
|
130
|
+
expect(model_type.valid?('speed_optimized')).to be false
|
131
|
+
expect(model_type.valid?('')).to be false
|
132
|
+
expect(model_type.valid?(nil)).to be false
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
describe DeepL::Constants::Formality do
|
137
|
+
subject(:formality) { described_class }
|
138
|
+
|
139
|
+
it 'includes all expected formality values' do
|
140
|
+
expect(formality.options).to contain_exactly('default', 'more', 'less', 'prefer_more',
|
141
|
+
'prefer_less')
|
142
|
+
end
|
143
|
+
|
144
|
+
it 'validates correct formality values' do
|
145
|
+
expect(formality.valid?('default')).to be true
|
146
|
+
expect(formality.valid?('more')).to be true
|
147
|
+
expect(formality.valid?('less')).to be true
|
148
|
+
expect(formality.valid?('prefer_more')).to be true
|
149
|
+
expect(formality.valid?('prefer_less')).to be true
|
150
|
+
end
|
151
|
+
|
152
|
+
it 'invalidates incorrect formality values' do
|
153
|
+
expect(formality.valid?('neutral')).to be false
|
154
|
+
expect(formality.valid?('')).to be false
|
155
|
+
expect(formality.valid?(nil)).to be false
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|