Cordis कॉन्फ़िगरेशन
एम्बेडेड Cordis/DSH इंजन दो दस्तावेज़ों और पर्यावरण चरों से कॉन्फ़िगर होता है। दोनों फ़ाइलें डिफ़ॉल्ट रूप से बैकएंड के पास हैं; LIBRE_CORDIS_CONFIG और LIBRE_CORDIS_SETTINGS उनकी जगह बदलते हैं।
| दस्तावेज़ | स्वामी | संरचना | उद्देश्य |
|---|---|---|---|
cordis.patch.yml | Cordis Loader | शीर्ष-स्तरीय YAML array | इंजन माउंट करने वाली प्लगइन पंक्तियाँ |
cordis.config.yml | Libre WebUI होस्ट | YAML mapping | प्रदाता, क्रेडेंशियल स्रोत और सुविधा स्विच |
दो दस्तावेज़ इसलिए हैं क्योंकि Cordis का Include ट्री कैरियर कंपोज़िशन स्वयं पढ़ता है और शीर्ष स्तर पर array न होने वाली फ़ाइल अस्वीकार करता है। होस्ट सेटिंग उसी फ़ाइल में नहीं रह सकती।
सक्षम करना
प्रशासक सेटिंग्स → उपयोगकर्ता प्रबंधन → पहुँच और नीतियाँ → कॉर्डिस इंजन में सक्षम करता है। बदलाव तुरंत लागू होता है: अगला अनुरोध इंजन शुरू करता है और बंद करने पर वह मुक्त होता है। पुनः शुरू करने की ज़रूरत नहीं।
दो तैनाती-स्तरीय स्रोत मान स्थिर कर सकते हैं। दोनों UI स्विच लॉक करते हैं, चुपचाप override नहीं होते:
| स्रोत | प्रभाव |
|---|---|
LIBRE_CORDIS_ENABLED पर्यावरण चर | true/false तैनाती का सुविधा-मान स्थिर करता है |
cordis.config.yml का features.enabled | स्पष्ट मान विकल्प स्थिर करता है; कुंजी न हो तो प्रशासक चुनता है |
इंजन को कंपोज़िशन भी चाहिए। साथ आने वाले उदाहरणों से शुरू करें:
cd backend
cp cordis.patch.example.yml cordis.patch.yml
cp cordis.config.example.yml cordis.config.yml
होस्ट cordis.patch.yml पढ़ता है, ब्रिज पंक्ति में अपने डिफ़ॉल्ट मिलाता है और <DATA_DIR>/cordis-runtime/cordis.composed.yml लिखता है। यह बनी हुई फ़ाइल हटाई जा सकती है, लेकिन संपादित नहीं करनी चाहिए। प्रामाणिक स्रोत ऑपरेटर की cordis.patch.yml है।
cordis.config.yml
trace: false
model:
provider: libre-webui
# Empty selects the authenticated caller's configured default/fallback route.
model: ''
features:
# Omit enabled to let the administrator use the Settings toggle.
streaming: true
tools: true
persistence: true
# Optional absolute paths; defaults live under Libre WebUI's data directory.
# workspacePath: /absolute/path/to/workspace
# sessionStorePath: /absolute/path/to/sessions
शीर्ष-स्तरीय कुंजियाँ
| कुंजी | प्रकार | डिफ़ॉल्ट | अर्थ |
|---|---|---|---|
trace | बूलियन | false | Cordis के हर सक्रियण बदलाव का लॉग |
model | मैपिंग | – | मॉडल अडैप्टर चयन; नीचे देखें |
features | मैपिंग | – | क्षमता स्विच; नीचे देखें |
features
| कुंजी | प्रकार | डिफ़ॉल्ट | अर्थ |
|---|---|---|---|
enabled | बूलियन | false | इंजन माउंट करें; false पर हर रूट 503 देता है |
streaming | बूलियन | true | मॉडल आउटपुट स्ट्रीम करने वाले टर्न स्वीकारें |
tools | बूलियन | true | इंजन टूल और उनका रजिस्टर उपलब्ध करें |
persistence | बूलियन | true | JSONL persistence और उसकी सेवा आवश्यक करें; सत्र पुनः शुरू होने पर बने रहें |
ब्रिज चालू करने के लिए केवल features.enabled चाहिए। शीर्ष-स्तरीय enabled नहीं पढ़ा जाता। सभी स्विच features में होने से चालू क्षमताएँ एक ही जगह दिखती हैं।
model
| कुंजी | प्रकार | डिफ़ॉल्ट | अर्थ |
|---|---|---|---|
provider | स्ट्रिंग | libre-webui | libre-webui, deepseek, pi-ai या none |
apiKeyEnv | स्ट्रिंग | OPENAI_API_KEY | कुंजी रखने वाले पर्यावरण चर का नाम |
route | स्ट्रिंग | libre-webui | अनुरोध में इंजन द्वारा दी जाने वाली प्रदाता रूट |
model | स्ट्रिंग | '' | माँगी गई मॉडल ID; हाथ से घोषित रूट में इसे सेट करें |
baseUrl | स्ट्रिंग | '' | Endpoint override; खाली होने पर अडैप्टर का डिफ़ॉल्ट |
providers | मैपिंग | {} | रूट नाम से चिह्नित हाथ से घोषित प्रदाता रूट |
इंजन के मॉडल कहाँ से आते हैं
इंजन की अलग प्रदाता सेटिंग नहीं है। कंपोज़िशन की libre-webui-llm-adapter पंक्ति जिस libre-webui रूट को दर्ज करती है, उससे Libre WebUI के मौजूदा प्रदाता बुलाए जाते हैं। UI में जिस मॉडल से बात कर सकते हैं, इंजन भी उसे इस्तेमाल कर सकता है। UI में मॉडल लाने पर उसके कॉन्फ़िगर क्रेडेंशियल और endpoint सहित वह इंजन को मिलता है।
इसके लिए model.provider: libre-webui सेट करें। यही साथ आने वाला डिफ़ॉल्ट है; क्रेडेंशियल और endpoint Libre WebUI की मौजूदा सेटिंग में रहते हैं।
model इंजन की माँगी हुई मॉडल ID है। खाली मान ऐप के डिफ़ॉल्ट को चुनता है। तैनाती में डिफ़ॉल्ट न हो तो उपलब्ध स्थानीय मॉडल को प्राथमिकता देकर प्रदाता परत का पहला चैट मॉडल लिया जाता है। Embedding मॉडल बाहर रहते हैं। आंतरिक रूट प्रदाता और मॉडल दोनों रखते हैं: lwui:ollama:<encoded-model> या lwui:plugin:<encoded-provider>:<encoded-model>। एक जैसे नाम या Ollama बंद होने पर स्थानीय अनुरोध दूरस्थ प्रदाता को नहीं जाता। स्पष्ट चुना प्रदाता उपलब्ध न हो तो अनुरोध विफल होता है, चुपचाप दूसरे पर नहीं जाता।
खाली model केवल libre-webui रूट में सुरक्षित है। प्रदाता पैकेज की रूट में मॉडल स्पष्ट होना चाहिए। dsh-llm-pi-ai सूची के सवालों के लिए कैटलॉग हल करता है, लेकिन उसकी पहली प्रविष्टि को विकल्प नहीं बनाता। बिना model की मैनुअल रूट कोई टर्न नहीं संभाल सकती और यह त्रुटि देती है:
provider "<route>" resolves no models; the installed catalog does not describe
this route, so its models must be listed in configuration
model में उस रूट की models सूची की ID दें। उदाहरण में route: ollama और model: llama3.2 साथ हैं, जो घोषित llama3.2 प्रविष्टि से मेल खाते हैं।
provider माउंट होने वाला अडैप्टर पैकेज चुनता है:
libre-webuiतैनाती की अपनी प्रदाता परत से इंजन चलाता है। यही समर्थित डिफ़ॉल्ट मोड है।noneमॉडल पहुँच के बिना शुरू करता है। टूल सूची और सत्र चलते हैं, लेकिन टर्न का उत्तर नहीं आता। कंपोज़िशन जाँचने में उपयोगी है।deepseekऔरpi-aiप्रदाता पैकेज सीधे माउंट करते हैं। ये बैकएंड की निर्भरताएँ नहीं हैं। सभी SDK जोड़ने पर 59 अप्रत्यक्ष पैकेज आते थे, जिनमें कभी उपयोग न होने वाली क्षमताओं के अप्रचलित पैकेज भी थे। इच्छित पैकेज स्थापित कर उसकी पंक्ति माउंट करें। गायब पैकेज का नाम होस्ट बताता है।
प्रदाता रूट के फ़ील्ड:
| फ़ील्ड | अर्थ |
|---|---|
displayName | मनुष्य के पढ़ने योग्य नाम |
api | संचार प्रोटोकॉल, जैसे openai-completions |
baseURL | Endpoint का आधार |
apiKeyEnv | कुंजी रखने वाला पर्यावरण चर |
models | मॉडल सूची; हर प्रविष्टि में id, name, contextWindow, maxTokens |
दोनों दस्तावेज़ों में क्रेडेंशियल कभी नहीं लिखे जाते। apiKeyEnv पर्यावरण चर का नाम है। अडैप्टर हर अनुरोध पर इसे पढ़ता है, इसलिए कुंजी बदलने पर पुनः प्रारंभ नहीं चाहिए।
cordis.patch.yml
Cordis Loader प्रविष्टियों का शीर्ष-स्तरीय array है। साथ आने वाला उदाहरण नौ पंक्तियाँ माउंट करता है और अनुशंसित शुरुआती बिंदु है।
- id: llm
name: '@deepseek-ai/dsh-llm'
- id: session
name: '@deepseek-ai/dsh-session'
- id: session-projection
name: '@deepseek-ai/dsh-session-projection'
- id: session-persistence
name: '@deepseek-ai/dsh-session-persistence-jsonl'
config:
# The host supplies the resolved sessionStorePath.
- id: system-prompt
name: '@deepseek-ai/dsh-system-prompt'
config:
personaPrefix: ''
- id: tools
name: '@deepseek-ai/dsh-tools'
- id: agent
name: '@deepseek-ai/dsh-agent'
- id: agent-loop
name: '@deepseek-ai/dsh-agent-loop'
config:
agents: []
- id: libre-webui-bridge
name: './dist/cordis/dsh/engine-plugin.js'
प्रविष्टि के फ़ील्ड
| फ़ील्ड | ज़रूरी | अर्थ |
|---|---|---|
id | नहीं | पंक्ति का स्थिर ID; न हो तो name से बनता है |
name | हाँ | Loader का आयातित मॉड्यूल नाम; स्ट्रिंग लिटरल होना चाहिए |
config | नहीं | प्लगइन सेटिंग; !!js अभिव्यक्ति मान्य है |
disabled | नहीं | पंक्ति हटाए बिना छोड़ें; !!js मान्य है |
inject | नहीं | पंक्ति की अतिरिक्त ज़रूरी सेवाएँ या इंटरसेप्ट सेटिंग |
Loader name सीधे आयात करता है, उसका मूल्यांकन नहीं करता। इसलिए उसमें !!js नहीं हो सकता। config में !!js हो सकता है; अभिव्यक्ति बाद में पंक्ति के फ़ाइबर में Loader संदर्भ से चलती है। process.env और ctx.get(...) चलते हैं, import.meta नहीं।
सापेक्ष नाम कंपोज़िशन फ़ाइल की अपनी निर्देशिका से हल होते हैं। साधारण पैकेज नाम बैकएंड से हल होते हैं, इसलिए @deepseek-ai/dsh-tools को backend/node_modules की कॉपी मिलती है।
पंक्ति क्रम लोडिंग क्रम नहीं है। घोषित सेवाएँ मिलने पर Cordis पंक्ति सक्रिय करता है; ऊपर का समूह सिर्फ पढ़ने में सुविधा देता है।
अनिवार्य पंक्तियाँ
चैट का उत्तर देने वाले इंजन को सभी चाहिए:
| पंक्ति | क्या देती है | किसे चाहिए |
|---|---|---|
dsh-llm | llm | एजेंट लूप |
dsh-session | sessions | एजेंट लूप और ब्रिज |
dsh-session-projection | sessionProjections | एजेंट लूप |
dsh-system-prompt | systemPrompt | टूल और एजेंट लूप |
dsh-tools | tools | एजेंट लूप और ब्रिज |
dsh-agent | agents | ब्रिज |
dsh-agent-loop | एजेंट ड्राइवर | टर्न का उत्तर |
| ब्रिज पंक्ति | libreDshEngine | सभी रूट |
GET /api/cordis/tools में सामग्री पाने के लिए @deepseek-ai/dsh-fs-sandbox और @deepseek-ai/dsh-tool-fs जैसे टूल प्लगइन भी माउंट करें। टूल प्लगइन के बिना रजिस्टर का खाली होना सही है।
पर्यावरण चर
हर सेटिंग का पर्यावरण override है। प्राथमिकता पर्यावरण चर, दस्तावेज़ और फिर अंतर्निहित डिफ़ॉल्ट की है।
| चर | किसे बदलता है | डिफ़ॉल्ट |
|---|---|---|
LIBRE_CORDIS_ENABLED | features.enabled | false |
LIBRE_CORDIS_STREAMING | features.streaming | true |
LIBRE_CORDIS_TOOLS | features.tools | true |
LIBRE_CORDIS_PERSISTENCE | features.persistence | true |
LIBRE_CORDIS_TRACE | trace | false |
LIBRE_CORDIS_MODEL_PROVIDER | model.provider | libre-webui |
LIBRE_CORDIS_MODEL_ROUTE | model.route | libre-webui |
LIBRE_CORDIS_MODEL | model.model | '' |
LIBRE_CORDIS_API_KEY_ENV | model.apiKeyEnv | OPENAI_API_KEY |
LIBRE_CORDIS_BASE_URL | model.baseUrl | '' |
LIBRE_CORDIS_CONFIG | कंपोज़िशन दस्तावेज़ पथ | <cwd>/cordis.patch.yml |
LIBRE_CORDIS_SETTINGS | सेटिंग दस्तावेज़ पथ | कंपोज़िशन दस्तावेज़ के पास |
LIBRE_CORDIS_WORKSPACE | इंजन का डिफ़ॉल्ट कार्यक्षेत्र | <DATA_DIR>/cordis-workspace |
LIBRE_CORDIS_SESSION_STORE | सहेजे सत्रों की निर्देशिका | <DATA_DIR>/cordis-sessions |
बूलियन चर 1/true/yes/on और 0/false/no/off स्वीकारते हैं। समझ न आने वाले मान पर अनुमान के बजाय दस्तावेज़ का मान लिया जाता है।
साथ आने वाली कंपोज़िशन के !!js भी LIBRE_CORDIS_SESSION_STORE और LIBRE_CORDIS_WORKSPACE पढ़ते हैं। इसीलिए होस्ट ट्री माउंट करने से पहले इन्हें निर्यात करता है।
उदाहरण
पूरी तरह ऑफ़लाइन स्थानीय Ollama
features:
enabled: true
model:
provider: pi-ai
route: ollama
model: llama3.2
apiKeyEnv: OLLAMA_API_KEY
providers:
ollama:
api: openai-completions
baseURL: http://127.0.0.1:11434/v1
apiKeyEnv: OLLAMA_API_KEY
models:
- id: llama3.2
contextWindow: 131072
maxTokens: 4096
Ollama कुंजी अनदेखी करता है, लेकिन OpenAI क्लाइंट कोई मान माँगता है। रहस्य बनाए बिना शर्त पूरी करने के लिए OLLAMA_API_KEY=ollama निर्यात करें। कुछ भी मशीन से बाहर नहीं जाता।
OpenAI-संगत गेटवे
features:
enabled: true
model:
provider: pi-ai
route: gateway
model: acme-large
apiKeyEnv: ACME_GATEWAY_API_KEY
providers:
gateway:
displayName: Acme Gateway
api: openai-completions
baseURL: https://gateway.acme.example/v1
apiKeyEnv: ACME_GATEWAY_API_KEY
models:
- id: acme-large
contextWindow: 65536
maxTokens: 4096
आधिकारिक DeepSeek
features:
enabled: true
model:
provider: deepseek
route: deepseek
apiKeyEnv: DEEPSEEK_API_KEY
बैकएंड पर्यावरण में DEEPSEEK_API_KEY सेट करें।
बिना प्रदाता, केवल टूल
features:
enabled: true
model:
provider: none
इंजन शुरू होता है, सत्र बनते हैं और GET /api/cordis/tools कॉन्फ़िगर टूल दिखाता है। मॉडल अडैप्टर न होने के कारण संदेश भेजना विफल होता है।
माइग्रेशन संबंधी बातें
Cordis ब्रिज अतिरिक्त सुविधा है। यह डिफ़ॉल्ट रूप से बंद है और बंद होने पर मौजूदा व्यवहार नहीं बदलता।
मौजूदा तैनाती अपडेट करना। कुछ करने की ज़रूरत नहीं। उदाहरण cordis.patch.example.yml और cordis.config.example.yml नाम से आते हैं; कॉपी करके सक्षम करने तक पढ़े नहीं जाते। कोई माइग्रेशन, टेबल निर्माण या मौजूदा डेटा निर्देशिका में बदलाव नहीं होता।
पहली बार सक्षम करना। दोनों उदाहरण कॉपी कर features.enabled: true सेट करें। इंजन पैकेज पहले से बैकएंड की निर्भरता हैं; और कुछ स्थापित नहीं करना। पहला अनुरोध <DATA_DIR>/cordis-workspace, <DATA_DIR>/cordis-sessions और <DATA_DIR>/cordis-runtime बनाता है। ये मौजूदा डेटा निर्देशिका के भीतर हैं, इसलिए उसे शामिल करने वाला बैकअप और पुनर्स्थापन इन्हें भी शामिल करता है।
इंजन अपडेट करना। निश्चित संस्करण package-lock.json में हैं; backend/package.json alpha-संगत सीमा रखता है। सोच-समझकर अपडेट करें और npm install के बाद प्रदाता व सत्र अनुबंध जाँचें। नई peer dependency होने पर npm माउंट के बजाय स्थापना के समय बताता है। मॉडल और सत्र फ़ॉर्मैट DSH के हैं; फ़ॉर्मैट बदलाव DSH रिलीज़ नोट है, Libre WebUI माइग्रेशन नहीं।
रोलबैक। features.enabled: false सेट करके पुनः शुरू करें या cordis.patch.yml से ब्रिज पंक्ति हटाएँ। libreDshEngine सेवा और लिसनर हटते हैं, उसके एजेंट मुक्त होते हैं। सत्र फ़ाइलें डेटा के रूप में रहती हैं; स्थान खाली करने के लिए sessionStorePath हटाएँ। पैकेज हटाना वैकल्पिक है और दूसरी Libre WebUI सुविधा पर असर नहीं पड़ता।
मौजूदा Chat और Work तैनाती। Chat में प्रशासक-विशेष DeepSeek Harness विकल्प जुड़ता है, जो अस्थायी इंजन सत्र और मौजूदा बातचीत उपयोग करता है। Work में अलग DeepSeek Harness इंजन जुड़ता है, जो पृथक ड्राइवर और मौजूदा सैंडबॉक्स व अनुमोदन इस्तेमाल करता है। पुराने मॉडल चुनाव का व्यवहार नहीं बदलता।
मानक libre-webui अडैप्टर में Chat एजेंट चयन मूल प्रोफ़ाइल के साथ स्पष्ट DSH प्रदाता-मॉडल देता है। स्पष्ट चयन अपनी पूरी प्रदाता पहचान रखता है; मूल प्रोफ़ाइल चलती कंपोज़िशन का डिफ़ॉल्ट लेती है। शीर्षक और सोच-सारांश सीधे प्रदाता से आते हैं, एजेंट टूल नहीं चलते। कस्टम अडैप्टर रूट में सिर्फ मूल Chat विकल्प रहता है; सहायक अनुरोधों के लिए अलग Ollama या प्लगइन टास्क मॉडल चाहिए।
DSH प्रशासक के Ollama स्विच का पालन करता है। बंद होने पर Ollama मॉडल न सूचीबद्ध होते हैं न जाँचे जाते हैं; स्पष्ट चयन दूसरे प्रदाता पर गए बिना विफल होता है। ऑपरेटर द्वारा तय किए गए जिन मॉडल नामों में प्रदाता की पहचान नहीं दी गई है, उन्हें सुरक्षित ढंग से हल करने के लिए भी Ollama कैटलॉग चाहिए। केवल प्लगइन वाली तैनाती में lwui:plugin:<plugin>:<model> चुनें।
संचालन सीमाएँ
- होस्ट इंजन और Chat सिर्फ प्रशासक और solo के लिए हैं। इंजन पृष्ठ स्थानीय JSONL वाला साझा प्रशासक कंसोल है; team में माउंट नहीं होता। सैंडबॉक्स Work मौजूदा SQL भंडार उपयोग करता है।
- मॉडल कॉल प्रमाणित अनुरोधकर्ता के नाम से होती है। इंटरैक्टिव टर्न उसी प्रशासक की कुंजी और डिफ़ॉल्ट मॉडल लेते हैं। विश्वसनीय गैर-इंटरैक्टिव कंपोज़िशन
LIBRE_CORDIS_USERमें सक्रिय प्रशासक का ID दे सकती है। सबसे पुराने प्रशासक को चुपचाप चुनने का विकल्प नहीं। - होस्ट फ़ाइल टूल कार्यक्षेत्र तक सीमित हैं। पढ़ना और लिखना कैनॉनिकल पथ जाँचता है; सत्र कॉन्फ़िगर सीमा से बाहर निर्देशिका नहीं चुन सकता। नेटिव DSH बदलाव सीमाएँ लागू रहती हैं। ऑपरेटर के अतिरिक्त प्लगइन विश्वसनीय सर्वर कोड हैं।
- होस्ट टूल DSH नीति मानते हैं। इंजन पृष्ठ प्रति-सत्र पढ़ने/लिखने और एकबारगी अनुमति कार्ड देता है। वे कार्यक्षेत्र सीमा नहीं तोड़ते। बिना UI Chat ऐसे अनुमोदन अस्वीकार करता है जिन्हें दिखा नहीं सकता। Work ड्राइवर होस्ट फ़ाइल टूल के बिना Work मंज़ूरी और कंटेनर अलगाव लेता है।
- स्ट्रीम में लाइव पाठ और दिखाया गया तर्क होता है। स्थायी संदेश पूरी बातचीत रखते हैं, क्लाइंट को लाइव पाठ दोबारा नहीं देते।
- पुनः प्रारंभ और deletion सहेजे सत्र उपयोग करते हैं। खाली और पूरे सत्र रहते हैं। ब्रिज के JSONL सत्र को हटाने पर लेखक रुकता है और फ़ाइल हटती है। दूसरी persistence प्रणालियों को उचित deletion अडैप्टर चाहिए।
- पुराने गलत लॉग का स्पष्ट सुधार ज़रूरी है। पुराने ब्रिज ने अनिवार्य ID बिना संदेश सहेजे। कठोर रीडर लॉग फेंकने के बजाय अस्वीकार करता है। सुधार के लिए समस्या निवारण देखें।
- शीर्षक स्थानीय रूप से बनते हैं। सत्र सारांश पहले मानव संदेश को छोटा शीर्षक बनाता है। खाली सत्र में ऐसा शीर्षक नहीं होता।
चल रहे DSH इंस्टेंस के मॉडल जोड़ना
वैकल्पिक dsh-native-provider प्लगइन दूसरे DSH इंस्टेंस के कॉन्फ़िगर मॉडल और प्रदाता कनेक्शन देता है, जैसे पोर्ट 3080 का स्थानीय वेब ऐप। उसे उसी के मौजूदा प्रोफ़ाइल में स्थापित करें। वह केवल ctx.llm बुलाता है: कुंजियाँ DSH में रहती हैं और कनेक्शन सत्र बना, एजेंट चला, नेटिव अटैचमेंट पढ़ या नेटिव टूल चला नहीं सकता।
दोनों प्रक्रिया एक Unix होस्ट पर एक OS खाते में चलनी चाहिए। स्पष्ट Unix सॉकेट उपयोग होता है; उसकी वास्तविक निर्देशिका उसी खाते की हो और मोड 0700, सॉकेट 0600 हो। TCP लिसनर नहीं जुड़ता और DSH ब्राउज़र प्रमाणीकरण न दोबारा उपयोग होता है न कमज़ोर होता है। Windows और दूरस्थ DSH होस्ट समर्थित नहीं हैं।
OS खाता स्थानीय पहुँच की सीमा है। उसी खाते की दूसरी प्रक्रिया भी सॉकेट उपयोग कर सकती है। यह कनेक्शन साझा खाते के ऐप के लिए अलग क्रेडेंशियल या आपसी अलगाव नहीं देता।
स्वतंत्र प्लगइन स्थापित करना
DSH → Plugins → Add plugin में Package name or address के अंदर यह सार्वजनिक URL डालें और Install दबाएँ:
https://github.com/libre-webui/dsh-native-provider
DSH पूछे तो घटक सक्षम करें। सार्वजनिक पैकेज 0.1.1, Apache-2.0 लाइसेंस वाला है और बना हुआ रनटाइम व bundle patch रखता है। स्थानीय बिल्ड, स्थापना स्क्रिप्ट या npm रनटाइम निर्भरता नहीं चाहिए। @libre-webui/dsh-native-provider नाम npm पर प्रकाशित नहीं है; डायलॉग में GitHub URL इस्तेमाल करें।
Bundle <DSH home>/lwui-provider/llm.sock चुनता है, सामान्यतः $HOME/.dsh/lwui-provider/llm.sock। कॉन्फ़िगर DSH_HOME को प्राथमिकता मिलती है। निजी सॉकेट निर्देशिका न हो तो बनती है। एक DSH होम में एक सक्रिय ब्रिज रखें या अतिरिक्त प्रोफ़ाइल के उपयोगकर्ता cordis.patch.yml में रास्ता बदलें। पूरा पथ 100 UTF-8 बाइट से अधिक न हो और कोई प्रतीकात्मक लिंक न हो। override के लिए स्वतंत्र पैकेज गाइड देखें।
वैकल्पिक CLI समकक्ष:
dsh plugin --profile web add https://github.com/libre-webui/dsh-native-provider
असल प्रोफ़ाइल web न हो तो उसका नाम दें। CLI स्थापना के बाद पुनः शुरू करें; लाइव UI स्थापना तुरंत प्लगइन चालू कर सकती है। DSH का पुनः प्रारंभ नोटिस आए तो पालन करें। मूल DSH स्रोत बदलना या प्रदाता कुंजी कॉपी करना आवश्यक नहीं।
Libre WebUI से bundle बनाना
Libre WebUI तैयारी स्क्रिप्ट भी देता है। स्रोत checkout में बैकएंड बिल्ड करें और नया आउटपुट स्थान बनाएँ:
npm run build:backend
node scripts/prepare-dsh-provider.mjs /absolute/dsh-provider-bundle /absolute/private-directory/provider.sock
dsh plugin --profile web add /absolute/dsh-provider-bundle
npm वितरण में कंपाइल बैकएंड और स्क्रिप्ट पहले से हैं। स्थापना निर्देशिका में बिना बिल्ड के आख़िरी दो आदेश चलाएँ, फिर चुना DSH प्रोफ़ाइल पुनः शुरू करें। दोनों तरीके मौजूदा आउटपुट निर्देशिका अस्वीकार करते हैं और पैकेज विवरण, लाइसेंस व स्थापना नोट देते हैं।
Libre WebUI जोड़ना
Libre WebUI के cordis.config.yml में वही absolute सॉकेट पथ दें। सार्वजनिक bundle के डिफ़ॉल्ट में /absolute/home को अपने वास्तविक होम से बदलें:
nativeProvider:
socketPath: /absolute/home/.dsh/lwui-provider/llm.sock
वैकल्पिक रूप से LIBRE_DSH_PROVIDER_SOCKET को वह absolute पथ दें। पर्यावरण मान खाली हो तो फ़ाइल में पथ होने पर भी कनेक्शन बंद होता है। LWUI में कॉर्डिस इंजन चालू करें। सक्रिय प्रशासक Work के DeepSeek Harness इंजन, इंजन पृष्ठ और Chat एजेंट समूह में नेटिव मॉडल चुन सकते हैं। Chat में एजेंट CLI मॉडल भी चाहिए। Work मूल मॉडल और प्रदाता ID को providerType: dsh के साथ रखता है; पुराने LWUI-आधारित DSH टास्क अपनी पहचान और इंजन मार्कर रखते हैं।
नेटिव मॉडल सूची लाइव पढ़ी जाती है। प्रदाता या क्रेडेंशियल बदलाव कनेक्शन generation अमान्य कर चलती कॉल रद्द करते हैं। सॉकेट, मॉडल या प्रदाता न हो तो अनुरोध रुकता है; Ollama या दूसरे प्रदाता पर नहीं जाता। शीर्षक और सोच-सारांश चुने LLM को सीधे, बिना टूल, बुलाते हैं। शुरुआती कनेक्शन पाठ, तर्क और टूल संदेश लेता है, लेकिन नेटिव चित्र/फ़ाइल संदर्भ अस्वीकार करता है।
नेटिव कुंजियाँ DSH ऑपरेटर की हैं। सामान्य Work अधिक लोगों के लिए हो तब भी यह कनेक्शन सिर्फ प्रशासक का है। DSH प्रदाता के अनुसार अनुरोध होस्ट से बाहर जा सकता है; Work दूरस्थ प्रदाता सूचना देता है। Team में संबंधित हर वर्कर को स्थानीय कनेक्शन चाहिए; नहीं मिले तो निष्पादन बंद रहता है। Cordis या सॉकेट सेटिंग हटाने पर सहेजे टास्क रहते हैं और नेटिव पहुँच हटती है। DSH क्रैश होकर सॉकेट छोड़ दे तो उसके इंस्टेंस को रोकें, केवल पुराना सॉकेट हटाएँ, फिर शुरू करें। प्लगइन मौजूदा फ़ाइल सिस्टम प्रविष्टि नहीं बदलता।
प्लगइन अपडेट या हटाना
बदलाव से पहले सक्रिय नेटिव अनुरोध पूरे या रद्द करें। पुराने स्थानीय 0.0.0/0.1.0 bundle को DSH UI से बदलने के लिए Uninstall, फिर Add plugin चुनकर ऊपर का सार्वजनिक URL स्थापित करें। कस्टम सॉकेट पथ समर्थित उपयोगकर्ता प्रोफ़ाइल override से रखें। नेटिव सत्र और क्रेडेंशियल बचते हैं।
GitHub से स्थापित पैकेज CLI से अपडेट कर सकते हैं:
dsh plugin --profile web update @libre-webui/dsh-native-provider
CLI अपडेट के बाद पुनः शुरू करके संस्करण देखें। पहले बंद प्लगइन बंद ही रहता है; जाँच से पहले सक्षम स्थिति देखें। स्थिर संस्करण या रोलबैक के लिए github:libre-webui/dsh-native-provider#<commit> इस्तेमाल करें। कस्टम स्थानीय bundle नए आउटपुट स्थान में बनाएँ और वह निर्देशिका फिर जोड़ें। स्थानीय निर्भरता अपडेट करने से GitHub नहीं खींचा जाता।
कनेक्शन हटाने के लिए पहले LWUI का nativeProvider.socketPath हटाएँ या LIBRE_DSH_PROVIDER_SOCKET खाली करें, फिर चलाएँ:
dsh plugin --profile web remove @libre-webui/dsh-native-provider
हटाने के बाद DSH प्रोफ़ाइल पुनः शुरू करें। LWUI टास्क रहते हैं, लेकिन वही स्पष्ट कनेक्शन लौटने तक उनके नेटिव अनुरोध विफल होते हैं। प्लगइन हटाने से DSH के प्रदाता या कुंजियाँ नहीं मिटतीं। पुराने bundle स्थान तभी हटाएँ जब वे अब स्थापित न हों।
नेटिव प्रदाता उपयोग
नेटिव अनुरोध प्रदाता उपयोग में DeepSeek Harness · प्रदाता के नीचे मूल चुने मॉडल से दिखते हैं। वास्तविक मॉडल अनुरोध एक बार गिना जाता है, सहित टूल राउंड, शीर्षक और सोच-सारांश। डैशबोर्ड सफलता, विफलता, रद्द कॉल, विलंब और DSH के बताए टोकन दिखाता है। कैश इनपुट कुल इनपुट में एक बार जुड़ता है। न मिले आँकड़े अनुमानित नहीं होते। प्रदाता ID मौजूदा दर और लागत नियमों के लिए dsh-native:<percent-encoded-native-provider-id> है; अज्ञात दर की कीमत नहीं निकाली जाती।
LWUI प्रदाताओं से होने वाली DSH कॉल उन्हीं के रिकॉर्ड में रहती हैं। कैटलॉग पढ़ने और inference से पहले अस्वीकृत अनुरोध अतिरिक्त मॉडल घटना नहीं बनाते। इस कनेक्शन संस्करण की स्थापना से मापन शुरू होता है, पुराना उपयोग गढ़ा नहीं जाता। रिकॉर्ड में पहचान, स्थिति, समय और काउंटर हैं; प्रॉम्प्ट, उत्तर, क्रेडेंशियल, endpoint या प्रदाता त्रुटि पाठ नहीं।
कॉन्फ़िगरेशन सत्यापित करना
curl -s http://127.0.0.1:3001/api/cordis/health | jq
{
"success": true,
"enabled": true,
"ready": true,
"services": [
{ "name": "llm", "state": "ready" },
{ "name": "systemPrompt", "state": "ready" },
{ "name": "sessions", "state": "ready" },
{ "name": "tools", "state": "ready" },
{ "name": "agents", "state": "ready" }
]
}
503 और code: CORDIS_UNAVAILABLE का मतलब कंपोज़िशन माउंट नहीं हुई। error कारण देता है; LIBRE_CORDIS_TRACE=true सक्रियण लॉग जोड़ता है। आम कारण समस्या निवारण में हैं।