HI ▾
NSFW Video Generator

बिना सेंसर API वयस्क वीडियो पाइपलाइन के लिए

Python के लिए मुफ़्त LLM: स्थानीय मॉडल बनाम होस्टेड API

Python के लिए मुफ़्त LLM दो प्रकार के होते हैं: ओपन-वेट मॉडल जिन्हें आप अपनी मशीनों पर चलाते हैं, और होस्टेड एंडपॉइंट जो कुछ सेंटों का शुल्क लेते हैं। यह गाइड उनकी तुलना करती है और होस्टेड रास्ते के लिए काम करने वाला कोड देती है।

अपडेट किया गया

स्थानीय मशीन को होस्टेड सर्वर क्लस्टर से जोड़ते हुए एक आयसोमेट्रिक चित्रण, स्थानीय और होस्टेड LLM की तुलना में

मुख्य बिंदु

  1. स्थानीय ओपन-वेट मॉडल का प्रति टोकन खर्च शून्य है, लेकिन उन्हें मेमोरी, सेटअप समय और रखरखाव की आवश्यकता होती है।
  2. होस्टेड API OpenAI-संगत है: openai पैकेज इंस्टॉल करें, बेस URL सेट करें, मॉडल ID uncensored का उपयोग करें।
  3. स्ट्रीमिंग, फ़ंक्शन कॉलिंग और JSON मोड सभी सामान्य चैट पूर्णता कॉल के माध्यम से काम करते हैं।
  4. एक ट्रायल कुंजी आपको 7 दिनों के लिए $0.50 का क्रेडिट देती है, जिसमें 2 समानांतर अनुरोध और प्रति मिनट 60 अनुरोध होते हैं।

Python स्क्रिप्ट में एक मुफ़्त LLM लाने के दो तरीके

जब लोग Python के लिए मुफ़्त llms खोजते हैं, तो वे आमतौर पर दो में से किसी एक का मतलब रखते हैं। पहला एक ओपन-वेट मॉडल है जिसे आप डाउनलोड करते हैं और खुद चलाते हैं, जैसे कि Ollama, llama.cpp या Hugging Face transformers लाइब्रेरी का उपयोग करके। दूसरा एक होस्टेड एंडपॉइंट है जिसका खर्च इतना कम है, या जिसमें पर्याप्त ट्रायल क्रेडिट है, कि यह एक प्रोटोटाइप के लिए मुफ़्त लगता है। दोनों वैध हैं, और वे अलग-अलग कार्यों के लिए उपयुक्त हैं।

स्थानीय रूप से चलाने का अर्थ है प्रति टोकन बिल न होना और डेटा आपके मशीन से बाहर न जाना। इसका मतलब यह भी है कि आपको चुने गए मॉडल के लिए पर्याप्त RAM या GPU मेमोरी की आवश्यकता होती है, आपको डाउनलोड का इंतजार करना पड़ता है, और लैपटॉप में फिट होने वाले छोटे मॉडल बड़े मॉडलों की तुलना में खराब उत्तर देते हैं। एक होस्टेड API हार्डवेयर के सवाल को समाप्त कर देता है, लेकिन ट्रायल खत्म होने के बाद आपको प्रति टोकन भुगतान करना पड़ता है। यह पेज दोनों को ईमानदारी से कवर करता है, फिर इस साइट पर होस्टेड विकल्प के लिए Python कोड दिखाता है, जो OpenAI-संगत है और मानक openai पैकेज के साथ काम करता है।

स्थानीय मॉडल और होस्टेड API एक साथ

प्रश्नस्वयं चलाएंहोस्टेड प्रीपेड API
प्रति टोकन लागतकोई नहीं, लेकिन आप हार्डवेयर और बिजली के लिए भुगतान करते हैं$0.15 प्रति 1M इनपुट, $0.50 प्रति 1M आउटपुट
सेटअप समयरनटाइम इंस्टॉल करें, वेट्स डाउनलोड करें, सेटिंग्स ट्यून करेंएक पैकेज इंस्टॉल करें, एक कुंजी पेस्ट करें
कॉन्टेक्स्ट लंबाईआपकी मेमोरी द्वारा सीमित100,000 टोकन, प्रॉम्प्ट और पूर्णता
समानांतर अनुरोधजो भी आपकी मशीन संभाल सकती हैफुल कुंजी पर एक साथ 8 अनुरोध, ट्रायल कुंजी पर 2
अस्वीकृतियाँआपके द्वारा चुने गए वेट्स पर निर्भर करता हैकानूनी वयस्क उपयोग के लिए बिना सामग्री अस्वीकृतियाँ के उत्तर देने के लिए ट्यून्ड
ऑफ़लाइन उपयोगहाँनहीं

यदि आपके पास एक सक्षम GPU है और आपका काम निजी या ऑफ़लाइन है, तो लोकल एक अच्छा विकल्प है और आप यहाँ पढ़ना बंद कर सकते हैं। यदि आप एक बड़े मॉडल चाहते हैं बिना मशीन खरीदे, या आप चाहते हैं कि आपका स्क्रिप्ट लैपटॉप, सर्वर और CI रनर पर समान व्यवहार करे, तो होस्टेड रास्ता सरल है। कई प्रोजेक्ट दोनों का उपयोग करते हैं: डेवलपमेंट के दौरान एक छोटा लोकल मॉडल, और प्रोडक्शन में होस्टेड, केवल एक बेस URL बदलकर।

होस्टेड एंडपॉइंट पाँच मिनट में सेट करें

आपको पहले एक कुंजी की आवश्यकता है। Google या ईमेल और पासवर्ड से साइन इन करें, फिर API कुंजी पेज पर एक क्लिक से $0.50 का मुफ़्त ट्रायल क्रेडिट क्लेम करें। ट्रायल 7 दिनों के लिए मान्य है, प्रति व्यक्ति एक, और भुगतान की आवश्यकता नहीं है। फिर SDK इंस्टॉल करें और कुंजी को अपने सॉर्स कोड से बाहर रखें।

pip install openai
export NOTRACK_API_KEY="sk-your-key-here"

क्लाइंट को स्टॉक OpenAI सेटअप से दो बदलावों की आवश्यकता है: बेस URL और कुंजी। मॉडल ID uncensored है, और केवल एक मॉडल प्रदान किया जाता है।

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.nsfwvideogenerator.cc/v1",
    api_key=os.environ["NOTRACK_API_KEY"],
)

resp = client.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": "You are a concise writing assistant."},
        {"role": "user", "content": "Give me three title ideas for a noir short story."},
    ],
    temperature=0.8,
)

print(resp.choices[0].message.content)
print(resp.usage)

Auth एक मानक Authorization: Bearer हेडर है, जो SDK आपके लिए जोड़ता है। दो विधियाँ मौजूद हैं: POST /v1/chat/completions और GET /v1/models। आप client.models.list() के साथ कनेक्शन की पुष्टि कर सकते हैं, जो उपलब्ध मॉडल ID लौटाता है। पूर्ण पैरामीटर सूची दस्तावेज़ पृष्ठ पर है।

स्ट्रीमिंग प्रतिक्रियाएं

कुछ भी जो व्यक्ति देखता है, स्ट्रीम करें। stream=True सेट करें और सर्वर-सेंट इवेंट्स आने पर चंक पर इटरेट करें। उपयोग स्ट्रीम के अंत में रिपोर्ट किया जाता है, इसलिए आप टोकन गणना लॉग कर सकते हैं।

stream = client.chat.completions.create(
    model="uncensored",
    messages=[{"role": "user", "content": "Write a four-line poem about rain on a tin roof."}],
    stream=True,
)

for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)
    usage = getattr(chunk, "usage", None)
    if usage:
        print("\n", usage)

एक विवरण लोगों को फँसाता है: एक स्ट्रीम किए गए अनुरोध में कन्करेंसी स्लॉट स्ट्रीम खत्म होने तक बना रहता है। 2 स्लॉट वाली ट्रायल कुंजी पर, दो ओपन स्ट्रीम्स का अर्थ है कि तीसरा कॉल 429 लौटाता है जिसका कोड concurrency है। हमेशा स्ट्रीम को कन्ज़्यूम या क्लोज़ करें।

टूल कॉलिंग और JSON मोड

एंडपॉइंट tools, tool_choice, स्ट्रीम किए गए tool_calls और role: "tool" के रूप में भेजे गए परिणामों का समर्थन करता है। यहाँ एक फ़ंक्शन के साथ एक पूर्ण राउंड ट्रिप है।

import json

tools = [{
    "type": "function",
    "function": {
        "name": "word_count",
        "description": "Count the words in a piece of text.",
        "parameters": {
            "type": "object",
            "properties": {"text": {"type": "string"}},
            "required": ["text"],
        },
    },
}]

messages = [{"role": "user", "content": "How many words are in: the quick brown fox jumps"}]
first = client.chat.completions.create(
    model="uncensored", messages=messages, tools=tools, tool_choice="auto"
)
msg = first.choices[0].message

if msg.tool_calls:
    messages.append(msg)
    for call in msg.tool_calls:
        args = json.loads(call.function.arguments)
        result = len(args["text"].split())
        messages.append({
            "role": "tool",
            "tool_call_id": call.id,
            "content": str(result),
        })
    final = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
    print(final.choices[0].message.content)

सदैव arguments को सावधानीपूर्वक पार्स करें; मॉडल इसे JSON स्ट्रिंग के रूप में लौटाता है और कोई भी मॉडल कभी-कभी एक खराब संरचित स्ट्रिंग उत्पन्न कर सकता है। टूल्स के बिना संरचित आउटपुट के लिए JSON मोड का उपयोग करें।

resp = client.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": "Reply with a JSON object with keys title and tags (list of strings)."},
        {"role": "user", "content": "Describe a lighthouse keeper's diary."},
    ],
    response_format={"type": "json_object"},
    temperature=0.2,
)
data = json.loads(resp.choices[0].message.content)
print(data["title"], data["tags"])

शब्द JSON कहें और अपने प्रॉम्प्ट में कुंजी नाम दें, और तापमान कम रखें। प्रोडक्शन कोड के लिए json.loads को एक ट्राई ब्लॉक में लपेटें।

रेट लिमिट, त्रुटियाँ और रीट्राइज़

एक पूर्ण कुंजी 8 समानांतर अनुरोध और प्रति मिनट 300 अनुरोधों की अनुमति देती है। एक ट्रायल कुंजी 2 और 60 की अनुमति देती है। यदि आप अधिक हो जाते हैं, तो आपको HTTP 429 मिलता है जिसमें rate_limited (प्रति मिनट अधिक) या concurrency (एक साथ अधिक) कोड होता है। अस्थायी ओवरलोड पर API 429 भी लौटाता है, Retry-After: 5 हेडर के साथ। SDK कुछ त्रुटियों को स्वयं पुनः प्रयास करता है; एक स्क्रिप्ट के लिए जो फैलाव करता है, एक छोटा स्पष्ट wrapper अधिक स्पष्ट है।

import time
from concurrent.futures import ThreadPoolExecutor
from openai import RateLimitError

def ask(prompt, tries=4):
    for attempt in range(tries):
        try:
            r = client.chat.completions.create(
                model="uncensored",
                messages=[{"role": "user", "content": prompt}],
                max_tokens=300,
            )
            return r.choices[0].message.content
        except RateLimitError:
            time.sleep(5 * (attempt + 1))
    raise RuntimeError("still rate limited")

prompts = [f"Summarize idea number {i} in one sentence." for i in range(20)]
with ThreadPoolExecutor(max_workers=2) as pool:   # 8 on a full key
    results = list(pool.map(ask, prompts))

अपनी कुंजी के कन्करेंसी लिमिट से max_workers को मिलाना 429 त्रुटियों को होने से पहले ही रोकता है। प्रत्येक प्रतिक्रिया में X-Request-Id, X-Balance-USD और दो रेट लिमिट हेडर भी होते हैं, जिन्हें आप डिबगिंग या सहायता के लिए client.chat.completions.with_raw_response.create(...) के माध्यम से पढ़ सकते हैं।

लोकल और होस्टेड के बीच चुनने का तरीका

विचारधारा छोड़ें और अपने प्रोजेक्ट के बारे में चार प्रश्नों का उत्तर दें।

  1. क्या डेटा को आपके मशीन पर ही रहना चाहिए? यदि कोई अनुबंध या आदत हाँ कहती है, तो स्थानीय रूप से चलाएँ। होस्ट किए गए प्रॉम्प्ट यहाँ ट्रेनिंग के लिए उपयोग नहीं किए जाते, लेकिन वे नेटवर्क के माध्यम से यात्रा करते हैं।
  2. आपके पास कितनी मेमोरी है? मॉडल का आकार गुणवत्ता को निर्धारित करता है। एक लैपटॉप जिसमें समर्पित GPU नहीं है, आपको छोटे मॉडल तक सीमित कर देता है, और उत्तरों में यह स्पष्ट होगा। एक होस्टेड मॉडल आपको 100,000 टोकन कॉन्टेक्स्ट विंडो के साथ एक बड़ा मॉडल देता है, जिसे घर पर मिलाना मुश्किल है।
  3. आप कितने अनुरोध भेजेंगे? सप्ताह में कुछ सौ किसी भी पक्ष पर नगण्य हैं। महीने में सैकड़ों हजार अनुरोध होस्टेड बिल को एक वास्तविक संख्या में बदल देते हैं, और एक स्थानीय बॉक्स आकर्षक लगने लगता है यदि वह अन्यथा बेकार बैठा हो। योग की गणना करें: 1,000 इनपुट टोकन और 500 आउटपुट टोकन वाले 100,000 अनुरोधों की लागत 100,000 x $0.0004 = $40 है।
  4. क्या आपको अस्वीकृतियाँ को किसी विशेष तरीके से संभालने की आवश्यकता है? कई ओपन-वेट मॉडल में बिल्ट-इन अस्वीकृतियाँ व्यवहार होता है, और अन्य इसे हटाने के लिए ट्यून्ड होते हैं। यहाँ होस्टेड मॉडल कानूनी वयस्क उपयोग के लिए बिना अस्वीकृतियाँ के उत्तर देने के लिए ट्यून्ड है, इसलिए आपको सही वेट्स खोजने की आवश्यकता नहीं है।

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

Python स्क्रिप्ट में सामान्य गलतियाँ

जिन समस्याओं का सामना लोग करते हैं, वे छोटी और ठीक करने योग्य होती हैं।

  • गलत बेस URL। इसे /v1 पर समाप्त होना चाहिए। एक गुम सफिक्स 404 देता है, एक सहायक संदेश नहीं। यदि संदेह हो तो client.base_url प्रिंट करें।
  • कोड में कुंजी। इसे एक एन्वायरमेंट वेरिएबल से पढ़ें, जैसा कि ऊपर बताया गया है, और अपनी .env फ़ाइल को .gitignore में जोड़ें।
  • गलत मॉडल नाम। एकमात्र मॉडल ID uncensored है। अन्य प्रोवाइडर्स से नाम काम नहीं करेंगे, इसलिए कोड पोर्ट करते समय उन्हें बदलें।
  • असीमित लूप। एक टूल-कॉलिंग लूप जो कभी खत्म नहीं होता, वह महंगा बग है। इसे पांच राउंड तक सीमित करें।
  • कॉन्टेक्स्ट बजट की अनदेखी। प्रॉम्प्ट और कंप्लीशन 100,000 टोकन साझा करते हैं। यदि आप हर टर्न को हमेशा के लिए ऐपेंड करते रहते हैं, तो आप अंततः लिमिट पर पहुँच जाएंगे। पुराने संदेशों को ट्रिम या सारांशित करें।
  • यह मान लेना कि JSON हमेशा वैध होता है। JSON मोड में भी, उन्हें उपयोग करने से पहले अपनी आवश्यक कुंजियों की जाँच करें।

जब सर्वर साइड पर कुछ गलत दिखे, तो support को लिखते समय प्रतिक्रिया से X-Request-Id मान उद्धृत करें। यह ऑपरेटरों को आपका सटीक कॉल खोजने में मदद करता है।

Python वर्क के लिए होस्टेड विकल्प की लागत

1,000 इनपुट टोकन और 500 आउटपुट टोकन के साथ एक सामान्य स्क्रिप्ट कॉल की लागत $0.00015 plus $0.00025, यानी $0.0004 है। $0.50 ट्रायल लगभग 1,250 को कवर करता है। $20 टॉप-अप, जो न्यूनतम है, 50,000 को कवर करता है। क्रेडिट कभी नहीं बर्खास्त होता, विफल या अस्वीकृतियाँ वाले अनुरोधों के लिए चार्ज नहीं किया जाता है, और प्रॉम्प्ट को प्रशिक्षण के लिए उपयोग नहीं किया जाता है। टॉप-अप $500 तक जा सकते हैं, $50 से बोनस के साथ, और भुगतान क्रिप्टो में होता है, TRC20 पर USDT या Base पर USDC। विवरण के लिए मूल्य निर्धारण पृष्ठ देखें।

यह केवल टेक्स्ट है: कोई छवि, ऑडियो, वीडियो, एम्बेडिंग्स या फाइन-ट्यूनिंग नहीं। और एकमात्र कड़ा नियम यह है कि नाबालिगों से जुड़ी यौन सामग्री की अनुमति नहीं है। एक पायथन प्रोजेक्ट के लिए जिसमें कम अस्वीकृतियाँयों के साथ टेक्स्ट जनरेशन की आवश्यकता है, यह पूरी सतह है।

प्रश्न और उत्तर

मुझे किस Python पैकेज की आवश्यकता है?

आधिकारिक openai पैकेज। base_url को https://api.nsfwvideogenerator.cc/v1, पर सेट करें, अपनी कुंजी api_key के रूप में पास करें, और मॉडल ID uncensored का उपयोग करें।

क्या मैं LangChain या अन्य फ्रेमवर्क का उपयोग कर सकता हूँ?

कोई भी क्लाइंट जो आपको एक OpenAI-संगत बेस URL और कुंजी सेट करने की अनुमति देता है, काम करना चाहिए, क्योंकि API चैट पूर्णता प्रारूप का पालन करता है। इसे बेस URL पर पॉइंट करें और मॉडल नाम के रूप में uncensored का उपयोग करें।

क्या मुफ़्त स्थानीय मॉडल होस्टेड जितने अच्छे हैं?

यह मॉडल और आपकी हार्डवेयर पर निर्भर करता है। लैपटॉप में फिट होने वाले मॉडल आमतौर पर बड़े होस्टेड मॉडल से छोटे और कमजोर होते हैं, लेकिन वे प्रति टोकन मुफ़्त होते हैं और ऑफ़लाइन काम करते हैं।

पायथन में 429 त्रुटियाँ से कैसे बचें?

अपने कंकरेंसी लिमिट (ट्रायल की पर 2, फुल की पर 8) के बराबर या उससे कम पर वर्कर थ्रेड्स बनाए रखें, और जब आपको rate_limited, concurrency या Retry-After: 5 प्रतिक्रिया मिले तो छोटे विलंब के बाद पुनः प्रयास करें।

आपकी कुंजी बस एक फ़ॉर्म दूर है

एक खाता बनाएँ, कुंजी कॉपी करें, बेस URL बदलें। सेटअप यही है।