Esc to close · ⌘K / Ctrl-K opens search anywhere
Sangam (संगम — confluence) एक प्रॉम्प्ट को मॉडलों के एक पैनल पर भेजता है जो समानांतर में जवाब देते हैं, फिर एक synthesizer मॉडल उनके जवाबों को एक ही जवाब में संगठित करता है। आप इसे किसी भी अन्य मॉडल की तरह कॉल करते हैं — एक रिक्वेस्ट, एक रिस्पांस मानक OpenAI chat.completion आकार में — और आपको एक के बजाय कई मॉडलों का निर्णय मिलता है। हीरो वैरिएंट,bharatrouter/open-sangam, एक पूर्णतः ओपन-वेटपैनल चलाता है: एक दूसरी राय जिसे आप शुरू से अंत तक पढ़ सकते हैं, किसी एक बंद मॉडल के बजाय पारदर्शी, पुनरुत्पाद्य मॉडलों पर बनी। यह आपकी अपनी provider keys (BYOK) पर चलता है (देखें BYOK), और जब आप चाहें तो भारत रेज़िडेंसी एक फ़ीचर के रूप में उपलब्ध है (data_policy: india_only)।
BYOK बीटा के दौरान Sangam मुफ़्त है — जब तक प्लेटफ़ॉर्म बीटा में है तब तक BharatRouter इसके ऊपर कुछ भी शुल्क नहीं लेता। यह एक शोकेस/प्रीमियम पथ है, कम-latency वाला नहीं (देखेंलागत और latency)।
सहमति आपको टोकन और latency की लागत पर मज़बूती देती है। वह व्यापार कठिन समस्याओं पर सार्थक है और आसान समस्याओं पर ग़लत।
हर Sangam रिक्वेस्ट आंतरिक रूप से वही तीन चरण चलाती है — कॉलर को केवल चरण 3 दिखता है।
chat.completion वापस मिलता है: choices[0].message.content संश्लेषित जवाब है। usage हर पैनल कंप्लीशन और synth कंप्लीशन का योग है। एक br_sangam ब्लॉक पूरे पैनल को पारदर्शी बनाता है।पारदर्शिता ब्लॉक आपको बताता है कि वास्तव में कौन से मॉडल चले, कहाँ, और उनका कैसा प्रदर्शन रहा — एकल जवाब के पीछे कुछ भी छिपा नहीं है:
"br_sangam": {
"panel": [
{ "model": "gpt-oss-20b", "provider": "krutrim", "ok": true, "ms": 1840 },
{ "model": "qwen3-32b", "provider": "groq", "ok": true, "ms": 1210 },
{ "model": "llama-3.1-8b-instruct", "provider": "groq", "ok": false, "ms": 0 }
],
"synthesizer": { "model": "gpt-oss-120b", "provider": "krutrim", "ms": 2960 }
}प्रत्येक पैनल एंट्री अपना model, जिस provider रूट पर वह चला, क्या उसने जवाब दिया (ok), और ms में अपनी latency रिपोर्ट करती है। एक पैनल सदस्य जो विफल होता है (ok: false) उसे संश्लेषण से सीधे हटा दिया जाता है — जवाब फिर भी आता है जब तक पैनल का पर्याप्त हिस्सा सफल हो।
दो Sangam मॉडल ids कैटलॉग में शिप होते हैं। open-sangam उपयोग करें जब तक आप विशेष रूप से पैनल में फ्रंटियर मॉडल नहीं चाहते।
| Model id | पैनल → synthesizer | पैनल | किसके लिए सर्वोत्तम |
|---|---|---|---|
bharatrouter/open-sangam hero | gpt-oss-20b (Krutrim), qwen3-32b(ओपन-वेट, BYOK), llama-3.1-8b-instruct (ओपन-वेट, BYOK)→ synth gpt-oss-120b | पूर्णतः ओपन-वेट — पारदर्शी, पुनरुत्पाद्य मॉडल; भारत रेज़िडेंसी के लिए data_policy: india_only जोड़ें | ओपन-वेट सहमति जिसे आप शुरू से अंत तक ऑडिट कर सकें; अपनी keys (BYOK) पर चलता है |
bharatrouter/sangam | gpt-5, gemini-2.5-flash, claude-haiku-4.5 → synth gpt-5-mini | फ्रंटियर मॉडल | अधिकतम क्वालिटी — जब लागत कोई बाधा न हो तो एक पूर्ण फ्रंटियर पैनल; प्रीमियम |
Krutrim-first: ओपन पैनल Krutrim Cloud पर gpt-oss-20b से शुरू होता है और gpt-oss-120b पर संश्लेषण करता है, वह भी Krutrim पर।
Sangam मानक एंडपॉइंट पर एक साधारण मॉडल id है — प्रकाशित वैरिएंट के लिए किसी विशेष पैरामीटर की ज़रूरत नहीं। OpenAI SDK को BharatRouter पर इंगित करें औरbharatrouter/open-sangam कॉल करें।
curl https://api.bharatrouter.com/v1/chat/completions \
-H "Authorization: Bearer br-..." -H "Content-Type: application/json" \
-d '{
"model": "bharatrouter/open-sangam",
"messages": [
{"role": "user", "content": "Our supplier missed an SLA. Walk through whether we can terminate, and the risks."}
]
}'from openai import OpenAI
client = OpenAI(base_url="https://api.bharatrouter.com/v1", api_key="br-...")
r = client.chat.completions.create(
model="bharatrouter/open-sangam",
messages=[
{"role": "user",
"content": "Our supplier missed an SLA. Walk through whether we can terminate, and the risks."},
],
)
print(r.choices[0].message.content) # the synthesized answer
print(r.usage.total_tokens) # panel + synth, summed
print(r.model_extra["br_sangam"]["panel"]) # who ran, where, how fastदो प्रकाशित वैरिएंट से परे आप एक sangam ऑब्जेक्ट भेजकर एक ही रिक्वेस्ट पर अपना खुद का पैनल जोड़ सकते हैं — चुनें कि कौन से मॉडल बहस करें और कौन सा एक संगठित करे। यह एक BharatRouter एक्सटेंशन है: गेटवे इसका उपभोग करता है और इसे कभी अपस्ट्रीम फॉरवर्ड नहीं करता।
panel — 2 से 6 कैटलॉग मॉडल ids का एक array। 2 से कम सहमति नहीं है; 6 से अधिक बस टोकन जलाता है।synth — एक कैटलॉग मॉडल id जो पैनल के जवाबों को संगठित करता है।ऑब्जेक्ट सर्वर-साइड पर सत्यापित होता है। एक पैनल जो बहुत छोटा या बहुत बड़ा है, या कोई भी id जोकैटलॉग में नहीं है, किसी भी मॉडल को डायल करने से पहले पूरी रिक्वेस्ट को400 bad_sangam के साथ विफल कर देता है — आप एक ख़राब पैनल के लिए कभी भुगतान नहीं करते। जब एक sangam ऑब्जेक्ट मौजूद होता है तो वह पैनल को परिभाषित करता है; आधार modelफ़ील्ड कोई भी Sangam id हो सकता है और ऑब्जेक्ट द्वारा ओवरराइड किया जाता है।
curl https://api.bharatrouter.com/v1/chat/completions \
-H "Authorization: Bearer br-..." -H "Content-Type: application/json" \
-d '{
"model": "bharatrouter/open-sangam",
"sangam": {
"panel": ["gpt-oss-20b", "qwen3-32b", "gemma-4-e4b-it", "llama-3.1-8b-instruct"],
"synth": "gpt-oss-120b"
},
"messages": [{"role": "user", "content": "Is this clause enforceable under Indian contract law?"}]
}'r = client.chat.completions.create(
model="bharatrouter/open-sangam",
messages=[{"role": "user", "content": "Is this clause enforceable under Indian contract law?"}],
extra_body={
"sangam": {
"panel": ["gpt-oss-20b", "qwen3-32b", "gemma-4-e4b-it", "llama-3.1-8b-instruct"],
"synth": "gpt-oss-120b",
}
},
)बिल्कुल वही sangam ऑब्जेक्टप्लेग्राउंड में काम करता है — एक पैनल दृश्य रूप से बनाएँ, फिर रिक्वेस्ट कॉपी करें।
हर Sangam वैरिएंट BYOK के साथ काम करता है। प्रत्येक पैनल और synth सब-कॉल आपकी अपनी provider keys का ठीक वैसे ही सम्मान करती है जैसे एक सामान्य रिक्वेस्ट: यह BYOK है, इसलिए हर पैनल मॉडल के लिए आप एक key लाते हैं। अगर आपके org के पास किसी पैनल सदस्य के provider के लिए एक सेव की गई key है, तो वह सब-कॉल उसी का उपयोग करती है। Sangam के बारे में कुछ भी key resolution को नहीं बदलता — यह गेटवे पर किसी भी अन्य कॉल जैसा ही path है। Open-Sangam पैनल पूरी तरह ओपन-वेट और Groq-routable है, इसलिए एक ही provider key (जैसे Groq) पूरे पैनल को कवर कर सकती है।
upstream_key। उस कॉल के लिए override करने के लिए रिक्वेस्ट पर एक upstream_key भेजें; यह सब-कॉल्स पर वैसे ही लागू होती है जैसे एक एकल-मॉडल रिक्वेस्ट पर।चूँकि resolution प्रति सब-कॉल है, एक Sangam रिक्वेस्ट पूरे पैनल में providers को मिला सकती है — मसलन Krutrim-सर्व्ड leg के लिए आपकी अपनी Krutrim key, और ओपन-वेट सदस्यों के लिए एक Groq key। keys कैसे स्टोर और resolve होती हैं, इसके लिए BYOK देखें।
एक Sangam जवाब एक सादा chat.completion है। तीन हिस्से मायने रखते हैं:
choices[0].message.content — एकल संश्लेषित जवाब। यह synthesizer का आउटपुट है, किसी एक पैनल सदस्य का नहीं।usage — सभी पैनल कंप्लीशन और synth कंप्लीशन का योग (prompt_tokens, completion_tokens,total_tokens)। इसी पर आपको मीटर किया जाता है, इसलिए यह डिज़ाइन के अनुसार एक एकल मॉडल कॉल से अधिक है।br_sangam — पारदर्शिता ब्लॉक (ऊपर): एक{ model, provider, ok, ms } का panel array और एक{ model, provider, ms } का synthesizer। इसे पढ़ें ताकि ठीक-ठीक देख सकें कि किसने योगदान दिया और क्या कोई सदस्य बाहर हुआ।| फ़ील्ड | इसमें क्या होता है |
|---|---|
choices[0].message.content | संगठित जवाब। |
usage.total_tokens | पैनल + synth टोकन, योग किए गए। |
br_sangam.panel[] | प्रति पैनल सदस्य model, provider, ok, ms। |
br_sangam.synthesizer | synth चरण के लिए model, provider, ms। |
Sangam पूर्ण human + agent parity के साथ शिप होता है। प्रकाशित Sangam मॉडलGET /v1/models में हर दूसरे कैटलॉग मॉडल के साथ खोजे जा सकते हैं, इसलिए एक एजेंट उन्हें कैटलॉग सूचीबद्ध करके ढूँढता है — कोई विशेष-केसिंग नहीं। एजेंट Sangam कोMCP chat टूल के माध्यम से कॉल करते हैं, और कस्टम पैनल वहीएक समान sangam: { panel, synth } config ऑब्जेक्ट उपयोग करते हैं जो आप REST पर भेजते। एक config आकार, दो सतहें — human UI और agent API साथ-साथ चलते हैं।
सोच-समझकर चलें: एक सहमति कॉल एक एकल मॉडल कॉल के टोकन का लगभग (panel + 1)×खर्च करती है — हर पैनल सदस्य और synthesizer — और इसकी latencyसबसे धीमे पैनल मॉडल (पैनल समानांतर में चलता है) और synth चरण से सीमित है। यह Sangam को एक शोकेस/प्रीमियम पथ बनाता है, कम-latency वाला नहीं। open-sangamआपकी अपनी keys (BYOK) पर चलता है — इसका पैनल पूर्णतः ओपन-वेट है, इसलिए लागत आपकी अपनी ओपन-वेट provider दर है; sangam का फ्रंटियर पैनल प्रीमियम है। BYOK बीटा के दौरान, Sangam स्वयं मुफ़्त है — BharatRouter इसके ऊपर कुछ शुल्क नहीं लेता।