어댑터
| 파일 | 프로바이더 | 체인 내 모델 |
|---|---|---|
core/llm/providers/anthropic.py | Anthropic | Opus 4.7 → Opus 4.6 → Sonnet 4.6 → Haiku 4.5 |
core/llm/providers/openai.py | OpenAI Responses | gpt-5.5 → gpt-5.4 → gpt-5.4-mini → gpt-5-mini |
core/llm/providers/codex.py | Codex Plus (구독) | Codex 라우팅을 통한 OpenAI 모델 |
core/llm/providers/glm.py | Zhipu GLM | GLM-5.1 → GLM-5 → GLM-5-turbo → GLM-4.7 → GLM-4.7-flash. context 202_752 토큰. |
폴백 체인
core/config.py에 정의되어 있습니다.
ANTHROPIC_FALLBACK_CHAIN = ["claude-opus-4-7", "claude-opus-4-6",
"claude-sonnet-4-6", "claude-haiku-4-5"]
OPENAI_FALLBACK_CHAIN = ["gpt-5.5", "gpt-5.4",
"gpt-5.4-mini", "gpt-5-mini"]
GLM_FALLBACK_CHAIN = ["glm-5.1", "glm-5", "glm-5-turbo",
"glm-4.7", "glm-4.7-flash"]각 어댑터의 retry_with_backoff()는 재시도 가능한 오류 (rate limit, 서버 오류) 에 대해 체인을 따라 내려갑니다. 재시도 불가능한 오류 (인증 실패, 결제) 는 BillingError 또는 AuthError로 즉시 전파됩니다.
적응형 사고 깊이
effort 파라미터 (5단계. low, medium, high, max, xhigh) 는 프로바이더별로 다르지만 균일하게 노출됩니다.
- Anthropic. Opus 4.7에 대해
output_config.effort="xhigh"(Opus 4.6 / Sonnet 4.6은 xhigh를 거부하고max로 다운그레이드) - OpenAI Responses. gpt-5.x의
reasoning.effort필드 - Codex.
codex_reasoning_items사이드카 (턴 간 암호화된 reasoning 재생) - GLM.
extra_body={thinking: {type: enabled, clear_thinking: false}}
캐싱
- Anthropic. system 블록에 `cache_control: ephemeral` (
__GEODE_PROMPT_CACHE_BOUNDARY__를 통한 STATIC/DYNAMIC 분할) 과 최근 3개 non-system 메시지에 대한apply_messages_cache_control()(PR #864). Prompt Caching 참조. - OpenAI. 서버 측 자동 prompt 캐싱 (GEODE wiring 불필요).
- GLM / Codex. 프로바이더 관리.
회로 차단기
각 어댑터는 모듈 수준의 CircuitBreaker 인스턴스를 보유합니다 (core/llm/fallback.py). 반복적인 실패가 발생하면 차단기가 열리고 체인이 회전합니다. 실패하는 프로바이더를 두드리는 대신 다음 프로바이더에게 기회가 가는 셈입니다. 성공한 호출에서 record_success()가 차단기를 재설정합니다.
v0.94+ 추가된 가드
- OpenAI HTML data-URL 가드 (v0.94). OpenAI/Codex가 HTML을
data:text/html;base64,...단일 URL로 emit하는 패턴 차단.core/llm/postprocess/html_output.py로 raw<!DOCTYPE html>강제. - Cross-provider
tool_choice정규화 (v0.94). 4 프로바이더가 각자 다른 형식의 tool_choice를 받는 문제를 통일된 GEODE 측 schema로 변환. - OpenAI
prompt_cache_keyderivation (v0.94). 프로젝트 식별자 기반 prompt 캐시 키 자동 도출. - GLM thinking 게이트 (v0.94).
thinking.type="off"|"none"로 thinking 비활성 가능. cost 절감용. - Anthropic
agentic_callstreaming (v0.95).messages.stream()async 컨텍스트로 변환. 토큰 트래커는 동일. - GLM context window 정정 (v0.95). 200_000 flat → 정확값 202_752.
tests/test_glm_context_window.py회귀 방지.
OAuth (Anthropic 비활성, OpenAI Codex 활성)
Anthropic ToS에 따라 Anthropic OAuth 로그인은 비활성 상태입니다. API 키만 사용합니다. OpenAI Codex Plus 구독 인증은 사용 가능합니다. Operations · OAuth 가 채워지면 그곳을 참조하세요.