feat: v2 plan — remove autogen/crewai, add tasks and wiki
- Remove autogen and crewai backends (focus on custom only) - Simplify CLI: remove --backend flag - Remove optional deps from pyproject.toml - Add .tasks/ with 7 tasks for Phase 1 refactor - Add .wiki/concepts/meeting-room-v2.md with architecture plan - Update .wiki/index.md and .tasks/STATUS.md Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -1,60 +0,0 @@
|
||||
"""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
|
||||
@@ -1,53 +0,0 @@
|
||||
"""CrewAI backend — uses crewai for task-oriented multi-agent discussion."""
|
||||
|
||||
|
||||
def check_installed():
|
||||
try:
|
||||
import crewai # noqa
|
||||
return True
|
||||
except ImportError:
|
||||
return False
|
||||
|
||||
|
||||
def run(scenario_path: str, config: dict):
|
||||
if not check_installed():
|
||||
print("CrewAI is not installed. Run:\n pip install meeting-room[crewai]")
|
||||
return []
|
||||
|
||||
import yaml
|
||||
from crewai import Agent, Task, Crew, Process
|
||||
from meeting_room.scenario_loader import load_scenario
|
||||
|
||||
scenario = load_scenario(scenario_path)
|
||||
roles = config["roles"]
|
||||
participants = scenario.get("participants", list(roles.keys()))
|
||||
|
||||
agents = []
|
||||
for role_id in participants:
|
||||
role = roles[role_id]
|
||||
agent = Agent(
|
||||
role=role["name"],
|
||||
goal=role["system_prompt"].split(".")[0] + ".",
|
||||
backstory=role["system_prompt"].strip(),
|
||||
llm=f"{role['provider']}/{role['model']}",
|
||||
verbose=True,
|
||||
)
|
||||
agents.append(agent)
|
||||
|
||||
discuss_task = Task(
|
||||
description=f"Discuss this problem as a group:\n\n{scenario['problem']}",
|
||||
agent=agents[0],
|
||||
expected_output="Final solution with arguments from each participant",
|
||||
)
|
||||
|
||||
crew = Crew(
|
||||
agents=agents,
|
||||
tasks=[discuss_task],
|
||||
process=Process.sequential,
|
||||
verbose=True,
|
||||
)
|
||||
|
||||
result = crew.kickoff()
|
||||
print(f"\n{'='*60}\nCREWAI RESULT:\n{'='*60}\n")
|
||||
print(result)
|
||||
return str(result)
|
||||
@@ -223,7 +223,7 @@ def find_workspace_config() -> str | None:
|
||||
return None
|
||||
|
||||
|
||||
def run_discussion(backend: str, scenario: str, config: dict, save: bool = False):
|
||||
def run_discussion(scenario: str, config: dict, save: bool = False):
|
||||
scenario_path = scenario if os.path.isabs(scenario) else os.path.join(os.getcwd(), scenario)
|
||||
if not os.path.exists(scenario_path):
|
||||
# Try bundled scenarios
|
||||
@@ -232,18 +232,8 @@ def run_discussion(backend: str, scenario: str, config: dict, save: bool = False
|
||||
print(f"Scenario not found: {scenario}")
|
||||
sys.exit(1)
|
||||
|
||||
if backend == "custom":
|
||||
from meeting_room.backends.custom.run import run
|
||||
conversation = run(scenario_path, config)
|
||||
elif backend == "autogen":
|
||||
from meeting_room.backends.autogen.run import run
|
||||
conversation = run(scenario_path, config)
|
||||
elif backend == "crewai":
|
||||
from meeting_room.backends.crewai.run import run
|
||||
conversation = run(scenario_path, config)
|
||||
else:
|
||||
print(f"Unknown backend: {backend}")
|
||||
sys.exit(1)
|
||||
from meeting_room.backends.custom.run import run
|
||||
conversation = run(scenario_path, config)
|
||||
|
||||
if save and conversation:
|
||||
# Determine sessions dir
|
||||
@@ -263,12 +253,6 @@ def main():
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Meeting Room — Multi-Agent Discussion Framework",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-b", "--backend",
|
||||
choices=["custom", "autogen", "crewai"],
|
||||
default="custom",
|
||||
help="Discussion framework (default: custom)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-s", "--scenario",
|
||||
default="example-saas.md",
|
||||
@@ -336,7 +320,7 @@ def main():
|
||||
if args.workdir:
|
||||
config["defaults"]["workdir"] = args.workdir
|
||||
|
||||
run_discussion(args.backend, args.scenario, config, save=args.save)
|
||||
run_discussion(args.scenario, config, save=args.save)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in New Issue
Block a user