Chào các bạn, mình là Minh Tuấn, Technical Lead tại một startup AI tại TP.HCM. Hôm nay mình sẽ chia sẻ chi tiết về hành trình di chuyển hệ thống của đội ngũ từ API chính thức OpenAI/Anthropic sang HolySheep AI — nền tảng multi-model routing với mức tiết kiệm lên tới 85% chi phí.

Bối Cảnh: Tại Sao Chúng Tôi Phải Thay Đổi?

Tháng 3/2026, hóa đơn API của đội ngũ đã đạt $4,280/tháng — một con số khổng lồ cho startup chỉ có 8 người. Phân tích chi tiết cho thấy:

Trong khi đó, HolySheep AI cung cấp cùng models với:

Kiến Trúc Multi-Model Routing

Mình đã xây dựng một Smart Router tự động chọn model tối ưu dựa trên yêu cầu:

"""
Smart Model Router - HolySheep AI Integration
Tác giả: Minh Tuấn - HolySheep AI Technical Partner
"""

import openai
from typing import Optional, Dict, Any
from dataclasses import dataclass
from enum import Enum

class ModelTier(Enum):
    FAST = "deepseek-v3.2"           # $0.42/MTok - Simple tasks
    BALANCED = "claude-sonnet-4.5"    # $2.25/MTok - Medium complexity  
    PREMIUM = "gpt-4.1"              # $1.20/MTok - Complex reasoning

@dataclass
class RoutingConfig:
    # Pricing at HolySheep (2026/MTok)
    HOLYSHEEP_PRICING = {
        "deepseek-v3.2": 0.42,
        "claude-sonnet-4.5": 2.25,
        "gpt-4.1": 1.20,
        "gemini-2.5-flash": 0.38
    }
    
    # Latency thresholds (ms)
    LATENCY_THRESHOLDS = {
        "deepseek-v3.2": 45,
        "claude-sonnet-4.5": 65,
        "gpt-4.1": 80
    }
    
    # Task complexity patterns
    FAST_PATTERNS = [
        "translate", "summarize", "classify", "extract",
        "format", "count", "validate", "check"
    ]
    
    MEDIUM_PATTERNS = [
        "explain", "compare", "analyze", "review",
        "write", "create", "generate", "draft"
    ]

class HolySheepRouter:
    """
    Intelligent router sử dụng HolySheep AI API
    Base URL: https://api.holysheep.ai/v1
    """
    
    def __init__(self, api_key: str):
        self.client = openai.OpenAI(
            api_key=api_key,
            base_url="https://api.holysheep.ai/v1"  # KHÔNG dùng api.openai.com
        )
        self.config = RoutingConfig()
        self.usage_stats = {"requests": 0, "cost": 0.0, "latency": []}
    
    def _classify_task(self, prompt: str) -> ModelTier:
        """Phân loại độ phức tạp của task"""
        prompt_lower = prompt.lower()
        
        # Check for fast patterns
        for pattern in self.config.FAST_PATTERNS:
            if pattern in prompt_lower:
                return ModelTier.FAST
        
        # Check for medium patterns  
        for pattern in self.config.MEDIUM_PATTERNS:
            if pattern in prompt_lower:
                return ModelTier.BALANCED
        
        # Default to balanced
        return ModelTier.BALANCED
    
    def _estimate_cost(self, model: str, tokens: int) -> float:
        """Ước tính chi phí theo pricing HolySheep"""
        price_per_mtok = self.config.HOLYSHEEP_PRICING.get(model, 0)
        return (tokens / 1_000_000) * price_per_mtok
    
    async def route_and_call(
        self, 
        prompt: str, 
        system_prompt: Optional[str] = None,
        force_model: Optional[str] = None,
        max_tokens: int = 2048
    ) -> Dict[str, Any]:
        """
        Main routing method - tự động chọn model và gọi HolySheep
        """
        import time
        
        # Determine model
        if force_model:
            model = force_model
        else:
            tier = self._classify_task(prompt)
            model = tier.value
        
        start_time = time.time()
        
        # Build messages
        messages = []
        if system_prompt:
            messages.append({"role": "system", "content": system_prompt})
        messages.append({"role": "user", "content": prompt})
        
        try:
            # Call HolySheep AI
            response = self.client.chat.completions.create(
                model=model,
                messages=messages,
                max_tokens=max_tokens,
                temperature=0.7
            )
            
            latency_ms = (time.time() - start_time) * 1000
            
            # Track usage
            usage = response.usage
            cost = self._estimate_cost(model, usage.total_tokens)
            
            self.usage_stats["requests"] += 1
            self.usage_stats["cost"] += cost
            self.usage_stats["latency"].append(latency_ms)
            
            return {
                "success": True,
                "model": model,
                "content": response.choices[0].message.content,
                "usage": {
                    "prompt_tokens": usage.prompt_tokens,
                    "completion_tokens": usage.completion_tokens,
                    "total_tokens": usage.total_tokens
                },
                "cost_usd": round(cost, 4),
                "latency_ms": round(latency_ms, 2),
                "savings_vs_official": self._calculate_savings(model, usage.total_tokens)
            }
            
        except Exception as e:
            return {
                "success": False,
                "error": str(e),
                "model": model,
                "latency_ms": round((time.time() - start_time) * 1000, 2)
            }
    
    def _calculate_savings(self, model: str, tokens: int) -> Dict[str, float]:
        """Tính savings so với API chính thức"""
        official_prices = {
            "deepseek-v3.2": 0.42,  # Official price (similar)
            "claude-sonnet-4.5": 15.0,  # Official: $15/MTok
            "gpt-4.1": 8.0,  # Official: $8/MTok
        }
        
        holy_price = self.config.HOLYSHEEP_PRICING.get(model, 0)
        official_price = official_prices.get(model, holy_price * 10)
        
        cost_holy = (tokens / 1_000_000) * holy_price
        cost_official = (tokens / 1_000_000) * official_price
        
        return {
            "holy_cost_usd": round(cost_holy, 4),
            "official_cost_usd": round(cost_official, 4),
            "savings_percent": round((1 - holy_price/official_price) * 100, 1)
        }
    
    def get_usage_report(self) -> Dict[str, Any]:
        """Báo cáo sử dụng chi tiết"""
        avg_latency = sum(self.usage_stats["latency"]) / len(self.usage_stats["latency"]) if self.usage_stats["latency"] else 0
        
        return {
            "total_requests": self.usage_stats["requests"],
            "total_cost_usd": round(self.usage_stats["cost"], 4),
            "avg_latency_ms": round(avg_latency, 2),
            "estimated_monthly_cost": round(self.usage_stats["cost"] * 30, 2),
            "vs_old_system_savings": round(
                self.usage_stats["cost"] * 5.5, 2  # ~85% savings
            )
        }

So Sánh Chi Phí Thực Tế

ModelAPI Chính ThứcHolySheep AITiết Kiệm
Claude Sonnet 4.5$15.00/MTok$2.25/MTok85%
GPT-4.1$8.00/MTok$1.20/MTok85%
DeepSeek V3.2$0.50/MTok$0.42/MTok16%
Gemini 2.5 Flash$3.50/MTok$0.38/MTok89%

Chiến Lược Di Chuyển Từng Bước

Bước 1: Thiết Lập HolySheep Client

"""
Migration Step 1: HolySheep AI Client Setup
Migrating from OpenAI SDK to HolySheep (compatible API)
"""

Cài đặt SDK

pip install openai>=1.12.0

import openai from typing import List, Dict, Any class HolySheepAIClient: """ HolySheep AI Client - Compatible với OpenAI SDK ✅ Base URL: https://api.holysheep.ai/v1 ✅ Hỗ trợ WeChat/Alipay thanh toán ✅ Free credits khi đăng ký tại: https://www.holysheep.ai/register """ def __init__(self, api_key: str): # IMPORTANT: Chỉ dùng HolySheep base URL self.client = openai.OpenAI( api_key=api_key, # YOUR_HOLYSHEEP_API_KEY base_url="https://api.holysheep.ai/v1" # KHÔNG BAO GIỜ dùng api.openai.com ) # Available models trên HolySheep (2026) self.models = { "fast": ["deepseek-v3.2", "gemini-2.5-flash"], "balanced": ["claude-sonnet-4.5", "gpt-4.1"], "premium": ["gpt-4.1-turbo"] } def chat_completion( self, messages: List[Dict[str, str]], model: str = "deepseek-v3.2", temperature: float = 0.7, max_tokens: int = 2048, **kwargs ) -> Dict[str, Any]: """ Gọi chat completion - tương thích OpenAI format Args: messages: [{"role": "user", "content": "..."}] model: deepseek-v3.2, claude-sonnet-4.5, gpt-4.1, gemini-2.5-flash temperature: 0.0-2.0 max_tokens: giới hạn response length Returns: { "id": "chatcmpl-xxx", "model": "deepseek-v3.2", "choices": [...], "usage": {...}, "latency_ms": 45.23 } """ import time start = time.time() response = self.client.chat.completions.create( model=model, messages=messages, temperature=temperature, max_tokens=max_tokens, **kwargs ) latency_ms = (time.time() - start) * 1000 return { "id": response.id, "model": response.model, "choices": [ { "index": c.index, "message": { "role": c.message.role, "content": c.message.content }, "finish_reason": c.finish_reason } for c in response.choices ], "usage": { "prompt_tokens": response.usage.prompt_tokens, "completion_tokens": response.usage.completion_tokens, "total_tokens": response.usage.total_tokens }, "latency_ms": round(latency_ms, 2), "_response": response # Keep raw response for advanced usage } def streaming_completion( self, messages: List[Dict[str, str]], model: str = "deepseek-v3.2", **kwargs ): """ Streaming response - lý tưởng cho chatbots """ stream = self.client.chat.completions.create( model=model, messages=messages, stream=True, **kwargs ) for chunk in stream: if chunk.choices[0].delta.content: yield chunk.choices[0].delta.content def batch_completion( self, prompts: List[str], model: str = "deepseek-v3.2", system_prompt: str = None ) -> List[Dict[str, Any]]: """ Batch processing - xử lý nhiều prompts cùng lúc Tiết kiệm cost với DeepSeek V3.2 ($0.42/MTok) """ results = [] for prompt in prompts: messages = [] if system_prompt: messages.append({"role": "system", "content": system_prompt}) messages.append({"role": "user", "content": prompt}) result = self.chat_completion(messages, model=model) results.append(result) return results def cost_calculator(self, model: str, total_tokens: int) -> Dict[str, float]: """ Tính chi phí theo HolySheep pricing 2026 """ pricing = { "deepseek-v3.2": 0.42, "claude-sonnet-4.5": 2.25, "gpt-4.1": 1.20, "gemini-2.5-flash": 0.38 } price = pricing.get(model, 0.42) cost_usd = (total_tokens / 1_000_000) * price # So sánh với official pricing official_pricing = { "deepseek-v3.2": 0.50, "claude-sonnet-4.5": 15.00, "gpt-4.1": 8.00, "gemini-2.5-flash": 3.50 } official_cost = (total_tokens / 1_000_000) * official_pricing.get(model, price * 10) return { "model": model, "total_tokens": total_tokens, "holy_cost_usd": round(cost_usd, 4), "official_cost_usd": round(official_cost, 4), "your_savings_usd": round(official_cost - cost_usd, 4), "savings_percent": round((1 - cost_usd/official_cost) * 100, 1) }

============== USAGE EXAMPLE ==============

if __name__ == "__main__": # Initialize với HolySheep API Key client = HolySheepAIClient( api_key="YOUR_HOLYSHEEP_API_KEY" # Lấy từ https://www.holysheep.ai/register ) # Test 1: Simple translation - dùng DeepSeek (fast & cheap) result = client.chat_completion( messages=[ {"role": "user", "content": "Translate to Vietnamese: Hello, how are you?"} ], model="deepseek-v3.2" # $0.42/MTok - tiết kiệm 85% ) print(f"DeepSeek response: {result['choices'][0]['message']['content']}") print(f"Latency: {result['latency_ms']}ms") print(f"Cost: ${result['usage']['total_tokens'] / 1_000_000 * 0.42}") # Test 2: Complex reasoning - dùng Claude Sonnet result = client.chat_completion( messages=[ {"role": "user", "content": "Analyze the pros and cons of microservices architecture"} ], model="claude-sonnet-4.5" # $2.25/MTok thay vì $15/MTok ) print(f"\nClaude response: {result['choices'][0]['message']['content'][:100]}...") # Test 3: Cost comparison calc = client.cost_calculator("claude-sonnet-4.5", 500_000) print(f"\n=== Cost Analysis for 500K tokens ===") print(f"HolySheep: ${calc['holy_cost_usd']}") print(f"Official: ${calc['official_cost_usd']}") print(f"You save: ${calc['your_savings_usd']} ({calc['savings_percent']}%)")

Bước 2: Tích Hợp Proxy Layer Cho Fallback

"""
Migration Step 2: Proxy Layer với Automatic Fallback
Đảm bảo high availability khi migrate
"""

import asyncio
from typing import Optional, Callable, Any
from dataclasses import dataclass, field
from datetime import datetime, timedelta
import logging

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

@dataclass
class ModelConfig:
    name: str
    max_tokens: int
    timeout_seconds: float
    cost_per_mtok: float
    priority: int  # Lower = higher priority
    
    # Fallback models (từ HolySheep)
    FALLBACK_ORDER = {
        "claude-sonnet-4.5": [
            "claude-sonnet-4.5",  # Retry same model first
            "gpt-4.1",            # Then try GPT
            "deepseek-v3.2"       # Finally DeepSeek
        ],
        "gpt-4.1": [
            "gpt-4.1",
            "claude-sonnet-4.5",
            "deepseek-v3.2"
        ],
        "deepseek-v3.2": [
            "deepseek-v3.2",
            "gemini-2.5-flash"    # HolySheep's fast alternative
        ]
    }

class HolySheepProxy:
    """
    Proxy layer cho HolySheep AI với:
    - Automatic fallback khi model fail
    - Rate limiting
    - Cost tracking
    - Latency monitoring
    """
    
    def __init__(self, api_key: str):
        from openai import OpenAI
        self.client = OpenAI(
            api_key=api_key,
            base_url="https://api.holysheep.ai/v1"
        )
        
        self.model_configs = {
            "claude-sonnet-4.5": ModelConfig(
                name="claude-sonnet-4.5",
                max_tokens=4096,
                timeout_seconds=30.0,
                cost_per_mtok=2.25,
                priority=1
            ),
            "gpt-4.1": ModelConfig(
                name="gpt-4.1",
                max_tokens=4096,
                timeout_seconds=30.0,
                cost_per_mtok=1.20,
                priority=2
            ),
            "deepseek-v3.2": ModelConfig(
                name="deepseek-v3.2",
                max_tokens=8192,
                timeout_seconds=20.0,
                cost_per_mtok=0.42,
                priority=3
            ),
            "gemini-2.5-flash": ModelConfig(
                name="gemini-2.5-flash",
                max_tokens=8192,
                timeout_seconds=15.0,
                cost_per_mtok=0.38,
                priority=4
            )
        }
        
        # Metrics
        self.metrics = {
            "total_requests": 0,
            "successful_requests": 0,
            "failed_requests": 0,
            "total_cost_usd": 0.0,
            "latencies_ms": [],
            "model_usage": {}
        }
    
    async def call_with_fallback(
        self,
        messages: list,
        primary_model: str,
        max_retries: int = 2,
        on_fallback: Optional[Callable] = None
    ) -> dict:
        """
        Gọi model với automatic fallback
        
        Args:
            messages: Chat messages
            primary_model: Model ưu tiên (VD: "claude-sonnet-4.5")
            max_retries: Số lần retry mỗi model
            on_fallback: Callback khi fallback xảy ra
        
        Returns:
            Response dict với metadata
        """
        import time
        import asyncio
        
        config = self.model_configs.get(primary_model)
        fallback_chain = ModelConfig.FALLBACK_ORDER.get(
            primary_model, 
            [primary_model, "deepseek-v3.2"]
        )
        
        last_error = None
        
        for model in fallback_chain:
            for attempt in range(max_retries):
                try:
                    start_time = time.time()
                    
                    # Call HolySheep
                    response = await asyncio.wait_for(
                        self._make_request(model, messages),
                        timeout=self.model_configs[model].timeout_seconds
                    )
                    
                    latency_ms = (time.time() - start_time) * 1000
                    
                    # Update metrics
                    self._record_success(model, response, latency_ms)
                    
                    result = {
                        "success": True,
                        "model_used": model,
                        "was_fallback": model != primary_model,
                        "response": response,
                        "latency_ms": round(latency_ms, 2),
                        "cost_usd": self._calculate_cost(model, response)
                    }
                    
                    # Trigger callback if fallback occurred
                    if result["was_fallback"] and on_fallback:
                        on_fallback(primary_model, model)
                    
                    return result
                    
                except asyncio.TimeoutError:
                    last_error = f"Timeout on {model} (attempt {attempt + 1})"
                    logger.warning(last_error)
                    
                except Exception as e:
                    last_error = f"Error on {model}: {str(e)}"
                    logger.warning(last_error)
        
        # All models failed
        self.metrics["failed_requests"] += 1
        
        return {
            "success": False,
            "error": last_error,
            "primary_model_attempted": primary_model,
            "fallback_chain_tried": fallback_chain
        }
    
    async def _make_request(self, model: str, messages: list) -> dict:
        """Make actual API call to HolySheep"""
        # Non-blocking call
        response = self.client.chat.completions.create(
            model=model,
            messages=messages,
            max_tokens=self.model_configs[model].max_tokens,
            temperature=0.7
        )
        
        return {
            "content": response.choices[0].message.content,
            "usage": {
                "prompt_tokens": response.usage.prompt_tokens,
                "completion_tokens": response.usage.completion_tokens,
                "total_tokens": response.usage.total_tokens
            }
        }
    
    def _record_success(self, model: str, response: dict, latency_ms: float):
        """Record successful request metrics"""
        self.metrics["total_requests"] += 1
        self.metrics["successful_requests"] += 1
        self.metrics["latencies_ms"].append(latency_ms)
        self.metrics["model_usage"][model] = self.metrics["model_usage"].get(model, 0) + 1
        
        cost = self._calculate_cost(model, response)
        self.metrics["total_cost_usd"] += cost
    
    def _calculate_cost(self, model: str, response: dict) -> float:
        """Calculate cost for request"""
        config = self.model_configs[model]
        tokens = response["usage"]["total_tokens"]
        return (tokens / 1_000_000) * config.cost_per_mtok
    
    def get_analytics(self) -> dict:
        """Get detailed analytics"""
        latencies = self.metrics["latencies_ms"]
        
        return {
            "overview": {
                "total_requests": self.metrics["total_requests"],
                "success_rate": round(
                    self.metrics["successful_requests"] / max(1, self.metrics["total_requests"]) * 100, 2
                ),
                "total_cost_usd": round(self.metrics["total_cost_usd"], 4),
                "avg_latency_ms": round(sum(latencies) / max(1, len(latencies)), 2),
                "p50_latency_ms": round(sorted(latencies)[len(latencies)//2] if latencies else 0, 2),
                "p95_latency_ms": round(sorted(latencies)[int(len(latencies)*0.95)] if latencies else 0, 2)
            },
            "model_breakdown": {
                model: {
                    "requests": count,
                    "percentage": round(count / max(1, self.metrics["total_requests"]) * 100, 2)
                }
                for model, count in self.metrics["model_usage"].items()
            },
            "projections": {
                "daily_cost_usd": round(self.metrics["total_cost_usd"] / max(1, self.metrics["total_requests"]) * 100, 2),
                "monthly_cost_usd": round(self.metrics["total_cost_usd"] / max(1, self.metrics["total_requests"]) * 3000, 2),
                "vs_migration_cost_usd": round(
                    self.metrics["total_cost_usd"] / max(1, self.metrics["total_requests"]) * 3000 * 5.5, 2
                )
            }
        }


============== MIGRATION EXAMPLE ==============

async def migrate_example(): """ Ví dụ migrate từ Claude API chính thức sang HolySheep """ proxy = HolySheepProxy(api_key="YOUR_HOLYSHEEP_API_KEY") # Callback khi fallback xảy ra def on_fallback(original: str, actual: str): logger.info(f"🔄 Fallback: {original} → {actual}") # Test case 1: Primary model works result = await proxy.call_with_fallback( messages=[{"role": "user", "content": "Explain quantum computing in 2 sentences"}], primary_model="deepseek-v3.2", on_fallback=on_fallback ) print(f"Result: {result['success']}, Model: {result['model_used']}, Latency: {result['latency_ms']}ms") # Test case 2: Complex reasoning - Claude Sonnet result = await proxy.call_with_fallback( messages=[{"role": "user", "content": "Design a microservices architecture for an e-commerce platform"}], primary_model="claude-sonnet-4.5", on_fallback=on_fallback ) print(f"Result: {result['success']}, Model: {result['model_used']}, Latency: {result['latency_ms']}ms") # Get analytics analytics = proxy.get_analytics() print(f"\n📊 Analytics:") print(f"Total Cost: ${analytics['overview']['total_cost_usd']}") print(f"Avg Latency: {analytics['overview']['avg_latency_ms']}ms") print(f"Monthly Projection: ${analytics['projections']['monthly_cost_usd']}") if __name__ == "__main__": asyncio.run(migrate_example())

Chi Phí Thực Tế Sau Di Chuyển

Sau 2 tháng sử dụng HolySheep AI, đây là kết quả thực tế của đội ngũ mình:

ThángAPI Chính ThứcHolySheep AITiết KiệmĐộ Trễ Trung Bình
Tháng 1$4,280$682$3,598 (84%)48ms
Tháng 2$4,850$724$4,126 (85%)45ms
Tháng 3 (Dự kiến)$5,200$780$4,420 (85%)<50ms

Kế Hoạch Rollback

Trong quá trình migrate, mình luôn chuẩn bị sẵn kế hoạch rollback. Dưới đây là script emergency rollback:

"""
Emergency Rollback Script
Chuyển đổi nhanh về API chính thức nếu cần
"""

import os
from typing import Literal

class APIMode:
    HOLYSHEEP = "holy_sheep"
    OFFICIAL = "official"
    HYBRID = "hybrid"

class MultiProviderClient:
    """
    Client hỗ trợ nhiều provider - dễ dàng switch giữa:
    - HolySheep AI (tiết kiệm 85%)
    - Official APIs (fallback)
    """
    
    def __init__(self):
        self.current_mode = APIMode.HOLYSHEEP
        
        # HolySheep config
        self.holy_sheep_key = os.getenv("HOLYSHEEP_API_KEY")
        self.holy_sheep_base = "https://api.holysheep.ai/v1"
        
        # Official config (fallback)
        self.openai_key = os.getenv("OPENAI_API_KEY")  # Optional
        self.anthropic_key = os.getenv("ANTHROPIC_API_KEY")  # Optional
        
        # Initialize clients
        self._init_clients()
    
    def _init_clients(self):
        from openai import OpenAI
        
        # HolySheep client (always available)
        self.holy_client = OpenAI(
            api_key=self.holy_sheep_key,
            base_url=self.holy_sheep_base
        )
        
        # Official clients (optional - for fallback only)
        if self.openai_key:
            self.openai_client = OpenAI(api_key=self.openai_key)
    
    def switch_mode(self, mode: Literal["holy_sheep", "official", "hybrid"]):
        """
        Switch giữa các chế độ:
        - holy_sheep: Chỉ dùng HolySheep (tiết kiệm nhất)
        - official: Chỉ dùng official APIs
        - hybrid: HolySheep + fallback sang official
        """
        old_mode = self.current_mode
        self.current_mode = mode
        
        print(f"🔄 Mode changed: {old_mode} → {mode}")
        
        if mode == APIMode.OFFICIAL:
            print("⚠️  WARNING: Using official APIs - high cost mode!")
        elif mode == APIMode.HOLYSHEEP:
            print("💰 SAVING: Using HolySheep AI - 85% cost reduction!")
    
    def chat(self, messages, model="deepseek-v3.2", **kwargs):
        """
        Gọi chat completion - tự động chọn provider theo mode
        """
        if self.current_mode == APIMode.HOLYSHEEP:
            return self._call_holy_sheep(messages, model, **kwargs)
        elif self.current_mode == APIMode.OFFICIAL:
            return self._call_official(messages, model, **kwargs)
        else:  # HYBRID
            return self._call_hybrid(messages, model, **kwargs)
    
    def _call_holy_sheep(self, messages, model, **kwargs):
        """Primary: HolySheep AI"""
        response = self.holy_client.chat.completions.create(
            model=model,
            messages=messages,
            **kwargs
        )
        return {"provider": "holy_sheep", "response": response}
    
    def _call_official(self, messages, model, **kwargs):
        """Fallback: Official APIs"""
        if "gpt" in model and self.openai_key:
            response = self.openai_client.chat.completions.create(
                model=model,
                messages=messages,
                **kwargs