प्रोटोकॉल बफर के साथ LLMApi: gRPC मोक API समर्थन
परिचय
यह LLMApi. में gRPC मोक API समर्थन के लिए दस्तावेज़ है
नोट: यह जीटहुब से प्रत्यक्ष है
आप मिल सकते हैं GitHub यहाँ परियोजना के लिए, सभी सार्वजनिक डोमेन आदि
प्रोटोकॉल बफर के साथ जीआरपीसी मोक API समर्थन
अब LLMock API comprehensive gRPC समर्थन प्रदान करता है, आपको बिना किसी सेवा कार्यान्वयन लिखने के जीआरपीसी सेवाओं को गतिशील रूप से नकल करने की अनुमति देता है .proto फ़ाइलें, और मॉक सर्वर बाकी को संभालता है - आपके प्रोटोबॉफ संदेश परिभाषाओं पर आधारित वास्तविक प्रतिक्रियाएं उत्पन्न करता है
ऑवरव्यू
जीआरपीसी सुविधा दो अनुपूरक दृष्टिकोणों को समर्थित करती है
- एचटीटीपी पर JSON ब्राउज़र के लिए उपयुक्त
- द्विआधारी प्रोटोकॉल बफर वास्तविक जीआरपीसी क्लाइंटों के साथ समान परीक्षण
दोनों दृष्टिकोण एक ही अपलोड का उपयोग करते हैं .proto परिभाषाओं और LLM
graph TD
A[Upload .proto File] --> B[Proto Parser]
B --> C[Service Definitions Stored]
C --> D{Client Request Type?}
D -->|JSON| E[JSON Endpoint]
D -->|Binary Protobuf| F[Binary Endpoint]
E --> G[LLM Generates Response]
F --> G
G --> H{Output Format?}
H -->|JSON| I[Return JSON]
H -->|Binary| J[Serialize to Protobuf]
J --> K[Return Binary Response]
त्वरित प्रारंभ
1. प्रोटो फ़ाइल अपलोड करें
पहला, एक में अपने gRPC सेवा परिभाषित करें .proto फ़ाइल:
syntax = "proto3";
package userservice;
service UserService {
rpc GetUser (GetUserRequest) returns (User);
rpc ListUsers (ListUsersRequest) returns (UserList);
rpc CreateUser (CreateUserRequest) returns (User);
}
message GetUserRequest {
int32 user_id = 1;
}
message ListUsersRequest {
int32 page = 1;
int32 page_size = 2;
optional string filter = 3;
}
message CreateUserRequest {
string name = 1;
string email = 2;
optional string phone = 3;
}
message User {
int32 id = 1;
string name = 2;
string email = 3;
optional string phone = 4;
string created_at = 5;
bool is_active = 6;
}
message UserList {
repeated User users = 1;
int32 total_count = 2;
int32 page = 3;
}
इस प्रोटो फ़ाइल को मॉक सर्वर में अपलोड करें
# Upload via plain text body
curl -X POST http://localhost:5116/api/grpc-protos \
-H "Content-Type: text/plain" \
--data-binary "@user_service.proto"
# Or upload as multipart form
curl -X POST http://localhost:5116/api/grpc-protos \
-F "file=@user_service.proto"
प्रतिक्रिया आपकी सेवा संरचना दिखाता है:
{
"message": "Proto definition uploaded successfully",
"name": "user_service.proto",
"package": "userservice",
"services": [
{
"name": "UserService",
"methods": [
{
"name": "GetUser",
"type": "Unary",
"input": "GetUserRequest",
"output": "User"
},
{
"name": "ListUsers",
"type": "Unary",
"input": "ListUsersRequest",
"output": "UserList"
},
{
"name": "CreateUser",
"type": "Unary",
"input": "CreateUserRequest",
"output": "User"
}
]
}
]
}
कॉल विधि HTTP पर JSON
त्वरित परीक्षण और ब्राउज़र के लिए
# Get a user (JSON request/response)
curl -X POST http://localhost:5116/api/grpc/UserService/GetUser \
-H "Content-Type: application/json" \
-d '{"user_id": 12345}'
LLM आपके प्रोटो परिभाषा के अनुरूप एक वास्तविक प्रतिक्रिया उत्पन्न करता है
{
"id": 12345,
"name": "Sarah Chen",
"email": "[email protected]",
"phone": "+1-555-0142",
"created_at": "2024-03-15T10:30:00Z",
"is_active": true
}
कॉल विधि 3. द्विआधारी प्रोटोकॉल बफर
सच्ची जीआरपीसी तार प्रोटोकॉल के साथ उत्पादन के लिए
# Create a binary Protobuf request (example using protoc)
echo '{"user_id": 12345}' | \
protoc --encode=userservice.GetUserRequest user_service.proto > request.bin
# Send binary request, get binary response
curl -X POST http://localhost:5116/api/grpc/proto/UserService/GetUser \
-H "Content-Type: application/grpc+proto" \
--data-binary "@request.bin" \
--output response.bin
# Decode binary response
protoc --decode=userservice.User user_service.proto < response.bin
आउटपुट
id: 12345
name: "Sarah Chen"
email: "[email protected]"
phone: "+1-555-0142"
created_at: "2024-03-15T10:30:00Z"
is_active: true
यह कैसे काम करता है
प्रोटो फ़ाइल पार्सिंग
जब आप एक अपलोड करते हैं .proto फ़ाइल, मॉक सर्वर इसे निकालने के लिए विश्लेषण करता है
- सेवा परिभाषाएँ
- आरपीसी विधि हस्ताक्षर
- संदेश प्रकार परिभाषाएँ
- क्षेत्र प्रकार और संख्याएँ
sequenceDiagram
participant Client
participant ProtoManager
participant ProtoParser
participant Storage
Client->>ProtoManager: Upload user_service.proto
ProtoManager->>ProtoParser: Parse(content)
ProtoParser->>ProtoParser: Extract syntax/package
ProtoParser->>ProtoParser: Parse services
ProtoParser->>ProtoParser: Parse messages
ProtoParser->>ProtoManager: Return ProtoDefinition
ProtoManager->>Storage: Store in ConcurrentDictionary
ProtoManager->>Client: Return success + metadata
पदवर्णक प्रोटो तत्वों को पहचानने के लिए regex-आधारित निष्कर्ष का उपयोग करता है
// Service extraction
var serviceRegex = new Regex(
@"service\s+([a-zA-Z0-9_]+)\s*\{([^}]+)\}",
RegexOptions.Singleline);
// Method extraction
var methodRegex = new Regex(
@"rpc\s+([a-zA-Z0-9_]+)\s*\(\s*(stream\s+)?([a-zA-Z0-9_.]+)\s*\)" +
@"\s*returns\s*\(\s*(stream\s+)?([a-zA-Z0-9_.]+)\s*\)");
// Message extraction
var messageRegex = new Regex(
@"message\s+([a-zA-Z0-9_]+)\s*\{([^}]+)\}",
RegexOptions.Singleline);
अनुरोध प्रबंधन प्रवाह
JSON अंतबिंदुएँ
sequenceDiagram
participant Client
participant Endpoint
participant GrpcHandler
participant ProtoManager
participant LLM
Client->>Endpoint: POST /api/grpc/UserService/GetUser<br/>(JSON body)
Endpoint->>ProtoManager: FindMethod(UserService, GetUser)
ProtoManager->>Endpoint: Return method definition
Endpoint->>GrpcHandler: HandleUnaryCall(service, method, json)
GrpcHandler->>ProtoManager: GetMessage(User)
ProtoManager->>GrpcHandler: Return message schema
GrpcHandler->>GrpcHandler: Build LLM prompt with schema
GrpcHandler->>LLM: Generate response for User message
LLM->>GrpcHandler: Return JSON response
GrpcHandler->>Endpoint: Extract and return JSON
Endpoint->>Client: JSON response
ह्यान्डलर LLM: के लिए एक विस्तृत प्रवर्धन बनाता है
var prompt = $@"You are a gRPC service mock. Generate realistic data for this response.
Service: {serviceName}
Method: {methodName}
Request: {requestJson}
Generate a response matching this structure:
{jsonShape}
Return ONLY valid JSON matching the structure above. Be creative with realistic values.";
द्विआधारी प्रोटोबॉफ़ अंतबिन्दु
sequenceDiagram
participant Client
participant Endpoint
participant GrpcHandler
participant ProtobufHandler
participant LLM
Client->>Endpoint: POST /api/grpc/proto/UserService/GetUser<br/>(Binary Protobuf)
Endpoint->>GrpcHandler: HandleUnaryCallBinary(service, method, bytes)
GrpcHandler->>ProtobufHandler: CreateJsonTemplate(inputMessage)
ProtobufHandler->>GrpcHandler: Return JSON template
GrpcHandler->>LLM: Generate response (same as JSON flow)
LLM->>GrpcHandler: Return JSON response
GrpcHandler->>ProtobufHandler: SerializeFromJson(json, outputMessage)
ProtobufHandler->>ProtobufHandler: Write Protobuf binary format
ProtobufHandler->>GrpcHandler: Return binary bytes
GrpcHandler->>Endpoint: Return binary Protobuf
Endpoint->>Client: Binary response (application/grpc+proto)
प्रोटोकॉल बफर सिरियलाइजेशन
DynamicProtobufHandler क्षेत्र परिभाषाओं के प्रयोग से JSON को द्विआधारी प्रोटोबॉफ प्रारूप में बदलता है:
public byte[] SerializeFromJson(
string json,
ProtoMessage messageDefinition,
List<ProtoMessage> allMessages)
{
var jsonDoc = JsonDocument.Parse(json);
using var stream = new MemoryStream();
using var writer = new CodedOutputStream(stream);
// Write each field according to proto definition
foreach (var field in messageDefinition.Fields.OrderBy(f => f.Number))
{
if (!jsonDoc.RootElement.TryGetProperty(field.Name, out var fieldValue))
continue; // Skip missing fields
WriteField(writer, field, fieldValue, allMessages);
}
writer.Flush();
return stream.ToArray();
}
तार प्रकार क्षेत्र प्रकार से निर्धारित किए जाते हैं
private WireFormat.WireType GetWireType(string fieldType)
{
return fieldType switch
{
"string" or "bytes" => WireFormat.WireType.LengthDelimited,
"int32" or "int64" or "uint32" or "uint64" or
"sint32" or "sint64" or "bool" => WireFormat.WireType.Varint,
"fixed32" or "sfixed32" or "float" => WireFormat.WireType.Fixed32,
"fixed64" or "sfixed64" or "double" => WireFormat.WireType.Fixed64,
_ => WireFormat.WireType.LengthDelimited // Complex/nested types
};
}
प्रबंधन API
जीआरपीसी विशेषता में प्रोटो परिभाषाओं के साथ काम करने के लिए एक पूर्ण प्रबंधन API शामिल है
सभी प्रोटोज़ सूचीबद्ध करें
curl http://localhost:5116/api/grpc-protos
प्रतिक्रिया
{
"definitions": [
{
"name": "user_service.proto",
"package": "userservice",
"syntax": "proto3",
"uploadedAt": "2025-01-05T20:30:00Z",
"serviceCount": 1,
"messageCount": 5,
"services": ["UserService"]
}
],
"count": 1
}
प्रोटो विवरण प्राप्त करें
curl http://localhost:5116/api/grpc-protos/user_service.proto
सभी सेवाओं सहित पूर्ण विवरण लौटाता है
प्रोटो मिटाएँ
curl -X DELETE http://localhost:5116/api/grpc-protos/user_service.proto
सभी प्रोटोस साफ करें
curl -X DELETE http://localhost:5116/api/grpc-protos
API अंतबिंदु संदर्भ
प्रोटो प्रबंधन अंतबिन्दु
विधि
|--------|----------|-------------|
| POST | /api/grpc-protos एक प्रोटो फ़ाइल अपलोड करें
| GET | /api/grpc-protos सभी अपलोड किए गए प्रोटो परिभाषाओं को सूचीबद्ध करें
| GET | /api/grpc-protos/{name} एक विशिष्ट प्रोटो के विवरण प्राप्त करें
| DELETE | /api/grpc-protos/{name} एक विशिष्ट प्रोटो परिभाषा मिटाएँ
| DELETE | /api/grpc-protos सभी प्रोटो परिभाषाओं को साफ करें
जीआरपीसी सेवा कॉल अंतबिन्दु
विधि
|--------|----------|-------------|
| POST | /api/grpc/{service}/{method} JSON अनुरोध के साथ विधि आह्वान करें
| POST | /api/grpc/proto/{service}/{method} | द्विआधारी प्रोटोबॉफ अनुरोध के साथ विधि आह्वान करें
उन्नत उदाहरण
जटिल Nested संदेशComment
syntax = "proto3";
package orderservice;
service OrderService {
rpc CreateOrder (OrderRequest) returns (Order);
}
message OrderRequest {
string customer_id = 1;
repeated OrderItem items = 2;
Address shipping_address = 3;
PaymentInfo payment = 4;
}
message OrderItem {
string product_id = 1;
int32 quantity = 2;
double unit_price = 3;
}
message Address {
string street = 1;
string city = 2;
string state = 3;
string postal_code = 4;
string country = 5;
}
message PaymentInfo {
string method = 1;
string last_four_digits = 2;
}
message Order {
string order_id = 1;
string customer_id = 2;
repeated OrderItem items = 3;
Address shipping_address = 4;
string status = 5;
double total_amount = 6;
string created_at = 7;
}
नेस्टेड JSON के साथ कॉल करें
curl -X POST http://localhost:5116/api/grpc/OrderService/CreateOrder \
-H "Content-Type: application/json" \
-d '{
"customer_id": "CUST-12345",
"items": [
{
"product_id": "PROD-001",
"quantity": 2,
"unit_price": 29.99
},
{
"product_id": "PROD-042",
"quantity": 1,
"unit_price": 149.99
}
],
"shipping_address": {
"street": "123 Main Street",
"city": "San Francisco",
"state": "CA",
"postal_code": "94102",
"country": "USA"
},
"payment": {
"method": "credit_card",
"last_four_digits": "4242"
}
}'
एलएलएम सभी nested क्षेत्रों को populated के साथ एक वास्तविक क्रम प्रतिक्रिया उत्पन्न करता है
दोहराई गई फील्ड्स और एरे
प्रोटो पार्सर स्वतः दोहराए गए क्षेत्रों को नियंत्रित करता है
message ProductList {
repeated Product products = 1;
int32 total_count = 2;
}
message Product {
string id = 1;
string name = 2;
double price = 3;
repeated string tags = 4;
}
बहुल नीस्टेड एरे के साथ प्रतिक्रिया
{
"products": [
{
"id": "PROD-001",
"name": "Wireless Mouse",
"price": 29.99,
"tags": ["electronics", "peripherals", "wireless"]
},
{
"id": "PROD-002",
"name": "Mechanical Keyboard",
"price": 149.99,
"tags": ["electronics", "peripherals", "gaming"]
}
],
"total_count": 47
}
कॉन्फ़िगरेशन
अपने ASP को gRPC समर्थन जोड़ें
using mostlylucid.mockllmapi;
var builder = WebApplication.CreateBuilder(args);
// Add LLMock API services (includes gRPC)
builder.Services.AddLLMockApi(builder.Configuration);
var app = builder.Build();
// Map proto management endpoints
app.MapLLMockGrpcManagement("/api/grpc-protos");
// Map gRPC service call endpoints (both JSON and binary)
app.MapLLMockGrpc("/api/grpc");
app.Run();
AddLLMockApi() विधि स्वचालित पंजीकरण करता है
ProtoDefinitionManager- अपलोड किए गए प्रोटो परिभाषाओं का प्रबंधन करता हैProtoParserपार्सेज़ फ़ाइलेंDynamicProtobufHandler- द्विआधारी प्रोटोबॉफ श्रृंखलाकरण यंत्र करता हैGrpcRequestHandler- प्रक्रिया जीआरपीसी विधि कॉल करता है
मौजूदा सीमाएं
सिर्फ यूनारी कॉल्स
वर्तमान कार्यान्वयन समर्थन करता है केवल एकल आरपीसी कॉल्स (simple request-response). Streaming methods are parsed but not yet implemented
service DataService {
// Supported
rpc GetData (Request) returns (Response);
// Not yet supported
rpc StreamData (Request) returns (stream Response);
rpc UploadData (stream Request) returns (Response);
rpc BidirectionalStream (stream Request) returns (stream Response);
}
स्ट्रीमिंग विधि को कॉल करने का प्रयास एक त्रुटि बताता है:
{
"error": "Method StreamData is not a unary call. Type: ServerStreaming"
}
सरल प्रोटोबॉफ़ विश्लेषण
द्विआधारी प्रोटोबॉफ कार्यान्वयन सरल किया गया है
पद वर्णन की मांगवर्तमान में वास्तविक द्विआधारी प्रोटोबॉफ निवेदन को विश्लेषण करने के बजाय JSON टेम्प्लेट का उपयोग करता है
प्रतिक्रिया क्रमीकरणतार प्रकारों और क्षेत्र संख्याओं के अनुसार द्विआधारी प्रोटोबॉफ प्रारूप में JSON को उचित रूप से क्रमबद्ध करता है
पूर्ण अनुरोध पद वर्णन में चर को संभालने के लिए अतिरिक्त जटिलता की आवश्यकता होगी
प्रोटो फ़ाइल प्रारूप समर्थन
पदवर्णक सामान्य प्रोटो युक्तियों को समर्थन करता है लेकिन इसकी सीमाएं हैं
समर्थित
- बुनियादी क्षेत्र प्रकार (stringM SK1 int32,int 64, uintMSC4 uinteMska5 boolMsko6 floatMsco7 doubleMsho8 bytesMko9
- दोहराए गए क्षेत्र
- वैकल्पिक क्षेत्र
- Nested संदेश @info: whatsthis
- यूनारी विधियों के साथ सेवाएं
समर्थित नहीं
- इनम (पर्सेड लेकिन वैध नहीं है
- नक्शे (अभी लागू नहीं है
- में से एक (not parsed)
- एक्सटेंशन
- विकल्प और एनोटेशन (ignored
- आयात कथन (संशोधित नहीं है
जीआरपीसी सर्वर प्रतिबिम्बन (अगामी है
मानक जीआरपीसी क्लाइंट सर्भरों से आशा करते हैं कि वे जीआरपीसी सर्वर परावर्तन प्रोटोकॉल.
मौजूदा स्थिति
- परावर्तन अवसंरचना का प्रयोग करते हुए लागू किया गया
protobuf-net.Reflection(v - प्रोटो फ़ाइलें इस पर कम्पाइल की जाती हैं
FileDescriptorSetजब अपलोड किया गया GrpcReflectionServiceसंकलित वर्णनकर्ताओं को भंडारित और प्रबंधित करता है- के साथ एकीकरण
ProtoDefinitionManagerपूर्ण
क्या काम करता है
- गतिशील प्रोटो संकलन
.protoफ़ाइलें रनटाइम पर विश्लेषण और संकलित की जाती हैं - डिस्क्रिप्टर भंडारण: FileDescriptorSet ऑब्जेक्टों को उत्पन्न और कैश किया जाता है
- प्रबंधन API
GET /api/grpc-protosसभी अपलोड प्रोटो फ़ाइलों को पूर्ण विवरण सहित सूचीबद्ध करता है - एचटीटीपी के माध्यम से पूर्ण सेवा खोज और परीक्षण
- डेमो पृष्ठ: इंटरैक्टिव यूआई सभी उपलब्ध सेवाओं और विधियों को दिखाता है
क्या प्रगति में है
- मानक जीआरपीसी परावर्तन अंतबिंदु मानचित्रण (
grpc.reflection.v1alpha.ServerReflectionसेवा - आवश्यकता के बिना पूरा grpcurl एकीकरण
-protoझंडा
तकनीकी कार्यान्वयन
जब आप एक अपलोड करते हैं .proto फ़ाइल, सिस्टम
- प्रोटो को विश्लेषण करता है regex-के आधार पर
ProtoParserके लिए JSON/HTTP अंतबिंदु - परावर्तन के लिए कम्पाइलें प्रोटोबॉफ़ का उपयोग करते हुए
FileDescriptorSet:var fileSet = new FileDescriptorSet { ImportPath = { "." } }; fileSet.Add(protoName, true, new StringReader(protoContent)); fileSet.Process(); // Compiles the .proto file - वर्णनकर्ताओं को बदलता है के बीच protobuf-net और Google.Protobuf प्रारूपों की संगतता
- दोनों प्रतिनिधित्वों को भंडारित करता है dual-प्रोकोल समर्थन के लिए
मौजूदा वर्कराउंड
# Provide proto file manually to grpcurl (always works)
grpcurl -proto yourfile.proto localhost:5116 list
# Use the JSON endpoint for testing (no grpcurl needed)
curl http://localhost:5116/api/grpc/UserService/GetUser \
-H "Content-Type: application/json" \
-d '{"user_id": 123}'
# Check available services via management API
curl http://localhost:5116/api/grpc-protos
# Use the interactive demo page at http://localhost:5116/Grpc
क्यों पूर्ण नहीं है
जीआरपीसी परावर्तन प्रोटोकॉल की आवश्यकता है:
- मानचित्रण
ServerReflectionपरावर्तन प्रश्नों को संभालने के लिए आरपीसी सेवा - सभी प्रतिबिंब विधियों का उचित कार्यान्वयन (ListServices, FileByFilenameM SK2 आदि
- ASP.NET कोर जीआरपीसी सर्वर अवसंरचना के साथ एकीकरण
आधार जगह पर है - प्रोटो फ़ाइलों को कम्पाइल किया गया और वर्णनकर्ता उपलब्ध हैं
परीक्षण रणनीति
जेसन के साथ ब्राउज़र परीक्षण
विकास के दौरान त्वरित पुनरावृत्ति हेतु
// Fetch API in browser
async function getUser(userId) {
const response = await fetch(`http://localhost:5116/api/grpc/UserService/GetUser`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ user_id: userId })
});
return await response.json();
}
const user = await getUser(12345);
console.log(user);
द्विआधारी के साथ एकीकृत परीक्षण
अधिक वास्तविक परीक्षण के लिए जो उत्पादन से मिलते हैं
#!/bin/bash
# Generate binary request
echo '{"user_id": 12345}' | \
protoc --encode=userservice.GetUserRequest user_service.proto > request.bin
# Call binary endpoint
curl -X POST http://localhost:5116/api/grpc/proto/UserService/GetUser \
-H "Content-Type: application/grpc+proto" \
--data-binary "@request.bin" \
--output response.bin
# Decode and verify
protoc --decode=userservice.User user_service.proto < response.bin
# Clean up
rm request.bin response.bin
स्वचालित परीक्षण
उदाहरण xUnit परीक्षण:
[Fact]
public async Task GrpcService_GetUser_ReturnsValidUser()
{
// Arrange
var protoContent = File.ReadAllText("user_service.proto");
await _client.PostAsync("/api/grpc-protos",
new StringContent(protoContent, Encoding.UTF8, "text/plain"));
var request = new { user_id = 12345 };
// Act
var response = await _client.PostAsJsonAsync(
"/api/grpc/UserService/GetUser", request);
// Assert
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
var user = await response.Content.ReadFromJsonAsync<JsonElement>();
Assert.True(user.TryGetProperty("id", out _));
Assert.True(user.TryGetProperty("name", out _));
Assert.True(user.TryGetProperty("email", out _));
}
त्रुटिमोचन
प्रोटो अपलोड असफल
लक्षण: प्रोटो फ़ाइल अपलोड करने में त्रुटि
{
"error": "No proto content provided"
}
समाधानसुनिश्चित करें कि आप प्रोटो फ़ाइल सामग्री सही रूप से भेज रहे हैं
- सादा पाठ के रूप में
Content-Type: text/plain - बहुभाग के रूप में
Content-Type: multipart/form-data
विधि नहीं मिला
लक्षण:
{
"error": "Method UserService/GetUser not found. Upload proto file first."
}
समाधान:
- सत्यापित प्रोटो अपलोड किया गया था
GET /api/grpc-protos - सेवा और विधि नाम ठीक से मिलते हैं जाँचें
- सुनिश्चित करें कि विधि प्रकार अनरी है (not streaming
प्रतिक्रिया में अवैध JSON
लक्षण: LLM त्रुटिपूर्ण JSON को लौटाता है
यह कभी-कभी जटिल nested संरचनाओं के साथ हो सकता है. नमूना सर्वर LLM प्रतिक्रिया से JSON को निकालने की कोशिश करता है
समाधान:
- अनुरोध पुनः प्रयास करें (LLM प्रतिक्रियाएं भिन्न हैं
- संदेश संरचना सरल करें
- अनुप्रयोग सेटिंग में LLM सही रूप से कॉन्फ़िगर किया गया है जाँचें
द्विआधारी प्रोटोबॉफ़ त्रुटि
लक्षण: द्विआधारी अंतबिंदु त्रुटियों या विरूपित डेटा को लौटाता है
समाधान:
- आप को सत्यापित करें'से अनुरोध सही एनकोड कर रहे हैं
protoc - @info: whatsthis
application/grpc+proto - सुनिश्चित करें कि प्रोटो फ़ाइल संदेश संरचना से मेल खाता है
निष्पादन विचार
प्रोटो पार्सिंग
प्रोटो फ़ाइलों को एक बार अपलोड करने पर पद वर्णन किया जाता है और स्मृति में भंडारित होता है
// Singleton storage
private readonly ConcurrentDictionary<string, ProtoDefinition> _definitions = new();
एलएलएम कॉल ओवरहेड
प्रत्येक जीआरपीसी विधि कॉल LLM अनुरोध ट्रिगर करता है
- एक ही अनुरोध के लिए कैशिंग प्रतिक्रियाओं पर विचार करें
- सामंजस्य बनाए रखने के लिए संदर्भ विशेषता का उपयोग करें
- LLM समय समाप्ति सेटिंग समायोजन करें यदि आवश्यक हो
द्विआधारी क्रमिकीकरण
द्विआधारी प्रोटोबॉफ श्रृंखलाकरण JSON के मुकाबले न्यूनतम ओवरहेड जोड़ता है
- JSON: तेज सीरियलाइजेशन
- द्विआधारी: अधिक वास्तविकता से युक्त
भावी संवर्धन
योजनाबद्ध विशेषताएँ
- सर्वर स्ट्रीमिंग - के लिए समर्थन
returns (stream Response)तरीकों - क्लाइंट स्ट्रीमिंग - के लिए समर्थन
(stream Request) returnsतरीकों - द्विआयामी प्रवाह - पूर्ण डुपलेक्स प्रवाह
- जीआरपीसी परावर्तन - उपकरण संगतता के लिए मानक प्रतिबिंब प्रोटोकॉल
- वैधता की मांग करें - इनकमिंग बाइनरी प्रोटोबॉफ अनुरोधों का विश्लेषण और सत्यापन करें
- संवर्धित प्रोटो समर्थन - EnumsM SK1 maps , oneofs, imports
- प्रतिक्रिया कैशिंग - निर्धारात्मक प्रतिक्रियाओं के लिए वैकल्पिक कैचिंग
योगदान कर रहा है
एक बग मिला या योगदान करना चाहते हैं? योगदान दिशानिर्देशों के लिए GitHub रिपोजिटरी जाँचें
सारांश
जीआरपीसी नमूना API सुविधा उन्हें लागू किए बिना जीआर पी सी सेवाओं को परीक्षण करने के लिए एक शक्तिशाली तरीका प्रदान करता है
- .प्रो फ़ाइलों को अपलोड करें और तुरंत कार्यशील नमूना सेवाएं प्राप्त करें
- या द्विआधारी प्रोटोबॉफ के बीच चुनें
- LLM-generated responses match your message schemas
- प्रोटो परिभाषाओं के लिए पूर्ण प्रबंधन API
- मौजूदा LLMock API विशेषताओं के साथ सीधा एकीकृत करता है
चाहे आप द्रुत ब्राउज़र कर रहे हों या - के आधार पर परीक्षण कर रहे हैं या व्यापक एकीकृत परीक्षण सूटों का निर्माण कर रहे है।