⚡ नवीन — Kimi K3 आता लाइव: तुमची Moonshot की जोडा →
दस्तऐवज

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 त्याच्यावर काहीही शुल्क आकारत नाही.

हे देखील पहा