feat(personas): Implement Preferred Model Sets and Linked Tool Preset resolution

This commit is contained in:
2026-03-10 11:25:12 -04:00
parent 07bc86e13e
commit fb3cb1ecca
3 changed files with 42 additions and 18 deletions

View File

@@ -288,6 +288,21 @@ class ConductorEngine:
if ticket.model_override:
model_name = ticket.model_override
else:
# Check if ticket has a persona with preferred_models
models_list = ["gemini-2.5-flash-lite", "gemini-2.5-flash", "gemini-3.1-pro-preview"]
if ticket.persona_id:
# Try to load preferred_models from persona
try:
from src.personas import PersonaManager
from src import paths
pm = PersonaManager(Path(paths.get_project_personas_path(Path.cwd())) if paths.get_project_personas_path(Path.cwd()).exists() else None)
personas = pm.load_all()
if ticket.persona_id in personas:
persona = personas[ticket.persona_id]
if persona.preferred_models:
models_list = persona.preferred_models
except:
pass # Fall back to default list
model_idx = min(ticket.retry_count, len(models_list) - 1)
model_name = models_list[model_idx]
@@ -409,9 +424,10 @@ def run_worker_lifecycle(ticket: Ticket, context: WorkerContext, context_files:
# Enforce Context Amnesia: each ticket starts with a clean slate.
ai_client.reset_session()
ai_client.set_provider(ai_client.get_provider(), context.model_name)
ai_client.set_tool_preset(context.tool_preset)
# Apply Persona if specified
preferred_models = []
persona_tool_preset = None
if context.persona_id:
from src.personas import PersonaManager
from src import paths
@@ -424,9 +440,17 @@ def run_worker_lifecycle(ticket: Ticket, context: WorkerContext, context_files:
ai_client.set_custom_system_prompt(persona.system_prompt)
if persona.bias_profile:
ai_client.set_bias_profile(persona.bias_profile)
if persona.preferred_models:
preferred_models = persona.preferred_models
if persona.tool_preset:
persona_tool_preset = persona.tool_preset
except Exception as e:
print(f"[WARN] Failed to load persona {context.persona_id}: {e}")
# Apply tool preset: use persona's tool_preset if available, otherwise fall back to context.tool_preset
effective_tool_preset = persona_tool_preset or context.tool_preset
ai_client.set_tool_preset(effective_tool_preset)
# Check for abort BEFORE any major work
if engine and hasattr(engine, "_abort_events"):
abort_event = engine._abort_events.get(ticket.id)