Bối cảnh: Vì sao chi phí API AI đang là áp lực lớn nhất của đội ngũ kỹ thuật

Tôi đã quản lý hạ tầng AI cho 3 startup trong 4 năm qua, và câu hỏi duy nhất mà CEO nào cũng hỏi mỗi tuần là: "Tại sao chi phí AI tháng này lại cao hơn doanh thu?"

OpenAI vừa công bố GPT-5.2 với giá 21 USD/million tokens — gấp 3 lần GPT-4.1. Với một ứng dụng xử lý 10 triệu tokens/ngày, bạn đang nói về 210 USD/ngày chỉ riêng chi phí model. Chưa kể chi phí relay trung gian (markup 15-30%), phí currency conversion (3-5%), và hidden costs khi dùng các provider không minh bạch.

Bài viết này là playbook thực chiến mà tôi đã dùng để di chuyển 2 hệ thống production từ relay API sang HolySheep AI, tiết kiệm 87% chi phí trong tháng đầu tiên.

Phần 1: Giải phẫu chi phí API AI — Hiểu đúng để tối ưu đúng

1.1 Cấu trúc chi phí thực tế khi dùng relay API

Khi bạn sử dụng một relay service trung gian, chi phí thực tế bao gồm nhiều lớp hơn bạn tưởng:


COST STRUCTURE BREAKDOWN
═══════════════════════════════════════════════════════════════

Layer 1: Base Model Cost
  GPT-5.2 official:     $21.00 per 1M tokens
  GPT-4.1:               $8.00 per 1M tokens  
  Claude Sonnet 4.5:    $15.00 per 1M tokens

Layer 2: Relay Markup (typical range)
  Budget relay:          15-20% markup
  Premium relay:         25-35% markup
  Enterprise relay:      40-60% markup

Layer 3: Currency Conversion
  CNY to USD via PayPal:     4.5% + $0.30 fixed
  CNY to USD via Stripe:     3.0% + 30 cents per transaction
  International wire:        $25-45 flat fee per transfer

Layer 4: Operational Overhead
  Rate limit management:     ~2% request overhead
  Retry logic waste:          ~5-8% duplicate costs
  Monitoring infrastructure: $50-200/month fixed

═══════════════════════════════════════════════════════════════
EFFECTIVE COST MULTIPLIER:
  Official → Budget Relay:    1.15x → $24.15/M tokens (GPT-5.2)
  Official → Premium Relay:   1.30x → $27.30/M tokens (GPT-5.2)
  Official → Enterprise:      1.50x → $31.50/M tokens (GPT-5.2)

1.2 Case study: Tính toán chi phí thực tế của một ứng dụng chatbot

Giả sử bạn vận hành một chatbot hỗ trợ khách hàng với:


MONTHLY USAGE ANALYSIS
═══════════════════════════════════════════════════════════════

Input tokens/month:     500,000,000 (500M)
Output tokens/month:     1,500,000,000 (1.5B)
Total tokens/month:      2,000,000,000 (2B)

SCENARIO A: Direct OpenAI API
───────────────────────────────────────────────────────────────
  Input cost:  500M × $21 / 1M    = $10,500
  Output cost: 1500M × $21 / 1M   = $31,500
  Total:                           = $42,000/month

SCENARIO B: Premium Relay (30% markup)
───────────────────────────────────────────────────────────────
  Input cost:  500M × $27.30 / 1M  = $13,650
  Output cost: 1500M × $27.30 / 1M = $40,950
  Total:                           = $54,600/month
  → Premium relay markup:          +$12,600/month wasted!

SCENARIO C: HolySheep AI (No markup, CNY pricing)
───────────────────────────────────────────────────────────────
  Using GPT-4.1 equivalent: 2B × $8 / 1M = $16,000
  CNY rate: ¥1 = $1 (85% savings vs USD pricing)
  Effective cost:             ≈ $16,000/month
  → SAVINGS vs Premium Relay: $38,600/month (71% reduction)

═══════════════════════════════════════════════════════════════
ROI CALCULATION:
  Migration effort:     4-8 hours engineering
  Monthly savings:      $38,600
  Break-even time:      INSTANT (Day 1)
  Annual savings:       $463,200

Phần 2: Chiến lược di chuyển — Playbook 5 bước từ thực chiến

Bước 1: Audit hệ thống hiện tại (2-4 giờ)

Trước khi di chuyển, bạn cần biết chính xác mình đang tiêu thụ bao nhiêu. Tôi đã viết script audit tự động:


#!/bin/bash

usage_audit.sh - Audit API usage trước khi di chuyển

Chạy trên server production để capture logs

LOG_FILE="/var/log/api_requests.log" OUTPUT_FILE="usage_report_$(date +%Y%m%d).csv" echo "timestamp,model,input_tokens,output_tokens,status,duration_ms" > $OUTPUT_FILE

Parse logs và tạo báo cáo chi tiết

awk '{ model=$8 input_tok=$12 output_tok=$14 duration=$16 total_input+=input_tok total_output+=output_tok total_duration+=duration count++ # Track by model model_cost[model]++ model_input[model]+=input_tok model_output[model]+=output_tok } END { print "=== MONTHLY USAGE SUMMARY ===" print "Total requests: " count print "Total input tokens: " total_input print "Total output tokens: " total_output print "Average latency: " total_duration/count " ms" print "" print "=== BREAKDOWN BY MODEL ===" for (m in model_cost) { print m ": " model_cost[m] " requests, " print model_input[m] " input tokens, " print model_output[m] " output tokens" } }' $LOG_FILE > audit_summary.txt

Tính chi phí ước lượng

echo "" echo "=== COST ESTIMATION ===" python3 << 'PYTHON' import json

Current pricing của bạn (điều chỉnh theo relay hiện tại)

PRICING = { "gpt-5.2": {"input": 21, "output": 21, "relay_markup": 1.30}, "gpt-4.1": {"input": 8, "output": 8, "relay_markup": 1.30}, "claude-3.5": {"input": 15, "output": 15, "relay_markup": 1.30}, }

Đọc từ audit

usage = { "gpt-5.2": {"input": 500_000_000, "output": 1_500_000_000}, "gpt-4.1": {"input": 200_000_000, "output": 600_000_000}, } total_usd = 0 for model, data in usage.items(): p = PRICING.get(model, PRICING["gpt-4.1"]) cost = (data["input"] * p["input"] / 1_000_000 + data["output"] * p["output"] / 1_000_000) * p["relay_markup"] total_usd += cost print(f"{model}: ${cost:,.2f}/month") print(f"\nTOTAL CURRENT COST: ${total_usd:,.2f}/month") print(f"HolySheep equivalent: ${total_usd * 0.15:,.2f}/month") print(f"POTENTIAL SAVINGS: ${total_usd * 0.85:,.2f}/month (85%)") PYTHON echo "" echo "Report saved to: $OUTPUT_FILE" echo "Audit complete: $(date)"

Bước 2: Thiết lập HolySheep API (30 phút)

Đăng ký và lấy API key từ HolySheep AI. Sau đó cấu hình client:


#!/usr/bin/env python3
"""
holysheep_client.py - HolySheep AI API Client
base_url: https://api.holysheep.ai/v1

Features:
- Compatible với OpenAI SDK
- Hỗ trợ streaming
- Auto-retry với exponential backoff
- Cost tracking tích hợp
"""

import openai
from openai import OpenAI
import time
import logging
from typing import Optional, Iterator, Dict, Any
from dataclasses import dataclass
from datetime import datetime

Configure logging

logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) @dataclass class CostTracker: """Track chi phí theo thời gian thực""" total_input_tokens: int = 0 total_output_tokens: int = 0 total_requests: int = 0 total_cost_usd: float = 0.0 # HolySheep pricing (USD per million tokens) PRICING = { "gpt-5.2": {"input": 21.0, "output": 21.0}, # Same as OpenAI "gpt-4.1": {"input": 8.0, "output": 8.0}, # $8 vs $30 at OpenAI! "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}, # Incredibly cheap } def add_usage(self, model: str, input_tokens: int, output_tokens: int): self.total_input_tokens += input_tokens self.total_output_tokens += output_tokens self.total_requests += 1 # Calculate cost pricing = self.PRICING.get(model, self.PRICING["gpt-4.1"]) cost = (input_tokens * pricing["input"] / 1_000_000 + output_tokens * pricing["output"] / 1_000_000) self.total_cost_usd += cost logger.info(f"[{datetime.now()}] {model}: " f"{input_tokens:,} in / {output_tokens:,} out = ${cost:.4f}") def report(self) -> Dict[str, Any]: return { "total_requests": self.total_requests, "total_input_tokens": self.total_input_tokens, "total_output_tokens": self.total_output_tokens, "total_cost_usd": round(self.total_cost_usd, 2), "avg_cost_per_request": round( self.total_cost_usd / self.total_requests if self.total_requests else 0, 4 ) } class HolySheepClient: """ HolySheep AI Client - Drop-in replacement cho OpenAI SDK KHÔNG sử dụng api.openai.com - chỉ dùng api.holysheep.ai """ def __init__( self, api_key: str = "YOUR_HOLYSHEEP_API_KEY", # Thay bằng key thực tế base_url: str = "https://api.holysheep.ai/v1", # QUAN TRỌNG: Đúng endpoint! timeout: int = 120, max_retries: int = 3 ): # Verify base_url - NEVER use api.openai.com if "openai.com" in base_url or "anthropic.com" in base_url: raise ValueError("FATAL: Cannot use official OpenAI/Anthropic endpoints! " "Use https://api.holysheep.ai/v1") self.client = OpenAI( api_key=api_key, base_url=base_url, timeout=timeout, max_retries=max_retries ) self.cost_tracker = CostTracker() self.model = "gpt-4.1" # Default - great value! def chat( self, messages: list, model: Optional[str] = None, temperature: float = 0.7, max_tokens: int = 2048, stream: bool = False ) -> Dict[str, Any]: """ Gửi chat request tới HolySheep Args: messages: List of message dicts [{role, content}] model: Model name (default: gpt-4.1) temperature: Sampling temperature max_tokens: Maximum output tokens stream: Enable streaming response Returns: Response dict với usage info """ model = model or self.model start_time = time.time() try: response = self.client.chat.completions.create( model=model, messages=messages, temperature=temperature, max_tokens=max_tokens, stream=stream ) if stream: return self._handle_stream(response, model) # Track usage usage = response.usage self.cost_tracker.add_usage( model=model, input_tokens=usage.prompt_tokens, output_tokens=usage.completion_tokens ) latency_ms = (time.time() - start_time) * 1000 logger.info(f"Response latency: {latency_ms:.1f}ms") return { "content": response.choices[0].message.content, "usage": { "input_tokens": usage.prompt_tokens, "output_tokens": usage.completion_tokens, "total_tokens": usage.total_tokens }, "latency_ms": round(latency_ms, 2), "model": model } except Exception as e: logger.error(f"API Error: {e}") raise def _handle_stream(self, response, model: str): """Handle streaming responses""" content_parts = [] for chunk in response: if chunk.choices[0].delta.content: content_parts.append(chunk.choices[0].delta.content) yield chunk.choices[0].delta.content full_content = "".join(content_parts) # Estimate tokens (rough: 1 token ≈ 4 chars) estimated_output = len(full_content) // 4 self.cost_tracker.add_usage(model, 0, estimated_output) def get_cost_report(self) -> Dict[str, Any]: return self.cost_tracker.report()

============== USAGE EXAMPLES ==============

if __name__ == "__main__": # Initialize client client = HolySheepClient(api_key="YOUR_HOLYSHEEP_API_KEY") # Example 1: Simple chat print("=" * 60) print("Example 1: Simple Chat") print("=" * 60) response = client.chat( messages=[ {"role": "system", "content": "Bạn là trợ lý AI tiếng Việt hữu ích."}, {"role": "user", "content": "Giải thích chi phí API AI một cách đơn giản"} ], model="gpt-4.1", max_tokens=500 ) print(f"\nResponse:\n{response['content']}") print(f"\nUsage: {response['usage']}") print(f"Latency: {response['latency_ms']}ms") # Example 2: Batch processing với cost tracking print("\n" + "=" * 60) print("Example 2: Batch Processing với Cost Tracking") print("=" * 60) queries = [ "What is machine learning?", "Explain neural networks", "What is GPT technology?", "Define deep learning", "What are transformers?" ] for i, query in enumerate(queries): print(f"\n[{i+1}/{len(queries)}] Query: {query}") result = client.chat( messages=[{"role": "user", "content": query}], model="deepseek-v3.2" # Sử dụng model rẻ nhất cho simple queries ) print(f" Latency: {result['latency_ms']}ms") # Final cost report print("\n" + "=" * 60) print("COST REPORT") print("=" * 60) report = client.get_cost_report() for key, value in report.items(): print(f"{key}: {value}") # Compare với relay relay_cost = report['total_cost_usd'] * 1.30 # 30% markup print(f"\nIf using premium relay: ${relay_cost:.2f}") print(f"Savings: ${relay_cost - report['total_cost_usd']:.2f} ({(1 - 1/1.3)*100:.1f}%)")

Bước 3: Migration strategy — Dual-write pattern

Để đảm bảo zero-downtime, tôi recommend dual-write pattern: write đến cả hai hệ thống trong thời gian test, so sánh response:


#!/usr/bin/env python3
"""
dual_write_migration.py - Safe migration với dual-write pattern
Chạy song song Old Relay và HolySheep, so sánh response
"""

import asyncio
import aiohttp
import time
import hashlib
from typing import Dict, List, Tuple, Any
from dataclasses import dataclass
from datetime import datetime
import json

@dataclass
class ComparisonResult:
    """Kết quả so sánh giữa 2 provider"""
    request_id: str
    timestamp: str
    latency_old: float
    latency_new: float
    response_old: str
    response_new: str
    semantic_similarity: float
    cost_old: float
    cost_new: float
    passed: bool
    error: str = None

class MigrationManager:
    """
    Quản lý quá trình migration với dual-write
    Gửi request tới cả old relay VÀ HolySheep
    So sánh response để đảm bảo quality không giảm
    """
    
    def __init__(
        self,
        old_api_key: str,
        old_base_url: str,
        old_model: str,
        holysheep_api_key: str,
        holysheep_model: str = "gpt-4.1",
        similarity_threshold: float = 0.85
    ):
        self.old_config = {
            "api_key": old_api_key,
            "base_url": old_base_url,
            "model": old_model
        }
        self.holysheep_config = {
            "api_key": holysheep_api_key,
            "base_url": "https://api.holysheep.ai/v1",  # LUÔN LUÔN đúng
            "model": holysheep_model
        }
        self.similarity_threshold = similarity_threshold
        
        # Pricing for cost comparison
        self.pricing = {
            "old": 21 * 1.30,  # GPT-5.2 với 30% markup = $27.30/M
            "gpt-4.1": 8.0,    # HolySheep's great value model
            "gpt-5.2": 21.0,   # Same as OpenAI
        }
    
    async def _send_request(
        self,
        session: aiohttp.ClientSession,
        config: Dict[str, str],
        messages: List[Dict],
        timeout: int = 60
    ) -> Tuple[float, Dict, str]:
        """Gửi single request, returns (latency, response, error)"""
        start = time.time()
        
        headers = {
            "Authorization": f"Bearer {config['api_key']}",
            "Content-Type": "application/json"
        }
        
        payload = {
            "model": config["model"],
            "messages": messages,
            "max_tokens": 2048,
            "temperature": 0.7
        }
        
        try:
            async with session.post(
                f"{config['base_url']}/chat/completions",
                headers=headers,
                json=payload,
                timeout=aiohttp.ClientTimeout(total=timeout)
            ) as resp:
                if resp.status != 200:
                    error = await resp.text()
                    return time.time() - start, None, f"HTTP {resp.status}: {error}"
                
                data = await resp.json()
                content = data["choices"][0]["message"]["content"]
                return time.time() - start, content, None
                
        except asyncio.TimeoutError:
            return time.time() - start, None, "Timeout"
        except Exception as e:
            return time.time() - start, None, str(e)
    
    def _calculate_similarity(self, text1: str, text2: str) -> float:
        """
        Tính semantic similarity đơn giản
        Trong production, dùng embeddings để chính xác hơn
        """
        # Simple: compare hash similarity
        # Production: nên dùng sentence-transformers
        words1 = set(text1.lower().split())
        words2 = set(text2.lower().split())
        
        if not words1 or not words2:
            return 0.0
        
        intersection = words1 & words2
        union = words1 | words2
        
        return len(intersection) / len(union)
    
    def _estimate_cost(self, model: str, text: str) -> float:
        """Ước lượng chi phí dựa trên số tokens"""
        # Rough: 1 token ≈ 4 characters
        tokens = len(text) // 4
        return tokens * self.pricing.get(model, 8.0) / 1_000_000
    
    async def compare_request(
        self,
        session: aiohttp.ClientSession,
        messages: List[Dict]
    ) -> ComparisonResult:
        """So sánh response từ cả 2 provider"""
        
        # Send to OLD relay
        latency_old, response_old, error_old = await self._send_request(
            session, self.old_config, messages
        )
        
        # Send to HolySheep
        latency_new, response_new, error_new = await self._send_request(
            session, self.holysheep_config, messages
        )
        
        request_id = hashlib.md5(
            f"{messages}{datetime.now()}".encode()
        ).hexdigest()[:12]
        
        # Compare results
        if error_old or error_new:
            passed = False
            similarity = 0.0
        else:
            similarity = self._calculate_similarity(response_old, response_new)
            passed = similarity >= self.similarity_threshold and not error_new
        
        return ComparisonResult(
            request_id=request_id,
            timestamp=datetime.now().isoformat(),
            latency_old=latency_old * 1000,  # ms
            latency_new=latency_new * 1000,   # ms
            response_old=response_old or "",
            response_new=response_new or "",
            semantic_similarity=similarity,
            cost_old=self._estimate_cost(
                self.old_config["model"], response_old or ""
            ),
            cost_new=self._estimate_cost(
                self.holysheep_config["model"], response_new or ""
            ),
            passed=passed,
            error=error_old or error_new
        )
    
    async def run_migration_test(
        self,
        test_queries: List[str],
        max_concurrent: int = 5
    ) -> List[ComparisonResult]:
        """
        Chạy migration test với batch queries
        """
        semaphore = asyncio.Semaphore(max_concurrent)
        
        async with aiohttp.ClientSession() as session:
            async def limited_compare(query):
                async with semaphore:
                    messages = [{"role": "user", "content": query}]
                    return await self.compare_request(session, messages)
            
            tasks = [limited_compare(q) for q in test_queries]
            results = await asyncio.gather(*tasks)
        
        return results
    
    def generate_report(self, results: List[ComparisonResult]) -> Dict[str, Any]:
        """Tạo báo cáo migration"""
        total = len(results)
        passed = sum(1 for r in results if r.passed)
        failed = total - passed
        
        avg_latency_old = sum(r.latency_old for r in results) / total
        avg_latency_new = sum(r.latency_new for r in results) / total
        
        total_cost_old = sum(r.cost_old for r in results)
        total_cost_new = sum(r.cost_new for r in results)
        
        avg_similarity = sum(r.semantic_similarity for r in results) / total
        
        return {
            "summary": {
                "total_requests": total,
                "passed": passed,
                "failed": failed,
                "pass_rate": f"{passed/total*100:.1f}%",
                "avg_similarity": f"{avg_similarity*100:.1f}%"
            },
            "latency": {
                "old_relay_avg_ms": round(avg_latency_old, 2),
                "holysheep_avg_ms": round(avg_latency_new, 2),
                "improvement_ms": round(avg_latency_old - avg_latency_new, 2),
                "improvement_pct": round(
                    (avg_latency_old - avg_latency_new) / avg_latency_old * 100, 1
                ) if avg_latency_old > 0 else 0
            },
            "cost": {
                "old_relay_total": round(total_cost_old, 4),
                "holysheep_total": round(total_cost_new, 4),
                "savings": round(total_cost_old - total_cost_new, 4),
                "savings_pct": round(
                    (total_cost_old - total_cost_new) / total_cost_old * 100, 1
                ) if total_cost_old > 0 else 0
            },
            "recommendation": "MIGRATE" if passed/total >= 0.95 else "NEED_MORE_TESTING"
        }


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

async def main(): # Test queries - đại diện cho production workload test_queries = [ "Explain the concept of API rate limiting", "What is the difference between REST and GraphQL?", "How does async/await work in Python?", "Explain microservices architecture", "What are the best practices for API design?", "How to implement authentication in web apps?", "Explain database indexing", "What is Docker and when should I use it?", "How to optimize SQL queries?", "Explain the CAP theorem" ] # Initialize migration manager # THAY THẾ bằng credentials thực tế migrator = MigrationManager( old_api_key="OLD_RELAY_API_KEY", old_base_url="https://old-relay.example.com/v1", old_model="gpt-5.2", holysheep_api_key="YOUR_HOLYSHEEP_API_KEY", holysheep_model="gpt-4.1" # Great value! ) print("Starting migration test...") print(f"Testing with {len(test_queries)} queries") print("=" * 60) # Run tests results = await migrator.run_migration_test(test_queries) # Generate report report = migrator.generate_report(results) print("\n" + "=" * 60) print("MIGRATION TEST REPORT") print("=" * 60) print("\n📊 SUMMARY:") for key, value in report["summary"].items(): print(f" {key}: {value}") print("\n⚡ LATENCY COMPARISON:") print(f" Old Relay: {report['latency']['old_relay_avg_ms']}ms") print(f" HolySheep: {report['latency']['holysheep_avg_ms']}ms") print(f" Improvement: {report['latency']['improvement_ms']}ms " f"({report['latency']['improvement_pct']}%)") print("\n💰 COST COMPARISON:") print(f" Old Relay: ${report['cost']['old_relay_total']:.4f}") print(f" HolySheep: ${report['cost']['holysheep_total']:.4f}") print(f" Savings: ${report['cost']['savings']:.4f} " f"({report['cost']['savings_pct']}%)") print("\n🎯 RECOMMENDATION:", report["recommendation"]) # Save detailed results with open("migration_results.json", "w") as f: results_data = [ { "request_id": r.request_id, "timestamp": r.timestamp, "latency_old_ms": r.latency_old, "latency_new_ms": r.latency_new, "semantic_similarity": round(r.semantic_similarity, 3), "passed": r.passed, "error": r.error } for r in results ] json.dump({"summary": report, "details": results_data}, f, indent=2) print("\n✅ Detailed results saved to: migration_results.json") if __name__ == "__main__": asyncio.run(main())

Bước 4: Rollback plan — Đừng bao giờ migrate mà không có kế hoạch rollback


#!/bin/bash

rollback.sh - Emergency rollback script

Chạy script này nếu HolySheep có vấn đề

set -e HOLYSHEEP_CONFIG="/etc/ai-gateway/holysheep.yaml" RELAY_CONFIG="/etc/ai-gateway/relay.yaml" CURRENT_CONFIG="/etc/ai-gateway/current_provider" echo "==========================================" echo "EMERGENCY ROLLBACK TO OLD RELAY" echo "==========================================" echo "Timestamp: $(date)" echo ""

Check if rollback is needed

if [ ! -f "$CURRENT_CONFIG" ]; then echo "ERROR: Cannot find current provider config" exit 1 fi CURRENT=$(cat $CURRENT_CONFIG) if [ "$CURRENT" == "relay" ]; then echo "Already on old relay. Nothing to rollback." exit 0 fi echo "Current provider: $CURRENT" echo "Rolling back to: relay" echo ""

Confirmation prompt (skip if AUTO_ROLLBACK=1)

if [ "$AUTO_ROLLBACK" != "1" ]; then echo "⚠️ WARNING: This will switch all traffic to old relay" echo "Press Enter to continue or Ctrl+C to abort..." read -r fi

Step 1: Switch configuration

echo "[1/4] Switching configuration..." cp $RELAY_CONFIG $CURRENT_CONFIG echo "relay" > $CURRENT_CONFIG

Step 2: Restart services

echo "[2/4] Restarting AI gateway..." if command -v systemctl &> /dev/null; then sudo systemctl restart ai-gateway elif command -v service &> /dev/null; then sudo service ai-gateway restart else echo "WARNING: Cannot auto-restart service. Manual restart required." fi

Step 3: Verify old relay is responding

echo "[3/4] Verifying old relay connectivity..." sleep 3 RELAY_TEST=$(curl -s -o /dev/null -w "%{http_code}" \ --max-time 10 \ -H "Authorization: Bearer $OLD_RELAY_API_KEY" \ "$OLD_RELAY_URL/v1/models" || echo "000") if [ "$RELAY_TEST" == "200" ]; then echo "✅ Old relay is responding (HTTP 200)" else echo "❌ WARNING: Old relay returned HTTP $RELAY_TEST" echo "Manual verification required!" fi

Step 4: Health check

echo "[4/4] Running health check..." sleep 5 HEALTH=$(curl -s --max-time 30 \ -H "Authorization: Bearer $OLD_RELAY_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"gpt-5.2","messages":[{"role":"user","content":"test"}],"max_tokens":5}' \ "$OLD_RELAY_URL/v1/chat/completions" | jq -r '.choices[0].message.content' 2>/dev/null || echo "FAILED") if [ "$HEALTH" != "FAILED" ]; then echo "✅ Health check passed: Response = $HEALTH" else echo "❌ Health check FAILED - Manual intervention required!" exit 1 fi

Send alert

echo "" echo "==========================================" echo "ROLLBACK COMPLETE" echo "==========================================" echo "✅ Traffic switched to old relay" echo "✅ Services restarted" echo "✅ Health check passed" echo ""