Skip to content

Commit

Permalink
Add language model prices (#501)
Browse files Browse the repository at this point in the history
  • Loading branch information
jlvallelonga authored Sep 13, 2024
1 parent 3a80be0 commit 1396760
Show file tree
Hide file tree
Showing 5 changed files with 127 additions and 35 deletions.
12 changes: 12 additions & 0 deletions app/models/language_model.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,18 @@ class LanguageModel < ApplicationRecord
BEST_GROQ => "llama3-70b-8192",
}

BEST_MODEL_INPUT_PRICES = {
BEST_GPT => 500,
BEST_CLAUDE => 300,
BEST_GROQ => 59,
}

BEST_MODEL_OUTPUT_PRICES = {
BEST_GPT => 1500,
BEST_CLAUDE => 1500,
BEST_GROQ => 79,
}

belongs_to :user
belongs_to :api_service

Expand Down
84 changes: 50 additions & 34 deletions app/models/user/registerable.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,50 +13,66 @@ def create_initial_assistants_etc
groq_api_service = api_services.create!(url: APIService::URL_GROQ, driver: :openai, name: "Groq")

[
[LanguageModel::BEST_GPT, "Best OpenAI Model", true, open_ai_api_service],
[LanguageModel::BEST_CLAUDE, "Best Anthropic Model", true, anthropic_api_service],
[LanguageModel::BEST_GROQ, "Best Open-Source Model", true, groq_api_service],
[LanguageModel::BEST_GPT, "Best OpenAI Model", true, open_ai_api_service, LanguageModel::BEST_MODEL_INPUT_PRICES[LanguageModel::BEST_GPT], LanguageModel::BEST_MODEL_OUTPUT_PRICES[LanguageModel::BEST_GPT]],
[LanguageModel::BEST_CLAUDE, "Best Anthropic Model", true, anthropic_api_service, LanguageModel::BEST_MODEL_INPUT_PRICES[LanguageModel::BEST_CLAUDE], LanguageModel::BEST_MODEL_OUTPUT_PRICES[LanguageModel::BEST_CLAUDE]],
[LanguageModel::BEST_GROQ, "Best Open-Source Model", true, groq_api_service, LanguageModel::BEST_MODEL_INPUT_PRICES[LanguageModel::BEST_GROQ], LanguageModel::BEST_MODEL_OUTPUT_PRICES[LanguageModel::BEST_GROQ]],

["gpt-4o", "GPT-4o (latest)", true, open_ai_api_service],
["gpt-4o-2024-05-13", "GPT-4o Omni Multimodal (2024-05-13)", true, open_ai_api_service],
["gpt-4o", "GPT-4o (latest)", true, open_ai_api_service, 500, 1500],
["gpt-4o-2024-05-13", "GPT-4o Omni Multimodal (2024-05-13)", true, open_ai_api_service, 500, 1500],

["gpt-4-turbo", "GPT-4 Turbo with Vision (latest)", true, open_ai_api_service],
["gpt-4-turbo-2024-04-09", "GPT-4 Turbo with Vision (2024-04-09)", true, open_ai_api_service],
["gpt-4-turbo-preview", "GPT-4 Turbo Preview", false, open_ai_api_service],
["gpt-4-0125-preview", "GPT-4 Turbo Preview (2024-01-25)", false, open_ai_api_service],
["gpt-4-1106-preview", "GPT-4 Turbo Preview (2023-11-06)", false, open_ai_api_service],
["gpt-4-vision-preview", "GPT-4 Turbo with Vision Preview (2023-11-06)", true, open_ai_api_service],
["gpt-4-1106-vision-preview", "GPT-4 Turbo with Vision Preview (2023-11-06)", true, open_ai_api_service],
["gpt-4-turbo", "GPT-4 Turbo with Vision (latest)", true, open_ai_api_service, 1000, 3000],
["gpt-4-turbo-2024-04-09", "GPT-4 Turbo with Vision (2024-04-09)", true, open_ai_api_service, 1000, 3000],
["gpt-4-turbo-preview", "GPT-4 Turbo Preview", false, open_ai_api_service, 1000, 3000], # not sure on price
["gpt-4-0125-preview", "GPT-4 Turbo Preview (2024-01-25)", false, open_ai_api_service, 1000, 3000],
["gpt-4-1106-preview", "GPT-4 Turbo Preview (2023-11-06)", false, open_ai_api_service, 1000, 3000],
["gpt-4-vision-preview", "GPT-4 Turbo with Vision Preview (2023-11-06)", true, open_ai_api_service, 1000, 3000],
["gpt-4-1106-vision-preview", "GPT-4 Turbo with Vision Preview (2023-11-06)", true, open_ai_api_service, 1000, 3000], # not sure on price

["gpt-4", "GPT-4 (latest)", false, open_ai_api_service],
["gpt-4-0613", "GPT-4 Snapshot improved function calling (2023-06-13)", false, open_ai_api_service],
["gpt-4", "GPT-4 (latest)", false, open_ai_api_service, 3000, 6000],
["gpt-4-0613", "GPT-4 Snapshot improved function calling (2023-06-13)", false, open_ai_api_service, 1000, 3000], # not sure on price

["gpt-3.5-turbo", "GPT-3.5 Turbo (latest)", false, open_ai_api_service],
["gpt-3.5-turbo-0125", "GPT-3.5 Turbo (2022-01-25)", false, open_ai_api_service],
["gpt-3.5-turbo-1106", "GPT-3.5 Turbo (2022-11-06)", false, open_ai_api_service],
["gpt-3.5-turbo", "GPT-3.5 Turbo (latest)", false, open_ai_api_service, 300, 600],
["gpt-3.5-turbo-0125", "GPT-3.5 Turbo (2022-01-25)", false, open_ai_api_service, 50, 150],
["gpt-3.5-turbo-1106", "GPT-3.5 Turbo (2022-11-06)", false, open_ai_api_service, 100, 200],

["claude-3-5-sonnet-20240620", "Claude 3.5 Sonnet (2024-06-20)", true, anthropic_api_service],
["claude-3-opus-20240229", "Claude 3 Opus (2024-02-29)", true, anthropic_api_service],
["claude-3-sonnet-20240229", "Claude 3 Sonnet (2024-02-29)", true, anthropic_api_service],
["claude-3-haiku-20240307", "Claude 3 Haiku (2024-03-07)", true, anthropic_api_service],
["claude-2.1", "Claude 2.1", false, anthropic_api_service],
["claude-2.0", "Claude 2.0", false, anthropic_api_service],
["claude-instant-1.2", "Claude Instant 1.2", false, anthropic_api_service],
["claude-3-5-sonnet-20240620", "Claude 3.5 Sonnet (2024-06-20)", true, anthropic_api_service, 300, 1500],
["claude-3-opus-20240229", "Claude 3 Opus (2024-02-29)", true, anthropic_api_service, 1500, 7500],
["claude-3-sonnet-20240229", "Claude 3 Sonnet (2024-02-29)", true, anthropic_api_service, 300, 1500],
["claude-3-haiku-20240307", "Claude 3 Haiku (2024-03-07)", true, anthropic_api_service, 25, 125],
["claude-2.1", "Claude 2.1", false, anthropic_api_service, 800, 2400],
["claude-2.0", "Claude 2.0", false, anthropic_api_service, 800, 2400],
["claude-instant-1.2", "Claude Instant 1.2", false, anthropic_api_service, 80, 240],

["llama3-70b-8192", "Meta Llama 3 70b", false, groq_api_service],
["llama3-8b-8192", "Meta Llama 3 8b", false, groq_api_service],
["mixtral-8x7b-32768", "Mistral 8 7b", false, groq_api_service],
["gemma-7b-it", "Google Gemma 7b", false, groq_api_service],
].each do |api_name, name, supports_images, api_service|
language_models.create!(api_name: api_name, api_service: api_service, name: name, supports_tools: true, supports_images: supports_images)
["llama3-70b-8192", "Meta Llama 3 70b", false, groq_api_service, 59, 79],
["llama3-8b-8192", "Meta Llama 3 8b", false, groq_api_service, 5, 8],
["mixtral-8x7b-32768", "Mistral 8 7b", false, groq_api_service, 24, 24],
["gemma-7b-it", "Google Gemma 7b", false, groq_api_service, 7, 7],
].each do |api_name, name, supports_images, api_service, input_token_cost_per_million, output_token_cost_per_million|
million = BigDecimal(1_000_000)
input_token_cost_cents = input_token_cost_per_million/million
output_token_cost_cents = output_token_cost_per_million/million

language_models.create!(
api_name: api_name,
api_service: api_service,
name: name,
supports_tools: true,
supports_images: supports_images,
input_token_cost_cents: input_token_cost_cents,
output_token_cost_cents: output_token_cost_cents,
)
end

# Only these don't support tools:
[
["gpt-3.5-turbo-instruct", "GPT-3.5 Turbo Instruct", false, open_ai_api_service],
["gpt-3.5-turbo-16k-0613", "GPT-3.5 Turbo (2022-06-13)", false, open_ai_api_service],
].each do |api_name, name, supports_images, api_service|
language_models.create!(api_name: api_name, api_service: api_service, name: name, supports_tools: false, supports_images: supports_images)
["gpt-3.5-turbo-instruct", "GPT-3.5 Turbo Instruct", false, open_ai_api_service, 150, 200],
["gpt-3.5-turbo-16k-0613", "GPT-3.5 Turbo (2022-06-13)", false, open_ai_api_service, 300, 400],
].each do |api_name, name, supports_images, api_service, input_token_cost_per_million, output_token_cost_per_million|
million = BigDecimal(1_000_000)
input_token_cost_cents = input_token_cost_per_million/million
output_token_cost_cents = output_token_cost_per_million/million

language_models.create!(api_name: api_name, api_service: api_service, name: name, supports_tools: false, supports_images: supports_images, input_token_cost_cents: input_token_cost_cents, output_token_cost_cents: output_token_cost_cents)
end

assistants.create! name: "GPT-4o", language_model: language_models.find_by(api_name: LanguageModel::BEST_GPT)
Expand Down
6 changes: 6 additions & 0 deletions db/migrate/20240902024415_add_prices_to_language_models.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
class AddPricesToLanguageModels < ActiveRecord::Migration[7.1]
def change
add_column :language_models, :input_token_cost_cents, :decimal, precision: 30, scale: 15, null: true
add_column :language_models, :output_token_cost_cents, :decimal, precision: 30, scale: 15, null: true
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
class UpdateExistingLanguageModelsWithPrices < ActiveRecord::Migration[7.1]
def up
[
[LanguageModel::BEST_GPT, LanguageModel::BEST_MODEL_INPUT_PRICES[LanguageModel::BEST_GPT], LanguageModel::BEST_MODEL_OUTPUT_PRICES[LanguageModel::BEST_GPT]],
[LanguageModel::BEST_CLAUDE, LanguageModel::BEST_MODEL_INPUT_PRICES[LanguageModel::BEST_CLAUDE], LanguageModel::BEST_MODEL_OUTPUT_PRICES[LanguageModel::BEST_CLAUDE]],
[LanguageModel::BEST_GROQ, LanguageModel::BEST_MODEL_INPUT_PRICES[LanguageModel::BEST_GROQ], LanguageModel::BEST_MODEL_OUTPUT_PRICES[LanguageModel::BEST_GROQ]],

["gpt-4o", 500, 1500],
["gpt-4o-2024-05-13", 500, 1500],

["gpt-4-turbo", 1000, 3000],
["gpt-4-turbo-2024-04-09", 1000, 3000],
["gpt-4-turbo-preview", 1000, 3000], # not sure on price
["gpt-4-0125-preview", 1000, 3000],
["gpt-4-1106-preview", 1000, 3000],
["gpt-4-vision-preview", 1000, 3000],
["gpt-4-1106-vision-preview", 1000, 3000], # not sure on price

["gpt-4", 3000, 6000],
["gpt-4-0613", 1000, 3000], # not sure on price

["gpt-3.5-turbo", 300, 600],
["gpt-3.5-turbo-0125", 50, 150],
["gpt-3.5-turbo-1106", 100, 200],

["claude-3-5-sonnet-20240620",300, 1500],
["claude-3-opus-20240229", 1500, 7500],
["claude-3-sonnet-20240229", 300, 1500],
["claude-3-haiku-20240307", 25, 125],
["claude-2.1", 800, 2400],
["claude-2.0", 800, 2400],
["claude-instant-1.2", 80, 240],

["llama3-70b-8192", 59, 79],
["llama3-8b-8192", 5, 8],
["mixtral-8x7b-32768", 24, 24],
["gemma-7b-it", 7, 7],

["gpt-3.5-turbo-instruct", 150, 200],
["gpt-3.5-turbo-16k-0613", 300, 400],
].each do |api_name, input_token_cost_per_million, output_token_cost_per_million|
million = BigDecimal(1_000_000)
input_token_cost_cents = input_token_cost_per_million/million
output_token_cost_cents = output_token_cost_per_million/million

LanguageModel.where(api_name: api_name).update_all(
input_token_cost_cents: input_token_cost_cents,
output_token_cost_cents: output_token_cost_cents,
)
end
end

def down
# nothing to do
end
end
4 changes: 3 additions & 1 deletion db/schema.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.

ActiveRecord::Schema[7.1].define(version: 2024_08_23_210939) do
ActiveRecord::Schema[7.1].define(version: 2024_09_11_114059) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"

Expand Down Expand Up @@ -170,6 +170,8 @@
t.bigint "user_id", null: false
t.bigint "api_service_id"
t.boolean "supports_tools", default: false
t.decimal "input_token_cost_cents", precision: 30, scale: 15
t.decimal "output_token_cost_cents", precision: 30, scale: 15
t.index ["api_service_id"], name: "index_language_models_on_api_service_id"
t.index ["user_id", "deleted_at"], name: "index_language_models_on_user_id_and_deleted_at"
t.index ["user_id"], name: "index_language_models_on_user_id"
Expand Down

0 comments on commit 1396760

Please sign in to comment.