Skip to main content
OpenClaw में मॉडल प्रदाता (LLM) जोड़ने के लिए एक प्रदाता Plugin बनाएँ: एक मॉडल कैटलॉग, API-कुंजी प्रमाणीकरण और डायनेमिक मॉडल रिज़ॉल्यूशन।
OpenClaw plugins में नए हैं? पैकेज संरचना और मैनिफ़ेस्ट सेटअप के लिए पहले शुरुआत करना पढ़ें।
प्रदाता plugins OpenClaw के सामान्य इन्फ़रेंस लूप में मॉडल जोड़ते हैं। यदि मॉडल को किसी ऐसे नेटिव एजेंट डेमन के माध्यम से चलना आवश्यक है जो थ्रेड्स, Compaction या टूल इवेंट्स का स्वामी है, तो डेमन प्रोटोकॉल का विवरण कोर में रखने के बजाय प्रदाता को एजेंट हार्नेस के साथ जोड़ें।

चरण-दर-चरण विवरण

1

पैकेज और मैनिफ़ेस्ट

चरण 1: पैकेज और मैनिफ़ेस्ट

setup.providers[].envVars आपके Plugin रनटाइम को लोड किए बिना OpenClaw को क्रेडेंशियल्स का पता लगाने देता है। जब किसी प्रदाता वेरिएंट को किसी अन्य प्रदाता आईडी के प्रमाणीकरण का पुनः उपयोग करना हो, तो providerAuthAliases जोड़ें। modelSupport वैकल्पिक है और रनटाइम हुक उपलब्ध होने से पहले OpenClaw को acme-large जैसे संक्षिप्त मॉडल आईडी से आपके प्रदाता Plugin को स्वतः लोड करने देता है। package.json में openclaw.compat और openclaw.build ClawHub पर प्रकाशित करने के लिए आवश्यक हैं (openclaw.compat.pluginApi और openclaw.build.openclawVersion दो आवश्यक फ़ील्ड हैं; छोड़े जाने पर minGatewayVersion के लिए openclaw.install.minHostVersion का उपयोग किया जाता है)।
2

प्रदाता पंजीकृत करें

न्यूनतम टेक्स्ट प्रदाता को id, label, auth और catalog की आवश्यकता होती है। catalog प्रदाता के स्वामित्व वाला रनटाइम/कॉन्फ़िगरेशन हुक है; यह लाइव विक्रेता API को कॉल कर सकता है और models.providers प्रविष्टियाँ लौटाता है।
index.ts
registerModelCatalogProvider सूची/सहायता/चयनकर्ता UI के लिए नया कंट्रोल-प्लेन कैटलॉग सरफ़ेस है, जो text, voice, image_generation, video_generation और music_generation पंक्तियों को कवर करता है। विक्रेता एंडपॉइंट कॉल और प्रतिक्रिया मैपिंग को Plugin में रखें; साझा पंक्ति आकार, स्रोत लेबल और सहायता रेंडरिंग का स्वामित्व OpenClaw के पास है।यह एक कार्यशील प्रदाता है। उपयोगकर्ता अब openclaw onboard --acme-ai-api-key <key> चला सकते हैं और अपने मॉडल के रूप में acme-ai/acme-large चुन सकते हैं।

लाइव मॉडल खोज

यदि आपका प्रदाता OpenAI-संगत /models API उपलब्ध कराता है, तो एकल-प्रदाता सहायक को साझा खोज के लिए सक्षम करें:
liveModelDiscovery: true निम्न व्यवहारों वाला एक सार्वजनिक Plugin SDK अनुबंध है:गैर-Bearer या गैर-मानक सूची एंडपॉइंट के लिए true के बजाय विकल्प पास करें:
endpointUrl का बिना शर्त वैकल्पिक होस्ट के रूप में उपयोग न करें। इसकी requireBaseUrl जाँच उन प्रदाताओं के लिए क्रेडेंशियल-पृथक्करण सीमा है जिनका मॉडल-सूची होस्ट उनके इन्फ़रेंस होस्ट से अलग होता है।यदि प्रदाता को सावधानीपूर्ण OpenAI-संगत प्रोजेक्शन के बजाय कस्टम मॉडल अर्थ-विज्ञान की आवश्यकता है, तो उस प्रोजेक्शन को Plugin में रखें और साझा फ़ेच जीवनचक्र के लिए openclaw/plugin-sdk/provider-catalog-live-runtime का उपयोग करें। सहायक आपको प्रदाता नीति को OpenClaw कोर में रखे बिना सुरक्षित HTTP फ़ेच, प्रदाता-प्रमाणीकरण हेडर, संरचित HTTP त्रुटियाँ, TTL कैशिंग और स्थिर फ़ॉलबैक व्यवहार देता है।जब लाइव API केवल यह बताता हो कि प्रदाता के स्वामित्व वाली स्थिर कैटलॉग पंक्तियों में से कौन-सी वर्तमान में उपलब्ध हैं, तब buildLiveModelProviderConfig का उपयोग करें:
index.ts
जब प्रदाता API अधिक समृद्ध मेटाडेटा लौटाता है और Plugin को पंक्तियों को स्वयं OpenClaw मॉडल परिभाषाओं में प्रक्षेपित करना होता है, तब getCachedLiveProviderModelRows का उपयोग करें:
index.ts
run को प्रमाणीकरण द्वारा नियंत्रित रहना चाहिए और कोई उपयोग योग्य क्रेडेंशियल उपलब्ध न होने पर null लौटाना चाहिए। एक ऑफ़लाइन staticRun या स्थिर फ़ॉलबैक रखें, ताकि सेटअप, दस्तावेज़, परीक्षण और चयनकर्ता सतहें लाइव नेटवर्क पहुँच पर निर्भर न हों। मॉडल-सूची की ताज़गी के लिए उपयुक्त TTL का उपयोग करें, अनुरोध के समय फ़ाइल-सिस्टम पोलिंग से बचें, और प्रदाता-विशिष्ट readRows / readModelId केवल तभी पास करें, जब अपस्ट्रीम प्रतिक्रिया OpenAI-संगत { data: [{ id, object }] } आकार में न हो।यदि अपस्ट्रीम प्रदाता OpenClaw से भिन्न नियंत्रण टोकन का उपयोग करता है, तो स्ट्रीम पथ को बदलने के बजाय एक छोटा द्विदिश पाठ रूपांतरण जोड़ें:
input परिवहन से पहले अंतिम सिस्टम प्रॉम्प्ट और पाठ संदेश की सामग्री को पुनर्लिखता है। output OpenClaw द्वारा अपने नियंत्रण मार्कर पार्स करने या चैनल पर भेजने से पहले सहायक के पाठ डेल्टा और अंतिम पाठ को पुनर्लिखता है।ऐसे बंडल किए गए प्रदाताओं के लिए, जो API-कुंजी प्रमाणीकरण के साथ केवल एक पाठ प्रदाता और एकल कैटलॉग-समर्थित रनटाइम पंजीकृत करते हैं, अधिक सीमित defineSingleProviderPluginEntry(...) हेल्पर को प्राथमिकता दें:
buildProvider वह लाइव कैटलॉग पथ है जिसका उपयोग तब किया जाता है, जब OpenClaw वास्तविक प्रदाता प्रमाणीकरण को हल कर सकता है। यह प्रदाता-विशिष्ट खोज कर सकता है। प्रमाणीकरण कॉन्फ़िगर होने से पहले सुरक्षित रूप से दिखाई जा सकने वाली ऑफ़लाइन पंक्तियों के लिए ही buildStaticProvider का उपयोग करें; इसे क्रेडेंशियल की आवश्यकता नहीं होनी चाहिए और न ही नेटवर्क अनुरोध करने चाहिए। OpenClaw का models list --all प्रदर्शन वर्तमान में स्थिर कैटलॉग केवल बंडल किए गए प्रदाता Plugin के लिए निष्पादित करता है, जिसमें कॉन्फ़िग और एन्वायरनमेंट रिक्त होते हैं तथा कोई एजेंट/वर्कस्पेस पथ नहीं होता।यदि आपके प्रमाणीकरण प्रवाह को ऑनबोर्डिंग के दौरान models.providers.*, उपनाम और एजेंट का डिफ़ॉल्ट मॉडल भी पैच करना है, तो openclaw/plugin-sdk/provider-onboard के प्रीसेट हेल्पर का उपयोग करें। सबसे सीमित हेल्पर createDefaultModelPresetAppliers(...), createDefaultModelsPresetAppliers(...), और createModelCatalogPresetAppliers(...) हैं।जब किसी प्रदाता का नेटिव एंडपॉइंट सामान्य openai-completions परिवहन पर स्ट्रीम किए गए उपयोग ब्लॉक का समर्थन करता है, तो प्रदाता-id जाँच को हार्डकोड करने के बजाय openclaw/plugin-sdk/provider-catalog-shared में साझा कैटलॉग हेल्पर को प्राथमिकता दें। supportsNativeStreamingUsageCompat(...) और applyProviderNativeStreamingUsageCompat(...) एंडपॉइंट क्षमता मानचित्र से समर्थन का पता लगाते हैं, इसलिए नेटिव Moonshot/DashScope-शैली के एंडपॉइंट तब भी विकल्प चुनते हैं, जब कोई Plugin कस्टम प्रदाता id का उपयोग कर रहा हो।ऊपर दिए गए लाइव खोज उदाहरण /models-शैली के प्रदाता API को समेटते हैं। उस खोज को catalog.run के भीतर रखें, उपयोग योग्य प्रमाणीकरण द्वारा नियंत्रित करें, और ऑफ़लाइन कैटलॉग निर्माण के लिए staticRun को नेटवर्क-मुक्त रखें।
3

डायनेमिक मॉडल समाधान जोड़ें

यदि आपका प्रदाता मनमाने मॉडल ID स्वीकार करता है (जैसे प्रॉक्सी या राउटर), तो resolveDynamicModel जोड़ें:
यदि समाधान के लिए नेटवर्क कॉल आवश्यक है, तो असिंक्रोनस वार्म-अप हेतु prepareDynamicModel का उपयोग करें—इसके पूर्ण होने के बाद resolveDynamicModel फिर से चलता है।
4

रनटाइम हुक जोड़ें (आवश्यकतानुसार)

अधिकांश प्रदाताओं को केवल catalog + resolveDynamicModel की आवश्यकता होती है। आपके प्रदाता को आवश्यकता होने पर क्रमिक रूप से हुक जोड़ें।साझा हेल्पर बिल्डर अब सबसे सामान्य रीप्ले/टूल-संगतता परिवारों को समेटते हैं, इसलिए Plugin को सामान्यतः प्रत्येक हुक को एक-एक करके स्वयं जोड़ने की आवश्यकता नहीं होती:
वर्तमान में उपलब्ध रीप्ले परिवार:वर्तमान में उपलब्ध स्ट्रीम परिवार:
प्रत्येक फ़ैमिली बिल्डर उसी पैकेज से निर्यात किए गए निम्न-स्तरीय सार्वजनिक हेल्पर से बना है, जिनका उपयोग तब किया जा सकता है जब किसी प्रदाता को सामान्य पैटर्न से अलग जाना हो:
  • openclaw/plugin-sdk/provider-model-shared - ProviderReplayFamily, buildProviderReplayFamilyHooks(...), और रॉ रीप्ले बिल्डर (buildOpenAICompatibleReplayPolicy, buildAnthropicReplayPolicyForModel, buildGoogleGeminiReplayPolicy, buildHybridAnthropicOrOpenAIReplayPolicy)। Gemini रीप्ले हेल्पर (sanitizeGoogleGeminiReplayHistory, resolveTaggedReasoningOutputMode) और एंडपॉइंट/मॉडल हेल्पर (resolveProviderEndpoint, normalizeProviderId, normalizeGooglePreviewModelId) भी निर्यात करता है।
  • openclaw/plugin-sdk/provider-stream - ProviderStreamFamily, buildProviderStreamFamilyHooks(...), composeProviderStreamWrappers(...), साथ ही साझा OpenAI/Codex रैपर (createOpenAIAttributionHeadersWrapper, createOpenAIFastModeWrapper, createOpenAIServiceTierWrapper, createOpenAIResponsesContextManagementWrapper, createCodexNativeWebSearchWrapper), DeepSeek V4 OpenAI-संगत रैपर (createDeepSeekV4OpenAICompatibleThinkingWrapper), Anthropic Messages थिंकिंग प्रीफ़िल क्लीनअप (createAnthropicThinkingPrefillPayloadWrapper), प्लेन-टेक्स्ट टूल-कॉल संगतता (createPlainTextToolCallCompatWrapper), और साझा प्रॉक्सी/प्रदाता रैपर (createOpenRouterWrapper, createToolStreamWrapper, createMinimaxFastModeWrapper)।
  • openclaw/plugin-sdk/provider-stream-shared - हॉट प्रदाता पथों के लिए हल्के पेलोड और इवेंट रैपर, जिनमें createOpenAICompatibleCompletionsThinkingOffWrapper, createPayloadPatchStreamWrapper, createPlainTextToolCallCompatWrapper, normalizeOpenAICompatibleReasoningPayload(...), और setQwenChatTemplateThinking(...) शामिल हैं।
  • openclaw/plugin-sdk/provider-tools - ProviderToolCompatFamily, buildProviderToolCompatFamilyHooks("deepseek" | "gemini" | "openai"), और अंतर्निहित प्रदाता स्कीमा हेल्पर।
Gemini-फ़ैमिली प्रदाताओं के लिए, रीजनिंग-आउटपुट मोड को ट्रांसपोर्ट के अनुरूप रखें। प्रत्यक्ष Google Gemini API प्रदाताओं को native रीजनिंग आउटपुट का उपयोग करना चाहिए, ताकि OpenClaw <think> / <final> प्रॉम्प्ट निर्देश जोड़े बिना नेटिव थॉट पार्ट का उपयोग कर सके। केवल-टेक्स्ट वाले Gemini CLI-शैली बैकएंड, जो अंतिम JSON/टेक्स्ट प्रतिक्रिया को पार्स करते हैं, साझा google-gemini टैग किए गए अनुबंध को बनाए रख सकते हैं।कुछ स्ट्रीम हेल्पर जानबूझकर प्रदाता-स्थानीय रहते हैं। @openclaw/anthropic-provider अपने सार्वजनिक api.ts / contract-api.ts सीम में wrapAnthropicProviderStream, resolveAnthropicBetas, resolveAnthropicFastMode, resolveAnthropicServiceTier, और निम्न-स्तरीय Anthropic रैपर बिल्डर रखता है, क्योंकि वे Claude OAuth बीटा हैंडलिंग और context1m गेटिंग को एन्कोड करते हैं। इसी तरह xAI Plugin नेटिव xAI Responses संरचना को अपने wrapStreamFn (/fast उपनाम, डिफ़ॉल्ट tool_stream, असमर्थित स्ट्रिक्ट-टूल क्लीनअप, xAI-विशिष्ट रीजनिंग-पेलोड निष्कासन) में रखता है।यही पैकेज-रूट पैटर्न @openclaw/openai-provider (प्रदाता बिल्डर, डिफ़ॉल्ट-मॉडल हेल्पर, रीयलटाइम प्रदाता बिल्डर) और @openclaw/openrouter-provider (प्रदाता बिल्डर तथा ऑनबोर्डिंग/कॉन्फ़िगरेशन हेल्पर) को भी आधार देता है।
उन प्रदाताओं के लिए जिन्हें प्रत्येक इन्फ़रेंस कॉल से पहले टोकन एक्सचेंज की आवश्यकता होती है:
OpenClaw मॉडल/प्रदाता Plugins के लिए हुक को लगभग इसी क्रम में कॉल करता है। अधिकांश प्रदाता केवल 2-3 का उपयोग करते हैं। यह संपूर्ण ProviderPlugin अनुबंध नहीं है—पूर्ण और वर्तमान में सटीक हुक सूची तथा फ़ॉलबैक टिप्पणियों के लिए आंतरिक संरचना: प्रदाता रनटाइम हुक देखें। केवल-संगतता वाले प्रदाता फ़ील्ड, जिन्हें OpenClaw अब कॉल नहीं करता, जैसे ProviderPlugin.capabilities और suppressBuiltInModel, यहाँ सूचीबद्ध नहीं हैं।रनटाइम फ़ॉलबैक टिप्पणियाँ:
  • normalizeConfig प्रत्येक provider id के लिए एक स्वामी plugin को निर्धारित करता है (पहले बंडल किए गए providers, फिर मेल खाने वाला runtime plugin) और केवल उसी hook को कॉल करता है—अन्य providers में कोई स्कैन नहीं होता। Google का अपना normalizeConfig hook ही google / google-vertex / google-antigravity config प्रविष्टियों को सामान्यीकृत करता है; यह कोई अलग core fallback नहीं है।
  • resolveConfigApiKey उपलब्ध होने पर provider hook का उपयोग करता है। Amazon Bedrock अपने provider plugin में AWS env-marker समाधान रखता है; auth: "aws-sdk" के साथ कॉन्फ़िगर किए जाने पर runtime auth अब भी AWS SDK की डिफ़ॉल्ट श्रृंखला का उपयोग करता है।
  • resolveThinkingProfile(ctx) चयनित provider, modelId, वैकल्पिक रूप से मर्ज किया गया reasoning कैटलॉग संकेत और वैकल्पिक रूप से मर्ज किए गए मॉडल के compat तथ्य प्राप्त करता है। compat का उपयोग केवल provider की thinking UI/profile चुनने के लिए करें।
  • resolveSystemPromptContribution किसी provider को एक मॉडल परिवार के लिए कैश-जागरूक system-prompt मार्गदर्शन इंजेक्ट करने देता है। जब व्यवहार किसी एक provider/model परिवार से संबंधित हो और स्थिर/गतिशील कैश विभाजन को बनाए रखना चाहिए, तब पुराने plugin-व्यापी before_prompt_build hook के बजाय इसे प्राथमिकता दें।
5

अतिरिक्त क्षमताएँ जोड़ें (वैकल्पिक)

चरण 5: अतिरिक्त क्षमताएँ जोड़ें

एक provider plugin टेक्स्ट inference के साथ embeddings, speech, realtime transcription, realtime voice, media understanding, image generation, video generation, web fetch और web search पंजीकृत कर सकता है। OpenClaw इसे hybrid-capability plugin के रूप में वर्गीकृत करता है—कंपनी plugins के लिए अनुशंसित पैटर्न (प्रति vendor एक plugin)। देखें आंतरिक संरचना: क्षमता स्वामित्वअपनी मौजूदा api.registerProvider(...) कॉल के साथ register(api) के भीतर प्रत्येक क्षमता पंजीकृत करें। केवल आवश्यक टैब चुनें:
provider HTTP विफलताओं के लिए assertOkOrThrowProviderError(...) का उपयोग करें, ताकि plugins सीमित error-body रीड, JSON त्रुटि पार्सिंग और request-id प्रत्यय साझा करें।
6

परीक्षण

चरण 6: परीक्षण

src/provider.test.ts

ClawHub पर प्रकाशित करें

प्रदाता Plugins भी किसी अन्य बाहरी कोड Plugin की तरह ही प्रकाशित होते हैं:
clawhub skill publish <path> किसी skill फ़ोल्डर को प्रकाशित करने के लिए एक अलग कमांड है, Plugin पैकेज के लिए नहीं—यहाँ इसका उपयोग न करें।

फ़ाइल संरचना

कैटलॉग क्रम संदर्भ

catalog.order यह नियंत्रित करता है कि आपका कैटलॉग अंतर्निहित प्रदाताओं के सापेक्ष कब मर्ज होता है:

अगले चरण

संबंधित