MSVC Compiler
Windows compilation verification via SSH
Overview
The MSVC verifier (JointVerifier) compiles generated C++ code on a Windows build server via SSH. This is the primary verifier for MVR mode training.
Configuration
YAML Configuration
windows:
host: "10.0.0.152"
port: 22
user: "keys"
key_path: "~/.ssh/win"
compiler:
type: "msvc"
vcvars_path: "C:\\Program Files\\Microsoft Visual Studio\\2022\\BuildTools\\VC\\Auxiliary\\Build\\vcvars64.bat"
Python Configuration
from malagent.verifiers import JointVerifier
verifier = JointVerifier(
win_host="10.0.0.152",
win_user="keys",
win_key="~/.ssh/win",
vcvars_path="C:\\Program Files\\Microsoft Visual Studio\\2022\\BuildTools\\VC\\Auxiliary\\Build\\vcvars64.bat",
timeout=30,
# New features
enable_lint=True,
track_metrics=True,
binary_cache_dir="./binary_cache"
)
Features
Lint Pre-Check
Fast rejection of obviously broken code before SSH compilation:
verifier = JointVerifier(
enable_lint=True # Default
)
Checks for:
- Missing
#include <windows.h> - Unbalanced braces
{}and parentheses() - Missing
main()orWinMain()function - Unclosed string literals
Metrics Tracking
Collect error analytics for dataset refinement:
verifier = JointVerifier(
track_metrics=True,
log_failed_samples=True # Store failed samples
)
# After training
verifier.print_stats()
# Output:
# Verifier Statistics
# ====================
# Total verifications: 1000
# Format failures: 50 (5.0%)
# Compilation failures: 350 (35.0%)
# Evaded: 600 (60.0%)
#
# Metrics:
# Avg compile time: 2.34s
# Lint failures: 45
# Time saved by lint: 105.3s
# Top errors:
# C2065: 89
# C2143: 45
# C2059: 23
Binary Caching
Persist compiled binaries locally:
verifier = JointVerifier(
binary_cache_dir="./binary_cache"
)
result = verifier.verify(prompt, completion)
if result.success:
# Binary is cached locally at:
print(result.metadata['binary_path'])
# ./binary_cache/a3f2c8b1d4e5.exe
This enables:
- Re-testing against Elastic later
- Sample analysis and debugging
- Building verified sample collections
Reward Mapping
| Outcome | Reward |
|---|---|
| Compiles clean | 1.0 |
| Compiles with warnings | 0.7 (if warn_as_error=True) |
| Compile error | 0.1 |
| Format failure | 0.0 |
Usage
Basic Usage
from malagent.verifiers import JointVerifier
verifier = JointVerifier(config_path="configs/windows_connection.yaml")
result = verifier.verify(prompt, completion)
print(f"Compiled: {result.success}, Reward: {result.reward}")
Batch Verification
results = verifier.verify_batch(
completions=[code1, code2, code3],
prompts=[prompt1, prompt2, prompt3]
)
for result in results:
print(f"Reward: {result.reward}")
CLI Usage
# Single file verification
malagent verify --code sample.cpp
# RAFT training with MSVC
malagent raft train --mode mvr --language msvc
Common Errors
| Error Code | Cause | Fix |
|---|---|---|
| C2065 | Undeclared identifier | Add missing #include or declaration |
| C2143 | Syntax error | Check for missing semicolons or brackets |
| C2059 | Unexpected token | Review expression syntax |
| LNK2019 | Unresolved external | Link required library |
| LNK1120 | Unresolved externals | Check all function implementations |
Troubleshooting
SSH Connection Failed
Error: Connection refused
- Verify Windows OpenSSH server is running
- Check firewall allows port 22
- Test with:
ssh -i ~/.ssh/win keys@10.0.0.152
MSVC Not Found
Error: 'cl' is not recognized
- Install Visual Studio Build Tools
- Verify vcvars64.bat path in configuration
- Test on Windows:
"C:\path\to\vcvars64.bat" && cl /?
Compilation Timeout
Error: Compilation timeout (>30s)
- Increase timeout:
timeout=60 - Check Windows server load
- Simplify generated code (reduce template instantiations)