近年、MCP(Model Context Protocol)はAIエージェントと外部ツール間の通信を標準化する注目すべきプロトコルとして急成長しています。本稿では、私が実際のエンタープライズプロジェクトで実装した知見を基に、LangGraphとMCPを統合し、HolySheep APIゲートウェイを通じて一元管理するアーキテクチャを解説します。

MCPプロトコルとは

MCPは2024年にAnthropicが提唱したAIモデルと外部システム間の通信を標準化するプロトコルです。従来の個別実装とは異なり、MCPは以下を提供します:

なぜAI APIゲートウェイが必要か

私の担当したプロジェクトでは,当初、各LLM Providerに個別に接続していたため,以下の課題に直面しました:

HolySheep AI_gatewayを使用することで,私はこれらの課題を единым образом(一元的に)解決できました。

2026年最新API価格比較

Enterprise導入において,成本最適化は避けて通れないテーマです。2026年4月時点のoutput价格为以下の通りです:

モデルOutput価格 ($/MTok)月間1000万トークン時コストHolySheep利用率
GPT-4.1$8.00$80公式比 最大85%節約
Claude Sonnet 4.5$15.00$150公式比 最大85%節約
Gemini 2.5 Flash$2.50$25公式比 最大85%節約
DeepSeek V3.2$0.42$4.20公式比 最大85%節約

HolySheepの為替レートは¥1=$1(公式¥7.3=$1比85%節約)で,月間1000万トークン使用時の年間最大節約額は$2,532に達します。

LangGraph × MCP統合アーキテクチャ

以下に、私の実装したLangGraphとMCPプロトコルの統合コードを示します。

1. MCPサーバー設定

"""
MCPプロトコル対応LangGraph Agent
HolySheep API Gateway経由で複数Providerを一元管理
"""
import os
from typing import Any, Dict, List, Optional
from dataclasses import dataclass
from langgraph.graph import StateGraph, END
from langchain_core.messages import HumanMessage, AIMessage, ToolMessage
from langchain_openai import ChatOpenAI
from pydantic import BaseModel, Field

HolySheep設定

HOLYSHEEP_API_KEY = os.getenv("HOLYSHEEP_API_KEY", "YOUR_HOLYSHEEP_API_KEY") HOLYSHEEP_BASE_URL = "https://api.holysheep.ai/v1"

利用可能モデル定義

AVAILABLE_MODELS = { "gpt4.1": { "model": "gpt-4.1", "temperature": 0.7, "cost_per_1m_tokens": 8.00 # output price }, "claude-sonnet-4.5": { "model": "claude-sonnet-4-5", "temperature": 0.7, "cost_per_1m_tokens": 15.00 }, "gemini-flash": { "model": "gemini-2.5-flash", "temperature": 0.7, "cost_per_1m_tokens": 2.50 }, "deepseek-v3.2": { "model": "deepseek-v3.2", "temperature": 0.7, "cost_per_1m_tokens": 0.42 } } class MCPToolDefinition(BaseModel): """MCPツール定義スキーマ""" name: str = Field(..., description="ツール名") description: str = Field(..., description="ツールの説明") input_schema: Dict[str, Any] = Field(..., description="入力パラメータスキーマ") annotations: Optional[Dict[str, str]] = Field(None, description="メタデータ") @dataclass class AgentState: """LangGraph状態管理""" messages: List[Any] current_model: str tool_results: Dict[str, Any] token_usage: Dict[str, int] def create_mcp_tool_definition( name: str, description: str, parameters: Dict[str, Any] ) -> MCPToolDefinition: """MCPプロトコル互換のツール定義を生成""" return MCPToolDefinition( name=name, description=description, input_schema={ "type": "object", "properties": parameters }, annotations={ "provider": "holysheep", "version": "1.0" } ) class HolySheepMCPAgent: """HolySheep API Gateway経由のMCP対応Agent""" def __init__( self, default_model: str = "deepseek-v3.2", # コスト効率重視のデフォルト api_key: str = HOLYSHEEP_API_KEY, base_url: str = HOLYSHEEP_BASE_URL ): self.api_key = api_key self.base_url = base_url self.default_model = default_model self.tools = {} # コスト追跡 self.total_tokens = 0 self.total_cost = 0.0 def register_tool(self, tool_def: MCPToolDefinition, func: callable): """MCPツールを登録""" self.tools[tool_def.name] = { "definition": tool_def, "function": func } def _create_llm(self, model_name: str): """HolySheep経由でLLMインスタンス生成""" model_config = AVAILABLE_MODELS.get(model_name, AVAILABLE_MODELS["deepseek-v3.2"]) return ChatOpenAI( model=model_config["model"], openai_api_key=self.api_key, base_url=self.base_url, temperature=model_config["temperature"] ) def execute_tool(self, tool_name: str, parameters: Dict[str, Any]) -> Any: """登録済みツールを実行""" if tool_name not in self.tools: raise ValueError(f"Unknown tool: {tool_name}") tool_func = self.tools[tool_name]["function"] return tool_func(**parameters) def build_graph(self): """LangGraphビルダー""" workflow = StateGraph(AgentState) # ノード定義 workflow.add_node("analyze", self._analyze_node) workflow.add_node("execute_tools", self._tool_execution_node) workflow.add_node("synthesize", self._synthesize_node) # エッジ定義 workflow.set_entry_point("analyze") workflow.add_edge("analyze", "execute_tools") workflow.add_edge("execute_tools", "synthesize") workflow.add_edge("synthesize", END) return workflow.compile() def _analyze_node(self, state: AgentState) -> AgentState: """入力解析ノード""" llm = self._create_llm(state.current_model) # ツール定義の生成指示 tool_schemas = [t["definition"].model_dump() for t in self.tools.values()] response = llm.invoke( state.messages, tools=tool_schemas ) return { **state, "messages": [response] } def _tool_execution_node(self, state: AgentState) -> AgentState: """ツール実行ノード""" last_message = state.messages[-1] if hasattr(last_message, "tool_calls"): for tool_call in last_message.tool_calls: tool_name = tool_call["name"] tool_args = tool_call["args"] result = self.execute_tool(tool_name, tool_args) state.messages.append( ToolMessage( content=str(result), tool_call_id=tool_call["id"] ) ) # コスト計算 model_config = AVAILABLE_MODELS[state.current_model] estimated_tokens = len(str(result)) // 4 self.total_tokens += estimated_tokens self.total_cost += (estimated_tokens / 1_000_000) * model_config["cost_per_1m_tokens"] return state def _synthesize_node(self, state: AgentState) -> AgentState: """最終応答合成ノード""" return state def run(self, prompt: str, model: Optional[str] = None) -> str: """Agent実行""" model = model or self.default_model initial_state = AgentState( messages=[HumanMessage(content=prompt)], current_model=model, tool_results={}, token_usage={"input": 0, "output": 0} ) result = self.build_graph().invoke(initial_state) return result["messages"][-1].content

サンプルツール定義

database_tool = create_mcp_tool_definition( name="query_database", description="エンタープライズデータベースにSQLクエリを実行", parameters={ "query": {"type": "string", "description": "SQLクエリ文字列"}, "limit": {"type": "integer", "description": "結果件数上限", "default": 100} } ) search_tool = create_mcp_tool_definition( name="enterprise_search", description="社内ドキュメントを検索", parameters={ "query": {"type": "string", "description": "検索クエリ"}, "filters": {"type": "object", "description": "検索フィルター"} } )

ツール関数(実際の実装に置き換え)

def query_database(query: str, limit: int = 100) -> str: """データベースクエリ実行(示例)""" # 実際の実装ではデータベース接続を確立 return f"Query executed: {query}, returned {limit} rows" def enterprise_search(query: str, filters: dict = None) -> str: """エンタープライズ検索(示例)""" # 実際の実装では検索インデックスを查询 return f"Search results for '{query}': 42 documents found" if __name__ == "__main__": # HolySheep登録: https://www.holysheep.ai/register agent = HolySheepMCPAgent() # ツール登録 agent.register_tool(database_tool, query_database) agent.register_tool(search_tool, enterprise_search) # 実行示例(DeepSeek V3.2使用 - 最低コスト) result = agent.run( "売上データを取得して月の傾向を分析してください", model="deepseek-v3.2" ) print(f"Result: {result}") print(f"Total Cost: ${agent.total_cost:.4f}") print(f"Total Tokens: {agent.total_tokens:,}")

2. フォールバック&LBR実装

"""
LangGraphにおけるIntelligent Fallback&LBR(Load Balancing Routing)
HolySheep Gateway活用版
"""
import asyncio
from typing import List, Dict, Any, Optional
from dataclasses import dataclass, field
from datetime import datetime
from enum import Enum
import httpx
from langchain_openai import ChatOpenAI

HolySheep設定

HOLYSHEEP_API_KEY = "YOUR_HOLYSHEEP_API_KEY" HOLYSHEEP_BASE_URL = "https://api.holysheep.ai/v1" class ModelProvider(Enum): """対応Provider""" GPT = "gpt-4.1" CLAUDE = "claude-sonnet-4-5" GEMINI = "gemini-2.5-flash" DEEPSEEK = "deepseek-v3.2" @dataclass class ModelMetrics: """モデルメトリクス""" provider: ModelProvider total_requests: int = 0 successful_requests: int = 0 failed_requests: int = 0 avg_latency_ms: float = 0.0 last_success: Optional[datetime] = None last_failure: Optional[datetime] = None @property def success_rate(self) -> float: if self.total_requests == 0: return 1.0 return self.successful_requests / self.total_requests @property def is_healthy(self) -> bool: """健全性チェック(成功率>95%且つレイテンシ<500ms)""" return ( self.success_rate > 0.95 and self.avg_latency_ms < 500 and self.failed_requests < 10 ) @dataclass class LBConfig: """ロードバランシング設定""" strategy: str = "weighted_cost" # weighted_cost, round_robin, latency_based weights: Dict[ModelProvider, float] = field(default_factory=lambda: { ModelProvider.GPT: 1.0, ModelProvider.CLAUDE: 0.5, ModelProvider.GEMINI: 3.0, ModelProvider.DEEPSEEK: 10.0 # 最低コストなので高权重 }) fallback_order: List[ModelProvider] = field(default_factory=lambda: [ ModelProvider.DEEPSEEK, ModelProvider.GEMINI, ModelProvider.GPT, ModelProvider.CLAUDE ]) circuit_breaker_threshold: int = 5 # 連続失敗回数 class HolySheepLoadBalancer: """HolySheep API Gateway向けIntelligent LB""" def __init__( self, api_key: str = HOLYSHEEP_API_KEY, base_url: str = HOLYSHEEP_BASE_URL ): self.api_key = api_key self.base_url = base_url self.metrics: Dict[ModelProvider, ModelMetrics] = { provider: ModelMetrics(provider=provider) for provider in ModelProvider } self.config = LBConfig() self._circuit_state: Dict[ModelProvider, int] = { provider: 0 for provider in ModelProvider } def _create_client(self, provider: ModelProvider) -> ChatOpenAI: """Provider別のクライアント生成""" return ChatOpenAI( model=provider.value, openai_api_key=self.api_key, base_url=self.base_url, timeout=30.0 ) async def _call_with_metrics( self, provider: ModelProvider, messages: List[Dict], **kwargs ) -> tuple[bool, Any, float]: """メトリクス付きAPI呼び出し""" start_time = asyncio.get_event_loop().time() client = self._create_client(provider) try: response = await asyncio.to_thread( client.invoke, messages, **kwargs ) latency_ms = (asyncio.get_event_loop().time() - start_time) * 1000 self.metrics[provider].total_requests += 1 self.metrics[provider].successful_requests += 1 self.metrics[provider].avg_latency_ms = ( self.metrics[provider].avg_latency_ms * 0.9 + latency_ms * 0.1 ) self.metrics[provider].last_success = datetime.now() # サーキットブレーカー解除 self._circuit_state[provider] = 0 return True, response, latency_ms except Exception as e: latency_ms = (asyncio.get_event_loop().time() - start_time) * 1000 self.metrics[provider].total_requests += 1 self.metrics[provider].failed_requests += 1 self.metrics[provider].last_failure = datetime.now() # サーキットブレーカー++ self._circuit_state[provider] += 1 return False, str(e), latency_ms def _select_primary_model(self) -> Optional[ModelProvider]: """モデル選択戦略""" available = [ p for p in ModelProvider if self._circuit_state[p] < self.config.circuit_breaker_threshold and self.metrics[p].is_healthy ] if not available: return None if self.config.strategy == "weighted_cost": # コスト効率ベースの重み付き選択 total_weight = sum( self.config.weights.get(p, 1.0) for p in available ) import random rand_val = random.random() * total_weight cumulative = 0 for provider in available: cumulative += self.config.weights.get(provider, 1.0) if rand_val <= cumulative: return provider return available[0] elif self.config.strategy == "latency_based": return min(available, key=lambda p: self.metrics[p].avg_latency_ms) return available[0] async def invoke( self, messages: List[Dict], required_capabilities: Optional[List[str]] = None, **kwargs ) -> Dict[str, Any]: """Intelligent Routing実行""" primary = self._select_primary_model() if primary is None: return { "success": False, "error": "All providers unavailable", "fallback_used": False } # フォールバック順序生成 fallback_order = [ p for p in self.config.fallback_order if p != primary and self._circuit_state[p] < self.config.circuit_breaker_threshold ] all_providers = [primary] + fallback_order last_error = None for provider in all_providers: success, result, latency = await self._call_with_metrics( provider, messages, **kwargs ) if success: return { "success": True, "response": result, "provider": provider.value, "latency_ms": latency, "fallback_used": provider != primary } last_error = result return { "success": False, "error": last_error, "fallback_used": True } def get_metrics_report(self) -> Dict[str, Any]: """現在のメトリクスレポート取得""" return { "timestamp": datetime.now().isoformat(), "models": { provider.value: { "success_rate": f"{metrics.success_rate:.2%}", "avg_latency_ms": f"{metrics.avg_latency_ms:.1f}", "is_healthy": metrics.is_healthy, "circuit_state": self._circuit_state[provider] } for provider, metrics in self.metrics.items() } } async def example_usage(): """使用示例""" lb = HolySheepLoadBalancer() messages = [ {"role": "user", "content": "こんにちは、自己紹介をお願いします"} ] result = await lb.invoke(messages) print(f"Success: {result['success']}") print(f"Provider: {result.get('provider', 'N/A')}") print(f"Latency: {result.get('latency_ms', 0):.1f}ms") print(f"Fallback Used: {result.get('fallback_used', False)}") print(f"Metrics: {lb.get_metrics_report()}") if __name__ == "__main__": # HolySheep登録: https://www.holysheep.ai/register asyncio.run(example_usage())

コスト最適化ダッシュボード実装

HolySheepの¥1=$1レートと各モデルの価格を活用した,成本可視化ダッシュボードの構築例を示します。

"""
Enterprise Cost Analytics Dashboard
HolySheep API Gateway向けコスト追跡システム
"""
import json
from datetime import datetime, timedelta
from dataclasses import dataclass, field
from typing import Dict, List, Optional
from collections import defaultdict
import hashlib

2026年4月時点のoutput価格($/MTok)

MODEL_PRICES = { "gpt-4.1": 8.00, "claude-sonnet-4-5": 15.00, "gemini-2.5-flash": 2.50, "deepseek-v3.2": 0.42 }

HolySheep為替レート(公式¥7.3=$1に対して85%節約)

HOLYSHEEP_RATE = 1.0 # ¥1 = $1 OFFICIAL_RATE = 7.3 # 公式レート @dataclass class TokenUsage: """トークン使用量記録""" timestamp: datetime model: str input_tokens: int output_tokens: int request_id: str @dataclass class CostSummary: """コストサマリー""" total_input_tokens: int total_output_tokens: int input_cost_usd: float output_cost_usd: float total_cost_usd: float savings_vs_official: float savings_percentage: float class CostAnalyticsTracker: """コスト分析トラッカー""" def __init__(self): self.usage_records: List[TokenUsage] = [] self.daily_usage: Dict[str, List[TokenUsage]] = defaultdict(list) self.monthly_budget = 10000.0 # $10,000/月間予算 self.budget_alerts = [] def record_usage( self, model: str, input_tokens: int, output_tokens: int, request_id: Optional[str] = None ): """使用量記録""" if request_id is None: request_id = hashlib.md5( f"{datetime.now()}{model}{input_tokens}".encode() ).hexdigest()[:16] usage = TokenUsage( timestamp=datetime.now(), model=model, input_tokens=input_tokens, output_tokens=output_tokens, request_id=request_id ) self.usage_records.append(usage) self.daily_usage[usage.timestamp.date().isoformat()].append(usage) # 予算チェック current_cost = self._calculate_period_cost( start=datetime.now().replace(day=1, hour=0, minute=0, second=0) ) if current_cost > self.monthly_budget * 0.8: self.budget_alerts.append({ "timestamp": datetime.now(), "level": "warning", "message": f"月間予算の80%に達しました(${current_cost:.2f})" }) def _calculate_period_cost( self, start: datetime, end: Optional[datetime] = None ) -> float: """期間コスト計算""" end = end or datetime.now() total_output_tokens = 0 for record in self.usage_records: if start <= record.timestamp <= end: total_output_tokens += record.output_tokens # outputコスト計算(inputは通常無料または低価格) model_costs = [] for record in self.usage_records: if start <= record.timestamp <= end: price_per_mtok = MODEL_PRICES.get(record.model, MODEL_PRICES["deepseek-v3.2"]) cost = (record.output_tokens / 1_000_000) * price_per_mtok model_costs.append((record.model, cost)) return sum(cost for _, cost in model_costs) def get_summary(self, period_days: int = 30) -> CostSummary: """サマリー取得""" start = datetime.now() - timedelta(days=period_days) filtered_records = [ r for r in self.usage_records if r.timestamp >= start ] total_input = sum(r.input_tokens for r in filtered_records) total_output = sum(r.output_tokens for r in filtered_records) # コスト計算 output_cost = self._calculate_period_cost(start) input_cost = total_input * 0.0001 / 1000 # input cost estimate # 公式レートとの比較 official_cost = (output_cost * OFFICIAL_RATE) + (input_cost * OFFICIAL_RATE) holysheep_cost = (output_cost * HOLYSHEEP_RATE) + (input_cost * HOLYSHEEP_RATE) return CostSummary( total_input_tokens=total_input, total_output_tokens=total_output, input_cost_usd=input_cost, output_cost_usd=output_cost, total_cost_usd=holysheep_cost, savings_vs_official=official_cost - holysheep_cost, savings_percentage=((official_cost - holysheep_cost) / official_cost * 100) if official_cost > 0 else 0 ) def get_model_breakdown(self) -> Dict[str, Dict]: """モデル別内訳""" breakdown = defaultdict(lambda: { "requests": 0, "input_tokens": 0, "output_tokens": 0, "cost_usd": 0.0 }) for record in self.usage_records: key = record.model price = MODEL_PRICES.get(record.model, MODEL_PRICES["deepseek-v3.2"]) breakdown[key]["requests"] += 1 breakdown[key]["input_tokens"] += record.input_tokens breakdown[key]["output_tokens"] += record.output_tokens breakdown[key]["cost_usd"] += ( (record.output_tokens / 1_000_000) * price ) return dict(breakdown) def generate_report(self) -> str: """レポート生成""" summary = self.get_summary() breakdown = self.get_model_breakdown() report = f""" {'='*60} Enterprise Cost Analytics Report Generated: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} {'='*60} SUMMARY ------- Total Input Tokens: {summary.total_input_tokens:,} Total Output Tokens: {summary.total_output_tokens:,} Input Cost: ${summary.input_cost_usd:.4f} Output Cost: ${summary.output_cost_usd:.4f} Total Cost (HolySheep): ${summary.total_cost_usd:.2f} Savings vs Official: ${summary.savings_vs_official:.2f} ({summary.savings_percentage:.1f}%) MODEL BREAKDOWN --------------- """ for model, stats in sorted( breakdown.items(), key=lambda x: x[1]["cost_usd"], reverse=True ): report += f""" {model}: - Requests: {stats['requests']:,} - Input Tokens: {stats['input_tokens']:,} - Output Tokens: {stats['output_tokens']:,} - Cost: ${stats['cost_usd']:.4f} """ if self.budget_alerts: report += f""" ALERTS ------ """ for alert in self.budget_alerts[-5:]: # 最新5件 report += f"[{alert['level'].upper()}] {alert['message']}\n" return report

使用示例

if __name__ == "__main__": tracker = CostAnalyticsTracker() # サンプルデータ追加 tracker.record_usage("gpt-4.1", 1000, 500, "req001") tracker.record_usage("deepseek-v3.2", 2000, 1000, "req002") tracker.record_usage("gemini-2.5-flash", 1500, 750, "req003") tracker.record_usage("claude-sonnet-4-5", 3000, 1500, "req004") # レポート生成 print(tracker.generate_report()) print(f"\nModel Breakdown: {json.dumps(tracker.get_model_breakdown(), indent=2)}")

HolySheepを選ぶ理由:私の実体験から

私が複数のEnterpriseプロジェクトでHolySheepを採用した理由は以下の通りです:

よくあるエラーと対処法

エラー1: Connection Timeout(接続タイムアウト)

現象:リクエスト送信後,30秒以上応答がない

# 問題のあるコード
client = ChatOpenAI(
    model="gpt-4.1",
    openai_api_key=api_key,
    base_url="https://api.holysheep.ai/v1"
    # timeout未設定(デフォルト120sだが環境によって問題発生)
)

解決策:明示的なタイムアウト設定

from openai import Timeout client = ChatOpenAI( model="gpt-4.1", openai_api_key=api_key, base_url="https://api.holysheep.ai/v1", timeout=Timeout(60.0, connect=10.0) # 全体60s, 接続10s )

フォールバック付き呼び出し

try: response = client.invoke(messages) except Timeout: # DeepSeekにフォールバック client = ChatOpenAI( model="deepseek-v3.2", openai_api_key=api_key, base_url="https://api.holysheep.ai/v1" ) response = client.invoke(messages)

エラー2: Invalid API Key(無効なAPIキー)

現象:401 Unauthorizedエラー,API呼び出しが拒否される

# 問題のあるコード
api_key = os.getenv("OPENAI_API_KEY")  # 環境変数名間違い

解決策:正しい環境変数名を設定

import os from dotenv import load_dotenv load_dotenv() # .envファイルから読み込み

HolySheep APIキーを明示的に設定

api_key = os.getenv("HOLYSHEEP_API_KEY") or os.getenv("API_KEY") if not api_key or api_key == "YOUR_HOLYSHEEP_API_KEY": raise ValueError( "HOLYSHEEP_API_KEYが設定されていません。" "https://www.holysheep.ai/register からAPIキーを取得してください。" )

キーバリデーション

client = ChatOpenAI( model="deepseek-v3.2", openai_api_key=api_key, base_url="https://api.holysheep.ai/v1" )

エラー3: Rate Limit Exceeded(レート制限超過)

現象:429 Too Many Requestsエラー,短時間での大量リクエスト

# 問題のあるコード
for query in many_queries:
    response = client.invoke(query)  # 並列処理でレート制限発生

解決策:指数バックオフとリクエスト間隔制御

import time import asyncio from tenacity import retry, stop_after_attempt, wait_exponential class RateLimitedClient: def __init__(self, client, requests_per_minute=60): self.client = client self.min_interval = 60.0 / requests_per_minute self.last_request_time = 0 def _wait_if_needed(self): elapsed = time.time() - self.last_request_time if elapsed < self.min_interval: time.sleep(self.min_interval - elapsed) self.last_request_time = time.time() def invoke(self, messages, **kwargs): self._wait_if_needed() for attempt in range(3): try: return self.client.invoke(messages, **kwargs) except RateLimitError: if attempt == 2: raise # 指数バックオフ wait_time = (2 ** attempt) * self.min_interval time.sleep(wait_time)

非同期版

async def async_invoke_with_retry(client, messages, max_retries=3): for attempt in range(max_retries): try: return await asyncio.to_thread(client.invoke, messages) except RateLimitError as e: if attempt == max_retries - 1: raise await asyncio.sleep(2 ** attempt)

エラー4: Model Not Found(モデル未検出)

現象:modelパラメータに存在しないモデル名を指定

# 問題のあるコード
client = ChatOpenAI(
    model="gpt-4.5",  # 存在しないモデル名
    openai_api_key=api_key,
    base_url="https://api.holysheep.ai/v1"
)

解決策:利用可能なモデル一覧でバリデーション

AVAILABLE_MODELS = { "gpt-4.1": {"display_name": "GPT-4.1", "context_window": 128000}, "claude-sonnet-4-5": {"display_name": "Claude Sonnet 4.5", "context_window": 200000}, "gemini-2.5-flash": {"display_name": "Gemini 2.5 Flash", "context_window": 1000000}, "deepseek-v3.2": {"display_name": "DeepSeek V3.2", "context_window": 128000} } def create_client(model_name: str, api_key: str) -> ChatOpenAI