jekyll-chatgpt-translate 0.0.40 → 0.0.42

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8ce1b67a78ab62d8ff281da23c8d1c5c63d5b07934e42e49fcfa07886c9ced32
4
- data.tar.gz: 39e13d4901343a950d4c3a5d21b6fdca94723efbba1bfb18fe5f82c0cb26c4ff
3
+ metadata.gz: 22b2e725c02a5de3447605daaad8d41fce5885908f59c8bc86cc676ac8d3a661
4
+ data.tar.gz: 5cb8610b0994bab60d9bf23d3aff7888f01f7ff0520e9dddc4e487e99ca94601
5
5
  SHA512:
6
- metadata.gz: afe4e8981572c052dfabe2ed084f6e3eaaf7321297ca1d53cc750be81351429a1d7e7a2479da8d60008019224d8e29dd922437b19fa554729faccf533d61908d
7
- data.tar.gz: 652431c0c7ec9153994b25ee4f480ebf374bddb77c6500bd451364cc38d4b4578ed3fe6acf83f4c55dc359b41a931626baef8a8257f907f0649044ce9559ae94
6
+ metadata.gz: f1bf2b84b63f9b82ce5bc28771ab52b3571a5b4d5629fe6e10038c968bad2127407a33e9d7f1d08a7b11c247f4748021695fc569794e3f9966cca3ec30f567cf
7
+ data.tar.gz: b6385f234df97f3e6f5ea37e555667a59b68db7c4f7ec82ee26bd6e27a4e7cc3df759b7243f50fdcee424a7ecff785a989898ce0c050596a2c616a36f9d3ef55
data/.rultor.yml CHANGED
@@ -1,10 +1,10 @@
1
1
  docker:
2
- image: yegor256/rultor-image:1.21.0
2
+ image: yegor256/rultor-image:1.22.0
3
3
  assets:
4
4
  rubygems.yml: yegor256/home#assets/rubygems.yml
5
5
  install: |
6
6
  pdd -f /dev/null
7
- sudo bundle install --no-color "--gemfile=$(pwd)/Gemfile"
7
+ bundle install --no-color
8
8
  release:
9
9
  script: |-
10
10
  bundle exec rake
data/Gemfile CHANGED
@@ -25,7 +25,7 @@
25
25
  source 'https://rubygems.org'
26
26
  gemspec
27
27
 
28
- gem 'cucumber', '9.0.2', require: false
28
+ gem 'cucumber', '9.1.0', require: false
29
29
  gem 'kramdown-parser-gfm', '1.1.0', require: false
30
30
  gem 'minitest', '5.20.0', require: false
31
31
  gem 'rake', '13.1.0', require: false
data/features/cli.feature CHANGED
@@ -66,6 +66,7 @@ Feature: Simple site building
66
66
  source: en
67
67
  version: ""
68
68
  api_key: "it-is-not-used, because EN to EN translation"
69
+ window_length: 1024
69
70
  layout: should-not-be-used
70
71
  targets:
71
72
  -
@@ -28,7 +28,7 @@ Gem::Specification.new do |s|
28
28
  s.required_rubygems_version = Gem::Requirement.new('>= 0') if s.respond_to? :required_rubygems_version=
29
29
  s.required_ruby_version = '>= 3.0'
30
30
  s.name = 'jekyll-chatgpt-translate'
31
- s.version = '0.0.40'
31
+ s.version = '0.0.42'
32
32
  s.license = 'MIT'
33
33
  s.summary = 'Translate Jekyll Pages Through ChatGPT'
34
34
  s.description = [
@@ -45,12 +45,13 @@ class GptTranslate::ChatGPT
45
45
  # +key+ OpenAI API Key, which can't be nil, but can be empty string, which means dry mode (no calls to OpenAI)
46
46
  # +source+ The language to translate from
47
47
  # +target+ The language to translate into
48
- def initialize(key, model, source, target)
48
+ def initialize(key, model, source, target, client: OpenAI::Client.new(access_token: key))
49
49
  raise 'OpenAI key cannot be nil' if key.nil?
50
50
  @key = key
51
51
  @model = model
52
52
  @source = source
53
53
  @target = target
54
+ @client = client
54
55
  end
55
56
 
56
57
  def translate(markdown, min: 32, window_length: 2000)
@@ -115,9 +116,8 @@ class GptTranslate::ChatGPT
115
116
  end
116
117
 
117
118
  def translate_par(par)
118
- client = OpenAI::Client.new(access_token: @key)
119
119
  if @@models_printed
120
- Jekyll.logger.info("Available ChatGPT models: #{client.models.list['data'].map { |m| m['id'] }.join(', ')}")
120
+ Jekyll.logger.info("Available ChatGPT models: #{@client.models.list['data'].map { |m| m['id'] }.join(', ')}")
121
121
  @@models_printed = true
122
122
  end
123
123
  prompt = GptTranslate::Prompt.new(par, @source, @target).to_s
@@ -125,14 +125,15 @@ class GptTranslate::ChatGPT
125
125
  answer = nil
126
126
  attempt = 0
127
127
  begin
128
- response = client.chat(
128
+ response = @client.chat(
129
129
  parameters: {
130
130
  model: @model,
131
131
  messages: [{ role: 'user', content: prompt }],
132
132
  temperature: 0.7
133
133
  }
134
134
  )
135
- answer = JSON.parse(response).dig('choices', 0, 'message', 'content')
135
+ json = response.is_a?(Hash) ? response : JSON.parse(response)
136
+ answer = json.dig('choices', 0, 'message', 'content')
136
137
  if answer.nil?
137
138
  Jekyll.logger.error("No content returned by ChatGPT: #{response}")
138
139
  raise 'No content returned by ChatGPT'
@@ -114,7 +114,11 @@ class GptTranslate::Generator < Jekyll::Generator
114
114
  config['source'] || 'en',
115
115
  lang
116
116
  )
117
- foreign = gpt.translate(plain, min: min_chars, window_length: config['window_length'] || '2048')
117
+ foreign = gpt.translate(
118
+ plain,
119
+ min: min_chars,
120
+ window_length: (config['window_length'] || '2048').to_i
121
+ )
118
122
  File.write(
119
123
  path,
120
124
  [
@@ -23,5 +23,5 @@
23
23
  # SOFTWARE.
24
24
 
25
25
  module GptTranslate
26
- VERSION = '0.0.40'
26
+ VERSION = '0.0.42'
27
27
  end
data/test/test_chatgpt.rb CHANGED
@@ -109,10 +109,26 @@ class GptTranslate::ChatGPTTest < Minitest::Test
109
109
  )
110
110
  end
111
111
 
112
+ def test_with_json
113
+ client = Object.new
114
+ def client.chat(*)
115
+ { 'choices' => [{ 'message' => { 'content' => 'done!' } }] }
116
+ end
117
+ chat = GptTranslate::ChatGPT.new('fake-key', 'gpt-3.5-turbo', 'en', 'ru', client: client)
118
+ assert_equal(
119
+ "done!\n\ndone!",
120
+ chat.translate(
121
+ "This is the first paragraph\n\nThis is second\n\nThis is third",
122
+ min: 1, window_length: 4
123
+ )
124
+ )
125
+ end
126
+
112
127
  private
113
128
 
114
129
  def stub_it!
115
- stub_request(:any, 'https://api.openai.com/v1/chat/completions')
116
- .to_return(body: '{"choices":[{"message":{"content": "done!"}}]}')
130
+ stub_request(:any, 'https://api.openai.com/v1/chat/completions').to_return(
131
+ body: '{"choices":[{"message":{"content": "done!"}}]}'
132
+ )
117
133
  end
118
134
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-chatgpt-translate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.40
4
+ version: 0.0.42
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-08 00:00:00.000000000 Z
11
+ date: 2023-11-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: humanize
@@ -186,7 +186,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
186
186
  - !ruby/object:Gem::Version
187
187
  version: '0'
188
188
  requirements: []
189
- rubygems_version: 3.2.15
189
+ rubygems_version: 3.4.10
190
190
  signing_key:
191
191
  specification_version: 4
192
192
  summary: Translate Jekyll Pages Through ChatGPT