Khi xây dựng các ứng dụng AI trong production, điều tôi đã học được sau hơn 3 năm triển khai các hệ thống LLM là: cuộc gọi API đầu tiên không bao giờ là cuộc gọi quan trọng nhất. Điều thực sự quan trọng là hệ thống của bạn xử lý lỗi như thế nào khi mọi thứ không như mong đợi.

Trong bài viết này, tôi sẽ chia sẻ kiến thức thực chiến về cách thiết lập custom error handling và fallback strategy với HolySheep AI — nền tảng mà tôi đã sử dụng để giảm 85% chi phí API trong khi duy trì độ trễ dưới 50ms.

So Sánh Chi Phí Và Hiệu Suất: HolySheep vs Các Giải Pháp Khác

Trước khi đi vào chi tiết kỹ thuật, hãy cùng xem bảng so sánh thực tế mà tôi đã đo đạc trong quá trình vận hành:

Dịch Vụ Giá GPT-4.1/MTok Độ Trễ TB Chi Phí Tháng (10M Tokens) Webhook Fallback
HolySheep AI $8.00 ~45ms $80
API Chính Thức $60.00 ~120ms $600
Proxy Trung Quốc A $25.00 ~200ms $250 Không
Relay Service B $35.00 ~150ms $350 Không

Với mức giá chỉ từ $0.42/MTok cho DeepSeek V3.2 và giao diện hỗ trợ WeChat/Alipay thanh toán, HolySheep AI đã trở thành lựa chọn tối ưu cho các dự án cần scale lớn.

Kiến Trúc Error Handling Tổng Thể

Tôi thiết kế hệ thống error handling theo mô hình 3 tầng:

Cấu Hình HolySheep API Client Với Error Handling

Đầu tiên, hãy thiết lập một client base class với error handling toàn diện:

import openai
import time
import logging
from typing import Optional, Dict, Any, List
from dataclasses import dataclass, field
from enum import Enum

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


class ErrorType(Enum):
    RATE_LIMIT = "rate_limit_error"
    TIMEOUT = "timeout_error"
    SERVER_ERROR = "server_error"
    AUTH_ERROR = "authentication_error"
    VALIDATION_ERROR = "validation_error"
    UNKNOWN = "unknown_error"


@dataclass
class APIConfig:
    """Cấu hình HolySheep API - Thay YOUR_HOLYSHEEP_API_KEY bằng key thực tế"""
    base_url: str = "https://api.holysheep.ai/v1"
    api_key: str = "YOUR_HOLYSHEEP_API_KEY"
    max_retries: int = 3
    timeout: int = 60
    initial_retry_delay: float = 1.0
    max_retry_delay: float = 32.0
    
    # Model priorities (thứ tự ưu tiên - rẻ nhất fallback đến đắt nhất)
    model_tier: List[str] = field(default_factory=lambda: [
        "deepseek-v3.2",      # $0.42/MTok - Fallback tier 1
        "gemini-2.5-flash",   # $2.50/MTok - Fallback tier 2  
        "gpt-4.1"             # $8.00/MTok - Primary model
    ])


@dataclass
class APIResponse:
    content: str
    model: str
    tokens_used: int
    latency_ms: float
    cost_usd: float
    success: bool = True
    error: Optional[str] = None


class HolySheepClient:
    """Client với custom error handling và multi-tier fallback"""
    
    def __init__(self, config: Optional[APIConfig] = None):
        self.config = config or APIConfig()
        self.client = openai.OpenAI(
            base_url=self.config.base_url,
            api_key=self.config.api_key,
            timeout=self.config.timeout,
            max_retries=0  # Chúng ta tự implement retry logic
        )
        self._metrics = {
            "total_requests": 0,
            "successful_requests": 0,
            "failed_requests": 0,
            "fallback_count": 0,
            "total_cost_usd": 0.0
        }
    
    def _classify_error(self, error: Exception) -> ErrorType:
        """Phân loại lỗi để xử lý phù hợp"""
        error_str = str(error).lower()
        
        if "rate_limit" in error_str or "429" in error_str:
            return ErrorType.RATE_LIMIT
        elif "timeout" in error_str or "timed out" in error_str:
            return ErrorType.TIMEOUT
        elif "500" in error_str or "502" in error_str or "503" in error_str:
            return ErrorType.SERVER_ERROR
        elif "401" in error_str or "403" in error_str or "auth" in error_str:
            return ErrorType.AUTH_ERROR
        elif "validation" in error_str or "400" in error_str:
            return ErrorType.VALIDATION_ERROR
        return ErrorType.UNKNOWN
    
    def _calculate_retry_delay(self, attempt: int, error_type: ErrorType) -> float:
        """Tính toán delay với exponential backoff"""
        base_delay = self.config.initial_retry_delay
        
        # Rate limit cần delay lâu hơn
        if error_type == ErrorType.RATE_LIMIT:
            base_delay *= 2
        
        delay = base_delay * (2 ** attempt)
        return min(delay, self.config.max_retry_delay)
    
    def _estimate_cost(self, model: str, tokens: int) -> float:
        """Ước tính chi phí dựa trên model - Giá HolySheep 2026"""
        pricing = {
            "gpt-4.1": 8.00,           # $8/MTok
            "claude-sonnet-4.5": 15.00, # $15/MTok
            "gemini-2.5-flash": 2.50,   # $2.50/MTok
            "deepseek-v3.2": 0.42       # $0.42/MTok - Tiết kiệm 85%+
        }
        price_per_mtok = pricing.get(model, 8.00)
        return (tokens / 1_000_000) * price_per_mtok
    
    def _make_request_with_retry(
        self, 
        model: str, 
        messages: List[Dict],
        attempt: int = 0
    ) -> APIResponse:
        """Thực hiện request với retry logic"""
        start_time = time.time()
        
        try:
            response = self.client.chat.completions.create(
                model=model,
                messages=messages,
                temperature=0.7,
                max_tokens=2048
            )
            
            latency_ms = (time.time() - start_time) * 1000
            content = response.choices[0].message.content
            tokens_used = response.usage.total_tokens if response.usage else 0
            cost = self._estimate_cost(model, tokens_used)
            
            # Update metrics
            self._metrics["total_requests"] += 1
            self._metrics["successful_requests"] += 1
            self._metrics["total_cost_usd"] += cost
            
            logger.info(
                f"✓ Request thành công | Model: {model} | "
                f"Tokens: {tokens_used} | Latency: {latency_ms:.1f}ms | Cost: ${cost:.4f}"
            )
            
            return APIResponse(
                content=content,
                model=model,
                tokens_used=tokens_used,
                latency_ms=latency_ms,
                cost_usd=cost,
                success=True
            )
            
        except Exception as e:
            error_type = self._classify_error(e)
            latency_ms = (time.time() - start_time) * 1000
            
            logger.warning(
                f"✗ Request thất bại | Model: {model} | "
                f"Attempt: {attempt+1} | Error: {error_type.value} | {str(e)}"
            )
            
            # Kiểm tra có nên retry không
            if attempt < self.config.max_retries - 1:
                delay = self._calculate_retry_delay(attempt, error_type)
                logger.info(f"  → Retry sau {delay:.1f}s...")
                time.sleep(delay)
                return self._make_request_with_retry(model, messages, attempt + 1)
            
            # Hết retry - return error response
            self._metrics["total_requests"] += 1
            self._metrics["failed_requests"] += 1
            
            return APIResponse(
                content="",
                model=model,
                tokens_used=0,
                latency_ms=latency_ms,
                cost_usd=0,
                success=False,
                error=str(e)
            )
    
    def chat_with_fallback(
        self, 
        messages: List[Dict],
        preferred_model: Optional[str] = None
    ) -> APIResponse:
        """
        Chat với multi-tier fallback strategy
        
        Strategy:
        1. Thử model được chỉ định (hoặc model đầu tiên trong tier)
        2. Nếu thất bại sau retries → thử model tiếp theo (rẻ hơn)
        3. Tiếp tục cho đến khi có response hoặc hết model
        """
        models_to_try = [preferred_model] if preferred_model else self.config.model_tier
        
        last_error = None
        
        for i, model in enumerate(models_to_try):
            logger.info(f"Thử model: {model} (tier {i+1}/{len(models_to_try)})")
            
            response = self._make_request_with_retry(model, messages)
            
            if response.success:
                if i > 0:
                    self._metrics["fallback_count"] += 1
                    logger.info(f"  → Fallback thành công từ model đắt hơn sang {model}")
                return response
            
            last_error = response.error
            
            # Không thử model tiếp theo nếu là lỗi authentication
            if self._classify_error(Exception(last_error)) == ErrorType.AUTH_ERROR:
                logger.error("Lỗi authentication - dừng fallback ngay lập tức")
                break
        
        # Tất cả đều thất bại
        return APIResponse(
            content="",
            model=models_to_try[-1] if models_to_try else "unknown",
            tokens_used=0,
            latency_ms=0,
            cost_usd=0,
            success=False,
            error=f"Tất cả models đều thất bại. Last error: {last_error}"
        )
    
    def get_metrics(self) -> Dict[str, Any]:
        """Trả về metrics của session hiện tại"""
        return {
            **self._metrics,
            "success_rate": (
                self._metrics["successful_requests"] / max(self._metrics["total_requests"], 1)
            ) * 100,
            "avg_cost_per_request": (
                self._metrics["total_cost_usd"] / max(self._metrics["successful_requests"], 1)
            )
        }


============ SỬ DỤNG ============

if __name__ == "__main__": config = APIConfig( api_key="YOUR_HOLYSHEEP_API_KEY", # Thay bằng key thực tế max_retries=3, timeout=60 ) client = HolySheepClient(config) messages = [ {"role": "system", "content": "Bạn là trợ lý AI hữu ích."}, {"role": "user", "content": "Giải thích về error handling trong Python"} ] response = client.chat_with_fallback(messages) if response.success: print(f"\n✅ Response từ {response.model}:") print(f" Tokens: {response.tokens_used} | Latency: {response.latency_ms:.1f}ms") print(f" Cost: ${response.cost_usd:.6f}") print(f"\n{response.content[:500]}...") else: print(f"\n❌ Request thất bại: {response.error}") print(f"\n📊 Metrics: {client.get_metrics()}")

Webhook-Based Fallback System

Một tính năng quan trọng của HolySheep AI là hỗ trợ webhook cho fallback. Tôi sử dụng mô hình này để xử lý các trường hợp service chính hoàn toàn down:

import asyncio
import aiohttp
import hashlib
import hmac
import json
from typing import Optional, Callable, Dict, Any
from dataclasses import dataclass
import logging

logger = logging.getLogger(__name__)


@dataclass
class WebhookConfig:
    """Cấu hình webhook fallback"""
    webhook_url: str
    secret_key: str
    timeout: int = 30
    max_queue_size: int = 1000


@dataclass
class QueuedRequest:
    """Request được đưa vào queue khi primary fail"""
    request_id: str
    messages: list
    model: str
    timestamp: float
    priority: int = 1  # 1 = cao nhất, 5 = thấp nhất


class WebhookFallbackHandler:
    """
    Xử lý fallback qua webhook khi HolySheep API không khả dụng
    
    Use case: Khi HolySheep bảo trì hoặc quá tải, request được
    đưa vào queue và xử lý qua webhook endpoint của bạn
    """
    
    def __init__(self, config: WebhookConfig):
        self.config = config
        self._queue: asyncio.Queue = asyncio.Queue(maxsize=config.max_queue_size)
        self._is_processing = False
        self._webhook_signature_header = "x-webhook-signature"
    
    def _generate_signature(self, payload: str) -> str:
        """Tạo HMAC signature để verify webhook"""
        return hmac.new(
            self.config.secret_key.encode(),
            payload.encode(),
            hashlib.sha256
        ).hexdigest()
    
    def _verify_signature(self, payload: str, signature: str) -> bool:
        """Verify webhook signature"""
        expected = self._generate_signature(payload)
        return hmac.compare_digest(expected, signature)
    
    async def enqueue_fallback(
        self, 
        messages: list,
        model: str,
        priority: int = 3
    ) -> str:
        """
        Đưa request vào queue fallback
        
        Trả về request_id để track sau này
        """
        request_id = hashlib.md5(
            f"{messages}{model}{asyncio.time.time()}".encode()
        ).hexdigest()[:12]
        
        queued_request = QueuedRequest(
            request_id=request_id,
            messages=messages,
            model=model,
            timestamp=asyncio.time.time(),
            priority=priority
        )
        
        await self._queue.put(queued_request)
        logger.info(f"Request {request_id} được đưa vào fallback queue")
        
        # Trigger webhook nếu queue vừa được thêm
        if not self._is_processing:
            asyncio.create_task(self._process_queue())
        
        return request_id
    
    async def _process_queue(self):
        """Xử lý queue và gọi webhook"""
        self._is_processing = True
        
        while not self._queue.empty():
            try:
                request = await self._queue.get()
                
                payload = json.dumps({
                    "request_id": request.request_id,
                    "messages": request.messages,
                    "model": request.model,
                    "timestamp": request.timestamp,
                    "priority": request.priority,
                    "source": "holysheep-fallback"
                })
                
                signature = self._generate_signature(payload)
                
                async with aiohttp.ClientSession() as session:
                    async with session.post(
                        self.config.webhook_url,
                        data=payload,
                        headers={
                            "Content-Type": "application/json",
                            self._webhook_signature_header: signature
                        },
                        timeout=aiohttp.ClientTimeout(total=self.config.timeout)
                    ) as resp:
                        if resp.status == 200:
                            logger.info(
                                f"Webhook sent successfully for {request.request_id}"
                            )
                        else:
                            # Re-queue nếu webhook fail
                            await self._queue.put(request)
                            logger.warning(
                                f"Webhook failed ({resp.status}), re-queuing..."
                            )
                            await asyncio.sleep(5)
                
                self._queue.task_done()
                
            except Exception as e:
                logger.error(f"Error processing queue: {e}")
                await asyncio.sleep(1)
        
        self._is_processing = False
    
    async def handle_webhook_verification(
        self, 
        payload: str, 
        signature: str
    ) -> bool:
        """
        Verify incoming webhook (dùng trong webhook endpoint của bạn)
        """
        return self._verify_signature(payload, signature)


============ FASTAPI WEBHOOK ENDPOINT EXAMPLE ============

""" from fastapi import FastAPI, Request, Header, HTTPException import asyncio app = FastAPI() webhook_handler = WebhookFallbackHandler( config=WebhookConfig( webhook_url="https://your-app.com/webhook/process", secret_key="your-webhook-secret" ) ) @app.post("/webhook/holysheep-fallback") async def receive_fallback_request( request: Request, x_webhook_signature: str = Header(None) ): body = await request.body() body_str = body.decode() # Verify signature if not await webhook_handler.handle_webhook_verification( body_str, x_webhook_signature or "" ): raise HTTPException(status_code=401, detail="Invalid signature") data = json.loads(body_str) # Process the fallback request logger.info(f"Nhận fallback request: {data['request_id']}") # Xử lý với model rẻ hơn hoặc queue để xử lý sau # ... return {"status": "received", "request_id": data["request_id"]} """ class HybridAIClient: """ Client kết hợp: HolySheep primary + Webhook fallback Flow: 1. Gọi HolySheep API (base_url: https://api.holysheep.ai/v1) 2. Nếu fail sau retries → đưa vào webhook queue 3. Webhook endpoint xử lý request bằng model dự phòng """ def __init__( self, holysheep_config: APIConfig, webhook_config: Optional[WebhookConfig] = None ): self.holysheep = HolySheepClient(holysheep_config) self.webhook = WebhookFallbackHandler(webhook_config) if webhook_config else None self._pending_requests: Dict[str, asyncio.Future] = {} async def chat( self, messages: list, model: str = "deepseek-v3.2", enable_webhook_fallback: bool = True ) -> Dict[str, Any]: """ Chat với hybrid fallback: HolySheep → Retry → Webhook Queue (nếu enable) """ # Thử HolySheep trước response = self.holysheep.chat_with_fallback(messages, model) if response.success: return { "success": True, "response": response.content, "model": response.model, "tokens": response.tokens_used, "latency_ms": response.latency_ms, "cost_usd": response.cost_usd, "source": "holysheep" } # HolySheep fail - thử webhook fallback if enable_webhook_fallback and self.webhook: logger.warning("HolySheep fail - chuyển sang webhook fallback") request_id = await self.webhook.enqueue_fallback( messages, model, priority=2 ) return { "success": False, "response": None, "request_id": request_id, "status": "queued_for_fallback", "message": f"Request đã được đưa vào queue. ID: {request_id}" } return { "success": False, "error": response.error, "source": "holysheep" }

============ DEMO USAGE ============

async def demo(): holysheep_config = APIConfig( api_key="YOUR_HOLYSHEEP_API_KEY", max_retries=3, timeout=30 ) # Khởi tạo hybrid client client = HybridAIClient( holysheep_config=holysheep_config, webhook_config=None # Bỏ qua webhook trong demo ) messages = [ {"role": "user", "content": "So sánh chi phí giữa DeepSeek V3.2 và GPT-4.1"} ] result = await client.chat(messages, model="deepseek-v3.2") if result["success"]: print(f"✅ Từ {result['source']} ({result['model']})") print(f" Latency: {result['latency_ms']:.1f}ms") print(f" Cost: ${result['cost_usd']:.4f}") print(f" Response: {result['response'][:200]}...") else: print(f"❌ {result.get('message', result.get('error', 'Unknown error'))}") if __name__ == "__main__": asyncio.run(demo())

Rate Limiting Và Request Queueing Thông Minh

Trong production, rate limiting là vấn đề quan trọng. Dưới đây là implementation với token bucket algorithm và smart queueing:

import time
import threading
from collections import deque
from typing import Optional, Callable
import logging

logger = logging.getLogger(__name__)


class TokenBucket:
    """
    Token Bucket algorithm cho rate limiting
    
    HolySheep AI có rate limit tùy thuộc vào tier:
    - Free tier: 60 requests/phút
    - Pro tier: 600 requests/phút  
    - Enterprise: Custom limits
    """
    
    def __init__(self, rate: float, capacity: int):
        """
        Args:
            rate: Số tokens được thêm mỗi giây
            capacity: Dung lượng bucket (max tokens có thể tích lũy)
        """
        self.rate = rate
        self.capacity = capacity
        self._tokens = capacity
        self._last_update = time.time()
        self._lock = threading.Lock()
    
    def consume(self, tokens: int = 1) -> bool:
        """
        Thử consume tokens
        
        Returns:
            True nếu đủ tokens, False nếu phải wait
        """
        with self._lock:
            now = time.time()
            elapsed = now - self._last_update
            
            # Thêm tokens theo thời gian trôi qua
            self._tokens = min(
                self.capacity,
                self._tokens + elapsed * self.rate
            )
            self._last_update = now
            
            if self._tokens >= tokens:
                self._tokens -= tokens
                return True
            return False
    
    def get_wait_time(self, tokens: int = 1) -> float:
        """Tính thời gian chờ để có đủ tokens"""
        with self._lock:
            if self._tokens >= tokens:
                return 0.0
            return (tokens - self._tokens) / self.rate


class SmartRequestQueue:
    """
    Queue thông minh với priority và burst handling
    
    Features:
    - Priority queue (1-5, 1 = cao nhất)
    - Burst protection
    - Adaptive rate limiting
    """
    
    def __init__(
        self,
        rate_limit: int = 60,  # requests per minute
        burst_size: int = 10,  # max burst
        max_queue_size: int = 10000
    ):
        self.rate_limit = rate_limit
        self.burst_size = burst_size
        self.max_queue_size = max_queue_size
        
        # Token bucket cho rate limiting
        self.bucket = TokenBucket(
            rate=rate_limit / 60.0,  # tokens per second
            capacity=burst_size
        )
        
        # Priority queues (5 levels)
        self.queues = {i: deque() for i in range(1, 6)}
        self._lock = threading.Lock()
        self._processing = False
    
    def enqueue(
        self,
        request_id: str,
        payload: dict,
        priority: int = 3
    ) -> tuple[bool, Optional[float]]:
        """
        Thêm request vào queue
        
        Returns:
            (success, estimated_wait_time)
        """
        if priority < 1 or priority > 5:
            priority = 3
        
        with self._lock:
            total_size = sum(len(q) for q in self.queues.values())
            
            if total_size >= self.max_queue_size:
                logger.warning(f"Queue full! Total: {total_size}")
                return False, None
            
            self.queues[priority].append({
                "id": request_id,
                "payload": payload,
                "enqueued_at": time.time()
            })
            
            wait_time = self._estimate_wait_time(priority)
            return True, wait_time
    
    def _estimate_wait_time(self, priority: int) -> float:
        """Ước tính thời gian chờ cho request priority X"""
        # Đếm số requests có priority cao hơn hoặc bằng
        higher_priority_count = sum(
            len(self.queues[p]) for p in range(1, priority + 1)
        )
        
        # Ước tính: mỗi request mất ~1 giây (bao gồm API call)
        # Nhưng có burst buffer nên tính theo rate limit
        estimated_seconds = higher_priority_count * (60.0 / self.rate_limit)
        return max(0, estimated_seconds)
    
    def dequeue(self) -> Optional[dict]:
        """
        Lấy request từ queue theo priority
        
        Returns:
            Request dict hoặc None nếu empty/rate limited
        """
        # Kiểm tra rate limit
        if not self.bucket.consume(1):
            wait_time = self.bucket.get_wait_time(1)
            logger.debug(f"Rate limited, wait {wait_time:.2f}s")
            return None
        
        with self._lock:
            # Tìm queue có priority cao nhất có request
            for priority in range(1, 6):
                if self.queues[priority]:
                    return self.queues[priority].popleft()
            
            return None
    
    def get_stats(self) -> dict:
        """Lấy statistics của queue"""
        with self._lock:
            total = sum(len(q) for q in self.queues.values())
            return {
                "total_pending": total,
                "priority_breakdown": {
                    f"p{p}": len(q) for p, q in self.queues.items()
                },
                "rate_limit": self.rate_limit,
                "burst_size": self.burst_size,
                "available_tokens": self.bucket._tokens
            }


class RateLimitedHolySheepClient:
    """
    HolySheep Client với rate limiting thông minh
    
    Kết hợp:
    - Token bucket cho burst protection
    - Priority queue cho request management
    - Automatic retry khi rate limited
    """
    
    def __init__(
        self,
        api_key: str,
        rpm: int = 60,  # Requests per minute
        burst: int = 10
    ):
        self.base_url = "https://api.holysheep.ai/v1"
        self.api_key = api_key
        self.queue = SmartRequestQueue(rate_limit=rpm, burst_size=burst)
        self._request_count = 0
        self._minute_start = time.time()
    
    def _check_and_reset_counter(self):
        """Reset counter mỗi phút"""
        if time.time() - self._minute_start >= 60:
            self._request_count = 0
            self._minute_start = time.time()
    
    async def chat_async(
        self,
        messages: list,
        model: str = "deepseek-v3.2",
        priority: int = 3,
        timeout: float = 30.0
    ) -> dict:
        """
        Gửi request với rate limiting
        
        Flow:
        1. Enqueue request với priority
        2. Chờ đến lượt (với timeout)
        3. Gọi HolySheep API
        4. Retry nếu rate limited
        """
        import aiohttp
        
        request_id = f"{int(time.time()*1000)}-{self._request_count}"
        
        # Enqueue
        success, wait_time = self.queue.enqueue(
            request_id,
            {"messages": messages, "model": model},
            priority
        )
        
        if not success:
            return {
                "success": False,
                "error": "Queue is full",
                "request_id": request_id
            }
        
        if wait_time and wait_time > timeout:
            return {
                "success": False,
                "error": f"Estimated wait time {wait_time:.1f}s exceeds timeout",
                "request_id": request_id
            }
        
        # Chờ và lấy request từ queue
        start_wait = time.time()
        request = None
        
        while time.time() - start_wait < timeout:
            request = self.queue.dequeue()
            if request:
                break
            await asyncio.sleep(0.1)
        
        if not request:
            return {
                "success": False,
                "error": "Timeout waiting in queue",
                "request_id": request_id
            }
        
        # Gọi API
        headers = {
            "Authorization": f"Bearer {self.api_key}",
            "Content-Type": "application/json"
        }
        
        payload = {
            "model": model,
            "messages": messages,
            "temperature": 0.7,
            "max_tokens": 2048
        }
        
        for attempt in range(3):
            try:
                async with aiohttp.ClientSession() as session:
                    async with session.post(
                        f"{self.base_url}/chat/completions",
                        headers=headers,
                        json=payload,
                        timeout=aiohttp.ClientTimeout(total=timeout)
                    ) as resp:
                        if resp.status == 429:
                            # Rate limited - retry sau delay
                            retry_after = int(resp.headers.get("Retry-After", 1))
                            await asyncio.sleep(retry_after)
                            continue
                        
                        data = await resp.json()
                        
                        return {
                            "success":