POET Decorators Reference¶
Overview¶
POET decorators provide automatic enhancement for functions with Perceive-Operate-Enforce-Train capabilities. This reference covers both Python and Dana decorator usage, configuration options, and integration patterns.
Quick Reference¶
Decorator | Language | Purpose | Example |
---|---|---|---|
@poet() |
Python | Enhance Python functions with POET pipeline | @poet(domain="llm_optimization") |
@poet |
Dana | Enhance Dana functions with POET pipeline | @poet(domain="financial_services") |
poet() |
Dana | Runtime enhancement function | poet("reason", ["prompt"]) |
Python @poet()
Decorator¶
Basic Syntax¶
from opendxa.dana.poet import poet
@poet(domain="llm_optimization", timeout=30.0, retries=3, enable_training=True)
def my_enhanced_function(prompt: str, context: SandboxContext) -> str:
"""Your function gets automatic POET enhancement."""
# Your business logic here
return process_prompt(prompt)
Configuration Parameters¶
Parameter | Type | Default | Description |
---|---|---|---|
domain |
str |
None |
Domain specialization for intelligent processing |
timeout |
float |
30.0 |
Maximum execution time in seconds |
retries |
int |
3 |
Number of retry attempts on failure |
enable_training |
bool |
True |
Whether to learn from execution patterns |
collect_metrics |
bool |
True |
Whether to collect performance metrics |
Available Domains¶
Domain | Purpose | Optimizations |
---|---|---|
"llm_optimization" |
LLM prompt optimization | Enhanced prompting, cost optimization |
"financial_services" |
Financial analysis | Risk assessment, compliance validation |
"building_management" |
HVAC and facility control | Energy optimization, comfort balancing |
"semiconductor" |
Manufacturing processes | Yield optimization, quality control |
"healthcare" |
Medical applications | Safety validation, evidence-based reasoning |
"manufacturing" |
Industrial processes | Efficiency optimization, quality assurance |
"logistics" |
Supply chain operations | Route optimization, resource allocation |
Python Examples¶
1. Enhanced LLM Function¶
from opendxa.dana.poet import poet
from opendxa.dana.sandbox.sandbox_context import SandboxContext
@poet(domain="llm_optimization", timeout=30.0, retries=3)
def enhanced_reasoning(prompt: str, context: SandboxContext) -> str:
"""
Enhanced reasoning with automatic optimization.
POET automatically provides:
- Prompt optimization for better LLM responses
- Retry logic on failures
- Output validation and quality checks
- Performance monitoring and learning
"""
# Your core reasoning logic
return llm_resource.generate(prompt)
# Usage - POET handles optimization automatically
result = enhanced_reasoning("Analyze market trends", context)
2. Financial Analysis Function¶
@poet(domain="financial_services", timeout=45.0, retries=2)
def assess_portfolio_risk(
portfolio_data: dict,
context: SandboxContext
) -> dict:
"""
Assess financial portfolio risk with regulatory compliance.
POET provides:
- Financial domain intelligence
- Regulatory compliance validation
- Risk calculation optimization
- Audit trail generation
"""
# Your risk assessment logic
risk_score = calculate_risk_metrics(portfolio_data)
return {"risk_score": risk_score, "compliance_status": "approved"}
# Usage
portfolio = {"stocks": 0.7, "bonds": 0.2, "cash": 0.1}
risk_assessment = assess_portfolio_risk(portfolio, context)
3. Building Management Function¶
@poet(domain="building_management", timeout=20.0, enable_training=True)
def optimize_hvac_settings(
current_temp: float,
target_temp: float,
occupancy: int,
context: SandboxContext
) -> dict:
"""
Optimize HVAC settings for energy efficiency and comfort.
POET provides:
- Energy optimization algorithms
- Comfort vs efficiency balancing
- Occupancy-based adjustments
- Seasonal learning patterns
"""
# Your HVAC control logic
settings = calculate_optimal_hvac(current_temp, target_temp, occupancy)
return settings
# Usage
hvac_command = optimize_hvac_settings(22.5, 23.0, 45, context)
Error Handling¶
POET automatically handles common error scenarios:
@poet(domain="llm_optimization", retries=3)
def robust_analysis(data: str, context: SandboxContext) -> dict:
"""Function with automatic error handling and retries."""
# If this fails, POET automatically:
# 1. Logs the failure with context
# 2. Retries up to 3 times
# 3. Applies domain-specific recovery strategies
# 4. Returns detailed error information if all attempts fail
if not data.strip():
raise ValueError("Empty input data")
return {"analysis": process_complex_data(data)}
Dana @poet
Decorator¶
Basic Syntax¶
# Dana decorator syntax - no parentheses for simple cases
@poet
def simple_enhanced_function(input: str) -> str:
return input.upper()
# Dana decorator with parameters
@poet(domain="financial_services", timeout=30.0, retries=3)
def financial_analysis(portfolio: dict) -> dict:
risk_score = calculate_risk(portfolio)
return {"risk": risk_score, "recommendation": "hold"}
Dana Configuration Examples¶
1. LLM Optimization¶
@poet(domain="llm_optimization", timeout=30.0, retries=3)
def enhanced_reasoning(query: str) -> str:
# POET automatically optimizes prompts and handles retries
return reason(f"Provide detailed analysis: {query}")
# Usage
result = enhanced_reasoning("What are the key market trends?")
2. Financial Services¶
@poet(domain="financial_services", timeout=45.0, enable_training=true)
def assess_credit_risk(
credit_score: int,
annual_income: float,
debt_ratio: float
) -> str:
# POET adds financial domain intelligence and compliance
if credit_score >= 700 and debt_ratio <= 0.3:
return "low_risk"
elif credit_score >= 600 and debt_ratio <= 0.5:
return "medium_risk"
else:
return "high_risk"
# Usage - automatic financial compliance and validation
risk_level = assess_credit_risk(720, 75000.0, 0.25)
3. Building Management¶
@poet(domain="building_management", timeout=20.0, collect_metrics=true)
def control_hvac_zone(
current_temp: float,
setpoint: float,
occupancy: bool,
outdoor_temp: float
) -> dict:
# POET adds energy optimization and comfort balancing
temp_error = current_temp - setpoint
if abs(temp_error) <= 1.0:
return {"heating": 0, "cooling": 0, "fan_speed": 20, "mode": "maintain"}
elif temp_error < -1.0:
heating_level = min(100, abs(temp_error) * 30)
return {"heating": heating_level, "cooling": 0, "fan_speed": 60, "mode": "heating"}
else:
cooling_level = min(100, temp_error * 30)
return {"heating": 0, "cooling": cooling_level, "fan_speed": 60, "mode": "cooling"}
# Usage - automatic energy optimization
hvac_settings = control_hvac_zone(22.5, 23.0, true, 18.0)
Runtime poet()
Function (Dana)¶
Syntax¶
Examples¶
1. Basic Runtime Enhancement¶
# Apply POET to any function call at runtime
enhanced_result = poet("reason", ["Analyze customer feedback"])
2. Domain-Specific Enhancement¶
# Financial domain enhancement
financial_result = poet(
"calculate_risk",
[portfolio_data],
domain="financial_services",
timeout=30.0,
retries=2
)
3. Complex Configuration¶
# Full configuration example
result = poet(
"complex_analysis",
[large_dataset],
domain="manufacturing",
timeout=60.0,
retries=5,
enable_training=true,
collect_metrics=true
)
Best Practices¶
1. Domain Selection¶
Choose the most specific domain for your use case:
# ✅ Good - specific domain
@poet(domain="financial_services")
def calculate_loan_risk(): pass
# ❌ Less optimal - generic domain
@poet(domain="llm_optimization")
def calculate_loan_risk(): pass
2. Timeout Configuration¶
Set realistic timeouts based on operation complexity:
# ✅ Good - appropriate timeouts
@poet(timeout=10.0) # Simple operations
@poet(timeout=30.0) # Standard LLM calls
@poet(timeout=60.0) # Complex analysis
# ❌ Too short - may cause premature failures
@poet(timeout=1.0) # Too short for LLM calls
3. Retry Strategy¶
Configure retries based on operation reliability:
# ✅ Good - appropriate retry counts
@poet(retries=3) # Standard reliability
@poet(retries=1) # Fast operations, low latency requirements
@poet(retries=5) # Critical operations, high reliability needs
# ❌ Problematic
@poet(retries=0) # No error recovery
@poet(retries=10) # Excessive retries, slow failure recovery
4. Training and Metrics¶
Enable learning for production functions:
# ✅ Good - enable learning in production
@poet(enable_training=True, collect_metrics=True)
def production_function(): pass
# ✅ Good - disable learning for testing
@poet(enable_training=False, collect_metrics=False)
def test_function(): pass
Integration Patterns¶
1. Existing Function Enhancement¶
# Before - regular function
def analyze_data(data: str) -> dict:
return {"result": process(data)}
# After - POET-enhanced
@poet(domain="llm_optimization", timeout=30.0, retries=3)
def analyze_data(data: str, context: SandboxContext) -> dict:
return {"result": process(data)}
2. Mixed Enhancement Strategies¶
# Some functions use decorators
@poet(domain="financial_services")
def calculate_risk(data): pass
# Others use runtime enhancement
def process_data(data):
# Apply POET only when needed
if is_complex(data):
return poet("complex_analysis", [data], domain="manufacturing")
else:
return simple_analysis(data)
3. Conditional Enhancement¶
# Dana function with conditional POET usage
def adaptive_processing(data: str, use_poet: bool) -> str:
if use_poet:
return poet("enhanced_analysis", [data], domain="llm_optimization")
else:
return basic_analysis(data)
Error Handling and Debugging¶
Common Error Messages¶
Error | Cause | Solution |
---|---|---|
POET decorator error: Unknown parameter 'xyz' |
Invalid parameter name | Use valid parameters: domain, timeout, retries, enable_training, collect_metrics |
POET decorator error: Domain must be a string |
Wrong domain type | Use string domain names like "financial_services" |
POET decorator error: Domain cannot be empty |
Empty domain string | Provide a valid domain or omit the parameter |
POET decorator error: Timeout must be positive |
Negative timeout | Use positive timeout values in seconds |
POET decorator error: Retries must be non-negative |
Negative retries | Use 0 or positive integer for retries |
Debugging Tips¶
-
Enable Debug Logging:
-
Check Domain Availability:
-
Validate Configuration:
Performance Considerations¶
1. Overhead¶
POET adds minimal overhead:
- Initialization: ~1-2ms per function call
- Domain Processing: ~5-10ms depending on domain complexity
- Retry Logic: Only activates on failures
- Learning: Asynchronous, no blocking overhead
2. Memory Usage¶
- Domain Plugins: ~50-100KB per domain loaded
- Metrics Collection: ~1KB per function execution
- Learning Data: Configurable retention policies
3. Optimization Tips¶
# ✅ Good - reuse domain instances
@poet(domain="financial_services") # Domain loaded once
def func1(): pass
@poet(domain="financial_services") # Reuses existing domain
def func2(): pass
# ✅ Good - disable features when not needed
@poet(enable_training=False, collect_metrics=False) # Minimal overhead
def simple_function(): pass
Migration Guide¶
From Regular Functions¶
# Step 1: Add context parameter
def old_function(data: str) -> str:
return process(data)
def new_function(data: str, context: SandboxContext) -> str:
return process(data)
# Step 2: Add POET decorator
@poet(domain="appropriate_domain")
def new_function(data: str, context: SandboxContext) -> str:
return process(data)
# Step 3: Update callers to pass context
result = new_function(data, context)
From Other Enhancement Patterns¶
# From manual retry logic
def old_function(data):
for attempt in range(3):
try:
return process(data)
except Exception:
continue
raise Exception("All attempts failed")
# To POET enhancement
@poet(retries=3)
def new_function(data, context):
return process(data) # POET handles retries automatically