Ragmux

Kendi sunucunuzda AI gateway

Bütün modeller tek bir API’nin ardında. Bütün yanıtlar kendi belgelerinize dayalı.

Ragmux, uygulamalarınızla OpenAI, Anthropic, Gemini, DeepSeek, Ollama ya da kendi vLLM’iniz arasında duran tek bir Go binary’si. Dışarıya tek bir OpenAI uyumlu API konuşur ve ilettiği her isteğe kendi PDF’lerinizden getirdiği pasajları ekler.

Tek container/PostgreSQL 17 + pgvector/AGPL-3.0-or-later

~/ragmuxbash
$ docker run -d --name ragmux \
  -p 127.0.0.1:8765:8765 \
  -e SECRET_KEY="$(openssl rand -hex 32)" \
  -v ragmux-data:/data \
  ragmux/ragmux:latest
✔ragmux/ragmux:lateststarted:8765
✔postgres 17 + pgvectorembedded/data
Açılış log’u — docker logs ragmux
→ http://localhost:8765/admin/
Yönlendirdikleri
  • OpenAI
  • Anthropic
  • Gemini
  • DeepSeek
  • Ollama
  • vLLM · LM Studio · LiteLLM
  • Statik Go binary, CGO_ENABLED=0; distroless taban imajlı, yalnız gateway içeren bir imaj da var
  • Tek container — Redis yok, ayrı vektör veritabanı yok
  • Sağlayıcı anahtarları diskte AES-256-GCM ile şifreli

Nasıl çalışır

İçeri tek istek. Dışarı doğru model, doğru bağlamla.

Yapılandırmanın tamamı proje anahtarında toplanır: hangi sağlayıcının yanıtlayacağı, hangi system prompt’un uygulanacağı, hangi belgelerin aranacağı ve çağıranın ne kadar harcayabileceği.

Uygulamanız

POST /v1/chat/completions
Authorization: Bearer sk-proj-…
{"model": "default",
 "stream": true,
 "messages": [ … ]}

Resmî OpenAI SDK’ları olduğu gibi çalışır. model alanı geri yansıtılır — gerçek modele proje karar verir.

Ragmux:8765

  1. 01Projeyi çözAnahtar → model bağlantısı, system prompt, hız sınırları ve token bütçesi.
  2. 02Projenin store’u varsa getirSorguyu embed et, chunk’larda hibrit arama yap, en iyi k pasajı system prompt’a yerleştir.
  3. 03Uyarla, ilet, normalize etSağlayıcının şemasına çevir — Anthropic için tool call’lar dâhil — ve yanıtı OpenAI SSE olarak geri akıt.

Sağlayıcı

  • OpenAI
  • Anthropic
  • Gemini
  • DeepSeek
  • Ollama /api/chat
  • custom_openai

Kimlik bilgileri sunucu tarafında kalır, API tarafından hiçbir zaman döndürülmez.

PostgreSQL + pgvector

  • kullanıcılar & roller
  • bağlantılar
  • projeler
  • belgeler (bytea)
  • chunk’lar
  • HNSW vektör indeksleri
  • istek kayıtları

Yerine geçer

İki satır değişir. SDK’nız aynı kalır.

/v1/chat/completions ve /v1/models uçlarını OpenAI şemasında, hem JSON hem SSE olarak yanıtlar. Kod tabanınızda başka hiçbir şey kıpırdamaz.

  • Anthropic ve Gemini istekleri ile stream’leri sizin yerinize çevrilir — tool call’lar dâhil.
  • RAG store’u olan bir projenin her chat yanıtı x-ragmux-rag-hits taşır: kaç pasajın eklendiğini söyler.
  • Sınır aşıldığında OpenAI biçiminde 429 döner; Retry-After ve x-ratelimit-* başlıklarıyla.
app/client.pydiff
from openai import OpenAI
client = OpenAI(
-    base_url="https://api.openai.com/v1",
-    api_key="sk-…",
+    base_url="https://gateway.internal/v1",
+    api_key="sk-proj-…",
)
resp = client.chat.completions.create(
    model="default", stream=True,
    messages=[{"role": "user",
             "content": "How many vacation days do I get?"}],
)
# handbook PDF’i sunucu tarafında aranır ve prompt’a eklenir

Retrieval

Belgelerinizin yeri isteğin içidir — ikinci bir sistem değil.

Bir RAG store’a dosya yükleyin; ingestion worker onu pending’den ready’ye taşısın. Vektörler diğer her şeyle aynı veritabanına iner.

  1. 01AyrıştırPDF, DOCX, HTML, Markdown ve düz metin; doğrudan veritabanına bytea olarak.
  2. 02BölBölüm farkındalıklı bölme ve bağlamsal chunk’lar — pasaj, sayfasından koptuğunda da anlamlı kalır.
  3. 03Embed etStore için seçtiğiniz embedding bağlantısı üzerinden; pgvector’da HNSW ile indekslenir.
  4. 04AraVektör benzerliği ile Postgres tam metin araması, reciprocal rank fusion ile birleştirilir.
  5. 05YerleştirEn iyi k pasaj system prompt’un başına eklenir ve yanıt başlıklarında sayılır.

Rerank, seçim sizin

Aday pasajları prompt’a girmeden önce kendi sohbet modeliniz, Cohere Rerank ya da Voyage Rerank yeniden sıralar. Herhangi bir hata isteği düşürmez, birleştirilmiş sıraya geri döner.

Mesafe eşiği

max_distance zayıf eşleşmeleri eler; prompt’u gürültüyle doldurmak yerine.

BM25 ya da tsvector

Varsayılan Postgres tam metin sıralaması; gerçek BM25 için store’u ParadeDB pg_search’e yöneltin, belgeleriniz Postgres’te kalsın. İki yönde de yeniden işleme gerekmez.

Yönetim düzlemi

Anahtarlar, roller, sınırlar — ve hepsine dokunan her şeyin kaydı.

Ortak bir sağlayıcı anahtarının veremediği şey: kimin, hangi projede, hangi prompt altında ne harcadığı.

Projeler ve anahtarlar

Proje başına bir sk-proj-… anahtarı; bir model bağlantısına, bir system prompt’a ve isteğe bağlı bir RAG store’a bağlanır. Sağlayıcı kimlik bilgileri diskte AES-256-GCM ile şifrelenir.

Roller ve üyelik

admin, editor, viewer ve proje bazlı üyelik. Admin olmayanlar yalnız kendi projelerini görür; başkasının proje id’si 403 değil 404 döner.

Hız sınırları ve bütçeler

Dakikada istek ve token, ayrıca UTC pencerelerinde günlük ve aylık token bütçeleri — veritabanında sayıldığı için replikalar tek tavanı paylaşır.

Giriş koruması

Kullanıcı adı ve IP başına deneme sınırı, kilitlenme penceresiyle birlikte Postgres’te tutulur. Proxy başlıklarını açıkça açmadıkça istemci IP’si TCP karşı ucudur.

Denetim kaydı

Her giriş ve her yönetim işlemi kaydedilir; /admin/api/audit ucundan ve kendi dashboard sekmesinden okunur.

Metrikler ve saklama

İstek başına token, gecikme, durum, streaming ve RAG kullanımı; üstünde özetler ve günlük seriler. Saklama penceresini siz belirlersiniz, saatlik bir görev uygular.

Dashboard & API

Arayüz de yalnızca bir istemci.

/admin/ adresindeki dashboard binary’nin içinde gelir; modelleri, RAG store’ları, belgeleri, projeleri, metrikleri, kullanıcıları ve denetim kaydını yönetir. Bir proje anahtarını bağlamadan denemek için playground’u vardır. Yaptığı her şey sizin de çağırabileceğiniz bir REST isteğidir.

Build adımı yok

Gömülü, sade JavaScript

Aynı kimlik doğrulama

Bearer oturum token’ı

Yüzey
  • POST/v1/chat/completionsproxy — JSON ya da SSE
  • GET/v1/modelsbu anahtarın çağırabildikleri
  • POST/admin/api/modelssağlayıcı bağlantısı ekle
  • POST/admin/api/rag-storesstore oluştur
  • POST/admin/api/rag-stores/{id}/documentsdosya yükle
  • POST/admin/api/projectsanahtar bir kez gösterilir
  • GET/admin/api/auditkim neyi değiştirdi
  • GET/admin/api/systemsürümler, veritabanı boyutu, yedek
  • GET/healthzorkestratörünüz için

Hızlı başlangıç

Sıfırdan, belgeye dayalı ilk yanıta.

  1. 01Container’ı başlatın, ilk yöneticiyi oluşturun

    $ docker run -d --name ragmux \
      -p 127.0.0.1:8765:8765 \
      -e SECRET_KEY="$(openssl rand -hex 32)" \
      -v ragmux-data:/data \
      ragmux/ragmux:latest
  2. 02Bir model bağlantısı ve bir RAG store ekleyin

    $ curl -s localhost:8765/admin/api/models -H "$AUTH" \
      -d '{"name":"claude","provider_type":"anthropic", …}'
    $ curl -s localhost:8765/admin/api/rag-stores/1/documents \
      -H "$AUTH" -F [email protected]
  3. 03Projeyi oluşturun ve OpenAI gibi çağırın

    $ curl -N localhost:8765/v1/chat/completions \
      -H "Authorization: Bearer sk-proj-…" \
      -d '{"model":"default","stream":true,"messages":[…]}'
    x-ragmux-rag-hits: 4

Dokümantasyon

Nöbetteki kişi için yazıldı.

Depoya göz atın

Henüz gelmediTaranmış PDF’ler için OCR · SSO ve OIDC girişi · para cinsinden bütçeler · 0.1 SQLite veritabanları için içe aktarma aracı

Anahtarlarınız, belgeleriniz, veritabanınız.

Ragmux, AGPL-3.0-or-later altında özgür yazılımdır. Dizüstünüzde çalıştırın, cluster’ınızda çalıştırın — hiçbir yere bilgi göndermez.

docker run -d -p 127.0.0.1:8765:8765 -v ragmux-data:/data ragmux/ragmux:latest

Gezinmek için ok tuşları, açmak için Enter.