한 narrow boundary, 여러 implementation
너의 stack 다시 안 쓰고 multiple provider 다루는 법: streaming-call surface capture하는 adapter interface 정의, provider별 implement. 너의 코드 나머지 (route, store, frontend)가 adapter 부르고 provider SDK 직접 X.
Adapter가 cover하는 것
- Streaming call (system prompt, message, tool, tool_choice, sampler param, max_tokens, optional reasoning budget).
- Event yield: 토큰 delta, tool-call delta, finish reason, usage data.
- Error normalization (429, 5xx, content-policy refusal).
Adapter가 cover 안 하는 것
- Application logic (routing, history, RAG).
- Storage.
- UI.
Adapter narrow하게. 모든 거 abstract하고 싶은 유혹 — resist. cwkPippa 코드베이스가 이 패턴 정확히 사용 — backend/adapters/base.py 봐.