Class: JpTranslatorFromGpt::Writer

Inherits:
Object
  • Object
show all
Defined in:
lib/jp_translator_from_gpt/writer.rb

Class Method Summary collapse

Class Method Details

.read_existing_tokens(log_file_path) ⇒ Array<Integer>

ファイルにあるトークン数を読み込む

Parameters:

  • log_file_path (String)

    トークン数が書かれたファイルのパス

Returns:

  • (Array<Integer>)

    入力トークン数と出力トークン数



68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/jp_translator_from_gpt/writer.rb', line 68

def self.read_existing_tokens(log_file_path)
  existing_input_tokens, existing_output_tokens = 0, 0

  if File.exist?(log_file_path)
    File.readlines(log_file_path).each do |line|
      existing_input_tokens = line.split(":").last.strip.to_i if line.start_with?("input:")
      existing_output_tokens = line.split(":").last.strip.to_i if line.start_with?("output:")
    end
  end

  [existing_input_tokens, existing_output_tokens]
end

.text_path(under_logs_path) ⇒ String

出力先のテキストファイルのパスを返す main.rbから見たパスで指定している

Parameters:

  • under_logs_path (String)

    translator_logsディレクトリ配下のパス

Returns:

  • (String)

    出力先のテキストファイルのパス



26
27
28
29
30
# File 'lib/jp_translator_from_gpt/writer.rb', line 26

def self.text_path(under_logs_path)
  output_dir = "translator_logs"
  FileUtils.mkdir_p(output_dir) unless File.directory?(output_dir)
  File.join("translator_logs", under_logs_path)
end

.write_logs(response) ⇒ void

This method returns an undefined value.

ログをファイルに書き込む

Parameters:

  • response (Hash)

    OpenAI APIからのレスポンス



12
13
14
15
16
17
18
19
# File 'lib/jp_translator_from_gpt/writer.rb', line 12

def self.write_logs(response)
  input_tokens = Translator.dig_used_tokens(response, "input")
  output_tokens = Translator.dig_used_tokens(response, "output")

  write_translated_text(response)
  write_used_tokens(input_tokens, output_tokens)
  write_total_cost(input_tokens, output_tokens)
end

.write_total_cost(input_tokens, output_tokens) ⇒ void

This method returns an undefined value.

トークン数から利用料金を計算し、ファイルにある合計金額に加算して書き込む ファイルのテキストは上書きされる

Parameters:

  • input_tokens (Integer)

    入力トークン数

  • output_tokens (Integer)

    出力トークン数



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/jp_translator_from_gpt/writer.rb', line 87

def self.write_total_cost(input_tokens, output_tokens)
  log_file_path = text_path("cost.txt")
  this_cost =
    Calculator.calc_total_cost(input_tokens, "input") + Calculator.calc_total_cost(output_tokens, "output")
  existing_cost =
    if File.exist?(log_file_path)
      File.read(log_file_path).gsub("$", "").to_f
    else
      0.0
    end
  total_cost = this_cost + existing_cost

  File.open(log_file_path, "w") do |file|
    # 小数点以下8桁まで表示
    file.puts("$#{format("%.8f", total_cost)}")
  end
end

.write_translated_text(response) ⇒ void

This method returns an undefined value.

翻訳されたテキストをファイルに書き込み、ターミナルに出力する テキストはファイルの末尾に追記される

Parameters:

  • response (Hash)

    OpenAI APIからのレスポンス



37
38
39
40
41
42
43
# File 'lib/jp_translator_from_gpt/writer.rb', line 37

def self.write_translated_text(response)
  log_file_path = text_path("translated_text.txt")
  File.open(log_file_path, "a") do |file|
    translated_text = response["choices"][0]["message"]["content"]
    file.puts(translated_text)
  end
end

.write_used_tokens(input_tokens, output_tokens) ⇒ void

This method returns an undefined value.

使用したトークン数をファイルに書き込む ファイルのテキストは上書きされる

Parameters:

  • input_tokens (Integer)

    入力トークン数

  • output_tokens (Integer)

    出力トークン数



51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/jp_translator_from_gpt/writer.rb', line 51

def self.write_used_tokens(input_tokens, output_tokens)
  log_file_path = text_path("tokens.txt")
  existing_input_tokens, existing_output_tokens = read_existing_tokens(log_file_path)

  total_input_tokens = existing_input_tokens + input_tokens
  total_output_tokens = existing_output_tokens + output_tokens

  File.open(log_file_path, "w") do |file|
    file.puts("input: #{total_input_tokens}")
    file.puts("output: #{total_output_tokens}")
  end
end