변경 내역¶
Continuum Router의 모든 주요 변경 사항은 이 파일에 문서화되어 있습니다.
형식은 Keep a Changelog를 기반으로 하며, 이 프로젝트는 Semantic Versioning을 따릅니다.
[미출시]¶
추가됨¶
-
Cohere/Jina 호환 리랭킹 및 희소 임베딩 엔드포인트 - 고급 검색 API 지원 추가 (#374)
- 2단계 검색을 위한 새로운
/v1/rerank엔드포인트 (Cohere 호환) - 희소 임베딩 (SPLADE 형식)을 위한 새로운
/embed_sparse엔드포인트 (TEI/Jina 호환) - 리랭킹을 위한 단순 문자열 문서 및 text 필드가 있는 구조화된 문서 모두 지원
- model, query, documents 필드에 대한 포괄적인 검증이 포함된 요청/응답 타입
- 새로운 기능 매핑:
rerank->rerank메서드,sparse_embedding->embed_sparse메서드 - model-metadata.yaml에 예제 모델 추가: BGE Reranker, Jina Reranker, SPLADE 모델
- 2단계 검색을 위한 새로운
-
BGE-M3 및 다국어 임베딩 모델 지원 - BGE-M3 및 동등한 다국어 임베딩 모델에 대한 모델 메타데이터 및 설정 예제 추가 (#373)
- BGE-M3: 568M 파라미터, 1024 차원, 100개 이상 언어, 8192 컨텍스트. Dense, sparse(어휘), ColBERT 멀티벡터 검색 지원
- BGE-Large-EN-v1.5: 335M 파라미터, 1024 차원, 영어 전용, 512 컨텍스트
- Multilingual-E5-Large: 560M 파라미터, 1024 차원, 100개 이상 언어, 514 컨텍스트
- vLLM, Ollama, Text Embeddings Inference (TEI) 배포를 위한 예제 백엔드 설정
- RAG 시스템의 교차 언어 검색 요구 사항 해결
-
Anthropic 파일 변환기에 일반 텍스트 지원 추가 - Anthropic 파일 변환기에 text/plain 지원 추가 (#342)
- 텍스트 파일은 base64 데이터가 포함된
document블록으로 변환 (PDF와 동일한 형식) - 최대 텍스트 파일 크기: 32MB (PDF와 동일)
- 텍스트 파일은 매직 바이트 검증 없음 (모든 콘텐츠 허용)
- SUPPORTEDDOCUMENTTYPES에
application/pdf와 함께text/plain추가 - 오류 메시지에 일반 텍스트 지원 언급 추가
- 텍스트 파일은 base64 데이터가 포함된
-
OpenAI 및 Anthropic 파일 변환기에 PDF 지원 추가 - 파일 변환기에 PDF 파일 지원 추가 (#340)
- OpenAI 변환기: PDF를 base64 데이터 또는 파일 ID가 포함된
file블록으로 변환 - Anthropic 변환기: PDF를 base64 데이터가 포함된
document블록으로 변환 - 보안을 위한 PDF 매직 바이트 검증 (
%PDF-시그니처) - 최대 PDF 크기: 32MB (백엔드에서 100페이지 제한 적용)
- 이미지는 20MB 제한 유지
- OpenAI 변환기: PDF를 base64 데이터 또는 파일 ID가 포함된
-
네이티브 Anthropic Responses API 지원 - Responses API에 대한 네이티브 Anthropic Messages API 변환 추가 (#332)
- Responses API 요청을 네이티브 Anthropic Messages 형식으로 변환하는 새로운
AnthropicConverter - Anthropic 문서 이해 기능을 통한 전체 PDF 파일 지원 (
file_data가 포함된input_file) - 자동 미디어 타입 감지를 통한 이미지 파일 지원
- Claude 3+ 모델을 위한 확장 사고(Extended Thinking) 콘텐츠 지원
- Anthropic 형식의 적절한 SSE 이벤트 변환을 통한 스트리밍 지원
- 완전한 응답 변환을 통한 비스트리밍 지원
- Responses API 요청을 네이티브 Anthropic Messages 형식으로 변환하는 새로운
수정됨¶
-
외부 파일 URL에 대한 SSRF 검증 - 외부 파일 가져오기 시 SSRF 보호 추가 (#332)
- 사설 IP 주소 검증 (10.x.x.x, 172.16-31.x.x, 192.168.x.x, 127.x.x.x 차단)
- Localhost 및 링크 로컬 주소 차단
- IPv6 루프백 및 링크 로컬 주소 차단
- 해석 후 IP 검증을 통한 DNS 리바인딩 보호
-
파일 입력에 대한 미디어 타입 화이트리스트 - 허용된 파일 유형에 대한 보안 화이트리스트 추가 (#332)
- PDF:
application/pdf - 이미지:
image/jpeg,image/png,image/gif,image/webp - 지원되지 않는 미디어 타입은 명확한 오류 메시지와 함께 거부
- PDF:
-
AI SDK Responses API 스트리밍 호환성 - Responses API 스트리밍에서 Vercel AI SDK 호환성 문제 수정 (#334)
- OpenAI 스펙에 맞춰
ResponseStreamEvent직렬화가 점으로 구분된 타입 이름 사용 (예:"type": "output_text_done"대신"type": "response.output_text.done") OutputItemAdded,OutputItemInProgress,OutputItemDone및 기타 스트리밍 이벤트에item_id필드 추가- 이벤트 순서 추적을 위한
sequence_number필드 추가 (긴 스트리밍 세션에서 오버플로우 방지를 위해u64사용) ResponseStreamEvent에 대한 커스텀Serialize구현으로 올바른 JSON 출력 형식 보장- 새 필드가 올바르게 직렬화되는지 확인하기 위해 모든 기존 스트리밍 테스트 업데이트
- OpenAI 스펙에 맞춰
-
핫 리로드 백엔드 동기화 후 즉시 헬스 체크 - 핫 리로드로 백엔드 추가 시 즉시 헬스 체크 실행 (#367)
- 설정 핫 리로드로 추가된 새 백엔드가 이제 즉시 헬스 체크됨
- 이전에는 새 백엔드가 최대 30초(기본 헬스 체크 간격) 동안 사용 불가 상태로 유지됨
- 외부 호출을 위해
HealthChecker::perform_health_checks()공개 설정 - Backend.AI GO 및 기타 클라이언트에서 모델 가용성 응답성 개선
-
Responses API 로컬 파일 해석 - Responses API 요청에서 로컬
file_id참조 해석 (#325)- Files API를 통해 업로드된 파일을 이제 Responses API 요청에서
file_id로 참조 가능 - FileResolver 서비스가 요청에서
file_id참조를 스캔하고 로컬 스토리지에서 콘텐츠 로드 - 파일 콘텐츠가 백엔드로 전송되기 전에 base64
file_data형식으로 변환 - 보안 기능: 파일 소유권 검증(user_id 확인) 및 주입을 위한 10MB 크기 제한
- 그레이스풀 디그레이드: 해석 실패 시 경고 로그와 함께 원본 요청으로 폴백
- Files API를 통해 업로드된 파일을 이제 Responses API 요청에서
수정됨¶
- Responses API 플랫 도구 형식 - Responses API
/v1/responses엔드포인트가 플랫 도구 형식을 허용하도록 수정 (#323)- 함수 도구는 이제 플랫 형식 사용:
{"type": "function", "name": "...", "parameters": {...}} - OpenAI Responses API 사양에 맞춤
- 중첩 형식(
function래퍼 객체 포함)은 더 이상 Responses API에서 허용되지 않음 - 플랫 도구 형식 예제로 문서 업데이트
- 함수 도구는 이제 플랫 형식 사용:
[0.31.5] - 2026-01-09¶
추가됨¶
-
네이티브 OpenAI 백엔드용 Responses API 패스스루 - 백엔드 유형에 따른
/v1/responsesAPI 스마트 라우팅 (#313)- OpenAI 및 Azure OpenAI 백엔드는 이제 패스스루 모드를 사용하여
/v1/responses엔드포인트로 요청을 직접 전달 - 다른 백엔드(Anthropic, Gemini, vLLM, Ollama, LlamaCpp, Generic)는 자동으로 네이티브 형식으로 변환
- 패스스루 모드 이점: 네이티브 PDF 지원, 보존된 추론 상태, 내장 도구(websearch, filesearch) 접근, 향상된 캐시 활용
- 라우팅 결정을 위한
ResponsesApiStrategy열거형이 포함된 새로운router.rs모듈 - 직접 요청 전달을 위한
PassthroughService가 포함된 새로운passthrough.rs모듈 - DoS 방지를 위한 요청 페이로드 크기 검증 (16MB 제한)
- 라우팅 전략, 오류 처리, 요청 검증에 대한 포괄적인 테스트 커버리지
- OpenAI 및 Azure OpenAI 백엔드는 이제 패스스루 모드를 사용하여
-
OpenAI Responses API 파일 입력 유형 - Responses API에서 멀티모달 파일 입력 지원 추가 (#311)
- 새로운
input_text,input_file,input_image콘텐츠 파트 유형 - base64 데이터 URL(
file_data)을 통한 PDF 문서 및 이미지 지원 - SSRF 검증이 포함된 외부 파일 URL(
file_url) 지원 - 지원되지 않는
file_id참조에 대한 경고 로그 (Files API 통합 보류 중) - Anthropic(document/image 블록) 및 Gemini(inlinedata/filedata)용 백엔드별 변환기
- 모든 입력 유형에 대한 포괄적인 테스트 커버리지
- 새로운
수정됨¶
- 패스스루 원시 오류 응답 - 더 나은 오류 디버깅을 위해 패스스루 모드에서 백엔드 원시 오류 응답 전달
[0.31.4] - 2026-01-07¶
수정됨¶
- API 키 전달을 위한 핫 리로드 지원 - 프록시 및 스트리밍 핸들러에서 핫 리로드 지원 수정 (#310)
- 프록시 및 스트리밍 핸들러에서 캡처된 설정 스냅샷 대신
current_config()사용 - 핫 리로드를 통한 API 키 및 기타 설정 변경이 이제 새 요청에 올바르게 적용됨
- 런타임 설정 업데이트가 백엔드 요청 전달에 영향을 미치도록 보장
- 핫 리로드 api_key 적용을 위한 포괄적인 엔드투엔드 테스트 추가
- 프록시 및 스트리밍 핸들러에서 캡처된 설정 스냅샷 대신
[0.31.3] - 2026-01-06¶
수정됨¶
-
Unix 소켓 Anthropic 요청/응답 변환 - 변환 누락으로 인한 Unix 소켓을 통한 Anthropic 백엔드 실패 수정 (#307, #308)
- Unix 소켓 전송이 이제 HTTP 전송과 동일한 요청 변환을 Anthropic 백엔드에 적용
- OpenAI 형식 요청이 전송 전에 Anthropic 형식으로 올바르게 변환됨
- Anthropic 응답이 OpenAI 형식으로 다시 변환됨
- 엔드포인트가
/v1/chat/completions에서/v1/messages로 올바르게 재작성됨 - Unix 소켓 Anthropic 변환을 위한 포괄적인 통합 테스트 추가
-
Anthropic 비스트리밍 스트림 파라미터 - Anthropic 비스트리밍 요청에 대한 스트림 파라미터 보존 (#305, #306)
- 비스트리밍 경로에서
transform_openai_to_anthropic_request(stream: true 강제) 대신transform_openai_to_anthropic_with_global_prompt사용 stream: false인 요청이 잘못stream: true로 Anthropic API에 전송되는 문제 수정- 명확성을 위해
transform_openai_to_anthropic_request를transform_openai_to_anthropic_streaming으로 이름 변경
- 비스트리밍 경로에서
문서¶
- Jinja2 구문 이스케이프 - mkdocs-macros-plugin 오류를 방지하기 위해 한국어 설정 문서에서 Jinja2 구문 이스케이프
[0.31.2] - 2026-01-05¶
추가됨¶
-
Anthropic 백엔드의 비스트리밍 지원 - 비스트리밍 채팅 완료 호출에 대해 OpenAI 형식 요청을 Anthropic 형식으로 변환하고 Anthropic 응답을 OpenAI 형식으로 다시 변환
- Anthropic 백엔드로의 비스트리밍 요청이 이제 요청/응답 형식을 올바르게 변환
- 적절한 도구 호출 처리를 위해 transform_str을 사용하도록 스트리밍 핸들러 업데이트
-
Anthropic 백엔드의 도구 호출 및 도구 결과 변환 - Anthropic 모델로 라우팅 시 적절한 도구 사용 워크플로우 활성화
- 어시스턴트 메시지의 OpenAI 스타일 toolcalls를 Anthropic의 tooluse 형식으로 변환
- 도구 결과 메시지를 Anthropic의 tool_result 형식으로 변환
- Anthropic 모델과의 멀티턴 도구 사용 대화 활성화
의존성¶
- rustls, tokio-stream, syn을 포함한 12개 패키지를 최신 버전으로 업데이트
[0.31.1] - 2026-01-04¶
수정됨¶
- Anthropic 비스트리밍 인증 헤더 수정 - 잘못된 인증 헤더로 인한 Anthropic 비스트리밍 요청 실패 문제 수정 (#300, #301)
- Anthropic 백엔드로의 비스트리밍 요청이 이제
Authorization: Bearer대신x-api-key헤더를 올바르게 사용 - 모든 Anthropic 백엔드 요청에
anthropic-version헤더 추가 - HTTP 및 Unix 소켓 전송 경로 간 일관된 헤더 처리 적용
- Anthropic API가 "Invalid Anthropic API Key" 오류 (HTTP 400)를 반환하던 문제 수정
- Anthropic 백엔드로의 비스트리밍 요청이 이제
추가됨¶
- Responses API의 Reasoning 파라미터 지원 -
/v1/responses엔드포인트에reasoning파라미터 지원 추가 (#295)- 중첩 형식 지원:
{"reasoning": {"effort": "high"}} - 유효한 노력 수준:
low,medium,high,xhigh(GPT-5.2 전용) ReasoningEffortLevel열거형을 사용한 타입 안전 검증- 백엔드를 위한 평면
reasoning_effort형식으로 자동 변환 - 역직렬화 시 잘못된 노력 값은 명확한 오류 메시지와 함께 거부
ResponsesRequest에with_reasoning()빌더 메서드 추가
- 중첩 형식 지원:
- 와일드카드 패턴 및 모델 별칭의 날짜 접미사 처리 - 모델 별칭에서 와일드카드 패턴 및 자동 날짜 접미사 처리 지원 (#283)
- 자동 날짜 접미사 정규화: 날짜 접미사가 있는 모델 (예:
claude-opus-4-5-20251130)이 기본 모델 (예:claude-opus-4-5-20251101)의 메타데이터와 자동으로 매칭 - 지원되는 날짜 형식:
-YYYYMMDD,-YYYY-MM-DD,-YYMM,@YYYYMMDD *문자를 사용한 별칭의 와일드카드 패턴 매칭- 접두사 패턴:
claude-*가claude-opus,claude-sonnet등과 매칭 - 접미사 패턴:
*-preview가gpt-4o-preview,o1-preview등과 매칭 - 중위 패턴:
gpt-*-turbo가gpt-4-turbo,gpt-3.5-turbo등과 매칭 - 제로 설정 날짜 처리: 설정 변경 없이 자동으로 작동
- 매칭 우선순위: 정확한 ID > 정확한 별칭 > 날짜 접미사 > 와일드카드 > 기본 이름 폴백
- 자동 날짜 접미사 정규화: 날짜 접미사가 있는 모델 (예:
- llama.cpp 도구 호출 자동 감지 - llama.cpp 백엔드의 도구 호출 지원 자동 감지 (#260)
- 모델 검색 시
/props엔드포인트를 쿼리하여chat_template분석 - 도구 관련 키워드 감지 (
tool,tools,tool_call,function등) - 감지 시
function_calling기능 자동 활성화 /props엔드포인트를 사용할 수 없는 경우 우아한 폴백- HTTP 및 Unix 소켓 백엔드 모두에서 작동
- 모델 검색 시
- 완전한 Unix 소켓 지원 - 모델 검색 및 스트리밍을 위한 완전한 Unix 소켓 지원 (#248, #252, #253, #254, #256)
- Unix 소켓 백엔드의 SSE/스트리밍 지원으로 로컬 소켓을 통한 실시간 응답 가능
- Unix 소켓 연결을 위한 백엔드 타입 자동 감지
- Unix 소켓을 통한 vLLM 모델 검색 지원
- Unix 소켓을 통한 llama.cpp 모델 검색 지원
- 도구 호출 변환 (Tool Call Transformation) - 모든 백엔드에서 OpenAI 도구 호출 변환 구현 (#244, #245, #246)
- Anthropic, Gemini, llama.cpp 백엔드에 대한 도구 정의 변환
auto,none,required, 특정 함수 선택을 지원하는 도구 선택 변환- 프로바이더 간 통합 응답 형식을 위한 도구 호출 응답 변환
- 멀티턴 도구 대화 지원 - 멀티턴 대화에서 도구 호출을 위한 메시지 변환 (#241)
- 도구 결과 메시지 (
role: "tool")를 백엔드 네이티브 형식으로 변환 - Anthropic:
user역할로tool_result콘텐츠 블록과 함께 변환 - Gemini:
function역할로functionResponse파트와 함께 변환 - Anthropic용으로 연속 도구 결과 결합 (병렬 도구 호출)
- Gemini 변환을 위한 자동 함수 이름 조회
- 오류 응답을 위한
is_error표시자 보존
- 도구 결과 메시지 (
[0.26.0] - 2025-12-27¶
추가됨¶
- 도구 선택 변환 (Tool Choice Transformation) - 백엔드 간
tool_choice파라미터 자동 변환 (#239)auto,none,required, 특정 함수 선택 지원- Anthropic:
{"type": "auto|any|tool"}형식으로 변환, "none"은 도구 제거로 처리 - Gemini:
tool_config.function_calling_config구조로 변환 - llama.cpp: 병렬 함수 호출을 위해
parallel_tool_calls파라미터 유지 - 크로스 프로바이더 도구 호출을 위해 모델 폴백 시스템과 통합
- 단일 모델 조회 엔드포인트 - 가용성 상태가 포함된 단일 모델 조회를 위한 GET /v1/models/{model} 엔드포인트 추가 (#236)
- 실시간 가용성을 나타내는 추가
available필드와 함께 모델 정보 반환 available: true: 최소 하나의 건강한 백엔드가 모델을 제공할 때available: false: 모델은 존재하지만 이를 제공하는 모든 백엔드가 비정상일 때- 모델이 어느 백엔드에도 존재하지 않으면 404 반환
- 특정 모델 조회를 타겟팅하여 전체 모델 집계를 피함으로써 성능 최적화
- 실시간 가용성을 나타내는 추가
[0.25.0] - 2025-12-26¶
추가됨¶
- CORS (Cross-Origin Resource Sharing) 지원 - 웹 애플리케이션에 라우터를 임베드하기 위한 설정 가능한 CORS 미들웨어 (#234)
- Tauri 데스크톱 앱, Electron 앱, 웹 프론트엔드 지원
- 와일드카드 오리진 및 포트 패턴 (예:
http://localhost:*) - 커스텀 스킴 지원 (예:
tauri://localhost) - 설정 가능한 메서드, 헤더, credentials
- 설정 가능한 max-age의 프리플라이트 캐시
- Unix 도메인 소켓 백엔드 지원 - Unix 소켓을 통한 안전한 로컬 LLM 통신 (#232)
- 로컬 백엔드를 위한
unix:///path/to/socketURL 스킴 사용 - 파일 시스템 권한을 통한 더 나은 보안 (TCP 포트 노출 없음)
- localhost TCP 대비 낮은 지연 시간 (~30% 개선)
- 여러 LLM 서버 실행 시 포트 충돌 없음
- 플랫폼 지원: Linux 및 macOS (Windows는 향후 릴리스 예정)
- 로컬 백엔드를 위한
[0.23.1] - 2025-12-25¶
CI/CD¶
- Windows 빌드 지원 - 릴리스 워크플로우에 Windows x86_64 빌드 타겟 추가 (#224)
- 릴리스 파이프라인에서 네이티브 Windows 빌드 활성화
- mingw-w64를 사용한 Linux에서의 크로스 컴파일
[0.23.0] - 2025-12-23¶
추가됨¶
- GLM 4.7 모델 지원 - 사고 기능을 포함한 Zhipu AI의 GLM 4.7 모델 지원 추가 (#222)
- 전체 사양이 포함된 model-metadata.yaml의 모델 메타데이터 (355B MoE, 32B 활성 파라미터)
- 사고(thinking) 파라미터 지원:
enable_thinking(불린) 및thinking_budget(1-204,800 토큰) - 최대 131K 토큰 출력이 가능한 200K 컨텍스트 윈도우
- config.yaml.example에 Z.AI 백엔드 설정 예제 추가
- SiliconFlow 대체 백엔드 설정
- 모델 메타데이터에 대한 종합적인 통합 테스트
- 가격: 입력 토큰 $0.60/1M, 출력 토큰 $2.20/1M
- 사고 패턴 메타데이터 - 암시적 시작 태그를 사용하는 모델에 대한 사고 패턴 메타데이터 추가 (#218)
- 암시적 사고 시작 태그를 사용하는 모델 지원
- 사고 콘텐츠 추출을 위한 패턴 기반 감지
- GCP 서비스 계정 인증 - Gemini 백엔드에 GCP 서비스 계정 인증 지원 추가 (#208)
- JSON 키 파일 인증 지원
- 환경 변수 기반 인증
- 자동 토큰 갱신 및 관리
- 분산 추적 - 상관관계 ID 전파를 통한 분산 추적 추가 (#207)
- traceparent 헤더를 사용한 W3C Trace Context 지원
- 설정 가능한 trace ID, request ID, correlation ID 헤더
- 모든 재시도 시도에 걸친 Trace ID 전파
- 헤더에서 가져온 trace ID에 대한 보안 검증
- 새 모델 메타데이터 - NVIDIA Nemotron 3 Nano, Qwen Image Layered, Kakao Kanana-2 모델 메타데이터 추가 (#202)
- ASCII 다이어그램 교체 - MkDocs용 ASCII 다이어그램을 이미지로 교체하는 시스템 추가 (#200)
- MkDocs 빌드 시 ASCII 다이어그램을 SVG 이미지로 자동 교체
- 원시 Markdown에서 ASCII 아트 가시성 유지
변경됨¶
- CI 최적화 - 비코드 파일만 변경된 경우 Rust 테스트 건너뛰기 (#204)
- 문서 전용 변경에 대한 더 빠른 CI
- 테스트 실행을 위한 경로 기반 필터링
수정됨¶
- 캐시 스탬피드 방지 - singleflight, stale-while-revalidate, 백그라운드 갱신으로 캐시 스탬피드 방지 (#220)
- Singleflight 패턴으로 모델 캐시 만료 시 썬더링 허드 방지
- Stale-while-revalidate로 백그라운드에서 갱신하면서 즉시 캐시된 데이터 반환
- 백그라운드 갱신으로 만료 전 캐시를 사전에 업데이트
- 전역 프롬프트 핫 리로드 - 핫 리로드를 통한 global_prompts 변경 적용 (#219)
- 전역 프롬프트 설정 변경이 이제 재시작 없이 적용
- 모델 캐시 무효화 - 백엔드 설정 변경 시 모델 캐시 무효화 (#206)
- 백엔드 설정 변경이 이제 모델 캐시 갱신을 적절히 트리거
- 문서 개선 - 인라인 SVG 및 반응형 크기 조정으로 다이어그램 렌더링 개선
- 번역 오타 - 문서의 번역 오타 수정
- Docker CI 수정 - Docker 매니페스트 생성에서 멀티라인 태그 처리
- 프라이빗 저장소 접근 - CI에서 프라이빗 저장소 에셋 다운로드에 gh CLI 사용
- GitHub 토큰 인증 - 프라이빗 저장소 접근을 위한 GitHub 토큰 인증 추가
- 문서 워크플로우 - 환경 보호 오류를 방지하기 위해 문서 워크플로우에서 릴리스 트리거 제거
CI/CD¶
- actions/github-script를 7에서 8로 업데이트 (#210)
- apple-actions/import-codesign-certs를 3에서 6으로 업데이트 (#212)
- actions/cache를 4에서 5로 업데이트 (#211)
- actions/checkout을 4에서 6으로 업데이트 (#209)
[0.22.0] - 2025-12-19¶
추가됨¶
- 사전 빌드 바이너리 Docker 지원 - GitHub Releases에서 사전 빌드된 바이너리를 다운로드하는 Dockerfile 및 Dockerfile.alpine 추가 (#189)
- 일반 사용을 위한 Debian Bookworm 기반 이미지 (~50MB)
- 최소 배포를 위한 Alpine 3.20 기반 이미지 (~10MB)
- TARGETARCH를 사용한 멀티 아키텍처 지원 (linux/amd64, linux/arm64)
- 릴리스 버전 선택을 위한 VERSION 빌드 인자
- 보안을 위한 비루트 사용자 실행
- 이미지 메타데이터를 위한 OCI 라벨
- 컨테이너 헬스 체크 CLI - 컨테이너 오케스트레이션을 위한
--health-checkCLI 인자 구현 (#189)- 서버가 정상이면 종료 코드 0, 비정상이면 1 반환
- 사용자 정의 헬스 엔드포인트를 위한 선택적
--health-check-url - 적절한 IPv6 주소 처리
- 기본 5초 타임아웃
- Docker Compose 빠른 시작 - 간편한 배포를 위한 docker-compose.yml 추가 (#189)
- 설정을 위한 볼륨 마운트
- 환경 변수 지원 (RUST_LOG)
- 리소스 제한 및 헬스 체크
- 자동화된 Docker 이미지 퍼블리싱 - 릴리스 워크플로우에 Docker 빌드 및 ghcr.io 푸시 추가 (#189)
- 바이너리 릴리스 후 Debian 및 Alpine 이미지 빌드
- 멀티 플랫폼 지원 (linux/amd64, linux/arm64)
- semver로 자동 태깅 (VERSION, MAJOR.MINOR, latest)
- Alpine 이미지는 -alpine 접미사로 태그
- 더 빠른 빌드를 위한 GitHub Actions 캐시
- MkDocs 문서 웹사이트 - Material 테마로 종합적인 문서 사이트 구축 (#183)
- 시작하기, 기능, 운영, 개발 섹션이 있는 전체 네비게이션 구조
- GitHub Pages 자동 배포를 위한 GitHub Actions 워크플로우
- 사용자 정의 스타일시트 및 테마 구성
- 한국어 문서 번역 - 모든 문서의 완전한 한국어 현지화 (#190)
- 20개 문서 파일 모두 한국어로 번역
- 네비게이션에 언어 전환기 (영어/한국어)
- GitHub Actions 워크플로우에서 다국어 빌드
- 의존성 보안 감사 - 취약점 스캔을 위한 cargo-deny 추가 (#192)
- CI 워크플로우에서 보안 권고 확인
- 라이선스 준수 검증
- 의존성 소스 검증
- Dependabot 통합 - Cargo 및 GitHub Actions 자동 의존성 업데이트 (#192)
- 보안 정책 - 취약점 보고 프로세스를 포함한 종합적인 SECURITY.md 추가 (#191)
변경됨¶
- 고아 아키텍처 문서를 MkDocs 사이트에 통합 (#186)
- URL 친화적 파일명을 위해 문서 파일명을 소문자 케밥케이스로 변경 (#186)
- 다양한 GitHub Actions를 최신 버전으로 업데이트 (checkout@v6, setup-python@v6, upload-artifact@v6 등)
수정됨¶
- 헬스 체크 응답 검증 로직 버그 (연산자 우선순위 문제)
- 설정 오류를 조용히 숨기던 주소 파싱 폴백
- 헬스 체크에서 IPv6 주소 형식 지정 (이제 브라켓 표기법을 올바르게 사용)
보안¶
- reqwest 0.11→0.12, prometheus 0.13→0.14, validator 0.18→0.20 업데이트
- 더 나은 유지보수를 위해 dotenv를 dotenvy로 교체
- 빌드 컨텍스트에서 민감한 파일 제외를 위한 .dockerignore 추가
[0.21.0] - 2025-12-19¶
추가됨¶
- Gemini 3 Flash Preview 모델 - gemini-3-flash-preview 모델 지원 추가 (#168)
- 백엔드 오류 전달 - 4xx 응답에 대해 백엔드의 상세 오류 메시지 전달 (#177)
- OpenAI, Anthropic, Gemini 백엔드의 원본 오류 메시지 파싱 및 전달
- 가능한 경우
param필드 보존 (잘못된 파라미터 오류에 유용) - 백엔드 응답 파싱 불가 시 일반 오류 메시지로 폴백
- OpenAI 호환 오류 형식 유지
- 모든 백엔드 형식에 대한 오류 파싱 단위 테스트 포함
- API 엔드포인트 기본 인증 모드 - API 엔드포인트에 대한 설정 가능한 인증 적용 (#173)
api_keys설정에 새mode필드:permissive(기본값) 또는blockingpermissive모드: API 키 없는 요청 허용 (하위 호환성 유지)blocking모드: 인증된 요청만 처리, 미인증 요청은 401 수신- 보호 엔드포인트:
/v1/chat/completions,/v1/completions,/v1/responses,/v1/images/*,/v1/models - 헬스 엔드포인트 (
/health,/healthz)는 항상 인증 없이 접근 가능 - 인증 모드 변경에 대한 핫 리로드 지원
- 두 모드에 대한 포괄적인 통합 테스트
- API.md, configuration.md, manpage 문서 업데이트
수정됨¶
- UTF-8 멀티바이트 문자 손상 - 스트리밍 응답에서 UTF-8 멀티바이트 문자 손상 처리 (#179)
- GPT Image response_format - GPT Image 모델에서 response_format 파라미터 제거 (#176)
- 자동 검색 검증 - Anthropic을 제외한 모든 백엔드에 대해 자동 검색 허용 (#172)
변경됨¶
[0.20.0] - 2025-12-18¶
추가됨¶
- Gemini 이미지 변형 지원 - Gemini (nano-banana) 모델에 대한 이미지 변형 지원 추가 (#165)
- Gemini 이미지 편집 지원 - Gemini (nano-banana) 모델에 대한 제한적 이미지 편집 지원 구현 (#164)
- 향상된 이미지 생성 - 스트리밍 및 GPT Image 기능으로 /v1/images/generations 향상 (#161)
- GPT Image 1.5 모델 - gpt-image-1.5 모델 지원 추가 (#159)
- 이미지 변형 엔드포인트 - 이미지 변형을 위한 /v1/images/variations 엔드포인트 구현 (#155)
- 이미지 편집 엔드포인트 - 이미지 편집(인페인팅)을 위한 /v1/images/edits 엔드포인트 구현 (#156)
- 완전한 OpenAI Images Edit API 호환성
- GPT Image 모델 지원:
gpt-image-1,gpt-image-1-mini,gpt-image-1.5(권장) dall-e-2모델 레거시 지원- 공유 유틸리티를 사용한 multipart form-data 파싱
- PNG 이미지 검증 (형식, 크기, 정사각형 치수)
- 선택적 마스크 검증 (원본 이미지와 치수 일치)
- 공유 이미지 유틸리티 - 이미지 편집/변형 엔드포인트를 위한 공유 유틸리티 구현 (#154)
- 외부 프롬프트 파일 - 외부 Markdown 파일에서 시스템 프롬프트 로딩 지원 (#146)
BackendPromptConfig및ModelPromptConfig에 새prompt_file필드GlobalPromptConfig에 새default_file및prompts_dir필드- 경로 순회 공격 방지를 위한 안전한 경로 검증
- 프롬프트 파일 관리를 위한 REST API 엔드포인트
- 크기 제한이 있는 파일 캐싱 (최대 100개 항목, 총 50MB)
- 프롬프트 파일에 대한 핫 리로드 지원
- Solar Open 100B 모델 - Solar Open 100B 모델 메타데이터 추가
- 자동 모델 검색 - 모델이 명시적으로 설정되지 않은 경우 백엔드가
/v1/modelsAPI에서 자동으로 사용 가능한 모델 검색 (#142)- OpenAI, Gemini, vLLM 백엔드가 자동 검색 지원
- Ollama 백엔드는 vLLM의 검색 메커니즘 사용 (OpenAI 호환 API)
- 10초 타임아웃으로 시작 차단 방지
- 검색 실패 시 하드코딩된 기본값으로 폴백
변경됨¶
BackendFactory::create_backend_from_typed_config()가 비동기 모델 검색을 지원하기 위해 async로 변경- OpenAI, Gemini, vLLM의 백엔드
from_config()메서드가 async로 변경
보안¶
- API 키 수정 - 자격 증명 노출 방지를 위한 API 키 수정 구현 (#150)
성능¶
- 바이너리 크기 최적화 - 릴리스 바이너리 크기를 20MB에서 6MB로 최적화 (70% 감소) (#144)
리팩토링¶
- 이슈 #147의 우선순위 2를 위한 대용량 파일 분할
- 각 파일을 500줄 미만으로 유지하기 위한 대용량 파일 분할 (#148)
[0.19.0] - 2025-12-13¶
추가됨¶
- 런타임 설정 관리 API - 런타임에 설정을 보고 수정하기 위한 포괄적인 REST API (#139)
- 설정 쿼리 API:
GET /admin/config/full- 민감 정보가 마스킹된 전체 설정 조회GET /admin/config/sections- 15개 설정 섹션 전체 목록GET /admin/config/{section}- 특정 섹션 설정 조회GET /admin/config/schema- 클라이언트 측 검증을 위한 JSON Schema
- 설정 수정 API:
PUT /admin/config/{section}- 섹션 설정 교체PATCH /admin/config/{section}- 부분 업데이트 (JSON merge patch)POST /admin/config/validate- 적용 전 설정 검증POST /admin/config/apply- 핫 리로드로 설정 적용
- 설정 저장/복원 API:
POST /admin/config/export- 설정 내보내기 (YAML/JSON/TOML)POST /admin/config/import- 설정 가져오기 및 적용GET /admin/config/history- 설정 변경 이력 조회POST /admin/config/rollback/{version}- 이전 버전으로 롤백
- 백엔드 관리 API:
POST /admin/backends- 새 백엔드 추가GET /admin/backends/{name}- 백엔드 설정 조회PUT /admin/backends/{name}- 백엔드 설정 업데이트DELETE /admin/backends/{name}- 백엔드 제거PUT /admin/backends/{name}/weight- 백엔드 가중치 업데이트PUT /admin/backends/{name}/models- 백엔드 모델 목록 업데이트
- API 키, 비밀번호, 토큰에 대한 민감 정보 마스킹
- 모든 설정 섹션에 대한 JSON Schema 생성
- 설정 이력 추적 (최대 100개 항목, 설정 가능)
- 크기 기반 퇴거를 통한 메모리 효율적 이력 저장 (10MB 제한)
- 스레드 안전성을 위한 AtomicU64 사용 원자적 버전 카운터
- 오류 코드가 포함된 구조화된 오류 응답
- 설정 쿼리 API:
- Admin REST API 문서 - 포괄적인 개발자 가이드 (docs/admin-api.md)
- 요청/응답 예제가 포함된 완전한 API 레퍼런스
- Python, JavaScript/TypeScript, Go용 클라이언트 SDK 예제
- 모범 사례 및 보안 고려사항
- 통합 테스트 - 설정 관리 API 엔드포인트에 대한 33개 통합 테스트
수정됨¶
- 심각: 설정 변경이 이제 실행 중인 시스템에 실제로 적용됨
- 심각: JSON 문자열 저장 및 크기 기반 퇴거로 메모리 증가 제어
- 높음: 입력 검증 추가 (1MB 콘텐츠 제한, 32레벨 중첩 깊이)
- 높음: 민감 내보내기에 권한 상승 및 감사 로깅 필요
- 높음: 포괄적인 민감 필드 감지 (30개 이상 패턴)
- 중간: 검증 함수가 이제 실제 검증 수행
- 중간: 버전 카운터에 AtomicU64로 경쟁 조건 수정
- 중간: 허용된 백엔드 이름 문자에서 콜론 제거
- 중간: 오류 코드가 포함된 구조화된 오류 응답
- 중간: 초기화 플래그로 중복 이력 항목 방지
- 낮음: 더 나은 성능을 위해 불필요한 클론 제거
- 낮음: AdminConfig를 통해 제한 설정 가능
- 낮음: 중복 검증 로직 리팩토링
- 낮음: 엣지 케이스에 대한 테스트 커버리지 개선
변경됨¶
- 모든 가이드에서 설정 관리 API 문서 향상
- 새 관리 엔드포인트로 manpage 업데이트
- 포괄적인 설정 관리 API 섹션으로 API.md 업데이트
[0.18.0] - 2025-12-13¶
추가됨¶
- API 키별 속도 제한 - API 키별 속도 제한 구현 (#137)
- 각 API 키에 대한 개별 속도 제한
- 키당 분당 요청 수 설정 가능
- API 키 관리 시스템 - 포괄적인 API 키 관리 및 설정 시스템
- 다중 키 소스: 설정 파일, 외부 파일, 환경 변수
- 키 속성: 스코프, 속도 제한, 만료, 활성화 상태
- 키 설정 변경에 대한 핫 리로드 지원
- Files API 인증 - Files API에 대한 인증 및 권한 부여 구현 (#131)
- 파일 작업에 대한 API 키 인증
- 파일 소유권 적용
- 모든 파일에 대한 관리자 접근 제어
- 런타임 설정 핫 리로드 - 런타임 설정 업데이트를 위한 완전한 핫 리로드 기능 (#130)
- 자동 설정 파일 감시
- 분류된 업데이트: 즉시, 점진적, 재시작 필요
변경됨¶
- 모듈식 구조로 대규모 리팩토링
- 리팩토링된 모듈 구조를 반영하도록 architecture.md 업데이트
수정됨¶
- admin/metrics/files 엔드포인트에 ConnectInfo 확장 추가
- API 키 관리의 보안 취약점 해결
- API 키 관리의 코드 품질 문제 해결
문서¶
- API 키 관리 문서 추가
- 포괄적인 API 키 관리 테스트 추가
[0.17.0] - 2025-12-12¶
추가됨¶
- Anthropic 백엔드 파일 콘텐츠 변환 - 라우터에 업로드된 파일을 이제 Anthropic 백엔드와 함께 사용 가능 (#126)
- 파일 콘텐츠를 Anthropic 메시지 형식으로 자동 변환
- base64 인코딩을 사용한 텍스트 및 문서 파일 지원
- 파일 해결 미들웨어와 원활한 통합
- Gemini 백엔드 파일 콘텐츠 변환 - 라우터에 업로드된 파일을 이제 Gemini 백엔드와 함께 사용 가능 (#127)
- 파일 콘텐츠를 Gemini API 형식으로 자동 변환
- 적절한 MIME 타입 처리를 통한 인라인 데이터 지원
- 크로스 프로바이더 파일 지원으로 한 번 업로드한 파일을 모든 백엔드에서 사용 가능
수정됨¶
- 스트리밍 파일 업로드 - 메모리 소진 방지를 위한 스트리밍 파일 업로드 구현 (#128)
- 대용량 파일 업로드가 더 이상 전체 파일을 메모리에 로드하지 않음
- 효율적인 메모리 사용을 위한 스트리밍 처리
- 대용량 파일 업로드 시 OOM 오류 방지
변경됨¶
- 없음
[0.16.0] - 2025-12-12¶
추가됨¶
- OpenAI 호환 Files API - OpenAI Files API 엔드포인트 전체 구현 (#111)
- multipart/form-data 지원 파일 업로드
- 파일 목록, 조회, 삭제
- 파일 콘텐츠 다운로드
- 용도 지원: fine-tune, batch, assistants, user_data
- 파일 해결 미들웨어 - 채팅 완료를 위한 자동 파일 콘텐츠 주입 (#120)
- 파일 ID로 채팅 메시지에서 업로드된 파일 참조
- 채팅 컨텍스트에 자동 콘텐츠 주입
- 영속적 메타데이터 스토리지 - 서버 재시작 후에도 파일 메타데이터 유지 (#125)
- 데이터 파일과 함께 저장되는 사이드카 JSON 파일 (.meta.json)
- 파일에서 메타데이터 재빌드를 통한 시작 시 자동 복구
- 고아 파일 감지 및 선택적 정리
- OpenAI 백엔드 파일 처리 - 로컬에 업로드된 파일이 필요시 OpenAI로 전달됨 (#121, #122)
- GPT-5.2 모델 지원 - OpenAI 백엔드에 GPT-5.2 모델 메타데이터 추가 (#124)
- 서킷 브레이커 패턴 - 서킷 브레이커를 통한 자동 백엔드 장애 조치 (#93)
- 상태: Closed → Open → Half-Open → Closed 사이클
- 설정 가능한 실패 임계값 및 복구 타임아웃
- 백엔드별 서킷 브레이커 인스턴스
- 서킷 브레이커 상태 및 제어를 위한 관리자 엔드포인트
- 관리자 엔드포인트 인증 - 인증 및 감사 로깅으로 관리자 엔드포인트 보안
- 설정 가능한 폴백 모델 - 모델 사용 불가 시나리오에 대한 자동 모델 폴백 (#50)
- 기본 모델에 대한 폴백 체인 정의 (예: gpt-4o → gpt-4-turbo → gpt-3.5-turbo)
- 크로스 프로바이더 폴백 지원 (예: OpenAI → Anthropic)
- 프로바이더 간 자동 파라미터 변환
- 계층화된 장애 조치 보호를 위한 서킷 브레이커와 통합
- 설정 가능한 트리거 조건 (오류 코드, 타임아웃, 연결 오류, 서킷 브레이커 오픈)
- 폴백 사용 시 응답 헤더 표시 (X-Fallback-Used, X-Original-Model, X-Fallback-Model)
- 폴백 모니터링을 위한 Prometheus 메트릭
- Pre-commit Hook - 커밋 전 자동 코드 포맷팅 및 린팅
수정됨¶
- 폴백 체인 검증 - 체인 검증을 Validate derive에 통합
- 폴백 성능 - 폴백 체인 순회를 위한 인덱스 기반 조회 사용
- 락 경합 - 스냅샷 패턴으로 FallbackService의 락 경합 감소
- 보안 - 폴백 오류 헤더 및 메트릭 레이블 살균
- 서킷 브레이커 보안 - 관리자 엔드포인트에 백엔드 이름 검증 추가
- 스레드 안전성 - half-open 요청 제한을 위한 스레드 안전 CAS 루프 사용
변경됨¶
- 문서 업데이트 - 폴백 설정, 서킷 브레이커, Files API에 대한 포괄적인 문서
- 코드 품질 - clippy 경고 수정 및 코드 포맷팅
- Pre-commit Hook 위치 - pre-commit hook을 .githooks 디렉토리로 이동
[0.15.0] - 2025-12-05¶
추가됨¶
- Nano Banana API 지원 - OpenAI 호환 인터페이스로 Gemini 이미지 생성 API 지원 추가 (#102)
- nano-banana 및 nano-banana-pro 모델 지원
- OpenAI Images API와 Gemini Imagen API 간 자동 형식 변환
- /v1/models 엔드포인트 분리 - 표준 경량 응답 vs 확장 메타데이터 응답 (#101)
/v1/models는 더 나은 성능을 위해 경량 응답 반환/v1/models?extended=true는 상세 모델 정보를 위한 전체 메타데이터 반환
변경됨¶
- StreamService 추출 - 모듈식 아키텍처를 위해 스트리밍 핸들러 로직을 전용 StreamService로 추출 (#106)
- 재시도 로직 중복 제거 - proxy.rs에서 재시도 로직 코드 통합 (#103)
수정됨¶
- 적절한 오류 전파 - HttpClientFactory에서
.expect()패닉을 적절한 오류 전파로 교체 (#104)
성능¶
- LRU 캐시 최적화 - 캐시 조회에 쓰기 락 대신 읽기 락 사용 (#105)
[0.14.2] - 2025-12-05¶
추가됨¶
- 토큰 사용량 로깅 - 요청 완료 시 입력/출력 토큰 수 로깅 (#92)
- 리포트 제외 목록 - 리포트에 대한 제외 목록 설정 추가
변경됨¶
- 없음
수정됨¶
- 없음
[0.14.1] - 2025-12-05¶
추가됨¶
- TTFB 벤치마크 타겟 - Makefile에 TTFB 벤치마크 타겟 추가
- 연결 사전 준비 - Anthropic, Gemini, OpenAI 백엔드에 대한 연결 사전 준비 추가
수정됨¶
- Anthropic 백엔드 TTFT - 연결 풀링 및 HTTP/2로 Anthropic 백엔드 TTFT 최적화 (#90)
- Gemini 백엔드 TTFT - 연결 풀링 및 HTTP/2로 Gemini 백엔드 TTFT 최적화 (#88)
- 모델 메타데이터 별칭 매칭 - 모델 메타데이터 조회에서 별칭에 기본 이름 폴백 매칭 적용 (#84)
변경됨¶
- 공유 HTTP 클라이언트 - HealthChecker와 요청 핸들러 간 HTTP 클라이언트 공유
- 아키텍처 및 성능 문서 업데이트
[0.14.0] - 2025-12-04¶
추가됨¶
- 전역 시스템 프롬프트 주입 - 라우터 전역 시스템 프롬프트 주입 추가 (#82)
수정됨¶
- GitHub Actions - 더 이상 사용되지 않는 actions-rs/toolchain을 dtolnay/rust-toolchain으로 교체
- macOS ARM64 빌드 - macOS ARM64 ring 빌드를 위한 RUSTFLAGS 추가
- musl 빌드 - musl 크로스 컴파일 지원을 위해 rustls-tls로 전환
변경됨¶
- GitHub Action runner 업데이트
[0.13.0] - 2025-12-04¶
추가됨¶
- OpenAI Responses API (
/v1/responses) - OpenAI Responses API 전체 구현 (#49)- 자동 만료가 있는 세션 기반 응답 관리
- 만료된 세션에 대한 백그라운드 정리 작업
- Responses API와 Chat Completions 간 요청/응답 형식 변환기
- API 키용 SecretString - 모든 백엔드에서 SecretString을 사용한 안전한 API 키 저장 (#76)
- 모델 메타데이터 오버라이드 - model-metadata.yaml을 통한 /v1/models 응답 필드 오버라이드 허용 (#75)
수정됨¶
- 진정한 SSE 스트리밍 - /v1/responses API에 대한 적절한 Server-Sent Events 스트리밍 구현
변경됨¶
- SseParser 즉시 모드 - 즉시 파싱 모드로 첫 응답 지연 감소
- 문자열 할당 최적화 - 할당 감소로 성능 개선
- 오류 처리 표준화 - 코드베이스 전체에 일관된 오류 처리 패턴
보안¶
- 세션 접근 제어 - 세션 관리에 적절한 접근 제어 추가
- 입력 검증 - Responses API에 대한 포괄적인 입력 검증
[0.12.0] - 2025-12-04¶
추가됨¶
- SSRF 방지 모듈 - 포괄적인 SSRF 방지를 위한 새 UrlValidator 모듈 (#66)
- 중앙화된 HTTP 클라이언트 팩토리 - 백엔드 간 일관된 HTTP 클라이언트 생성을 위한 HttpClientFactory (#67)
수정됨¶
- 일관된 해시 알고리즘 - 적절한 라우팅을 위해 이진 검색에서 정확한 해시 일치 처리 (#72)
- 패닉을 Option 반환으로 교체 - 패닉을 Option 반환으로 교체하여 신뢰성 향상 (#71)
- 하드코딩된 인증 요구사항 제거 - /v1/models 엔드포인트에 더 이상 하드코딩된 인증 필요 없음
- GitHub Actions - Projects V2 API 접근을 위해 GitHub App 토큰 사용
변경됨¶
- OpenAI 모델 메타데이터 재구성 - 더 나은 유지보수성을 위해 모델 메타데이터를 패밀리별로 구성 (#74)
- AnthropicStreamTransformer 추출 - Anthropic 스트림 변환을 위한 전용 모듈 (#73)
- Backends 모듈 분할 - 더 깔끔한 아키텍처를 위해 backends mod.rs를 별도 모듈로 분할 (#69)
- 임베디드 테스트 추출 - 더 나은 구성을 위해 테스트를 별도 파일로 이동 (#68)
- RequestExecutor 추출 - 요청 실행을 위한 공유 공통 모듈 (#65)
- HeaderBuilder 추출 - 인증 전략을 전용 모듈로 이동 (#64)
- AtomicStatistics 추출 - 원자적 통계를 위한 공유 공통 모듈
기술 개선¶
- 모듈식 아키텍처로 코드 구성 개선
- 더 나은 관측성을 위한 통계 집계 구현
- SSRF 방지 기능으로 보안 강화
[0.11.0] - 2025-12-03¶
추가됨¶
- 네이티브 Anthropic Claude API 백엔드 (
type: anthropic) - OpenAI 호환 엔드포인트 (#33)CONTINUUM_ANTHROPIC_API_KEY환경 변수에서 자동 API 키 로드- Claude 사고 모델을 위한 확장 사고 블록 지원
- OpenAI에서 Claude로 reasoning 파라미터 변환 (
reasoning_effort) - 플랫
reasoning_effort파라미터 지원
- Claude 4, 4.1, 4.5 모델 메타데이터 문서
수정됨¶
- Anthropic/Gemini 백엔드에 대한 헬스 체크 및 모델 가져오기 개선
- 압축 문제 방지를 위해 스트리밍 요청에
Accept-Encoding: identity헤더 추가 - 적절한 Accept-Encoding 처리를 위해 proxy.rs의
make_backend_request수정
변경됨¶
- 리팩토링: 코드 포맷팅 적용 및 clippy 경고 수정
- 리팩토링: Accept-Encoding 헤더 대신 reqwest
no_gzip/no_brotli/no_deflate사용
[0.10.0] - 2025-12-03¶
추가됨¶
- 네이티브 Google Gemini API 백엔드 (
type: gemini) - OpenAI 호환 엔드포인트 (#32)CONTINUUM_GEMINI_API_KEY환경 변수에서 자동 API 키 로드- 사고 모델 (gemini-2.5-pro, gemini-3-pro)에 대한 300초 확장 스트리밍 타임아웃
- 응답 잘림 방지를 위한 사고 모델의 자동
max_tokens조정 reasoning_effort파라미터 지원
- 네이티브 OpenAI API 백엔드 (
type: openai) - 내장 설정CONTINUUM_OPENAI_API_KEY환경 변수에서 자동 API 키 로드- /v1/models 응답에 내장 OpenAI 모델 메타데이터
- OpenAI Images API 지원 (
/v1/images/generations) - DALL-E 및 gpt-image-1 모델 (#35)- 설정 가능한 이미지 생성 타임아웃 (
timeouts.request.image_generation) - 이미지 생성 파라미터에 대한 포괄적인 입력 검증
- 이미지 생성 API에 대한 응답 형식 검증
- 설정 가능한 이미지 생성 타임아웃 (
- OpenAI 및 API 키 백엔드에 대한 인증된 헬스 체크
- 스트리밍 요청에 API 키 인증
- 설정된 모델만 표시하도록 /v1/models 필터링
- -c/--config로 명시적으로 지정된 경우 모든 설정 파일 경로 허용
.env.example및 타입이 지정된 백엔드 설정 예제- GLM 4.6, Kimi K2, DeepSeek, GPT, Qwen3 시리즈에 대한 포괄적인 모델 메타데이터
수정됨¶
- 사고 모델 (gemini-2.5-pro, gemini-3-pro)의 스트리밍 응답 잘림
- Gemini 백엔드의 모델 ID 정규화 및 스트리밍 호환성
- 최신 OpenAI 모델에 대해
max_tokens를max_completion_tokens로 변환 - 모든 API 엔드포인트에 대한 올바른 URL 구성
- 보안: 디버그 로그에서 민감 데이터 제거
- 보안: DoS 공격 방지를 위한 요청 본문 크기 제한 추가
변경됨¶
- 리팩토링: RequestType enum으로 요청 재시도 로직 통합
- 리팩토링: 락 프리 통계 및 슬라이스 반환으로 Gemini 백엔드 성능 개선
- Gemini 백엔드 문서 및 max_tokens 동작 문서 추가
- 이미지 생성 API 문서 추가
- model-metadata.yaml의 기능 명명 표준화
[0.9.0] - 2025-12-02¶
추가됨¶
- 네이티브 Google Gemini API 백엔드 (
type: gemini) - OpenAI 호환 엔드포인트 (#32)CONTINUUM_GEMINI_API_KEY환경 변수에서 자동 API 키 로드- 사고 모델 (gemini-2.5-pro, gemini-3-pro)에 대한 300초 확장 스트리밍 타임아웃
- 응답 잘림 방지를 위한 사고 모델의 자동
max_tokens조정 reasoning_effort파라미터 지원
- DALL-E 및 gpt-image-1 모델을 위한 OpenAI Images API 지원 (
/v1/images/generations) (#35) - 설정 가능한 이미지 생성 타임아웃 (
timeouts.request.image_generation) - GPT-5 패밀리, o-시리즈, 오디오/음성, 비디오 (Sora), 임베딩 모델을 포함한 OpenAI 모델의 포괄적인 메타데이터
- 토큰 버킷 알고리즘을 사용한 향상된 속도 제한 (#11)
- 포괄적인 Prometheus 메트릭 및 모니터링 (#10)
- 설정 파일 마이그레이션 및 자동 수정 CLI 유틸리티 (#29)
- 메트릭 엔드포인트에 대한 포괄적인 인증
수정됨¶
- 심각: 토큰 리필에서 경쟁 조건 제거
- 심각: SHA-256 해싱으로 API 키 보호
- 심각: 무제한 버킷 증가를 통한 메모리 소진 방지
- 심각: 헤더 인젝션 취약점 방지
- 높음: X-Forwarded-For 조작을 통한 IP 스푸핑 방지
- 높음: 메모리 누수 방지를 위한 메트릭 싱글톤 패턴 구현
- 높음: 불필요한 문자열 할당 제거
- 높음: 속도 제한을 위한 모델 추출 구현
- 메트릭 폭발 DoS 공격 방지를 위한 포괄적인 카디널리티 제한 및 레이블 살균 추가
- 패닉 조건 방지를 위한 오류 처리 개선
- 설정 테스트에서 환경 변수 경쟁 조건 해결
- 메트릭 RequestTimer의 통합 테스트 실패 수정
- 메트릭 보안 모듈의 단위 테스트 실패 수정
변경됨¶
- 리팩토링: 속도 제한에서 과도한 Arc 래핑 제거
- 더 나은 유지보수성을 위한 문서 구조 재구성
- 포괄적인 메트릭 문서 추가
- 속도 제한 기능 문서 업데이트
- 개발용 mock 서버 및 샘플 설정 파일 제거
- 임시 테스트 파일 제거 및 gitignore 개선
- 중복 man 페이지 제거 및 gitignore 업데이트
- 올바른 레포지토리를 언급하도록 README.md 업데이트
- 릴리스 워크플로우 업데이트
[0.8.0] - 2025-09-09¶
추가됨¶
- 메타데이터 공유를 위한 모델 ID 별칭 지원 (#27)
- 포괄적인 속도 제한 문서
- 캐시 포이즈닝을 통한 DoS 방지를 위한 models 엔드포인트에 강력한 속도 제한
수정됨¶
- 모든 백엔드가 비정상일 때 503 대신 빈 목록 반환 (#28)
- 오류 처리 및 분류 개선
- await 지점에서 보유된 MutexGuard에 대한 clippy 경고 해결
변경됨¶
- 더 실용적인 /v1/models 엔드포인트 속도 제한 증가
- configuration.md에 별칭 기능 문서 추가
[0.7.1] - 2025-09-08¶
수정됨¶
- 홈 디렉토리 및 실행 파일 경로에 대한 설정 경로 검증 개선 (#26)
[0.7.0] - 2025-09-07¶
추가됨¶
- 풍부한 메타데이터 지원으로 /v1/models 엔드포인트 확장 (#23) (#25)
- 향상된 설정 관리 (#9) (#22)
- 향상된 오류 처리를 포함한 고급 로드 밸런싱 전략 (#21)
수정됨¶
- 하드코딩된 25초 제한 대신 config.yaml의 스트리밍 타임아웃 설정 사용
변경됨¶
- 제외 목록에 yaml 추가
[0.6.0] - 2025-09-03¶
추가됨¶
- GitHub Project 자동화 워크플로우
- 포괄적인 타임아웃 설정 및 모델 문서 업데이트
수정됨¶
- 하드코딩된 값 대신 config.yaml의 타임아웃 설정 사용 (#19)
- clippy 경고 및 벤치마크 컴파일 문제 수정
변경됨¶
- cargo fmt 적용
[0.5.0] - 2025-09-02¶
추가됨¶
- 계층화된 설계를 갖춘 확장 가능한 아키텍처 (#16)
- 포괄적인 통합 테스트 및 성능 최적화
- 완전한 서비스 레이어 구현
- 미들웨어 아키텍처 및 향상된 백엔드 추상화
- CLI 및 설정 파일 지원을 포함한 설정 가능한 연결 풀 크기
- YAML 지원을 포함한 포괄적인 설정 관리 (#7)
- continuum-router용 Debian 패키징 및 man 페이지
수정됨¶
- 테스트에서 Option
올바르게 처리 - 모델 필드 없는 스트리밍 요청을 우아하게 처리하도록 테스트 업데이트
- 테스트에서 부동 소수점 정밀도 및 타이밍 문제 해결
- 객체 풀 및 SSE 파서에서 테스트 실패 및 교착 상태 해결
- CI 테스트 실패 해결 및 테스트 성능 개선
- CI 환경에서 설정 감시자 테스트 실패 해결
- 초기 헬스 체크 경쟁 조건 해결
- 오류 처리 및 재시도 로직의 심각한 보안 취약점
- 타이밍 변동에 대한 타임아웃 테스트 허용 오차 조정
변경됨¶
- 더 나은 가독성을 위해 복잡한 타입을 타입 별칭으로 추출
- 모든 cargo fmt 및 clippy 경고 해결
- 합리적인 기본값으로 재시도 설정을 선택적으로 변경
- 설정 접근 최적화 및 포괄적인 타임아웃 관리 추가
- 타임아웃 설정의 모델 이름을 최신 버전으로 업데이트
- 완전한 문서 업데이트
- 과대 모듈을 계층화된 아키텍처로 분할
성능¶
- 설정 접근 최적화 및 포괄적인 타임아웃 관리 추가
[0.4.0] - 2025-08-25¶
추가됨¶
- 헬스 모니터링을 포함한 모델 기반 라우팅 (#6)
수정됨¶
- 더 나은 호환성을 위한 헬스 체크 통합 및 SSE 파싱 개선
변경됨¶
- README.md 업데이트
[0.3.0] - 2025-08-25¶
추가됨¶
- 실시간 채팅 완료를 위한 SSE 스트리밍 지원 (#5)
수정됨¶
- 스트리밍 응답에서 비성공 상태 코드 처리
- 백엔드가 404 또는 기타 오류 상태 코드를 반환해도 스트리밍 계속 허용
- 클라이언트에 백엔드 오류 상태를 알리기 위해 SSE 오류 이벤트를 먼저 전송
[0.2.0] - 2025-08-25¶
추가됨¶
- 여러 엔드포인트에서 모델 집계 (#4)
[0.1.0] - 2025-08-24¶
추가됨¶
- OpenAI 호환 엔드포인트 및 프록시 기능
- 사용 가능한 모델 목록을 위한
/v1/models엔드포인트 - 레거시 OpenAI completions API를 위한
/v1/completions엔드포인트 - 채팅 API를 위한
/v1/chat/completions엔드포인트 - 라운드 로빈 로드 밸런싱을 포함한 다중 백엔드 지원 (#1)
- 적절한 오류 메시지를 포함한 정의되지 않은 라우트용 폴백 핸들러
수정됨¶
- 모든 엔드포인트에서 오류 처리 일관성 개선
변경됨¶
- 변경 내역 및 버전 정보로 README 업데이트
마이그레이션 노트¶
v0.16.0으로 업그레이드¶
- 새 Files API:
/v1/files에서 OpenAI 호환 Files API 사용 가능- 파인 튜닝, 배치 처리, 어시스턴트를 위한 파일 업로드
- 파일은 영속적 메타데이터와 함께 로컬에 저장
- config.yaml의
files_api섹션을 통해 설정
- 파일 해결: 채팅 완료에서 업로드된 파일 참조
- 자동 콘텐츠 주입을 위해 채팅 메시지에서 파일 ID 사용
- 영속적 메타데이터: 파일 메타데이터가 서버 재시작 후에도 유지
- files_api 설정에서
metadata_storage: persistent(기본값) 설정 - 고아 파일 자동 정리를 위해
cleanup_orphans_on_startup: true설정
- files_api 설정에서
- 서킷 브레이커: 자동 백엔드 장애 조치를 위해 config.yaml에
circuit_breaker섹션 추가- 실패 임계값, 복구 타임아웃, half-open 요청 설정
- 새 폴백 기능: 자동 모델 폴백을 위해 config.yaml에
fallback섹션 추가- 폴백 체인 정의:
fallback_chains: { "gpt-4o": ["gpt-4-turbo", "gpt-3.5-turbo"] } fallback_policy에서 트리거 조건 설정- 크로스 프로바이더 폴백 지원 (예: OpenAI → Anthropic)
- 폴백 체인 정의:
- 서킷 브레이커 통합: 기존 서킷 브레이커와 통합하려면 trigger_conditions에서
circuit_breaker_open: true설정 - 응답 헤더: 폴백 사용 시
X-Fallback-Used헤더 확인 - GPT-5.2 지원: 새 GPT-5.2 모델 메타데이터 사용 가능
- v0.15.0에서 호환성 깨짐 없음
v0.15.0으로 업그레이드¶
- /v1/models 엔드포인트 분리:
/v1/models엔드포인트가 기본적으로 경량 응답 반환- 확장 메타데이터는
/v1/models?extended=true사용 - 기본 모델 정보만 필요한 클라이언트의 성능 향상
- 확장 메타데이터는
- Nano Banana API: OpenAI 호환 인터페이스를 통한 Gemini 이미지 생성 (Imagen) 새 지원
nano-banana또는nano-banana-pro모델 이름 사용
- 오류 처리: 패닉 대신 적절한 오류 전파로 신뢰성 향상
- 성능: LRU 캐시가 이제 더 나은 동시 성능을 위해 읽기 락 사용
- v0.14.x에서 호환성 깨짐 없음
v0.13.0으로 업그레이드¶
- 새 Responses API: OpenAI Responses API 호환성을 위해
/v1/responses엔드포인트 사용 가능- 만료된 세션에 대한 백그라운드 정리로 세션 자동 관리
- 진정한 SSE 스트리밍으로 실시간 응답 제공
- 보안: API 키가 이제 모든 백엔드에서 보안 향상을 위해 SecretString 사용 (#76)
- 모델 메타데이터: model-metadata.yaml을 통해 /v1/models 응답 필드 오버라이드 (#75)
- v0.12.0에서 호환성 깨짐 없음
v0.12.0으로 업그레이드¶
- 호환성 깨짐 없음: 이것은 코드 구성 개선을 위한 리팩토링 릴리스
- 버그 수정: 일관된 해시 라우팅이 이제 정확한 해시 일치를 올바르게 처리
- 보안: URL 검증을 위한 SSRF 방지 모듈 추가
- 신뢰성: 더 나은 오류 처리를 위해 패닉을 Option 반환으로 교체
- API 변경: /v1/models 엔드포인트에 더 이상 하드코딩된 인증 요구사항 없음
v0.11.0으로 업그레이드¶
- 새 Anthropic 백엔드: 네이티브 Anthropic Claude API 지원을 위해
type: anthropic백엔드 추가- 인증을 위해
CONTINUUM_ANTHROPIC_API_KEY환경 변수 설정 - 자동 파라미터 변환을 포함한 확장 사고 지원
- OpenAI
reasoning_effort파라미터가 Claude의 사고 형식으로 자동 변환
- 인증을 위해
- 스트리밍 개선: Accept-Encoding 수정으로 모든 백엔드에서 적절한 스트리밍 보장
- v0.10.0에서 호환성 깨짐 없음
v0.10.0으로 업그레이드¶
- 새 OpenAI 백엔드: 네이티브 OpenAI API 지원을 위해
type: openai백엔드 추가- 인증을 위해
CONTINUUM_OPENAI_API_KEY환경 변수 설정 - 내장 모델 메타데이터가 /v1/models 응답에 자동 포함
- 인증을 위해
- 이미지 생성 API: DALL-E 모델을 위한 새
/v1/images/generations엔드포인트timeouts.request.image_generation을 통해 타임아웃 설정 (기본값: 120초)- responseformat 검증 지원 (url 또는 b64json)
- Gemini 개선: 사고 모델의 스트리밍 응답 잘림 수정
- 모델 ID 정규화로 적절한 라우팅 보장
- API 키 인증: 스트리밍 요청이 이제 API 키 인증 지원
- 보안: 요청 본문 크기 제한으로 DoS 공격 방지
- 최신 OpenAI 모델은
max_tokens대신 자동으로max_completion_tokens사용
v0.9.0으로 업그레이드¶
- 새 Gemini 백엔드: 네이티브 Google Gemini API 지원을 위해
type: gemini백엔드 추가- 인증을 위해
CONTINUUM_GEMINI_API_KEY환경 변수 설정 - 사고 모델 (gemini-2.5-pro, gemini-3-pro)은 클라이언트가 4096 미만의 값을 보내면 자동으로
max_tokens: 16384적용
- 인증을 위해
- 토큰 버킷 알고리즘을 사용한 향상된 속도 제한 사용 가능
- config.yaml의
rate_limiting섹션을 통해 속도 제한 설정 - 인증을 포함한 Prometheus 메트릭이
/metrics엔드포인트에서 사용 가능 - 설정 파일 마이그레이션 및 수정을 위해
--migrate-config-fileCLI 옵션 사용 - 속도 제한에 여러 심각한 보안 수정 적용
v0.8.0으로 업그레이드¶
/v1/models엔드포인트에 대해 속도 제한 활성화- 모든 백엔드가 비정상일 때 503 오류 대신 빈 목록 반환
- 메타데이터 공유를 위한 모델 별칭 지원
v0.7.0으로 업그레이드¶
- 향상된 설정 관리를 위해 설정 파일 업데이트 필요
- 새로운 로드 밸런싱 전략 사용 가능
- 스트리밍 타임아웃이 이제 config.yaml을 통해 설정 가능
v0.6.0으로 업그레이드¶
- 타임아웃 설정이 이제 하드코딩된 값 대신 config.yaml에서 읽음
- 타임아웃 설정을 포함하도록 설정 파일 업데이트
v0.5.0으로 업그레이드¶
- 계층화된 설계를 포함한 대규모 아키텍처 리팩토링
- 설정 관리가 이제 YAML 파일 지원
- 보안 개선을 포함한 재시도 메커니즘 향상
- 연결 풀 크기가 이제 설정 가능
이 변경 내역은 Continuum Router의 초기 릴리스부터 현재 버전까지의 실제 개발 이력을 반영합니다.