Nếu bạn từng rơi vào tình huống 账单爆表 — hóa đơn API cuối tháng cao hơn dự kiến gấp 3-4 lần — thì bài viết này là dành cho bạn. Cách đây 6 tháng, đội ngũ của tôi đã mất $2,400 chỉ trong 2 tuần vì một script lỗi loop vô tận gọi GPT-4.1 liên tục. Kể từ đó, tôi đã xây dựng một hệ thống budget management hoàn chỉnh, và hôm nay tôi sẽ chia sẻ toàn bộ chiến lược — kèm code có thể chạy ngay.

So Sánh Chi Phí: HolySheep AI vs OpenAI Official vs Relay Services

Trước khi đi vào chi tiết kỹ thuật, hãy cùng xem bảng so sánh thực tế về giá cả và tính năng quản lý chi tiêu:

Dịch vụ GPT-4.1 ($/MTok) Claude Sonnet 4.5 ($/MTok) Giới hạn chi tiêu Thanh toán Độ trễ P50
HolySheep AI $8 $15 ✅ Native WeChat/Alipay <50ms
OpenAI Official $60 $45 ⚠️ Limit setting Thẻ quốc tế 200-500ms
API Relay A $45 $35 ❌ Không USDT only 100-300ms
API Relay B $50 $40 ❌ Không PayPal 150-400ms

Tiết kiệm thực tế với HolySheep: So với OpenAI Official, bạn tiết kiệm được 85-87% chi phí. Với lượng sử dụng 100 triệu token/tháng, chênh lệch có thể lên đến $5,200.

Tại Sao Budget Management Là Bắt Buộc?

Trong thực chiến, tôi đã gặp những tình huống "kinh hoàng" sau:

Tất cả những điều này có thể được ngăn chặn với một layer budget management đúng cách.

Kiến Trúc Hệ Thống Budget Management

Hệ thống của tôi bao gồm 4 layer bảo vệ:

Triển Khai Code: HolySheep AI Budget Manager

Dưới đây là implementation hoàn chỉnh sử dụng HolySheep AI với base URL chuẩn:

1. Core Budget Manager Class

import requests
import time
from datetime import datetime, timedelta
from collections import defaultdict
from threading import Lock
from typing import Optional, Dict, List
import logging

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

class HolySheepBudgetManager:
    """
    Budget Management System cho HolySheep AI API
    Author: HolySheep AI Technical Team
    Version: 2.0
    """
    
    def __init__(
        self,
        api_key: str,
        monthly_limit: float = 500.0,
        daily_limit: float = 50.0,
        per_request_limit: float = 5.0
    ):
        self.base_url = "https://api.holysheep.ai/v1"
        self.api_key = api_key
        
        # Budget limits ($)
        self.monthly_limit = monthly_limit
        self.daily_limit = daily_limit
        self.per_request_limit = per_request_limit
        
        # Usage tracking
        self.monthly_spend = 0.0
        self.daily_spend = 0.0
        self.daily_requests = 0
        
        # Historical data
        self.request_costs = []  # [(timestamp, cost)]
        self.last_reset = datetime.now()
        self.last_daily_reset = datetime.now().date()
        
        # Lock for thread safety
        self._lock = Lock()
        
        # Alert callbacks
        self.alert_callbacks: List[callable] = []
        
        # Kill switch
        self._circuit_broken = False
        
        logger.info(f"Budget Manager initialized: monthly=${monthly_limit}, daily=${daily_limit}")
    
    def add_alert_callback(self, callback):
        """Thêm callback khi budget threshold reached"""
        self.alert_callbacks.append(callback)
    
    def _estimate_cost(self, model: str, input_tokens: int, output_tokens: int) -> float:
        """
        Ước tính chi phí dựa trên model pricing 2026
        HolySheep AI Pricing (saving 85%+ vs Official)
        """
        pricing = {
            "gpt-4.1": {"input": 2.0, "output": 8.0},      # $8/MTok output
            "gpt-4o": {"input": 2.5, "output": 10.0},
            "gpt-4o-mini": {"input": 0.15, "output": 0.60},
            "claude-sonnet-4.5": {"input": 3.0, "output": 15.0},  # $15/MTok output
            "claude-opus-3.5": {"input": 15.0, "output": 75.0},
            "gemini-2.5-flash": {"input": 0.125, "output": 2.50},  # $2.50/MTok output
            "deepseek-v3.2": {"input": 0.14, "output": 0.42},     # $0.42/MTok output
        }
        
        if model not in pricing:
            logger.warning(f"Unknown model {model}, using GPT-4.1 pricing")
            model = "gpt-4.1"
        
        cost = (input_tokens / 1_000_000 * pricing[model]["input"] +
                output_tokens / 1_000_000 * pricing[model]["output"])
        
        return round(cost, 6)
    
    def _check_limits(self, estimated_cost: float) -> tuple[bool, str]:
        """Kiểm tra tất cả limits trước khi gọi API"""
        now = datetime.now()
        
        # Daily reset check
        if now.date() > self.last_daily_reset:
            self.daily_spend = 0.0
            self.daily_requests = 0
            self.last_daily_reset = now.date()
            logger.info("Daily spend reset")
        
        # Monthly reset check
        if (now - self.last_reset).days >= 30:
            self.monthly_spend = 0.0
            self.last_reset = now
            logger.info("Monthly spend reset")
        
        # Check circuit breaker
        if self._circuit_broken:
            return False, "CIRCUIT_BROKEN: API calls disabled"
        
        # Per-request limit
        if estimated_cost > self.per_request_limit:
            return False, f"OVER_LIMIT: Request cost ${estimated_cost:.4f} > ${self.per_request_limit}"
        
        # Daily limit
        if self.daily_spend + estimated_cost > self.daily_limit:
            return False, f"DAILY_LIMIT: Would exceed ${self.daily_limit} daily limit"
        
        # Monthly limit
        if self.monthly_spend + estimated_cost > self.monthly_limit:
            return False, f"MONTHLY_LIMIT: Would exceed ${self.monthly_limit} monthly limit"
        
        return True, "OK"
    
    def _record_usage(self, cost: float):
        """Ghi nhận usage và trigger alerts nếu cần"""
        with self._lock:
            self.monthly_spend += cost
            self.daily_spend += cost
            self.daily_requests += 1
            self.request_costs.append((datetime.now(), cost))
            
            # Cleanup old records (keep last 10000)
            if len(self.request_costs) > 10000:
                self.request_costs = self.request_costs[-5000:]
        
        # Check thresholds and trigger alerts
        monthly_pct = (self.monthly_spend / self.monthly_limit) * 100
        daily_pct = (self.daily_spend / self.daily_limit) * 100
        
        if monthly_pct >= 80:
            for callback in self.alert_callbacks:
                callback("MONTHLY_80", f"Monthly budget at {monthly_pct:.1f}%")
        
        if daily_pct >= 90:
            for callback in self.alert_callbacks:
                callback("DAILY_90", f"Daily budget at {daily_pct:.1f}%")
    
    def chat_completions(self, messages: list, model: str = "gpt-4.1", 
                         max_tokens: int = 4096, **kwargs) -> Optional[dict]:
        """
        Gọi HolySheep AI Chat Completions API với budget protection
        
        Args:
            messages: OpenAI-format messages
            model: Model name (default: gpt-4.1)
            max_tokens: Max output tokens
        
        Returns:
            API response hoặc None nếu budget exceeded
        """
        # Estimate input tokens (rough approximation)
        estimated_input = sum(len(str(m)) for m in messages) // 4
        estimated_output = max_tokens
        estimated_cost = self._estimate_cost(model, estimated_input, estimated_output)
        
        # Pre-flight check
        allowed, reason = self._check_limits(estimated_cost)
        if not allowed:
            logger.error(f"Request blocked: {reason}")
            return {"error": reason, "blocked": True}
        
        try:
            response = requests.post(
                f"{self.base_url}/chat/completions",
                headers={
                    "Authorization": f"Bearer {self.api_key}",
                    "Content-Type": "application/json"
                },
                json={
                    "model": model,
                    "messages": messages,
                    "max_tokens": max_tokens,
                    **kwargs
                },
                timeout=30
            )
            
            if response.status_code == 200:
                data = response.json()
                
                # Calculate actual cost from response
                usage = data.get("usage", {})
                actual_input = usage.get("prompt_tokens", estimated_input)
                actual_output = usage.get("completion_tokens", 0)
                actual_cost = self._estimate_cost(model, actual_input, actual_output)
                
                # Record usage
                self._record_usage(actual_cost)
                
                logger.info(f"Request successful: ${actual_cost:.6f}, "
                           f"Monthly: ${self.monthly_spend:.2f}/${self.monthly_limit}")
                
                return data
            else:
                logger.error(f"API Error: {response.status_code} - {response.text}")
                return {"error": response.text, "status_code": response.status_code}
                
        except requests.exceptions.Timeout:
            logger.error("Request timeout")
            return {"error": "Timeout"}
        except Exception as e:
            logger.error(f"Exception: {str(e)}")
            return {"error": str(e)}
    
    def break_circuit(self, reason: str = "Manual"):
        """Emergency kill switch - disable all API calls"""
        self._circuit_broken = True
        logger.critical(f"CIRCUIT BREAKER TRIGGERED: {reason}")
    
    def reset_circuit(self):
        """Reset circuit breaker after issue resolved"""
        self._circuit_broken = False
        logger.info("Circuit breaker reset")
    
    def get_status(self) -> dict:
        """Lấy current budget status"""
        return {
            "monthly_spend": round(self.monthly_spend, 4),
            "monthly_limit": self.monthly_limit,
            "monthly_remaining": round(self.monthly_limit - self.monthly_spend, 4),
            "monthly_pct": round((self.monthly_spend / self.monthly_limit) * 100, 2),
            "daily_spend": round(self.daily_spend, 4),
            "daily_limit": self.daily_limit,
            "daily_remaining": round(self.daily_limit - self.daily_spend, 4),
            "circuit_broken": self._circuit_broken,
            "total_requests_today": self.daily_requests
        }

============================================================

SỬ DỤNG VÍ DỤ

============================================================

def my_alert_callback(alert_type: str, message: str): """Custom alert handler""" print(f"🚨 ALERT [{alert_type}]: {message}") # Gửi notification: email, Slack, WeChat, etc.

Khởi tạo với HolySheep API key

manager = HolySheepBudgetManager( api_key="YOUR_HOLYSHEEP_API_KEY", monthly_limit=500.0, # $500/tháng daily_limit=50.0, # $50/ngày per_request_limit=5.0 # $5/request max ) manager.add_alert_callback(my_alert_callback)

Gọi API an toàn

messages = [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Explain quantum computing in 100 words."} ] response = manager.chat_completions( messages=messages, model="deepseek-v3.2", # Model rẻ nhất, $0.42/MTok output max_tokens=200 ) if response and not response.get("blocked"): print(f"Response: {response['choices'][0]['message']['content']}") print(f"Status: {manager.get_status()}")

2. Advanced Token Counter & Pre-check

import tiktoken
from functools import wraps
import time

class TokenBudgetEnforcer:
    """
    Token counting và pre-check trước khi gọi API
    Hỗ trợ multi-model với accurate token estimation
    """
    
    def __init__(self, budget_manager: HolySheepBudgetManager):
        self.budget = budget_manager
        
        # encoders cache
        self._encoders = {}
        
        # Model-specific limits
        self.model_limits = {
            "gpt-4.1": {"max_input": 128000, "max_output": 32768},
            "gpt-4o": {"max_input": 128000, "max_output": 16384},
            "gpt-4o-mini": {"max_input": 128000, "max_output": 16384},
            "claude-sonnet-4.5": {"max_input": 200000, "max_output": 8192},
            "gemini-2.5-flash": {"max_input": 1000000, "max_output": 8192},
            "deepseek-v3.2": {"max_input": 640000, "max_output": 4096},
        }
        
        # Tokenizer mapping
        self.encoding_map = {
            "gpt-4.1": "cl100k_base",
            "gpt-4o": "cl100k_base",
            "claude-sonnet-4.5": "cl100k_base",
            "gemini-2.5-flash": "cl100k_base",
            "deepseek-v3.2": "cl100k_base",
        }
    
    def _get_encoder(self, model: str):
        """Lazy load encoder"""
        encoding_name = self.encoding_map.get(model, "cl100k_base")
        if encoding_name not in self._encoders:
            self._encoders[encoding_name] = tiktoken.get_encoding(encoding_name)
        return self._encoders[encoding_name]
    
    def count_tokens(self, text: str, model: str = "gpt-4.1") -> int:
        """Đếm số token trong text"""
        encoder = self._get_encoder(model)
        return len(encoder.encode(text))
    
    def count_messages_tokens(self, messages: list, model: str = "gpt-4.1") -> dict:
        """Đếm tokens cho toàn bộ conversation"""
        encoder = self._get_encoder(model)
        
        total_tokens = 0
        input_tokens = 0
        
        for msg in messages:
            # Message format tokens (approximation)
            msg_tokens = 4 + self.count_tokens(str(msg), model)
            total_tokens += msg_tokens
            input_tokens += msg_tokens
        
        return {
            "total": total_tokens,
            "input": input_tokens,
            "message_count": len(messages)
        }
    
    def estimate_cost_accurate(self, messages: list, model: str, 
                               requested_max_tokens: int) -> dict:
        """Ước tính chi phí CHÍNH XÁC dựa trên token count"""
        token_info = self.count_messages_tokens(messages, model)
        
        # Lấy model pricing
        pricing = {
            "gpt-4.1": {"input": 2.0, "output": 8.0},
            "gpt-4o": {"input": 2.5, "output": 10.0},
            "gpt-4o-mini": {"input": 0.15, "output": 0.60},
            "claude-sonnet-4.5": {"input": 3.0, "output": 15.0},
            "gemini-2.5-flash": {"input": 0.125, "output": 2.50},
            "deepseek-v3.2": {"input": 0.14, "output": 0.42},
        }
        
        p = pricing.get(model, pricing["gpt-4.1"])
        estimated_cost = (token_info["input"] / 1_000_000 * p["input"] +
                         requested_max_tokens / 1_000_000 * p["output"])
        
        return {
            "input_tokens": token_info["input"],
            "output_tokens": requested_max_tokens,
            "estimated_cost": round(estimated_cost, 6),
            "model": model,
            "within_budget": estimated_cost <= self.budget.per_request_limit
        }
    
    def preflight_check(self, messages: list, model: str, 
                       max_tokens: int) -> tuple[bool, dict]:
        """
        Pre-flight check trước khi gọi API
        Trả về (can_proceed, details)
        """
        details = self.estimate_cost_accurate(messages, model, max_tokens)
        
        # Kiểm tra model limits
        limits = self.model_limits.get(model, self.model_limits["gpt-4.1"])
        
        if details["input_tokens"] > limits["max_input"]:
            return False, {
                **details,
                "error": f"Input tokens {details['input_tokens']} exceeds max {limits['max_input']}"
            }
        
        if max_tokens > limits["max_output"]:
            return False, {
                **details,
                "error": f"Max tokens {max_tokens} exceeds model limit {limits['max_output']}"
            }
        
        # Kiểm tra budget
        budget_ok, budget_reason = self.budget._check_limits(details["estimated_cost"])
        if not budget_ok:
            return False, {
                **details,
                "error": budget_reason,
                "budget_status": self.budget.get_status()
            }
        
        # Suggest cheaper alternative nếu cost > $1
        if details["estimated_cost"] > 1.0:
            suggestions = self._suggest_alternatives(model, details["input_tokens"])
            if suggestions:
                details["suggestions"] = suggestions
        
        return True, details
    
    def _suggest_alternatives(self, current_model: str, input_tokens: int) -> list:
        """Đề xuất model rẻ hơn"""
        alternatives = []
        
        cheaper_models = {
            "gpt-4.1": "gpt-4o-mini",
            "gpt-4o": "gpt-4o-mini",
            "claude-sonnet-4.5": "deepseek-v3.2",
        }
        
        if current_model in cheaper_models:
            alt = cheaper_models[current_model]
            alt_details = self.estimate_cost_accurate([], alt, 1000)
            alternatives.append({
                "model": alt,
                "estimated_savings_pct": round(
                    (1 - alt_details["estimated_cost"] / 
                     self.estimate_cost_accurate([], current_model, 1000)["estimated_cost"]) * 100, 1
                )
            })
        
        return alternatives

============================================================

DECORATOR CHO AUTOMATIC PREFLIGHT CHECK

============================================================

def budget_protected(max_tokens: int = 4096, model: str = "gpt-4.1"): """ Decorator tự động kiểm tra budget trước khi gọi function Usage: @budget_protected(max_tokens=2000, model="deepseek-v3.2") def my_ai_function(messages): return manager.chat_completions(messages, model=model, max_tokens=max_tokens) """ def decorator(func): @wraps(func) def wrapper(*args, **kwargs): # Lấy self nếu là method budget = None if hasattr(args[0], 'budget'): budget = args[0].budget elif hasattr(args[0], 'token_enforcer'): budget = args[0].token_enforcer.budget if budget: # Estimate cost messages = kwargs.get('messages', args[1] if len(args) > 1 else []) enforcer = TokenBudgetEnforcer(budget) ok, details = enforcer.preflight_check(messages, model, max_tokens) if not ok: print(f"⛔ Preflight failed: {details.get('error')}") if details.get('suggestions'): print(f"💡 Suggestions: {details['suggestions']}") return {"error": "preflight_failed", "details": details} return func(*args, **kwargs) return wrapper return decorator

============================================================

VÍ DỤ SỬ DỤNG

============================================================

Khởi tạo

budget_mgr = HolySheepBudgetManager( api_key="YOUR_HOLYSHEEP_API_KEY", monthly_limit=500.0, daily_limit=50.0, per_request_limit=5.0 ) enforcer = TokenBudgetEnforcer(budget_mgr)

Test token counting

test_messages = [ {"role": "system", "content": "You are a helpful coding assistant."}, {"role": "user", "content": "Write a Python function to calculate fibonacci with memoization."} ]

Preflight check

can_proceed, details = enforcer.preflight_check( test_messages, model="deepseek-v3.2", max_tokens=2000 ) print(f"Can proceed: {can_proceed}") print(f"Details: {details}")

Nếu cost quá cao, system sẽ suggest model rẻ hơn

if details.get("suggestions"): print(f"💡 Suggested alternatives: {details['suggestions']}")

3. Monthly Budget Dashboard & Auto-Disable

import json
from datetime import datetime
import schedule
import time
from threading import Thread

class BudgetDashboard:
    """
    Dashboard theo dõi và tự động disable khi vượt budget
    Gửi report qua webhook
    """
    
    def __init__(self, budget_manager: HolySheepBudgetManager):
        self.budget = budget_manager
        self.webhook_url = None
        self.auto_disable_threshold = 0.95  # 95% của monthly limit
        
        # History tracking
        self.daily_history = []
        self.peak_usage_hours = {}
        
    def set_webhook(self, url: str):
        """Thiết lập webhook để nhận notifications"""
        self.webhook_url = url
    
    def get_monthly_report(self) -> dict:
        """Tạo báo cáo tháng"""
        status = self.budget.get_status()
        
        # Tính toán thêm metrics
        avg_request_cost = 0
        if self.budget.request_costs:
            costs = [c[1] for c in self.budget.request_costs]
            avg_request_cost = sum(costs) / len(costs)
        
        return {
            "report_date": datetime.now().isoformat(),
            "monthly": {
                "spent": status["monthly_spend"],
                "limit": status["monthly_limit"],
                "remaining": status["monthly_remaining"],
                "usage_pct": status["monthly_pct"],
                "estimated_days_left": self._estimate_days_left()
            },
            "daily": {
                "spent": status["daily_spend"],
                "limit": status["daily_limit"],
                "remaining": status["daily_remaining"],
                "requests_today": status["total_requests_today"]
            },
            "average_request_cost": round(avg_request_cost, 6),
            "total_requests_this_month": len(self.budget.request_costs),
            "status": self._get_status_label(status["monthly_pct"]),
            "recommendations": self._generate_recommendations(status)
        }
    
    def _estimate_days_left(self) -> float:
        """Ước tính số ngày còn lại trong tháng"""
        now = datetime.now()
        days_in_month = 31
        days_passed = now.day
        remaining_days = days_in_month - days_passed
        
        if self.budget.monthly_spend > 0:
            daily_rate = self.budget.monthly_spend / days_passed
            if daily_rate > 0:
                return round(self.budget.monthly_remaining / daily_rate, 1)
        
        return remaining_days
    
    def _get_status_label(self, pct: float) -> str:
        """Lấy nhãn trạng thái"""
        if pct < 50:
            return "🟢 HEALTHY"
        elif pct < 75:
            return "🟡 CAUTION"
        elif pct < 90:
            return "🟠 WARNING"
        else:
            return "🔴 CRITICAL"
    
    def _generate_recommendations(self, status: dict) -> list:
        """Đề xuất tối ưu hóa"""
        recs = []
        
        if status["monthly_pct"] > 80:
            recs.append("⚠️ Sử dụng model rẻ hơn cho simple tasks: deepseek-v3.2 ($0.42/MTok)")
        
        if status["daily_spend"] > status["daily_limit"] * 0.8:
            recs.append("⚠️ Daily spend gần đạt limit, xem xét batch processing")
        
        # So sánh với OpenAI official
        official_cost = status["monthly_spend"] / 0.15  # ~85% saving
        recs.append(f"📊 So với OpenAI Official, bạn đã tiết kiệm ~${official_cost:.2f}")
        
        return recs
    
    def auto_disable_check(self) -> bool:
        """
        Kiểm tra và tự động disable nếu vượt threshold
        Trả về True nếu đã disable
        """
        status = self.budget.get_status()
        
        if status["monthly_pct"] >= (self.auto_disable_threshold * 100):
            self.budget.break_circuit(f"Auto-disable: {status['monthly_pct']}% of monthly limit")
            
            # Gửi notification
            if self.webhook_url:
                self._send_webhook({
                    "type": "AUTO_DISABLE",
                    "message": f"Budget manager auto-disabled at {status['monthly_pct']}%",
                    "spent": status["monthly_spend"],
                    "limit": status["monthly_limit"]
                })
            
            return True
        
        return False
    
    def _send_webhook(self, payload: dict):
        """Gửi webhook notification"""
        try:
            requests.post(
                self.webhook_url,
                json=payload,
                timeout=10
            )
        except Exception as e:
            print(f"Webhook failed: {e}")
    
    def print_report(self):
        """In báo cáo ra console"""
        report = self.get_monthly_report()
        
        print("\n" + "="*60)
        print("📊 HOLYSHEEP AI BUDGET REPORT")
        print("="*60)
        print(f"Date: {report['report_date']}")
        print(f"Status: {report['status']}")
        print()
        print(f"💰 MONTHLY SPENDING")
        print(f"   Spent: ${report['monthly']['spent']:.4f} / ${report['monthly']['limit']}")
        print(f"   Remaining: ${report['monthly']['remaining']:.4f} ({100-report['monthly']['usage_pct']:.1f}%)")
        print(f"   Est. days left: {report['monthly']['estimated_days_left']} days")
        print()
        print(f"📅 DAILY SPENDING")
        print(f"   Spent: ${report['daily']['spent']:.4f} / ${report['daily']['limit']}")
        print(f"   Requests today: {report['daily']['requests_today']}")
        print()
        print(f"📈 STATISTICS")
        print(f"   Avg request cost: ${report['average_request_cost']:.6f}")
        print(f"   Total requests: {report['total_requests_this_month']}")
        print()
        
        if report['recommendations']:
            print("💡 RECOMMENDATIONS:")
            for rec in report['recommendations']:
                print(f"   {rec}")
        
        print("="*60 + "\n")
        
        return report

============================================================

SCHEDULED CHECKER (CHẠY BACKGROUND)

============================================================

class BudgetScheduler: """Chạy scheduled checks và alerts""" def __init__(self, dashboard: BudgetDashboard): self.dashboard = dashboard self._running = False self._thread = None def start(self, interval_minutes: int = 60): """Bắt đầu scheduled checker""" self._running = True def run_checks(): while self._running: # Auto-disable check if self.dashboard.auto_disable_check(): print("🚨 Auto-disable triggered!") # In report self.dashboard.print_report() # Sleep time.sleep(interval_minutes * 60) self._thread = Thread(target=run_checks, daemon=True) self._thread.start() print(f"✅ Budget scheduler started (interval: {interval_minutes} min)") def stop(self): """Dừng scheduler""" self._running = False if self._thread: self._thread.join(timeout=5)

============================================================

VÍ DỤ SỬ DỤNG HOÀN CHỈNH

============================================================

Khởi tạo

budget_mgr = HolySheepBudgetManager( api_key="YOUR_HOLYSHEEP_API_KEY", monthly_limit=500.0, daily_limit=50.0 ) dashboard = BudgetDashboard(budget_mgr) dashboard.set_webhook("https://your-webhook.com/notify")

In report ngay

dashboard.print_report()

Start background scheduler (check mỗi giờ)

scheduler = BudgetScheduler(dashboard)

scheduler.start(interval_minutes=60)

Simulation: Gọi nhiều requests

for i in range(10): messages = [{"role": "user", "content": f"Request {i+1}"}] response = budget_mgr.chat_completions( messages=messages, model="deepseek-v