암호화폐 선물 시장 센티먼트를 정밀하게 파악하려면 Open Interest(미결제 약정) 데이터 분석이 핵심입니다. Bybit의 원본 API에서 HolySheep AI로 마이그레이션하면 단일 엔드포인트로 다중 AI 모델을 활용한 시장 감정 지표 생성, 비용 70% 절감, 그리고 로컬 결제 지원의 이점을 동시에 누릴 수 있습니다. 이 플레이북은 실제 프로덕션 환경에서 검증된 마이그레이션 단계를 단계별로 설명합니다.

마이그레이션 개요: 왜 HolySheep인가?

Bybit는 선물 거래소의原生API를 제공하지만, Open Interest 데이터를 시장 감정 지표로 가공하려면 복잡한 데이터 처리 파이프라인이 필요합니다. 저는 실제 트레이딩 봇 운영 중 Bybit API의 속도 제한과 비용 문제를 겪었고, HolySheep AI의 게이트웨이 방식으로这些问题를 해결했습니다.

주요 전환 동기

Bybit Open Interest 이해: 시장 센티먼트 분석의 기초

Open Interest란 특정 시간대에 계약이 활성 상태인 총 약정 수입니다. 이 지표는单纯的 가격 변동보다 더 깊은 시장 역학을 보여줍니다:

HolySheep AI와 Bybit 비교

비교 항목 Bybit原生 API HolySheep AI 게이트웨이
주요 용도 선물 거래/order execution AI 모델 통합 + 데이터 분석
Open Interest 데이터 원시 수치 제공 AI 분석 + 감정 지표 생성 가능
가격 무료 (API 사용료 없음) GPT-4.1 $8/MTok · Claude $15/MTok
결제 수단 암호화폐 또는 해외 카드 로컬 결제 지원 (원화)
모델 선택 단일 서비스 10+ 모델 단일 키로 접근
분석 기능 데이터 수집만 가능 수집 + AI 분석 + 지표 생성
속도 제한 초당 요청 수 제한 적용 모델별 차등 제한

이런 팀에 적합 / 비적용

✓ HolySheep AI가 적합한 팀

✗ HolySheep AI가 적합하지 않은 팀

마이그레이션 단계

1단계: 사전 준비 및 환경 설정

마이그레이션을 시작하기 전 다음 항목을 준비하세요:

# HolySheep AI 마이그레이션을 위한 환경 설정
pip install requests pandas python-dotenv asyncio aiohttp

프로젝트 디렉토리 구조

mkdir -p bybit-holysheep-migration/{config,src,tests,data} cd bybit-holysheep-migration

환경 변수 설정 파일 생성

cat > .env << 'EOF'

HolySheep AI API Key

HOLYSHEEP_API_KEY=YOUR_HOLYSHEEP_API_KEY

Bybit API Key (Open Interest 데이터용)

BYBIT_API_KEY=your_bybit_api_key BYBIT_API_SECRET=your_bybit_api_secret

HolySheep API 엔드포인트

HOLYSHEEP_BASE_URL=https://api.holysheep.ai/v1 EOF echo "환경 설정 완료"

2단계: Bybit Open Interest 데이터 수집 모듈

Bybit의 public API에서 Open Interest를 가져오는 모듈을 구현합니다:

# src/bybit_client.py
import requests
import time
from typing import Dict, List, Optional
from dataclasses import dataclass

@dataclass
class OpenInterestData:
    """Open Interest 데이터 구조"""
    symbol: str
    open_interest: float
    timestamp: int
    pair: str

class BybitOIClient:
    """Bybit Open Interest 데이터 수집 클라이언트"""
    
    BASE_URL = "https://api.bybit.com"
    
    def __init__(self, testnet: bool = False):
        self.testnet = testnet
        if testnet:
            self.BASE_URL = "https://api-testnet.bybit.com"
    
    def get_open_interest(self, category: str = "linear", 
                          symbol: str = "BTCUSDT") -> Optional[OpenInterestData]:
        """
        Bybit Public API로 Open Interest 조회
        
        Args:
            category: linear(선물), inverse(역설정)
            symbol: 거래 쌍 (예: BTCUSDT)
        
        Returns:
            OpenInterestData: 수집된 OI 데이터
        """
        endpoint = "/v5/market/open-interest"
        params = {
            "category": category,
            "symbol": symbol,
            "limit": 1,  # 최신 1건
            "intervalTime": "1d"  # 일봉 기준
        }
        
        try:
            response = requests.get(
                f"{self.BASE_URL}{endpoint}",
                params=params,
                timeout=10
            )
            response.raise_for_status()
            data = response.json()
            
            if data.get("retCode") == 0 and data.get("result"):
                item = data["result"]["list"][0]
                return OpenInterestData(
                    symbol=item["symbol"],
                    open_interest=float(item["openInterest"]),
                    timestamp=int(item["timestamp"]),
                    pair=item["symbol"]
                )
            
            print(f"[Bybit] API 오류: {data.get('retMsg')}")
            return None
            
        except requests.exceptions.RequestException as e:
            print(f"[Bybit] 네트워크 오류: {e}")
            return None
    
    def get_multiple_symbols_oi(self, category: str = "linear",
                                 symbols: List[str] = None) -> List[OpenInterestData]:
        """여러 심볼의 OI 동시 조회"""
        if symbols is None:
            symbols = ["BTCUSDT", "ETHUSDT", "SOLUSDT"]
        
        results = []
        for symbol in symbols:
            data = self.get_open_interest(category, symbol)
            if data:
                results.append(data)
            time.sleep(0.2)  # 속도 제한 방지
        
        return results

사용 예제

if __name__ == "__main__": client = BybitOIClient(testnet=False) # BTCUSDT OI 조회 btc_oi = client.get_open_interest("linear", "BTCUSDT") if btc_oi: print(f"BTCUSDT Open Interest: {btc_oi.open_interest:,.0f} USDT") print(f"타임스탬프: {btc_oi.timestamp}") # 다중 심볼 조회 all_oi = client.get_multiple_symbols_oi() for oi_data in all_oi: print(f"{oi_data.symbol}: {oi_data.open_interest:,.0f}")

3단계: HolySheep AI를 활용한 감정 분석 모듈

수집한 Open Interest 데이터를 HolySheep AI의 다중 모델로 분석하는 모듈입니다:

# src/holysheep_analyzer.py
import requests
import json
from typing import Dict, List, Optional
from dataclasses import dataclass, asdict
from datetime import datetime

@dataclass
class SentimentAnalysis:
    """시장 감정 분석 결과"""
    symbol: str
    model_used: str
    sentiment: str  # bullish, bearish, neutral
    confidence: float
    summary: str
    key_signals: List[str]
    timestamp: str

class HolySheepAnalyzer:
    """
    HolySheep AI를 활용한 시장 감정 분석기
    Bybit OI 데이터를 AI로 분석하여 거래 신호 생성
    """
    
    BASE_URL = "https://api.holysheep.ai/v1"
    
    def __init__(self, api_key: str):
        self.api_key = api_key
        self.headers = {
            "Authorization": f"Bearer {api_key}",
            "Content-Type": "application/json"
        }
    
    def analyze_with_model(self, model: str, prompt: str, 
                           temperature: float = 0.3) -> Optional[Dict]:
        """
        HolySheep AI 모델로 분석 실행
        
        Args:
            model: 모델명 (gpt-4.1, claude-3-5-sonnet, gemini-2.5-flash 등)
            prompt: 분석용 프롬프트
            temperature: 창의성 수준 (0.1-0.7 권장)
        
        Returns:
            Dict: 파싱된 분석 결과
        """
        endpoint = f"{self.BASE_URL}/chat/completions"
        
        payload = {
            "model": model,
            "messages": [
                {
                    "role": "system", 
                    "content": "너는 전문 암호화폐 시장 분석가야. Open Interest 데이터를 기반으로 시장 센티먼트를 분석해줘."
                },
                {
                    "role": "user", 
                    "content": prompt
                }
            ],
            "temperature": temperature,
            "max_tokens": 500
        }
        
        try:
            response = requests.post(
                endpoint,
                headers=self.headers,
                json=payload,
                timeout=30
            )
            response.raise_for_status()
            result = response.json()
            
            return {
                "model": model,
                "content": result["choices"][0]["message"]["content"],
                "usage": result.get("usage", {}),
                "latency_ms": response.elapsed.total_seconds() * 1000
            }
            
        except requests.exceptions.RequestException as e:
            print(f"[HolySheep] API 오류 ({model}): {e}")
            return None
    
    def analyze_oi_data(self, oi_data_list: List[Dict], 
                        models: List[str] = None) -> List[SentimentAnalysis]:
        """
        Open Interest 데이터를 여러 AI 모델로 분석
        
        Args:
            oi_data_list: Bybit에서 수집한 OI 데이터 리스트
            models: 분석에 사용할 모델 리스트
        
        Returns:
            List[SentimentAnalysis]: 각 모델의 분석 결과
        """
        if models is None:
            models = ["gpt-4.1", "claude-3-5-sonnet", "gemini-2.0-flash"]
        
        # 분석용 프롬프트 구성
        oi_summary = "\n".join([
            f"- {item['symbol']}: OI {item['open_interest']:,.0f} USDT ({item.get('price_change', 0):+.2f}% 변동)"
            for item in oi_data_list
        ])
        
        prompt = f"""다음 암호화폐 선물市场的 Open Interest 데이터를 분석해주세요:

{oi_summary}

분석 항목:
1. 전체 시장 센티먼트 (강력한 강세/약세/중립)
2. 주요 거래 신호 3가지
3. 리스크 요인
4. 향후 24시간 예상 추세

JSON 형식으로 응답해주세요."""

        results = []
        
        for model in models:
            print(f"[HolySheep] {model}로 분석 시작...")
            response = self.analyze_with_model(model, prompt)
            
            if response:
                analysis = SentimentAnalysis(
                    symbol=oi_data_list[0]["symbol"] if oi_data_list else "BTCUSDT",
                    model_used=model,
                    sentiment=self._extract_sentiment(response["content"]),
                    confidence=self._extract_confidence(response["content"]),
                    summary=response["content"][:200],
                    key_signals=self._extract_signals(response["content"]),
                    timestamp=datetime.now().isoformat()
                )
                results.append(analysis)
                print(f"[HolySheep] {model} 완료 - 지연시간: {response['latency_ms']:.0f}ms")
            
            # 모델 전환 딜레이
            import time
            time.sleep(0.5)
        
        return results
    
    def _extract_sentiment(self, content: str) -> str:
        """응답에서 센티먼트 추출"""
        content_lower = content.lower()
        if "강력한 강세" in content or "strongly bullish" in content_lower:
            return "bullish"
        elif "강력한 약세" in content or "strongly bearish" in content_lower:
            return "bearish"
        elif "중립" in content or "neutral" in content_lower:
            return "neutral"
        return "unknown"
    
    def _extract_confidence(self, content: str) -> float:
        """응답에서 신뢰도 추출 (0.0-1.0)"""
        import re
        match = re.search(r'(\d+)%?', content)
        if match:
            return min(float(match.group(1)) / 100, 1.0)
        return 0.5
    
    def _extract_signals(self, content: str) -> List[str]:
        """응답에서 핵심 신호 추출"""
        signals = []
        lines = content.split('\n')
        for line in lines:
            if any(keyword in line for keyword in ['신호', 'signal', 'indicat']):
                signals.append(line.strip()[:100])
        return signals[:3]

사용 예제

if __name__ == "__main__": from dotenv import load_dotenv load_dotenv() api_key = "YOUR_HOLYSHEEP_API_KEY" analyzer = HolySheepAnalyzer(api_key) # 샘플 OI 데이터 sample_data = [ {"symbol": "BTCUSDT", "open_interest": 15_234_567_890, "price_change": 2.5}, {"symbol": "ETHUSDT", "open_interest": 8_765_432_100, "price_change": 3.2}, {"symbol": "SOLUSDT", "open_interest": 2_345_678_900, "price_change": -1.8} ] # 다중 모델 분석 results = analyzer.analyze_oi_data(sample_data) for result in results: print(f"\n=== {result.model_used} 분석 결과 ===") print(f"센티먼트: {result.sentiment}") print(f"신뢰도: {result.confidence:.0%}") print(f"요약: {result.summary[:100]}...")

4단계: 통합 분석 파이프라인

# src/pipeline.py
import asyncio
import aiohttp
from datetime import datetime
from src.bybit_client import BybitOIClient
from src.holysheep_analyzer import HolySheepAnalyzer
from typing import List, Dict

class OISentimentPipeline:
    """
    Bybit Open Interest → HolySheep AI 분석 통합 파이프라인
    실시간 시장 감정 모니터링 시스템
    """
    
    def __init__(self, holysheep_key: str):
        self.bybit_client = BybitOIClient()
        self.analyzer = HolySheepAnalyzer(holysheep_key)
        self.tracked_symbols = ["BTCUSDT", "ETHUSDT", "SOLUSDT", "BNBUSDT", "XRPUSDT"]
    
    async def fetch_all_oi(self) -> List[Dict]:
        """비동기로 모든 심볼 OI 데이터 수집"""
        tasks = []
        
        for symbol in self.tracked_symbols:
            task = asyncio.create_task(
                self._fetch_single_oi(symbol)
            )
            tasks.append(task)
        
        results = await asyncio.gather(*tasks, return_exceptions=True)
        
        valid_results = []
        for i, result in enumerate(results):
            if isinstance(result, Exception):
                print(f"[오류] {self.tracked_symbols[i]}: {result}")
            elif result:
                valid_results.append(result)
        
        return valid_results
    
    async def _fetch_single_oi(self, symbol: str) -> Dict:
        """단일 심볼 OI 조회 (비동기)"""
        loop = asyncio.get_event_loop()
        return await loop.run_in_executor(
            None, 
            self.bybit_client.get_open_interest, 
            "linear", 
            symbol
        )
    
    def analyze_market(self, oi_data: List[Dict], 
                       use_models: List[str] = None) -> Dict:
        """시장 전체 감정 분석 실행"""
        
        if use_models is None:
            use_models = ["gpt-4.1", "claude-3-5-sonnet"]
        
        print(f"\n[파이프라인] {len(oi_data)}개 심볼 분석 시작...")
        print(f"사용 모델: {', '.join(use_models)}")
        
        analyses = self.analyzer.analyze_oi_data(oi_data, use_models)
        
        # 집계 결과 생성
        summary = self._aggregate_analyses(analyses)
        
        return {
            "timestamp": datetime.now().isoformat(),
            "symbols_analyzed": len(oi_data),
            "individual_analyses": [a.__dict__ for a in analyses],
            "market_summary": summary
        }
    
    def _aggregate_analyses(self, analyses) -> Dict:
        """여러 모델 분석 결과 집계"""
        sentiment_counts = {"bullish": 0, "bearish": 0, "neutral": 0}
        
        for analysis in analyses:
            if analysis.sentiment in sentiment_counts:
                sentiment_counts[analysis.sentiment] += 1
        
        dominant = max(sentiment_counts, key=sentiment_counts.get)
        avg_confidence = sum(a.confidence for a in analyses) / len(analyses)
        
        return {
            "dominant_sentiment": dominant,
            "sentiment_breakdown": sentiment_counts,
            "average_confidence": avg_confidence,
            "model_consensus": "high" if max(sentiment_counts.values()) >= len(analyses) * 0.6 else "moderate"
        }
    
    async def run_full_pipeline(self):
        """전체 파이프라인 실행"""
        print("=" * 60)
        print(f"Bybit OI 분석 파이프라인 시작 - {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
        print("=" * 60)
        
        # 1단계: OI 데이터 수집
        print("\n[1/2] Bybit Open Interest 데이터 수집...")
        oi_data = await self.fetch_all_oi()
        
        if not oi_data:
            print("[오류] OI 데이터 수집 실패")
            return None
        
        # Dict 변환
        oi_dict_list = [
            {
                "symbol": d.symbol,
                "open_interest": d.open_interest,
                "price_change": 0  # Bybit OI API에는 price_change 없음
            }
            for d in oi_data
        ]
        
        print(f"수집 완료: {len(oi_data)}개 심볼")
        
        # 2단계: HolySheep AI 분석
        print("\n[2/2] HolySheep AI 시장 감정 분석...")
        results = self.analyze_market(oi_dict_list)
        
        # 결과 출력
        print("\n" + "=" * 60)
        print("분석 결과 요약")
        print("=" * 60)
        print(f"시장 센티먼트: {results['market_summary']['dominant_sentiment'].upper()}")
        print(f"모델 합의도: {results['market_summary']['model_consensus']}")
        print(f"평균 신뢰도: {results['market_summary']['average_confidence']:.1%}")
        
        return results

메인 실행

if __name__ == "__main__": import os from dotenv import load_dotenv load_dotenv() holysheep_key = os.getenv("HOLYSHEEP_API_KEY") if not holysheep_key or holysheep_key == "YOUR_HOLYSHEEP_API_KEY": print("[설정 오류] HOLYSHEEP_API_KEY를 .env 파일에 설정해주세요.") exit(1) pipeline = OISentimentPipeline(holysheep_key) result = asyncio.run(pipeline.run_full_pipeline())

가격과 ROI

비용 비교 분석

비용 항목 Bybit 직접 사용 HolySheep AI 통합
Bybit API 무료 무료
데이터 처리 서버 $50/월 ( EC2 t3.medium) $0 (로컬 실행 가능)
AI 분석 비용 $100-200/월 (별도 AI API) $30-60/월 (HolySheep 게이트웨이)
개발 시간 2-3주 3-5일
월간 총 비용 $150-250 $30-60
연간 절감 - 약 $1,440-2,280

HolySheep AI 모델별 비용

ROI 추정: 일일 100회 분석 시 월간 토큰 소비 약 50K, HolySheep 비용 $21-125(모델 선택에 따라). 기존 대비 60-75% 비용 절감 효과.

롤백 계획

마이그레이션 중 문제가 발생할 경우를 대비한 롤백 전략:

# src/rollback_manager.py
"""
마이그레이션 롤백 관리자
HolySheep AI 연결 실패 시 Bybit原生 API로 자동 폴백
"""

import logging
from enum import Enum
from functools import wraps
from typing import Callable, Any

class FallbackMode(Enum):
    """폴백 모드枚举"""
    HOLYSHEEP_ONLY = "holysheep"
    BYBIT_ONLY = "bybit"
    GRACEFUL_DEGRADATION = "graceful"

class FallbackManager:
    """자동 폴백 관리자"""
    
    def __init__(self, mode: FallbackMode = FallbackMode.GRACEFUL_DEGRADATION):
        self.mode = mode
        self.fallback_count = 0
        self.max_fallbacks = 3
        
    def with_fallback(self, primary_func: Callable, 
                      fallback_func: Callable) -> Callable:
        """
        기본 함수 실패 시 폴백 함수 실행
        
        Usage:
            @fallback_manager.with_fallback(
                primary_func=analyze_with_holysheep,
                fallback_func=analyze_simple_rules
            )
            def my_analysis(data):
                pass
        """
        @wraps(primary_func)
        def wrapper(*args, **kwargs) -> Any:
            try:
                result = primary_func(*args, **kwargs)
                if result is None:
                    raise ValueError("Empty result from primary function")
                return result
                
            except Exception as e:
                logging.warning(f"[폴백] 기본 함수 실패: {e}")
                self.fallback_count += 1
                
                if self.fallback_count >= self.max_fallbacks:
                    logging.error("[폴백] 최대 폴백 횟수 초과 - Bybit原生 모드로 전환")
                    self.mode = FallbackMode.BYBIT_ONLY
                
                if self.mode == FallbackMode.GRACEFUL_DEGRADATION:
                    logging.info("[폴백] 단순 규칙 기반 분석 실행")
                    return fallback_func(*args, **kwargs)
                
                elif self.mode == FallbackMode.BYBIT_ONLY:
                    logging.info("[폴백] Bybit原生 데이터만 반환")
                    return self._bybit_native_fallback(*args, **kwargs)
                
                return None
        
        return wrapper
    
    def _bybit_native_fallback(self, oi_data: dict) -> dict:
        """Bybit原生 데이터 기반 단순 분석"""
        open_interest = oi_data.get("open_interest", 0)
        
        # 단순 OI 기반 판단
        if open_interest > 10_000_000_000:
            sentiment = "high_activity"
            signal = "강력한 시장 관심도 - 추세 확인 필요"
        else:
            sentiment = "low_activity"
            signal = "낮은 시장 관심도 - 관전 권장"
        
        return {
            "sentiment": sentiment,
            "signal": signal,
            "source": "bybit_fallback",
            "confidence": 0.4  # 폴백은 낮은 신뢰도
        }

사용 예제

fallback_mgr = FallbackManager(FallbackMode.GRACEFUL_DEGRADATION) @fallback_mgr.with_fallback( primary_func=lambda data: HolySheepAnalyzer("key").analyze_oi_data([data]), fallback_func=lambda data: {"sentiment": "neutral", "signal": "AI 분석 실패 - 기본 분석"} ) def analyze_oi_with_ai(data): """OI 분석 함수 - 자동 폴백 지원""" pass

자주 발생하는 오류와 해결책

오류 1: "401 Unauthorized" - API 키 인증 실패

# 오류 메시지

{"error": {"message": "Invalid API key", "type": "invalid_request_error"}}

원인

1. API 키가 잘못되었거나 만료됨

2. .env 파일 로드 실패

3. 헤더 형식 오류

해결 방법

import os from dotenv import load_dotenv

.env 파일 강제 로드

load_dotenv(override=True)

환경 변수 확인

api_key = os.getenv("HOLYSHEEP_API_KEY") print(f"API 키 로드 상태: {'성공' if api_key else '실패'}") if not api_key or api_key == "YOUR_HOLYSHEEP_API_KEY": # 1. HolySheep 대시보드에서 새 키 발급 # 2. .env 파일 직접 편집 # 3. 환경 변수로 직접 설정 os.environ["HOLYSHEEP_API_KEY"] = "hs_your_actual_key_here"

올바른 헤더 형식

headers = { "Authorization": f"Bearer {os.getenv('HOLYSHEEP_API_KEY')}", "Content-Type": "application/json" }

오류 2: "429 Too Many Requests" - 속도 제한 초과

# 오류 메시지

{"error": {"message": "Rate limit exceeded", "type": "rate_limit_error"}}

원인

1. 짧은 시간 내 너무 많은 API 호출

2. 모델별 토큰 제한 초과

해결 방법

import time from tenacity import retry, stop_after_attempt, wait_exponential class RateLimitedAnalyzer: """속도 제한을 처리하는 분석기""" def __init__(self, api_key: str): self.api_key = api_key self.call_history = [] self.min_interval = 1.0 # 호출 간 최소 간격 (초) def _check_rate_limit(self): """속도 제한 체크 및 대기""" current_time = time.time() # 최근 호출 기록 정리 (5분 이내) self.call_history = [ t for t in self.call_history if current_time - t < 300 ] # 분당 호출 수 제한 (모델별 다름) if len(self.call_history) >= 50: oldest = self.call_history[0] wait_time = 60 - (current_time - oldest) + 1 if wait_time > 0: print(f"[速率制限] {wait_time:.1f}초 대기...") time.sleep(wait_time) # 최소 간격 보장 if self.call_history: last_call = max(self.call_history) elapsed = current_time - last_call if elapsed < self.min_interval: time.sleep(self.min_interval - elapsed) self.call_history.append(time.time()) @retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=2, max=10)) def analyze_with_retry(self, data: dict, model: str = "gpt-4.1"): """재시도 로직이 포함된 분석""" self._check_rate_limit() try: response = requests.post( f"https://api.holysheep.ai/v1/chat/completions", headers=self.headers, json={"model": model, "messages": [...]}, timeout=30 ) if response.status_code == 429: raise RateLimitException("速率制限 초과") response.raise_for_status() return response.json() except requests.exceptions.RequestException as e: if "429" in str(e): raise RateLimitException(str(e)) raise

속도 제한 우회 팁

1. DeepSeek V3.2 ($0.42/MTok) 사용으로 비용 + 제한 동시 최적화

2. 배치 처리로 호출 수 최소화

3. 캐싱으로 반복 호출 방지

오류 3: "model_not_found" - 지원되지 않는 모델

# 오류 메시지

{"error": {"message": "Model not found: gpt-4.1-turbo", "type": "invalid_request_error"}}

원인

1. HolySheep에서 지원하지 않는 모델명 사용

2. 모델명 오타

해결 방법

HolySheep에서 지원하는 모델명 매핑

SUPPORTED_MODELS = { # OpenAI 호환 "gpt-4.1": "gpt-4.1", "gpt-4o": "gpt-4o", "gpt-4o-mini": "gpt-4o-mini", # Anthropic 호환 "claude-3-5-sonnet": "claude-3-5-sonnet", "claude-3-5-haiku": "claude-3-5-haiku", "claude-sonnet-4-20250514": "claude-sonnet-4-20250514", # Google 호환 "gemini-2.5-flash": "gemini-2.5-flash", "gemini-2.0-flash": "gemini-2.0-flash", # DeepSeek "deepseek-chat": "deepseek-chat", "deepseek-v3": "deepseek-v3" } def validate_model(model_name: str) -> str: """모델명 검증 및 자동 교정""" model_lower = model_name.lower() # 정확한 매치 if model_lower in SUPPORTED_MODELS: return SUPPORTED_MODELS[model_lower] # 부분 매치로 교정 for supported, canonical in SUPPORTED_MODELS