LLMApi: Notes de diffusion
NOTE: Il s'agit des notes de diffusion en direct de gitHub.
Intorduction
Just the release notes from this nuget package. This is 'liveM SK2 from GitHub so will update frequently.
Notes de diffusion
v2.3.0 - Soutien du type de contenu complet
Remise en liberté: Décembre Concentration: Soutien complet du type de contenu HTTP - formulairesM SK2 téléchargement des fichiers , voies profondes
Cette version ajoute un support complet pour tous les types de contenu HTTP communs, rendant l'API-ébauche compatible avec les formulaires HTML, téléchargements de fichiers , et des chemins ensemblés complexesSSK3 Toutes les fonctionnalités utilisent la construction manuelle JSON pour M SK4NET 10 compatibilité
Principales caractéristiques
1. Forme de soutien du corps application/x-www-form-urlencoded) 🔥
Le problème est résolu: Aucun soutien pour les présentations de formulaire HTML - un type de contenu HTTP fondamental.
Solution: Conversion automatique des données du formulaire à JSON avec un évacuation approprié
Exemple d'utilisation:
curl -X POST http://localhost:5116/api/mock/users/register \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "username=john_doe&[email protected]&age=30"
Caractéristiques:
- Valeurs simples et multiples (arrays)
- Évacuation de caractères spéciaux (quotesM SK1backslashes,newlinesMSC3tabs )
- Support de Unicode et d'emojis
- Construction manuelle de JSON (sans réflexionM SK1
- Traitement des valeurs vides
Valeurs multiples:
curl -X POST http://localhost:5116/api/mock/posts \
-d "title=My Post&tags=tech&tags=programming&tags=llm"
Tag automatically converted to JSON array: ["tech", "programming", "llm"]
2. Soutien au téléchargement des fichiers multipart/form-data) 🔥
Le problème est résolu: Aucun support pour les téléchargements de fichiers - essentiel à l'essai du document/interfaces d'affichage des imagesM SK3
Solution: Memory-Safe streaming de fichiers avec extraction des métadonnées
Exemple d'utilisation:
curl -X POST http://localhost:5116/api/mock/photos/upload \
-F "title=My Photo" \
-F "description=Beautiful sunset" \
-F "[email protected]"
Caractéristiques:
- Memory-Safe Streaming: Les fichiers sont lus par le biais d’un tampon de 8KB et détournés.
- Extraction de métadonnées: Nom du fichier , type de contenu M SK2 taille , lecture des octets
- Plusieurs fichiers: charger plusieurs fichiers dans une seule demande
- Contenu mixte: Champs de formulaire + fichiers ensemble
- Soutien de fichiers importants: Étudié avec des fichiers 100MBM SK2
- Variété du type de contenu: TexteM SK1 PDF, JPEGMSC3 binaire - tous supportés
Comment cela fonctionne:
- Le contenu des fichiers est transmis et discardé (empêche le bloat de la mémoire)
- Seuls les métadonnées sont conservés et transmis à LLM
- LLM génère une réponse appropriée en fonction du contexte d'un téléchargement
Réponse par exemple:
{
"message": "File uploaded successfully",
"file": {
"fieldName": "image",
"fileName": "photo.jpg",
"contentType": "image/jpeg",
"size": 524288,
"processed": true
}
}
3. Longueurs arbitraires des voies de cheminement 🔥
Le problème est résolu: Soutien à la profondeur des voies limitées - Les APIs RESTful utilisent souvent le nidage de profondeur
Solution: Soutien complet pour les voies profondes via {**path} catch-all routing
Exemple d'utilisation:
# 9-segment deep path
curl "http://localhost:5116/api/mock/v1/api/products/electronics/computers/laptops/gaming/high-end/2024/details"
# RESTful resource structure
curl "http://localhost:5116/api/mock/v2/organizations/org-123/departments/dept-456/employees/emp-789/reviews"
# With complex query string
curl "http://localhost:5116/api/mock/products/search?category=electronics&brand=Dell&model=XPS15&price_min=1000&price_max=2500"
Caractéristiques:
- Aucune limite pratique sur la profondeur du chemin (testée à 21 segmentsM SK2
- Paramètres de la demande entièrement préservés
- Fonctionne avec toutes les méthodes HTTP (GETM SK1 POST, PUTMSC3 DELETEMST4 PATCHMst5
- Compatible avec les formulaires et les téléchargements de fichier
- LLM incorpore les segments de cheminement dans des réponses réalistes
Mise en œuvre technique
.NET 10 Compatibilité
Utilisation de toutes les caractéristiques construction manuelle de JSON pour éviter les réflexions-sérialisation basée:
// Manual JSON escaping
private static string EscapeJsonString(string str)
{
return "\"" + str
.Replace("\\", "\\\\")
.Replace("\"", "\\\"")
.Replace("\n", "\\n")
.Replace("\r", "\\r")
.Replace("\t", "\\t")
+ "\"";
}
Pourquoi le manuel?:
Mémoire-Gestion de fichiers sécuritaire
// Stream and dump file content
var buffer = new byte[8192];
long totalRead = 0;
int bytesRead;
while ((bytesRead = await stream.ReadAsync(buffer)) > 0)
{
totalRead += bytesRead;
// Content is discarded - only track size
}
Résultat: Utilisation de l'O constante(1) mémoire indépendamment de la taille du fichierM SK2
Essais approfondis
Nouveaux essaisEssais : 60 unité Suite d'essai totaleEssais : 405 Taux de passage: 100%
Évaluer les fichiers:
FormBodyHandlingTests.cs- 12 Essais de partage des formulairesJsonHandlingTests.cs- 25 essais d'évacuation et d'extraction de JSONV2_3_0_FeatureTests.cs- 23 Essais d'intégration pour les flux de travail complets
Catégories:
- Partage du corps de forme (valeurs uniquesM SK1arrées,cartes spéciales ,unicédodeMSC4mojieMST5
- Données sur les formulaires multipartites (extraction de métadonnées , champs mixtesM SK2 fichiers, grands fichiers
- Évacuation de JSON (tous les caractères spéciauxM SK1caisses à bord)
- Voies profondes ( jusqu’à 21 segments, demandes complexesPSK3 structures résistantesM SK4
- Systèmes combinés (route profonde + formulaires + fichiersMSC3
Rendement
Rendement de la mise à jour des fichiers:
- Mémoire: Constante OM SK1 - seulement 8KiB de tampon dans la mémoire
- Accroître la vitesse: Streaming permet d'extraire de grands fichiers sans bloquer
- Sécurité: Contenu jamais entreposé, empêche les attaques DoS
Rendement de la construction JSON:
- Évacuation manuelle 10-20% plus rapide que la réflexion
- Moins de collections GC
- Le comportement prévisible du temps d'exécution
Résilier les changements
✅ Aucune - Compatible entièrement à l'arrière
- Toutes les fonctionnalités existantes fonctionnent sans changement
- Aucun changement de surface API
- Configuration compatible vers l'arrière
- Régressions zéro (tous 345 Passé des essais existantsM SK2
Guide des migrations
Aucune migration n’est nécessaire! Tous les changements sont additifs:
// Existing code works as-is
builder.Services.AddLLMockApi(builder.Configuration);
app.MapLLMockApi("/api/mock");
// New content types automatically supported
// - JSON (existing)
// - Form bodies (new)
// - File uploads (new)
// - Deep paths (enhanced)
Documentation
Nouvelle documentation:
TEST_SUMMARY.md- Couplage complet des essais 60 nouveaux essaisIMPLEMENTATION_SUMMARY.md- Détails sur la mise en œuvre techniqueV2_3_0_TESTS.md- Documentation d'essai de l'intégration
Documentation mise à jour:
README.md- Nouveaux exemples d'utilisation pour les formulairesFiches ,Préquences , voies profondes- Mise à jour de la section "Qu'est-ce queM SK1Nouveau"
- Liste des caractéristiques mises à jour
- Mise à jour de la section de couverture des essais
Limites connues
- Le contenu du fichier est détourné (sans accès à LLM pour l'analyse)
- Taille maximale de fichier limitée par les paramètres ASP.NET Core (~28MB)
- Forme de nom du champ d'arrimage convention: les noms de champ répétés deviennent des tableaux
Utiliser les cas
Forme de soutien du corps:
- Examen des formulaires HTML (login,inscriptionM SK2 commentaires )
- Applications Web traditionnelles
- URL-clients API encodés
Soutien au téléchargement des fichiers:
- Utilisations de mise à jour du document
- Essais de mise à jour d'images
- Mise à jour des photos du profil
- Opérations de fichier en vrac
- Traitement des pièces jointes
Voies profondes:
- RESTful API structures
- Applications multi-tenant
- Accès hiérarchique aux ressources
- Méthodes de routage complexes
Contributeurs
Toutes les fonctionnalités v2.3.0 développées et testées par l’équipe d’API LLMock.
v2.2.0 M SK1 Outils pluggables & Pré-APIs Configurés
Concentration: MCPM SK1 Système d'outils compatible, pré-- APIs REST configurés , et mémoire contextuelle intelligente
Cette version introduit un puissant système d'outils pluggables pour appeler des API externes et poursuivre les points de fin modèles, ainsi que des définitions préconfigurées de l'API REST qui éliminent la configuration répétitive . La mémoire contextuelle est maintenant autonome- gère avec expiration automatique et extraction complète du champM SK4
Principales caractéristiques
1. Outils pluggables & Système d'actions 🔥
Le problème est résolu: Il n’est pas possible d’appeler des API externes ou des points de fin modèles de chaîne pour créer des flux de travail et des arbres décisionnels réalistes.
Solution: MCP- Système d'outils compatible avec les exécutants HTTP et Mock
Types d'outils:
Outils HTTP - Demander des API REST externes
{
"Name": "getUserData",
"Type": "http",
"HttpConfig": {
"Endpoint": "https://api.example.com/users/{userId}",
"Method": "GET",
"AuthType": "bearer",
"AuthToken": "${API_TOKEN}", // Environment variable support
"ResponsePath": "$.data" // JSONPath extraction
}
}
Outils de défectuosité - Modèles de chaîne pour les arbres décisionnels
{
"Name": "getOrderHistory",
"Type": "mock",
"MockConfig": {
"Endpoint": "/api/mock/users/{userId}/orders",
"Method": "GET",
"QueryParams": { "limit": "10" },
"Shape": "{\"orders\":[{\"id\":\"string\",\"total\":0.0}]}"
}
}
Faits clés:
- Remplacement du modèle:
{paramName}placeholders in URLs, headers, bodies - Variables environnementales:
${ENV_VAR_NAME}pour le stockage de renseignements confidentiels - Authentification: BearerM SK1 Basic, API Key support
- Extraction de JSONPath: Extraire des champs spécifiques des réponses
- Chaînement d'outils: Exécuter plusieurs outils en séquence
- Limites de sécurité: MaxToolChainDepth et MaxConcurrentTools protègent l'exécution en fuite
- Cache des résultats: Opérations de cache coûteuses par demande
- MCP Compatible: Architecture prête à l'intégration du protocole de contexte modèle
Modes d'exécution:
Disabled: Outils non disponiblesExplicit: Demande par téléphone?useTool=nameouX-Use-Toolen-tête (PhaseLlmDriven: LLM détermine les outils à appeler.
Exemple d'utilisation:
# Execute tool explicitly
GET /api/mock/user-profile?useTool=getUserData&userId=123
# Chain multiple tools
GET /api/mock/dashboard?useTool=getUserData,getOrderHistory&userId=123
# Tool results automatically merged into LLM context
Response: {
"user": { /* enriched with real API data */ },
"orders": [ /* from tool chain */ ]
}
Documentation: docs/TOOLS_ACTIONS.md (500+ lignesM SK1
2. Pré-APIs REST Configurés 🔥
Le problème est résolu: Configuration répétitive pour les patrons API communs - forme, contexteMSC3 outilsM SK4 limite de vitesseMska5 etcM Ska6
Solution: Définir toutes les configurations de l'API une fois qu'on a appelé , par nom
Exemple de configuration:
{
"RestApis": [
{
"Name": "user-profile",
"Method": "GET",
"Path": "profile/{userId}",
"Shape": "{\"user\":{},\"orders\":[],\"recommendations\":[]}",
"ContextName": "user-session",
"Tools": ["getUserData", "getOrderHistory"],
"Tags": ["users", "composite"],
"CacheCount": 5,
"RateLimitDelay": "500-1000"
}
]
}
Fonctions supportées:
- Spécification de la forme: Forme JSON ou référence à la spécification OpenAPI
- Intégration OpenAPI:
OpenApiSpec+OpenApiOperationIdpour la génération dirigée par schema- - Contexte partagé: Gestion automatique du contexte via
ContextName - Intégration des outils: Pré-configure les outils à exécuter
- Tags/Groupes: Organiser les API par catégorie
- Limitation du taux: Configuration de retard d'API par - Per
- N-Complétions: Gérer plusieurs variantes
- Enregistrement: Enabler l'écoulement d'SSE
- Simulation d'une erreur: Configuration de l'erreur de configuration
- Paramètres par défaut: Params et titres de demande
Avantages:
- Répétition zéro: Configurer une fois, utiliser partout
- Essais cohérents: La même formeM SK1contexte à l’échelle de l’équipe
- Prototypage rapide: appeler par nom au lieu des demandes de construction
- Documentation: Les APIs sont auto-documentés dans la configuration
Utilisation ( par l’intermédiaire des points de gestion - venant en version vM SK2
# List all configured APIs
GET /api/configured
# Execute configured API
GET /api/configured/user-profile?userId=123
appsettings.FullM SK1json: 8 exemples complets incluant eM SK2 flux de travail commerciaux, , APIs de surveillance et , scénarios d'essai
3. Mémoire de contexte dynamique avec expiration automatique 🔥
Le problème est résolu: Mémoire de contexte précédemment accumulé à titre indéfini , nécessitant un nettoyage manuel et pouvant causer des fuites de mémoire dans les longues sessions d'essai ou les pipelines de CD
Solution: ASP.NET Core IMemoryCache avec l'expiration progressive
// NEW: Automatic expiration with sliding window
public class MemoryCacheContextStore : IContextStore
{
private readonly IMemoryCache _cache;
private readonly TimeSpan _slidingExpiration; // Default: 15 minutes
// Contexts automatically expire after inactivity
// Every access refreshes the expiration timer
// Zero risk of memory leaks!
}
Principaux avantages:
- Nettoyage manuel zéro: Les contextes disparaissent automatiquement après 15 minutes d'inactivité
- L'expiration des Sliding: Le Timer se rétablit à chaque appel API - les contextes actifs n'expirent jamais
- Efficacité de la mémoire: parfait pour les pipelines CIM SK1CD - aucune accumulation d'état entre les essais
- Durée de configuration: Établir les heures de 5 minutes à 24 selon vos besoins
Configuration:
{
"mostlylucid.mockllmapi": {
"ContextExpirationMinutes": 15 // Default: 15 (range: 5-1440)
}
}
Paramètres recommandés:
- 5 minutes: Essais d'unités rapides , CIM SK2 Pipelines CD
- 15 minutes: Défault - Essais de développement général CSM2 recommandésCMS3
- 30 minutes: Processus de travail complexe à plusieurs étapes
- 60+ minutes: Séances d'essais exploratoires longues
2. Extraction intelligente de données partagées
Le problème est résolu: Seulement les champs en code dur (id, userId, name, email) ont été suivisM SK1 limitant la cohérence pour le domaine - champs spécifiques tels que les numéros d'articles de l'SKU M SK3 numéros de compte , codes de référence MSC5 etc.
Solution: Extraction récursive de champs qui capte Toutes champs automatiquement
Avant (vM SK1:
// Only 4 hardcoded fields extracted
{"lastId": "123", "lastUserId": "456", "lastName": "Alice", "lastEmail": "[email protected]"}
Maintenant (vM SK1:
// ALL fields extracted up to 2 levels deep
{
"orderId": "123",
"sku": "WIDGET-01",
"price": "49.99",
"customer.customerId": "456",
"customer.tier": "gold",
"customer.address.city": "Seattle", // Nested 2 levels
"items.length": "1",
"items[0].productId": "789",
"items[0].quantity": "2",
// Legacy keys still work:
"lastId": "123"
}
Nouvelles capacités:
- Objects nichés: Extraits
address.city,payment.cardNumberavec la notation de points - Traçage de l'arrée: Longueurs des tableaux de stockage (
items.length: 5) - Données sur le premier article: Captures
items[0].productIdAutomatiquement - Champs personnalisés: Tout domaine - champ spécifique est maintenant suivi
- Domaines non limités: Travaux pour l’e-commerceM SK1Commerce,FinanceMST3SantéMSC4Génématiques,, etc.
- Compatible à l'arrière: Legacy
lastId,lastUserIdles clés fonctionnent encore
Real-Impact mondial:
### Create order with SKU and tier
POST /api/mock/orders?context=checkout
Response: {"orderId": 123, "sku": "WIDGET-01", "customer": {"tier": "gold"}}
### Apply discount - automatically uses same SKU and tier!
POST /api/mock/discounts?context=checkout
Response: {
"discountId": 789,
"sku": "WIDGET-01", ← Same SKU from previous call
"customerTier": "gold", ← Same tier from previous call
"discount": 0.15
}
Le LLM voit maintenant tous extrait des champs dans le prompt et maintient la cohérence entre les données spécifiques du domaine- sans aucune configuration
Détails techniques
Système d'outils pluggables:
Configuration de l'outil (Models/ToolConfig.cs):
- Modèle de configuration détaillé pour tous les types d'outils
- Soutien pour HTTP, Mock, et types d'outils extensibles
- Systèmes de paramètre avec validation du type
- Configuration de l'interruption et du cache
Exécuteur de l'outil Http (Services/Tools/HttpToolExecutor.cs):
- Substitution de modèles dans les organes URLs, headers, en utilisant
{paramName} - Résolution variable de l'environnement avec
${ENV_VAR_NAME} - Authentication: BearerM SK1 Basic, API Key
- Extraction de la réponse JSONPath
- Traitement des erreurs globales
MockToolExecutor (Services/Tools/MockToolExecutor.cs):
- Demande d'autres paramètres finaux modèles pour les flux de travail de l'arbre décisionnel
- Appuie toutes les fonctionnalités du point final de modèle (shape , contextM SK2 etc.)
- Activer des simulations API complexes multi-step
Registre de l'outil (Services/Tools/ToolRegistry.cs):
- Dévoiler et valider les outils configurés
- Enregistrement de l'exécuteur extensible par
IToolExecutorinterface - Génie des définitions d'outils pour LLM (Phase
Instrument d'orchestre (Services/Tools/ToolOrchestrator.cs):
- Coordonner l'exécution des outils avec les limites de sécurité
- MaxToolChainDepth tracking per request (prevents infinite loops)
- Limite de MaxConcurrentTools
- Cache des résultats par demande
- Formats des résultats de la fusion du contexte LLM
Pré-APIs REST Configurés:
RestApiConfig (Models/RestApiConfig.cs):
- Modèle de définition API complet
- Appui à la référence des spécifications OpenAPI
- Intégration de l'outil, tags, paramètres par défaut
- Toutes les fonctionnalités de modèle: forme, contexteM SK2 limitation du tauxMSC3 diffusion en direct , caching
RestApiRegistry (Services/RestApiRegistry.cs):
- Charge et valide toutes les APIs configurées
- Thread-recherche de sécurité avec
ConcurrentDictionary - Auto-recharge les changements de configuration (
IOptionsMonitor) - Tag-filtration et regroupement fondés sur
- Validation: champs requis, méthodes HTTP valides , valeurs positives
Mémoire de contexte:
MemoryCacheContextStore (Services/MemoryCacheContextStore.cs):
- Utilisations
IMemoryCacheavecSlidingExpirationoption - Registres
PostEvictionCallbackpour l'enregistrement automatique de nettoyage - Thread-sécuritaire avec
ConcurrentDictionarypour le suivi des noms - Détection et suppression des entrées en suspens lors de l'énumération
OpenApiContextManager (Services/OpenApiContextManager.cs):
- Nouveau
ExtractAllFields()méthode d'extraction récursive - Extraction récursive de champs avec une profondeur configurable (defaultM SK1 2 niveaux)
- Applique les valeurs primitives et les tableaux , ,
- Rétablissement de la retenue: Longes chaînes (>100 chars) maintenant tronquées dans SharedData pour éviter les bloats
- Retour compatible avec l'extraction de champs anciens
Configuration (LLMockApiOptions.cs):
- Nouveau
Toolstableau de définitions d'outils pluggables - Nouveau
ToolExecutionModeenum (Disabled /ExplicitM SK2LlmDriven) - Nouveau
MaxConcurrentToolsetMaxToolChainDepthles limites de sécurité; - Nouveau
RestApistableau pour les définitions de l'API préconfigurée - - Nouveau
ContextExpirationMinutespropriété (défaultM SK1 15, étendue - Tous inscrits à DI via
LLMockApiExtensions.RegisterCoreServices()
Évaluation
8 Nouveaux essais dans OpenApiContextManagerTests.cs:
- ✅ Extraction dynamique de tous les champs primitives
- ✅ Extraction d'objets nichés avec la notation de points
- ✅ Traçage de la longueur de l'arrée
- ✅ Extraction du champ de l'article premier tableau
- ✅ Niveaux de nidification multiples (2 profond par défaut
- ✅ Types de données mixtes (stringsM SK2 numbersMSC3 booleans)
- ✅ Compatibilité à l'arrière avec les clés traditionnelles
- ✅ Cases de bord (Objectifs vides, valeurs nullesM SK3 limite de nidification profondeMSC4
Mise à jour de la documentation
Nouvelle documentation:
docs/TOOLS_ACTIONS.md(500+ lignesM SK1 Guide complet sur le système d'outils pluggables- Aperçu et compatibilité MCP
- Types d'outils (HTTP et Mock)
- Référence de configuration avec toutes les options
- Méthodes d'authentification (Bearer , BasicM SK2 API Key)
- Exemples d'utilisation et modèles
- Patterns d'arbre de décision avec outils de simulation
- Systèmes avancés ( logique conditionnelle , points d'achèvement dynamiques
- Phase 2/3 feuille de route (LLM-sélection d'outils pilotésM SK3 arbres décisionnels avancésMSC4
- Référence API avec les schémas TypeScript
- Troubleshooting et considérations relatives au rendement
docs/RATE_LIMITING_BATCHING.md: Guide global de limitation des taux- Options de configuration et stratégies
- N-complissements avec le battage
- Per- suivi des statistiques de point final
- Exemples d'essais de performance
Les fichiers mis à jour:
README.md: Nouvelle section v2.2.0 avec outils et API préconfigurésappsettings.Full.json: Exemples complets pour:- Configuration des outils 5 ( Outils HTTP et Mock
- 8 pré-définitions de REST API configurées
- Exemples d'authentification de l'outil
- Patterns d'arbre de décision
LLMApi.http: 20+ nouveaux exemples de demande HTTP- Exécution de l'outil par le biais des paramètres et des titres de demande
- Exemples de substitution des modèles
- Méthodes de recherche d'outils
- Exemples d'authentification
- Extraction de JSONPath
- Surveillance du rendement
docs/API-CONTEXTS.md: Réécriture complète de l’entreposage du contexte et d’extraction des données partagées- Architecture IMemoryCache
- Le comportement d'expiration en cascade
- Exemples d'extraction dynamique
- Cases d'utilisation Real-world avec des données nested
CLAUDE.md: Mise à jour avec toutes les nouvelles options de configuration- Outils & Configuration des actions
- Pre-APIs REST configurés
- Paramètres d'expiration du contexte
Résilier les changements
Aucune - Compatible complètement à l'arrière avec v2.1.0:
- Extraction de champs hérités (
lastId,lastUserId, etc .) fonctionne toujours - Le code de contexte existant continue à fonctionner sans changement
- Les nouvelles fonctionnalités sont automatiques - aucun changement de code n'est nécessaire
Guide des migrations
Aucune migration n’est nécessaire! Améliorer et profiter des avantages automatiques:
- Expiration du contexte: Les contextes automatisés - se nettoient maintenant eux-mêmes
- Extraction améliorée: Automatique - tous les champs sont maintenant suivis
Optionnel: Configurer le temps d'expiration si par défaut 15 minutes ne convient pas à votre flux de travail'
{
"mostlylucid.mockllmapi": {
"ContextExpirationMinutes": 30 // Increase for longer test sessions
}
}
Impact sur le rendement
Utilisation de la mémoire: Réduction globale en raison de l'expiration automatique
- Les contextes ne s'accumulent plus indéfiniment
- CI/Les pipelines de CD restent en mémoire
- Long-services d'exploitation autonomeM SK1clean
Frais d'extraction: Minimale (< 1ms par réponseM SK3
- L'extraction récursive est hautement optimisée
- Fonctionne seulement sur les réponses avec des contextes
- Limite de profondeur empêche la récursion en train d'échouer
Utilisation des tokens: légèrement augmenté
- Plus de champs dans les données partagées = prompts légèrement plus longs
- Augmentation typique: M SK1 tokens par contexte
- Offset par expiration automatique (moins de contextes globaux)
Compatibilité
- Compatible intégralement à l'arrière avec v2.1.0
- Toutes les fonctionnalités existantes continuent de fonctionner
- Aucun changement de rupture
- Mise à niveau-in-place recommandée
v2.1.0 M SK1 ≥- Qualité & Version de validation
Concentration: Amélioration de la fiabilité , essais complets M SK2 et meilleure expérience des développeurs
Cette version met l’accent sur l’amélioration de la fiabilité des chunks, fournissant un outil exhaustif de validation , et rationalisant la gestion de la configurationM SK2 Toutes les fonctionnalités de v2.0 demeurent pleinement compatiblesMSC4
Principales améliorations
1. Suite complète de validation HTTP
- 70+ Cas d'essai: Protection complète de la validation dans
LLMApi.http- Gestion de l'API Open (loadM SK1 list, getMSC3 unload , describeMST5
- Gestion du contexte de l'API (créer, mettre à jour , pauseM SK3 renouveler
- gRPC proto management (uploadMSC1 list, getM SK3 servicesMST4 callMSL5
- Validation continue de l'écoulement SSE
- Essais de cartographie avec des larges tableaux
- Historique du contexte et descriptions personnalisées
- Choix du backend (X-LLMM SK2Header de l'arrière-plan
- Validation du schéma (includeSchema + XM SK2Response-SchemaMSC4
- Validation des caractéristiques combinées
- Simulation des erreurs (codes d'erreur HTTP compréhensifs)
2. Amélioration de la fiabilité du processus de fabrication
- Formatage de l'arrée explicite: Des prompts améliorés avec des instructions explicites pour la génération d'arréaux JSON à l'aide d'un ultra-
- Des règles de formattage critiques ont été ajoutées
PromptBuilder.cs: " Votre premier caractère DOIT être [" - Formatage renforcé de l'arrée dans
ChunkingCoordinator.csContexte de l'article - Prévient la comma- sortie d'un objet séparé (eM SK2g .,
{...},{...}au lieu de[{...},{...}])
- Des règles de formattage critiques ont été ajoutées
- Amélioration de l'instruction suivante: Amélioration des directives pour les LLM lors de demandes multiples
- Limites connues: Modèle documenté
docs/OLLAMA_MODELS.md)
3. Simplification de la configuration
- Nettoyage
appsettings.json: Commentaires sur le modèle verbose retirés , structure plus propre docs/OLLAMA_MODELS.md: Nouveau guide de référence complet (285 lignes- 10+ configurations de modèles avec des exigences matérielles
- Lignes directrices sur la température pour différents cas d'utilisation
- Recommandations en matière de taille des fenêtres contextuelles
- Exemples de configuration multi-backend
- Guide de troubleshooting pour la résolution des problèmes
- Instructions d'installation du modèle
4. Amélioration de la documentation
- Documentation complète de l'évacuateur: Tous les points de gestion 25+ ont maintenant des dossiers Swagger complets
- Tag organisation (OpenAPI Management,Contextes APIM SK2gRPCMST3 etcMSC4
- Résumés et descriptions détaillées
- Demande/exemples de réponse
- Référence à l'API de backend: Nouveau
docs/BACKEND_API_REFERENCE.md(600+ lignesM SK1- Documentation finale complète
- Paramètres de recherche et référence des titres
- Formats de réponse d'erreurs
- Documentation du centre SignalR
Fixes de bogues
- Fixé problème d'encodage URL dans le test HTTP pour les descriptions des points de fin OpenAPI (
:,/,{,}caractères)
Les fichiers sont modifiés
Changements de code:
mostlylucid.mockllmapi/Services/PromptBuilder.cs: Instructions de formattage des tableaux améliorésmostlylucid.mockllmapi/Services/ChunkingCoordinator.cs: Formatage additionnel de tableaux dans le contexte du tronçon (line 447)LLMApi/appsettings.json: Configuration simplifiée
Nouvelle documentation:
docs/OLLAMA_MODELS.md: Guide de configuration détaillé du modèledocs/BACKEND_API_REFERENCE.md: Référence API de gestion complète
Dossiers mis à jour:
LLMApi/LLMApi.http: Étendue de la ligne 448 à la ligne 847
Limites connues
Concentration à haute température:
- Les LLM peuvent générer des objets séparés par comma-au lieu de tableaux à température 1.2+
- Méthodes de recours:
- Température inférieure à 0.8-1.0 pour les demandes ponctuelles
- Utiliser llama3.2:3b ou mistralM SK1nemo (instructions meilleures aprèsMSC3
- Réduire le nombre d'articles pour éviter la fragmentation
- Disable auto-chunking with
?autoChunk=false
Voir docs/OLLAMA_MODELS.md pour une solution détaillée des problèmes.
Compatibilité
- Compatible intégralement à l'arrière avec v2.0.0
- Toutes les fonctionnalités existantes continuent de fonctionner
- Aucun changement de rupture
v2.0.0 M SK1 ≥- MAJOR RELEASE
Aucun changement important - En dépit de l’écrasement majeur des versions, tous les codes existants continuent à fonctionner.
Il s’agit d’un important jalon de lancement qui transforme l’API LLMock en une production complète, - plate-forme pour le moquage réalisteM SK2 Version 2.0 ajoute des modes d’écoulement SSE réalistesMST4 multiMSC5 balayage du chargement de la backendMSM6 sélection globale de la Backend MSM7 et documentation exhaustiveMMSC8
Principales caractéristiques
1. Modes réels d'écoulement de l'SSE MAJORM SK2
Trois modes distincts de diffusion SSE pour tester différents modèles API réels
Mode LlmTokens (Définition par défaut - Compatible à l'arrière
- Token-by-token streaming pour les interfaces de chat AI
- Format:
{"chunk":"text","accumulated":"fulltext","done":false} - Case à utiliser: Utilisation d'interfaces de chatbot pour tester les applications LLM
Mode des objectifs complets (NEWM SK1
- Remplir les objets JSON en tant que événements distincts de l'SSE
- Format:
{"data":{object},"index":0,"total":10,"done":false} - Case d'utilisation: TwitterM SK1X API, stock tickersMSC3 realMST4time feeds , IoT sensors
Mode d'ArrayItems (NEWM SK1
- Éléments d'arrée avec des métadonnées riches
- Format:
{"item":{object},"index":0,"total":100,"arrayName":"users","hasMore":true,"done":false} - Case à utiliser: Résultats pagenésM SK1 exportations en vrac, résultats de recherche
Configuration:
{
"MockLlmApi": {
"SseMode": "CompleteObjects" // LlmTokens | CompleteObjects | ArrayItems
}
}
Per-Request Override:
GET /api/mock/stream/users?sseMode=CompleteObjects
GET /api/mock/stream/data?sseMode=ArrayItems
GET /api/mock/stream/chat?sseMode=LlmTokens
Exemple de client (Objects complets):
const eventSource = new EventSource('/api/mock/stream/users?sseMode=CompleteObjects');
eventSource.onmessage = (event) => {
const response = JSON.parse(event.data);
if (response.done) {
console.log('Complete!');
eventSource.close();
} else {
console.log(`User ${response.index + 1}/${response.total}:`, response.data);
// response.data contains the complete user object
}
};
Équilibrage des charges de l'arrière-plan (MAJOR
Distribuer les demandes à travers plusieurs backends de LLM pour un haut débit:
Configuration:
{
"MockLlmApi": {
"Backends": [
{
"Name": "ollama-llama3",
"Provider": "ollama",
"Weight": 3,
"Enabled": true
},
{
"Name": "ollama-mistral",
"Provider": "ollama",
"Weight": 2,
"Enabled": true
},
{
"Name": "lmstudio-default",
"Provider": "lmstudio",
"Weight": 1,
"Enabled": true
}
]
}
}
SignalR Hub with Load Balancing:
{
"HubContexts": [
{
"Name": "high-throughput-data",
"BackendNames": ["ollama-llama3", "ollama-mistral", "lmstudio-default"]
}
]
}
Caractéristiques:
- Distribution pondérée derobin
- Per-request de sélection du backend
- Failover automatique par défaut si les backends ne sont pas disponibles
- Travaille avec SignalR, SSE, RESTM SK2 et GraphQL
3. Selection globale de l'arrière-plan
Per-Request Selection (Methodologies multiples):
# Via query parameter
GET /api/mock/users?backend=openai-gpt4
# Via header
GET /api/mock/users
X-LLM-Backend: openai-gpt4
# SignalR hub context
{
"HubContexts": [
{
"Name": "analytics",
"BackendName": "openai-gpt4-turbo"
}
]
}
Multiples fournisseurs simultanément:
- Ollama (modèles locauxM SK1
- OpenAI (cloud API)
- LM Studio (server local)
- Mistral-Nemo (128k contexteM SK2
4. MistralM SK1Nemo 128k Soutien du contexte
Configuration pour Mistral-Nemo avec massive 128k context windowM SK2
{
"Backends": [
{
"Name": "ollama-mistral-nemo",
"Provider": "ollama",
"ModelName": "mistral-nemo",
"MaxTokens": 128000,
"Enabled": true
}
]
}
Utiliser les cases:
- Gérer des milliers de documents détaillés dans une seule demande
- Structures de données ensemencées complexes avec des relations profondes
- Opérations de gros lots (utiliser avec
MaxItems=10000+) - Ensembles de données d'essai exhaustifs
- Demandes de GraphQL avec des champs étenduement ensemblés
Exemple de SignalR:
{
"HubContexts": [
{
"Name": "massive-dataset-128k",
"Description": "Massive dataset generation with 128k context",
"BackendName": "ollama-mistral-nemo"
}
]
}
5. Swagger/OpenAPI UI
Interactive API documentation avec Swagger UI:
- L'interface de Swagger: Disponible à
/swagger - Spécification OpenAPI: AutoM SK1générée à partir de points finals
- Essais interactifs: Essayez les points finals directement dans le navigateur
- Descriptions détaillées: Documentation complète pour tous les points finals
- Navigation: Lien vers le titre de la page de démonstration
Activer dans le programme.cs:
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
app.UseSwagger();
app.UseSwaggerUI();
Révision de la documentation
Nouveaux fichiers de documentation
docs/SSE_STREAMING_MODES.md(2,500+ lignesM SK1 - Guide complet de l'SSE- Explication détaillée des trois modes
- Exemples de code client pour chaque mode
- Utiliser la matrice de décision des cas
- Tableaux de comparaison
- Guide des migrations
- Section Troubleshooting
LLMApi/SSE_Streaming.http- 30+ Examples HTTP pour les modes SSE- Exemples pour les trois modes SSE
- Exemples de fonctionnalités combinées (selection du backend,contexte
- Usages pratiques (tickers de stockM SK1 exportations en vrac, registresMSC3
- Exemples de code JavaScript du client
Documentation mise à jour
docs/CONFIGURATION_REFERENCE.md- Section des modes d'SSE ajoutéedocs/MULTIPLE_LLM_BACKENDS.md- Amélioré par balayage de la chargeappsettings.Full.json- Exemples de mode SSE ajoutés et Mistral
🧪 Amélioration des essais
Nouvelle couverture d'essai:
- Essais de mode SSE 22 (tous les passagesM SK1
- Validation de la valeur d'Enum
- Analyse de la configuration
- Supprimer le paramètre de la demande
- Validation du format d'événement pour tous les modes
- Case-parsage insensible
Suite d'essai totale:
- Essais 218 (213 PassationM SK1 5 Essais gRPC ont été abandonnés)
- Nulle erreur de compilation ou mises en garde
- Compatibilité ultérieure complète vérifiée
🔧 Améliorations de configuration
Nouvelles options de configuration:
{
"MockLlmApi": {
// SSE Streaming Modes (NEW)
"SseMode": "LlmTokens", // LlmTokens | CompleteObjects | ArrayItems
// Multiple LLM Backends with Load Balancing (v1.8.0)
"Backends": [
{
"Name": "backend-name",
"Provider": "ollama", // ollama | openai | lmstudio
"BaseUrl": "http://localhost:11434/v1/",
"ModelName": "llama3",
"ApiKey": null,
"MaxTokens": 8192,
"Enabled": true,
"Weight": 3, // For load balancing
"Priority": 10
}
],
// Legacy Single Backend (Still Supported)
"BaseUrl": "http://localhost:11434/v1/",
"ModelName": "llama3",
// Auto-Chunking (v1.8.0)
"EnableAutoChunking": true,
"MaxInputTokens": 4096,
"MaxOutputTokens": 2048,
"MaxItems": 1000,
// Streaming Configuration
"StreamingChunkDelayMinMs": 0,
"StreamingChunkDelayMaxMs": 0,
// Cache Configuration
"CacheSlidingExpirationMinutes": 15,
"CacheAbsoluteExpirationMinutes": 60,
"MaxCachePerKey": 5
}
}
🌍 Variables environnementales
Soutien global des variables environnementales avec une documentation complète:
# SSE Mode
export MockLlmApi__SseMode="CompleteObjects"
# Backend Selection
export MockLlmApi__Backends__0__Name="ollama-llama3"
export MockLlmApi__Backends__0__Provider="ollama"
export MockLlmApi__Backends__0__BaseUrl="http://localhost:11434/v1/"
export MockLlmApi__Backends__0__ModelName="llama3"
export MockLlmApi__Backends__0__Enabled="true"
export MockLlmApi__Backends__0__Weight="3"
# SignalR Hub Contexts with Backend Selection
export MockLlmApi__HubContexts__0__Name="analytics"
export MockLlmApi__HubContexts__0__BackendName="openai-gpt4-turbo"
# Or load balancing
export MockLlmApi__HubContexts__1__BackendNames__0="ollama-llama3"
export MockLlmApi__HubContexts__1__BackendNames__1="ollama-mistral"
📦 Nouveaux fichiers
Mise en œuvre de base:
mostlylucid.mockllmapi/Models/SseMode.cs- Enum du mode SSEmostlylucid.mockllmapi/Services/Providers/ILlmProvider.cs- Interface des fournisseursmostlylucid.mockllmapi/Services/Providers/OllamaProvider.cs- Fournisseur Ollamamostlylucid.mockllmapi/Services/Providers/OpenAIProvider.cs- Officier OpenAImostlylucid.mockllmapi/Services/Providers/LMStudioProvider.cs- Fournisseur de Studio LMmostlylucid.mockllmapi/Services/Providers/LlmProviderFactory.cs- Fabrication de fournisseursmostlylucid.mockllmapi/Services/LlmBackendSelector.cs- Logique de sélection du backend
Essais:
LLMApi.Tests/SseModeTests.csEssais de mode SSE
Documentation:
docs/SSE_STREAMING_MODES.md- Guide complet de l'SSE 2,500+ lignesM SK2LLMApi/SSE_Streaming.httpExemples de SSE
📝 Dossiers mis à jour
Services de base:
mostlylucid.mockllmapi/LLMockApiOptions.cs- AjoutéSseModepropriété,LlmBackendsTableau 1mostlylucid.mockllmapi/RequestHandlers/StreamingRequestHandler.cs- Routage du mode SSE ajoutémostlylucid.mockllmapi/Services/LlmClient.cs- Surcharges supplémentaires de sélection du backend ajoutéesmostlylucid.mockllmapi/Services/MockDataBackgroundService.cs- Ajout de la sélection du backend SignalRmostlylucid.mockllmapi/Models/HubContextConfig.cs- AjoutéBackendNameetBackendNames
Documentation:
README.md- Mise à jour à v2.0, liste complète des fonctionnalitésdocs/CONFIGURATION_REFERENCE.md- Modus SSE et sélection de backend ajoutésdocs/MULTIPLE_LLM_BACKENDS.md- Amélioré avec des exemples d'équilibre de la chargeappsettings.Full.json- Exemples détaillés ajoutés
Application de démonstration:
LLMApi/Program.cs- Configuration de Swagger ajoutéeLLMApi/Pages/_Layout.cshtml- Lien UI de Swagger ajouté
🎨 Exemples de cas d'utilisation
Stock Market Feed (Objects complets):
GET /api/mock/stream/stocks?sseMode=CompleteObjects&shape={"ticker":"AAPL","price":150.25,"change":2.5}
Exportation de marchandises en vrac (ArrayItems):
GET /api/mock/stream/export-customers?sseMode=ArrayItems&shape={"customers":[{"id":"string","name":"string"}]}
Interface de chat AI (LlmTokens):
GET /api/mock/stream/chat?sseMode=LlmTokens&shape={"message":"Hello!"}
High-Senseurs IoT à haut débit M SK1Load Balanced):
{
"HubContexts": [
{
"Name": "iot-sensors",
"BackendNames": ["ollama-llama3", "ollama-mistral", "lmstudio-default"]
}
]
}
Ensemble de données massives avec 128k Contexte
GET /api/mock/stream/bulk-data?sseMode=ArrayItems&backend=ollama-mistral-nemo
Migration de v1.x
Aucun changement de code requis!
Version 2.0 est compatible 100% vers l'arrière avec vM SK2x:
// v1.x code - still works exactly the same
builder.Services.AddLLMockApi(builder.Configuration);
app.MapLLMockApi("/api/mock", includeStreaming: true);
// SSE streaming defaults to LlmTokens mode (original behavior)
// Legacy single backend config (BaseUrl/ModelName) still works
Opt-Introduction aux nouvelles fonctionnalités:
// Same setup, just update appsettings.json
{
"MockLlmApi": {
"SseMode": "CompleteObjects", // Switch to realistic streaming
"Backends": [...] // Add multiple backends
}
}
Résilier les changements
NONE!
En dépit de la version majeure de 2.0,, il n’y a aucune modification de rupture.
- Le mode SSE par défaut est
LlmTokens(conduite originaleM SK1 - L'héritage
BaseUrl/ModelNameconfig encore supporté - Tous les points de fin existants fonctionnent sans changement
- Tous les tests existants réussissent
- La compatibilité ultérieure totale est maintenue
📈 Amélioration du rendement
- Balancing des charges multi-Backend: Distribuer la charge sur plusieurs instances LLM
- Tour pondéré-Robin: Distribution intelligente basée sur les fonctionnalités de backend
- Backend-Limitations spécifiques des tokens: Optimiser les capacités de chaque modèle
- Mode des objectifs complets: Moins d’événements SSE = moins de frais généraux que le token
Pourquoi la version 2.0?
Cette version représente une transformation fondamentale:
v1.xM SK1 Mock API avec génération à puissance LLM-
- Un seul backend LLM
- Un mode d'écoulement SSE
- Configuration de base
v2.0: Production-Ready Mock Platform
- Multiple LLM backends with load balancing
- Trois modes d'écoulement SSE réalistes
- Choix intégral du backend
- Production-configuration à l'échelle M SK1k contextes)
- Enterprise-documentation prête
- Documentation API interactive (Swagger)
Version 2.0 positionne LLMock API comme une plate-forme de remorquement complète capable de traiter la production-exigences d'essai à grande échelle dans divers cas d'utilisationM SK2
Documentation complète
- Modes d'écoulement SSE - Guide complet sur les modes SSE
- Multiple LLM Backends - Guide de configuration du backend
- Référence de configuration - Toutes les options de configuration
- Exemples HTTP - PréparéM SK1à-exemples de SSE
- Enregistrement et saisie - AutoM SK1guide de sauvetage
- Contextes de l'API - Guide de gestion du contexte
- Soutien gRPC - Guide de montage gRPC
- README - Démarrage rapide et aperçu
🙏 Merci
Merci à tous les utilisateurs et contributeurs qui ont aidé à transformer l’API LLMock en une plate-forme de montage complète. Votre rétroaction et vos cas d’utilisation ont conduit ces améliorations!
v1.8.0 M SK1
Voir les notes de mise à jour précédentes pour v1.8.0 fonctions M SK1Support multiple du backend LLM, Demande automatisée de saisie de fichiersMSC3 Configuration améliorée des caches ).
Publications antérieures
Voir l’historique complet de la mise à jour ci-dessous pour v1.7.xM SK1 v 1.6.x≥, v\1.5.x , et les versions antérieuresMSC6