Tôi đã triển khai hệ thống monitoring cho hơn 50 mô hình AI trong môi trường production, từ chatbot dịch thuật đến hệ thống phân tích document tự động. Điều tôi học được sau 3 năm vận hành: không có monitoring = không có control. Một request bị timeout lúc 3 giờ sáng có thể phá hủy toàn bộ trải nghiệm người dùng nếu không có alert sớm.

Tại Sao Monitoring AI Model Lại Quan Trọng?

Khác với API REST truyền thống, mô hình AI có đặc thù riêng:

Với HolySheep AI, tôi đã tiết kiệm được 85% chi phí so với các provider lớn nhờ tỷ giá ưu đãi và latency trung bình chỉ 45ms. Bài viết này sẽ chia sẻ kiến trúc monitoring mà tôi đã xây dựng và tối ưu qua nhiều năm.

Các Chỉ Số Core Cần Theo Dõi

1. Latency Metrics

# Latency percentiles - p50, p95, p99

Cấu hình Prometheus query cho API latency

api_request_duration_seconds_bucket{ model="gpt-4.1", endpoint="/v1/chat/completions", le="0.1" # ≤100ms } / api_request_duration_seconds_count

Kết quả benchmark thực tế trên HolySheep AI:

p50: 45ms (so với 180ms trên OpenAI)

p95: 120ms

p99: 350ms

p99.9: 890ms

Alert threshold cho latency:

- Warning: p95 > 200ms

- Critical: p99 > 1000ms

2. Token Usage & Cost Tracking

# Theo dõi chi phí theo ngày/dịch vụ
TOKEN_USAGE_QUERY = """
SELECT 
    DATE(timestamp) as date,
    model,
    SUM(input_tokens) as total_input_tokens,
    SUM(output_tokens) as total_output_tokens,
    SUM(input_tokens) * {price_per_1k_input} + 
    SUM(output_tokens) * {price_per_1k_output} as total_cost
FROM api_logs
GROUP BY DATE(timestamp), model
ORDER BY date DESC
"""

Bảng giá HolySheep AI 2026 (tham khảo):

PRICING = { "gpt-4.1": {"input": 8.00, "output": 8.00, "unit": "$/MTok"}, "claude-sonnet-4.5": {"input": 15.00, "output": 15.00, "unit": "$/MTok"}, "gemini-2.5-flash": {"input": 2.50, "output": 2.50, "unit": "$/MTok"}, "deepseek-v3.2": {"input": 0.42, "output": 0.42, "unit": "$/MTok"}, }

Ví dụ: 1 triệu token input + 500k token output trên DeepSeek V3.2:

Cost = (1,000,000/1,000,000)*0.42 + (500,000/1,000,000)*0.42 = $0.63

3. Error Rate & Health Check

# Error classification
ERROR_TYPES = {
    "rate_limit": "HTTP 429 - Quá giới hạn request",
    "timeout": "Request timeout sau 30s",
    "invalid_request": "HTTP 400 - Prompt/parameter không hợp lệ",
    "auth_error": "HTTP 401/403 - Lỗi authentication",
    "server_error": "HTTP 500/502/503 - Lỗi từ provider",
    "context_overflow": "Token vượt context window",
}

Alert thresholds

ALERT_CONFIG = { "error_rate_warning": 0.01, # 1% - Warning "error_rate_critical": 0.05, # 5% - Critical "timeout_rate_warning": 0.005, # 0.5% "timeout_rate_critical": 0.02, # 2% "latency_p95_warning_ms": 200, "latency_p95_critical_ms": 500, }

Kiến Trúc Monitoring System

# holy_sheep_monitor.py - Production-ready monitoring client
import asyncio
import time
from dataclasses import dataclass, field
from typing import Optional, Dict, List, Callable
from datetime import datetime, timedelta
import aiohttp
import json

@dataclass
class MetricsCollector:
    """Collector tập trung cho HolySheep AI API"""
    
    base_url: str = "https://api.holysheep.ai/v1"
    api_key: str = "YOUR_HOLYSHEEP_API_KEY"
    
    # In-memory storage cho metrics (thay bằng Redis trong production)
    _request_times: List[float] = field(default_factory=list)
    _token_counts: Dict[str, int] = field(default_factory=lambda: {
        "input": 0, "output": 0
    })
    _error_counts: Dict[str, int] = field(default_factory=lambda: {
        "total": 0, "timeout": 0, "rate_limit": 0, "server_error": 0
    })
    _lock: asyncio.Lock = field(default_factory=asyncio.Lock)
    
    # Sliding window: giữ metrics trong 5 phút
    _window_seconds: int = 300
    
    async def track_request(
        self,
        model: str,
        request_func: Callable,
        *args, **kwargs
    ) -> Dict:
        """Wrapper để track metrics cho mọi request"""
        
        start_time = time.perf_counter()
        error_type = None
        input_tokens = 0
        output_tokens = 0
        
        try:
            response = await request_func(*args, **kwargs)
            elapsed = time.perf_counter() - start_time
            
            # Parse response để lấy token usage
            if isinstance(response, dict) and "usage" in response:
                input_tokens = response["usage"].get("prompt_tokens", 0)
                output_tokens = response["usage"].get("completion_tokens", 0)
            
            async with self._lock:
                self._request_times.append((start_time, elapsed))
                self._token_counts["input"] += input_tokens
                self._token_counts["output"] += output_tokens
                
                # Cleanup old entries
                cutoff = time.time() - self._window_seconds
                self._request_times = [
                    (t, e) for t, e in self._request_times if t > cutoff
                ]
            
            return response
            
        except asyncio.TimeoutError:
            elapsed = time.perf_counter() - start_time
            error_type = "timeout"
            async with self._lock:
                self._error_counts["timeout"] += 1
                self._error_counts["total"] += 1
            raise
            
        except aiohttp.ClientResponseError as e:
            error_type = self._classify_error(e)
            async with self._lock:
                self._error_counts[error_type] += 1
                self._error_counts["total"] += 1
            raise
            
        except Exception as e:
            error_type = "unknown"
            async with self._lock:
                self._error_counts["total"] += 1
            raise
    
    def _classify_error(self, error: Exception) -> str:
        """Phân loại error theo HTTP status"""
        if hasattr(error, "status"):
            status = error.status
            if status == 429:
                return "rate_limit"
            elif status in (500, 502, 503):
                return "server_error"
            elif status in (400, 422):
                return "invalid_request"
        return "unknown"
    
    async def get_metrics(self) -> Dict:
        """Lấy metrics hiện tại"""
        async with self._lock:
            current_time = time.time()
            cutoff = current_time - self._window_seconds
            
            recent_times = [e for t, e in self._request_times if t > cutoff]
            total_requests = len(recent_times)
            
            if not recent_times:
                return {"status": "no_data"}
            
            sorted_times = sorted(recent_times)
            
            return {
                "timestamp": datetime.utcnow().isoformat(),
                "window_seconds": self._window_seconds,
                "total_requests": total_requests,
                "latency": {
                    "p50_ms": self._percentile(sorted_times, 0.5) * 1000,
                    "p95_ms": self._percentile(sorted_times, 0.95) * 1000,
                    "p99_ms": self._percentile(sorted_times, 0.99) * 1000,
                    "avg_ms": (sum(recent_times) / len(recent_times)) * 1000,
                },
                "tokens": self._token_counts.copy(),
                "errors": self._error_counts.copy(),
                "error_rate": (
                    self._error_counts["total"] / 
                    (self._error_counts["total"] + total_requests)
                ) if (self._error_counts["total"] + total_requests) > 0 else 0,
            }
    
    def _percentile(self, sorted_data: List[float], percentile: float) -> float:
        """Tính percentile từ data đã sort"""
        if not sorted_data:
            return 0.0
        index = int(len(sorted_data) * percentile)
        index = min(index, len(sorted_data) - 1)
        return sorted_data[index]

Cấu Hình Alert Với Multiple Channels

# alert_manager.py - Quản lý alert đa kênh
import httpx
import json
from enum import Enum
from typing import List, Dict, Optional
from dataclasses import dataclass
import asyncio

class AlertLevel(Enum):
    INFO = "info"
    WARNING = "warning"
    CRITICAL = "critical"

@dataclass
class Alert:
    level: AlertLevel
    metric: str
    value: float
    threshold: float
    message: str
    timestamp: str

class AlertManager:
    """Quản lý alert với nhiều notification channels"""
    
    def __init__(self, config: Dict):
        self.channels = config.get("channels", {})
        self.rules = config.get("rules", [])
        self._client = httpx.AsyncClient(timeout=10.0)
        self._alert_history: List[Alert] = []
        # Cooldown: không gửi alert trùng lặp trong 5 phút
        self._cooldown_seconds = 300
        self._last_alerts: Dict[str, float] = {}
    
    async def check_and_alert(self, metrics: Dict) -> List[Alert]:
        """Kiểm tra metrics và gửi alert nếu cần"""
        
        alerts_triggered = []
        
        for rule in self.rules:
            metric_path = rule["metric"]
            value = self._get_nested_value(metrics, metric_path)
            
            if value is None:
                continue
            
            # Kiểm tra threshold
            if rule["comparison"] == "gt" and value > rule["threshold"]:
                alert = Alert(
                    level=AlertLevel(rule["level"]),
                    metric=metric_path,
                    value=value,
                    threshold=rule["threshold"],
                    message=rule["message"].format(value=value),
                    timestamp=metrics.get("timestamp", ""),
                )
                alerts_triggered.append(alert)
                
            elif rule["comparison"] == "lt" and value < rule["threshold"]:
                alert = Alert(
                    level=AlertLevel(rule["level"]),
                    metric=metric_path,
                    value=value,
                    threshold=rule["threshold"],
                    message=rule["message"].format(value=value),
                    timestamp=metrics.get("timestamp", ""),
                )
                alerts_triggered.append(alert)
        
        # Gửi alert với cooldown
        for alert in alerts_triggered:
            await self._send_alert_with_cooldown(alert)
        
        return alerts_triggered
    
    async def _send_alert_with_cooldown(self, alert: Alert):
        """Gửi alert với cooldown để tránh spam"""
        
        cooldown_key = f"{alert.level.value}:{alert.metric}"
        current_time = asyncio.get_event_loop().time()
        
        if cooldown_key in self._last_alerts:
            time_since_last = current_time - self._last_alerts[cooldown_key]
            if time_since_last < self._cooldown_seconds:
                return  # Still in cooldown
        
        self._last_alerts[cooldown_key] = current_time
        self._alert_history.append(alert)
        
        await self._dispatch_alert(alert)
    
    async def _dispatch_alert(self, alert: Alert):
        """Gửi alert đến tất cả channels được cấu hình"""
        
        tasks = []
        
        # Discord webhook
        if "discord" in self.channels:
            tasks.append(self._send_discord(alert))
        
        # Slack webhook
        if "slack" in self.channels:
            tasks.append(self._send_slack(alert))
        
        # PagerDuty
        if "pagerduty" in self.channels:
            tasks.append(self._send_pagerduty(alert))
        
        # Email
        if "email" in self.channels:
            tasks.append(self._send_email(alert))
        
        # Telegram
        if "telegram" in self.channels:
            tasks.append(self._send_telegram(alert))
        
        if tasks:
            await asyncio.gather(*tasks, return_exceptions=True)
    
    async def _send_discord(self, alert: Alert):
        """Gửi alert qua Discord webhook"""
        
        color_map = {
            AlertLevel.INFO: 3447003,
            AlertLevel.WARNING: 16776960,
            AlertLevel.CRITICAL: 15158332,
        }
        
        payload = {
            "embeds": [{
                "title": f"🚨 {alert.level.value.upper()}: {alert.metric}",
                "description": alert.message,
                "color": color_map.get(alert.level, 0),
                "fields": [
                    {"name": "Value", "value": f"{alert.value:.2f}", "inline": True},
                    {"name": "Threshold", "value": f"{alert.threshold:.2f}", "inline": True},
                    {"name": "Time", "value": alert.timestamp, "inline": False},
                ],
                "footer": {"text": "HolySheep AI Monitor"},
            }]
        }
        
        await self._client.post(
            self.channels["discord"],
            json=payload
        )
    
    async def _send_telegram(self, alert: Alert):
        """Gửi alert qua Telegram bot"""
        
        emoji = {"info": "ℹ️", "warning": "⚠️", "critical": "🚨"}
        
        message = f"""
{emoji.get(alert.level.value, "📢")} *{alert.level.value.upper()}*

📊 *Metric:* {alert.metric}
📈 *Value:* {alert.value:.2f}
🎯 *Threshold:* {alert.threshold:.2f}
⏰ *Time:* {alert.timestamp}

_{alert.message}_
"""
        
        await self._client.post(
            f"https://api.telegram.org/bot{self.channels['telegram']['bot_token']}/sendMessage",
            json={
                "chat_id": self.channels["telegram"]["chat_id"],
                "text": message,
                "parse_mode": "Markdown",
            }
        )
    
    def _get_nested_value(self, data: Dict, path: str) -> Optional[float]:
        """Lấy giá trị nested từ dict"""
        keys = path.split(".")
        value = data
        for key in keys:
            if isinstance(value, dict) and key in value:
                value = value[key]
            else:
                return None
        return float(value) if value is not None else None


Cấu hình alert rules

ALERT_CONFIG = { "channels": { "discord": "https://discord.com/api/webhooks/YOUR_WEBHOOK", "telegram": { "bot_token": "YOUR_BOT_TOKEN", "chat_id": "YOUR_CHAT_ID", }, }, "rules": [ { "metric": "latency.p95_ms", "comparison": "gt", "threshold": 200, "level": "warning", "message": "P95 latency cao hơn ngưỡng: {value:.2f}ms > 200ms", }, { "metric": "latency.p99_ms", "comparison": "gt", "threshold": 1000, "level": "critical", "message": "P99 latency vượt ngưỡng nghiêm trọng: {value:.2f}ms > 1000ms", }, { "metric": "error_rate", "comparison": "gt", "threshold": 0.01, "level": "warning", "message": "Error rate vượt 1%: {value:.4f}", }, { "metric": "errors.timeout", "comparison": "gt", "threshold": 10, "level": "critical", "message": "Quá nhiều timeout: {value} requests trong 5 phút", }, { "metric": "tokens.output", "comparison": "gt", "threshold": 1000000, "level": "info", "message": "Token usage cao: {value} tokens output", }, ], }

Integration Với HolySheep AI - Ví Dụ Hoàn Chỉnh

# complete_monitoring_example.py - Ví dụ production đầy đủ
import asyncio
import aiohttp
import time
from datetime import datetime
from holy_sheep_monitor import MetricsCollector, AlertManager, ALERT_CONFIG
from prometheus_client import start_http_server, Gauge, Counter

Prometheus metrics

REQUEST_LATENCY = Gauge( 'ai_request_latency_ms', 'Request latency in milliseconds', ['model', 'endpoint'] ) REQUEST_COUNT = Counter( 'ai_request_total', 'Total number of requests', ['model', 'status'] ) TOKEN_USAGE = Gauge( 'ai_tokens_total', 'Total tokens used', ['type'] # input or output ) COST_USD = Gauge('ai_cost_usd_total', 'Total cost in USD') async def call_holy_sheep( client: aiohttp.ClientSession, collector: MetricsCollector, prompt: str, model: str = "deepseek-v3.2" ) -> dict: """Gọi HolySheep AI với tracking metrics""" async def _make_request(): headers = { "Authorization": f"Bearer YOUR_HOLYSHEEP_API_KEY", "Content-Type": "application/json", } payload = { "model": model, "messages": [{"role": "user", "content": prompt}], "max_tokens": 2048, "temperature": 0.7, } async with client.post( "https://api.holysheep.ai/v1/chat/completions", headers=headers, json=payload, timeout=aiohttp.ClientTimeout(total=30) ) as response: return await response.json() result = await collector.track_request(model, _make_request) return result async def monitoring_loop( collector: MetricsCollector, alert_manager: AlertManager, check_interval: int = 30 ): """Vòng lặp monitoring - chạy mỗi 30 giây""" while True: try: metrics = await collector.get_metrics() if metrics.get("status") != "no_data": # Update Prometheus REQUEST_LATENCY.labels( model="deepseek-v3.2", endpoint="/v1/chat/completions" ).set(metrics["latency"]["p95_ms"]) TOKEN_USAGE.labels("input").set(metrics["tokens"]["input"]) TOKEN_USAGE.labels("output").set(metrics["tokens"]["output"]) # Tính cost (DeepSeek V3.2: $0.42/MTok input + output) total_tokens = metrics["tokens"]["input"] + metrics["tokens"]["output"] cost = (total_tokens / 1_000_000) * 0.42 COST_USD.set(cost) # Check alerts alerts = await alert_manager.check_and_alert(metrics) if alerts: print(f"[{datetime.now()}] 🚨 {len(alerts)} alerts triggered") for alert in alerts: print(f" - {alert.level.value.upper()}: {alert.message}") await asyncio.sleep(check_interval) except Exception as e: print(f"[{datetime.now()}] Monitoring error: {e}") await asyncio.sleep(5) async def main(): """Main entry point""" # Khởi tạo components collector = MetricsCollector( base_url="https://api.holysheep.ai/v1", api_key="YOUR_HOLYSHEEP_API_KEY" ) alert_manager = AlertManager(ALERT_CONFIG) # Start Prometheus server (port 9090) start_http_server(9090) # Async HTTP client async with aiohttp.ClientSession() as client: # Start monitoring loop monitor_task = asyncio.create_task( monitoring_loop(collector, alert_manager) ) # Simulate requests test_prompts = [ "Giải thích về machine learning", "Viết code Python để sort array", "So sánh REST và GraphQL", ] for i, prompt in enumerate(test_prompts * 10): # 30 requests try: print(f"[{datetime.now()}] Request {i+1}: {prompt[:30]}...") result = await call_holy_sheep(client, collector, prompt) REQUEST_COUNT.labels( model="deepseek-v3.2", status="success" ).inc() print(f" ✅ Response: {result.get('choices', [{}])[0].get('message', {}).get('content', '')[:50]}...") except Exception as e: REQUEST_COUNT.labels( model="deepseek-v3.2", status="error" ).inc() print(f" ❌ Error: {e}") await asyncio.sleep(0.5) # Keep monitoring running await monitor_task if __name__ == "__main__": asyncio.run(main())

Tối Ưu Chi Phí Với Smart Routing

Một trong những bài học đắt giá nhất của tôi: không phải lúc nào cũng cần GPT-4.1. Sau khi phân tích pattern sử dụng, tôi nhận ra:

# smart_router.py - Routing thông minh theo task complexity
import asyncio
from enum import Enum
from dataclasses import dataclass
from typing import Optional, List
import httpx

class ModelTier(Enum):
    FAST = "fast"          # DeepSeek V3.2 - simple tasks
    STANDARD = "standard" # Gemini 2.5 Flash - medium complexity
    PREMIUM = "premium"   # Claude Sonnet 4.5 - complex reasoning
    ENTERPRISE = "enterprise"  # GPT-4.1 - critical tasks

MODEL_CONFIG = {
    ModelTier.FAST: {
        "model": "deepseek-v3.2",
        "price_per_1m": 0.42,
        "avg_latency_ms": 45,
        "context_window": 128000,
        "strengths": ["translation", "summarization", "simple_qa"],
    },
    ModelTier.STANDARD: {
        "model": "gemini-2.5-flash",
        "price_per_1m": 2.50,
        "avg_latency_ms": 80,
        "context_window": 1000000,
        "strengths": ["code_generation", "analysis", "reasoning"],
    },
    ModelTier.PREMIUM: {
        "model": "claude-sonnet-4.5",
        "price_per_1m": 15.00,
        "avg_latency_ms": 120,
        "context_window": 200000,
        "strengths": ["long_context", "creative", "analysis"],
    },
    ModelTier.ENTERPRISE: {
        "model": "gpt-4.1",
        "price_per_1m": 8.00,
        "avg_latency_ms": 180,
        "context_window": 128000,
        "strengths": ["precision", "complex_reasoning", "multi-step"],
    },
}

Keywords để classify task

TASK_KEYWORDS = { ModelTier.FAST: [ "dịch", "translate", "tóm tắt", "summarize", "liệt kê", "list", "đếm", "count", "simple", "cơ bản" ], ModelTier.STANDARD: [ "phân tích", "analyze", "so sánh", "compare", "viết code", "code", "giải thích", "explain" ], ModelTier.PREMIUM: [ "phức tạp", "complex", "đa bước", "multi-step", "sáng tạo", "creative", "viết luận", "essay" ], ModelTier.ENTERPRISE: [ "quan trọng", "critical", "production", "chính xác", "độ chính xác cao", "high accuracy" ], } @dataclass class CostTracker: """Theo dõi chi phí theo tier""" tier_costs: dict = None def __post_init__(self): self.tier_costs = {tier: 0.0 for tier in ModelTier} self.total_cost = 0.0 def add_cost(self, tier: ModelTier, tokens: int): """Thêm chi phí cho một request""" price = MODEL_CONFIG[tier]["price_per_1m"] cost = (tokens / 1_000_000) * price self.tier_costs[tier] += cost self.total_cost += cost def get_report(self) -> dict: """Lấy báo cáo chi phí""" return { "total_cost_usd": round(self.total_cost, 4), "by_tier": { tier.value: { "cost": round(cost, 4), "percentage": round(cost / self.total_cost * 100, 2) if self.total_cost > 0 else 0 } for tier, cost in self.tier_costs.items() }, "savings_vs_single_tier": { "if_all_premium": round(self.total_cost * (15.00 / 2.50), 2), "saved_percentage": round((1 - self.total_cost / (self.total_cost * (15.00 / 2.50))) * 100, 2) } } class SmartRouter: """Router thông minh - chọn model phù hợp nhất""" def __init__(self, api_key: str): self.api_key = api_key self.client = httpx.AsyncClient(timeout=30.0) self.cost_tracker = CostTracker() # Cache cho fallback self._fallback_cache: dict = {} def classify_task(self, prompt: str, context: Optional[str] = None) -> ModelTier: """Classify task và chọn tier phù hợp""" combined_text = f"{context or ''} {prompt}".lower() # Check for explicit tier indicators for tier, keywords in TASK_KEYWORDS.items(): if any(kw in combined_text for kw in keywords): return tier # Estimate based on prompt length and complexity word_count = len(combined_text.split()) has_code = "```" in prompt or "def " in prompt or "function " in prompt has_multiple_parts = any(x in combined_text for x in ["và", "and", ",", "nhưng", "but"]) if word_count > 500 or has_code and has_multiple_parts: return ModelTier.STANDARD elif word_count > 1000: return ModelTier.PREMIUM return ModelTier.FAST async def route_request( self, prompt: str, context: Optional[str] = None, force_tier: Optional[ModelTier] = None ) -> dict: """Route request đến model phù hợp""" tier = force_tier or self.classify_task(prompt, context) config = MODEL_CONFIG[tier] # Primary request response = await self._call_api(config["model"], prompt, context) # Check if response is acceptable if not self._is_response_quality_ok(response, tier): # Upgrade tier for retry if tier != ModelTier.ENTERPRISE: next_tier = ModelTier(max(0, tier.value + 1)) config = MODEL_CONFIG[next_tier] response = await self._call_api(config["model"], prompt, context) tier = next_tier # Track cost tokens = self._estimate_tokens(prompt, response) self.cost_tracker.add_cost(tier, tokens) return { "response": response, "tier_used": tier.value, "model": config["model"], "estimated_cost_usd": round( (tokens / 1_000_000) * config["price_per_1m"], 4 ), "latency_ms": response.get("_latency_ms", 0), } async def _call_api(self, model: str, prompt: str, context: Optional[str]) -> dict: """Gọi HolySheep AI API""" start_time = time.perf_counter() headers = { "Authorization": f"Bearer {self.api_key}", "Content-Type": "application/json", } messages = [] if context: messages.append({"role": "system", "content": context}) messages.append({"role": "user", "content": prompt}) payload = { "model": model, "messages": messages, "max_tokens": 2048, } async with self.client.post( "https://api.holysheep.ai/v1/chat/completions", headers=headers, json=payload ) as response: result = await response.json() result["_latency_ms"] = (time.perf_counter() - start_time) * 1000 return result def _is_response_quality_ok(self, response: dict, tier: ModelTier) -> bool: """Kiểm tra chất lượng response""" if "error" in response: return False content = response.get("choices", [{}])[0].get("message", {}).get("content", "") # Basic quality checks if len(content) < 20: return False # Higher tiers expect more detailed responses min_length = {ModelTier.FAST: 50, ModelTier.STANDARD: 100} if tier in min_length and len(content) < min_length[tier]: return False return True def _estimate_tokens(self, prompt: str, response: dict) -> int: """Ước tính tokens""" usage = response.get("usage", {}) return ( usage.get("prompt_tokens", len(prompt.split()) * 1.3) + usage.get("completion_tokens", 100) ) async def close(self): await self.client.aclose()

Benchmark results

async def run_benchmark(): """So sánh chi phí giữa các chiến lược""" router = SmartRouter("YOUR_HOLYSHEEP_API_KEY") test_prompts = [ ("Dịch 'Hello world' sang tiếng Việt", ModelTier.FAST), ("Phân tích ưu nhược điểm của REST API", ModelTier.STANDARD), ("Viết một bài luận 1000 từ về AI", ModelTier.PREMIUM), ] * 10 # 30 requests each results = {"smart": 0, "all_premium": 0} for prompt, _ in test_prompts: # Smart routing result = await router.route_request(prompt) results["smart"] += result["estimated_cost_usd"] # All premium (baseline) results["all_premium"] += (0.002 * 0.008) #