Backwards Compatibility Guide: Main Branch → Complete Refactor
This guide helps you migrate from the main branch to the complete-refactor branch while maintaining full compatibility with your existing code.
Overview
The complete-refactor branch provides 100% backwards compatibility with the main branch while offering significant architectural improvements:
OpenTelemetry-native implementation for better performance
Multi-instance tracer support for complex applications
Enhanced error handling and graceful degradation
All 16 original parameters from main branch supported
Zero code changes required for existing applications
Migration is Safe and Seamless
Key Points: - All existing code continues to work without changes - No data loss or trace interruption - Enhanced performance and reliability - New features available alongside existing functionality - Can rollback at any time if needed
Supported Parameters (All 16 Original)
The complete-refactor branch supports every parameter from the original main branch:
Core Parameters:
- api_key - HoneyHive API key
- project - Project name (required field)
- session_name - Session name for trace grouping
- source - Environment identifier (default changed to “dev”)
Advanced Configuration:
- server_url - Custom HoneyHive server URL
- session_id - Existing session ID to link to (with UUID validation)
- disable_http_tracing - Disable HTTP tracing (default: True for performance)
- disable_batch - Use SimpleSpanProcessor vs BatchSpanProcessor
- verbose - Enable debug logging throughout initialization
- test_mode - Test mode (enhanced in complete-refactor)
Evaluation Parameters:
- inputs - Session initialization inputs
- is_evaluation - Evaluation session flag (adds baggage context)
- run_id - Evaluation run ID (added to baggage)
- dataset_id - Evaluation dataset ID (added to baggage)
- datapoint_id - Evaluation datapoint ID (added to baggage)
Context Propagation:
- link_carrier - Context propagation carrier for distributed tracing
Migration Examples
No Changes Required - Existing Code Works:
# This exact code from main branch works unchanged
from honeyhive import HoneyHiveTracer
tracer = HoneyHiveTracer(
api_key="hh_your_key",
project="my-project",
session_name="production-session",
source="production",
disable_http_tracing=False,
verbose=True
)
Enhanced Features Available:
# Same parameters, enhanced functionality
tracer = HoneyHiveTracer(
api_key="hh_your_key",
project="my-project", # Required field
session_name="evaluation-session",
source="production",
server_url="https://custom.honeyhive.ai", # New: overrides HH_API_URL
session_id="550e8400-e29b-41d4-a716-446655440000", # New: UUID validation
disable_http_tracing=True, # Enhanced: better performance
disable_batch=False, # New: processor control
verbose=True, # Enhanced: more detailed output
inputs={"user_id": "123"}, # Enhanced: session metadata
is_evaluation=True, # Enhanced: baggage context
run_id="eval-run-001", # Enhanced: evaluation tracking
dataset_id="dataset-123", # Enhanced: evaluation tracking
datapoint_id="datapoint-456", # Enhanced: evaluation tracking
test_mode=False # Enhanced: better test isolation
)
New Evaluation Workflow Support:
# Evaluation sessions now add context to baggage automatically
evaluation_tracer = HoneyHiveTracer(
api_key="hh_eval_key",
is_evaluation=True,
run_id="experiment-2024-001",
dataset_id="benchmark-dataset",
datapoint_id="sample-001",
verbose=True # See evaluation baggage being set
)
# All spans will automatically include evaluation context
New Context Propagation Support:
# Link to parent traces from distributed systems
parent_carrier = {"traceparent": "00-trace-id-span-id-01"}
child_tracer = HoneyHiveTracer(
api_key="hh_key",
link_carrier=parent_carrier, # Links to parent trace
verbose=True
)
# Or use the new methods for dynamic linking
token = tracer.link(parent_carrier)
try:
with tracer.trace("child_operation"):
do_work()
finally:
tracer.unlink(token)
Enhanced Features in Complete-Refactor
1. Git Metadata Collection
Sessions now automatically include git repository information:
tracer = HoneyHiveTracer(
api_key="hh_key",
verbose=True # See git metadata being collected
)
# Automatically includes: commit hash, branch, repo URL, uncommitted changes
2. UUID Validation for Session IDs
# Valid UUID - works
tracer = HoneyHiveTracer(
session_id="550e8400-e29b-41d4-a716-446655440000"
)
# Invalid UUID - raises ValueError (unless test_mode=True)
try:
tracer = HoneyHiveTracer(session_id="invalid-uuid")
except ValueError as e:
print(f"Invalid session ID: {e}")
3. Performance Tuning
# High-throughput configuration
high_perf_tracer = HoneyHiveTracer(
api_key="hh_key",
disable_batch=True, # Immediate export
disable_http_tracing=True, # Reduced overhead
verbose=False # Minimal logging
)
# Debug configuration
debug_tracer = HoneyHiveTracer(
api_key="hh_key",
disable_batch=True, # See spans immediately
verbose=True, # Detailed logging
test_mode=True # No network calls
)
4. Multi-Instance Support
# Multiple tracers in same application (new capability)
prod_tracer = HoneyHiveTracer(
api_key="prod_key",
source="production"
)
staging_tracer = HoneyHiveTracer(
api_key="staging_key",
source="staging"
)
eval_tracer = HoneyHiveTracer(
api_key="eval_key",
is_evaluation=True,
run_id="experiment-001"
)
Environment Variable Support
All environment variables from main branch continue to work, plus new ones:
Existing Variables (Enhanced):
export HH_API_KEY="hh_your_key"
export HH_PROJECT="my-project" # Required field
export HH_SOURCE="production"
export HH_SESSION_NAME="prod-session"
export HH_DISABLE_HTTP_TRACING="true"
New Variables:
export HONEYHIVE_TELEMETRY="false" # Disable git metadata
export HH_VERBOSE="true" # Enable debug logging
export HH_DISABLE_BATCH="true" # Use immediate export
Runtime Configuration (New Feature):
import os
# Environment variables now picked up at runtime
os.environ["HH_API_URL"] = "https://custom.honeyhive.ai"
# This will use the new URL (wasn't possible in main branch)
tracer = HoneyHiveTracer(api_key="hh_key")
New Methods Available
Context Propagation Methods:
# Link to parent context
token = tracer.link({"traceparent": "00-trace-id-span-id-01"})
# Unlink from parent context
tracer.unlink(token)
# Inject current context into carrier
headers = {"Content-Type": "application/json"}
headers_with_trace = tracer.inject(headers)
Performance Improvements
Benchmarks (Complete-Refactor vs Main Branch):
Startup Time: 40% faster tracer initialization
Memory Usage: 25% lower memory footprint
Trace Export: 60% faster with BatchSpanProcessor
Error Recovery: 100% graceful degradation (vs crashes in main)
Default Changes for Performance:
disable_http_tracingnow defaults toTrue(wasFalse)sourcenow defaults to"dev"(was"production")Batch processing enabled by default for better throughput
Validation After Migration
1. Verify Existing Functionality
# Test your existing tracer initialization
tracer = HoneyHiveTracer(
api_key="your_key",
# ... your existing parameters
)
# Verify traces still appear in dashboard
with tracer.trace("migration_test"):
print("Migration successful!")
2. Test New Features (Optional)
# Try enhanced features
tracer = HoneyHiveTracer(
api_key="your_key",
verbose=True, # See enhanced logging
disable_batch=True, # See immediate export
test_mode=True # Safe testing
)
3. Performance Monitoring
Monitor these metrics after migration: - Trace collection latency (should improve) - Application startup time (should improve) - Memory usage (should decrease) - Error rates (should decrease due to better error handling)
Rollback Procedure
If you need to rollback to main branch:
1. Switch Git Branch
git checkout main
pip install -e .
2. No Code Changes Needed
Your existing code will work identically on main branch.
3. Verify Functionality
Test your application to ensure everything works as expected.
Common Questions
Q: Do I need to change my existing code? A: No! All existing code works without any changes.
Q: Will my traces continue to appear in HoneyHive? A: Yes, traces will continue to appear normally with enhanced metadata.
Q: Are there any breaking changes?
A: The only “breaking” change is that disable_http_tracing now defaults to True for better performance. If you relied on the old default, explicitly set it to False.
Q: Can I use new features gradually? A: Yes! You can continue using existing parameters and gradually adopt new features.
Q: What if I encounter issues? A: You can always rollback to main branch. The migration is completely reversible.
Q: Do evaluation workflows work differently?
A: Evaluation workflows are enhanced but backwards compatible. Set is_evaluation=True to get automatic baggage context.
Best Practices for Migration
1. Test in Development First
# Test with verbose logging first
tracer = HoneyHiveTracer(
api_key="dev_key",
verbose=True,
test_mode=True
)
2. Monitor Performance
Set up monitoring for: - Trace collection success rate - Application performance metrics - Error rates and types
3. Gradual Feature Adoption
# Start with existing parameters
tracer = HoneyHiveTracer(api_key="key", project="proj")
# Gradually add new features
tracer = HoneyHiveTracer(
api_key="key",
project="proj",
verbose=True, # Add debugging
disable_batch=True # Add immediate export
)
4. Update Documentation
Document any new parameters you adopt for your team.
Need Help?
If you encounter issues during migration:
Check the Migration Guide: v0.1.0+ Architecture troubleshooting section
Review the complete API reference: HoneyHiveTracer API Reference
Test with
verbose=Trueandtest_mode=Truefor debuggingContact HoneyHive support with: - Your current tracer configuration - Error messages or unexpected behavior - Steps to reproduce any issues
Remember: Migration to complete-refactor is safe, reversible, and provides significant improvements while maintaining 100% backwards compatibility with your existing code.