Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add language model prices #501

Merged
merged 3 commits into from
Sep 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading