mirror of
https://gh.wpcy.net/https://github.com/discourse/discourse.git
synced 2026-06-19 04:25:50 +08:00
## 🔍 Overview This update adds a credit system under the hood which will be used for our CDCK Hosted LLM models so we can make our features more accessible to our hosted customers! ## 📷 Screenshots <img width="1105" height="268" alt="Screenshot 2025-10-02 at 12 48 58" src="https://github.com/user-attachments/assets/2a07d89b-7510-4565-82bb-26b46fbcf5c4" /> _☝🏽 ` ProblemCheck` notices to inform customers_ <img width="1077" height="472" alt="Screenshot 2025-10-02 at 12 49 41" src="https://github.com/user-attachments/assets/b72028f7-5df2-45a8-8c71-65cf750755ab" /> _☝🏽 AI Usage page for easy monitoring_ <img width="1112" height="1083" alt="Screenshot 2025-10-02 at 18 17 01" src="https://github.com/user-attachments/assets/a01992d5-15a0-472a-9501-bc3bc9a54ade" /> _☝🏽 Credit bars underneath relevant LLM models_ <img width="866" height="267" alt="Screenshot 2025-10-03 at 11 35 19" src="https://github.com/user-attachments/assets/e7b4c0e7-c93d-4b0f-923d-79ac5d53028b" /> _☝🏽 Dialog box when trying to use without available credits_
44 lines
1.4 KiB
Ruby
Vendored
44 lines
1.4 KiB
Ruby
Vendored
# frozen_string_literal: true
|
|
|
|
class LlmFeatureCreditCost < ActiveRecord::Base
|
|
self.table_name = "llm_feature_credit_costs"
|
|
|
|
belongs_to :llm_model
|
|
|
|
validates :llm_model_id, presence: true
|
|
validates :feature_name, presence: true
|
|
validates :credits_per_token, presence: true, numericality: { greater_than_or_equal_to: 0 }
|
|
validates :feature_name, uniqueness: { scope: :llm_model_id }
|
|
|
|
def self.credit_cost_for(llm_model, feature_name)
|
|
return 1.0 if llm_model.blank? || feature_name.blank?
|
|
|
|
cost =
|
|
where(llm_model: llm_model, feature_name: feature_name).pick(:credits_per_token) ||
|
|
where(llm_model: llm_model, feature_name: "default").pick(:credits_per_token) || 1.0
|
|
|
|
cost.to_f
|
|
end
|
|
|
|
def self.calculate_credit_cost(llm_model, feature_name, total_tokens)
|
|
cost_per_token = credit_cost_for(llm_model, feature_name)
|
|
(total_tokens * cost_per_token).ceil
|
|
end
|
|
end
|
|
|
|
# == Schema Information
|
|
#
|
|
# Table name: llm_feature_credit_costs
|
|
#
|
|
# id :bigint not null, primary key
|
|
# credits_per_token :decimal(10, 4) default(1.0), not null
|
|
# feature_name :string not null
|
|
# created_at :datetime not null
|
|
# updated_at :datetime not null
|
|
# llm_model_id :bigint not null
|
|
#
|
|
# Indexes
|
|
#
|
|
# idx_on_llm_model_id_feature_name_2b0b794b27 (llm_model_id,feature_name) UNIQUE
|
|
# index_llm_feature_credit_costs_on_llm_model_id (llm_model_id)
|
|
#
|