67 lines
2.1 KiB
Python
67 lines
2.1 KiB
Python
from typing import List, Dict, Any, Optional
|
|
from src.models import Tool, ToolPreset, BiasProfile
|
|
|
|
class ToolBiasEngine:
|
|
def apply_semantic_nudges(self, tool_definitions: List[Dict[str, Any]], preset: ToolPreset) -> List[Dict[str, Any]]:
|
|
weight_map = {
|
|
5: "[HIGH PRIORITY] ",
|
|
4: "[PREFERRED] ",
|
|
2: "[NOT RECOMMENDED] ",
|
|
1: "[LOW PRIORITY] "
|
|
}
|
|
|
|
preset_tools: Dict[str, Tool] = {}
|
|
for cat_tools in preset.categories.values():
|
|
for t in cat_tools:
|
|
if isinstance(t, Tool):
|
|
preset_tools[t.name] = t
|
|
|
|
for defn in tool_definitions:
|
|
name = defn.get("name")
|
|
if name in preset_tools:
|
|
tool = preset_tools[name]
|
|
prefix = weight_map.get(tool.weight, "")
|
|
if prefix:
|
|
defn["description"] = prefix + defn.get("description", "")
|
|
|
|
if tool.parameter_bias:
|
|
params = defn.get("parameters") or defn.get("input_schema")
|
|
if params and "properties" in params:
|
|
props = params["properties"]
|
|
for p_name, bias in tool.parameter_bias.items():
|
|
if p_name in props:
|
|
p_desc = props[p_name].get("description", "")
|
|
props[p_name]["description"] = f"[{bias}] {p_desc}".strip()
|
|
|
|
return tool_definitions
|
|
|
|
def generate_tooling_strategy(self, preset: ToolPreset, global_bias: BiasProfile) -> str:
|
|
lines = ["### Tooling Strategy"]
|
|
|
|
preferred = []
|
|
low_priority = []
|
|
for cat_tools in preset.categories.values():
|
|
for t in cat_tools:
|
|
if not isinstance(t, Tool): continue
|
|
if t.weight >= 5:
|
|
preferred.append(f"{t.name} [HIGH PRIORITY]")
|
|
elif t.weight == 4:
|
|
preferred.append(f"{t.name} [PREFERRED]")
|
|
elif t.weight == 2:
|
|
low_priority.append(f"{t.name} [NOT RECOMMENDED]")
|
|
elif t.weight <= 1:
|
|
low_priority.append(f"{t.name} [LOW PRIORITY]")
|
|
|
|
if preferred:
|
|
lines.append(f"Preferred tools: {', '.join(preferred)}.")
|
|
if low_priority:
|
|
lines.append(f"Low-priority tools: {', '.join(low_priority)}.")
|
|
|
|
if global_bias.category_multipliers:
|
|
lines.append("Category focus multipliers:")
|
|
for cat, mult in global_bias.category_multipliers.items():
|
|
lines.append(f"- {cat}: {mult}x")
|
|
|
|
return "\n\n".join(lines)
|
|
|