# LLMApi: ASP में स्वचालित रूप से API सिमुलेशन के लिए स्थानीय LLM का प्रयोग करना

<!--category-- AI,  LLMApi, LLM, ASP.NET Core, API, Nuget, mockllmapi-->
<datetime class="hidden">2025-11-02T12:30</datetime>

# परिचय

मेरे स्थायी आवेशों में से एक नमूना डेटा है
मेरे वर्तमान प्रेम के साथ संयोजित 'AI सहायता की ' अनियमित विचारों को कोडिंग यह \ ' एक छोटा LLM सक्षम परीक्षण डेटा जेनेरेटर के सिफारिश करने के लिए एक मध्यवर्ती उपकरण के साथ एक nuget पैकेज है जो एक API का उपयोग करके अनुकरण API प्रतिक्रियाएं उत्पन्न कर सकते हैं

[![न्यूगेटGenericName](https://img.shields.io/nuget/v/mostlylucid.mockllmapi.svg)](https://www.nuget.org/packages/mostlylucid.mockllmapi)
[![न्यूगेटGenericName](https://img.shields.io/nuget/dt/mostlylucid.mockllmapi.svg)](https://www.nuget.org/packages/mostlylucid.mockllmapi)

आप मिल सकते हैं[ GitHub यहाँ ](https://github.com/scottgal/LLMApi)परियोजना के लिए, सभी सार्वजनिक डोमेन आदि

[TOC]

# संकल्पना

जैसे कि बहुत से कोडिंग विचारों के साथ यह LLMs का उपयोग कर आउटपुट सिमुलेशन के बारे में एक विचार से शुरू हुआ था[LucidForums](https://github.com/scottgal/lucidforums)एक hilariously dysfunctional self populating LLM आधारित मंच प्रयोग *अगर* मैं उन्हें किसी भी API को सिमुलित करने के लिए उपयोग कर सकता हूँ

# आवश्यकताएं

1. यह एक ASP में कार्यान्वित करना सरल होना चाहिए
2. आंकड़े काफी वास्तविक होना चाहिए
3. डाटा अनियमित होना चाहिए
4. यह JSON 'shapes' को स्वीकार कर सकता है जो एलएलएम को बताता है कि प्रतिक्रिया क्या होना चाहिए
5. यह स्थानीय ओपन सोर्स एलएलएम का उपयोग कर सकता है
6. यह न्यूगेट नियंत्रण का उपयोग करने के लिए एक निःशुल्क होना चाहिए

यह है जो मैं के साथ आया था।

भविष्य में जोड़ने के लिए संभवतः कैचिंग शामिल होगा यदि आप तेजी से perf चाहते हैं

यहाँ पैकेज के लिए readme है

# mostlylucid.mockllmapi

**क्या करता है** LLMs के प्रयोग से वास्तविक नक्शा API प्रतिक्रियाएं उत्पन्न करने हेतु एक उत्पादन-ready ASP.NET कोर मॉकिंग प्लेटफार्म

**आप इसे क्यों उपयोग करते हैं** सिर्फ कोड लाइनों के साथ किसी भी परियोजना में स्मार्ट मॉक अंतबिंदु जोड़ें

[![न्यूगेटGenericName](https://img.shields.io/nuget/v/mostlylucid.mockllmapi.svg)](https://www.nuget.org/packages/mostlylucid.mockllmapi)
[![न्यूगेटGenericName](https://img.shields.io/nuget/dt/mostlylucid.mockllmapi.svg)](https://www.nuget.org/packages/mostlylucid.mockllmapi)
[![जिटहब रिलीज़](https://img.shields.io/github/v/release/scottgal/LLMApi)](https://github.com/scottgal/LLMApi/releases)
[![लाइसेंस](https://img.shields.io/badge/license-Unlicense-blue.svg)](http://unlicense.org/)

**साझेदार पैकेज** [mostlylucid.mockllmapi.Testing](https://github.com/scottgal/LLMApi/blob/refs/heads/master/mostlylucid.mockllmapi.Testing/README.md) - प्रवाहित HttpClient एकीकरण के साथ परीक्षण यूटिलिटी

---


## इस README को कैसे पढ़ना है

यह README डिजाइन द्वारा व्यापक है

- **मैं इसे मिनटों में कोशिश करना चाहता हूँ** → में जाएँ [त्वरित प्रारंभ](#quick-start)
- **मैं जानना चाहता हूँ कि यह क्या कर सकता है** → देखें [विशेषताओं की समीक्षा](#features) और [वास्तुकला](#architecture)
- **मैं समझना चाहता हूँ कि यह कैसे काम करता है** → पढ़ें [विशेषता दस्तावेज़ीकरण](#feature-documentation) और [उन्नत सुविधाएँ](#advanced-features)

---


## क्या new 's

**नवीनतम:** स्वचालित आकार (शैप मेमोरी
**v2.5.0:** सुरक्षा सुधारः serialization निर्भरताओं को हटाकर ट्रिमिंग समर्थन
**v2.3.0:** पूर्ण सामग्री प्रकार समर्थन - फ़ॉर्म बॉड्स, फ़ाइल अपलोड्स
**v2.2.0:** API इंटीग्रेशन के लिए प्लगैबल औजार, pre-configured REST APIsM SK2 automatic context memory expiration
**v2.1.0:** दर सीमान, बैचिंग, nM SK2बहु निष्पादन रणनीतियों के साथ समापन

<details>
<summary><strong>Click for detailed v2.5.0 feature breakdown</strong></summary>

### संस्करण 2.5.0 विवरण

**फोकस**: सुरक्षा सुधार और AOT

**1. AOT/ट्रिमिंग समर्थन** - सभी प्रतिबिंब को हटाया गया

- निष्कासित `System.Text.Json` प्रतिबिम्ब उपयोग
- कोडबेस के माध्यम से मैनुअल JSON निर्माण
- .NET 8.0+ AOT और ट्रीमिंग के साथ पूरा अनुकूलता
- कोई रनटाइम प्रकार रिजोल्यूशन मुद्दे नहीं
- छोटा बाइनरी आकार और बेहतर स्टार्टअप निष्पादन

**2. बेहतर सुरक्षा** व्यापक सुरक्षा सुधार

- सभी प्रतिबिंबन मिटाया---आधारित सीरियलाइजेशन जो कि प्रकार सूचना को प्रकट कर सकता है
- संभावित प्रकार inference असुरक्षितताओं को दूर किया गया
- स्पष्ट प्रकार प्रतिबंधों के साथ सुरक्षित JSON प्रबंधन
- श्रृङ्खलाकरण के लिए कम हमला सतह
- डीसीरियलाइजेशन आक्रमणों के विरुद्ध बेहतर संरक्षण

**3. निष्पादन अनुकूलन** बेहतर रनटाइम निष्पादन

- प्रतिबिंब के बिना तेज JSON निर्माण
- कम स्मृति आवंटन
- बेहतर कैश स्थान
- ट्रिम्ड अनुप्रयोगों के लिए बेहतर स्टार्टअप समय
- कम स्मृति फुटप्रिंट

**संगतता** के लिए पूरा समर्थन

- प्रतिबिंब से बचने के लिए पूरी तरह से म्यानुअल JSON निर्माण
- सभी विशेषताओं का परीक्षण किया गया और .NET \10 पूर्वावलोकन निर्माण पर काम कर रहा है
- मौजूदा कार्यक्षमता में कोई विच्छेदन परिवर्तन नहीं

**5. परीक्षण सुधार** - बेहतर परीक्षण कवरेज

- AOT/trimming परिदृश्यों के लिए अतिरिक्त परीक्षण
- सुरक्षा-उन्मुख इकाई परीक्षण
- निष्पादन मानक परीक्षण
- सभी नए परीक्षणों के साथ 100% पास दर

[अधिक जानकारी के लिए TEST_SUMMARYM SK1md और IMPLEMENTATION_SUMMOARY .md देखें](https://github.com/scottgal/LLMApi/blob/refs/heads/master/TEST_SUMMARY.md)

</details>
<details>
<summary><strong>Click for detailed v2.3.0 feature breakdown</strong></summary>

### संस्करण 2.3.0 विवरण

**फोकस**सभी सामान्य HTTP अनुरोध प्रारूपों के लिए पूर्ण सामग्री प्रकार समर्थन

**1. फार्म बॉडी समर्थन** - का पूरा समर्थन `application/x-www-form-urlencoded` सामग्री क़िस्म. एकल और बहुविध मानोंM SK1 स्वचालित JSON रूपांतरण, नेट के लिए म्यानुअल निर्माण MSC3 10 संगतताMRK5 एचटीएमएल फ़ॉर्म तथा पारंपरिक वेब अनुप्रयोगों का परीक्षण करने के लिए पूर्ण

**2. फ़ाइल अपलोड समर्थन** - का पूरा समर्थन `multipart/form-data` फ़ाइल अपलोड सहित. मेमोरी

**3. मनपसंद पथ लंबाई** - गहरे मार्ग के माध्यम से नेस्टिंग के लिए समर्थन `{**path}` पकड़ना-सभी रूटिंग.सेगमेंट गहरे पथों और जटिल क्वेरी स्ट्रिंग के साथ परीक्षण किया गया।

**4. व्यापक परीक्षण सुइट** सभी विशेषताओं को कवर करने वाला नया).Form body parsing(12),JSON handling(25),HTTP पूर्ण कार्यप्रवाह के लिए एकीकृत परीक्षण.100%pass rate,zero regressions.

**संगतता** प्रतिबिंब से बचने के लिए पूरी तरह से म्यानुअल JSON निर्माण

[अधिक जानकारी के लिए TEST_SUMMARYM SK1md और IMPLEMENTATION_SUMMOARY .md देखें](https://github.com/scottgal/LLMApi/blob/refs/heads/master/TEST_SUMMARY.md)

</details>
<details>
<summary><strong>Click for detailed v2.2.0 feature breakdown</strong></summary>

### संस्करण 2.2.0 विवरण

**फोकस**API इंटीग्रेशन के लिए प्लगैबल उपकरण

**प्लगैबल उपकरण** वास्तविक कार्यप्रणाली और निर्णय वृक्ष बनाने के लिए बाहरी REST API या श्रृंखला नमूना अंतबिंदुओं को कॉल करें [पूरा डक →](https://github.com/scottgal/LLMApi/blob/refs/heads/master/docs/TOOLS_ACTIONS.md)

**2. Pre-konfigured REST APIs** - एक बार पूरा API कॉन्फ़िगरेशन परिभाषित करें। `appsettings.Full.json` के लिए पूर्ण उदाहरण 8

**Dynamic Context Memory Management** - संदर्भ अब निष्क्रियता के मिनटों के बाद समाप्त हो जाते हैं।

**Intelligent Shared Data Extraction** Automatically extracts ALL fields from responses at any nesting level

**5. उन्नत दस्तावेज़ीकरण** - New comprehensive guides for [उपकरण & कार्य](https://github.com/scottgal/LLMApi/blob/refs/heads/master/docs/TOOLS_ACTIONS.md), [दर सीमा](https://github.com/scottgal/LLMApi/blob/refs/heads/master/docs/RATE_LIMITING_BATCHING.md), और [API संदर्भ](https://github.com/scottgal/LLMApi/blob/refs/heads/master/docs/API-CONTEXTS.md).

[विस्तृत विवरण के लिए RELEASE_NOTES](https://github.com/scottgal/LLMApi/blob/refs/heads/master/RELEASE_NOTES.md)

</details>
---


## विषयसूची

### कोर संकल्पनाएँ

- [विशेषताओं की समीक्षा](#features) - यह प्रणाली क्या कर सकती है
- [त्वरित प्रारंभ](#quick-start) - मिनट में चलाएँ
- [वास्तुकला](#architecture) - यह सब एक साथ कैसे फिट करता है
- [गैर-आकांक्षाएं & सीमाएँ](#non-goals--boundaries) - क्या यह नहीं है

### प्रोटोकॉल & विशेषताएँ

- [रेस्ट API मोकिंग](#1-rest-api-mocking)
- [GraphQL API मोकिंग](#graphql-api-mocking)
- [एसईएस स्ट्रीमिंग](#3-server-sent-events-sse-streaming)
- [सिग्नल आर वास्तविक](#signalr-real-time-data-streaming)
- [ओपन एपीआई / स्वागर](#openapi--swagger-mock-generation)
- [जीआरपीसी सेवाएँ](#6-grpc-service-mocking-new-in-v170)

### उन्नत & वास्तुकला

- [कॉन्फ़िगरेशन विकल्प](#configuration-options)
- [विशेषता दस्तावेज़ीकरण](#feature-documentation) गहराई गाइड
- [उन्नत सुविधाएँ](#advanced-features)
- [डेमो अनुप्रयोग](#demo-applications)
- [परीक्षण](#testing)

---


## वास्तुकला की समीक्षा

**एक इंजन** सभी विशेषताएं एक ही पीढ़ी को साझा करती हैं।

```mermaid
graph LR
    Client[Client] -->|HTTP Request| API[LLMApi<br/>Minimal API]
    API -->|Chat Completion| Ollama[Ollama API<br/>localhost:11434]
    Ollama -->|Inference| Model[llm-model Model]
    Model -->|Response| Ollama
    Ollama -->|JSON/Stream| API
    API -->|JSON/SSE| Client

    API -.->|uses| Helper[AutoApiHelper]

    style API fill:#4CAF50
    style Helper fill:#2196F3
    style Model fill:#FF9800
```

**कुंजी घटक**

- **एकल एलएलएम क्लाइंट**: सभी प्रोटोकॉलों में प्रतिरोध नीतियों के साथ एक ही LLM सम्मिलन का प्रयोग किया जाता है
- **साझा संदर्भ स्मृति**: API संदर्भ REST के माध्यम से काम करते हैं
- **सामान्य विशेषताएँ**: दर सीमानM SK1 कैचिंग, त्रुटि सिमुलेशनMSC3 और टोकन प्रबंधन सभी के लिए लागू होते हैं
- **मॉड्यूलर डिजाइन**: किसी भी संयोजन का उपयोग करें

देखें [विस्तृत वास्तुकला चित्र](#architecture) अनुरोध प्रवाह और आकार नियंत्रण के लिए नीचे

---


## सुविधाएँ

यह पैकेज प्रदान करता है **छह स्वतंत्र विशेषताएँ** किसी भी संयोजन का उपयोग करें जिसे आप चाहते हैं [मॉड्यूलर उदाहरण](https://github.com/scottgal/LLMApi/blob/refs/heads/master/MODULAR_EXAMPLES.md) प्रोटोकॉल के लिए

### 1. रेस्ट API मोकिंग

- **सुपर सरल**: `AddLLMockApi()` + `MapLLMockApi("/api/mock")` = तत्काल नमूना API
- **आकार नियंत्रण**हेडर के माध्यम से सही JSON संरचना निर्दिष्ट करें
- **सभी HTTP विधि**समर्थित GET
- **विल्डकार्ड रूटिंग**: आपके चयनित अंतबिंदु के नीचे कोई भी पथ काम करता है
- **पूर्ण सामग्री प्रकार समर्थन** में (NEW
  - **JSON** (`application/json`मानक JSON अनुरोध निकाय
  - **रूप निकाय** (`application/x-www-form-urlencoded`एचटीएमएल फ़ॉर्म प्रस्तुतियां
  - **फ़ाइल अपलोड** (`multipart/form-data`मेटाडेटा निष्कर्ष के साथ फ़ाइल अपलोड करता है
  - **स्मृति**File content streamed and dumped (only metadata retained
- **मनपसंद पथ लंबाई**गहरे मार्ग नेस्टिंग पूरी तरह से समर्थित है`/api/mock/v1/api/products/electronics/computers/laptops/gaming/...`)

### 2. GraphQL API मोकिंग

- **नेटिव ग्राफक्यूएल समर्थन**: को पोस्ट करें `/api/mock/graphql` मानक ग्राफक्यूएल क्वेरी के साथ
- **Query-Driven Shapes**: GraphQL क्वेरी स्वयं प्रतिक्रिया संरचना परिभाषित करता है
- **चल & ऑपरेशन**: चरों के लिए पूरा समर्थन
- **उचित त्रुटि प्रबंधन**: returns GraphQL-formatted errors with `data` और `errors` क्षेत्र

### सर्वर

- **प्रगतिशील प्रवाह**प्रगतिशील JSON जनन के साथ : एसईएस समर्थन
- **Real-time अद्यतन**ग्राहकों को स्ट्रीम डेटा टोकन
- **स्टैंडलोन कार्य करता है**: कोई रेस्ट API सेटअप जरूरी नहीं
- **[पूर्ण एसईएस गाइड](https://github.com/scottgal/LLMApi/blob/refs/heads/master/docs/SSE_STREAMING_MODES.md)** | **[सतत प्रवाह](https://github.com/scottgal/LLMApi/blob/refs/heads/master/docs/CONTINUOUS_STREAMING.md)**

### 4. सिग्नल आर वास्तविक

- **वेबसॉकेट स्ट्रीमिंग**: सिग्नल आर के माध्यम से निरंतर वास्तविक
- **बहुविध संदर्भ**: एक साथ कई स्वतंत्र डेटा स्ट्रीम चलाएँ
- **जीवन चक्र प्रबंधन**: Start/प्रबंध API के साथ सक्रिय रूप से संदर्भ रोकें
- **स्टैंडलोन कार्य करता है**: कोई रेस्ट API सेटअप जरूरी नहीं
- **[सिग्नलआर डेमो गाइड](https://github.com/scottgal/LLMApi/blob/refs/heads/master/SIGNALR_DEMO_GUIDE.md)**

### ओपन एपीआई

- **स्वचालित अंतबिंदु निर्माण**किसी OpenAPI को संकेतित करें
- **सभी ऑपरेशनों को मोक किया गया**: स्पेक्ट से प्रत्येक पथ और विधि एक जीवंत अंतबिंदु बन जाता है
- **schema-Driven Data**: LLM आपके स्कीमाओं के अनुरूप वास्तविक डेटा उत्पन्न करता है
- **बहुविध SPECS**: एक साथ कई API विशेषताओं को लोड और माउन्ट करें
- **स्टैंडलोन कार्य करता है**: कोई रेस्ट API सेटअप जरूरी नहीं
- **[ओपन एपीआई विशेषता निर्देशिका](https://github.com/scottgal/LLMApi/blob/refs/heads/master/docs/OPENAPI-FEATURES.md)**

### gRPC सेवा मोकिंग v में (NEW

- **प्रोटो फ़ाइल अपलोड**जीआरपीसी सेवा मॉक बनाने के लिए : अपलोड करें
- **डबल प्रोटोकॉल समर्थन**परीक्षण के लिए HTTP पर : JSON
- **गतिशील क्रमबद्धता**: रनटाइम प्रोटोबॉफ एनकोडिंग कोड बनाने के बिना
- **LLM-Powered Data**: आपके प्रोटो संदेश परिभाषाओं के अनुरूप वास्तविक प्रतिक्रियाएँ
- **स्टैंडलोन कार्य करता है**: कोई रेस्ट API सेटअप जरूरी नहीं
- **[जीआरपीसी समर्थन गाइड](https://github.com/scottgal/LLMApi/blob/refs/heads/master/docs/GRPC_SUPPORT.md)**

### सामान्य विशेषताएँ

- **कॉन्फ़िगर योग्य**appsettings.json या इनलाइन विन्यास
- **उच्च रूप से चल डेटा**: प्रत्येक अनुरोध/update पूरी तरह से भिन्न वास्तविक डेटा उत्पन्न करता है
- **नूगेट पैकेज**: मौजूदा परियोजनाओं को जोड़ने में आसान
- **स्वचालित आकार (**पहले प्रतिक्रिया से JSON संरचना को स्वचालित रूप से याद करता है **[ऑटोशैप गाइड देखें](#autoshape-shape-memory)**
- **API संदर्भ**संबंधित अनुरोधों में सुसंगतता बनाए रखें **[पूर्ण मार्गदर्शक](https://github.com/scottgal/LLMApi/blob/refs/heads/master/docs/API-CONTEXTS.md)**
- **त्रुटि सिमुलेशन**: व्यापक त्रुटि परीक्षण के साथ-साथ |4 |xx | /5 | xx स्थिति कोड |, | अनुकूल संदेश | , | और बहुविध कॉन्फ़िगरेशन विधि
- **परीक्षण उपयोगिताएँ**: अनुषंगी पैकेज `mostlylucid.mockllmapi.Testing` परीक्षणों में सरल एचटीटीपी क्लाइंट एकीकरण के लिए - **[जाँच अनुभाग देखें](#testing)**

---


## गैर-आकांक्षाएं & सीमाएँ

**यह क्या है**

- वास्तविक नमूना डेटा उत्पादन के लिए एक विकास और प्रारूप निर्माण उपकरण
- फ्रन्टइन्ड विकास के लिए उपयुक्त
- शून्य-hardcoded फ़िक्सर और डाटाबेस के लिए रखरखाव विकल्प

**क्या यह NOT: है**

- **कोई उत्पादन डेटा स्रोत नहीं** Generated data is realistic but synthetic
- **संविदा परीक्षणों के लिए प्रतिस्थापन नहीं** - विकास के लिए इसका उपयोग करें
- **अवैध उत्पादन ट्रैफिक के लिए नहीं** - उपयोक्ता इनपुट सीधे LLM प्रवर्धन में जाता है
- **डाटाबेस या स्थायी भंडार नहीं** अनुरोधों के बीच कोई स्थिति नहीं रखी जाती
- **वास्तविक बैकएण्ड तर्क का प्रतिस्थापन नहीं है** - व्यावसायिक नियमों,, वैधीकरण,, और कार्यप्रणाली सरल बना रहे हैं

**इसे कब प्रयोग करना है**

- बैकएण्ड तैयार होने से पहले फ्रन्टएंड विकसित करना
- उत्पादन डेटा अभिगम के बिना वास्तविक डेमो बनाना
- विविध डेटा परिदृश्यों के साथ यूआई घटकों का परीक्षण
- प्रोटोटाइपिंग API डिजाइन और प्रतिक्रिया आकारों के साथ प्रयोग
- .NET में एलएलएम एकीकरण पैटर्न सीखना

**जब इसे उपयोग नहीं करना है**

- वास्तविक उपयोगकर्ताओं की सेवा करने वाले उत्पादन वातावरणों में
- सत्यापन परीक्षण के लिए/अधिकार तर्क (सुरक्षा योजनाओं को अनदेखा किया गया
- जब डेटा को कठोर व्यापार नियमों या वैधीकरण के अनुरूप होना चाहिए
- वास्तविक बैकएण्ड निष्पादन को लोड करने के लिए
- जब परीक्षण रनों के बीच प्रतिपादनीय डेटा की आवश्यकता होती है

---


## विशेषता दस्तावेज़ीकरण

वास्तुकला चित्रों के साथ विस्तृत निर्देशिकाओं के लिए

- **[डॉकर डेप्लोइमेंट गाइड](https://github.com/scottgal/LLMApi/blob/refs/heads/master/docs/DOCKER_GUIDE.md)** - पूर्ण डोकर सेटअप और विनियोजन
  
  - Docker Compose + Ollama के साथ त्वरित प्रारंभ
  - समाप्ति llm के साथ उदाहरण में - से -
  - कॉन्फ़िगरेशन विधियाँ (env vars
  - GPU समर्थन,multi-backend सेटअप
  - उत्पादन विचार और त्रुटिमोचन

- **[बैकएण्ड API संदर्भ](https://github.com/scottgal/LLMApi/blob/refs/heads/master/docs/BACKEND_API_REFERENCE.md)** - पूर्ण प्रबंधन अंतबिंदु दस्तावेज़
  
  - ओपन एपीआई प्रबंधन अंतबिंदु
  - API संदर्भ प्रबंधन
  - जीआरपीसी प्रोटो प्रबंधन
  - सिग्नल आर हब्स
  - पूरा अनुरोध/प्रतिक्रिया उदाहरण

- **[बहुल एलएलएम बैकएण्ड्स गाइड](https://github.com/scottgal/LLMApi/blob/refs/heads/master/docs/MULTIPLE_LLM_BACKENDS.md)** - बहुप्रदाता समर्थन
  
  - ओललामा, OpenAI, और एलएम स्टूडियो को एक साथ जोड़ें
  - हेडरों के माध्यम से बैकएण्ड चयन आग्रह करें
  - legacy कॉन्फ़िगरेशनों के साथ पूरा पीछे की संगतता
  - प्रदाता-विशेष उदाहरण और सर्वोत्तम प्रथाएं

- **[API संदर्भ निर्देशिका](https://github.com/scottgal/LLMApi/blob/refs/heads/master/docs/API-CONTEXTS.md)** -
  
  - समवर्ती बहु-- चरण कार्यप्रवाहों के लिए अनुरोधों में साझा स्मृति
  - E-commerce flowsM SK1stock tickers, game state examples
  - टोकन प्रबंधन और स्मार्ट टर्नकेशन
  - जलपरी वास्तुकला रेखाचित्र

- **[दर सीमा & बैचिंग गाइड](https://github.com/scottgal/LLMApi/blob/refs/heads/master/docs/RATE_LIMITING_BATCHING.md)** v में नया -
  
  - N-multiple response variants उत्पन्न करने के लिए पूर्णता समर्थन
  - Per-अंतबिन्दु सांख्यिकी चालित औसतों के साथ ट्रैकिंग
  - तीन बैचिंग रणनीतियां (Sequential,Parallel
  - निष्पादन परीक्षण के लिए विस्तृत समय निर्धारण शीर्षिका
  - बैकऑफ रणनीतियों और समय समाप्ति परिदृश्यों का परीक्षण करने के लिए पूर्ण

- **[प्लगैबल उपकरण & क्रिया निर्देशिका](https://github.com/scottgal/LLMApi/blob/refs/heads/master/docs/TOOLS_ACTIONS.md)** v में नया -
  
  - एक्सटेंबल उपकरण एकीकरण के लिए MCP-समpatible वास्तुकला
  - प्रमाणीकरण के साथ बाहरी APIs बुलाने के लिए HTTP उपकरण
  - निर्णय वृक्ष और कार्यप्रवाह बनाने के लिए मूक उपकरण
  - परिवेश चल समर्थन के साथ टेम्प्लेट प्रतिस्थापन
  - सुरक्षा सीमाओं और परिणाम कैचिंग के साथ उपकरण की खोज
  - चरण 1 (एक्सप्लिकेट), चरण \2 |( |LLM | - |ड्राइव | एमएसके6 | चरण |एमएसके7 | |मएसके8 |अभिन्न | मएसके9 | रोडमैप

- **[जीआरपीसी समर्थन गाइड](https://github.com/scottgal/LLMApi/blob/refs/heads/master/docs/GRPC_SUPPORT.md)** v में नया -
  
  - स्वचालित जीआरपीसी सेवा मोकिंग के लिए .प्रो फ़ाइल अपलोड करें
  - HTTP और बाइनरी प्रोटोबॉफ़ पर दोहरे समर्थन
  - LLM-powered वास्तविक प्रतिक्रिया उत्पादन
  - पूर्ण कार्यान्वयन विवरण और परीक्षण रणनीति

- **[ओपन एपीआई विशेषता निर्देशिका](https://github.com/scottgal/LLMApi/blob/refs/heads/master/docs/OPENAPI-FEATURES.md)**
  
  - यूआरएल से गतिशील स्पेक्ट लोडिंग
  - पथ पैरामीटरों के साथ स्वचालित अंतबिंदु उत्पादन
  - quest/response examples with the Petstore API
  - Real-time अद्यतन के लिए SignalR सम्मिलन

- **[मॉड्यूलर वास्तुकला उदाहरण](https://github.com/scottgal/LLMApi/blob/refs/heads/master/MODULAR_EXAMPLES.md)**
  
  - REST-only
  - स्मृति अनुकूलन रणनीति
  - प्रोटोकॉलों को मिलाएँ और मिलाएं

- **[सिग्नलआर डेमो गाइड](https://github.com/scottgal/LLMApi/blob/refs/heads/master/SIGNALR_DEMO_GUIDE.md)**
  
  - Real-time डेटा स्ट्रिंग सेटअप
  - संदर्भ जीवन चक्र प्रबंधन
  - क्लाइंट कनेक्शन उदाहरण

- **[रिलीज नोट्स](https://github.com/scottgal/LLMApi/blob/refs/heads/master/RELEASE_NOTES.md)**
  
  - पूर्ण संस्करण इतिहास
  - परिवर्तनों को तोड़ रहा है (v के बाद कोई भी नहीं
  - प्रवासी मार्गदर्शक

- **[परीक्षण सारांश](https://github.com/scottgal/LLMApi/blob/refs/heads/master/TEST_SUMMARY.md)** v में नया -
  
  - पूर्ण परीक्षण कवरेज दस्तावेज़
  - विस्तृत विच्छेदन के साथ 228 परीक्षण
  - निष्पादन मापन और वैधीकरण
  - सभी परीक्षण श्रेणियों का वर्णन

- **[कार्यान्वयन सारांश](https://github.com/scottgal/LLMApi/blob/refs/heads/master/IMPLEMENTATION_SUMMARY.md)** v में नया -
  
  - फॉर्म मुख्य भाग और फ़ाइल अपलोड कार्यान्वयन विवरण
  - के लिए म्यानुअल JSON निर्माण
  - मेमोरी-सुरक्षित फ़ाइल प्रबंधन संरचना
  - पूर्ण कोड परिवर्तन और तर्क

---


## त्वरित प्रारंभ

### संस्थापन

**मुख्य पैकेज**

```bash
dotnet add package mostlylucid.mockllmapi
```

**परीक्षण यूटिलिटी (वैकल्पिक**

```bash
dotnet add package mostlylucid.mockllmapi.Testing
```

> परीक्षणों में HttpClient कॉन्फ़िगरेशन के लिएfluent API प्रदान करता है [जाँच अनुभाग देखें](#testing) विवरण के लिए.

### डॉकर के साथ त्वरित प्रारंभ (सिफारिश की गई

आरंभ करने के लिए सबसे तेजी से तरीका - कोई नहीं .NET या Ollama संस्थापन की आवश्यकता है

```bash
# Clone the repository
git clone https://github.com/scottgal/LLMApi.git
cd LLMApi

# Start everything with Docker Compose (includes Ollama + llm-model)
docker compose up -d

# Wait for model download (first run only, ~4.7GB)
docker compose logs -f ollama

# Test the API
curl "http://localhost:5116/api/mock/users?shape={\"id\":0,\"name\":\"\",\"email\":\"\"}"
```

**यह है** एपीआई इस पर चल रहा है `http://localhost:5116` ऑललामा बैकएण्ड के साथ

देखें **[डॉकर गाइड पूर्ण करें](https://github.com/scottgal/LLMApi/blob/refs/heads/master/docs/DOCKER_GUIDE.md)** के लिए:

- कॉन्फ़िगरेशन विकल्प (env vars
- भिन्न मॉडलों का उपयोग करते हुए (gemma3:4bM SK2mistral
- जीपीयू समर्थन
- उत्पादन विनियोजन
- त्रुटिमोचन

### पूर्व आवश्यकताएं (स्थानीय विकास

यदि डोकर का उपयोग नहीं किया जाता है

1. संस्थापित करें [SDK](https://dotnet.microsoft.com/download/dotnet/8.0) या बाद में
2. संस्थापित करें [ओलामाCity name (optional, probably does not need a translation)](https://ollama.ai/) और एक मॉडल खींचना
   ```bash
   ollama pull ministral-3:3b
   ```

### एलएलएम मॉडल चुनना

यह पैकेज था **विकसित और परीक्षण के साथ `ministral-3:3b`** (3B पैरामीटरों के साथ सभी विशेषताओं के लिए बहुत तेजी से निष्पादन के साथ उत्कृष्ट परिणाम प्रदान करता है।

#### सिफारिशित मॉडल

मॉडल | | | आकार || | गति & #44; | | गुणवत्ता & #39; M SK4 | संदर्भ & #43; | | सबसे अच्छा |
|----------------------|------|-----------|---------|---------|----------|
| **मंत्री** डिफ़ॉल्ट **JSON के लिए KILLER** |
| **gemma3:4b** निम्नतर के लिए वैकल्पिक
| **llama3** | | 8 | B {\displaystyle \mathcal {MSK}{B | 2 | मध्यम | 3 | बहुत अच्छा | 4 | 5 | K | 6 | सामान्य उपयोग | 7 | उत्पादन
| **misttral-nemo** | **उच्च गुणवत्ता के मेजबान डेटासेट** |
| **misttral:7b** मध्यम | बहुत अच्छा
| **phi3** तेजी से | अच्छी है | | 4 | K || | त्वरित प्रोटोटॉपिंग
| **तैनीलमा** अधिक संसाधन

#### अनुशंसित: Qwen M SK1 कोडर (3B)

**क्वेन 2.5 कोडर जेसन जनन के लिए किललर है** ultra -fast, highly accurateM SK3 large context

```bash
ollama pull ministral-3:3b
```

```json
{
  "MockLlmApi": {
    "ModelName": "ministral-3:3b",
    "Temperature": 1.2,
    "MaxInputTokens": 8192
  }
}
```

**क्यों यह महान है**

- किसी भी हार्डवेयर पर असाधारण रूप से तेज
- सर्वोत्कृष्ट-in-वर्ग जेसन जनन यथार्थता
- संदर्भ विंडो
- कोड के लिए विशेष रूप से प्रशिक्षित
- CI/CD पाइपलाइनों और विकास के लिए पूर्ण
- सामान्य मॉडलों की तुलना में न्यूनतम भ्रम

#### उत्पा दन: मिस्टरलM SK1नेमो - सर्वोत्तम गुणवत्ता & भारी संदर्भ

**उत्पादन के लिए**

```bash
ollama pull mistral-nemo
```

```json
{
  "MockLlmApi": {
    "ModelName": "mistral-nemo",
    "Temperature": 1.2,
    "MaxInputTokens": 8000
  }
}
```

**क्यों यह महान है**

- उच्चतम गुणवत्ता का वास्तविक डेटा उत्पादन
- **128K संदर्भ विंडो** ( [ओललामा विन्यास](https://github.com/scottgal/LLMApi/blob/refs/heads/master/docs/MULTIPLE_LLM_BACKENDS.md#ollama-context-window-configuration))
- जटिल nested संरचनाओं और बड़े डेटासेट के लिए सर्वोत्तम
- उत्पन्न डेटा में अधिक सृजनात्मक विविधता
- **नोट**अधिक संसाधनों की आवश्यकता है

#### मॉडल-निर्दिष्ट कॉन्फ़िगरेशन

**मंत्री के लिए**

```json
{
  "ModelName": "ministral-3:3b",
  "Temperature": 1.2,
  "MaxContextWindow": 262144   // 256K context window
}
```

**के लिए gemma3:4b या llama3:**

```json
{
  "ModelName": "llm-model",     // or "mistral:7b"
  "Temperature": 1.2,
  "MaxContextWindow": 8192   // Set to model's context window size
}
```

**मिस्टरल के लिए-nemo (HighM SK2गुणवत्ता उत्पादन**

```json
{
  "ModelName": "mistral-nemo",
  "Temperature": 1.2,
  "MaxContextWindow": 32768, // Or 128000 if configured in Ollama
  "TimeoutSeconds": 120      // Longer timeout for large contexts
}
```

**नोट** मिस्टरल [ओललामा संदर्भ कॉन्फ़िगरेशन](https://github.com/scottgal/LLMApi/blob/refs/heads/master/docs/MULTIPLE_LLM_BACKENDS.md#ollama-context-window-configuration) के लिए 128K संदर्भ

**MaxContextWindow को कहाँ ढूंढना है**

```bash
# Check model info
ollama show {model-name}

# Look for "context_length" or "num_ctx" parameter
# Example output: "context_length": 8192
```

**छोटे मॉडल के लिए (phi3,tinyllamaM SK2**

```json
{
  "ModelName": "tinyllama",
  "Temperature": 0.7         // Lower temperature for stability
}
```

**तापमान का क्या महत्व है**

- **बड़े मॉडल (7B+)** वैध JSON को बनाए रखते हुए उच्च तापमान (1.0-1.5) को संभाल सकता है
- **छोटे मॉडल (<4B)** कम तापमान की आवश्यकता है (0.6-0.8) बचने के लिए
  - अवैध JSON वाक्य संरचना (missing quotes
  - Ellipsis के साथ संकुचित प्रतिक्रियाएं ("...")
  - भ्रमित क्षेत्र नाम या संरचना
- कम तापमान = अधिक अनुमानित आउटपुट
- उच्च तापमान = अधिक रचनात्मक आउटपुट

#### संस्थापन

```bash
# RECOMMENDED for development (fastest, most accurate JSON)
ollama pull ministral-3:3b

# Alternative options
ollama pull gemma3:4b       # Good for low-end machines
ollama pull llama3          # General purpose, good balance
ollama pull mistral-nemo    # Highest quality (requires more RAM)

# Alternative options
ollama pull mistral:7b
ollama pull phi3
```

**महत्वपूर्ण सीमाएं**

- **छोटे मॉडल** (`tinyllama`, `phi3`कार्य करता है लेकिन हो सकता है
  - सरल / अन्य विविध आंकड़ा उत्पन्न करें
  - जटिल GraphQL क्वेरी के साथ लड़ें
  - अधिक पुनः प्रयासों की आवश्यकता है
  - सरल प्रश्नों और छोटे प्रतिक्रिया आकार के साथ सबसे अच्छा काम करें
- **सभी मॉडल** के साथ संघर्ष कर सकता है
  - **बहुत जटिल/deeply nested GraphQL queries** स्तर गहरा
  - **प्रति वस्तु कई क्षेत्र** क्षेत्र
  - **बड़ा एरे निवेदन** विश्वसनीयता के लिए - मदों तक सीमा
- **अगर त्रुटियों को देख रहा है** संकुचित JSON के बारे में ("...") या टिप्पणियां ("//"):
  - 0.8 या उससे नीचे के लिए कम तापमान
  - अपने GraphQL क्वेरी को सरल बनाएँ ( कम क्षेत्रों, कम नेस्टिंग
  - बढ़ाएँ `MaxRetryAttempts` 5 या उससे अधिक पर

### बुनियादी उपयोग

**कार्यक्रम**

```csharp
using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Add LLMock API services (all protocols: REST, GraphQL, SSE)
builder.Services.AddLLMockApi(builder.Configuration);

var app = builder.Build();

// Map mock endpoints at /api/mock (includes REST, GraphQL, SSE)
app.MapLLMockApi("/api/mock");

app.Run();
```

**अनुप्रयोग-सेटिंग**

```json
{
  "mostlylucid.mockllmapi": {
    "BaseUrl": "http://localhost:11434/v1/",
    "ModelName": "ministral-3:3b",
    "Temperature": 1.2
  }
}
```

अब सभी अनुरोध करने के लिए `/api/mock/**` सूक्ष्म नमूना डेटा लौटाएँ

## स्वचालित आकार (

**एक ही अंतबिंदु पर अनुरोधों के बीच समवर्ती JSON संरचनाओं को स्वचालित रूप से बनाए रखें**

### यह क्या करता है

स्वतः आकार एक अंतबिंदु के लिए पहले प्रतिक्रिया से JSON संरचना को याद करता है और स्वचालित रूप से उस ही अंतबिन्दु पर सभी बाद के अनुरोधों में लागू करता है

- बहुविध कॉलों के बीच एकरूप प्रतिक्रिया स्कीमा
- विकास के दौरान कोई स्कीमा ड्राइप नहीं
- परीक्षण के लिए पूर्वानुमानित API व्यवहार

### त्वरित उदाहरण

```http
# First request - generates free-form response
GET /api/mock/users/123
Response: {"id": 123, "name": "Alice", "email": "alice@example.com", "role": "admin"}

# Second request - automatically uses same structure
GET /api/mock/users/456
Response: {"id": 456, "name": "Bob", "email": "bob@example.com", "role": "user"}

# All subsequent requests use the same schema!
GET /api/mock/users/789
Response: {"id": 789, "name": "Carol", "email": "carol@example.com", "role": "manager"}
```

### कॉन्फ़िगरेशन

**डिफ़ॉल्ट द्वारा सक्षम** में `appsettings.json`:

```json
{
  "MockLlmApi": {
    "EnableAutoShape": true,              // Default: true
    "ShapeExpirationMinutes": 15          // Default: 15
  }
}
```

### Per-request Control

**विशिष्ट अनुरोध के लिए अक्षम करें**

```http
GET /api/mock/users/special?autoshape=false
```

**एक खराब आकार को नया करें**

```http
# If first response was incomplete, renew it:
GET /api/mock/users/1?renewshape=true
# New response replaces old shape template
```

### पथ सामान्यीकरण

इन सभी अनुरोधों का समान आकार (normalized के लिए साझा है `/api/mock/users/{id}`):

```http
GET /api/mock/users/123                  # Numeric ID
GET /api/mock/users/abc-456              # Alphanumeric ID
GET /api/mock/users/550e8400-e29b...     # UUID
```

### मुख्य विशेषताएँ

- **डिफ़ॉल्ट से सक्षम** - बॉक्स से बाहर काम करता है
- **🔄 आकार नवीकरण** - के साथ खराब आकार निश्चित करें `?renewshape=true`
- **⏱️ ऑटो** अक्रियता के बाद आकार समाप्त हो जाते हैं
- **🎯 स्मार्ट सामान्यीकरण** - समान अंतबिंदु शेयर आकारों के लिए भिन्न आईडी
- **स्पष्ट अधिरोहण** - क्वेरी के माध्यम से स्पष्ट आकार प्रदान करना
- **✨ हर जगह काम करता है** - RESTM SK1 Streaming, और GraphQL अंतबिंदु

### कब उपयोग करना है

**के लिए आदर्श**

- फ्रंटएण्ड विकास को सुसंगत नमूना डेटा संरचनाओं की आवश्यकता होती है
- पूर्वानुमानित स्कीमाओं की आवश्यकता करने वाले एकीकृत परीक्षण
- डेमोज जहाँ डेटा संरचना को अनुरोधों के बीच परिवर्तन नहीं करना चाहिए
- विकासशील लेकिन सुसंगत आकारों के साथ API प्रारूप निर्माण

**जब आवश्यक नहीं है**

- स्पष्ट रूपों का उपयोग करते हुए ( वे किसी भी तरह प्राथमिकता लेती हैं
- हर प्रतिक्रिया में अधिकतम विविधता चाहते हैं
- स्कीमा विकास सिनारियो का परीक्षण

### त्रुटिमोचन

**आकार लागू नहीं किया जा रहा है**

1. जाँचें `EnableAutoShape: true` कॉन्फ़िगरेशन में
2. कोई स्पष्ट आकार उपलब्ध नहीं सत्यापित करें
3. समाप्ति समय जाँचें (पूर्वनिर्धारित

**आकार बदलने की जरूरत है**

```http
GET /api/mock/users/1?renewshape=true
```

**सभी आकारों को प्रोग्रामात्मक रूप से साफ करें**

```csharp
// Inject AutoShapeManager
autoShapeManager.ClearAllShapes();
```

पूर्ण दस्तावेज़ के लिए [CLAUDE.md स्वचालित आकार धारा](https://github.com/scottgal/LLMApi/blob/refs/heads/master/CLAUDE.md#autoshape-feature-shape-memory).

**परीक्षण कवरेज** सभी स्वचालित आकार कार्यात्मकता को शामिल करने के लिए परीक्षण 39

## कॉन्फ़िगरेशन विकल्प

> **पूर्ण कॉन्फ़िगरेशन संदर्भ** देखें [कॉन्फ़िगरेशन संदर्भ निर्देशिका](https://github.com/scottgal/LLMApi/blob/refs/heads/master/docs/CONFIGURATION_REFERENCE.md) सभी विकल्पों के लिए
> **पूर्ण उदाहरण** देखें [appsettings.Full.json](https://github.com/scottgal/LLMApi/blob/refs/heads/master/LLMApi/appsettings.Full.json) - प्रदर्शन करता है **हर** कॉन्फ़िगरेशन विकल्प

### एप्पसेटिंग के माध्यम से.json | ( | सिफारिशित |)

```json
{
  "mostlylucid.mockllmapi": {
    "BaseUrl": "http://localhost:11434/v1/",
    "ModelName": "ministral-3:3b",
    "Temperature": 1.2,
    "TimeoutSeconds": 30,
    "EnableVerboseLogging": false,
    "CustomPromptTemplate": null,

    // Token Management (NEW in v1.5.0)
    "MaxInputTokens": 8192,  // Ministral has 256K context

    // Resilience Policies (enabled by default)
    "EnableRetryPolicy": true,
    "MaxRetryAttempts": 3,
    "RetryBaseDelaySeconds": 1.0,
    "EnableCircuitBreaker": true,
    "CircuitBreakerFailureThreshold": 5,
    "CircuitBreakerDurationSeconds": 30
  }
}
```

**मॉडल-निर्दिष्ट टोकन सीमा**: देखें `LLMApi/appsettings.json` विभिन्न मॉडलों के लिए कॉन्फ़िगरेशन उदाहरण के लिए (Llama `MaxInputTokens` तदनुसार.

**API संदर्भ**: अनुरोधों के बीच सुसंगतता बनाए रखने के लिए संदर्भों का उपयोग करने के बारे में विस्तृत जानकारी के लिए **[API संदर्भ निर्देशिका](https://github.com/scottgal/LLMApi/blob/refs/heads/master/docs/API-CONTEXTS.md)**.

### प्रतिरोध नीतियां

**में नया v1.2.0:** निर्मित-पोली प्रतिरोध नीति आपके अनुप्रयोग को LLM सेवा विफलता से बचाती है

पैकेज में डिफ़ॉल्ट द्वारा सक्षम दो रीसलींस पैटर्न शामिल हैं

**एक्सपोनेन्शल बैकऑफ़ पुनः प्रयास**

- एक्सपोनेन्शल देरी के साथ स्वचालित रूप से असफल LLM अनुरोधों को फिर से चलाता है (1s\,
- गड़बड़ाने की समस्याओं को रोकने के लिए हिलना शामिल है
- कनेक्शन त्रुटियों को संभालता है
- डिफ़ॉल्ट: M SK1 दोबारा आधार देरी के साथ प्रयास करता है

**सर्किट ब्रेकर**

- क्रमिक असफलताओं के बाद खोलता है ताकि कैस्केडिंग असफलताएं रोकी जा सके
- परीक्षण अनुरोधों को अनुमति देने से पहले एक कॉन्फ़िगरित अवधि के लिए खुला रहता है
- तीन अवस्थाएं-: बंद (सामान्य ), खुला | (अस्वीकार |), | आधे |
- डिफ़ॉल्ट: 5 क्रमिक असफलताओं के बाद खोला जाता है

**कॉन्फ़िगरेशन**

```json
{
  "mostlylucid.mockllmapi": {
    // Enable/disable retry policy
    "EnableRetryPolicy": true,
    "MaxRetryAttempts": 3,
    "RetryBaseDelaySeconds": 1.0,  // Actual delays: 1s, 2s, 4s (exponential)

    // Enable/disable circuit breaker
    "EnableCircuitBreaker": true,
    "CircuitBreakerFailureThreshold": 5,  // Open after 5 consecutive failures
    "CircuitBreakerDurationSeconds": 30   // Stay open for 30 seconds
  }
}
```

**लॉगिंग**

प्रतिरोध नीति सभी पुनः प्रयास प्रयासों और परिपथ ब्रेकर स्थिति परिवर्तनों को लॉग करें

```
[Warning] LLM request failed (attempt 2/4). Retrying in 2000ms. Error: Connection refused
[Error] Circuit breaker OPENED after 5 consecutive failures. All LLM requests will be rejected for 30 seconds
[Information] Circuit breaker CLOSED. LLM requests will be attempted normally
```

**जब समायोजन करना है**

- **धीमी LLM** बढ़ाएँ `MaxRetryAttempts` या `RetryBaseDelaySeconds`
- **आक्रामक वसूली** घटाएँ `CircuitBreakerDurationSeconds`
- **कई अस्थायी त्रुटि** बढ़ाएँ `CircuitBreakerFailureThreshold`
- **स्थानीय परीक्षण के लिए अक्षम करें** दोनों सेट करें `EnableRetryPolicy` और `EnableCircuitBreaker` के लिए `false`

### कोड के माध्यम से

```csharp
builder.Services.Addmostlylucid.mockllmapi(options =>
{
    options.BaseUrl = "http://localhost:11434/v1/";
    options.ModelName = "mixtral";
    options.Temperature = 1.5;
    options.TimeoutSeconds = 60;
});
```

### मनपसंद अंतबिंदु पैटर्न

```csharp
// Default: /api/mock/** and /api/mock/stream/**
app.Mapmostlylucid.mockllmapi("/api/mock");

// Custom pattern
app.Mapmostlylucid.mockllmapi("/demo");
// Creates: /demo/** and /demo/stream/**

// Without streaming
app.Mapmostlylucid.mockllmapi("/api/mock", includeStreaming: false);
```

## उपयोग उदाहरण

### आधारभूत निवेदन

```bash
curl http://localhost:5000/api/mock/users?limit=5
```

LLM द्वारा उत्पन्न वास्तविक उपयोगकर्ता डेटा लौटाता है

### फॉर्म बॉडी अनुरोध v में (NEW

**एचटीएमएल फ़ॉर्म प्रस्तुतीकरण**

```bash
curl -X POST http://localhost:5000/api/mock/users/register \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "username=john_doe&email=john@example.com&age=30"
```

फ़ॉर्म डाटा स्वचालित रूप से JSON में परिवर्तित किया जाता है और वास्तविक प्रतिक्रिया उत्पादन के लिए एलएलएम को भेजा जाता है

**बहुविध मानों के साथ फार्म**

```bash
curl -X POST http://localhost:5000/api/mock/posts \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "title=My Post&tags=tech&tags=programming&tags=llm"
```

एक ही क्षेत्र नाम के लिए कई मान स्वचालित रूप से एरेज़ में परिवर्तित किए जाते हैं

### फ़ाइल अपलोड अनुरोध v में (NEW

**एकल फ़ाइल अपलोड**

```bash
curl -X POST http://localhost:5000/api/mock/photos/upload \
  -F "title=My Photo" \
  -F "description=Beautiful sunset" \
  -F "image=@photo.jpg"
```

**फ़ॉर्म डाटा के साथ कई फ़ाइलें:**

```bash
curl -X POST http://localhost:5000/api/mock/documents/bulk \
  -F "title=Multiple uploads" \
  -F "file1=@document1.pdf" \
  -F "file2=@document2.pdf"
```

**फ़ाइल अपलोड कैसे काम करता है**

- फ़ाइल सामग्री है **एक 8KB बफर के माध्यम से प्रवाहित** और **वंचित** स्मृति में नहीं भंडारित
- सिर्फ मेटाडेटा बनाए रखा जाता है: फ़ाइलनाम, सामग्री प्रकार
- एलएलएम फ़ाइल मेटाडेटा प्राप्त करता है और उपयुक्त प्रतिक्रिया उत्पन्न करता है
- बड़े फ़ाइलों के लिए सुरक्षित स्मृति

**उदाहरण प्रतिक्रिया**

```json
{
  "message": "Files uploaded successfully",
  "uploads": [
    {
      "fieldName": "image",
      "fileName": "photo.jpg",
      "contentType": "image/jpeg",
      "size": 524288,
      "processed": true
    }
  ]
}
```

### गहरे मार्ग नेस्टिंग v में (NEW

**जटिल Nested पथ**

```bash
curl "http://localhost:5000/api/mock/v1/api/products/electronics/computers/laptops/gaming/high-end/2024/details?brand=Dell&model=XPS15"
```

पथ गहराई पर कोई व्यावहारिक सीमा नहीं

### API संदर्भ के साथ v में (NEW

**बहुविध संबंधित अनुरोधों में संगतता बनाए रखने के लिए संदर्भ का उपयोग करें:**

```bash
# Step 1: Create a user
curl "http://localhost:5000/api/mock/users?context=checkout-flow"

# Step 2: Create order for that user (LLM references user from context)
curl "http://localhost:5000/api/mock/orders?context=checkout-flow"

# Step 3: Add payment (LLM references both user and order)
curl "http://localhost:5000/api/mock/payments?context=checkout-flow"
```

एक ही संदर्भ में प्रत्येक अनुरोध पिछले अनुरोधों को देखता है। **[API संदर्भ निर्देशिका](https://github.com/scottgal/LLMApi/blob/refs/heads/master/docs/API-CONTEXTS.md)** पूर्ण उदाहरणों के लिए

### आकार नियंत्रण के साथ

```bash
curl -X POST http://localhost:5000/api/mock/orders \
  -H "X-Response-Shape: {\"orderId\":\"string\",\"total\":0.0,\"items\":[{\"sku\":\"string\",\"qty\":0}]}" \
  -H "Content-Type: application/json" \
  -d '{"customerId":"cus_123"}'
```

LLM आपके सटीक आकार विनिर्दिष्टीकरण के अनुरूप डेटा उत्पन्न करता है

### स्ट्रीमिंग (SSE | - | सर्वर

**एसईएस स्ट्रीमिंग रेस्ट API का हिस्सा है।**

```csharp
// SSE streaming is automatically available at /api/mock/stream/**
app.MapLLMockApi("/api/mock", includeStreaming: true);
```

**उपयोग:**

```bash
curl -N http://localhost:5000/api/mock/stream/products?category=electronics \
  -H "Accept: text/event-stream"
```

सर्वर को लौटाता है-JSON के रूप में संदेश भेजा गया टोकन उत्पन्न किया जाता है

```
data: {"chunk":"{","done":false}
data: {"chunk":"\"id\"","done":false}
data: {"chunk":":","done":false}
data: {"chunk":"123","done":false}
...
data: {"content":"{\"id\":123,\"name\":\"Product\"}","done":true,"schema":"{...}"}
```

**जावास्क्रिप्ट उदाहरण:**

```javascript
const eventSource = new EventSource('/api/mock/stream/users?limit=5');

eventSource.onmessage = (event) => {
    const data = JSON.parse(event.data);

    if (data.done) {
        console.log('Complete:', data.content);
        eventSource.close();
    } else {
        console.log('Chunk:', data.chunk);
    }
};
```

**आकार नियंत्रण के साथ**

```bash
curl -N "http://localhost:5000/api/mock/stream/orders?shape=%7B%22id%22%3A0%2C%22items%22%3A%5B%5D%7D"
```

स्ट्रीमिंग अंतबिंदु नियमित अंतबिन्दुओं के समान सभी विशेषताएँ समर्थित करता है

- आकार नियंत्रण (query param
- JSON योजना समर्थन
- मनपसंद प्रवर्धन
- सभी एचटीटीपी विधियाँ (GET, POSTM SK2 PUT , DELETE

## GraphQL API मोकिंग

**में नया v1.2.0:** क्वेरी के साथ Native GraphQL समर्थन

LLMock API में built-in है-GraphQL अंतबिंदु समर्थन .जैसे कि REST अंतबिन्दुओं के विपरीत जहां आप आकार अलग से निर्दिष्ट करते हैं

### GraphQL के साथ त्वरित प्रारंभ करें

GraphQL अंतबिंदु स्वचालित रूप से उपलब्ध है जब आप LLMock API map

```csharp
app.MapLLMockApi("/api/mock", includeGraphQL: true); // GraphQL enabled by default
```

यह एक GraphQL अंतबिन्दु पर बनाता है `/api/mock/graphql`.

### बुनियादी उपयोग

**साधारण प्रश्न:**

```bash
curl -X POST http://localhost:5000/api/mock/graphql \
  -H "Content-Type: application/json" \
  -d '{"query": "{ users { id name email role } }"}'
```

**प्रतिक्रिया**

```json
{
  "data": {
    "users": [
      { "id": 1, "name": "Alice Johnson", "email": "alice@example.com", "role": "admin" },
      { "id": 2, "name": "Bob Smith", "email": "bob@example.com", "role": "user" }
    ]
  }
}
```

### चर के साथ

```bash
curl -X POST http://localhost:5000/api/mock/graphql \
  -H "Content-Type: application/json" \
  -d '{
    "query": "query GetUser($userId: ID!) { user(id: $userId) { id name email } }",
    "variables": { "userId": "12345" },
    "operationName": "GetUser"
  }'
```

### Nested क्वेरी

GraphQL's शक्ति नेस्टेड डेटा के साथ चमकता है

```graphql
{
  company {
    name
    employees {
      id
      firstName
      lastName
      department {
        name
        location
      }
      projects {
        id
        title
        status
        milestones {
          title
          dueDate
          completed
        }
      }
    }
  }
}
```

LLM आपके सही क्वेरी संरचना के अनुरूप वास्तविक डेटा उत्पन्न करता है - सभी nested रिश्तों सहित

### जावास्क्रिप्ट क्लाइंट उदाहरण

```javascript
async function fetchGraphQL(query, variables = {}) {
    const response = await fetch('/api/mock/graphql', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ query, variables })
    });

    const result = await response.json();

    if (result.errors) {
        console.error('GraphQL errors:', result.errors);
    }

    return result.data;
}

// Usage
const data = await fetchGraphQL(`
    query GetProducts($category: String) {
        products(category: $category) {
            id
            name
            price
            inStock
            reviews {
                rating
                comment
            }
        }
    }
`, { category: 'electronics' });
```

### त्रुटि प्रबंधन

ग्राफक्यूएल त्रुटि मानक प्रारूप में लौटाए जाते हैं:

```json
{
  "data": null,
  "errors": [
    {
      "message": "Invalid GraphQL request format",
      "extensions": {
        "code": "INTERNAL_SERVER_ERROR"
      }
    }
  ]
}
```

### यह कैसे काम करता है

1. **à¤ ̧à¥à¤°à¥à¤**: ग्राफQL क्वेरी निकालें, चरोंM SK2 और ऑपरेशन नाम
2. **बिल्ड प्रोम्प्ट**: अनुरूप डाटा उत्पन्न करने के लिए निर्देशों सहित LLM को क्वेरी संरचना भेजें
3. **डाटा उत्पन्न करें**: LLM वास्तविक डेटा बनाता है जो क्वेरी क्षेत्रों के ठीक से मिलते हैं
4. **रॉप प्रतिक्रिया**: GraphQL प्रारूप में डेटा लौटाता है `{ "data": {...} }`

### प्रमुख लाभ

- **कोई आकार विनिर्दिष्टीकरण आवश्यक नहीं**: GraphQL क्वेरी संरचना परिभाषित करता है
- **प्रकार सुरक्षा**: नाम द्वारा स्पष्ट रूप से अनुरोध क्षेत्र पूछता है
- **नेटेड रिश्ताएँ**जटिल डेटा संरचनाओं के लिए प्राकृतिक समर्थन
- **मानक प्रारूप**: किसी भी GraphQL क्लाइंट लाइब्रेरी के साथ काम करता है
- **वास्तविक आंकड़ा**: LLM प्रत्येक क्षेत्र के लिए प्रासंगिक रूप से उपयुक्त डेटा उत्पन्न करता है

### GraphQL का परीक्षण कर रहा है

सम्मिलित उपयोग करें `LLMApi.http` फ़ाइल जिसमें 5 तैयार है

- साधारण उपयोक्ता क्वेरी
- चर के साथ क्वेरी
- à¤ ̧à¥à¤°à¥à¤
- वाणिज्य उत्पाद विवरणिका
- जटिल संगठनात्मक डेटा

देखें [LLMApi.http में ग्राफQL उदाहरण](https://github.com/scottgal/LLMApi/blob/refs/heads/master/LLMApi/LLMApi.http#L229-L294) पूर्ण कार्य उदाहरणों के लिए

### GraphQL कॉन्फ़िगरेशनName

#### टोकन सीमाएं और मॉडल चयन

GraphQL प्रतिक्रियाएं गहराई से nested क्वेरी के साथ बड़ी हो सकती हैं. JSON त्रुटियों को रोकने के लिए `GraphQLMaxTokens` विकल्प

```json
{
  "MockLlmApi": {
    "GraphQLMaxTokens": 300  // Recommended: 200-300 for reliability
  }
}
```

**टोकन सीमा दिशानिर्देश**

मॉडल | सिफारिशित अधिकतम टोकन
|-------|----------------------|-------|
| **मॉडल** गति और जटिलता का सर्वोत्तम संतुलन
| **misttral:7b** |
| **phi3** क्वेरी को सरल रखें
| **तैनीलमा** सिर्फ सतही क्वेरी का उपयोग करें

**क्यों कम बेहतर है**

- प्रोम्प्ट प्राथमिकता देता है **लंबाई पर सहीपन**
- कम सीमाएँ LLM को सरल बनाने के लिए बाध्य करती हैं , पूर्ण JSON
- उच्चतम सीमा जोखिम काटें प्रतिक्रियाएँ (अवैध JSON)
- यदि आप LLM से "अवैध JSON देखें **GraphQLMaxTokens को कम करें**

**जटिल Nested क्वेरी के लिए**

1. बड़े मॉडलों का उपयोग करें
2. GraphQLMaxTokens को 500-1000 में बढ़ाएँ
3. à¤aà¥à¤°à¥à¤
4. कटाई चेतावनी के लिए लॉग मॉनिटर करें

**जटिल प्रश्नों के लिए उदाहरण कॉन्फ़िगरेशन**

```json
{
  "MockLlmApi": {
    "ModelName": "llm-model",           // Larger model
    "GraphQLMaxTokens": 800,          // Higher limit for nested data
    "Temperature": 1.2
  }
}
```

## SignalR Real-टाइम डेटा स्ट्रीमिंग

LLMock API में सतत के लिए वैकल्पिक SignalR समर्थन शामिल है।

- Dashboard prototypes requiring live updates
- Real-time UI अवयवों का परीक्षण
- निरंतर बदलती आंकड़ों के साथ डेमो
- WebSocket/SignalR एकीकृत परीक्षण

### सिग्नलआर के साथ त्वरित प्रारंभ

**सिग्नलआर स्वतंत्र रूप से काम करता है - आप नहीं कर रहे हैं\'सिग्नल आर स्ट्रीमिंग का उपयोग करने के लिए रेस्ट API अंतबिंदुओं की जरूरत नहीं**

**1. न्यूनतम सिग्नलR**

```csharp
using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Add SignalR services (no REST API needed!)
builder.Services.AddLLMockSignalR(builder.Configuration);

var app = builder.Build();

app.UseRouting();

// Map SignalR hub and management endpoints
app.MapLLMockSignalR("/hub/mock", "/api/mock");

app.Run();
```

**वैकल्पिक: REST API को भी जोड़ें**

यदि आप भी REST API अंतबिंदु चाहते हैं

```csharp
// Add core LLMock API services (optional)
builder.Services.AddLLMockApi(builder.Configuration);

// Map REST API endpoints (optional)
app.MapLLMockApi("/api/mock", includeStreaming: true);
```

**अनुप्रयोग सेटिंग में कॉन्फ़िगर करें**

```json
{
  "MockLlmApi": {
    "BaseUrl": "http://localhost:11434/v1/",
    "ModelName": "ministral-3:3b",
    "Temperature": 1.2,

    "SignalRPushIntervalMs": 5000,
    "HubContexts": [
      {
        "Name": "weather",
        "Description": "Weather data with temperature, condition, humidity, and wind speed"
      },
      {
        "Name": "stocks",
        "Description": "Stock market data with symbol, current price, change percentage, and trading volume"
      }
    ]
  }
}
```

**क्लाइंट से कनेक्शन करें**

```javascript
// Using @microsoft/signalr
const connection = new signalR.HubConnectionBuilder()
    .withUrl("/hub/mock")
    .withAutomaticReconnect()
    .build();

// Subscribe to a context
connection.on("DataUpdate", (message) => {
    console.log(`${message.context}:`, message.data);
    // message.data contains generated JSON matching the shape
    // message.timestamp is unix timestamp in ms
});

await connection.start();
await connection.invoke("SubscribeToContext", "weather");
```

### हब संदर्भ कॉन्फ़िगरेशन

प्रत्येक हब संदर्भ एक पूरा API अनुरोध अनुकरण करता है और डेटा निरंतर उत्पन्न करता है

```json
{
  "Name": "orders",                 // Context name (SignalR group identifier)
  "Description": "Order data..."    // Plain English description (LLM generates JSON from this)
  // Optional:
  // "IsActive": true,              // Start in active/stopped state (default: true)
  // "Shape": "{...}",              // Explicit JSON shape or JSON Schema
  // "IsJsonSchema": false           // Auto-detected if not specified
}
```

**सिफारिशित: सरल अंग्रेजी वर्णन का प्रयोग करें**

LLM को स्वचालित रूप से उपयुक्त JSON संरचनाएं उत्पन्न करने दें

```json
{
  "Name": "sensors",
  "Description": "IoT sensor data with device ID, temperature, humidity, battery level, and last reading timestamp"
}
```

LLM आपके वर्णन से एक उपयुक्त JSON स्कीमा स्वचालित रूप से उत्पन्न करता है

### गतिशील संदर्भ निर्माण API

प्रबंधन API के उपयोग से रनटाइम पर SignalR संदर्भ बनाएं और प्रबंधित करें

#### संदर्भ बनाएँ

```bash
POST /api/mock/contexts
Content-Type: application/json

{
  "name": "crypto",
  "description": "Cryptocurrency prices with symbol, USD price, 24h change percentage, and market cap"
}
```

प्रतिक्रिया

```json
{
  "message": "Context 'crypto' registered successfully",
  "context": {
    "name": "crypto",
    "description": "Cryptocurrency prices...",
    "method": "GET",
    "path": "/crypto",
    "shape": "{...generated JSON schema...}",
    "isJsonSchema": true
  }
}
```

#### सभी संदर्भ सूचीबद्ध करें

```bash
GET /api/mock/contexts
```

प्रतिक्रिया

```json
{
  "contexts": [
    {
      "name": "weather",
      "description": "Realistic weather data with temperature, conditions, humidity, and wind speed for a single location",
      "method": "GET",
      "path": "/weather/current",
      "shape": "{...}"
    },
    {
      "name": "crypto",
      "description": "Cryptocurrency prices...",
      "shape": "{...}"
    }
  ],
  "count": 2
}
```

नोट: सूची अंतबिंदु अनुप्रयोग सेटिंग में कॉन्फ़िगर किए गए संदर्भों को कनेक्ट करता है।

#### विशिष्ट संदर्भ प्राप्त करें

```bash
GET /api/mock/contexts/weather
```

प्रतिक्रिया

```json
{
  "name": "weather",
  "method": "GET",
  "path": "/weather/current",
  "shape": "{\"temperature\":0,\"condition\":\"string\"}",
  "isJsonSchema": false
}
```

#### संदर्भ मिटाएँ

```bash
DELETE /api/mock/contexts/crypto
```

प्रतिक्रिया

```json
{
  "message": "Context 'crypto' deleted successfully"
}
```

#### संदर्भ आरंभ करें

```bash
POST /api/mock/contexts/crypto/start
```

प्रतिक्रिया

```json
{
  "message": "Context 'crypto' started successfully"
}
```

कनेक्टेड क्लाइंटों को प्रभावित किए बिना एक रोके गए संदर्भ के लिए डेटा उत्पन्न करना प्रारंभ करता है.

#### संदर्भ रोकें (डेटा उत्पादन रोकें

```bash
POST /api/mock/contexts/crypto/stop
```

प्रतिक्रिया

```json
{
  "message": "Context 'crypto' stopped successfully"
}
```

नया डेटा उत्पन्न करना बंद करता है लेकिन संदर्भ को पंजीकृत रखता है. क्लाइंट्स पुनः शुरू होने तक जुड़े रहते हैं परंतु अद्यतन नहीं प्राप्त करते

### पूर्ण क्लाइंट उदाहरण

```html
<!DOCTYPE html>
<html>
<head>
    <script src="https://cdn.jsdelivr.net/npm/@microsoft/signalr@8.0.0/dist/browser/signalr.min.js"></script>
</head>
<body>
    <h1>Live Weather Data</h1>
    <div id="weather-data"></div>

    <script>
        const connection = new signalR.HubConnectionBuilder()
            .withUrl("/hub/mock")
            .withAutomaticReconnect()
            .build();

        connection.on("DataUpdate", (message) => {
            if (message.context === "weather") {
                const weatherDiv = document.getElementById("weather-data");
                weatherDiv.innerHTML = `
                    <h2>Current Weather</h2>
                    <p>Temperature: ${message.data.temperature}°F</p>
                    <p>Condition: ${message.data.condition}</p>
                    <p>Humidity: ${message.data.humidity}%</p>
                    <p>Updated: ${new Date(message.timestamp).toLocaleTimeString()}</p>
                `;
            }
        });

        connection.start()
            .then(() => {
                console.log("Connected to SignalR hub");
                return connection.invoke("SubscribeToContext", "weather");
            })
            .then(() => {
                console.log("Subscribed to weather context");
            })
            .catch(err => console.error(err));
    </script>
</body>
</html>
```

### यूआई से गतिशील संदर्भ निर्माण

```javascript
async function createDynamicContext() {
    // Create the context
    const response = await fetch("/api/mock/contexts", {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify({
            name: "stocks",
            description: "Stock market data with ticker symbol, current price, daily change percentage, and trading volume"
        })
    });

    const result = await response.json();
    console.log("Context created:", result.context);

    // Subscribe to receive data
    await connection.invoke("SubscribeToContext", "stocks");
    console.log("Now receiving live stock data!");
}
```

### सिग्नल आर हब विधि

 `MockLlmHub` निम्न विधियों को समर्थित करता है

**संदर्भ में सदस्यता लें**

- एक विशिष्ट संदर्भ के लिए डेटा अद्यतन प्राप्त करने हेतु ग्राहक को सदस्यता देता है
- ग्राहक प्राप्त करेगा `DataUpdate` उत्पन्न डेटा के साथ घटनाएँ
- **में नया v1.1.0:** कनेक्शन गिनती को स्वतः बढ़ाता है

**संदर्भ से सदस्यता हटाएँ**

- एक संदर्भ से क्लाइंट का सदस्यता हटाता है
- क्लाइंट अब उस संदर्भ के लिए अद्यतन प्राप्त नहीं करेगा
- **में नया v1.1.0:** कनेक्शन गिनती को स्वतः घटाता है

**ग्राहक द्वारा प्राप्त घटनाएँ:**

**डाटा अद्यतन** - उत्पन्न नमूना डेटा समाहित करता है

```javascript
{
    context: "weather",       // Context name
    method: "GET",            // Simulated HTTP method
    path: "/weather/current", // Simulated path
    timestamp: 1699564820000, // Unix timestamp (ms)
    data: {                   // Generated JSON matching the shape
        temperature: 72,
        condition: "Sunny",
        humidity: 45,
        windSpeed: 8
    }
}
```

**सदस्यता** - सदस्यता की पुष्टि

```javascript
{
    context: "weather",
    message: "Subscribed to weather"
}
```

**सदस्यता नहीं** - सदस्यता से बाहर होने की पुष्टि

```javascript
{
    context: "weather",
    message: "Unsubscribed from weather"
}
```

### कॉन्फ़िगरेशन विकल्प

```json
{
  "MockLlmApi": {
    "SignalRPushIntervalMs": 5000,  // Interval between data pushes (ms)
    "HubContexts": [...]             // Array of pre-configured contexts
  }
}
```

### JSON योजना समर्थन

हब संदर्भ सरल JSON आकार और पूर्ण JSON योजना दोनों को समर्थन देते हैं

**सरल आकार:**

```json
{
  "Name": "users",
  "Shape": "{\"id\":0,\"name\":\"string\",\"email\":\"string\"}"
}
```

**JSON योजना**

```json
{
  "Name": "products",
  "Shape": "{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"number\"},\"name\":{\"type\":\"string\"},\"price\":{\"type\":\"number\"}},\"required\":[\"id\",\"name\",\"price\"]}",
  "IsJsonSchema": true
}
```

सिस्टम स्वचालित - खोज के द्वारा JSON योजना पता लगाता है `$schema`, `type`, या `properties` क्षेत्र.

### वास्तुकला

```mermaid
graph TD
    Client[SignalR Client] -->|Subscribe| Hub[MockLlmHub]
    Hub -->|Join Group| Group[SignalR Group]
    BG[Background Service] -->|Generate Data| LLM[Ollama LLM]
    LLM -->|JSON Response| BG
    BG -->|Push Data| Group
    Group -->|DataUpdate Event| Client
    API[Management API] -->|CRUD| Manager[DynamicHubContextManager]
    Manager -->|Register/Unregister| BG
```

**अवयव**

- **मोकएलएमहब**: सिग्नलआर हाब ग्राहक कनेक्शन और सदस्यता नियंत्रित करता है
- **मोकडेटा बैकग्राउंड सर्विस**: होस्टेड सेवा निरंतर डेटा उत्पन्न करता है
- **DynamicHubContextManager**रनटाइम संदर्भ पंजीकरण के लिए सुरक्षित प्रबंधक
- **HubContextConfig**प्रत्येक डेटा संदर्भ के लिए : कॉन्फ़िगरेशन मॉडल

### केस का उपयोग करें

**1. Dashboard प्रोटोटाइपिंग**

```javascript
// Subscribe to multiple data sources
await connection.invoke("SubscribeToContext", "sales");
await connection.invoke("SubscribeToContext", "traffic");
await connection.invoke("SubscribeToContext", "alerts");
// Now receiving live updates for all three!
```

**2. आईटीओपी अनुकरण**

```json
{
  "Name": "sensors",
  "Description": "IoT temperature sensors with device ID, current temperature, battery percentage, and signal strength",
  "Path": "/iot/sensors"
}
```

**3. वित्तीय डाटा**

```json
{
  "Name": "trading",
  "Description": "Real-time stock trades with timestamp, symbol, price, volume, and buyer/seller IDs",
  "Path": "/trading/live"
}
```

**4. गेमिंग लीडरबोर्ड**

```json
{
  "Name": "leaderboard",
  "Description": "Gaming leaderboard with player name, score, rank, level, and country",
  "Path": "/game/leaderboard"
}
```

### संदर्भ जीवन चक्र प्रबंधन

**में नया v1.1.0:** वास्तविक के साथ SignalR संदर्भों पर पूरा जीवन चक्र नियंत्रण

प्रत्येक संदर्भ में निम्न गुण हैं

- **सक्रिय (I)**क्या संदर्भ डाटा उत्पन्न कर रहा है
- **कनेक्शन गिनती**वर्तमान में संयोजित क्लाइंटों की संख्या

संदर्भ दो अवस्थाओं में हो सकता है

- **सक्रिय**: पृष्ठभूमि सेवा हर नई डेटा उत्पन्न करता है `SignalRPushIntervalMs` डिफ़ॉल्ट
- **रुक गया**: संदर्भ रजिस्ट्रीकृत रहता है

**मुख्य विशेषताएँ**

- आरंभ करें/ क्लाइंटों को विच्छेद किए बिना संदर्भ रोकें
- Real-time कनेक्शन गिनती ट्रैकिंग
- सक्रिय दिखाते हुए स्थिति बैग्स
- प्रतिलिपि संदर्भ रोकथाम
- अनुप्रयोग से संदर्भ

**सिग्नलR के लिए प्रतिक्रिया कैशिंग**
**में नया v1.1.0:** Intelligent caching reduces LLM load and improves consistency!

- **बैच पहले भरना**एक बार में 5-10 प्रतिक्रियाएं उत्पन्न करता है `MaxCachePerKey`)
- **Per-संबंध कतार**: प्रत्येक संदर्भ को पूर्व उत्पन्न प्रतिक्रियाओं का अपना कैश रखता है
- **पृष्ठभूमि पुनर्भरण**जब यह 50% क्षमता के नीचे गिरता है तो स्वतः कैश को भरता है
- **स्मार्ट scheduling**: डेटा ताजगी बनाए रखने के दौरान LLM कॉल को कम करता है

यह महत्वपूर्ण रूप से उच्च खंडों के लिए LLM लोड को कम करता है

**उदाहरण कार्यप्रवाह**

```bash
# Create a context
POST /api/mock/contexts
{ "name": "metrics", "description": "Server metrics" }

# Stop data generation (clients remain connected)
POST /api/mock/contexts/metrics/stop

# Resume data generation
POST /api/mock/contexts/metrics/start

# Remove context entirely
DELETE /api/mock/contexts/metrics
```

## ओपन एपीआई / स्वागर मोक जनन

**नया विशेषता** स्वचालित रूप से OpenAPI से नमूना अंतबिंदुओं को उत्पन्न करें/Swagger विनिर्दिष्टताएँ | ! | किसी भी OpenAPI पर इंगित करें |3.0/ | Swagger | МSK3 | spec | ( | URL या फ़ाइल |) | और लाइब्रेरी सभी परिभाषित ऑपरेशनों के लिए नमूने अंतबिन्दुएं बनाएँगी

### ओपन एपीआई के साथ त्वरित प्रारंभ

```bash
dotnet add package mostlylucid.mockllmapi
```

**कार्यक्रम**

```csharp
using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Add OpenAPI mock services
builder.Services.AddLLMockOpenApi(builder.Configuration);

var app = builder.Build();
app.UseRouting();

// Map OpenAPI-based mock endpoints
app.MapLLMockOpenApi();

app.Run();
```

**अनुप्रयोग-सेटिंग**

```json
{
  "MockLlmApi": {
    "BaseUrl": "http://localhost:11434/v1/",
    "ModelName": "ministral-3:3b",
    "Temperature": 1.2,
    "OpenApiSpecs": [
      {
        "Name": "petstore",
        "Source": "https://petstore3.swagger.io/api/v3/openapi.json",
        "BasePath": "/petstore",
        "EnableStreaming": false
      },
      {
        "Name": "myapi",
        "Source": "./specs/my-api.yaml",
        "BasePath": "/api/v1"
      }
    ]
  }
}
```

कि's it! आपके ओपन एपीआई स्पेक्ट से सभी अंतबिंदु अब Intelligent LLM के रूप में उपलब्ध हैं

### यह कैसे काम करता है

1. **निर्दिष्ट लोड किया जा रहा है**यूआरएल या स्थानीय फ़ाइलों से ओपन एपीआई स्पेक्ट लोड करता है
2. **योजना रूपांतरण**: OpenAPI स्कीमा को JSON आकार टेम्प्लेट में बदलता है
3. **अंत बिन्दु मानचित्रण**Automatically maps all operations to ASP.NET Core endpoints
4. **एलएलएम जनन**: स्कीमा से मिलते वास्तविक नमूना डेटा उत्पन्न करने के लिए एलएलएम का उपयोग करता है
5. **पथ परिमिति**: पथ पैरामीटर जैसे हैंडल करता है `/users/{id}` स्वचालित रूप से

### कॉन्फ़िगरेशन विकल्प

प्रत्येक ओपन एपीआई स्पेक्ट इन कॉन्फ़िगरेशन विकल्पों को समर्थन करता है

गुण | प्रकार | | | विवरण
|----------|------|-------------|
| `Name` | स्ट्रिंग
| `Source` string | URL or file path to OpenAPI spec
| `BasePath` | स्ट्रिंग `servers[0].url`) |
| `EnableStreaming` जोड़ें `/stream` SSE स्ट्रीमिंग के लिए उपसर्ग (पूर्वनिर्धारित
| `IncludeTags` | string[सिर्फ इन टैगों के साथ अंतबिंदु उत्पन्न करें
| `ExcludeTags` | string[इन टैगों के साथ अंतबिंदुओं को छोड़ें
| `IncludePaths` | string[सिर्फ इन पथों को उत्पन्न करें `/users/*`) |
| `ExcludePaths` | string[इन पथों को छोड़ें

### उन्नत कॉन्फ़िगरेशन उदाहरण

**टैग द्वारा फ़िल्टर करें:**

```json
{
  "Name": "petstore",
  "Source": "https://petstore3.swagger.io/api/v3/openapi.json",
  "IncludeTags": ["pet", "store"]
}
```

**पथ द्वारा फ़िल्टर करें:**

```json
{
  "Name": "api",
  "Source": "./specs/api.yaml",
  "IncludePaths": ["/users/*", "/products/*"],
  "ExcludePaths": ["/admin/*"]
}
```

**स्ट्रीमिंग सक्षम करें**

```json
{
  "Name": "api",
  "Source": "./specs/api.yaml",
  "BasePath": "/api",
  "EnableStreaming": true
}
```

### ओपन एपीआई मोक का परीक्षण

इस ओपन एपीआई स्पेक्ट कॉन्फ़िगरेशन को दिया गया है

```json
{
  "Name": "petstore",
  "Source": "./specs/petstore.json",
  "BasePath": "/petstore"
}
```

और एक विशेषता परिभाषित `GET /pet/{petId}` जो एक वापस करता है `Pet` वस्तु, आप परीक्षण कर सकते हैं

```bash
# Get a pet by ID
curl http://localhost:5116/petstore/pet/123

# Response (generated by LLM based on Pet schema):
{
  "id": 123,
  "name": "Fluffy",
  "category": {
    "id": 1,
    "name": "Cats"
  },
  "photoUrls": ["https://example.com/fluffy.jpg"],
  "tags": [
    {"id": 1, "name": "cute"},
    {"id": 2, "name": "playful"}
  ],
  "status": "available"
}
```

### मॉड्यूलर उपयोग

ओपन एपीआई नमूने रेस्ट से स्वतंत्र रूप से काम करते हैं

```csharp
// Just OpenAPI mocks
builder.Services.AddLLMockOpenApi(builder.Configuration);
app.MapLLMockOpenApi();

// Or combine with other features
builder.Services.AddLLMockRest(builder.Configuration);
builder.Services.AddLLMockOpenApi(builder.Configuration);
app.MapLLMockRest("/api/mock");
app.MapLLMockOpenApi();
```

### समर्थित स्पेक प्रारूप

- **ओपन एपीआई 3.0** (JSON या YAML
- **ओपन एपीआई 3.1** (JSON या YAML
- **स्वागर 2.0** (JSON या YAML

### मुख्य विशेषताएँ

- **स्वचालित अंतबिंदु निर्माण**: स्पेक्ट से सभी पथ और ऑपरेशन नमूना अंतबिंदु बन जाते हैं
- **योजना**: OpenAPI प्रतिक्रिया स्कीमा से व्युत्पन्न प्रतिक्रिया आकार
- **पथ परिमिति**: हैंडल्स `/users/{id}`, `/posts/{postId}/comments/{commentId}`एमएसके0 आदि
- **बहुविध SPECS**: एक साथ कई API विशेषताओं को लोड और माउन्ट करें
- **स्मार्ट फ़िल्टरिंग**: सम्मिलित करें
- **स्ट्रीमिंग समर्थन**किसी भी अंतबिंदु के लिए वैकल्पिक एसईएसई स्ट्रीमिंग
- **LLM-Powered**: प्रत्येक स्कीमा के लिए उपयुक्त यथार्थिक , विविध डेटा उत्पन्न करता है

### केस का उपयोग करें

- **API-प्रथम विकास**: बैकएण्ड तैयार होने से पहले स्पेक्ट के खिलाफ कोडिंग प्रारंभ करें
- **फ्रन्टएण्ड प्रोटोटाइपिंग**: API निर्माण के दौरान UI विकसित करें
- **इंटीग्रेशन परीक्षण**: वास्तविक API निर्भरताओं के बिना क्लाइंट कोड परीक्षण करें
- **डेमो वातावरण**: उत्पादन API पहुँच के बिना अनुप्रयोग दिखाएँ
- **संविदा परीक्षण**: सत्यापित क्लाइंट सभी स्कीमा परिवर्तनों को सही तरीके से संभालते हैं
- **लोड परीक्षण**: scale पर वास्तविक परीक्षण डेटा उत्पन्न करें

### सीमाएं

- वर्तमान में केवल प्रतिक्रिया स्कीमाओं को समर्थन करता है
- सुरक्षा योजनाओं को अनदेखा किया जाता है (नहीं प्रमाणीकरण की आवश्यकता होती है
- केवल अनुप्रयोग/json सामग्री प्रकार प्रतिक्रियाओं के लिए समर्थित
- पथ पैरामीटर मान स्कीमा अवरोधों के विरुद्ध वैध नहीं हैं

### ओपन एपीआई प्रबंधन का परीक्षण

सम्मिलित `management.http` फ़ाइल में सभी प्रबंधन अंतबिंदुओं के लिए व्यापक उदाहरण हैं

**स्पेक प्रबंधन**:

- यूआरएल से स्पेक्ट लोड करें
- स्थानीय फ़ाइल से स्पेक्ट लोड करें
- कच्चे JSON से स्पेक्ट लोड करें
- सभी लोड किए गए विवरण सूचीबद्ध करें
- अंतबिंदुओं के साथ विशेष विवरण प्राप्त करें
- स्पेक्ट फिर से लोड करें (स्रोत से फिर से बदलें
- स्पेक्ट मिटाएँ

**अंत बिन्दु परीक्षण**:

- पथ पैरामीटरों के साथ GET अंतबिंदुओं का परीक्षण करें
- जाँच POST/PUT/DELETE अंतबिंदु
- क्वेरी पैरामीटर के साथ अंतिम बिंदुओं का परीक्षण करें
- अनुक्रम में कई अंतबिंदुओं का परीक्षण करें

**उन्नत कार्यप्रवाह**:

- एक साथ कई स्पेक्ट लोड करें
- ओपन एपीआई नमूने का तुलना नियमित नमूनों के विपरीत
- बैच ऑपरेशन
- उदाहरणों को संभालने में त्रुटि

**प्रबंधन से उदाहरण.http**:

```http
### Load Petstore API
POST http://localhost:5116/api/openapi/specs
Content-Type: application/json

{
  "name": "petstore",
  "source": "https://petstore3.swagger.io/api/v3/openapi.json",
  "basePath": "/petstore"
}

### Test an endpoint
POST http://localhost:5116/api/openapi/test
Content-Type: application/json

{
  "specName": "petstore",
  "path": "/pet/123",
  "method": "GET"
}
```

पूरा देखें [प्रबंधन](https://github.com/scottgal/LLMApi/blob/refs/heads/master/LLMApi/management.http) के लिए फ़ाइल 20+ तैयार

### डेमो अनुप्रयोग

पैकेज में पूर्ण डेमो अनुप्रयोग शामिल हैं जिनमें पूर्ण संदर्भ प्रबंधन सहित अंतःक्रियात्मक इंटरफेस शामिल है

#### विंडोज़ डेस्कटॉप क्लाइंट (`LLMockApiClient/`WPF अनुप्रयोग

> **⚠️ विकास स्थिति**: विंडोज डेस्कटॉप क्लाइंट वर्तमान में सक्रिय विकास के अधीन है

LLMock API के साथ आदान-प्रदान हेतु एक व्यापक WPF डेस्कटॉप अनुप्रयोग

**विशेषताएँ**

- **डैशबोर्ड**समय कनेक्शन स्थिति और सिस्टम मॉनिटरिंग
- **सिग्नल आर वास्तविक**: संदर्भ बनाएँ और प्रत्यक्ष डेटा धाराओं को सदस्यता लें
- **एसईएस स्ट्रीमिंग**तीन स्ट्रीमिंग मोडें
- **ओपन एपीआई प्रबंधक**: URL से स्पेक्ट लोड करें
- **जीआरपीसी सेवाएँ**: अपलोड करें
- **APIs के साथ खेलें**: अंतःक्रियात्मक HTTP परीक्षण खेल मैदान
- **बहु-- बैकएण्ड समर्थन**: बहुविध बैकएण्ड्स के बीच कॉन्फ़िगर और स्विच करें
- **ट्रैफिक मॉनिटर**: लाइव एचटीटीपी निवेदन
- **गाढा**smooth transitions के साथ विषयवस्तुओं के बीच टॉगल करें

**दस्तावेज़** [LLMockApiClient README](https://github.com/scottgal/LLMApi/blob/refs/heads/master/LLMockApiClient/README.md)

**के लिए आदर्श** डेस्कटॉप परीक्षण कार्यप्रणाली

---


#### वेब-आधारित डेमो

#### सिग्नलआर डेमो (`/`प्रबंधन यूआई के साथ समय डेटा स्ट्रीमिंग

**में नया v1.1.0:** पूर्ण संदर्भ जीवन चक्र प्रबंधन के साथ उन्नत 3-स्तम्भ सजावट

**विशेषताएँ**

- **कॉन्टेक्स्ट पटल बनाएँ**: सरल अंग्रेजी वर्णन प्रविष्ट करें
- **सक्रिय संदर्भ पैनल**:
  - स्थिति बैग सहित सभी संदर्भों का लाइव सूची
  - आरंभ पर स्वचालित रूप से अनुप्रयोग से संदर्भ प्रदर्शित करता है
  - प्रत्येक संदर्भ के लिए वास्तविक-टाइम कनेक्शन गिनती
  - Per-context controls
  - परिवर्तनों पर स्वचालित
- **प्रत्यक्ष डेटा पैनल**अभिदाता संदर्भों से समय अद्यतन
  - **JSON वाक्य संरचना उभारना**: सुंदर गहरे रंग के साथ विषयवस्तु प्रदर्शित करता है
  - कुंजियाँ (redM SK1 स्ट्रिंगें (green), संख्याएँ MSC4orangeMSC5 booleans S(cyanMST7 null
  - सही समय स्टांप प्रदर्शन के साथ साफ-सुथरी , पढ़ने योग्य प्रारूप
  - कोई बाहरी निर्भरताएँ नहीं - हल्के वजन का निर्माण किया गया है

**त्वरित** के लिए एक -क्लिक बटन

- **आईटीओ सेंसर**: उपकरण आईडी के साथ तापमान सेंसर
- **स्टॉक बाजार**: वास्तविक
- **वाणिज्य क्रमादेश**आईडी के साथ क्रमादेश
- **सर्वर मैट्रिक्स**होस्टनाम के साथ मॉनीटरिंग डेटा
- **गेमिंग लीडरबोर्ड**: नाम के साथ खिलाड़ी के सांख्यिकी

**के लिए आदर्श** Dashboards, live monitoringM SK1 IoT simulations, realMSC3time feeds , prototyping

#### SSE स्ट्रीमिंग डेमो (`/Streaming`Progressive JSON Generation

**में नया v1.1.0:** त्वरित धारावाहन के लिए उदाहरण बटन प्रारंभ करें

**विशेषताएँ**

- HTTP विधि को कॉन्फ़िगर करें, पथ, और वैकल्पिक JSON आकार
- यह देखो कि जेसन को वास्तविक रूप में टोकन बनाया जा रहा है
- प्रत्यक्ष सांख्यिकी: टुकड़े की गणना
- कनेक्शन स्थिति सूचक

**त्वरित** एक -स्ट्रीमिंग सिनारियो के लिए बटन क्लिक करें

- **उपयोक्ता सूची**आईडी के साथ उपयोक्ता वस्तुओं का सरणी
- **उत्पाद विवरणिका**: SKU के साथ उत्पाद आंकड़ा
- **आदेश विवरण**: ग्राहक सूचना और वस्तु सारणी के साथ स्थापित आदेश
- **मौसम डाटा**: तापमान के साथ मौजूदा परिस्थितियाँ

**के लिए आदर्श** LLM जनन का अवलोकन

#### ओपन एपीआई प्रबंधक डेमो (`/OpenApi`गतिशील स्पेक्ट लोडिंग

**नया विशेषता** वास्तविक के साथ इंटरैक्टिव ओपन एपीआई निर्दिष्टीकरण प्रबंधन

**विशेषताएँ**

- **स्पेक गतिशील रूप से लोड करें**: यूआरएल से या कच्चे JSON को सीधे ब्राउज़र में चिपकाएँ
- **Real-टाइम अपडेट**: SignalR-सभी क्रियाओं के लिए सक्षम प्रत्यक्ष अधिसूचना
- **अंत बिन्दु खोज**: स्पेक्ट से सभी ऑपरेशनों का स्वचालित निष्कर्षण
- **In-ब्रोजर परीक्षण**एक क्लिक के साथ किसी भी अंतबिंदु का परीक्षण करें
- **जीवन चक्र प्रबंधन**: लोड करें
- **सुंदर यूआई**: रंग-कोडित HTTP विधियाँM SK2 वाक्य संरचनाMSC3उज्वलित JSON प्रतिक्रियाएँ
- **कनेक्शन स्थिति**: प्रत्यक्ष सूचक SignalR कनेक्शन स्थिति दिखाता है
- **व्यापक सहायता**: इनलाइन दस्तावेज़ीकरण और उदाहरण यूआरएल

**त्वरित**

- यूआरएल से पेटस्टोर API लोड करें
- मनपसंद OpenAPI JSON चिपकाएँ
- सभी अंतबिन्दुओं को स्पेक्ट से देखें
- पृष्ठ में सीधे अंतबिंदुओं का परीक्षण करें
- एलएलएम द्वारा उत्पन्न वास्तविक नमूना डेटा देखें

**के लिए आदर्श** API प्रोटोटाइपिंग

**डेमो चलाएँ**

```bash
cd LLMApi
dotnet run
```

में नेविगेट करें

- `http://localhost:5116` - सिग्नलआर वास्तविक- प्रबंधन यूआई के साथ समय डेटा प्रवाह
- `http://localhost:5116/Streaming` - एसईएस प्रगतिशील उत्पादन
- `http://localhost:5116/OpenApi` - गतिशील लोडिंग के साथ ओपन एपीआई स्पेक्ट मैनेजर

सभी डेमो में शामिल हैं

- व्यापक इनलाइन दस्तावेज़ीकरण
- इंटरैक्टिव त्वरित-सुरुआ उदाहरण
- एकीकरण के लिए कोड स्निपेट
- वास्तविक समय स्थिति सूचक
- पूरा संदर्भ जीवन चक्र नियंत्रण

## उन्नत सुविधाएँ

### प्रत्युत्तर योजना प्रतिध्वनि (आकार)निर्यात

आप वैकल्पिक रूप से मध्यवर्ती प्रतिध्वनित JSON आकार वापस कर सकते हैं

कॉन्फ़िगरेशन

- विकल्प: IncludeShapeInResponse
- Per-request override: add query parameter includeSchema
- प्रेषित हेडर: XM SK1प्रतिक्रिया-Schema MSC3केवल जब एक आकार और आकार प्रदान किया गया था
- स्ट्रीमिंग: अंतिम एसईएस घटना में एक स्कीमा क्षेत्र शामिल है जब सक्षम

उदाहरण

- वैश्विक रूप से सक्षम करें

```json
{
  "mostlylucid.mockllmapi": {
    "IncludeShapeInResponse": true
  }
}
```

- प्रति अनुरोध सक्षम करें (config अधिरोहित करता है

```bash
curl "http://localhost:5000/api/mock/users?shape=%7B%22id%22%3A0%2C%22name%22%3A%22string%22%7D&includeSchema=true"
```

प्रतिक्रिया में हेडर शामिल है

```
X-Response-Schema: {"id":0,"name":"string"}
```

- Streaming: अंतिम घटना सक्षम होने पर स्कीमा क्षेत्र समाहित करता है

```
...
data: {"content":"{full json}","done":true,"schema":{"id":0,"name":"string"}}
```

नोट्स

- यदि कोई आकार प्रदान नहीं किया गया है ( क्वेरी के माध्यम से
- बहुत बड़े आकार (> 4000 Chars) हेडर में जोड़ा नहीं जाता है परिवहन समस्याओं से बचने के लिए

केस का उपयोग करें

- क्लाइंट-साइड टाइपस्क्रिप्ट प्रकार उत्पादन
- API दस्तावेज़ीकरण और स्कीमा वैधता
- आकार विश्लेषण डिबगिंग
- रनटाइम वैधीकरण

### मनपसंद त्वरित टेम्प्लेट

अपने आप के साथ डिफ़ॉल्ट प्रवर्धन अधिरोहित करें

```json
{
  "mostlylucid.mockllmapi": {
    "CustomPromptTemplate": "Generate mock data for {method} {path}. Body: {body}. Use seed: {randomSeed}"
  }
}
```

उपलब्ध स्थानधारक

- `{method}` HTTP विधि
- `{path}` - क्वेरी स्ट्रिंग के साथ पूरा अनुरोध पथ
- `{body}` - अनुरोध निकाय
- `{randomSeed}` Generated random seed (GUID
- `{timestamp}` - यूनिक्स समय-स्टाम्प
- `{shape}` - आकार विनिर्दिष्टीकरण यदि उपलब्ध है

### त्रुटि सिमुलेशन

अपने क्लाइंट को जाँचें-'-अपने त्रुटि प्रबंधन के साथ व्यापक त्रुटियों सिमुलेशन क्षमताएँ

**त्रुटियों को कॉन्फ़िगर करने के चार तरीके** प्राथमिकता क्रम में

1. **क्वेरी पैरामीटर** उच्चतम प्राथमिकता

**महत्वपूर्ण**: क्वेरी पैरामीटर मान URL होना चाहिए `%20`, `&` बन जाता है `%26`, `:` बन जाता है `%3A`एमएसके0 आदि

```bash
# Properly encoded (spaces as %20)
curl "http://localhost:5000/api/mock/users?error=404&errorMessage=Not%20found&errorDetails=User%20does%20not%20exist"

# More complex example with special characters
# Decoded: "Invalid input: email & phone required"
curl "http://localhost:5000/api/mock/users?error=400&errorMessage=Invalid%20input%3A%20email%20%26%20phone%20required"
```

2. **HTTP हेडर**:

```bash
curl -H "X-Error-Code: 401" \
     -H "X-Error-Message: Unauthorized" \
     -H "X-Error-Details: Token expired" \
     http://localhost:5000/api/mock/users
```

3. **आकार JSON** उपयोग `$error` संपत्ति

```bash
# Simple: just status code
curl "http://localhost:5000/api/mock/users?shape=%7B%22%24error%22%3A404%7D"

# Complex: with message and details
curl "http://localhost:5000/api/mock/users?shape=%7B%22%24error%22%3A%7B%22code%22%3A422%2C%22message%22%3A%22Validation%20failed%22%2C%22details%22%3A%22Email%20invalid%22%7D%7D"
```

4. **अनुरोध मुख्य भाग** उपयोग `error` संपत्ति

```bash
curl -X POST http://localhost:5000/api/mock/users \
  -H "Content-Type: application/json" \
  -d '{
    "error": {
      "code": 409,
      "message": "Conflict",
      "details": "User already exists"
    }
  }'
```

**त्रुटि प्रतिक्रिया प्रारूप**

नियमित/स्ट्रीमिंग अंतबिंदुएं

```json
{
  "error": {
    "code": 404,
    "message": "Not Found",
    "details": "Optional additional context"
  }
}
```

ग्राफQL अंतबिन्दु:

```json
{
  "data": null,
  "errors": [
    {
      "message": "Not Found",
      "extensions": {
        "code": 404,
        "details": "Optional additional context"
      }
    }
  ]
}
```

**सिग्नलआर त्रुटि अनुकरण**

वास्तविक परीक्षण के लिए SignalR संदर्भ में त्रुटियों को कॉन्फ़िगर करें

```json
{
  "HubContexts": [
    {
      "Name": "errors",
      "Description": "Error simulation stream",
      "ErrorConfig": {
        "Code": 500,
        "Message": "Server error",
        "Details": "Database connection lost"
      }
    }
  ]
}
```

या प्रबंधन API के माध्यम से गतिशील रूप से

```bash
curl -X POST http://localhost:5000/api/management/contexts \
  -H "Content-Type: application/json" \
  -d '{
    "name": "errors",
    "description": "Test errors",
    "error": 503,
    "errorMessage": "Service unavailable",
    "errorDetails": "Maintenance in progress"
  }'
```

**समर्थित HTTP स्थिति कोड**

पैकेज में सामान्य HTTP स्थिति कोड के लिए डिफ़ॉल्ट संदेश शामिल हैं

- **क्लाइंट त्रुटि**: 400 \(\Bad Request\),\ \ 401\ |(\Unuthorized\M SK6\ 403\ ◦(\Forbidden\MSC9\ ─404\ (\Not Found\MST12\ ‒MST13\ MST14\Method Not Allowed\M ST15\ ―MST16\ ¬MST17\Request Timeout\M st18\ M st19\ ؂M st20\Conflict\M St21\ M st22\ ̄M st23\ Unprocessable Entity\Mst24\ ــM st25\ ـــM st26\ Too Many Requests\M S T27\
- **सर्वर त्रुटि**@info: whatsthis

मनपसंद संदेश और विवरण डिफ़ॉल्ट अधिरोहित करें

**केस का उपयोग करें**

- क्लाइंट पुनः प्रयास तर्क और एक्सपोनेन्शल बैकऑफ का परीक्षण करें
- यूआई में त्रुटि संदेश प्रदर्शन प्रमाणित करें
- परीक्षण प्रमाणीकरण
- दर सीमांतरण परिदृश्य नकल करें
- शालीन विघटन नमूने का अभ्यास करें
- त्रुटि लॉगिंग और मॉनीटरिंग का परीक्षण करें

देखें `LLMApi/LLMApi.http` सभी त्रुटि सिमुलेशन विधियों के व्यापक उदाहरणों के लिए

### बहुविध अवस्थाएँ

विभिन्न कॉन्फ़िगरेशनों के साथ कई मॉक APIs माउन्ट करें:

```csharp
// Development data with high randomness
builder.Services.Addmostlylucid.mockllmapi("Dev", options =>
{
    options.Temperature = 1.5;
    options.ModelName = "llm-model";
});

// Stable test data
builder.Services.Addmostlylucid.mockllmapi("Test", options =>
{
    options.Temperature = 0.3;
    options.ModelName = "llm-model";
});

app.Mapmostlylucid.mockllmapi("/api/dev");
app.Mapmostlylucid.mockllmapi("/api/test");
```

## आकार विशिष्टीकरण

प्रतिक्रिया संरचना को नियंत्रित करने के तीन तरीके

1. **शीर्षिका** अनुशंसित `X-Response-Shape: {"field":"type"}`
2. **क्वेरी पैराम**: `?shape=%7B%22field%22%3A%22type%22%7D` यूआरएल
3. **शरीर क्षेत्र**: `{"shape": {...}, "actualData": ...}`

### आकार के माध्यम से बहुविध प्रतिक्रियाओं को कैशिंग करें

You can instruct the middleware to pre-generate and cache multiple response variants for a specific request

- कैश कुंजी HTTP विधि से व्युत्पन्न है + पथ | ( | जिसमें क्वेरी शामिल है |) | \+ | स्वच्छ आकार |
- तक के उत्तर LLM से पूर्वfetched किए जाते हैं और विकल्पों में MaxCachePerKey द्वारा कैप किया जाता है
- एक ही कुंजी के लिए अनुवर्ती गैर स्ट्रीमिंग अनुरोधों को एक समाप्ति कतार से सेवा दी जाती है
- स्ट्रीमिंग अंतबिंदु कैश नहीं हैं

उदाहरण

- हेडर आकार
  X-ResponseMSC1ShapeM SK2 {"$cacheMST4orderIdMSP5stringM ST6statusM st7string\MST8itemsMst9[{"

- बॉडी आकार
  {
  आकार
  कैश
  "invoiceId
  "customer
  " [ मूल्य
  कुल
  }
  }

- Query param (URLM SK1encoded):
  नाम

कॉन्फ़िगरेशन

- MaxCachePerKey (int, डिफ़ॉल्ट 5): द्वारा अनुरोधित संख्या को कैप करता है

नोट्स

- संकेत LLM को भेजने से पहले आकार से हटा दिया जाता है
- यदि "$cache" मिटाया जाता है या \0, अनुरोध पहले की तरह व्यवहार करता है
- कैश वैकल्पिक अनुप्रयोग जीवनकाल के लिए स्मृति में रखे जाते हैं

## परीक्षण

### परीक्षण उपयोगिता पैकेज

**mostlylucid.mockllmapi.Testing** एक सहयोगी NuGet पैकेज जो मॉक API के साथ परीक्षण को और आसान बनाता है

```bash
dotnet add package mostlylucid.mockllmapi.Testing
```

**त्वरित उदाहरण**

```csharp
using mostlylucid.mockllmapi.Testing;

// Create a configured HttpClient for testing
var client = HttpClientExtensions.CreateMockLlmClient(
    baseAddress: "http://localhost:5116",
    pathPattern: "/users",
    configure: endpoint => endpoint
        .WithShape(new { id = 0, name = "", email = "" })
        .WithCache(5)
        .WithError(404) // Simulate errors easily
);

// Use in your tests
var response = await client.GetAsync("/users");
var users = await response.Content.ReadFromJsonAsync<User[]>();
```

**मुख्य विशेषताएँ**

- **तरल API**: साथ आसान कॉन्फ़िगरेशन `WithShape()`, `WithError()`, `WithCache()`एमएसके0 आदि
- **एचटीटीपी क्लाइंट एकीकरण**: से सीधा काम करता है `HttpClient` और `IHttpClientFactory`
- **कई अंत बिन्दुएँ**विभिन्न पथों के लिए भिन्न व्यवहार कॉन्फ़िगर करें
- **त्रुटि सिमुलेशन**: विभिन्न स्थिति कोडों के साथ परीक्षण त्रुटि प्रबंधन
- **स्ट्रीमिंग समर्थन**: टेस्ट एसईएस स्ट्रीमिंग अंतबिंदु
- **निर्भरता इंजेक्शन**टाइप किए गए और नामित ग्राहकों के लिए समर्थन में : Built

**कॉन्फ़िगरेशन उदाहरण**

```csharp
// Multiple endpoints with different configurations
var client = HttpClientExtensions.CreateMockLlmClient(
    "http://localhost:5116",
    configure: handler => handler
        .ForEndpoint("/users", config => config
            .WithShape(new { id = 0, name = "", email = "" })
            .WithCache(10))
        .ForEndpoint("/posts", config => config
            .WithShape(new { id = 0, title = "", content = "" })
            .WithStreaming()
            .WithSseMode("CompleteObjects"))
        .ForEndpoint("/error", config => config
            .WithError(500, "Internal server error"))
);

// Dependency Injection support
services.AddMockLlmHttpClient<IUserApiClient>(
    baseApiPath: "/api/mock",
    configure: handler => handler
        .ForEndpoint("/users", config => config.WithShape(...))
);
```

**यह कैसे काम करता है**
 `MockLlmHttpHandler` एक है `DelegatingHandler` जो HTTP अनुरोध को अवरोधित करता है और मॉक API में अग्रेषित करने से पहले क्वैरी पैरामीटरों और शीर्षिकाओं के माध्यम से स्वचालित रूप से अपने कॉन्फ़िगरेशन लागू करता है `HttpClient` मॉक व्यवहार को घोषणात्मक रूप से नियंत्रित करते समय अपने परीक्षणों में उदाहरण

**देखें [पैकेज README का परीक्षण कर रहा है](https://github.com/scottgal/LLMApi/blob/refs/heads/master/mostlylucid.mockllmapi.Testing/README.md) पूरा दस्तावेज़ और उदाहरण के लिए**

### एचटीटीपी फ़ाइल परीक्षण

सम्मिलित उपयोग करें `LLMApi.http` के साथ फ़ाइल

- विजुअल स्टूडियो / राइडर HTTP क्लाइंट
- वीएस कोड रेस्ट क्लाइंट विस्तार
- कोई भी HTTP क्लाइंट

### इकाई परीक्षण

परियोजना में व्यापक इकाई परीक्षण शामिल हैं

```bash
# Run all tests
dotnet test

# Run with detailed output
dotnet test --verbosity detailed
```

**टेस्ट कवरेज (228 टेस्ट, 100% पास दर**

- **शरीर पठन** (empty
- **फॉर्म बॉडी विश्लेषण** (एकल मानों, बहुविध मानों
- **बहुpart फ़ॉर्म डाटा** फ़ाइल मेटाडेटा
- **JSON escaping** (quotesMSC1 backslashes, newlinesM SK3 tabs , unicode
- **सामग्री निष्कर्षण** (OpenAI फ़ॉर्मेट, जटिल nested JSON
- **मैनुअल JSON निर्माण** (प्ररूप डाटा,आरें
- **आकार निष्कर्षण** Query Param
- **त्वरित जनन** (randomness,shape inclusionM SK2streaming modes )
- **अनुरोध भवन** (temperatureM SK1model,messages
- **किनारा केस** अमान्य JSON
- **एकीकरण परीक्षण** (full HTTP workflow, form submissions

**में नया v2.3.0:**

- **फ़ॉर्मबडीहैन्डलिंग टेस्ट्स** फार्म बॉडी पार्सिंग और JSON निर्माण के लिए परीक्षण -
- **JsonHandlingTests.cs** JSON स्काइपिंग के लिए परीक्षण
- **इंटीग्रेशन टेस्ट** पूर्ण HTTP अंतबिंदु परीक्षण के लिए - एकीकृत परीक्षण फ्रेमवर्क

देखें [टेस्ट](https://github.com/scottgal/LLMApi/blob/refs/heads/master/TEST_SUMMARY.md) पूर्ण परीक्षण दस्तावेज़ और कवरेज मापन के लिए

## वास्तुकला

देखें [वास्तुकला की समीक्षा](#architecture-overview) उच्च स्तरीय सिस्टम चित्र और घटक विवरण के लिए ऊपर

### विस्तृत अनुरोध प्रवाह

```mermaid
sequenceDiagram
    participant C as Client
    participant A as LLMApi
    participant H as AutoApiHelper
    participant O as Ollama
    participant M as llm-model

    C->>A: GET/POST/PUT/DELETE /api/auto/**
    A->>H: Extract context (method, path, body, shape)
    H->>H: Generate random seed + timestamp
    H->>H: Build prompt with randomness
    H-->>A: Prompt + temperature=1.2
    A->>O: POST /v1/chat/completions
    O->>M: Run inference
    M-->>O: Generated JSON
    O-->>A: Response
    A-->>C: JSON Response
```

### आकार नियंत्रण प्रवाह

```mermaid
flowchart TD
    Start[Request Arrives] --> CheckQuery{Shape in<br/>Query Param?}
    CheckQuery -->|Yes| UseQuery[Use Query Shape]
    CheckQuery -->|No| CheckHeader{Shape in<br/>Header?}
    CheckHeader -->|Yes| UseHeader[Use Header Shape]
    CheckHeader -->|No| CheckBody{Shape in<br/>Body Field?}
    CheckBody -->|Yes| UseBody[Use Body Shape]
    CheckBody -->|No| NoShape[No Shape Constraint]

    UseQuery --> BuildPrompt[Build Prompt]
    UseHeader --> BuildPrompt
    UseBody --> BuildPrompt
    NoShape --> BuildPrompt

    BuildPrompt --> AddRandom[Add Random Seed<br/>+ Timestamp]
    AddRandom --> SendLLM[Send to LLM]

    style UseQuery fill:#4CAF50
    style UseHeader fill:#4CAF50
    style UseBody fill:#4CAF50
    style NoShape fill:#FFC107
```

**परियोजनाएं**

- `mostlylucid.mockllmapi`: NuGet पैकेज लाइब्रेरी
- `LLMApi`: डेमो अनुप्रयोग
- `LLMApi.Tests`: xUnit परीक्षण सूट (228 जाँचें | - | \ 100% | पास दर

## अधिकतरlucid का प्रयोग क्यों करें.mockllmapi?

- **त्वरित प्रारूपण**: बैकएण्ड की प्रतीक्षा किए बिना फ्रन्टएंड विकास
- **एचटीटीपी समर्थन पूर्ण करें**: JSON
- **सुसंगत कार्यप्रवाह**: API संदर्भ बहु-स्राव प्रक्रियाओं के बीच वास्तविक संबंध बनाए रखते हैं
- **डेमोस**: हार्डकोड फ़िक्सर के बिना वास्तविक डेटा प्रवाह दिखाएँ
- **परीक्षण**: किनारा केसों के लिए विविध परीक्षण डेटा उत्पन्न करें | - | या संदर्भों से सुसंगत डाटा
- **स्मृति**: फ़ाइल अपलोड्स स्ट्रीम और डम्प किया गया है.
- **API डिजाइन**: क्रियान्वयन से पहले प्रतिक्रिया आकारों के साथ प्रयोग
- **सीखना**: नेट न्यूनतम APIs में LLM एकीकरण का उदाहरण
- **शून्य रखरखाव**: कोई डाटाबेस नहीं
- **लचीला**: REST के किसी भी संयोजन का उपयोग करें
- **उत्पादन**: 228 परीक्षाएं, 100% पास दरM SK4 व्यापक दस्तावेज़

## न्यूगेट पैकेज बनाना

```bash
cd mostlylucid.mockllmapi
dotnet pack -c Release
```

पैकेज में होगा `bin/Release/mostlylucid.mockllmapi.{version}.nupkg`

## योगदान कर रहा है

यह एक नमूना परियोजना LLM को प्रदर्शित करता है

## लाइसेंस

यह सार्वजनिक डोमेन में मुक्त और असंभारित सॉफ्टवेयर है [लाइसेंस](https://github.com/scottgal/LLMApi/blob/refs/heads/master/LICENSE) अधिक जानकारी के लिए या यात्रा [अनलिसीन](https://unlicense.org).