# JSONL प्रॉम्प्ट आउटपुट तकनीकी विनिर्देश ## अवलोकन यह विनिर्देश ट्रस्टग्राफ में प्रॉम्प्ट प्रतिक्रियाओं के लिए JSONL (JSON लाइन्स) आउटपुट प्रारूप के कार्यान्वयन का वर्णन करता है। JSONL, LLM (लार्ज लैंग्वेज मॉडल) प्रतिक्रियाओं से संरचित डेटा के ट्रंकेशन-प्रतिरोधी निष्कर्षण को सक्षम बनाता है, जो JSON सरणियों के आउटपुट के साथ महत्वपूर्ण समस्याओं को संबोधित करता है जब LLM प्रतिक्रियाएं आउटपुट टोकन सीमाओं तक पहुँच जाती हैं। यह कार्यान्वयन निम्नलिखित उपयोग मामलों का समर्थन करता है: 1. **ट्रंकेशन-प्रतिरोधी निष्कर्षण**: LLM आउटपुट के बीच में काटे जाने पर भी, वैध आंशिक परिणाम निकालें। 2. **बड़े पैमाने पर निष्कर्षण**: टोकन सीमाओं के कारण पूर्ण विफलता के जोखिम के बिना, कई वस्तुओं का निष्कर्षण संभालें। 3. **मिश्रित-प्रकार निष्कर्षण**: एक ही प्रॉम्प्ट में कई इकाई प्रकारों (परिभाषाएं, संबंध, एंटिटीज, विशेषताएँ) का निष्कर्षण समर्थन करें। 4. **स्ट्रीमिंग-संगत आउटपुट**: निष्कर्षण परिणामों की भविष्य की स्ट्रीमिंग/इंक्रीमेंटल प्रोसेसिंग को सक्षम करें। ## लक्ष्य - **पिछला संगतता**: `response-type: "json"` और `response-type: "text"` के साथ मौजूदा प्रॉम्प्ट अपरिवर्तित रहेंगे। - **आंशिक परिणाम**: ट्रंकेशन के मामले में, आंशिक परिणाम प्राप्त करने की क्षमता। - **सरल एपीआई**: क्लाइंट-साइड कोड में कोई बदलाव की आवश्यकता नहीं है। ## सुरक्षा विचार - **इनपुट सत्यापन**: JSON पार्सिंग मानक `json.loads()` का उपयोग करता है जो इंजेक्शन हमलों के खिलाफ सुरक्षित है। - **स्कीमा सत्यापन**: स्कीमा प्रवर्तन के लिए `jsonschema.validate()` का उपयोग किया जाता है। - **कोई नया हमला सतह नहीं**: JSONL पार्सिंग, पंक्ति-दर-पंक्ति प्रसंस्करण के कारण JSON सरणी पार्सिंग की तुलना में सख्त रूप से सुरक्षित है। ## प्रदर्शन विचार - **मेमोरी**: पंक्ति-दर-पंक्ति पार्सिंग, पूर्ण JSON सरणियों को लोड करने की तुलना में कम पीक मेमोरी का उपयोग करता है। - **विलंबता**: पार्सिंग प्रदर्शन JSON सरणी पार्सिंग के समान है। - **सत्यापन**: स्कीमा सत्यापन प्रति-वस्तु चलता है, जो ओवरहेड जोड़ता है लेकिन सत्यापन विफलता पर आंशिक परिणामों को सक्षम करता है। ## परीक्षण रणनीति ### यूनिट टेस्ट - मान्य इनपुट के साथ JSONL पार्सिंग। - खाली पंक्तियों के साथ JSONL पार्सिंग। - Markdown कोड फ़ेंस के साथ JSONL पार्सिंग। - अंतिम पंक्ति के काटे जाने के साथ JSONL पार्सिंग। - अमान्य JSON पंक्तियों के साथ JSONL पार्सिंग। - `oneOf` विभेदक यूनियनों के साथ स्कीमा सत्यापन। - पिछड़ा संगतता: मौजूदा `"text"` और `"json"` प्रॉम्प्ट अपरिवर्तित। ### एकीकरण परीक्षण - JSONL प्रॉम्प्ट के साथ एंड-टू-एंड निष्कर्षण। - सिमुलेटेड ट्रंकेशन (कृत्रिम रूप से सीमित प्रतिक्रिया) के साथ निष्कर्षण। - प्रकार विभेदक के साथ मिश्रित-प्रकार निष्कर्षण। - सभी तीन प्रकारों के साथ ऑन्टोलॉजी निष्कर्षण। ### निष्कर्षण गुणवत्ता परीक्षण - JSONL बनाम JSON सरणी प्रारूप: निष्कर्षण परिणामों की तुलना। - ट्रंकेशन प्रतिरोधी: JSONL आंशिक परिणाम देता है जहां JSON विफल रहता है। ## प्रवासन योजना ### चरण 1: कार्यान्वयन 1. `PromptManager` में `parse_jsonl()` विधि लागू करें। 2. `invoke()` का विस्तार `response-type: "jsonl"` को संभालने के लिए। 3. यूनिट टेस्ट जोड़ें। ### चरण 2: प्रॉम्प्ट प्रवासन 1. `extract-definitions` प्रॉम्प्ट और कॉन्फ़िगरेशन अपडेट करें। 2. `extract-relationships` प्रॉम्प्ट और कॉन्फ़िगरेशन अपडेट करें। 3. `extract-topics` प्रॉम्प्ट और कॉन्फ़िगरेशन अपडेट करें। 4. `extract-rows` प्रॉम्प्ट और कॉन्फ़िगरेशन अपडेट करें। 5. `agent-kg-extract` प्रॉम्प्ट और कॉन्फ़िगरेशन अपडेट करें। 6. `extract-with-ontologies` प्रॉम्प्ट और कॉन्फ़िगरेशन अपडेट करें। ### चरण 3: डाउनस्ट्रीम अपडेट 1. निष्कर्षण परिणामों को संभालने के लिए निष्कर्षण परिणामों का उपभोग करने वाले किसी भी कोड को अपडेट करें। 2. `type` फ़ील्ड द्वारा वर्गीकृत मिश्रित-प्रकार निष्कर्षण के लिए कोड को अपडेट करें। 3. निष्कर्षण आउटपुट प्रारूप पर जोर देने वाले परीक्षणों को अपडेट करें। ## खुले प्रश्न इस समय कोई नहीं। ## संदर्भ - वर्तमान कार्यान्वयन: `trustgraph-flow/trustgraph/template/prompt_manager.py` - JSON लाइन्स विनिर्देश: https://jsonlines.org/ - JSON स्कीमा `oneOf`: https://json-schema.org/understanding-json-schema/reference/combining.html#oneof - संबंधित विनिर्देश: स्ट्रीमिंग LLM प्रतिक्रियाएं (`docs/tech-specs/streaming-llm-responses.md`)