데스크톱 사용자를 위한 API 게이트웨이
요약
이 게이트웨이는 개발자가 다양한 생성형 API(Text, Embeddings, Audio, Image)를 단일 GPU 환경에서 효율적으로 사용하고 관리할 수 있도록 설계되었습니다. Tauri와 Leptos 기반의 Rust 데스크톱 앱으로, OpenAI 및 Anthropic 호환 API를 클라우드 또는 로컬 컨테이너로 라우팅하며 VRAM 관리를 통해 안정성을 높입니다.
핵심 포인트
- OpenAI/Anthropic 호환 게이트웨이를 제공하여 다양한 모델을 통합 관리합니다.
- Tauri와 Leptos 기반의 Rust 데스크톱 앱으로, 원격 관리 및 트레이 기능을 지원합니다.
- VAD-ASR-LLM-TTS 파이프라인 등 복잡한 워크플로우를 로컬/클라우드에서 유연하게 라우팅할 수 있습니다.
- VRAM 인식 스케줄링과 폴백(fallback) 기능을 통해 GPU 자원 경합을 방지합니다.
재택근무를 하며 단일 GPU로 개발하는 개발자로서 저는 코딩 에이전트뿐만 아니라 생성형 API를 사용하는 앱들로도 많이 구축하고 실험하고 있습니다. 모델, 엔진, 다양한 API의 홍수 속에서 모든 앱과 도구에 항상 완벽하게 적용하고 최신 상태로 유지하는 것이 어렵습니다. 저는 제가 모든 앱에서 목표할 수 있으면서도 Anthropic과 OpenAI의 공식 업스트림 API만 지원하는 클라이언트와도 사용할 수 있는 게이트웨이가 필요했습니다. 그래서 저 자신을 위해 이 게이트웨이를 만들었고, 시간이 지나면서 점점 더 많은 기능으로 확장했습니다. 이것은 Tauri와 Leptos를 사용한 Rust 기반 데스크톱 앱입니다. Leptos는 경량의 gtk webview 내부에서 실행되는 WASM입니다. 제가 특별히 이런 방식으로 만든 이유는 네트워크상의 다른 장치에서 작업할 때 원격 브라우저 기반 관리 기능을 허용하면서도, 언제든지 데스크톱 트레이에 준비해 두기 위함이었습니다. 또한 새로운 모델과 llama.cpp 패치를 빠르게 테스트하기 위한 도구들을 통합하고 싶었습니다.
작동 방식: 텍스트(Text), 임베딩(Embeddings), 오디오(Audio), 이미지(Image) API를 지원합니다. OpenAI 및 Anthropic 호환 API를 제시하고 이를 클라우드 API 또는 llama.cpp, audio.cpp, stable-diffusion.cpp 컨테이너로 라우팅합니다. git에서 직접 podman 컨테이너 내에 백엔드 컨테이너를 구축하며, 여기에는 main이나 특정 브랜치 또는 커밋의 MR(Merge Request), PR(Pull Request)이 포함됩니다. 업데이트 알림을 제공합니다. 모델별로 하나의 컨테이너를 구성하고 그 라이프사이클을 관리하며 VRAM 인식 방식으로 스케줄링하고 폴백(fallback) 기능을 지원합니다. 다양한 구성을 가진 모델은 별칭(alias)으로 등록할 수 있어, 모델 변경 시 클라이언트 설정이 바뀔 필요가 없습니다. 이러한 별칭은 또한 모델 체인(model chain)도 지원합니다. 예를 들어, 필요한 경우에만 더 많은 컨텍스트로 모델을 다시 로드하거나, 특정 컨텍스트 길이가 도달하면 클라우드로 라우팅하는 식입니다. 또는 '작은 컨텍스트 & 높은 양자화'에서 시작하여 컨텍스트 길이 단계마다 '큰 컨텍스트 & 낮은 양자화'로 전환되는 체인도 가능합니다. 트레이에서 트리거할 수 있는
게임 또는 기타 GPU를 차단하여 사용하는 경우에 적합합니다. VRAM 경합이나 활성 GPU 점유가 발생할 경우 다른 구성된 모델이나 별칭(alias)으로 폴백 라우팅을 제공합니다. 스테이지드 파이프라인을 통해 /v1/realtime 경로로 OpenAI와 호환되는 websocket을 제공하며, 이 과정에서 VAD (Voice Activity Detection) / Smart Turn -> ASR (Automatic Speech Recognition) -> LLM (Large Language Model) -> TTS (Text-to-Speech)를 거칩니다. 각 단계마다 로컬 모델 또는 클라우드 모델 중 하나를 선택할 수 있습니다. 여기에는 바지인(barge-in) 및 세션 관리가 포함됩니다. 도구는 서버 측에서 지원되고 실행됩니다. MCP Gateway: MCP 서버를 게이트웨이에 추가하면 접두사(prefix)와 토큰별 범위(scoped per token)로 자체 /mcp API를 통해 스트리밍 가능한 MCP 서버로 제공합니다. MCP 서버는 기본적으로 podman 컨테이너 내부에서 실행됩니다. 범위 지정 토큰(Scoped Tokens), 상세 메트릭, 트래픽 모니터링, 예산, 가격 동기화(kilo로만 테스트됨) 등 많은 그래프와 로컬 토큰이 클라우드 트래픽이었다고 가정했을 때의 비용 비교가 제공됩니다. huggingface 다운로드 및 업데이트를 지원하는 다운로드 관리자, audio.cpp 및 sd.cpp용 사전 구성 카탈로그가 있습니다. 별도의 MCP 경로에서 관리 도구와 함께 통합된 MCP 서버가 있습니다. 게이트웨이의 모든 옵션과 기능은 MCP를 통해 구성할 수 있습니다. 모델 추가, 구성 테스트, 게이트웨이 설정 및 상태 확인 등이 가능합니다. 코딩 에이전트가 이를 대신 구성해 줄 수 있습니다. 문서화(Documentation)는 Context7과 유사하게 작동하며, 문서를 요청하는 에이전트는 MCP에 연결하고 문서 도구(docs tools)를 활성화하여 모든 종류의 특정 라이브러리 버전에 대한 문서를 조회하고 요청할 수 있습니다. 모든 요청은 UI에 나열되며 이후 청크로 분할되어 임베딩되고 벡터 스토리지에 색인화될 수 있습니다(모두 게이트웨이에서 관리). Context7은 매우 훌륭하지만 종종 오래된 정보가 많고, 저의 경우와 같이 누락된 라이브러리가 있는 경우가 많습니다. 인터페이스는 직관적이지 않지만, 게이트웨이의 관리 MCP를 사용하면 제 에이전트가 이를 채울 수 있습니다. 메트릭, 파일 입력, 폴더, 스레드별 설정, 마이크 입력 및 TTS가 게이트웨이 자체 모델에서 선택 가능한 채팅 인터페이스입니다. 모델을 빠르게 테스트하기 위해 사용할 수 있습니다. MCP 게이트웨이의 도구와 게이트웨이 자체의 도구를 추가할 수도 있습니다.
(관리자 채팅(Admin Chat)은 게이트웨이 관리를 위한 사전 구성된 채팅 기능입니다.) 실시간 API 기반의 채팅 인터페이스에는 일반 대화 흐름 또는 푸시-투-토크(/v1/responses) 모드가 있으며, 이는 세션 기반으로 작동하고 서버 측 도구 실행을 지원합니다. 이미지 생성(image generation), 이미지 편집(image edit), TTS(Text-to-Speech), ASR(Automatic Speech Recognition), 클로닝(cloning), 변환(conversion) 등 오디오 및 이미지 작업을 빠르게 테스트할 수 있는 Audio and Image Labs가 있습니다. 저는 audio.cpp와 sd.cpp의 속도를 따라잡으려고 노력했습니다. 컨테이너 기반 에이전트는 특정 인터페이스에 빌드되어 해당 컨테이너 내부로 마운트되며 (도구, 변수, 파일), 실행되는 동안 자체 UI 페이지와 MCP 도구를 게이트웨이에 연결할 수 있습니다. 일종의 작고 작업 기반의 확장 기능과 같습니다. 여러 그래프를 통해 설정을 비교하거나 엔진을 비교할 수 있는 모델 벤치마크가 있습니다. 모든 API에 대해 Swagger 스타일로 통합된 API 문서가 제공됩니다. 더 많은 것들이 있는데, 제가 깜빡했습니다. 저는 평소 매우 수줍음이 많아서 이 모든 것을 노출하고 공개하는 위험을 감수해야 할지 오랫동안 깊이 생각했습니다. 하지만 이것은 저의 특정 시나리오에서 하루를 훨씬 더 편안하게 만들었고 어쩌면 여러분도 좋아할 것입니다. https://preview.redd.it/l02s01qpdxth1.png?width=429&format=png&auto=webp&s=3b7fa2d8fc3d04cdb932057e9bc3ac176306f5e8 여기 링크입니다: https://github.com/lmgw-dev/lmgw 저는 여러분이 저를 산산조각 내지 않기를 바라며, 여기서 유용함을 찾을 수 있기를 바랍니다. 인터페이스에 대해 너무 비판적이지 않아 주십시오. 제 수년간의 경험은 모두 백엔드와 DevOps에 있습니다. 다음 계획된 사항: 의사 결정 모델(Decision models) 그리고 당연히 공개해야 할 점: AI가 개발의 모든 단계에서 역할을 했습니다. 거의 모든 것이 다양한 모델 세트에 의해 다루어졌고, 저장소 내 대부분의 서술형 텍스트는 생성되었습니다. 저는 여러분 모두가 마땅히 누려야 한다고 생각해서 이 게시물을 직접 손으로 작성했으며, 저 자신도 생성된 게시물에 짜증을 느낍니다. 또한, 안전상의 이유로 git 기록은 공개하지 않았으며 대부분의 커밋을 스쿼시(squash)할 것입니다. 제출자: /u/rootshelldev [링크] [댓글]}<tool_call|>jsonencapsulation{
AI 자동 생성 콘텐츠
본 콘텐츠는 Reddit AI Engineering의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기