Class: JpTranslatorFromGpt::Calculator

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

Defined Under Namespace

Classes: ArgumentError

Constant Summary collapse

MODEL_ERROR_MESSAGE =
"設定に無いモデルです。モデルをmodules/writerに追加するか、ENV[\"OPENAI_MODEL\"]を変更してください。"

Class Method Summary collapse

Class Method Details

.calc_total_cost(used_tokens, token_type) ⇒ Float

トークン数から利用料金を計算する

Parameters:

  • used_tokens (Integer)

    使用したトークン数

  • token_type (String)

    トークンの種類

Returns:

  • (Float)

    利用料金



16
17
18
19
20
# File 'lib/jp_translator_from_gpt/calculator.rb', line 16

def self.calc_total_cost(used_tokens, token_type)
  model = ENV["OPENAI_MODEL"] || "gpt-4o-mini"
  rate = get_token_rate(model, token_type)
  used_tokens * rate
end

.clear_filesvoid

This method returns an undefined value.

ファイルの内容を削除する



70
71
72
73
74
# File 'lib/jp_translator_from_gpt/calculator.rb', line 70

def self.clear_files
  File.write(Writer.text_path("translated_text.txt"), "")
  File.write(Writer.text_path("tokens.txt"), "")
  File.write(Writer.text_path("cost.txt"), "")
end

.get_token_rate(model, token_type) ⇒ Float

モデルとトークンの種類からトークンの単価を取得する モデルが設定に無い場合はエラーを投げる

Parameters:

  • model (String)

    モデル名

  • token_type (String)

    トークンの種類

Returns:

  • (Float)

    トークンの単価



28
29
30
31
32
# File 'lib/jp_translator_from_gpt/calculator.rb', line 28

def self.get_token_rate(model, token_type)
  token_rate = token_rate_hash
  validate_model(model, token_rate)
  token_rate[model][token_type.to_sym]
end

.token_rate_hashHash

トークン単価のハッシュを返す

Returns:

  • (Hash)

    トークン単価のハッシュ



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/jp_translator_from_gpt/calculator.rb', line 37

def self.token_rate_hash
  one_million = 1_000_000
  {
    "gpt-4o" => {
      input: 5.0 / one_million,
      output: 15.0 / one_million
    },
    "gpt-4o-2024-08-06" => {
      input: 2.5 / one_million,
      output: 10.0 / one_million
    },
    "gpt-4o-mini" => {
      input: 0.15 / one_million,
      output: 0.6 / one_million
    }
  }
end

.validate_model(model, token_rate) ⇒ Object

モデルが存在するかどうかを確認する

Parameters:

  • model (String)

    モデル名

  • token_rate (Hash)

    トークンレートのハッシュ

Raises:



60
61
62
63
64
65
# File 'lib/jp_translator_from_gpt/calculator.rb', line 60

def self.validate_model(model, token_rate)
  return if token_rate.key?(model)

  clear_files
  raise Calculator::ArgumentError, MODEL_ERROR_MESSAGE
end