प्रॉम्प्ट एपीआई के लिए एक्सपेरिमेंटल पॉलीफ़िल

पब्लिश किया गया: 14 मई, 2026

Chrome में Prompt API की मदद से, हाई-लेवल ब्राउज़र एपीआई का इस्तेमाल करके, एलएलएम से इंटरैक्ट किया जा सकता है window.LanguageModel. हालांकि, फ़िलहाल यह सुविधा सीमित है और इसे लागू करना एक मुश्किल प्रोसेस है.

ब्राउज़र काम करने वाला ओएस ओएस काम नहीं कर रहा है स्थिति
Chrome Windows, macOS, Linux, ChromeOS (Chromebook Plus) Android, iOS ✅ काम करता है
Edge Windows, macOS Android, iOS ✅ काम करता है
Safari 📋 स्थिति तय की गई
Firefox 📋 स्थिति तय की गई

इसके साथ ही, अर्ली प्रीव्यू प्रोग्राम में शामिल डेवलपर ने Prompt API के लिए अपनी दिलचस्पी दिखाई है. एपीआई की उपलब्धता से, आने वाले समय में कंपैटबिलटी से जुड़ी चुनौती पैदा हो सकती है.

समाधान

इसलिए, हम spec-compliant Prompt API polyfill का एक्सपेरिमेंटल वर्शन रिलीज़ कर रहे हैं. इसका सोर्स कोड GitHub पर देखा जा सकता है. यह polyfill, कॉन्फ़िगर किए जा सकने वाले क्लाउड बैकएंड सेवा देने वाली कंपनियों के साथ-साथ, Transformers.js के फ़ॉर्म में लोकल बैकएंड सेवा देने वाली कंपनी के साथ भी, Prompt API को सटीक तरीके से लागू करता है.

polyfill का इस्तेमाल करना

polyfill का इस्तेमाल करने के लिए, यह तरीका अपनाएं:

  1. npm से polyfill डाउनलोड करें:

    npm install prompt-api-polyfill
    
  2. तय करें कि आपको क्लाउड बैकएंड सेवा देने वाली कंपनी का इस्तेमाल करना है या लोकल बैकएंड सेवा देने वाली कंपनी का:

    • क्लाउड बैकएंड सेवा देने वाली कंपनी: उपयोगकर्ता का डेटा, रिमोट प्रोसेसिंग के लिए क्लाउड पर भेजा जाता है. हालांकि, आपको लोकल मॉडल के उपलब्ध होने का इंतज़ार नहीं करना पड़ता. क्लाउड सेवा देने वाली कंपनी की कीमत से जुड़ी जानकारी के मुताबिक, आपको लगने वाले शुल्क की ज़िम्मेदारी आपकी है.
    • लोकल बैकएंड सेवा देने वाली कंपनी: उपयोगकर्ता का डेटा ब्राउज़र में रहता है और इसे स्थानीय तौर पर प्रोसेस किया जाता है. हालांकि, आपको एक मॉडल डाउनलोड करना होगा. असली Prompt API के उलट, इसे अलग-अलग ऑरिजिन के बीच शेयर नहीं किया जा सकता. लोकल प्रोसेसिंग के लिए कोई शुल्क नहीं लिया जाता.

क्लाउड बैकएंड

क्लाउड बैकएंड में से कोई एक चुनें और अपनी बैकएंड सेवा देने वाली कंपनी के लिए, एपीआई पासकोड (और कोई भी अतिरिक्त क्रेडेंशियल) पाएं.

एपीआई पासकोड मिलने के बाद, अपनी कॉन्फ़िगरेशन फ़ाइल .env.json में जानकारी डालें. अगर आपने modelName तय नहीं किया है, तो polyfill, हर बैकएंड के डिफ़ॉल्ट मॉडल का इस्तेमाल करेगा. हालांकि, अगर आपने तय किया है, तो हर बैकएंड के काम करने वाले मॉडल में से कोई एक चुना जा सकता है.

{
  "apiKey": "y0ur-Api-k3Y",
  "modelName": "model-name"
}

लोकल बैकएंड

अगर आपने Transformers.js पर आधारित लोकल बैकएंड सेवा देने वाली कंपनी का इस्तेमाल करने का फ़ैसला किया है, तो आपको सिर्फ़ एक डमी एपीआई पासकोड की ज़रूरत होगी. हालांकि, यह कॉन्फ़िगर किया जा सकता है कि Transformers.js को कौनसा डिवाइस इस्तेमाल करना चाहिए. बेहतर परफ़ॉर्मेंस के लिए "webgpu" और बेहतर कंपैटबिलटी के लिए "wasm" चुनें. आपके पास डिफ़ॉल्ट सेटिंग बदलने का विकल्प होता है. Hugging Face के कैटलॉग में मौजूद, कंपैटबिल मॉडल में से कोई दूसरा मॉडल चुनें. कुछ मॉडल के लिए, dtype पैरामीटर का इस्तेमाल करके, अलग-अलग क्वॉन्टाइज़ेशन चुने जा सकते हैं.

{
  "apiKey": "dummy",
  "device": "webgpu",
  "dtype": "q4f16",
  "modelName": "onnx-community/gemma-3-1b-it-ONNX-GQA"
};

अपना polyfill कॉन्फ़िगर करना

कॉन्फ़िगरेशन फ़ाइल सेट अप करने के बाद, अब अपने ऐप्लिकेशन में polyfill का इस्तेमाल किया जा सकता है.

  1. कॉन्फ़िगरेशन फ़ाइल इंपोर्ट करें और इसे सही नाम वाले ग्लोबल वैरिएबल असाइन करें. यहां $BACKEND आपका चुना हुआ बैकएंड है: window.$BACKEND_CONFIG.
  2. डाइनैमिक इंपोर्ट का इस्तेमाल करके, polyfill को सिर्फ़ तब लोड करें, जब उससे जुड़ा ब्राउज़र इसे सपोर्ट न करता हो.
  3. Prompt API के फ़ंक्शन कॉल करें.
import config from './.env.json' with { type: 'json' };

// Set $BACKEND_CONFIG to select a backend
window.$BACKEND_CONFIG = config;

if (!('LanguageModel' in window)) {
  await import('prompt-api-polyfill');
}

const session = await LanguageModel.create({
  expectedInputs: [{type: 'text', languages: ['en']}],
  expectedOutputs: [{type: 'text', languages: ['en']}],
});
await session.prompt('Tell me a joke!');

polyfill, स्ट्रक्चर्ड आउटपुट को सपोर्ट करता है. हालांकि, Transformers.js बैकएंड के लिए यह सुविधा उपलब्ध नहीं है. यह मल्टीमॉडल इनपुट के साथ काम करता है. हालांकि, OpenAI बैकएंड के लिए यह सुविधा उपलब्ध नहीं है. यह ऑडियो और इमेज को एक साथ सपोर्ट नहीं करता, बल्कि अलग-अलग सपोर्ट करता है. साथ ही, LanguageModel के लिए, Web Platform Tests के पूरे सुइट के ख़िलाफ़ इसकी जांच की गई है.

बैकग्राउंड और इस्तेमाल की ज़्यादा जानकारी के साथ-साथ, सोर्स कोड देखने के लिए, GitHub रेपो में मौजूद README फ़ाइल देखें.

ब्राउज़र के Prompt API से अंतर

अगर polyfill को क्लाउड मॉडल से बैक किया जाता है, तो क्लाइंट-साइड पर चलने के कुछ फ़ायदे अब लागू नहीं होते. खास तौर पर, अब संवेदनशील डेटा की लोकल प्रोसेसिंग की गारंटी नहीं दी जा सकती. हालांकि, आपके बैकएंड सेवा देने वाली कंपनी की निजता नीतियां अब भी लागू होती हैं. आपका ऐप्लिकेशन, ऑफ़लाइन होने पर भी एआई का इस्तेमाल नहीं कर सकता. यह पता करने के लिए कि आप ऑनलाइन हैं या ऑफ़लाइन, इससे जुड़े इवेंट सुने जा सकते हैं.

window.addEventListener("offline", (e) => {
  console.log("offline");
});

window.addEventListener("online", (e) => {
  console.log("online");
});

अगर एआई इन्फ़रेंस, क्लाउड में मौजूद किसी मॉडल के ख़िलाफ़ चलता है, तो डाउनलोड करने के लिए कोई लोकल मॉडल नहीं होता. polyfill, downloadprogress इवेंट को फ़ेक करता है. इसलिए, आपके ऐप्लिकेशन को ऐसा दिखेगा कि बिल्ट-इन मॉडल पहले ही डाउनलोड हो गया है. इसका मतलब है कि दो इवेंट होंगे. एक में loaded की वैल्यू 0 होगी और दूसरे में 1. स्पेसिफ़िकेशन के मुताबिक, ऐसा होना ज़रूरी है.

क्लाउड पर आधारित इन्फ़रेंस के साथ, डिवाइस पर आधारित इन्फ़रेंस के उलट, अपनी पसंद की बैकएंड सेवा देने वाली कंपनी के एपीआई कॉल करने पर, शुल्क लग सकता है. कीमत से जुड़ी जानकारी देखें. जैसे, Gemini API के लिए कीमत से जुड़ी जानकारी. अगर आपको हर टोकन की कीमत पता है, तो कीमत का हिसाब लगाने के लिए, Prompt API की contextUsage जानकारी का इस्तेमाल किया जा सकता है.

const COST_PER_TOKEN = 123;
const COST_LIMIT = 456;

let costSoFar = 0;

const session = await LanguageModel.create(options);

/…/

if (costSoFar < COST_LIMIT) {
  await session.prompt('Tell me a joke.');
  costSoFar = session.contextUsage * COST_PER_TOKEN;
} else {
  // Show premium AI plan promo.
}

मोबाइल या वेब ऐप्लिकेशन से सीधे क्लाउड एपीआई कॉल करने पर (उदाहरण के लिए, जनरेटिव एआई मॉडल को ऐक्सेस करने की अनुमति देने वाले एपीआई), एपीआई पासकोड का गलत इस्तेमाल किया जा सकता है. ऐसा, अनुमति के बिना क्लाइंट कर सकते हैं. इन एपीआई को सुरक्षित रखने के लिए, अगर Firebase AI Logic Hybrid SDK का इस्तेमाल किया जाता है, तो Firebase App Check का इस्तेमाल करके यह पुष्टि करें कि आने वाले सभी एपीआई कॉल, आपके असली ऐप्लिकेशन से किए गए हैं. Google जैसी कुछ क्लाउड सेवा देने वाली कंपनियों के साथ, ऑरिजिन की सख्त जांच भी लागू की जा सकती है. इससे यह पक्का किया जा सकता है कि सिर्फ़ अनुमति वाली वेबसाइटें ही एपीआई का इस्तेमाल कर सकती हैं.

Prompt API की सीमाओं के बजाय, बैकएंड सेवा देने वाली कंपनी की सीमाएं लागू होती हैं. उदाहरण के लिए, सेशन के contextWindow के बारे में. contextWindow के लिए, ये सीमाएं आम तौर पर डिवाइस पर मौजूद सीमाओं से काफ़ी ज़्यादा होती हैं. साथ ही, क्लाउड में ज़्यादा डेटा प्रोसेस किया जा सकता है. इसलिए, आपको अंतर के बारे में पता होना चाहिए. हालांकि, असल में, आपको इससे जुड़ी समस्याएं शायद ही होंगी.

अपना बैकएंड बनाना

अपनी बैकएंड सेवा देने वाली कंपनी जोड़ने के लिए, यह तरीका अपनाएं:

बेस बैकएंड क्लास को बढ़ाना

backends/ डायरेक्ट्री में एक नई फ़ाइल बनाएं. उदाहरण के लिए, backends/custom-backend.js. आपको PolyfillBackend क्लास को बढ़ाना होगा और मुख्य तरीके लागू करने होंगे. इससे, उम्मीद के मुताबिक इंटरफ़ेस मिलेगा.

import PolyfillBackend from './base.js';
import { DEFAULT_MODELS } from './defaults.js';

export default class CustomBackend extends PolyfillBackend {
  constructor(config) {
    // config typically comes from a window global (e.g., window.CUSTOM_CONFIG)
    super(config.modelName || DEFAULT_MODELS.custom.modelName);
  }

  // Check if the backend is configured (e.g., API key is present), if given
  // combinations of modelName and options are supported, or, for local model,
  // if the model is available.
  static availability(options) {
    return window.CUSTOM_CONFIG?.apiKey ? 'available' : 'unavailable';
  }

  // Initialize the underlying SDK or API client. With local models, use
  // monitorTarget to report model download progress to the polyfill.
  createSession(options, sessionParams, monitorTarget) {
    // Return the initialized session or client instance
  }

  // Non-streaming prompt execution
  async generateContent(contents) {
    // contents: Array of { role: 'user'|'model', parts: [{ text: string }] }
    // Return: { text: string, usage: number }
  }

  // Streaming prompt execution
  async generateContentStream(contents) {
    // Return: AsyncIterable yielding chunks
  }

  // Token counting for quota/usage tracking
  async countTokens(contents) {
    // Return: total token count (number)
  }
}

अपना बैकएंड रजिस्टर करना

polyfill, ग्लोबल कॉन्फ़िगरेशन के आधार पर, "पहले मैच को प्राथमिकता" वाली रणनीति का इस्तेमाल करता है. prompt-api-polyfill.js फ़ाइल में, आपको अपना बैकएंड रजिस्टर करना होगा. इसके लिए, इसे स्टैटिक #backends कलेक्शन में जोड़ें:

// prompt-api-polyfill.js
static #backends = [
  // ... existing backends
  {
    config: 'CUSTOM_CONFIG', // The global object to look for on `window`
    path: './backends/custom-backend.js',
  },
];

डिफ़ॉल्ट मॉडल सेट करना

backends/defaults.js में फ़ॉलबैक मॉडल की पहचान तय करें. इसका इस्तेमाल तब किया जाता है, जब कोई उपयोगकर्ता, modelName तय किए बिना सेशन शुरू करता है.

// backends/defaults.js
export const DEFAULT_MODELS = {
  // ...
  custom: 'custom-model-pro-v1',
};

लोकल डेवलपमेंट और टेस्टिंग की सुविधा चालू करना

प्रोजेक्ट, टेस्ट मैट्रिक्स जनरेट करने के लिए, डिस्कवरी स्क्रिप्ट (scripts/list-backends.js) का इस्तेमाल करता है. टेस्ट रनर में अपना नया बैकएंड शामिल करने के लिए, रूट डायरेक्ट्री में .env-[name].json फ़ाइल बनाएं. उदाहरण के लिए, .env-custom.json:

{
  "apiKey": "your-api-key-here",
  "modelName": "custom-model-pro-v1"
}

Web Platform Tests (WPT) से पुष्टि करना

आखिरी चरण, अनुपालन पक्का करना है. polyfill, स्पेसिफ़िकेशन के हिसाब से काम करता है. इसलिए, किसी भी नए बैकएंड को, Web Platform Tests के आधिकारिक (या अस्थायी) वर्शन पास करने चाहिए:

npm run test:wpt

पुष्टि करने के इस चरण से यह पक्का होता है कि आपका बैकएंड, AbortSignal, सिस्टम प्रॉम्प्ट, और इतिहास को फ़ॉर्मैट करने जैसी चीज़ों को, Prompt API के स्पेसिफ़िकेशन के मुताबिक ही मैनेज करता है.

नतीजा

polyfill की मदद से, सभी प्लैटफ़ॉर्म और डिवाइसों पर Prompt API का इस्तेमाल किया जा सकता है. Prompt API के अच्छी तरह से तय किए गए एपीआई के हिसाब से कोडिंग करके, क्लाउड सेवा देने वाली कंपनियों पर अपनी निर्भरता कम की जा सकती है. साथ ही, प्लैटफ़ॉर्म के ज़्यादा से ज़्यादा करीब रहा जा सकता है.

Prompt API को सपोर्ट करने वाले डिवाइसों पर, polyfill लोड भी नहीं होता. इसलिए, आपके उपयोगकर्ताओं को ऐसा कोड डाउनलोड नहीं करना पड़ता जिसे वे एक्ज़ीक्यूट नहीं करेंगे. अगर आपके पास कोई सुझाव/राय या शिकायत है या आपको कोई गड़बड़ी मिलती है, तो GitHub पर कोई समस्या खोलें. प्रॉम्प्ट करने का आनंद लें!