Generative Models
Entrenar provides Generative Adversarial Networks (GANs) for code synthesis.
Architecture
Latent Vector z ─┬─► Generator ─► AST Tokens ─┬─► Discriminator ─► Valid/Invalid
│ │
│ Real AST Samples ────────┘
│
└── (sampled from N(0, I))
Key Components
Generator
- Maps latent vectors to Rust AST token sequences
- MLP architecture with configurable hidden layers
- Xavier/He initialization for stable training
Discriminator
- Classifies code as real (valid) or fake (invalid)
- Token embedding + MLP architecture
- Binary cross-entropy loss
Latent Space
- Standard normal distribution sampling
- SLERP interpolation for smooth transitions
- Supports latent space exploration
Quick Start
#![allow(unused)] fn main() { use entrenar::generative::{CodeGan, CodeGanConfig}; let config = CodeGanConfig::default(); let mut gan = CodeGan::new(config); // Generate code samples let latent = gan.sample_latent(10); for z in &latent { let code = gan.generator.generate(z); println!("{:?}", code); } }
Use Cases
- Code Completion: Generate likely next tokens
- Data Augmentation: Create synthetic training data
- Novelty Search: Explore code generation space
- Transfer Learning: Pre-train on code distributions