Commit Graph

5 Commits

Author SHA1 Message Date
Hyungi Ahn
4917fd568f fix: Bearer 토큰 인증으로 전환 — 쿠키 프록시 이슈 해결
Caddy 프록시를 거치면서 httpOnly 쿠키가 제대로 전달 안 되는 문제.
로그인 시 받은 토큰을 메모리에 저장하고 Authorization: Bearer 헤더로
전송하는 방식으로 변경. 쿠키 의존성 제거.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 07:49:38 +09:00
Hyungi Ahn
72dd6ac4d1 feat: Phase 2 웹 UI — Dashboard + Chat 페이지
- hub-web: Vite + React + Tailwind + React Router
- Dashboard: 백엔드 상태 카드, GPU 모니터, 모델 테이블 (15초 자동 갱신)
- Chat: 모델 선택 드롭다운 + SSE 스트리밍 + Markdown 렌더링
- Login: 비밀번호 인증 (httpOnly 쿠키)
- Docker: nginx 기반 정적 서빙 + Caddy 연동
- Caddyfile: flush_interval -1 (SSE 버퍼링 방지)
- proxy_ollama: embed usage 더미값 0→1 (SDK 호환)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 07:40:16 +09:00
Hyungi Ahn
2dab682e21 fix: backend_model_id 매핑 추가 — MLX 모델 ID 불일치 해결
MLX 서버 모델 ID(mlx-community/Qwen3.5-35B-A3B-4bit)와
사용자 노출 ID(qwen3.5:35b-a3b)가 달라 500 에러 발생.
registry에 backend_model_id 필드 추가하여 프록시 시 변환.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 15:14:55 +09:00
Hyungi Ahn
7b28252d4f feat: 맥미니 MLX 연동 — OpenAI-compat 프록시 + 모델 배치 정정
- proxy_openai.py 추가: MLX 서버 SSE 패스스루
- chat.py: openai-compat 백엔드 타입 라우팅 추가
- backends.json: GPU=embed(bge-m3)만, 맥미니MLX=채팅(qwen3.5:35b-a3b)
- LAN IP(192.168.1.122) 사용 (같은 서브넷, Tailscale 불필요)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 15:09:21 +09:00
Hyungi Ahn
3794afff95 feat: AI Gateway Phase 1 - FastAPI 코어 구현
GPU 서버 중앙 AI 라우팅 서비스 초기 구현:
- OpenAI 호환 API (/v1/chat/completions, /v1/models, /v1/embeddings)
- 모델 레지스트리 + 백엔드 헬스체크 (30초 루프)
- Ollama SSE 프록시 (NDJSON → OpenAI SSE 변환)
- JWT 인증 이중 경로 (httpOnly 쿠키 + Bearer 토큰)
- owner/guest 역할 분리, 로그인 rate limiting
- 백엔드별 rate limiting (NanoClaude 대비)
- SQLite 스키마 사전 정의 (aiosqlite + WAL)
- Docker Compose + Caddy 리버스 프록시

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 13:41:46 +09:00