Multi-agent discussion framework: - Custom/AutoGen/CrewAI backends - Multi-provider API (role→model binding) - Tools system (files, web, commands) - Markdown scenarios with YAML frontmatter - Workspace init (meeting-room init) - Session save (--save)
61 lines
1.8 KiB
Python
61 lines
1.8 KiB
Python
"""AutoGen backend — uses microsoft/autogen for multi-agent conversation."""
|
|
|
|
|
|
def check_installed():
|
|
try:
|
|
import autogen # noqa
|
|
return True
|
|
except ImportError:
|
|
return False
|
|
|
|
|
|
def run(scenario_path: str, config: dict):
|
|
if not check_installed():
|
|
print("AutoGen is not installed. Run:\n pip install meeting-room[autogen]")
|
|
return []
|
|
|
|
import yaml
|
|
import autogen
|
|
from meeting_room.api_client import init_providers
|
|
from meeting_room.scenario_loader import load_scenario
|
|
|
|
scenario = load_scenario(scenario_path)
|
|
init_providers(config)
|
|
roles = config["roles"]
|
|
participants = scenario.get("participants", list(roles.keys()))
|
|
|
|
llm_configs = {}
|
|
for prov_name, prov_cfg in config["providers"].items():
|
|
llm_configs[prov_name] = {
|
|
"base_url": prov_cfg["base_url"],
|
|
"api_key": prov_cfg["api_key"],
|
|
}
|
|
|
|
agents = []
|
|
for role_id in participants:
|
|
role = roles[role_id]
|
|
prov = role["provider"]
|
|
llm_cfg = dict(llm_configs[prov])
|
|
llm_cfg["model"] = role["model"]
|
|
|
|
agent = autogen.ConversableAgent(
|
|
name=role["name"],
|
|
system_message=role["system_prompt"].strip(),
|
|
llm_config={"config_list": [llm_cfg], "temperature": role.get("temperature", 0.7)},
|
|
human_input_mode="NEVER",
|
|
)
|
|
agents.append(agent)
|
|
|
|
groupchat = autogen.GroupChat(
|
|
agents=agents,
|
|
messages=[],
|
|
max_round=scenario.get("max_rounds", config["defaults"]["max_rounds"]),
|
|
)
|
|
manager = autogen.GroupChatManager(
|
|
groupchat=groupchat,
|
|
llm_config={"config_list": [llm_configs[participants[0]]]},
|
|
)
|
|
|
|
agents[0].initiate_chat(manager, message=scenario["problem"])
|
|
return groupchat.messages
|