mirror of
https://github.com/we-promise/sure.git
synced 2026-04-19 03:54:08 +00:00
LLM cost estimation (#223)
* Password reset back button also after confirmation Signed-off-by: Juan José Mata <juanjo.mata@gmail.com> * Implement a filter for category (#215) - Also implement an is empty/is null condition. * Implement an LLM cost estimation page Track costs across all the cost categories: auto categorization, auto merchant detection and chat. Show warning with estimated cost when running a rule that contains AI. * Update pricing * Add google pricing and fix inferred model everywhere. * Update app/models/llm_usage.rb Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Signed-off-by: soky srm <sokysrm@gmail.com> * FIX address review * Linter * Address review - Lowered log level - extracted the duplicated record_usage method into a shared concern * Update app/controllers/settings/llm_usages_controller.rb Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Signed-off-by: soky srm <sokysrm@gmail.com> * Moved attr_reader out of private --------- Signed-off-by: Juan José Mata <juanjo.mata@gmail.com> Signed-off-by: soky srm <sokysrm@gmail.com> Co-authored-by: Juan José Mata <juanjo.mata@gmail.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
This commit is contained in:
@@ -1,9 +1,31 @@
|
||||
class Rule::ActionExecutor::AutoCategorize < Rule::ActionExecutor
|
||||
def label
|
||||
base_label = "Auto-categorize transactions with AI"
|
||||
|
||||
if rule.family.self_hoster?
|
||||
"Auto-categorize transactions with AI ($$)"
|
||||
# Use the same provider determination logic as Family::AutoCategorizer
|
||||
llm_provider = Provider::Registry.get_provider(:openai)
|
||||
|
||||
if llm_provider
|
||||
# Estimate cost for typical batch of 20 transactions
|
||||
selected_model = Provider::Openai.effective_model
|
||||
estimated_cost = LlmUsage.estimate_auto_categorize_cost(
|
||||
transaction_count: 20,
|
||||
category_count: rule.family.categories.count,
|
||||
model: selected_model
|
||||
)
|
||||
suffix =
|
||||
if estimated_cost.nil?
|
||||
" (cost: N/A)"
|
||||
else
|
||||
" (~$#{sprintf('%.4f', estimated_cost)} per 20 transactions)"
|
||||
end
|
||||
"#{base_label}#{suffix}"
|
||||
else
|
||||
"#{base_label} (no LLM provider configured)"
|
||||
end
|
||||
else
|
||||
"Auto-categorize transactions"
|
||||
base_label
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user