⚡ नया — Kimi K3 अब लाइव: अपनी Moonshot key जोड़ें →
दस्तावेज़

Sangam — सहमति रूटिंग

Sangam (संगम — confluence) एक प्रॉम्प्ट को मॉडलों के एक पैनल पर भेजता है जो समानांतर में जवाब देते हैं, फिर एक synthesizer मॉडल उनके जवाबों को एक ही जवाब में संगठित करता है। आप इसे किसी भी अन्य मॉडल की तरह कॉल करते हैं — एक रिक्वेस्ट, एक रिस्पांस मानक OpenAI chat.completion आकार में — और आपको एक के बजाय कई मॉडलों का निर्णय मिलता है। हीरो वैरिएंट,bharatrouter/open-sangam, एक पूर्णतः ओपन-वेटपैनल चलाता है: एक दूसरी राय जिसे आप शुरू से अंत तक पढ़ सकते हैं, किसी एक बंद मॉडल के बजाय पारदर्शी, पुनरुत्पाद्य मॉडलों पर बनी। यह आपकी अपनी provider keys (BYOK) पर चलता है (देखें BYOK), और जब आप चाहें तो भारत रेज़िडेंसी एक फ़ीचर के रूप में उपलब्ध है (data_policy: india_only)।

BYOK बीटा के दौरान Sangam मुफ़्त है — जब तक प्लेटफ़ॉर्म बीटा में है तब तक BharatRouter इसके ऊपर कुछ भी शुल्क नहीं लेता। यह एक शोकेस/प्रीमियम पथ है, कम-latency वाला नहीं (देखेंलागत और latency)।

Sangam के लिए कब पहुँचें

सहमति आपको टोकन और latency की लागत पर मज़बूती देती है। वह व्यापार कठिन समस्याओं पर सार्थक है और आसान समस्याओं पर ग़लत।

  • इसके लिए पहुँचें उन सवालों पर जहाँ एक मॉडल पर्याप्त नहीं है — अस्पष्ट या उच्च-दांव वाला तर्क, पेचीदा विश्लेषण, ड्राफ़्टिंग जहाँ आप चाहते हैं कि एक मॉडल दूसरे के अंधे स्थानों को क्रॉस-चेक करे, या मूल्यांकन जहाँ एक अकेला जवाब सिक्के की उछाल जैसा लगता है। कई स्वतंत्र जवाब, संगठित किए गए, किसी भी एकल जवाब से बेहतर होते हैं।
  • इसके लिए न पहुँचें latency-संवेदनशील पथों पर (इंटरैक्टिव चैट, ऑटोकंप्लीट, रियल टाइम में उपयोगकर्ता-सामने वाली कोई भी चीज़) या साधारण, सस्ते कॉल्स पर (वर्गीकरण, निष्कर्षण, छोटे सारांश)। वहाँसामान्य रूटिंग पर एक अकेला मॉडल तेज़ और सस्ता है, और सहमति कुछ नहीं जोड़ती।

तीन-चरण प्रवाह

हर Sangam रिक्वेस्ट आंतरिक रूप से वही तीन चरण चलाती है — कॉलर को केवल चरण 3 दिखता है।

  1. पैनल (समानांतर)। आपका प्रॉम्प्ट एक साथ 2–6 पैनल मॉडलों पर फैलता है, प्रत्येक अपने रूट पर। वे सहवर्ती रूप से चलते हैं, इसलिए wall-clock समय सबसे धीमे पैनल सदस्य से सीमित है, योग से नहीं।
  2. Synthesizer। पैनल के जवाब एक synthesizer मॉडल को सौंपे जाते हैं, जो उन्हें संगठित करता है — असहमतियों को हल करता है, बाहरी मानों को हटाता है, मज़बूत हिस्सों को मिलाता है — एक ही सुसंगत जवाब में।
  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 herogpt-oss-20b (Krutrim), qwen3-32b(ओपन-वेट, BYOK), llama-3.1-8b-instruct (ओपन-वेट, BYOK)→ synth gpt-oss-120bपूर्णतः ओपन-वेट — पारदर्शी, पुनरुत्पाद्य मॉडल; भारत रेज़िडेंसी के लिए data_policy: india_only जोड़ेंओपन-वेट सहमति जिसे आप शुरू से अंत तक ऑडिट कर सकें; अपनी keys (BYOK) पर चलता है
bharatrouter/sangamgpt-5, gemini-2.5-flash, claude-haiku-4.5 → synth gpt-5-miniफ्रंटियर मॉडलअधिकतम क्वालिटी — जब लागत कोई बाधा न हो तो एक पूर्ण फ्रंटियर पैनल; प्रीमियम

Krutrim-first: ओपन पैनल Krutrim Cloud पर gpt-oss-20b से शुरू होता है और gpt-oss-120b पर संश्लेषण करता है, वह भी Krutrim पर।

Quickstart

Sangam मानक एंडपॉइंट पर एक साधारण मॉडल id है — प्रकाशित वैरिएंट के लिए किसी विशेष पैरामीटर की ज़रूरत नहीं। OpenAI SDK को BharatRouter पर इंगित करें औरbharatrouter/open-sangam कॉल करें।

curl

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."}
    ]
  }'

Python (OpenAI SDK)

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 एक्सटेंशन है: गेटवे इसका उपभोग करता है और इसे कभी अपस्ट्रीम फॉरवर्ड नहीं करता।

  • panel2 से 6 कैटलॉग मॉडल ids का एक array। 2 से कम सहमति नहीं है; 6 से अधिक बस टोकन जलाता है।
  • synth — एक कैटलॉग मॉडल id जो पैनल के जवाबों को संगठित करता है।

ऑब्जेक्ट सर्वर-साइड पर सत्यापित होता है। एक पैनल जो बहुत छोटा या बहुत बड़ा है, या कोई भी id जोकैटलॉग में नहीं है, किसी भी मॉडल को डायल करने से पहले पूरी रिक्वेस्ट को400 bad_sangam के साथ विफल कर देता है — आप एक ख़राब पैनल के लिए कभी भुगतान नहीं करते। जब एक sangam ऑब्जेक्ट मौजूद होता है तो वह पैनल को परिभाषित करता है; आधार modelफ़ील्ड कोई भी Sangam id हो सकता है और ऑब्जेक्ट द्वारा ओवरराइड किया जाता है।

curl

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?"}]
  }'

Python (OpenAI SDK)

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 ऑब्जेक्टप्लेग्राउंड में काम करता है — एक पैनल दृश्य रूप से बनाएँ, फिर रिक्वेस्ट कॉपी करें।

अपनी keys लाएं

हर Sangam वैरिएंट BYOK के साथ काम करता है। प्रत्येक पैनल और synth सब-कॉल आपकी अपनी provider keys का ठीक वैसे ही सम्मान करती है जैसे एक सामान्य रिक्वेस्ट: यह BYOK है, इसलिए हर पैनल मॉडल के लिए आप एक key लाते हैं। अगर आपके org के पास किसी पैनल सदस्य के provider के लिए एक सेव की गई key है, तो वह सब-कॉल उसी का उपयोग करती है। Sangam के बारे में कुछ भी key resolution को नहीं बदलता — यह गेटवे पर किसी भी अन्य कॉल जैसा ही path है। Open-Sangam पैनल पूरी तरह ओपन-वेट और Groq-routable है, इसलिए एक ही provider key (जैसे Groq) पूरे पैनल को कवर कर सकती है।

  • सेव की गई BYOK keys। अकाउंट पर स्टोर की गई provider keys हर पैनल और synth सब-कॉल पर अपने आप लागू होती हैं — किसी प्रति-रिक्वेस्ट flag की ज़रूरत नहीं।
  • प्रति-रिक्वेस्ट upstream_key उस कॉल के लिए override करने के लिए रिक्वेस्ट पर एक upstream_key भेजें; यह सब-कॉल्स पर वैसे ही लागू होती है जैसे एक एकल-मॉडल रिक्वेस्ट पर।
  • एक key, पूरा पैनल। चूँकि हर Open-Sangam पैनल सदस्य ओपन-वेट है, उन ओपन वेट को सर्व करने वाली एक ही provider key (जैसे Groq) पूरे पैनल को कवर कर लेती है — हर सदस्य के लिए अलग 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.synthesizersynth चरण के लिए model, provider, ms

एजेंट

Sangam पूर्ण human + agent parity के साथ शिप होता है। प्रकाशित Sangam मॉडलGET /v1/models में हर दूसरे कैटलॉग मॉडल के साथ खोजे जा सकते हैं, इसलिए एक एजेंट उन्हें कैटलॉग सूचीबद्ध करके ढूँढता है — कोई विशेष-केसिंग नहीं। एजेंट Sangam कोMCP chat टूल के माध्यम से कॉल करते हैं, और कस्टम पैनल वहीएक समान sangam: { panel, synth } config ऑब्जेक्ट उपयोग करते हैं जो आप REST पर भेजते। एक config आकार, दो सतहें — human UI और agent API साथ-साथ चलते हैं।

लागत और latency

सोच-समझकर चलें: एक सहमति कॉल एक एकल मॉडल कॉल के टोकन का लगभग (panel + 1)×खर्च करती है — हर पैनल सदस्य और synthesizer — और इसकी latencyसबसे धीमे पैनल मॉडल (पैनल समानांतर में चलता है) और synth चरण से सीमित है। यह Sangam को एक शोकेस/प्रीमियम पथ बनाता है, कम-latency वाला नहींopen-sangamआपकी अपनी keys (BYOK) पर चलता है — इसका पैनल पूर्णतः ओपन-वेट है, इसलिए लागत आपकी अपनी ओपन-वेट provider दर है; sangam का फ्रंटियर पैनल प्रीमियम है। BYOK बीटा के दौरान, Sangam स्वयं मुफ़्त है — BharatRouter इसके ऊपर कुछ शुल्क नहीं लेता।

यह भी देखें