मानक bencode आउटपुट
बाइट, सीमित पूर्णांक, सूची और बाइट कुंजी वाले शब्दकोश को क्रमित मानक bencode में अधिकतम 65536 आउटपुट बाइट तक लिखें।
def bencode(value):
active, visited, used, parts = set(), 0, 0, []
def emit(*chunks):
nonlocal used
size = sum(len(chunk) for chunk in chunks)
if size > 65536 - used:
raise ValueError("bencode.output")
used += size
parts.extend(chunks)
def encode(item, depth):
nonlocal visited
visited += 1
if depth > 16 or visited > 2048:
raise ValueError("bencode.bounds")
if type(item) is int:
if not -10**18 <= item <= 10**18:
raise ValueError("bencode.integer")
emit(b"i", str(item).encode("ascii"), b"e")
elif type(item) is bytes:
if len(item) > 65536:
raise ValueError("bencode.bytes")
emit(str(len(item)).encode("ascii"), b":", item)
elif type(item) in (list, dict):
if id(item) in active or len(item) > 64:
raise ValueError("bencode.container")
active.add(id(item))
try:
emit(b"l" if type(item) is list else b"d")
if type(item) is list:
for child in item:
encode(child, depth+1)
else:
if any(type(k) is not bytes for k in item):
raise ValueError("bencode.key")
for key in sorted(item):
encode(key, depth+1)
encode(item[key], depth+1)
emit(b"e")
finally:
active.remove(id(item))
else:
raise ValueError("bencode.type")
encode(value, 0)
return b"".join(parts)
- प्रोजेक्ट
- खाली पात्र और गहराई जाँचें तथा चक्र, बूलियन, ±10^18 के बाहर अंक, प्रति पात्र 64 से अधिक मद, 16 से अधिक गहराई या 2048 से अधिक देखे मान अस्वीकार करें।
- लागू करने से पहले समीक्षा करें
- वास्तविक व्यवहार की अपेक्षित परिणाम से तुलना करें। जाँच असफल हो तो अगले बदलाव से पहले कारण समझें।
- मॉडल
- बेस URL और आवश्यक होने पर API कुंजी से OpenAI-संगत या Anthropic endpoint सेट करें। कनेक्शन जाँचें। स्थानीय मॉडल सर्वर चालू होना चाहिए; दूरस्थ उपकरण अलग से डेटा भेज सकते हैं।
def bencode(value):
active, visited, used, parts = set(), 0, 0, []
def emit(*chunks):
nonlocal used
size = sum(len(chunk) for chunk in chunks)
if size > 65536 - used:
raise ValueError("bencode.output")
used += size
parts.extend(chunks)
def encode(item, depth):
nonlocal visited
visited += 1
if depth > 16 or visited > 2048:
raise ValueError("bencode.bounds")
if type(item) is int:
if not -10**18 <= item <= 10**18:
raise ValueError("bencode.integer")
emit(b"i", str(item).encode("ascii"), b"e")
elif type(item) is bytes:
if len(item) > 65536:
raise ValueError("bencode.bytes")
emit(str(len(item)).encode("ascii"), b":", item)
elif type(item) in (list, dict):
if id(item) in active or len(item) > 64:
raise ValueError("bencode.container")
active.add(id(item))
try:
emit(b"l" if type(item) is list else b"d")
if type(item) is list:
for child in item:
encode(child, depth+1)
else:
if any(type(k) is not bytes for k in item):
raise ValueError("bencode.key")
for key in sorted(item):
encode(key, depth+1)
encode(item[key], depth+1)
emit(b"e")
finally:
active.remove(id(item))
else:
raise ValueError("bencode.type")
encode(value, 0)
return b"".join(parts)
सीरियलाइज़ेशन बदलाव संगत और सीमाबद्ध रखें
बाइनरी आउटपुट साधारण पाठ अंतर में अलग दिखे बिना अर्थ बदल सकता है। Bencora इस जोखिम को ध्यान में रखकर सीरियलाइज़ेशन कोड की समीक्षा के लिए Windows एआई कोडिंग कार्यक्षेत्र है। परियोजना खोलें और जुड़े मॉडल से पैच सुझाने से पहले स्वीकृत मान, आउटपुट अनुबंध और उसका उपयोग करने वाला कोड जाँचने को कहें।
ठोस कार्य मेटाडेटा राइटर के मानक bencode आउटपुट की समीक्षा हो सकता है। सहायक से बाइट कुंजियों का क्रम, नेस्टेड कंटेनर और असमर्थित प्रकारों की अस्वीकृति जाँचने को कहें। ज्ञात आउटपुट परीक्षण मामले दें और अनुप्रयोग की आवश्यक सीमाएँ बताएँ। प्रस्ताव को राइटर और उसके कॉलर पर केंद्रित रखें; सही दिखती बाइटें मिलने से सीरियलाइज़र बदलाव को हानिरहित न मानें।
सामान्य दोनों-दिशा रूपांतरण परीक्षणों के साथ संसाधन सीमाएँ जाँचें। अधिकतम गहराई, बहुत बड़ा आउटपुट और चक्रीय कंटेनर के अपने परीक्षण चलाएँ तथा प्रतिनिधि डिक्शनरी की सटीक बाइटें मिलाएँ। अस्वीकृति के बाद सफाई के रास्ते देखें ताकि विफल प्रयास आगे का काम न बिगाड़े। संगतता के लिए सफल एन्कोडिंग उदाहरणों के साथ परियोजना के उपभोक्ता कोड से भी प्रमाण चाहिए।
Bencora OpenAI-संगत या Anthropic एंडपॉइंट कनेक्शन का समर्थन करता है। कॉन्फ़िगर की गई सेवा उपलब्ध कराए तो बिना सेंसर वाला एआई मॉडल चुन सकते हैं; टूल, पाबंदियाँ और संदर्भ उस सेटअप से तय होते हैं। बातचीत में बदलाव समझाएँ, जबकि परीक्षण मामले स्थापित करें कि आउटपुट अनुबंध सुरक्षित है या नहीं।
बाइनरी राइटर की सावधानी से समीक्षा
केवल डिकोड किए मानों के बजाय सटीक बाइटें क्यों मिलाएँ?
समान डिकोड किए मान क्रम या निरूपण के अंतर छिपा सकते हैं जो मानक प्रारूप में महत्वपूर्ण हैं। उन आवश्यकताओं के ज्ञात बाइट परीक्षण मामले रखें और परियोजना की मौजूदा दोनों-दिशा जाँच के साथ देखें।
डिक्शनरी के क्रम के लिए कौन सा संदर्भ जरूरी है?
वास्तविक कुंजी प्रकार और एन्कोड आउटपुट पर निर्भर उपभोक्ता दिखाएँ। सहायक से बाइट क्रम और भाषा-विशिष्ट पाठ क्रम अलग करने को कहें। सुविधाजनक स्ट्रिंग रूपांतरण कच्ची बाइटों पर परिभाषित अनुबंध बदल सकता है।
क्या आउटपुट आकार सीमा केवल एन्कोडिंग के बाद जाँचें?
अनुप्रयोग की आवश्यक संसाधन नीति की समीक्षा करें। अंतिम आकार जाँच काफी काम या आवंटन के बाद हो सकती है। पूछें कि प्रस्ताव सीमाएँ कहाँ लागू करता है और अनुमत आउटपुट से अधिक नेस्टेड मानों सहित अस्वीकृति रास्ते जाँचें।
चक्रीय कंटेनर का मामला क्यों शामिल करें?
यह जाँचता है कि राइटर ऐसे इनपुट को कैसे संभालता है जो सामान्य सीमित वृक्ष की तरह नहीं फैल सकता। स्पष्ट अस्वीकृति और सफाई सत्यापित करें। मॉडल के सफल एन्कोडिंग उदाहरण साबित नहीं करते कि गलत कंटेनर संरचनाओं का प्रबंधन सही ढंग से समाप्त होता है।
Bencora · अद्यतन 2026-10-25