Upload aco/optimizer.py with huggingface_hub
Browse files- aco/optimizer.py +29 -0
aco/optimizer.py
CHANGED
|
@@ -12,6 +12,7 @@ from .verifier_budgeter import VerifierBudgeter, VerifierDecision
|
|
| 12 |
from .retry_optimizer import RetryOptimizer, RecoveryAction
|
| 13 |
from .meta_tool_miner import MetaToolMiner, MacroTool
|
| 14 |
from .doom_detector import DoomDetector, DoomAssessment
|
|
|
|
| 15 |
|
| 16 |
class ACOOptimizer:
|
| 17 |
def __init__(self, config: ACOConfig = None):
|
|
@@ -33,6 +34,10 @@ class ACOOptimizer:
|
|
| 33 |
)
|
| 34 |
self.meta_tool_miner = MetaToolMiner()
|
| 35 |
self.doom_detector = DoomDetector()
|
|
|
|
|
|
|
|
|
|
|
|
|
| 36 |
self._current_trace: Optional[AgentTrace] = None
|
| 37 |
self._step_num = 0
|
| 38 |
self._traces: List[AgentTrace] = []
|
|
@@ -123,6 +128,30 @@ class ACOOptimizer:
|
|
| 123 |
return self.tool_gate.gate(tool_name, args, self._current_trace.task_type,
|
| 124 |
self._step_num, self._step_num + 1, 0.5)
|
| 125 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 126 |
def get_recovery(self, failure_tag: str, current_tier: int,
|
| 127 |
retry_num: int, previous_actions: List[str] = None,
|
| 128 |
run_cost: float = 0.0) -> RecoveryAction:
|
|
|
|
| 12 |
from .retry_optimizer import RetryOptimizer, RecoveryAction
|
| 13 |
from .meta_tool_miner import MetaToolMiner, MacroTool
|
| 14 |
from .doom_detector import DoomDetector, DoomAssessment
|
| 15 |
+
from .execution_feedback import ExecutionFeedbackRouter, CascadeResult, FeedbackSignal
|
| 16 |
|
| 17 |
class ACOOptimizer:
|
| 18 |
def __init__(self, config: ACOConfig = None):
|
|
|
|
| 34 |
)
|
| 35 |
self.meta_tool_miner = MetaToolMiner()
|
| 36 |
self.doom_detector = DoomDetector()
|
| 37 |
+
self.execution_feedback = ExecutionFeedbackRouter(
|
| 38 |
+
tier_costs=self.config.tier_costs,
|
| 39 |
+
task_floors=self.config.task_floors,
|
| 40 |
+
)
|
| 41 |
self._current_trace: Optional[AgentTrace] = None
|
| 42 |
self._step_num = 0
|
| 43 |
self._traces: List[AgentTrace] = []
|
|
|
|
| 128 |
return self.tool_gate.gate(tool_name, args, self._current_trace.task_type,
|
| 129 |
self._step_num, self._step_num + 1, 0.5)
|
| 130 |
|
| 131 |
+
def cascade_step(self, request: str, initial_tier: int,
|
| 132 |
+
cheap_logprobs: List[float],
|
| 133 |
+
cheap_response: str,
|
| 134 |
+
strong_response: str = "",
|
| 135 |
+
task_type: str = None) -> CascadeResult:
|
| 136 |
+
"""Execution-feedback cascade: use cheap model output to decide escalation."""
|
| 137 |
+
if not self._current_trace:
|
| 138 |
+
task_type = task_type or "unknown_ambiguous"
|
| 139 |
+
else:
|
| 140 |
+
task_type = task_type or self._current_trace.task_type
|
| 141 |
+
floor = self.config.task_floors.get(task_type, 1)
|
| 142 |
+
return self.execution_feedback.cascade(
|
| 143 |
+
request, initial_tier, cheap_logprobs,
|
| 144 |
+
cheap_response, strong_response,
|
| 145 |
+
task_type=task_type, task_floor=floor,
|
| 146 |
+
)
|
| 147 |
+
|
| 148 |
+
def analyze_output_confidence(self, token_logprobs: List[float],
|
| 149 |
+
task_type: str = "unknown",
|
| 150 |
+
current_tier: int = 2) -> FeedbackSignal:
|
| 151 |
+
"""Analyze model output confidence for routing decisions."""
|
| 152 |
+
return self.execution_feedback.analyze_output(
|
| 153 |
+
token_logprobs, task_type=task_type, current_tier=current_tier)
|
| 154 |
+
|
| 155 |
def get_recovery(self, failure_tag: str, current_tier: int,
|
| 156 |
retry_num: int, previous_actions: List[str] = None,
|
| 157 |
run_cost: float = 0.0) -> RecoveryAction:
|