Khi tôi lần đầu tiên triển khai ứng dụng sử dụng mô hình ngôn ngữ lớn vào năm ngoái, tôi đã từng trải qua một cơn ác mộng tài chính thực sự. Sau một đêm không ngủ, tôi phát hiện tài khoản đã bị trừ hơn 2,000 đô la Mỹ chỉ vì một vòng lặp vô tận trong code gọi API. Kể từ đó, tôi đã xây dựng và hoàn thiện một hệ thống cảnh báo chi phí hoàn chỉnh, và hôm nay tôi muốn chia sẻ toàn bộ kinh nghiệm thực chiến này với bạn.

Tại Sao Bạn Cần Hệ Thống Cảnh Báo Chi Phí

Theo kinh nghiệm của tôi, có ba nguyên nhân phổ biến nhất dẫn đến chi phí API bị đội lên cao bất ngờ. Thứ nhất là lỗi vòng lặp vô tận khi code chạy và liên tục gọi API mà không có điều kiện dừng. Thứ hai là cấu hình thông số sinh token không hợp lý, đặc biệt là tham số max_tokens quá lớn. Thứ ba là quản lý người dùng kém dẫn đến việc một số tài khoản lạm dụng API miễn phí.

Với HolySheep AI, tỷ giá chỉ ¥1=$1 (tiết kiệm đến 85% so với các nhà cung cấp khác), nhưng ngay cả với mức giá này, nếu không kiểm soát tốt, chi phí vẫn có thể tăng vọt. Bảng giá tham khảo 2026: GPT-4.1 $8/MTok, Claude Sonnet 4.5 $15/MTok, Gemini 2.5 Flash $2.50/MTok, và DeepSeek V3.2 chỉ $0.42/MTok.

Kiến Trúc Tổng Quan Của Hệ Thống

Hệ thống cảnh báo chi phí của tôi bao gồm bốn thành phần chính hoạt động đồng thời. Thành phần đầu tiên là module theo dõi sử dụng theo thời gian thực, ghi nhận mọi lần gọi API và tính toán chi phí tức thời. Thành phần thứ hai là bộ quy tắc cảnh báo, cho phép thiết lập ngưỡng chi phí ở nhiều mức khác nhau. Thành phần thứ ba là hệ thống thông báo đa kênh, gửi cảnh báo qua email, SMS và webhook. Thành phần thứ tư là dashboard trực quan giúp bạn theo dõi tổng quan chi phí.

Bước 1: Thiết Lập Môi Trường và Cài Đặt Thư Viện

Trước tiên, bạn cần tạo một thư mục làm việc riêng cho dự án. Mở terminal và gõ các lệnh sau để thiết lập môi trường Python với các thư viện cần thiết.

# Tạo thư mục dự án
mkdir cost-monitor-system
cd cost-monitor-system

Tạo môi trường ảo Python

python -m venv venv

Kích hoạt môi trường ảo (Windows)

venv\Scripts\activate

Kích hoạt môi trường ảo (macOS/Linux)

source venv/bin/activate

Cài đặt các thư viện cần thiết

pip install requests pandas python-dotenv schedule plyer

Sau khi cài đặt xong, bạn sẽ thấy dấu (venv) xuất hiện ở đầu dòng lệnh, cho biết môi trường ảo đã được kích hoạt thành công.

Bước 2: Tạo File Cấu Hình An Toàn

Tôi luôn khuyên bạn không bao giờ được hardcode API key trực tiếp trong code. Thay vào đó, hãy tạo một file .env riêng biệt để lưu trữ các thông tin nhạy cảm. File này sẽ nằm ngoài thư mục git repository để tránh bị commit lên GitHub.

# Tạo file .env trong thư mục dự án
touch .env

Nội dung file .env (chỉnh sửa theo thông tin của bạn)

Lưu ý: KHÔNG commit file này lên Git

HOLYSHEEP_API_KEY=YOUR_HOLYSHEEP_API_KEY [email protected] DAILY_BUDGET_LIMIT=50 WEEKLY_BUDGET_LIMIT=300 MONTHLY_BUDGET_LIMIT=1000 ALERT_THRESHOLD_PERCENT=75

Để đảm bảo file .env không bị commit lên repository, hãy tạo file .gitignore với nội dung sau.

# Thêm vào file .gitignore
.env
venv/
__pycache__/
*.pyc
.env.local

Bước 3: Xây Dựng Module Theo Dõi Chi Phí

Đây là trái tim của hệ thống cảnh báo. Module này sẽ ghi lại mọi lần gọi API, tính toán chi phí dựa trên số token sử dụng, và lưu trữ dữ liệu để phân tích sau này. Tôi đã thiết kế module này để hoạt động với HolySheep AI API với độ trễ dưới 50ms.

# cost_tracker.py
import json
import sqlite3
from datetime import datetime
from typing import Dict, Optional, List
from dataclasses import dataclass, asdict

@dataclass
class APICall:
    """Lưu trữ thông tin một lần gọi API"""
    timestamp: str
    model: str
    input_tokens: int
    output_tokens: int
    cost: float
    request_id: str
    status: str

class CostTracker:
    """
    Module theo dõi chi phí API theo thời gian thực.
    Sử dụng SQLite để lưu trữ dữ liệu cục bộ.
    """
    
    # Bảng giá tham khảo (đơn vị: USD per 1M tokens)
    PRICING = {
        "gpt-4.1": {"input": 8.0, "output": 8.0},
        "claude-sonnet-4.5": {"input": 15.0, "output": 15.0},
        "gemini-2.5-flash": {"input": 2.50, "output": 2.50},
        "deepseek-v3.2": {"input": 0.42, "output": 0.42},
    }
    
    def __init__(self, db_path: str = "cost_data.db"):
        self.db_path = db_path
        self._init_database()
    
    def _init_database(self):
        """Khởi tạo cơ sở dữ liệu SQLite"""
        with sqlite3.connect(self.db_path) as conn:
            cursor = conn.cursor()
            cursor.execute("""
                CREATE TABLE IF NOT EXISTS api_calls (
                    id INTEGER PRIMARY KEY AUTOINCREMENT,
                    timestamp TEXT NOT NULL,
                    model TEXT NOT NULL,
                    input_tokens INTEGER,
                    output_tokens INTEGER,
                    cost REAL,
                    request_id TEXT UNIQUE,
                    status TEXT,
                    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                )
            """)
            
            cursor.execute("""
                CREATE TABLE IF NOT EXISTS daily_summary (
                    date TEXT PRIMARY KEY,
                    total_calls INTEGER,
                    total_input_tokens INTEGER,
                    total_output_tokens INTEGER,
                    total_cost REAL,
                    avg_latency_ms REAL
                )
            """)
            conn.commit()
    
    def calculate_cost(self, model: str, input_tokens: int, output_tokens: int) -> float:
        """Tính toán chi phí cho một lần gọi API"""
        pricing = self.PRICING.get(model.lower(), {"input": 0, "output": 0})
        input_cost = (input_tokens / 1_000_000) * pricing["input"]
        output_cost = (output_tokens / 1_000_000) * pricing["output"]
        return round(input_cost + output_cost, 6)
    
    def log_call(self, model: str, input_tokens: int, output_tokens: int, 
                 request_id: str, status: str = "success") -> float:
        """Ghi nhận một lần gọi API và tính chi phí"""
        cost = self.calculate_cost(model, input_tokens, output_tokens)
        timestamp = datetime.now().isoformat()
        
        api_call = APICall(
            timestamp=timestamp,
            model=model,
            input_tokens=input_tokens,
            output_tokens=output_tokens,
            cost=cost,
            request_id=request_id,
            status=status
        )
        
        with sqlite3.connect(self.db_path) as conn:
            cursor = conn.cursor()
            cursor.execute("""
                INSERT OR REPLACE INTO api_calls 
                (timestamp, model, input_tokens, output_tokens, cost, request_id, status)
                VALUES (?, ?, ?, ?, ?, ?, ?)
            """, (
                api_call.timestamp,
                api_call.model,
                api_call.input_tokens,
                api_call.output_tokens,
                api_call.cost,
                api_call.request_id,
                api_call.status
            ))
            conn.commit()
        
        return cost
    
    def get_daily_cost(self, date: Optional[str] = None) -> float:
        """Lấy tổng chi phí trong ngày"""
        if date is None:
            date = datetime.now().strftime("%Y-%m-%d")
        
        with sqlite3.connect(self.db_path) as conn:
            cursor = conn.cursor()
            cursor.execute("""
                SELECT COALESCE(SUM(cost), 0) FROM api_calls
                WHERE date(timestamp) = ?
            """, (date,))
            result = cursor.fetchone()
            return result[0] if result else 0.0
    
    def get_total_cost(self, days: int = 30) -> float:
        """Lấy tổng chi phí trong N ngày gần nhất"""
        with sqlite3.connect(self.db_path) as conn:
            cursor = conn.cursor()
            cursor.execute("""
                SELECT COALESCE(SUM(cost), 0) FROM api_calls
                WHERE timestamp >= datetime('now', ?)
            """, (f"-{days} days",))
            result = cursor.fetchone()
            return result[0] if result else 0.0
    
    def get_model_breakdown(self) -> List[Dict]:
        """Lấy chi phí chi tiết theo từng model"""
        with sqlite3.connect(self.db_path) as conn:
            conn.row_factory = sqlite3.Row
            cursor = conn.cursor()
            cursor.execute("""
                SELECT 
                    model,
                    COUNT(*) as total_calls,
                    SUM(input_tokens) as total_input,
                    SUM(output_tokens) as total_output,
                    SUM(cost) as total_cost
                FROM api_calls
                GROUP BY model
                ORDER BY total_cost DESC
            """)
            return [dict(row) for row in cursor.fetchall()]

Sử dụng ví dụ

if __name__ == "__main__": tracker = CostTracker() # Giả lập một số lần gọi API test_calls = [ ("deepseek-v3.2", 500, 200), ("deepseek-v3.2", 800, 350), ("gemini-2.5-flash", 1000, 500), ] for i, (model, input_tok, output_tok) in enumerate(test_calls): cost = tracker.log_call( model=model, input_tokens=input_tok, output_tokens=output_tok, request_id=f"test-{i+1}", status="success" ) print(f"Gọi API #{i+1} ({model}): Chi phí = ${cost:.6f}") print(f"\nChi phí hôm nay: ${tracker.get_daily_cost():.4f}") print(f"Chi phí 30 ngày: ${tracker.get_total_cost():.4f}") print(f"\nChi phí theo model:") for breakdown in tracker.get_model_breakdown(): print(f" {breakdown['model']}: ${breakdown['total_cost']:.4f}")

Bước 4: Tạo Wrapper API An Toàn Với HolySheep

Bây giờ, tôi sẽ hướng dẫn bạn tạo một wrapper API thông minh. Wrapper này sẽ tự động ghi nhận chi phí mỗi khi gọi API, đồng thời áp dụng các cơ chế kiểm soát chi phí như giới hạn max_tokens và retry logic thông minh.

# holy_sheep_client.py
import os
import time
import uuid
import requests
from typing import Optional, Dict, Any
from dotenv import load_dotenv
from cost_tracker import CostTracker

load_dotenv()

class HolySheepAPIClient:
    """
    Wrapper API cho HolySheep AI với tính năng theo dõi chi phí tự động.
    Base URL: https://api.holysheep.ai/v1
    """
    
    def __init__(
        self,
        api_key: Optional[str] = None,
        cost_tracker: Optional[CostTracker] = None,
        max_tokens_limit: int = 4096,
        enable_cost_control: bool = True
    ):
        self.api_key = api_key or os.getenv("HOLYSHEEP_API_KEY")
        if not self.api_key:
            raise ValueError("API key không được tìm thấy. Vui lòng thiết lập HOLYSHEEP_API_KEY trong file .env")
        
        self.base_url = "https://api.holysheep.ai/v1"
        self.cost_tracker = cost_tracker or CostTracker()
        self.max_tokens_limit = max_tokens_limit
        self.enable_cost_control = enable_cost_control
        
        # Cấu hình từ file .env
        self.daily_limit = float(os.getenv("DAILY_BUDGET_LIMIT", "50"))
        self.daily_spent = self.cost_tracker.get_daily_cost()
    
    def _check_budget(self) -> bool:
        """Kiểm tra xem còn ngân sách hay không"""
        if not self.enable_cost_control:
            return True
        
        self.daily_spent = self.cost_tracker.get_daily_cost()
        if self.daily_spent >= self.daily_limit:
            raise RuntimeError(
                f"Đã vượt ngân sách ngày! Đã tiêu: ${self.daily_spent:.2f} / "
                f"Giới hạn: ${self.daily_limit:.2f}"
            )
        return True
    
    def _make_request_id(self) -> str:
        """Tạo request ID duy nhất"""
        return str(uuid.uuid4())
    
    def chat_completion(
        self,
        model: str,
        messages: list,
        temperature: float = 0.7,
        max_tokens: Optional[int] = None,
        **kwargs
    ) -> Dict[str, Any]:
        """
        Gọi API chat completion với HolySheep AI.
        Tự động theo dõi chi phí và áp dụng giới hạn.
        """
        # Kiểm tra ngân sách trước khi gọi
        self._check_budget()
        
        # Áp dụng giới hạn max_tokens
        if max_tokens is None:
            max_tokens = self.max_tokens_limit
        max_tokens = min(max_tokens, self.max_tokens_limit)
        
        # Chuẩn bị request body
        request_id = self._make_request_id()
        headers = {
            "Authorization": f"Bearer {self.api_key}",
            "Content-Type": "application/json"
        }
        
        payload = {
            "model": model,
            "messages": messages,
            "temperature": temperature,
            "max_tokens": max_tokens,
            **kwargs
        }
        
        start_time = time.time()
        
        try:
            response = requests.post(
                f"{self.base_url}/chat/completions",
                headers=headers,
                json=payload,
                timeout=60
            )
            
            elapsed_ms = (time.time() - start_time) * 1000
            
            if response.status_code == 200:
                data = response.json()
                
                # Trích xuất thông tin token từ response
                usage = data.get("usage", {})
                input_tokens = usage.get("prompt_tokens", 0)
                output_tokens = usage.get("completion_tokens", 0)
                
                # Ghi nhận chi phí
                cost = self.cost_tracker.log_call(
                    model=model,
                    input_tokens=input_tokens,
                    output_tokens=output_tokens,
                    request_id=request_id,
                    status="success"
                )
                
                print(f"[{request_id[:8]}] ✓ {model} | "
                      f"Input: {input_tokens} | Output: {output_tokens} | "
                      f"Cost: ${cost:.6f} | Latency: {elapsed_ms:.0f}ms")
                
                return data
            
            else:
                # Ghi nhận lỗi
                self.cost_tracker.log_call(
                    model=model,
                    input_tokens=0,
                    output_tokens=0,
                    request_id=request_id,
                    status=f"error_{response.status_code}"
                )
                
                error_msg = f"API Error: {response.status_code} - {response.text}"
                print(f"[{request_id[:8]}] ✗ {error_msg}")
                raise Exception(error_msg)
        
        except requests.exceptions.Timeout:
            self.cost_tracker.log_call(
                model=model,
                input_tokens=0,
                output_tokens=0,
                request_id=request_id,
                status="timeout"
            )
            raise Exception("Yêu cầu API bị timeout")
        
        except Exception as e:
            raise

Ví dụ sử dụng

if __name__ == "__main__": client = HolySheepAPIClient() messages = [ {"role": "system", "content": "Bạn là một trợ lý AI hữu ích."}, {"role": "user", "content": "Xin chào, hãy giới thiệu về HolySheep AI"} ] try: response = client.chat_completion( model="deepseek-v3.2", messages=messages, temperature=0.7, max_tokens=500 ) print("\nPhản hồi:", response["choices"][0]["message"]["content"]) except Exception as e: print(f"Lỗi: {e}")

Bước 5: Xây Dựng Hệ Thống Cảnh Báo Đa Kênh

Hệ thống cảnh báo cần phải thông minh và linh hoạt. Tôi đã thiết kế một module cảnh báo có thể gửi thông báo qua nhiều kênh khác nhau: qua email (sử dụng SMTP miễn phí), qua Telegram bot, và qua webhook để tích hợp với các công cụ khác như Slack hoặc Discord.

# alert_system.py
import os
import smtplib
import requests
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from datetime import datetime, timedelta
from typing import List, Dict, Optional
from dataclasses import dataclass
from dotenv import load_dotenv
from cost_tracker import CostTracker

load_dotenv()

@dataclass
class AlertRule:
    """Định nghĩa một quy tắc cảnh báo"""
    name: str
    threshold_type: str  # "daily", "hourly", "per_call"
    threshold_value: float
    message_template: str
    enabled: bool = True

class AlertSystem:
    """
    Hệ thống cảnh báo chi phí đa kênh.
    Hỗ trợ: Email, Telegram, Webhook (Slack/Discord)
    """
    
    def __init__(self, cost_tracker: CostTracker):
        self.cost_tracker = cost_tracker
        self.alert_history: List[Dict] = []
        
        # Các quy tắc cảnh báo mặc định
        self.rules = [
            AlertRule(
                name="daily_budget_75",
                threshold_type="daily",
                threshold_value=float(os.getenv("ALERT_THRESHOLD_PERCENT", 75)),
                message_template="⚠️ Cảnh báo: Đã sử dụng {percent}% ngân sách ngày! "
                                "Chi phí: ${spent:.2f} / ${limit:.2f}"
            ),
            AlertRule(
                name="daily_budget_90",
                threshold_type="daily",
                threshold_value=90.0,
                message_template="🚨 Cảnh báo khẩn cấp: Đã sử dụng {percent}% ngân sách ngày! "
                                "Chi phí: ${spent:.2f} / ${limit:.2f}"
            ),
            AlertRule(
                name="hourly_spike",
                threshold_type="hourly",
                threshold_value=10.0,
                message_template="📈 Phát hiện chi phí bất thường trong giờ qua: ${cost:.2f}"
            ),
            AlertRule(
                name="single_call_high",
                threshold_type="per_call",
                threshold_value=1.0,
                message_template="💸 Lần gọi có chi phí cao bất thường: ${cost:.6f} "
                                "với model {model}"
            ),
        ]
    
    def check_and_alert(self) -> List[str]:
        """
        Kiểm tra tất cả các quy tắc và gửi cảnh báo nếu cần.
        Trả về danh sách các cảnh báo đã gửi.
        """
        alerts_sent = []
        daily_limit = float(os.getenv("DAILY_BUDGET_LIMIT", "50"))
        daily_spent = self.cost_tracker.get_daily_cost()
        
        for rule in self.rules:
            if not rule.enabled:
                continue
            
            should_alert = False
            message = ""
            percent = (daily_spent / daily_limit) * 100 if daily_limit > 0 else 0
            
            if rule.threshold_type == "daily":
                if percent >= rule.threshold_value:
                    should_alert = True
                    message = rule.message_template.format(
                        percent=round(percent, 1),
                        spent=daily_spent,
                        limit=daily_limit
                    )
            
            elif rule.threshold_type == "hourly":
                hourly_cost = self._get_hourly_cost()
                if hourly_cost >= rule.threshold_value:
                    should_alert = True
                    message = rule.message_template.format(cost=hourly_cost)
            
            if should_alert:
                alerts_sent.append(message)
                self._send_alert(message)
                self._record_alert(rule.name, message)
        
        return alerts_sent
    
    def _get_hourly_cost(self) -> float:
        """Lấy chi phí trong giờ qua"""
        with self.cost_tracker._get_connection() as conn:
            cursor = conn.cursor()
            cursor.execute("""
                SELECT COALESCE(SUM(cost), 0) FROM api_calls
                WHERE timestamp >= datetime('now', '-1 hour')
            """)
            result = cursor.fetchone()
            return result[0] if result else 0.0
    
    def _send_alert(self, message: str):
        """Gửi cảnh báo qua tất cả các kênh đã cấu hình"""
        # Gửi qua Email
        if os.getenv("ALERT_EMAIL"):
            self._send_email(message)
        
        # Gửi qua Telegram
        if os.getenv("TELEGRAM_BOT_TOKEN") and os.getenv("TELEGRAM_CHAT_ID"):
            self._send_telegram(message)
        
        # Gửi qua Webhook
        if os.getenv("WEBHOOK_URL"):
            self._send_webhook(message)
        
        # In ra console (luôn luôn)
        timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        print(f"\n{'='*60}")
        print(f"🔔 [{timestamp}] CẢNH BÁO CHI PHÍ")
        print(f"{'='*60}")
        print(message)
        print(f"{'='*60}\n")
    
    def _send_email(self, message: str):
        """Gửi email cảnh báo"""
        try:
            email_host = os.getenv("SMTP_HOST", "smtp.gmail.com")
            email_port = int(os.getenv("SMTP_PORT", "587"))
            email_user = os.getenv("SMTP_USER")
            email_pass = os.getenv("SMTP_PASSWORD")
            alert_email = os.getenv("ALERT_EMAIL")
            
            if not all([email_user, email_pass, alert_email]):
                return
            
            msg = MIMEMultipart()
            msg['From'] = email_user
            msg['To'] = alert_email
            msg['Subject'] = "⚠️ Cảnh Báo Chi Phí API"
            
            body = f"""
            
            
                

Cảnh Báo Chi Phí API

{message}


Thời gian: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}

Hệ thống: HolySheep AI Cost Monitor

""" msg.attach(MIMEText(body, 'html')) with smtplib.SMTP(email_host, email_port) as server: server.starttls() server.login(email_user, email_pass) server.send_message(msg) print("✓ Đã gửi email cảnh báo") except Exception as e: print(f"Lỗi gửi email: {e}") def _send_telegram(self, message: str): """Gửi thông báo qua Telegram""" try: bot_token = os.getenv("TELEGRAM_BOT_TOKEN") chat_id = os.getenv("TELEGRAM_CHAT_ID") url = f"https://api.telegram.org/bot{bot_token}/sendMessage" payload = { "chat_id": chat_id, "text": f"🔔 *Cảnh Báo Chi Phí API*\n\n{message}", "parse_mode": "Markdown" } response = requests.post(url, json=payload) if response.status_code == 200: print("✓ Đã gửi thông báo Telegram") except Exception as e: print(f"Lỗi gửi Telegram: {e}") def _send_webhook(self, message: str): """Gửi webhook (Slack/Discord)""" try: webhook_url = os.getenv("WEBHOOK_URL") payload = { "text": f"🔔 *Cảnh Báo Chi Phí API*\n>{message}", "username": "Cost Monitor Bot" } response = requests.post(webhook_url, json=payload) if response.status_code == 200: print("✓ Đã gửi webhook") except Exception as e: print(f"Lỗi gửi webhook: {e}") def _record_alert(self, rule_name: str, message: str): """Ghi nhận lịch sử cảnh báo""" self.alert_history.append({ "timestamp": datetime.now().isoformat(), "rule": rule_name, "message": message }) def get_alert_summary(self) -> Dict: """Lấy tổng hợp các cảnh báo gần đây""" return { "total_alerts": len(self.alert_history), "recent_alerts": self.alert_history[-10:] if self.alert_history else [], "last_alert": self.alert_history[-1] if self.alert_history else None }

Sử dụng ví dụ

if __name__ == "__main__": tracker = CostTracker() alert_system = AlertSystem(tracker) # Mô phỏng kiểm tra cảnh báo print("Đang kiểm tra các quy tắc cảnh báo...") alerts = alert_system.check_and_alert() if alerts: print(f"Đã gửi {len(alerts)} cảnh báo") else: print("Không có cảnh báo nào được gửi")

Bước 6: Tạo Dashboard Trực Quan

Một dashboard tốt giúp bạn nắm bắt tình hình chi phí một cách trực quan. Tôi sẽ tạo một dashboard đơn giản bằng HTML/CSS/JavaScript mà bạn có thể mở trên trình duyệt để theo dõi.

# dashboard_generator.py
import sqlite3
import json
from datetime import datetime, timedelta
from typing import Dict, List

def generate_dashboard_html(db_path: str = "cost_data.db") -> str:
    """Tạo file HTML dashboard từ dữ liệu SQLite"""
    
    # Kết nối và truy vấn dữ liệu
    with sqlite3.connect(db_path) as conn:
        conn.row_factory = sqlite3.Row
        
        # Lấy tổng quan
        cursor = conn.cursor()
        cursor.execute("""
            SELECT 
                COUNT(*) as total_calls,
                COALESCE(SUM(input_tokens), 0) as total_input,
                COALESCE(SUM(output_tokens), 0) as total_output,
                COALESCE(SUM(cost), 0) as total_cost
            FROM api_calls
        """)
        summary = dict(cursor.fetchone())
        
        # Chi phí theo ngày (7 ngày gần nhất)
        cursor.execute("""
            SELECT 
                date(timestamp) as date,
                COUNT(*) as calls,
                COALESCE(SUM(cost), 0) as cost
            FROM api_calls
            WHERE timestamp >= datetime('now', '-7 days')
            GROUP BY date(timestamp)
            ORDER BY date
        """)
        daily_data = [dict(row) for row in cursor.fetchall()]
        
        # Chi phí theo model
        cursor.execute("""
            SELECT 
                model,
                COUNT(*) as calls,
                COALESCE(SUM(cost), 0) as cost
            FROM api_calls
            GROUP BY model
            ORDER BY cost DESC
        """)
        model_data = [dict(row) for row in cursor.fetchall()]
        
        # Lần gọi gần nhất
        cursor.execute("""
            SELECT * FROM api_calls
            ORDER BY timestamp DESC
            LIMIT 10
        """)
        recent_calls = [dict(row) for row in cursor.fetchall()]
    
    # Chuyển đổi dữ liệu thành JSON cho JavaScript
    daily_json = json.dumps(daily_data)
    model_json = json.dumps(model_data)
    
    html_content = f"""