हर प्रमुख क्लाउड AI सेवा के लिए एक स्थानीय OpenAI-compatible proxy चलाएँ। API कुंजियाँ एक बार सहेजें और किसी भी क्लाइंट ऐप — डेस्कटॉप, मोबाइल या वेब — को हर टूल में कुंजियाँ पंजीकृत करने के बजाय http://localhost से बात करने दें।
आरंभ करें
1. ऐप लॉन्च करें
AIProxyServer खोलें। पहली बार लॉन्च होने पर proxy स्वचालित रूप से शुरू होता है और आपके स्थानीय मशीन के पोर्ट 8421 पर सुनता है। मुख्य विंडो में तीन खंड दिखाई देते हैं:
- Proxy Server — वर्तमान स्थिति, base URL, और listener शुरू या बंद करने का बटन
- Bearer Token — वैकल्पिक प्रमाणीकरण टॉगल और टोकन प्रदर्शन
- Providers — प्रत्येक समर्थित क्लाउड AI provider, प्रत्येक पंक्ति में Set API Key बटन के साथ
2. अपनी पहली API कुंजी जोड़ें
- Providers सूची से कोई भी provider चुनें (उदाहरण के लिए OpenAI (ChatGPT))
- अपने ब्राउज़र में provider का कंसोल खोलने के लिए Get API key क्लिक करें, फिर कुंजी बनाएँ या कॉपी करें
- उसी पंक्ति में Set API Key क्लिक करें और मान को संवाद में चिपकाएँ
- Save क्लिक करें। स्थिति लेबल हरे रंग में Configured में बदल जाता है
3. क्लाइंट ऐप कनेक्ट करें
किसी भी OpenAI-compatible क्लाइंट को proxy पर इंगित करें। Base URL http://localhost:8421/<provider>/v1 है। provider खंड तय करता है कि अनुरोध किस क्लाउड को मिलेगा।
# Example: OpenAI Python SDK pointed at the proxy
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8421/openai/v1",
api_key="not-used-but-required-by-sdk",
)
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Hello"}],
)
print(resp.choices[0].message.content)
क्लाइंट को कभी भी वास्तविक कुंजी दिखाई नहीं देती। AIProxyServer अनुरोध अग्रेषित करते समय अपस्ट्रीम क्रेडेंशियल संलग्न करता है।
इंटरफ़ेस अवलोकन
Proxy Server पैनल
| फ़ील्ड | विवरण |
|---|---|
| Status | listener सक्रिय होने पर Running, अन्यथा Stopped। |
| Base URL | वह पता जिसे क्लाइंट ऐप्स को उपयोग करना चाहिए, होस्टनाम और पोर्ट सहित। क्लिपबोर्ड पर कॉपी करने के लिए Copy क्लिक करें। |
| Start / Stop बटन | ऐप बंद किए बिना HTTP listener को टॉगल करें। |
Bearer Token पैनल
- Require Bearer Token authentication — प्रमाणीकरण चालू या बंद करने वाला चेकबॉक्स। परेशानी-मुक्त स्थानीय उपयोग के लिए डिफ़ॉल्ट रूप से बंद।
- Token field — वर्तमान टोकन का केवल-पठन प्रदर्शन। डॉट्स के रूप में दिखाया जाता है; इसे पकड़ने के लिए Copy का उपयोग करें।
- Regenerate — एक नया यादृच्छिक टोकन जारी करें। मौजूदा क्लाइंट को नए मान के साथ अपडेट किया जाना चाहिए।
Providers पैनल
प्रत्येक समर्थित क्लाउड provider के लिए एक पंक्ति। प्रत्येक पंक्ति दिखाती है:
- प्रदर्शन नाम (उदाहरण के लिए Claude (Anthropic))
- कॉन्फ़िगरेशन स्थिति — API कुंजी सहेजे जाने पर हरा Configured, अन्यथा ग्रे Not configured
- आपके क्लाइंट जो URL पथ उपयोग करते हैं, उदा.
/anthropic/v1/chat/completions - Set API Key — क्रेडेंशियल दर्ज करने के लिए संवाद खोलता है
- Get API key — आपके ब्राउज़र में provider का कंसोल खोलता है
समर्थित Providers
ग्यारह क्लाउड AI सेवाएँ बंडल की गई हैं। अधिकांश OpenAI Chat Completions प्रारूप का मूल रूप से उपयोग करती हैं और जैसा है वैसा प्रॉक्सी की जाती हैं। तीन (Anthropic, Gemini, ERNIE) अपने स्वयं के प्रोटोकॉल बोलते हैं; AIProxyServer अनुरोधों और प्रतिक्रियाओं का तुरंत अनुवाद करता है ताकि आपका क्लाइंट हमेशा केवल OpenAI आकार ही देखे।
| Provider | Route prefix | आपको क्या चाहिए |
|---|---|---|
| OpenAI (ChatGPT) | /openai/v1 | platform.openai.com से API कुंजी |
| Claude (Anthropic) | /anthropic/v1 | Anthropic Console से API कुंजी |
| Gemini (Google) | /gemini/v1 | Google AI Studio से API कुंजी |
| Grok (xAI) | /grok/v1 | xAI Console से API कुंजी |
| Azure OpenAI (Copilot) | /copilot/v1 | API कुंजी और साथ ही आपके deployment endpoint का URL |
| Perplexity | /perplexity/v1 | Perplexity सेटिंग्स से API कुंजी |
| Groq | /groq/v1 | Groq Cloud से API कुंजी |
| DeepSeek | /deepseek/v1 | DeepSeek Platform से API कुंजी |
| Kimi (Moonshot) | /kimi/v1 | Moonshot Console से API कुंजी |
| Qwen (DashScope) | /qwen/v1 | Alibaba DashScope से API कुंजी |
| ERNIE (Baidu) | /ernie/v1 | Baidu Qianfan से API Key और Secret Key दोनों |
Provider-विशिष्ट नोट्स
- Azure OpenAI — पूर्ण deployment endpoint को Endpoint Base URL फ़ील्ड में चिपकाएँ, उदाहरण के लिए
https://my-resource.openai.azure.com/openai/deployments/gpt-4o। proxy स्वचालित रूप से/chat/completions?api-version=2024-02-01जोड़ता है। - ERNIE — Baidu Qianfan OAuth का उपयोग करता है, इसलिए API Key और Secret Key दोनों आवश्यक हैं। AIProxyServer पर्दे के पीछे एक्सेस टोकन का अनुरोध और कैश करता है।
- Gemini — प्रमाणीकरण URL क्वेरी पैरामीटर द्वारा होता है; proxy इसे आपके लिए जोड़ता है। निःशुल्क-स्तर प्रति-मिनट कोटा अभी भी लागू होते हैं।
API संदर्भ
एंडपॉइंट्स
| Method | Path | विवरण |
|---|---|---|
| GET | /health | जीवंतता जाँच। सेवा स्थिति और provider सूची लौटाता है। कोई प्रमाणीकरण आवश्यक नहीं। |
| GET | /v1/providers | कॉन्फ़िगर किए गए providers और मेटाडेटा। |
| GET | /<provider>/v1/models | दिए गए provider के लिए मॉडल सूची, OpenAI प्रारूप में। |
| POST | /<provider>/v1/chat/completions | OpenAI Chat Completions अनुरोध। SSE के लिए stream:true पास करें। |
स्ट्रीमिंग
जब क्लाइंट "stream": true भेजता है, तो proxy OpenAI के प्रारूप में Server-Sent Events के साथ प्रतिक्रिया देता है:
data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[{"delta":{"role":"assistant"},...}]}
data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[{"delta":{"content":"Hello"},...}]}
data: [DONE]
Anthropic और Gemini की मूल स्ट्रीम का इस आकार में अनुवाद किया जाता है ताकि सभी क्लाइंट एक ही पार्सर का उपयोग कर सकें।
प्रमाणीकरण हेडर
जब Require Bearer Token authentication चालू हो, तो हर अनुरोध के साथ मुख्य विंडो से टोकन भेजें:
Authorization: Bearer <token-shown-in-app>
सेटिंग्स
नीचे के टूलबार में गियर आइकन से Settings विंडो खोलें।
| सेटिंग | डिफ़ॉल्ट | विवरण |
|---|---|---|
| Proxy Port | 8421 | TCP पोर्ट जिससे listener बाइंड होता है। परिवर्तन के लिए proxy को पुनरारंभ करना आवश्यक है। |
| Auto Start Server | On | ऐप लॉन्च होने पर proxy शुरू करें। |
| Allow LAN Access | Off | बंद होने पर, proxy केवल 127.0.0.1 से बाइंड होता है। चालू होने पर, आपके Wi-Fi पर अन्य डिवाइस proxy तक पहुँच सकते हैं। |
| Require Bearer Token | Off | चालू होने पर, हर अनुरोध में मुख्य विंडो में प्रदर्शित टोकन शामिल होना चाहिए। जब भी Allow LAN Access चालू हो, अत्यधिक अनुशंसित। |
क्लाइंट उदाहरण
cURL
# OpenAI (passthrough)
curl http://localhost:8421/openai/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o-mini",
"messages": [{"role": "user", "content": "Hello"}]
}'
# Claude via the same OpenAI shape
curl http://localhost:8421/anthropic/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-5",
"messages": [{"role": "user", "content": "Hello"}],
"max_tokens": 1024
}'
OpenAI Python SDK
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8421/gemini/v1",
api_key="placeholder", # ignored when Bearer Token is off
)
stream = client.chat.completions.create(
model="gemini-2.0-flash",
messages=[{"role": "user", "content": "Tell me a joke"}],
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="", flush=True)
Flutter / Dart
// Using any OpenAI-compatible Dart client
final client = OpenAIClient(
baseUrl: 'http://localhost:8421/anthropic/v1',
apiKey: '', // unused when Bearer Token is off
);
localhost को अपने Mac के LAN IP से बदलें (जो Allow LAN Access चालू होने पर Base URL फ़ील्ड में दिखाया जाता है)।सुझाव
- जब आप स्थानीय रूप से विकसित कर रहे हों, तो Bearer Token को बंद रखें; जिस क्षण आप LAN एक्सेस सक्षम करें, उसे चालू कर दें।
- अपने क्लाइंट कोड में प्रत्येक provider के लिए अलग Base URLs का उपयोग करें ताकि आप एक स्थिरांक बदलकर providers स्विच कर सकें।
- proxy स्वतः शुरू होता है, लेकिन यदि पोर्ट संघर्ष हो तो आप इसे मुख्य विंडो से अस्थायी रूप से रोक सकते हैं।
- यदि किसी provider का निःशुल्क स्तर आपको दर-सीमित करता है, तो अपस्ट्रीम त्रुटि संदेश शब्दशः अग्रेषित किया जाता है। क्लाइंट से कोई पुनः प्रयास तर्क छिपा नहीं है।
/v1/providersएंडपॉइंट यह पता लगाने के लिए उपयोगी है कि रनटाइम पर कौन से providers कॉन्फ़िगर किए गए हैं।
समस्या निवारण
proxy शुरू नहीं होगा
- कोई अन्य प्रक्रिया पहले से ही पोर्ट 8421 का उपयोग कर सकती है। Settings में पोर्ट बदलें और proxy को पुनरारंभ करें।
- शुरुआत के समय प्रदर्शित त्रुटि संदेश के लिए सिस्टम लॉग जाँचें।
अनुरोध 401 Unauthorized लौटाता है
- Bearer Token आवश्यकता चालू है लेकिन क्लाइंट ने मेल खाने वाला
Authorization: Bearer ...हेडर नहीं भेजा। - provider की अपनी API कुंजी अमान्य हो सकती है — अपस्ट्रीम त्रुटि अग्रेषित की जाती है, इसलिए संदेश बॉडी जाँचें।
अनुरोध "API key is not configured" लौटाता है
- Providers सूची खोलें और संबंधित provider के लिए Set API Key क्लिक करें।
- ERNIE के लिए, API Key और Secret Key दोनों भरे जाने चाहिए। Azure OpenAI के लिए, Endpoint Base URL भी आवश्यक है।
मोबाइल डिवाइस proxy तक नहीं पहुँच सकता
- Settings में Allow LAN Access चालू करें।
localhostके बजाय Base URL फ़ील्ड में दिखाए गए LAN IP का उपयोग करें।- सुनिश्चित करें कि दोनों डिवाइस एक ही Wi-Fi नेटवर्क पर हैं और आपका फ़ायरवॉल proxy पोर्ट पर आने वाले कनेक्शन की अनुमति देता है।
स्ट्रीमिंग प्रतिक्रियाएँ एक साथ आती हैं
- सुनिश्चित करें कि आपका क्लाइंट JSON बॉडी में
"stream": trueभेजता है। - कुछ HTTP लाइब्रेरीज़ डिफ़ॉल्ट रूप से SSE को बफ़र करती हैं — क्लाइंट साइड पर प्रतिक्रिया बफ़रिंग अक्षम करें।
गोपनीयता
- API कुंजियाँ
~/Library/Application Support/AIProxyServer/credentials.encमें Fernet के साथ एन्क्रिप्टेड संग्रहीत हैं।master.keyमें एन्क्रिप्शन कुंजी की अनुमतियाँ 0600 हैं। - Bearer Token, जब सक्षम हो, केवल एन्क्रिप्टेड वॉल्ट में भी संग्रहीत होता है और नियमित सेटिंग्स फ़ाइल में कभी नहीं लिखा जाता।
- proxy केवल उन्हीं providers को अनुरोध अग्रेषित करता है जिन्हें आपने स्पष्ट रूप से कॉन्फ़िगर किया है। यह कोई अन्य आउटबाउंड कॉल नहीं करता।
- कोई टेलीमेट्री नहीं, कोई एनालिटिक्स नहीं, कोई क्रैश रिपोर्टिंग नहीं।
- डिफ़ॉल्ट नेटवर्क बाइंडिंग केवल
127.0.0.1है। LAN एक्सपोज़र ऑप्ट-इन है। - बातचीत की सामग्री संग्रहीत नहीं की जाती। AIProxyServer बाइट्स अग्रेषित करता है और तुरंत उन्हें भूल जाता है।