Trong bối cảnh AI phát triển cực kỳ nhanh chóng, việc tích hợp nhiều Large Language Model (LLM) vào sản phẩm trở thành nhu cầu tất yếu. Bài viết này sẽ hướng dẫn bạn xây dựng một Multi-Model API Gateway hoàn chỉnh, dựa trên bài học thực chiến từ dự án đã triển khai thành công.

Bối Cảnh Thực Tế: Hành Trình Của Một Startup AI Tại Việt Nam

Một startup AI tại Hà Nội chuyên cung cấp giải pháp chatbot cho thương mại điện tử đã phải đối mặt với bài toán nan giải: họ sử dụng 4 nhà cung cấp API khác nhau (OpenAI, Anthropic, Google, DeepSeek) cho các use-case riêng biệt. Mỗi nhà cung cấp có:

Điểm đau lớn nhất: Hóa đơn hàng tháng lên tới $4,200 USD chỉ riêng chi phí API, trong khi độ trễ trung bình lên đến 420ms khiến trải nghiệm người dùng kém. Đặc biệt, việc quản lý 4 API keys khác nhau, mỗi cái với ngưỡng rate limit riêng, gây ra vô số lỗi integration.

Sau khi tìm hiểu và chuyển sang HolySheep AI — nền tảng tích hợp đa mô hình với tỷ giá ¥1 = $1 (tiết kiệm 85%+ chi phí), hỗ trợ WeChat/Alipay, độ trễ dưới 50ms, và tín dụng miễn phí khi đăng ký — startup này đã giảm hóa đơn xuống còn $680/tháng và đạt độ trễ 180ms trong 30 ngày đầu tiên.

Kiến Trúc Tổng Quan Multi-Model API Gateway

┌─────────────────────────────────────────────────────────────────────────────┐
│                         Multi-Model API Gateway                              │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                              │
│    ┌──────────┐     ┌──────────────┐     ┌─────────────────────────────┐    │
│    │  Client  │────▶│   Router     │────▶│     Model Abstraction       │    │
│    │  (SDK)   │     │   Layer      │     │         Layer               │    │
│    └──────────┘     └──────────────┘     │                             │    │
│                                          │  ┌─────────┐ ┌──────────┐  │    │
│    Features:                             │  │ Model A │ │ Model B  │  │    │
│    • Load Balancer                      │  │ (GPT-4) │ │(Claude)  │  │    │
│    • Circuit Breaker                    │  └─────────┘ └──────────┘  │    │
│    • Rate Limiter                       │  ┌─────────┐ ┌──────────┐  │    │
│    • Request Batching                    │  │Model C  │ │ Model D  │  │    │
│                                          │  │(Gemini) │ │(DeepSeek)│  │    │
│                                          │  └─────────┘ └──────────┘  │    │
│                                          └─────────────────────────────┘    │
│                                                       │                      │
│                                          ┌────────────▼────────────┐         │
│                                          │   HolySheep API Layer   │         │
│                                          │  base_url: api.holysheep.ai/v1   │
│                                          └─────────────────────────┘         │
└─────────────────────────────────────────────────────────────────────────────┘

Triển Khai Chi Tiết: Từ Migration Đến Production

Bước 1: Cấu Hình Base Client - HolySheep Integration

import requests
import json
from typing import Dict, List, Optional, Any
from dataclasses import dataclass, field
from enum import Enum
import time
import hashlib

class ModelProvider(Enum):
    """Các nhà cung cấp model được hỗ trợ"""
    GPT_4_1 = "gpt-4.1"
    CLAUDE_SONNET_4_5 = "claude-sonnet-4.5"
    GEMINI_2_5_FLASH = "gemini-2.5-flash"
    DEEPSEEK_V3_2 = "deepseek-v3.2"

@dataclass
class ModelConfig:
    """Cấu hình cho từng model"""
    provider: ModelProvider
    max_tokens: int = 4096
    temperature: float = 0.7
    timeout: int = 30
    retry_count: int = 3
    fallback_models: List[ModelProvider] = field(default_factory=list)

class HolySheepMultiModelClient:
    """
    Client thống nhất để gọi đa mô hình AI qua HolySheep API
    Tích hợp các tính năng: retry, fallback, rate limiting, circuit breaker
    """
    
    BASE_URL = "https://api.holysheep.ai/v1"
    
    # Bảng giá 2026 (USD per 1M tokens)
    PRICING = {
        ModelProvider.GPT_4_1: 8.0,              # $8/MTok
        ModelProvider.CLAUDE_SONNET_4_5: 15.0,   # $15/MTok
        ModelProvider.GEMINI_2_5_FLASH: 2.50,    # $2.50/MTok
        ModelProvider.DEEPSEEK_V3_2: 0.42,       # $0.42/MTok - RẺ NHẤT
    }
    
    def __init__(self, api_key: str):
        """
        Khởi tạo client với API key từ HolySheep
        
        Args:
            api_key: YOUR_HOLYSHEEP_API_KEY từ dashboard
        """
        if not api_key or api_key == "YOUR_HOLYSHEEP_API_KEY":
            raise ValueError("Vui lòng cung cấp API key hợp lệ từ HolySheep")
        
        self.api_key = api_key
        self.session = requests.Session()
        self.session.headers.update({
            "Authorization": f"Bearer {api_key}",
            "Content-Type": "application/json"
        })
        
        # Circuit breaker state
        self.failure_count = {}
        self.circuit_open = {}
        self.last_failure_time = {}
        self.circuit_threshold = 5
        self.circuit_timeout = 60  # seconds
        
        # Rate limiter
        self.request_counts = {}
        self.rate_limit_window = 60  # per minute
        
        # Model configurations
        self.model_configs: Dict[ModelProvider, ModelConfig] = {
            ModelProvider.GPT_4_1: ModelConfig(
                provider=ModelProvider.GPT_4_1,
                max_tokens=8192,
                temperature=0.7,
                fallback_models=[ModelProvider.GEMINI_2_5_FLASH]
            ),
            ModelProvider.CLAUDE_SONNET_4_5: ModelConfig(
                provider=ModelProvider.CLAUDE_SONNET_4_5,
                max_tokens=8192,
                temperature=0.7,
                fallback_models=[ModelProvider.GPT_4_1]
            ),
            ModelProvider.GEMINI_2_5_FLASH: ModelConfig(
                provider=ModelProvider.GEMINI_2_5_FLASH,
                max_tokens=32768,
                temperature=0.7,
                fallback_models=[ModelProvider.DEEPSEEK_V3_2]
            ),
            ModelProvider.DEEPSEEK_V3_2: ModelConfig(
                provider=ModelProvider.DEEPSEEK_V3_2,
                max_tokens=16384,
                temperature=0.7,
                fallback_models=[ModelProvider.GEMINI_2_5_FLASH]
            ),
        }
    
    def _check_circuit_breaker(self, provider: ModelProvider) -> bool:
        """
        Kiểm tra circuit breaker - trả về True nếu circuit đóng (cho phép request)
        """
        if provider not in self.circuit_open:
            return True
            
        if not self.circuit_open.get(provider, False):
            return True
            
        # Kiểm tra timeout
        if time.time() - self.last_failure_time.get(provider, 0) > self.circuit_timeout:
            self.circuit_open[provider] = False
            self.failure_count[provider] = 0
            return True
            
        return False
    
    def _record_success(self, provider: ModelProvider):
        """Ghi nhận thành công - reset circuit breaker"""
        self.failure_count[provider] = 0
        self.circuit_open[provider] = False
    
    def _record_failure(self, provider: ModelProvider):
        """Ghi nhận thất bại - tăng counter và có thể mở circuit"""
        self.failure_count[provider] = self.failure_count.get(provider, 0) + 1
        self.last_failure_time[provider] = time.time()
        
        if self.failure_count[provider] >= self.circuit_threshold:
            self.circuit_open[provider] = True
            print(f"Circuit breaker OPEN for {provider.value}!")
    
    def _rate_limit_check(self, provider: ModelProvider) -> bool:
        """
        Kiểm tra rate limit - giới hạn 60 requests/phút/mỗi model
        """
        current_time = time.time()
        key = f"{provider.value}_{int(current_time // self.rate_limit_window)}"
        
        count = self.request_counts.get(key, 0)
        if count >= 60:
            return False
        
        self.request_counts[key] = count + 1
        return True
    
    def _format_request(self, provider: ModelProvider, messages: List[Dict], 
                        **kwargs) -> Dict[str, Any]:
        """Chuẩn hóa request format cho tất cả các model"""
        config = self.model_configs.get(provider)
        
        base_payload = {
            "model": provider.value,
            "messages": messages,
            "max_tokens": kwargs.get("max_tokens", config.max_tokens),
            "temperature": kwargs.get("temperature", config.temperature),
        }
        
        # Thêm optional parameters
        if "top_p" in kwargs:
            base_payload["top_p"] = kwargs["top_p"]
        if "stream" in kwargs:
            base_payload["stream"] = kwargs["stream"]
            
        return base_payload
    
    def chat_completion(self, provider: ModelProvider, messages: List[Dict],
                        enable_fallback: bool = True, **kwargs) -> Dict[str, Any]:
        """
        Gọi API với logic tự động retry và fallback
        
        Args:
            provider: Model muốn sử dụng
            messages: Danh sách messages theo format OpenAI
            enable_fallback: Có cho phép fallback sang model khác không
            **kwargs: Các tham số bổ sung (max_tokens, temperature, ...)
            
        Returns:
            Response dictionary với format thống nhất
        """
        config = self.model_configs.get(provider)
        current_provider = provider
        
        for attempt in range(config.retry_count):
            # Kiểm tra circuit breaker
            if not self._check_circuit_breaker(current_provider):
                if enable_fallback and config.fallback_models:
                    current_provider = config.fallback_models[0]
                    config = self.model_configs.get(current_provider)
                    continue
                raise Exception(f"Circuit breaker OPEN for all fallback models")
            
            # Kiểm tra rate limit
            if not self._rate_limit_check(current_provider):
                time.sleep(1)
                continue
            
            try:
                payload = self._format_request(current_provider, messages, **kwargs)
                
                start_time = time.time()
                response = self.session.post(
                    f"{self.BASE_URL}/chat/completions",
                    json=payload,
                    timeout=config.timeout
                )
                latency = time.time() - start_time
                
                if response.status_code == 200:
                    self._record_success(current_provider)
                    result = response.json()
                    result["_meta"] = {
                        "provider": current_provider.value,
                        "latency_ms": round(latency * 1000, 2),
                        "pricing_per_mtok": self.PRICING[current_provider]
                    }
                    return result
                    
                elif response.status_code == 429:
                    # Rate limited - retry với exponential backoff
                    self._record_failure(current_provider)
                    wait_time = 2 ** attempt
                    time.sleep(wait_time)
                    continue
                    
                elif response.status_code >= 500:
                    # Server error - retry
                    self._record_failure(current_provider)
                    wait_time = 2 ** attempt
                    time.sleep(wait_time)
                    continue
                    
                else:
                    raise Exception(f"API Error {response.status_code}: {response.text}")
                    
            except requests.exceptions.Timeout:
                self._record_failure(current_provider)
                if attempt < config.retry_count - 1:
                    continue
                    
            except requests.exceptions.RequestException as e:
                self._record_failure(current_provider)
                raise Exception(f"Request failed: {str(e)}")
        
        raise Exception(f"Tất cả retry attempts đã thất bại")

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

VÍ DỤ SỬ DỤNG

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

if __name__ == "__main__": # Khởi tạo client với API key client = HolySheepMultiModelClient( api_key="YOUR_HOLYSHEEP_API_KEY" ) # Test với DeepSeek V3.2 (model rẻ nhất - $0.42/MTok) messages = [ {"role": "system", "content": "Bạn là trợ lý AI tiếng Việt hữu ích"}, {"role": "user", "content": "Giải thích kiến trúc Multi-Model API Gateway"} ] try: # Gọi với DeepSeek - chi phí thấp nhất response = client.chat_completion( provider=ModelProvider.DEEPSEEK_V3_2, messages=messages, max_tokens=1000, temperature=0.7 ) print(f"Model: {response['_meta']['provider']}") print(f"Latency: {response['_meta']['latency_ms']}ms") print(f"Chi phí ước tính: ${response['_meta']['pricing_per_mtok']}/MTok") print(f"Response: {response['choices'][0]['message']['content']}") except Exception as e: print(f"Lỗi: {str(e)}")

Bước 2: Triển Khai Canary Deployment & Key Rotation

import asyncio
import random
from typing import Dict, Callable, List
from datetime import datetime, timedelta
import threading
import json

class CanaryDeployment:
    """
    Triển khai Canary: chuyển traffic từ từ từ nhà cung cấp cũ sang HolySheep
    Hỗ trợ A/B testing và gradual migration
    """
    
    def __init__(self, client: HolySheepMultiModelClient):
        self.client = client
        self.traffic_weights = {
            "legacy": 100.0,  # Bắt đầu 100% qua nhà cung cấp cũ
            "holysheep": 0.0
        }
        self.metrics = {
            "legacy": {"success": 0, "failure": 0, "latencies": []},
            "holysheep": {"success": 0, "failure": 0, "latencies": []}
        }
        self.migration_rules = []
        
    def add_migration_rule(self, rule: Dict):
        """
        Thêm rule migration
        
        rule = {
            "condition": lambda req: req.get("priority") == "high",
            "target": "holysheep",  # Hoặc "legacy"
            "percentage": 100  # % traffic matching rule
        }
        """
        self.migration_rules.append(rule)
    
    def _calculate_traffic_split(self, request: Dict) -> str:
        """
        Tính toán request nên đi qua provider nào dựa trên rules
        """
        # Check migration rules first
        for rule in self.migration_rules:
            if rule["condition"](request):
                return rule["target"]
        
        # Random split theo traffic weights
        rand = random.uniform(0, 100)
        if rand < self.traffic_weights["holysheep"]:
            return "holysheep"
        return "legacy"
    
    async def execute_with_canary(
        self, 
        provider: ModelProvider, 
        messages: List[Dict],
        **kwargs
    ) -> Dict:
        """
        Thực thi request với canary logic
        """
        request_id = hashlib.md5(str(datetime.now()).encode()).hexdigest()[:8]
        
        # Determine target provider
        target = self._calculate_traffic_split({"messages": messages, **kwargs})
        
        if target == "holysheep":
            # Route qua HolySheep - tính năng chính
            start = asyncio.get_event_loop().time()
            try:
                result = await asyncio.to_thread(
                    self.client.chat_completion,
                    provider=provider,
                    messages=messages,
                    **kwargs
                )
                latency = (asyncio.get_event_loop().time() - start) * 1000
                
                self.metrics["holysheep"]["success"] += 1
                self.metrics["holysheep"]["latencies"].append(latency)
                result["_meta"]["canary"] = True
                return result
                
            except Exception as e:
                self.metrics["holysheep"]["failure"] += 1
                # Fallback to legacy if configured
                raise e
        else:
            # Legacy path (giữ lại để so sánh)
            return await self._legacy_call(provider, messages, **kwargs)
    
    async def _legacy_call(self, provider, messages, **kwargs) -> Dict:
        """
        Legacy API call - giữ lại để so sánh trong giai đoạn migration
        """
        # Implement legacy call logic here
        # (Dành cho việc so sánh trong giai đoạn canary)
        raise NotImplementedError("Legacy call đã được loại bỏ sau migration")
    
    def update_traffic_split(self, holysheep_percentage: float):
        """
        Cập nhật tỷ lệ traffic - gọi trong cron job
        
        Ví dụ: 
        - Ngày 1-3: 10% traffic sang HolySheep
        - Ngày 4-7: 30% traffic sang HolySheep
        - Ngày 8-14: 70% traffic sang HolySheep
        - Ngày 15+: 100% traffic sang HolySheep
        """
        self.traffic_weights["holysheep"] = holysheep_percentage
        self.traffic_weights["legacy"] = 100 - holysheep_percentage
        print(f"Traffic split updated: HolySheep {holysheep_percentage}%, Legacy {100-holysheep_percentage}%")
    
    def get_migration_report(self) -> Dict:
        """
        Generate báo cáo migration
        """
        def calc_stats(provider_key):
            data = self.metrics[provider_key]
            latencies = data["latencies"][-100:]  # Last 100 requests
            if latencies:
                return {
                    "total_requests": data["success"] + data["failure"],
                    "success_rate": data["success"] / (data["success"] + data["failure"] + 0.001) * 100,
                    "avg_latency_ms": sum(latencies) / len(latencies),
                    "p95_latency_ms": sorted(latencies)[int(len(latencies) * 0.95)] if latencies else 0
                }
            return {"total_requests": 0, "success_rate": 0, "avg_latency_ms": 0}
        
        return {
            "timestamp": datetime.now().isoformat(),
            "traffic_weights": self.traffic_weights,
            "holysheep_stats": calc_stats("holysheep"),
            "legacy_stats": calc_stats("legacy"),
            "improvement": {
                "latency_reduction_pct": (
                    (calc_stats("legacy")["avg_latency_ms"] - calc_stats("holysheep")["avg_latency_ms"])
                    / calc_stats("legacy")["avg_latency_ms"] * 100
                ) if calc_stats("legacy")["avg_latency_ms"] > 0 else 0
            }
        }


class APIKeyRotation:
    """
    Quản lý và xoay vòng API keys tự động
    Hỗ trợ multiple keys với health check
    """
    
    def __init__(self, keys: List[str], client_factory: Callable):
        """
        Args:
            keys: Danh sách API keys
            client_factory: Hàm tạo client từ API key
        """
        self.keys = [k for k in keys if k and k != "YOUR_HOLYSHEEP_API_KEY"]
        self.client_factory = client_factory
        self.current_key_index = 0
        self.key_health = {k: {"healthy": True, "last_used": None, "failures": 0} for k in self.keys}
        self.lock = threading.Lock()
        
        if not self.keys:
            # Fallback to default key
            self.keys = ["YOUR_HOLYSHEEP_API_KEY"]
            self.key_health = {self.keys[0]: {"healthy": True, "last_used": None, "failures": 0}}
    
    def get_current_key(self) -> str:
        """Lấy key hiện tại đang active"""
        with self.lock:
            return self.keys[self.current_key_index]
    
    def get_healthy_key(self) -> str:
        """
        Lấy key healthy gần nhất
        Thực hiện rotation nếu key hiện tại có vấn đề
        """
        with self.lock:
            current_health = self.key_health[self.keys[self.current_key_index]]
            
            if current_health["healthy"]:
                return self.keys[self.current_key_index]
            
            # Tìm key healthy tiếp theo
            for i, key in enumerate(self.keys):
                if self.key_health[key]["healthy"]:
                    self.current_key_index = i
                    return key
            
            # Không có key healthy - reset tất cả (có thể là API issue)
            for key in self.keys:
                self.key_health[key]["healthy"] = True
                self.key_health[key]["failures"] = 0
            
            return self.keys[0]
    
    def mark_success(self, key: str):
        """Đánh dấu key thành công"""
        with self.lock:
            if key in self.key_health:
                self.key_health[key]["healthy"] = True
                self.key_health[key]["failures"] = 0
                self.key_health[key]["last_used"] = datetime.now()
    
    def mark_failure(self, key: str):
        """Đánh dấu key thất bại"""
        with self.lock:
            if key in self.key_health:
                self.key_health[key]["failures"] += 1
                if self.key_health[key]["failures"] >= 3:
                    self.key_health[key]["healthy"] = False
                    print(f"Key marked unhealthy: {key[:8]}... failures={self.key_health[key]['failures']}")


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

VÍ DỤ SỬ DỤNG CANARY DEPLOYMENT

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

async def demo_canary_migration(): """Demo quy trình migration từ legacy sang HolySheep""" # Khởi tạo client = HolySheepMultiModelClient("YOUR_HOLYSHEEP_API_KEY") canary = CanaryDeployment(client) # Cấu hình rules canary.add_migration_rule({ "condition": lambda req: req.get("priority") == "high", "target": "holysheep", "percentage": 100 }) canary.add_migration_rule({ "condition": lambda req: req.get("model") == "deepseek-v3.2", "target": "holysheep", "percentage": 100 # Luôn dùng HolySheep cho DeepSeek }) messages = [ {"role": "user", "content": "Test canary deployment"} ] # Gọi với canary result = await canary.execute_with_canary( provider=ModelProvider.DEEPSEEK_V3_2, messages=messages ) print(f"Canary result: {result['_meta']}") # Simulate gradual traffic increase for day in range(1, 16): if day <= 3: canary.update_traffic_split(10) elif day <= 7: canary.update_traffic_split(30) elif day <= 14: canary.update_traffic_split(70) else: canary.update_traffic_split(100) # Generate report report = canary.get_migration_report() print(json.dumps(report, indent=2, default=str)) if __name__ == "__main__": asyncio.run(demo_canary_migration())

Bước 3: Monitoring Dashboard & Cost Tracking

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

class CostTracker:
    """
    Theo dõi chi phí theo thời gian thực
    Tính năng: theo dõi chi phí theo model, user, endpoint
    """
    
    def __init__(self):
        self.usage_data = defaultdict(lambda: {
            "input_tokens": 0,
            "output_tokens": 0,
            "requests": 0,
            "cost": 0.0
        })
        self.lock = threading.Lock()
        
        # Bảng giá HolySheep 2026 (USD/MTok)
        self.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},  # GIÁ RẺ NHẤT!
        }
        
    def record_usage(
        self, 
        model: str, 
        input_tokens: int, 
        output_tokens: int,
        user_id: Optional[str] = None,
        endpoint: Optional[str] = None
    ):
        """Ghi nhận usage"""
        with self.lock:
            key = f"{model}:{user_id or 'anonymous'}:{endpoint or 'default'}"
            
            self.usage_data[key]["input_tokens"] += input_tokens
            self.usage_data[key]["output_tokens"] += output_tokens
            self.usage_data[key]["requests"] += 1
            
            # Tính chi phí (đơn vị: USD)
            model_key = model.split("/")[-1]  # Handle provider/model format
            pricing = self.pricing.get(model_key, {"input": 1.0, "output": 1.0})
            
            input_cost = (input_tokens / 1_000_000) * pricing["input"]
            output_cost = (output_tokens / 1_000_000) * pricing["output"]
            
            self.usage_data[key]["cost"] += input_cost + output_cost
    
    def get_cost_report(
        self, 
        group_by: str = "model",
        time_range: Optional[timedelta] = None
    ) -> Dict:
        """
        Generate báo cáo chi phí
        
        Args:
            group_by: "model", "user", hoặc "endpoint"
            time_range: Lọc theo khoảng thời gian
        """
        with self.lock:
            report = defaultdict(lambda: {
                "input_tokens": 0,
                "output_tokens": 0,
                "requests": 0,
                "cost": 0.0
            })
            
            for key, data in self.usage_data.items():
                model, user, endpoint = key.split(":")
                
                if group_by == "model":
                    group_key = model
                elif group_by == "user":
                    group_key = user
                else:
                    group_key = endpoint
                
                report[group_key]["input_tokens"] += data["input_tokens"]
                report[group_key]["output_tokens"] += data["output_tokens"]
                report[group_key]["requests"] += data["requests"]
                report[group_key]["cost"] += data["cost"]
            
            return dict(report)
    
    def get_savings_comparison(
        self, 
        old_provider_costs: Dict[str, float]
    ) -> Dict:
        """
        So sánh chi phí với nhà cung cấp cũ
        
        Args:
            old_provider_costs: Dict của chi phí cũ theo model
            Ví dụ: {"gpt-4": 3000, "claude-3": 1200}
        """
        current_total = sum(d["cost"] for d in self.usage_data.values())
        old_total = sum(old_provider_costs.values())
        
        return {
            "old_provider_total_usd": old_total,
            "holysheep_total_usd": round(current_total, 2),
            "savings_usd": round(old_total - current_total, 2),
            "savings_percentage": round((old_total - current_total) / old_total * 100, 2) if old_total > 0 else 0,
            "monthly_projection": round(current_total * 30, 2),  # Giả sử 1 ngày
        }


class ModelRouter:
    """
    Intelligent routing - chọn model tối ưu dựa trên yêu cầu
    """
    
    # Mapping use cases với recommended models
    USE_CASE_MAPPING = {
        "quick_response": {
            "primary": ModelProvider.GEMINI_2_5_FLASH,
            "fallback": ModelProvider.DEEPSEEK_V3_2,
            "max_latency_ms": 100
        },
        "code_generation": {
            "primary": ModelProvider.GPT_4_1,
            "fallback": ModelProvider.CLAUDE_SONNET_4_5,
            "max_latency_ms": 500
        },
        "long_context": {
            "primary": ModelProvider.GEMINI_2_5_FLASH,  # 32K context
            "fallback": ModelProvider.DEEPSEEK_V3_2,
            "max_latency_ms": 800
        },
        "budget_friendly": {
            "primary": ModelProvider.DEEPSEEK_V3_2,  # $0.42/MTok
            "fallback": ModelProvider.GEMINI_2_5_FLASH,
            "max_latency_ms": 300
        },
        "high_quality": {
            "primary": ModelProvider.CLAUDE_SONNET_4_5,
            "fallback": ModelProvider.GPT_4_1,
            "max_latency_ms": 1000
        }
    }
    
    def __init__(self, client: HolySheepMultiModelClient):
        self.client = client
        self.cost_tracker = CostTracker()
    
    def select_model(self, use_case: str, priority: str = "balanced") -> ModelProvider:
        """
        Chọn model phù hợp với use case
        
        Args:
            use_case: Loại use case ("quick_response", "code_generation", ...)
            priority: Ưu tiên ("speed", "cost", "quality", "balanced")
        """
        mapping = self.USE_CASE_MAPPING.get(use_case, self.USE_CASE_MAPPING["balanced"])
        
        if priority == "cost":
            return ModelProvider.DEEPSEEK_V3_2  # Luôn chọn rẻ nhất
        elif priority == "speed":
            return ModelProvider.GEMINI_2_5_FLASH  # Nhanh nhất
        elif priority == "quality":
            return ModelProvider.CLAUDE_SONNET_4_5
        else:
            return mapping["primary"]
    
    async def smart_completion(
        self,
        messages: List[Dict],
        use_case: str = "balanced",
        priority: str = "balanced",
        **kwargs
    ) -> Dict:
        """
        Smart completion - tự động chọn model và theo dõi chi phí
        """
        model = self.select_model(use_case, priority)
        
        try:
            result = await self.client.chat_completion(
                provider=model,
                messages=messages,
                **kwargs
            )
            
            # Ghi nhận chi phí
            usage = result.get("usage", {})
            self.cost_tracker.record_usage(
                model=model.value,
                input_tokens=