Prompt API
(developer.chrome.com)- Chrome में बिल्ट-इन Gemini Nano को natural language अनुरोध भेजने वाला एक web API है, जिसे Q&A, classification, content filtering, schedule extraction और contact extraction जैसे कामों में इस्तेमाल किया जा सकता है
- इस्तेमाल से पहले अलग से model download करना ज़रूरी है, और यह तभी काम करता है जब support किए गए OS, storage space, GPU या CPU memory जैसी runtime conditions पूरी हों
- session को
LanguageModel.availability()से उपलब्धता जांचने के बादcreate()से तैयार किया जाता है, और initialPrompts·append()·clone()के जरिए context को आगे बढ़ाया या branch किया जा सकता है - input के रूप में text, image, audio लिए जा सकते हैं और output में अभी केवल text समर्थित है;
prompt()पूरा response लौटाता है, जबकिpromptStreaming()streaming response लौटाता है responseConstraintआधारित structured output, context window management, permission policy और multimodal processing तक शामिल करते हुए यह browser के अंदर on-device AI चलाने का execution model देता है
अवलोकन
- यह Chrome में बिल्ट-इन Gemini Nano को natural language अनुरोध भेजने वाली API के रूप में काम करता है, और web page आधारित Q&A, article classification, content filtering, schedule extraction और contact extraction जैसे उपयोग संभव बनाता है
- model के लिए, भले ही API Chrome में बिल्ट-इन हो, अलग download ज़रूरी है, और पहली बार इस्तेमाल से पहले Google की Generative AI Prohibited Uses Policy देखनी चाहिए
- generative AI इस्तेमाल करने से पहले People + AI Guidebook देखना recommended है
- TypeScript typing @types/dom-chromium-ai package से मिल सकती है
- Chrome Extensions developers को expired origin trial permission
aiLanguageModelOriginTrialहटानी होगी
हार्डवेयर और runtime conditions
- Prompt API·Summarizer API·Writer API·Rewriter API·Proofreader API Chrome में तभी काम करते हैं जब कुछ specific conditions पूरी हों
- supported operating systems हैं Windows 10/11, macOS 13+, Linux और ChromeOS; ChromeOS का support Chromebook Plus devices पर Platform 16389.0.0 या उससे ऊपर होने पर मिलता है
- Chrome for Android, iOS और non-Chromebook Plus devices का ChromeOS अभी Gemini Nano आधारित APIs को support नहीं करता
- storage के लिए Chrome profile वाले volume पर कम से कम 22GB खाली space होना चाहिए
- model GPU या CPU पर चल सकता है
- GPU के लिए 4GB से अधिक VRAM चाहिए
- CPU के लिए 16GB या अधिक RAM और कम से कम 4 CPU cores चाहिए
- audio input इस्तेमाल करने वाली Prompt API के लिए GPU ज़रूरी है
- network की ज़रूरत सिर्फ शुरुआती model download के समय unmetered या non-cellular connection के रूप में होती है
- उसके बाद model इस्तेमाल करने के लिए network connection की ज़रूरत नहीं होती
- model इस्तेमाल करते समय data Google या किसी third party को नहीं भेजा जाता
- model का size browser updates के साथ बदल सकता है, और current size
chrome://on-device-internalsमें देखा जा सकता है - download के बाद अगर खाली storage 10GB से कम रह जाए, तो model device से हटा दिया जाता है, और conditions फिर पूरी होने पर दोबारा download किया जाता है
शुरुआत और model तैयारी
- availability को
LanguageModel.availability()से जांचा जा सकता है availability()को वही same options देने चाहिए जो बाद मेंprompt()याpromptStreaming()में दिए जाएंगे- कुछ models specific modality या language को support नहीं कर सकते, इसलिए options का match होना महत्वपूर्ण है
- model download और session creation, user activation की पुष्टि के बाद
create()से शुरू होते हैं - अगर download चल रहा हो, तो progress events लेकर user को download status बताना चाहिए
- localhost पर Chrome flags enable करने से built-in AI APIs इस्तेमाल की जा सकती हैं
chrome://flags/#optimization-guide-on-device-modelchrome://flags/#prompt-api-for-gemini-nano-multimodal-input- इसके बाद Relaunch या Chrome restart ज़रूरी है
- error आने पर localhost troubleshooting देखी जा सकती है
session creation और basic settings
- session
LanguageModel.create()से बनाया जाता है - Chrome Extensions के लिए Prompt API में session के हिसाब से topK और temperature को option के रूप में adjust किया जा सकता है
- default और maximum values
LanguageModel.params()से देखी जा सकती हैं - यह feature सिर्फ Chrome Extensions या sampling parameters origin trial इस्तेमाल करने पर लागू होता है
- default और maximum values
params()defaultTopK,maxTopK,defaultTemperature,maxTemperatureलौटाता है- नया session initialize करते समय
topKऔरtemperatureको दोनों साथ specify करना होगा या दोनों छोड़ने होंगे create()मेंsignalfield के जरिएAbortSignalदेकर session को abort किया जा सकता है
context और prompt construction
initialPromptsके जरिए पिछली बातचीत का context देकर browser restart के बाद saved session को जारी रखा जा सकता है- prompt array में
system,user,assistantroles साथ में डाले जा सकते हैं - आखिरी
assistantmessage मेंprefix: trueदेने पर response का कुछ हिस्सा पहले से भरकर किसी specific output format की ओर guide किया जा सकता है- उदाहरण के लिए, TOML code block की शुरुआत की string पहले से डालकर output format को स्थिर किया जा सकता है
- session बनाने के बाद
append()से अतिरिक्त context पहले से जोड़ा जा सकता हैinitialPromptsसे अलग, session creation के बाद भी context accumulate किया जा सकता हैappend()prompt के validate, process और add होने के बाद fulfill होता है- अगर prompt जोड़ा नहीं जा सकता, तो promise reject हो जाता है
input/output modalities और multilingual support
- session creation के समय
expectedInputsऔरexpectedOutputsसे expected input/output formats और languages सेट किए जा सकते हैं expectedInputsकाtypetext,image,audioको support करता हैexpectedOutputsकाtypeअभी सिर्फ text की अनुमति देता है- language को
languagesarray से set किया जाता है, और Prompt API"en","ja","es"स्वीकार करता है- अतिरिक्त language support development में है
- input side पर system prompt language और एक या अधिक user prompt languages डाली जा सकती हैं
- output side पर एक या अधिक output languages डाली जा सकती हैं
- unsupported input या output मिलने पर
"NotSupportedError"DOMException हो सकता है
multimodal input
- इसका उपयोग audio transcription या image description, caption, alt text generation जैसे कामों में किया जा सकता है
- संबंधित demos
- audio input निम्न types support करता है
- visual input निम्न types support करता है
- उदाहरण में image
BlobऔरHTMLCanvasElementको साथ डालकर दो visual materials की तुलना कराई जाती है, और फिरAudioBufferके जरिए user का voice response लिया जाता है
structured output और constraints
prompt()याpromptStreaming()केresponseConstraintमें JSON Schema डालकर structured output इस्तेमाल किया जा सकता है- संबंधित feature structured output में देखा जा सकता है
- उदाहरण में boolean schema देकर post pottery से जुड़ी है या नहीं, इसका जवाब सिर्फ
trueयाfalseमें दिलाया जाता है - implementation में JSON Schema या regular expression को message के हिस्से के रूप में भी डाला जा सकता है, लेकिन इस स्थिति में वह context window का हिस्सा उपयोग करेगा
session.measureContextUsage()मेंresponseConstraintoption देकर यह मापा जा सकता है कि constraint context का कितना उपयोग कर रहा हैomitResponseConstraintInputoption का इस्तेमाल करने पर इस behavior से बचा जा सकता है- इस स्थिति में prompt के भीतर desired output format के बारे में guidance साथ देना recommended है
prompt execution mode
- अगर short response expected हो, तो
prompt()का उपयोग कर पूरा result एक बार में लिया जा सकता है - अगर long response expected हो, तो
promptStreaming()का उपयोग कर partial results को streaming में लिया जा सकता है promptStreaming()एकReadableStreamलौटाता हैprompt()औरpromptStreaming()दोनों दूसरे argument मेंsignalलेकर running prompt को abort कर सकते हैं
session management
- हर session बातचीत का context बनाए रखता है, इसलिए पिछले interactions बाद के responses में reflect होते हैं
- हर session के पास process किए जा सकने वाले tokens की maximum संख्या होती है, और
session.contextUsageतथाsession.contextWindowसे current usage और limit देखी जा सकती है - अगर नया prompt context window से आगे निकल जाए, तो system prompt को छोड़कर बातचीत का शुरुआती हिस्सा question-answer pair units में हटाया जाता है ताकि जगह बन सके
- ऐसी स्थिति को session के
contextoverflowevent से detect किया जा सकता है - अगर conversation history हटाने पर भी पर्याप्त tokens नहीं मिलते, तो
prompt()याpromptStreaming()QuotaExceededError के साथ fail हो जाते हैं, और कुछ भी हटाया नहीं जाताrequested: input द्वारा लिए गए tokens की संख्याcontextWindow: उपलब्ध tokens की संख्या
- अधिक जानकारी के लिए session management देखी जा सकती है
session cloning और termination
clone()से existing session की copy बनाकर conversation branching की जा सकती है- cloned session existing context और initial prompts को बनाए रखता है
clone()भीsignalfield के जरिएAbortSignalले सकता है- session की ज़रूरत न रहे, तो
destroy()से resources release किए जा सकते हैं - session destroy होने पर उसे दोबारा इस्तेमाल नहीं किया जा सकता, और चल रही execution भी रुक जाती है
- session creation में समय लग सकता है, इसलिए अगर बार-बार prompts भेजने हों तो session बनाए रखना बेहतर हो सकता है
permission policy और runtime environment constraints
- default रूप से Prompt API केवल top-level window और उसी origin वाले iframe में इस्तेमाल की जा सकती है
- cross-origin iframe को Permission Policy के
allow="language-model"attribute से access delegate किया जा सकता है - अभी Prompt API को Web Workers में इस्तेमाल नहीं किया जा सकता
- क्योंकि हर worker के लिए permissions policy state जांचने वाला responsible document तय करना जटिल है
demos और reference materials
- web application demos
- Chrome Extensions testing के लिए demo extension भी उपलब्ध है
performance और feedback
- web के लिए Prompt API अभी भी development में है
- बेहतर performance के लिए session management best practices देखना उपयोगी है
- implementation feedback channels
1 टिप्पणियां
Hacker News की राय
यह API मेरे लंबे समय से सोचे जा रहे de-snarkifier आइडिया के लिए बिल्कुल सही लगती है
सोशल मीडिया बौद्धिक रूप से उत्तेजक हो सकता है और उससे बहुत कुछ सीखा भी जा सकता है, लेकिन चाहें या न चाहें, विचारधारात्मक बहसों और फ्लेमवार में खिंच जाना बहुत आसान है। इंटरनेट पर अजनबियों से भावनात्मक ऊर्जा खर्च करके लड़ना लगभग मानवीय पूंजी की बर्बादी जैसा है
अगर ऐसी API हो, तो ब्राउज़र एक्सटेंशन के ज़रिए किसी पोस्ट को दिखाने से पहले सिर्फ आक्रामक या तंजभरे वाक्यांशों को नरम किया जा सकता है, जबकि तथ्यात्मक जानकारी जस की तस रखी जा सकती है। इससे भी आगे बढ़कर, जितना अधिक आक्रामक टोन हो, उसे उतना ही हास्यास्पद या अयोग्य सुनाई देने वाला बनाया जा सकता है
तब पढ़ने वाले लोग अजनबियों के व्यक्तिगत हमलों से बचे रहेंगे, और लिखने वालों की भी बदतमीज़ी से पेश आने की प्रेरणा कम हो जाएगी। अगर सब ऐसे फ़िल्टर इस्तेमाल करें, तो कौन ज़्यादा घटिया व्यवहार करता है इसकी होड़ भी खत्म हो जाएगी
पोषण तो पूरा है, लेकिन स्वाद में कुछ खास नहीं
मुझे तो बस इतना चाहिए कि सारे clickbait titles और विज्ञापन हट जाएँ, और सिर्फ सूखे, तथ्यात्मक शीर्षक दिखें
किसी भी विषय पर एक मुख्य लेख और कुछ सार्थक टिप्पणियाँ काफी हैं, बाकी ज़्यादातर ऐसा शोर है जिसे मैं देखना ही नहीं चाहता
सोशल मीडिया की हालत अभी इतनी खराब है कि मैं लगभग इसका इस्तेमाल नहीं करता, सिर्फ HN अपवाद था, लेकिन अब यहाँ भी AI की भरमार के साथ वही दिशा दिख रही है। फिर भी हर दो हफ़्ते में कुछ घंटे बर्बाद कर ही देता हूँ, और वह भी पूरी तरह छोड़ देना चाहता हूँ
आदर्श रूप से मैं चाहता हूँ कि 98% कंटेंट फ़िल्टर या समरी होकर गायब हो जाए, और समय के साथ इंटरनेट सिर्फ तब इस्तेमाल हो जब मैं जानबूझकर कुछ खोज रहा हूँ। मूल रूप से मैं इंटरनेट के मनोरंजन पहलू का अधिकांश हिस्सा हटाना चाहता हूँ ताकि समय और ऊर्जा को वास्तविक दुनिया और किताबों जैसे उच्च-गुणवत्ता स्रोतों की ओर मोड़ा जा सके
यह एक्सटेंशन क्राउडसोर्सिंग के ज़रिए सनसनीखेज़ी कम करने की कोशिश करता है, हालांकि मुझे लगता है कि इसके कुछ टॉप योगदानकर्ता LLM bots भी हो सकते हैं
बस ऐसी चीज़ें जब वास्तविक दुनिया से टकराती हैं तो परिणाम अनिश्चित होते हैं, और अगर यह काम भी करे तो शायद वैसा नहीं करेगी जैसा शुरुआत में सोचा गया था
मैं खुद को रोक नहीं पाया और जल्दी में Snarknada का एक प्रोटोटाइप बना डाला, ताकि low-latency patterns और accuracy की संभावनाओं को साथ में देख सकूँ
ऐसे use case में on-device सही क्यों है, इसकी वजह यही है। अगर पूरे infinite scroll feed को cloud API से नरम बनाना हो, तो token cost डेवलपर के लिए असहनीय हो जाएगी। ऊपर से यह भी स्वाभाविक है कि लोग अपने निजी feed या DM को tone साफ़ करने के लिए किसी third-party server पर भेजना नहीं चाहेंगे
इसे डिवाइस के अंदर ले आने से high-frequency Semantic Mutation पहली बार लागत और तकनीकी दृष्टि से व्यावहारिक हो सकती है। अगर कोई इसे मेरे खिलौना-जैसे PM prototype से ज़्यादा गंभीरता से बनाता है और कहीं ठोस friction point सामने आता है, तो मैं ज़रूर सुनना चाहूँगा। इससे roadmap prioritization में मदद मिलेगी
[1]: अगर आप coding agents (Cursor, Claude Code आदि) इस्तेमाल करते हैं, तो https://www.npmjs.com/package/built-in-ai-skills-md-agent-md की ओर इशारा करने की सलाह दूँगा। बहुत से models अब पुराने हो चुके window.ai namespace पर train हुए हैं, इसलिए यह skill file उन्हें मौजूदा API सही ढंग से इस्तेमाल करने में मदद करती है
मैंने इस API design के काम का नेतृत्व किया था, और retirement से पहले इससे जुड़ी design considerations पर एक लेख भी लिखा था
https://domenic.me/builtin-ai-api-design/
और यह भी कि ऐसी चीज़ बनाते समय browsers आपस में W3C स्तर पर नहीं, बल्कि व्यावहारिक तौर पर कुछ साझा बिंदुओं पर तालमेल बैठाने की कोशिश करते हैं या नहीं। आखिर यह उद्योग काफ़ी छोटा है
यह सच में काम करता है, और मैं इसे local inference के लिए पहले ही ship कर चुका हूँ
search जैसी low-end LLM tasks में यह गरीब आदमी के ollama जैसा काम कर सकता था। सबसे बड़ा फायदा यह है कि यह मुफ़्त है, privacy बनाए रखता है, और user को लगभग कुछ भी नहीं करना पड़ता, इसलिए non-technical users तक local inference पहुँचाने के लिए अच्छा है
लेकिन वास्तविक user experience अच्छा नहीं है। model download का आकार browser से ही कई गुना बड़ा है, और first token मिलने से पहले यह पूरा process खत्म होना पड़ता है
जब तक operating system स्थिर रूप से pre-baked models उपलब्ध नहीं कराता और ऐसी APIs उनसे जुड़ नहीं पातीं, तब तक इसका समाधान मुश्किल लगता है
बड़ी समस्या यह है कि ज़्यादातर सामान्य PCs पर model बहुत छोटा और धीमा है। मैंने infocom text adventure के वाक्यों को real time में बदलने की कोशिश की थी, लेकिन अभी कई PCs पर यह इतना धीमा है कि व्यावहारिक नहीं है
यह कुछ वैसा ही है जैसे bittorrent अलग-अलग hosts से file pieces लाता है। shared layers तो फिर भी डाउनलोड करनी होंगी, लेकिन time-to-first-token को कुल size के बजाय active size के अनुपात में रखा जा सकता है
बेशक तब यह पूरी तरह offline inference नहीं रहेगा, लेकिन browser web feature के लिए शायद यह निर्णायक चिंता न हो
लेकिन अगर model browser से बहुत बड़ा है और first token से पहले डाउनलोड ज़रूरी है, तो क्या इसका मतलब lazy download है? अगर पहली बार call करने वाले users को उसी समय download पूरा होने तक इंतज़ार करना पड़े, तो user experience काफ़ी भयानक लगेगा
यह भी जानना चाहूँगा कि क्या Chrome confusion कम करने के लिए download status dialog जैसा कुछ दिखाता है, और disk usage लगभग कितना होता है
ऊपर-ऊपर से तो लगता है कि यह Gemini Nano इस्तेमाल कर रहा है, लेकिन नवीनतम Gemma 4 E2B/E4B कहीं बेहतर दिखते हैं, इसलिए फिलहाल quantized version को extension के रूप में वितरित करना ज़्यादा अच्छा हो सकता है
स्रोत:
अगर Gemma 4 या उसके अनुरूप Gemini Nano अभी Chrome में नहीं है, तो मेरा अनुमान है कि जल्द आ जाएगा
और यह लेख 2025-09-21 को आख़िरी बार अपडेट हुआ था, और उस समय तक यह पहले ही Gemini Nano 3 था
इसमें लिखा है कि Prompt API browser के भीतर मौजूद Gemini Nano को natural language requests भेजने का तरीका है
Edge में शायद यह Phi4 होगा
यह कुछ हद तक ऐसा भी लगता है कि कोई दुर्भावनापूर्ण JS script अनजान visitors पर token generation का बोझ डाल सकती है
यह भी दिलचस्प होगा कि क्या बड़े prompts को छोटे हिस्सों में बाँटकर कई browsers को भेजा जा सकता है, और हर browser सिर्फ छोटा हिस्सा process करे, ताकि subagent pattern या RLM जैसी किसी संरचना से उपयोगी distributed result बन सके
technical और business infrastructure भी बेहद जटिल हो जाएगा, और अगर सच में user browsers पर prompts offload करने हैं, तो शायद सीधे Chrome API का ठीक से इस्तेमाल करना बेहतर होगा। यह भी संदेह है कि ऐसे low-end models पर server-side prompts offload करना वास्तव में कितनी बार सार्थक साबित होगा
और अगर सच में ऐसा करना हो, तो WebGPU भी काफ़ी समय से मौजूद है
यह एक proper Model API की दिशा में कदम जैसा लगता है, लेकिन अभी बहुत छोटा कदम है
इससे Apple के Foundation Models भी याद आते हैं
कई AI integrations text communication या chat style पर केंद्रित हैं, लेकिन वास्तव में बहुत-सा software non-text interfaces में भी लाभ उठा सकता है
अंततः OS और browser को model-management APIs देनी चाहिए, ताकि apps एक सरल interface के माध्यम से on-device models और remote models तक पहुँच सकें
अगर यह cross-platform standard बन जाए तो बहुत अच्छा होगा, और इसे mobile तक भी पहुँचना होगा, इसलिए व्यवहारिक रूप से इसे आगे बढ़ाने की सबसे अधिक क्षमता Apple और Google के पास ही लगती है। Meta पीछे से आए या उल्टा पहले कदम उठाए, यह अलग बात है
मुख्य बात यह है कि यह किसी खास प्रचारित model तक सीमित नहीं होना चाहिए
apps को query करके उपयुक्त model चुन पाने में सक्षम होना चाहिए
(1) https://developer.apple.com/documentation/foundationmodels
बेशक अभी यह शुरुआती दौर में है
https://github.com/mozilla/standards-positions/issues/1067
हम इसे Hackday retrospective summary के लिए इस्तेमाल कर रहे हैं
https://remotehack.space/previous-hacks/
यह एक छोटा script है जो RSS feed पढ़कर body text से summary बनाता है, और static site के साथ काफ़ी अच्छी तरह फिट बैठता है। कभी आगे चलकर मैं इसे बढ़ाकर उसी content पर अलग-अलग सवाल पूछने लायक बनाना चाहूँगा
browser से accessible local LLM privacy के लिहाज़ से अच्छा है, लेकिन अगर हर browser इस API के पीछे अलग model लगाता है, तो testing nightmare अभी से भी बदतर हो सकता है
आखिरकार ज़्यादातर implementations शायद Gemini Nano को ध्यान में रखकर बनेंगी, तो यह भी सोचने वाली बात है कि क्या इससे users और ज़्यादा Chrome की ओर खिंचेंगे
व्यवहार में prompts model-agnostic नहीं होते, इसलिए Gemini Nano 3 v2025 के लिए बारीकी से tune किया गया prompt, Gecko पक्ष के model पर चुपचाप खराब प्रदर्शन दे सकता है। लेकिन API तो branching के लिए capability detection तक नहीं देती
यह WebGL से भी बदतर है, जहाँ कम-से-कम extension support query किया जा सकता था। किसी feature को ऐसे ship करना कि वह browser के पीछे छिपे model की prompt quality पर निर्भर हो, जबकि उसका नाम और version भी न पता हो, वैसा है जैसे ऐसा software जारी करना जिसकी functionality user द्वारा इंस्टॉल किए गए dictionary पर निर्भर करती हो
मुझे लगता है Gemini Nano के weights, Gemma के विपरीत, open नहीं हैं
अगर किसी ने पहले से नहीं किया है, तो मैं model weights dump करके देखना चाहूँगा