openrouter-upgrade-migration
jeremylongshore/claude-code-plugins-plus-skills
OpenRouter SDK 버전을 안전하게 마이그레이션하고 업그레이드하세요. 종속성을 업데이트하거나 구성을 마이그레이션할 때 사용하세요. 'openrouter upgrade', 'openrouter migration', 'update openrouter', 'openrouter breaking changes'와 같은 문구로 트리거하십시오.
...모든 것을 확장하십시오소개 openrouter-upgrade-migration
'openrouter-upgrade-migration' 스킬은 OpenRouter SDK 버전의 업그레이드 및 마이그레이션 과정을 간소화하기 위해 설계되었습니다. 이 스킬은 종속성을 업데이트할 때 흔히 직면하는 문제를 해결하여, 개발자가 호환성을 깨는 변경 사항을 유발하지 않고 안전하게 버전 업데이트를 구현하고 구성 마이그레이션을 관리할 수 있도록 지원합니다. 이 스킬은 정기적인 업데이트를 수행하거나 최신 SDK 버전의 호환성을 깨는 변경 사항에 대응할 때 특히 유용하며, 업그레이드 과정에서 호환성을 유지하기 위한 체계적인 접근 방식을 제공합니다.
이 스킬은 필수 조건 검증부터 성공적인 통합 보장까지, SDK 버전 업그레이드 관리를 위한 포괄적인 도구 세트를 제공합니다. 주요 기능으로는 구성의 손쉬운 마이그레이션, 호환성을 깨는 변경 사항 처리, 마이그레이션 후 API 연결성 검증 등이 있습니다. 이 스킬은 버전 관리 시스템과 원활하게 연동되어, 문제 발생 시 롤백 기능을 사용할 수 있습니다. 명확한 테스트 및 모니터링 단계를 통해, 이 스킬은 업데이트된 OpenRouter 통합이 프로덕션 환경에서 예상대로 계속 작동하도록 보장합니다.
주로 OpenRouter를 사용하는 개발자 및 팀을 대상으로 하는 이 스킬은 SDK 업데이트를 관리하거나 새 버전에서 발생하는 호환성 깨는 변경 사항을 처리해야 하는 분들에게 이상적입니다. 또한 변경 사항을 추적하면서 종속성과 구성을 안전하게 업그레이드할 수 있게 해주므로, 프로덕션 시스템 유지 관리를 담당하는 DevOps 엔지니어에게도 유용합니다. 이 도구는 OpenRouter SDK 버전을 업데이트하거나 마이그레이션할 때 안정성을 보장하고 다운타임을 최소화하는 데 도움이 될 수 있습니다.
자주 묻는 질문
openrouter-upgrade-migration 스킬은 어떻게 실행하나요?
'openrouter upgrade', 'openrouter migration', 'update openrouter' 또는 'openrouter breaking changes'와 같은 문구를 사용하여 이 스킬을 실행할 수 있습니다.
이 스킬을 사용하기 위한 필수 조건은 무엇인가요?
사전 조건으로는 기존 OpenRouter 통합이 설정되어 있어야 하며, 롤백 기능을 보장하기 위해 버전 관리 시스템이 구축되어 있어야 합니다.
이 스킬은 모든 버전의 OpenRouter SDK와 호환되나요?
이 스킬은 OpenRouter SDK 버전을 업그레이드하고 마이그레이션하기 위해 설계되었지만, 진행하기 전에 사용 중인 특정 SDK 버전과의 호환성을 확인하는 것이 중요합니다.
마이그레이션이 실패하면 어떻게 해야 합니까?
마이그레이션이 실패할 경우, '{baseDir}/references/errors.md'에 있는 오류 처리 문서를 참조하여 문제를 진단하고 해결하십시오.
OpenRouter Upgrade & Migration
Current State
!npm list openai 2>/dev/null | head -5!pip show openai 2>/dev/null | head -5
Overview
Migrating to OpenRouter from a direct provider API (OpenAI, Anthropic) is minimal: change base_url and api_key, add two headers. The OpenAI SDK works natively with OpenRouter. This skill covers migrating from direct APIs, switching between models, upgrading SDK versions, and running comparison tests.
Migration from Direct OpenAI
# BEFORE: Direct OpenAIfrom openai import OpenAIclient = OpenAI(api_key=os.environ["OPENAI_API_KEY"])response = client.chat.completions.create( model="gpt-4o", messages=[{"role": "user", "content": "Hello"}], max_tokens=200,)# AFTER: Via OpenRouter (3 lines changed)from openai import OpenAIclient = OpenAI( base_url="https://openrouter.ai/api/v1", # ← Changed api_key=os.environ["OPENROUTER_API_KEY"], # ← Changed default_headers={ # ← Added "HTTP-Referer": "https://my-app.com", "X-Title": "my-app", },)response = client.chat.completions.create( model="openai/gpt-4o", # ← Add provider prefix messages=[{"role": "user", "content": "Hello"}], max_tokens=200,)
Migration from Direct Anthropic
# BEFORE: Direct Anthropic SDKimport anthropicclient = anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])response = client.messages.create( model="claude-3-5-sonnet-20241022", max_tokens=200, messages=[{"role": "user", "content": "Hello"}],)content = response.content[0].text# AFTER: Via OpenRouter (using OpenAI SDK instead of Anthropic SDK)from openai import OpenAIclient = OpenAI( base_url="https://openrouter.ai/api/v1", api_key=os.environ["OPENROUTER_API_KEY"], default_headers={ "HTTP-Referer": "https://my-app.com", "X-Title": "my-app", },)response = client.chat.completions.create( model="anthropic/claude-3.5-sonnet", # OpenRouter model ID messages=[{"role": "user", "content": "Hello"}], max_tokens=200,)content = response.choices[0].message.content # OpenAI response format
TypeScript Migration
// BEFORE: Direct OpenAIimport OpenAI from "openai";const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });// AFTER: Via OpenRouterconst client = new OpenAI({ baseURL: "https://openrouter.ai/api/v1", apiKey: process.env.OPENROUTER_API_KEY, defaultHeaders: { "HTTP-Referer": "https://my-app.com", "X-Title": "my-app", },});// Change model from "gpt-4o" to "openai/gpt-4o"
Migration Checklist
MIGRATION_CHECKLIST = { "config": [ "base_url changed to https://openrouter.ai/api/v1", "API key changed to OPENROUTER_API_KEY (sk-or-v1-...)", "HTTP-Referer and X-Title headers added", "Model IDs prefixed with provider/ (e.g., openai/gpt-4o)", ], "code": [ "All client initialization updated", "Model IDs updated in all routes/configs", "Error handling covers OpenRouter-specific codes (402, 408)", "Streaming still works with new endpoint", "Tool/function calling still works", ], "testing": [ "Same prompts produce comparable quality output", "Latency within acceptable range (expect +50-100ms)", "Token counts match expectations", "Cost tracking updated for OpenRouter pricing", "Fallback chain tested", ], "operations": [ "Credit balance sufficient for expected usage", "Per-key credit limits configured", "Monitoring updated to track OpenRouter metrics", "Alerting on new error codes (402, 408)", "Rollback plan documented", ],}
Model ID Migration Map
| Direct Provider | OpenRouter ID |
|---|---|
gpt-4o | openai/gpt-4o |
gpt-4o-mini | openai/gpt-4o-mini |
o1 | openai/o1 |
claude-3-5-sonnet-20241022 | anthropic/claude-3.5-sonnet |
claude-3-haiku-20240307 | anthropic/claude-3-haiku |
gemini-2.0-flash | google/gemini-2.0-flash-001 |
llama-3.1-8b-instruct | meta-llama/llama-3.1-8b-instruct |
Comparison Test Script
def compare_migration(prompt: str, old_model: str, new_model: str): """Run same prompt through old and new configurations to compare.""" import time # New: OpenRouter or_client = OpenAI( base_url="https://openrouter.ai/api/v1", api_key=os.environ["OPENROUTER_API_KEY"], default_headers={"HTTP-Referer": "https://my-app.com", "X-Title": "migration-test"}, ) start = time.monotonic() or_response = or_client.chat.completions.create( model=new_model, messages=[{"role": "user", "content": prompt}], max_tokens=200, temperature=0, ) or_latency = (time.monotonic() - start) * 1000 return { "openrouter": { "model": or_response.model, "content": or_response.choices[0].message.content[:100], "tokens": or_response.usage.prompt_tokens + or_response.usage.completion_tokens, "latency_ms": round(or_latency), }, }# Testresult = compare_migration( "What is 2+2?", old_model="gpt-4o", new_model="openai/gpt-4o",)print(json.dumps(result, indent=2))
Feature Flag Migration
import osUSE_OPENROUTER = os.environ.get("USE_OPENROUTER", "false").lower() == "true"def get_llm_client(): """Feature flag for gradual migration.""" if USE_OPENROUTER: return OpenAI( base_url="https://openrouter.ai/api/v1", api_key=os.environ["OPENROUTER_API_KEY"], default_headers={"HTTP-Referer": "https://my-app.com", "X-Title": "my-app"}, ) else: return OpenAI(api_key=os.environ["OPENAI_API_KEY"])def get_model_id(model: str) -> str: """Map model IDs based on current backend.""" if USE_OPENROUTER and "/" not in model: MODEL_MAP = {"gpt-4o": "openai/gpt-4o", "gpt-4o-mini": "openai/gpt-4o-mini"} return MODEL_MAP.get(model, f"openai/{model}") return model
Error Handling
| Error | Cause | Fix |
|---|---|---|
| 401 after migration | Using old API key with new base_url | Update to OpenRouter API key (sk-or-v1-...) |
model_not_found | Missing provider prefix | Add openai/ or anthropic/ prefix to model ID |
| Different response format | Switched from Anthropic SDK to OpenAI SDK | Update response parsing: .choices[0].message.content |
| Higher latency | OpenRouter proxy overhead | Expected: +50-100ms; use streaming to mask it |
Enterprise Considerations
- Migration from direct provider to OpenRouter requires only 3 lines of code change
- Use feature flags for gradual migration (10% -> 50% -> 100%)
- Run comparison tests on critical prompts before full migration
- OpenRouter adds ~50-100ms overhead; use streaming to mask perceived latency
- Keep direct provider keys active during migration for quick rollback
- Update monitoring dashboards for OpenRouter-specific metrics (generation_id, provider used)
References
- Examples | Errors
- Quickstart | OpenAI Compatibility
openrouter-upgrade-migration 설치
스킬 파일을 다운로드하여 .claude/skills/ 디렉터리에 압축을 풀어주세요.
ZIP 다운로드저장소를 클론하고 스킬 파일을 프로젝트에 복사하세요.
git clone https://github.com/jeremylongshore/claude-code-plugins-plus-skills/blob/main/plugins/saas-packs/openrouter-pack/skills/openrouter-upgrade-migration/SKILL.md # Copy SKILL.md to your .claude/skills/ directory
복사





집
