C.W.K.
Stream
Lesson 10 of 10 · published

Multi-provider 코드용 adapter 패턴

~14 min · providers, adapter

Level 0수련생
0 XP0/100 lessons0/14 achievements
0/120 XP to next level120 XP to go0% complete

한 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 봐.

Code

Minimal adapter interface (sketch)·python
class Adapter(Protocol):
    async def stream(
        self,
        *,
        system: str,
        messages: list[Message],
        tools: list[Tool] | None = None,
        tool_choice: ToolChoice = "auto",
        temperature: float = 0.2,
        max_tokens: int = 1024,
        thinking_budget: int | None = None,
    ) -> AsyncIterator[Event]:
        ...

class ClaudeAdapter:
    async def stream(self, **kw) -> AsyncIterator[Event]:
        ...  # talks to anthropic SDK

class OpenAIAdapter:
    async def stream(self, **kw) -> AsyncIterator[Event]:
        ...  # talks to openai SDK

class GeminiAdapter:
    async def stream(self, **kw) -> AsyncIterator[Event]:
        ...  # talks to gemini SDK

Exercise

너의 코드베이스용 adapter interface sketch — 정확히 streaming-call surface만 cover, 그 이상 X. 두 provider에 implement. 너의 코드 나머지 unchanged 인지 verify.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.