mindroot.coreplugins.credits package¶
Submodules¶
mindroot.coreplugins.credits.conversion module¶
- class mindroot.coreplugins.credits.conversion.CreditPolicy(ledger: CreditLedger, ratio_config: CreditRatioConfig, base_path: str)[source]¶
Bases:
objectEncapsulates credit-related business rules and policies
- async check_operation_allowed(username: str, plugin_id: str, cost_type_id: str, estimated_cost: float, model_id: str | None = None) bool[source]¶
Check if an operation should be allowed based on estimated cost
- class mindroot.coreplugins.credits.conversion.CreditUsageHandler(ledger: CreditLedger, ratio_config: CreditRatioConfig, base_path: str)[source]¶
Bases:
objectConverts usage costs to credits and records credit transactions.
mindroot.coreplugins.credits.ledger module¶
- class mindroot.coreplugins.credits.ledger.CreditLedger(storage: CreditStorage)[source]¶
Bases:
objectManages credit transactions and balances. Ensures consistency and provides high-level credit operations.
- async check_credits_available(username: str, required_amount: float) Tuple[bool, float][source]¶
Check if user has sufficient credits
- Returns:
has_sufficient, float: current_balance)
- Return type:
Tuple of (bool
- async get_balance_at(username: str, at_date: date) float[source]¶
Get credit balance at a specific date
- async get_transactions(username: str, start_date: date | None = None, end_date: date | None = None) List[CreditTransaction][source]¶
Get transaction history
- async get_usage_summary(username: str, start_date: date | None = None, end_date: date | None = None) Dict[source]¶
Get summary of credit usage
- async record_allocation(username: str, amount: float, source: str, reference_id: str, metadata: Dict | None = None) float[source]¶
Record a credit allocation (positive credit change)
mindroot.coreplugins.credits.mod module¶
- async mindroot.coreplugins.credits.mod.allocate_credits(username: str, amount: float, source: str, reference_id: str, metadata: Dict | None = None, context=None) float[source]¶
Allocate credits to a user.
- Parameters:
username – User to allocate credits to
amount – Amount of credits to allocate
source – Source of allocation (e.g., ‘purchase’, ‘admin_grant’)
reference_id – External reference (e.g., payment ID)
metadata – Additional information about allocation
context – Request context
- Returns:
New credit balance
- Return type:
float
Example
- new_balance = await allocate_credits(
‘user123’, 1000.0, ‘purchase’, ‘payment_123’, {‘payment_method’: ‘stripe’}
)
- async mindroot.coreplugins.credits.mod.check_credits_available(username: str, required_amount: float, context=None) Dict[source]¶
Check if user has sufficient credits.
- Returns:
Dict with ‘has_sufficient’ and ‘current_balance’ keys
- async mindroot.coreplugins.credits.mod.estimate_credits(plugin_id: str, cost_type_id: str, estimated_cost: float, model_id: str | None = None, context=None) Dict[source]¶
Estimate credits needed for an operation.
Example
- estimate = await estimate_credits(
‘gpt4’, ‘gpt4.input_tokens’, 0.01, # $0.01 ‘gpt-4-1106-preview’
)
- mindroot.coreplugins.credits.mod.get_base_path(context) str[source]¶
Get the base path for credit data storage
- async mindroot.coreplugins.credits.mod.get_credit_balance(username: str, context=None) float[source]¶
Get current credit balance for a user.
Example
balance = await get_credit_balance(‘user123’)
- async mindroot.coreplugins.credits.mod.get_credit_ratios(context=None) Dict[source]¶
Get current credit ratio configuration.
- async mindroot.coreplugins.credits.mod.get_credit_report(username: str, start_date: str | None = None, end_date: str | None = None, context=None) Dict[source]¶
Get detailed credit report for a user.
- Parameters:
username – User to get report for
start_date – Optional start date (YYYY-MM-DD)
end_date – Optional end date (YYYY-MM-DD)
- Returns:
Current balance
Transaction history
Usage summary
- Return type:
Dict containing
- async mindroot.coreplugins.credits.mod.handle_usage(plugin_id: str, cost_type_id: str, quantity: float, metadata: dict, context=None, model_id: str | None = None)[source]¶
Handle usage tracking for credits system. This service is called by the usage plugin after tracking usage.
- async mindroot.coreplugins.credits.mod.set_credit_ratio(ratio: float, plugin_id: str | None = None, cost_type_id: str | None = None, model_id: str | None = None, context=None)[source]¶
Set credit ratio for cost conversion.
- Parameters:
ratio – Credits per unit cost
plugin_id – Optional plugin identifier
cost_type_id – Optional cost type identifier
model_id – Optional model identifier
Example
# Set global default ratio await set_credit_ratio(100.0)
# Set model-specific ratio await set_credit_ratio(
90.0, plugin_id=’gpt4’, cost_type_id=’gpt4.input_tokens’, model_id=’gpt-4-1106-preview’
)
mindroot.coreplugins.credits.models module¶
- class mindroot.coreplugins.credits.models.CreditRatioConfig(base_path: str)[source]¶
Bases:
objectManages the hierarchical credit ratio configuration
- class mindroot.coreplugins.credits.models.CreditTransaction(timestamp: datetime.datetime, username: str, amount: float, balance: float, type: str, source: str, reference_id: str, metadata: Dict[str, Any] = <factory>, transaction_id: str = <factory>)[source]¶
Bases:
object- amount: float¶
- balance: float¶
- classmethod from_dict(data: dict) CreditTransaction[source]¶
- metadata: Dict[str, Any]¶
- reference_id: str¶
- source: str¶
- timestamp: datetime¶
- transaction_id: str¶
- type: str¶
- username: str¶
mindroot.coreplugins.credits.router module¶
- async mindroot.coreplugins.credits.router.api_allocate_credits(request: Request)[source]¶
Allocate credits to a user
Request body: {
“username”: str, “amount”: float, “source”: str, “reference_id”: str, “metadata”: dict (optional)
}
- async mindroot.coreplugins.credits.router.api_credit_report(username: str, start_date: str | None = None, end_date: str | None = None, request: Request = None)[source]¶
Get credit report for a user
- Path parameters:
username: str - Username to get report for
- Query parameters:
start_date: Optional[str] - Start date in YYYY-MM-DD format end_date: Optional[str] - End date in YYYY-MM-DD format
- async mindroot.coreplugins.credits.router.api_estimate_credits(plugin_id: str, cost_type_id: str, estimated_cost: float, model_id: str | None = None, request: Request = None)[source]¶
Estimate credits needed for an operation
- Query parameters:
plugin_id: str - Plugin identifier cost_type_id: str - Cost type identifier estimated_cost: float - Estimated cost in base currency model_id: Optional[str] - Model identifier
- async mindroot.coreplugins.credits.router.api_update_ratio(request: Request)[source]¶
Update credit ratio configuration
Request body: {
“ratio”: float, “plugin_id”: str (optional), “cost_type_id”: str (optional), “model_id”: str (optional)
}
mindroot.coreplugins.credits.storage module¶
- class mindroot.coreplugins.credits.storage.CreditStorage(base_path: str)[source]¶
Bases:
object- async get_balance_at(username: str, at_date: date) float[source]¶
Get the user’s balance at a specific date
- async get_transactions(username: str, start_date: date | None = None, end_date: date | None = None) List[CreditTransaction][source]¶
Get credit transactions for a user within date range
- async store_transaction(transaction: CreditTransaction) None[source]¶
Store a credit transaction