-
Notifications
You must be signed in to change notification settings - Fork 1
LORA_ADAPTER_METADATA
Stand: 5. Dezember 2025
Version: 1.0.0
Kategorie: Exporters
ThemisDB's JSONL LLM Exporter has been enhanced with vendor-neutral, open-source support for structured generation and comprehensive LoRA adapter metadata tracking. These improvements enable:
- Structured Generation - JSON schema validation for training data (using open-source Outlines library)
- Adapter Provenance - Complete metadata tracking for LoRA adapters (LoRAExchange.ai open standard)
- Quality Assurance - Automated quality metrics and compliance reporting
Important: This implementation uses open-source tools only (vLLM, Outlines, standard formats) with no vendor lock-in.
Open-source library for structured LLM output generation:
- JSON schema-guided generation
- Regex-based constraints
- Context-free grammar (CFG) support
- Guaranteed valid JSON output
- License: Apache 2.0
- Repository: https://github.com/outlines-dev/outlines
Open-source inference engine with native multi-LoRA support (see VLLM_MULTI_LORA_INTEGRATION.md):
- PagedAttention for efficient KV cache management
- Continuous batching with multi-LoRA support
- Dynamic adapter loading/unloading
- License: Apache 2.0
- Repository: https://github.com/vllm-project/vllm
Open standard for LoRA adapter discovery, versioning, and metadata:
- Adapter metadata format (base model, task, performance)
- Provenance tracking (training data, hyperparameters)
- Version control and discovery
- Standard: Community-driven, vendor-neutral
Validate training samples against JSON schemas before export to ensure data quality and Outlines compatibility.
#include "exporters/jsonl_llm_exporter.h"
JSONLLLMConfig config;
config.style = JSONLFormat::Style::INSTRUCTION_TUNING;
// Enable schema validation
config.structured_gen.enable_schema_validation = true;
config.structured_gen.reject_invalid_samples = true;
config.structured_gen.log_validation_errors = true;
// Define JSON schema for validation
config.structured_gen.json_schema = R"({
"type": "object",
"required": ["instruction", "output"],
"properties": {
"instruction": {"type": "string", "minLength": 10},
"output": {"type": "string", "minLength": 20},
"input": {"type": "string"}
}
})";
// Optional: Include schema in output (for Outlines runtime)
config.structured_gen.include_schema_in_output = true;
JSONLLLMExporter exporter(config);Benefits:
- Ensures training data quality
- Prevents invalid samples
- Compatible with Outlines for constrained decoding
- Detailed validation error reporting
Example Output with Schema:
{
"instruction": "What is the capital of France?",
"output": "Paris is the capital and largest city of France.",
"weight": 1.0,
"__schema__": {
"type": "object",
"required": ["instruction", "output"],
"properties": {...}
}
}Track complete adapter provenance following LoRAExchange.ai standards.
JSONLLLMConfig config;
// Enable metadata tracking
config.adapter_metadata.enable_tracking = true;
// Core identification
config.adapter_metadata.adapter_id = "themis-legal-qa-v1";
config.adapter_metadata.adapter_version = "1.2.0";
// Base model information
config.adapter_metadata.base_model_name = "mistral-7b-v0.1";
config.adapter_metadata.base_model_version = "v0.1";
// Task specification
config.adapter_metadata.task_type = "question-answering";
config.adapter_metadata.domain = "legal";
config.adapter_metadata.language = "de";
// Training configuration
auto& train = config.adapter_metadata.training_config;
train.dataset_name = "themis_legal_corpus_2024";
train.num_samples = 150000;
train.epochs = 3;
train.learning_rate = 2e-4;
train.lora_rank = 8;
train.lora_alpha = 16.0;
train.lora_dropout = 0.1;
train.target_modules = {"q_proj", "v_proj", "k_proj", "o_proj"};
// Provenance
config.adapter_metadata.created_by = "themis-ml-team";
config.adapter_metadata.data_source_uri = "themisdb://prod/legal_corpus?version=2024.11";
config.adapter_metadata.parent_adapter_id = "themis-legal-qa-v1.1";
// Custom metadata
config.adapter_metadata.custom_metadata = {
{"compliance", "GDPR-compliant"},
{"quality_score", "0.92"},
{"use_case", "legal-document-qa"}
};
JSONLLLMExporter exporter(config);Export Metadata:
// Get metadata as JSON (for storage or publishing)
std::string metadata_json = exporter.getAdapterMetadataJson();
// Save to file for LoRAExchange.ai or model registry
std::ofstream meta_file("adapter_metadata.json");
meta_file << metadata_json;Example Metadata Output:
{
"adapter_id": "themis-legal-qa-v1",
"adapter_version": "1.2.0",
"base_model": {
"name": "mistral-7b-v0.1",
"version": "v0.1"
},
"task": {
"type": "question-answering",
"domain": "legal",
"language": "de"
},
"training": {
"dataset_name": "themis_legal_corpus_2024",
"num_samples": 150000,
"epochs": 3,
"learning_rate": 0.0002,
"lora_rank": 8,
"lora_alpha": 16.0,
"lora_dropout": 0.1,
"target_modules": ["q_proj", "v_proj", "k_proj", "o_proj"]
},
"provenance": {
"created_by": "themis-ml-team",
"data_source_uri": "themisdb://prod/legal_corpus?version=2024.11",
"parent_adapter_id": "themis-legal-qa-v1.1"
},
"custom": {
"compliance": "GDPR-compliant",
"quality_score": "0.92",
"use_case": "legal-document-qa"
},
"exported_at": "2024-11-21T08:30:00Z"
}Monitor training data quality with automated metrics.
JSONLLLMConfig config;
// Enable quality metrics
config.quality_metrics.enable_metrics = true;
config.quality_metrics.track_schema_compliance = true;
config.quality_metrics.track_length_distribution = true;
config.quality_metrics.track_diversity_score = true;
JSONLLLMExporter exporter(config);
// After export
ExportStats stats = exporter.exportEntities(entities, options);
// Get quality report
std::string quality_report = exporter.getQualityMetricsReport();Example Quality Report:
{
"schema_validation": {
"total_validated": 150000,
"compliant": 148500,
"violations": 1500,
"compliance_rate": 0.99,
"recent_errors": [
"Missing required field: output",
"Field 'instruction' too short (min 10 chars)"
]
},
"length_distribution": {
"0": 150,
"100": 2500,
"200": 15000,
"300": 45000,
"400": 60000,
"500": 25000,
"600": 2350
},
"diversity_score": 0.87
}Train domain-specific adapters while tracking complete lineage:
// Legal domain adapter
JSONLLLMConfig legal_config;
legal_config.adapter_metadata.adapter_id = "themis-legal-v1";
legal_config.adapter_metadata.domain = "legal";
legal_config.adapter_metadata.task_type = "question-answering";
// Medical domain adapter
JSONLLLMConfig medical_config;
medical_config.adapter_metadata.adapter_id = "themis-medical-v1";
medical_config.adapter_metadata.domain = "medical";
medical_config.adapter_metadata.task_type = "diagnosis-support";
// Both adapters tracked independently with full provenanceTrack adapter evolution through versions:
// Version 1.0
config.adapter_metadata.adapter_version = "1.0.0";
config.adapter_metadata.parent_adapter_id = ""; // Initial version
// Version 1.1 (incremental training on new data)
config.adapter_metadata.adapter_version = "1.1.0";
config.adapter_metadata.parent_adapter_id = "themis-legal-qa-v1.0";
config.adapter_metadata.custom_metadata["changelog"] = "Added 20k recent court decisions";
// Version 2.0 (major update with different base model)
config.adapter_metadata.adapter_version = "2.0.0";
config.adapter_metadata.base_model_name = "mistral-7b-v0.2"; // Updated base
config.adapter_metadata.parent_adapter_id = "themis-legal-qa-v1.1";Ensure only high-quality, schema-compliant data is exported:
JSONLLLMConfig config;
// Strict quality requirements
config.quality.min_text_length = 50;
config.quality.max_text_length = 4096;
config.quality.skip_empty_outputs = true;
config.quality.skip_duplicates = true;
// Schema validation
config.structured_gen.enable_schema_validation = true;
config.structured_gen.reject_invalid_samples = true; // Drop non-compliant samples
config.structured_gen.json_schema = load_schema("qa_schema.json");
// Quality tracking
config.quality_metrics.enable_metrics = true;
JSONLLLMExporter exporter(config);
auto stats = exporter.exportEntities(entities, options);
// Review quality
std::cout << "Compliance rate: " << exporter.getQualityMetricsReport() << std::endl;
std::cout << "Rejected samples: " << stats.failed_entities << std::endl;Generate training data that works seamlessly with Outlines for constrained decoding:
JSONLLLMConfig config;
config.style = JSONLFormat::Style::INSTRUCTION_TUNING;
// Include schema in each sample for Outlines runtime
config.structured_gen.enable_schema_validation = true;
config.structured_gen.include_schema_in_output = true;
config.structured_gen.json_schema = R"({
"type": "object",
"required": ["instruction", "output"],
"properties": {
"instruction": {"type": "string"},
"output": {
"type": "object",
"required": ["answer", "confidence"],
"properties": {
"answer": {"type": "string"},
"confidence": {"type": "number", "minimum": 0.0, "maximum": 1.0},
"sources": {"type": "array", "items": {"type": "string"}}
}
}
}
})";
// During inference with Outlines, the schema ensures structured outputstruct StructuredGeneration {
bool enable_schema_validation = false;
std::string json_schema;
bool include_schema_in_output = false;
bool reject_invalid_samples = true;
bool log_validation_errors = true;
};struct AdapterMetadata {
bool enable_tracking = false;
std::string adapter_id;
std::string adapter_version = "1.0.0";
std::string base_model_name;
std::string base_model_version;
std::string task_type;
std::string domain;
std::string language = "en";
struct TrainingConfig {
std::string dataset_name;
size_t num_samples = 0;
int epochs = 0;
double learning_rate = 0.0;
int lora_rank = 8;
double lora_alpha = 16.0;
double lora_dropout = 0.1;
std::vector<std::string> target_modules;
} training_config;
std::string created_by;
std::string data_source_uri;
std::string parent_adapter_id;
std::map<std::string, std::string> custom_metadata;
};struct QualityMetrics {
bool enable_metrics = false;
bool track_per_sample = false;
bool aggregate_stats = true;
bool track_schema_compliance = true;
bool track_length_distribution = true;
bool track_diversity_score = true;
};bool validateAgainstSchema(const std::string& json_str, std::string* error = nullptr) const;Validate a JSON string against the configured schema.
std::string getAdapterMetadataJson() const;Export adapter metadata as JSON (LoRAExchange.ai format).
bool setAdapterMetadataFromJson(const std::string& json_str, std::string* error = nullptr);Load adapter metadata from JSON.
std::string getQualityMetricsReport() const;Get quality metrics report as JSON.
from transformers import AutoModelForCausalLM
from peft import LoraConfig, get_peft_model
import json
# Load adapter metadata from ThemisDB export
with open("adapter_metadata.json") as f:
metadata = json.load(f)
# Configure PEFT LoRA with ThemisDB metadata
lora_config = LoraConfig(
r=metadata["training"]["lora_rank"],
lora_alpha=metadata["training"]["lora_alpha"],
lora_dropout=metadata["training"]["lora_dropout"],
target_modules=metadata["training"]["target_modules"],
task_type="CAUSAL_LM"
)
# Load base model
model = AutoModelForCausalLM.from_pretrained(
metadata["base_model"]["name"]
)
# Apply LoRA
peft_model = get_peft_model(model, lora_config)import outlines
import json
# Load training sample with schema
with open("training_sample.jsonl") as f:
sample = json.loads(f.readline())
# Schema embedded in training data
schema = sample.get("__schema__")
# Use same schema during inference
model = outlines.models.transformers("mistral-7b")
generator = outlines.generate.json(model, schema)
# Guaranteed schema-compliant output
result = generator(sample["instruction"])- Keep schemas simple and focused
- Use
requiredfields sparingly - Include
minLength/maxLengthconstraints - Test schemas with representative samples
- Use semantic versioning (MAJOR.MINOR.PATCH)
- Always link to parent adapters for incremental training
- Include meaningful custom metadata
- Store metadata alongside adapter weights
- Enable schema validation for production exports
- Review quality metrics reports regularly
- Set appropriate length thresholds
- Monitor compliance rates (target >95%)
- Increment PATCH for bug fixes
- Increment MINOR for new data/features
- Increment MAJOR for base model changes
- Document changes in custom_metadata["changelog"]
- Schema validation adds ~5-10% overhead
- Metadata tracking has negligible impact
- Quality metrics tracking adds ~2-3% overhead
- Disable metrics for maximum throughput
- Integration with nlohmann/json-schema-validator for full JSON Schema support
- Automatic schema inference from sample data
- Performance metrics (eval_loss, accuracy, perplexity)
- Integration with model registries (MLflow, Weights & Biases)
- Diversity metrics (unique n-grams, topic distribution)
- Support for Outlines regex and CFG constraints
- Outlines - Structured Generation - Apache 2.0 License
- vLLM - Inference Engine - Apache 2.0 License
- PEFT - Parameter-Efficient Fine-Tuning - Apache 2.0 License
- LoRAExchange.ai - Open metadata standard
- JSON Schema - Open specification
- Predibase article on structured generation concepts (reference only, no vendor dependency)
ThemisDB 1.9.0-beta Β· Home Β· Wiki-Index Β· Module-Index Β· FAQ Β· Quick-Reference Β· GitHub Β· Issues Β· Discussions Β· License
- Batch Operations
- Best Practices
- CRUD Tutorial
- Custom Document Ingestion
- Getting Started Tutorial
- Interactive Examples
- Schema Design
- Video Tutorials
- AQL Reference
- AQL Examples
- AQL Overview
- AQL Feature Roadmap
- AQL Geospatial Guide
- AQL LLM Migration Guide
- AQL API
- AQL Grammar (EBNF)
- AQL Root Overview
- AQL Examples (root)
- API Reference
- API Module README
- OpenAPI Overview
- Client SDK Overview
- SDK Overview
- Operations
- Operations Overview
- Operations Runbook
- Operations Handbook
- ThemisCtl Admin Guide
- Pipeline E2E SOPs
- Deploy Overview
- Docker Overview
- Docker Hub README
- Helm Overview
- Packaging Overview
- Operator Overview
- Security Policy
- Production Hardening Checklist
- Security Hardening Guide
- Encryption Key Management
- Access Control Framework
- Zero Trust Policy
- API Authentication & Authorization
- HSM Production Setup
- PKCS11 Integration
- DSGVO / SOC2 Checklist
- Access Model Runbooks
- Access Model Dashboard
- Maturity Automation Runbook
- Access Review Automation
- Access Model Dashboard
- Access Model Runbooks
- Rights Revocation
- Dr Checklists
- Dr Testing
- Incident Response Playbook
- Incident Response Testing
- GPU Oom Recovery
- Grammar Debugging
- Metrics Scrape Troubleshooting
- Model Swap Procedure
- Quota Tuning
- Subagent Deployment
- Logging Configuration
- Content Model
- Crypto & Keys
- Feature Flags Reference
- Modular Architecture Roadmap
- Modularization Guide
- Module Architecture Index
- PostgreSQL Wire Protocol
- Query Scheduling
- Raft Consensus Design
- Resource Pooling
- Source Directory Guide
- Unified Access Model
- E1 001 Layered Retrieval Design
- E1 002 Ann Abstraction Strategy
- E1 003 Tensor Summary Types
- E1 004 Lora Package Distinction
- E1 005 Model Switch Compatibility
- E1 006 Federated Tensor Summaries
- E2 001 Evaluation Framework Design
- E2 002 Hardware Profile Strategy
- E2 003 Query Planner Routing Model
- E2 004 Approximation Governance Rules
- E2 005 Cross Layer Fallback Confidence Policy
- E3 001 Distributed Tensor Design
- E3 002 Manifest Coordination Strategy
- E3 003 Recovery And Erasure Choice
- E3 004 Tensor Fabric Infrastructure
- Contributing
- Contributing (root)
- Code of Conduct
- Support
- Maintainers
- CTest Guide
- Build Quick Reference
- Developer Wiki Index
- Build / Test / CI
- Module Index
- Branching Strategy
- Disabled Stub Policy
- Docs PR Policy
- GA Promotion Sign Off
- Github Milestones Setup
- Maturity Claim Verification Checklist
- Maturity Evidence Registry
- Merge Gate Bot Config
- Merge Gate Status Live
- Phase 1 Closure Report
- Phase Closure Policy
- Phase Dependency Graph
- Phase3 Enforcement Runbook
- Plugin Submodule Rollback
- PR Version Targeting
- PR Version Targeting Backfill
- Production Ready 2026 Delivery Plan
- Query Module Status
- Readme
- Release Promotion Gate Policy
- Release Validation Checklist
- Security Module 5671 Evidence Summary
- Sharding P6 Residual Risk Acceptance
- Sourcecode Compliance Governance
- Updates Development Status Sign Off
- Wave C Implementation Complete
- Blob Storage
- Cuda
- Ethics Ai
- Exporters
- Huggingface
- Image Analysis
- Importers
- RPC
- Scraper
- Themisdb Ai Watermark Detector
- User Storage Encrypted
- Chimera Architecture
- Chimera Future
- Chimera Readme
- Chimera Roadmap
- Covina Fastapi Ingestion Architecture
- Covina Fastapi Ingestion Future
- Covina Fastapi Ingestion Roadmap
- Vcc Base Architecture
- Vcc Base Future
- Vcc Base Roadmap
- Vcc Clara Ingestion Architecture
- Vcc Clara Ingestion Future
- Vcc Clara Ingestion Roadmap
- Vcc Veritas Architecture
- Vcc Veritas Future
- Vcc Veritas Roadmap
- 01 Hello World
- 02 Todo App
- 03 Contact Manager
- 04 Inventory System
- 05 Time Series Monitor
- 06 Graph Social Network
- 07 Vector Search Documents
- 08 Dms Erp System
- 09 Iot Sensor Network
- 10 Drone Image Analysis
- 11 Blog Wiki
- 12 Expense Tracker
- 13 Recipe Manager
- 14 Ecommerce Catalog
- 15 Event Management
- 16 Kanban Board
- 17 Crm
- 18 Realtime Chat
- 19 Recommendation Engine
- 20 Smart Home
- 21 Coding Platform
- 22 AQL Diagram Tool
- 23 Traveling Salesman
- 24 Moral Philosophy Debates
- API Versioning
- Distributed Sharding
- Feedback Plugins
- Geo
- Gnn
- Image Analysis
- Legal Lora Training
- LLM
- Lora Sync
- Migration
- Nlp
- Performance
- Railway
- Replication
- Rope Visualization
- Sample Product Config
- Security
- Client SDK Overview
- Quickstart
- Sdk Enhancements
- Sdk Implementation Summary
- Test Suite Readme
- Go
- Java
- Javascript
- Php
- Python
- Ruby
- Rust
- Typescript
- 01 Grundlegende Operationen
- 02 AQL Queries
- 03 Graph Daten
- 04 Multimodell Anwendung
- 01 Quickstart Guide
- 02 AQL Referenz Kurzuebersicht
- 03 Datenmodellierung Guide
- 04 Uebungsaufgaben
- 05 Best Practices Guide
- Training Documents
- Training Overview
- 01 Einfuehrung Und Uebersicht
- 02 Datenmodelle Und Architektur
- 03 AQL Abfragesprache
- 04 Installation Und Setup
- 05 Anwendungsbeispiele
- Training Presentations
- Dependencies Readme
- Processmonitor Readme
- Themis.admintools.shared Readme
- Themis.aqlquerybuilder Readme
- Themis.aqlquerybuilder Roadmap
- Themis.auditlogviewer Readme
- Themis.auditlogviewer Roadmap
- Themis.classificationdashboard Readme
- Themis.classificationdashboard Roadmap
- Themis.compliancereports Readme
- Themis.compliancereports Roadmap
- Themis.gisviewer.controlpanel Readme
- Themis.gisviewer.controlpanel Roadmap
- Themis.impactanalysisviewer Readme
- Themis.impactanalysisviewer Roadmap
- Themis.ingestiontool Readme
- Themis.ingestiontool Roadmap
- Themis.keyrotationdashboard Readme
- Themis.keyrotationdashboard Roadmap
- Themis.piimanager Readme
- Themis.piimanager Roadmap
- Themis.retentionmanager Readme
- Themis.retentionmanager Roadmap
- Themis.sagaverifier Readme
- Themis.sagaverifier Roadmap
- Themis.usbadmintool Readme
- Themis.usbadmintool Roadmap
- CI Readme
- CI Roadmap
- Compiler Diagnostics Readme
- Compiler Diagnostics Roadmap
- Completion Readme
- Copilot Ollama Router Readme
- Copilot Ollama Router Roadmap
- Gnn Readme
- Gnn Roadmap
- Rope Visualizer Readme
- Rope Visualizer Roadmap
- Tco Calculator Readme
- Tco Calculator Roadmap
- Tests Readme
- Tests Roadmap
- Themis Config Wx Readme
- Themis Docs Builder Readme
- Wikipedia Ingestion Readme