इस प्रोजेक्ट के बारे में

llama-swap एक मशीन पर कई जनरेटिव AI मॉडल चलाने और मांग पर उनके बीच स्विच करने के लिए एक प्रॉक्सी है। यह किसी भी OpenAI- या Anthropic-API-संगत इन्फरेंस सर्वर के सामने बैठती है, प्रत्येक आने वाले अनुरोध से `model` फ़ील्ड पढ़ती है, और उसे सर्व करने के लिए आवश्यक अपस्ट्रीम सर्वर शुरू या बदल देती है। यह प्रोजेक्ट Go में लिखा गया है, एक बाइनरी और एक कॉन्फ़िगरेशन फ़ाइल के रूप में आता है, और कोई बाहरी निर्भरता नहीं बताता। समर्थित अपस्ट्रीम में llama.cpp और उसके फ़ोर्क, vllm, stable-diffusion.cpp, whisper.cpp, audio.cpp और ComfyUI शामिल हैं। चूंकि यह प्रॉक्सी किसी विशिष्ट इंजन से बंधी नहीं बल्कि प्रोटोकॉल-स्तर पर है, README में कहा गया है कि इन्फरेंस सर्वर को स्वतंत्र रूप से अपग्रेड किया जा सकता है। API सतह - OpenAI-शैली के एंडपॉइंट: `v1/completions`, `v1/chat/completions`, `v1/responses`, `v1/embeddings`, `v1/models`, `v1/audio/speech`, `v1/audio/transcriptions`, `v1/audio/voices`, `v1/images/generations` और `v1/images/edits`। - Anthropic-शैली के एंडपॉइंट: `v1/messages` और `v1/messages/count_tokens`। - llama-server अतिरिक्त: `v1/rerank`, `v1/reranking`, `/rerank`, `/infill`, `/completion`, `/models` और `/props`। - stable-diffusion.cpp के सर्वर से SDAPI एंडपॉइंट, साथ ही audio.cpp टास्क एंडपॉइंट और एक `/comfyui/` कस्टम एंडपॉइंट। - प्रबंधन एंडपॉइंट: `/ui`, `/upstream/:model_id`, `/running`, `POST /api/models/unload` (सभी मॉडल) और `POST /api/models/unload/:model_id`, `/api/profiles` के माध्यम से प्रोफ़ाइल सूची और सक्रियण, `/health`, और Prometheus सिस्टम तथा GPU मेट्रिक्स के लिए `/metrics`। - लॉग एंडपॉइंट: बफ़र्ड प्लेन-टेक्स्ट लॉग के लिए `/logs`, लाइव स्ट्रीमिंग के लिए `/logs/stream`, साथ में `/logs/stream/proxy`, `/logs/stream/upstream` और `/logs/stream/{model_id}` वेरिएंट; `?no-history` केवल नई पंक्तियाँ स्ट्रीम करता है। कॉन्फ़िगरेशन और विशेषताएँ एक न्यूनतम कॉन्फ़िग में `models` मैप घोषित होता है जहाँ प्रत्येक प्रविष्टि में एक ID और एक `cmd` होता है; `${PORT}` को स्वतः असाइन किए गए पोर्ट से बदल दिया जाता है। वैकल्पिक सेटिंग्स में निष्क्रियता के बाद स्वतः अनलोड के लिए `ttl`, `unloadTimeout`, परिचित मॉडल नामों के लिए `aliases`, `env` वेरिएबल, Docker/Podman के शालीन शटडाउन के लिए `cmdStop`, `useModelName`, अनुरोध `filters` (`stripParams`, `setParams`, `setParamsByID`), स्टार्टअप पर प्रीलोडिंग के लिए `hooks`, `macros`, और कस्टम स्वैप लॉजिक के साथ समवर्ती मॉडल चलाने के लिए एक `matrix` DSL शामिल हैं। एंडपॉइंट पहुँच को प्रतिबंधित करने के लिए API कुंजियाँ परिभाषित की जा सकती हैं, और प्रोफ़ाइल रनटाइम पर मॉडल-ID रूटिंग बदलने की अनुमति देती हैं। बंडल किया गया वेब UI एक प्लेग्राउंड, टोकन मेट्रिक्स, अनुरोध/प्रतिक्रिया निरीक्षण, मैनुअल मॉडल लोड और अनलोड, और रीयल-टाइम लॉग स्ट्रीमिंग प्रदान करता है। एक Help पेज llama-swap के अपने दस्तावेज़ों के विरुद्ध एक स्थानीय टूल-सक्षम मॉडल चलाता है, और वही टूल `/api/mcp` पर एक MCP एंडपॉइंट के रूप में उजागर किए जाते हैं। इंस्टॉलेशन सूचीबद्ध विकल्प हैं Docker, Homebrew, MacPorts, WinGet, रिलीज़ बाइनरी (Linux, macOS, Windows, FreeBSD) और Go तथा Node.js के साथ स्रोत से बिल्ड करना। Nightly Docker इमेज दो परिवारों में आती हैं: एकीकृत इमेज जो llama-server, ik-llama-server, stable-diffusion.cpp, whisper.cpp, audio.cpp और llama-swap को बंडल करती हैं (CUDA 12, CUDA 13 और Vulkan वेरिएंट, अनुशंसित), और llama.cpp के अपने `llama-server` कंटेनर पर आधारित एक लेगेसी इमेज। एकीकृत इमेज को `LLAMA_SWAP_*` एनवायरनमेंट वेरिएबल के माध्यम से कॉन्फ़िगर किया जा सकता है जो कमांड-लाइन फ़्लैग से मैप होते हैं। संचालन संबंधी नोट्स README सलाह देता है कि llama-swap को nginx के पीछे रखते समय रिस्पॉन्स बफ़रिंग अक्षम करें, क्योंकि बफ़रिंग SSE और स्ट्रीमिंग चैट कम्पलीशन्स को तोड़ देती है; llama-swap SSE प्रतिक्रियाओं पर `X-Accel-Buffering: no` भी सेट करता है। vllm या tabbyAPI जैसे Python-आधारित सर्वर के लिए, पर्यावरण अलगाव और सही `SIGTERM` हैंडलिंग के लिए उन्हें Podman या Docker के अंतर्गत चलाने की सिफ़ारिश की जाती है।