왜 이 proxy 만들어?
대부분의 cloud-shape chat UI랑 SDK (OpenAI Python SDK, Vercel AI SDK, LangChain streaming hook)는 SSE를 먹고 살아. Frontend를 다시 안 짜고 Ollama를 drop-in하고 싶으면, NDJSON을 SSE로 옮겨주는 작은 proxy를 하나 세워.
변환의 모양
- Ollama는
{json}\n을 뱉고, SSE는data: {json}\n\n을 원해. - OpenAI-compatible SSE client는 끝에
data: [DONE]\n\nsentinel이 오길 기대하고. data:안의 chunk 모양도 보통 OpenAI delta 모양으로 바꿔줘야 해:{"choices": [{"delta": {"content": "..."}}]}.
OpenAI 호환성 reinvent하지 마
Ollama 이미 /v1/chat/completions를 OpenAI-compatible endpoint로 노출해. "drop-in OpenAI SDK"만 필요하면 SDK의 base_url을 http://localhost:11434/v1로 맞춰두는 걸로 끝이야. proxy는 건너뛰어도 돼. Ollama의 compat endpoint가 안 해주는 변환 (커스텀 auth, observability, request shaping)이 필요할 때만 직접 proxy를 세워.