aogavrilov's picture
Add files using upload-large-folder tool
dc7b96e verified
Raw
History Blame Contribute Delete
3.72 kB
#!/usr/bin/env python3
from __future__ import annotations
import argparse
import asyncio
import json
import os
from pathlib import Path
from typing import Any
DG_ROOT = Path(__file__).resolve().parents[1]
DEFAULT_CONFIG = DG_ROOT / "configs" / "client_profiles" / "autogen.dg.json"
def load_config(path: Path) -> dict[str, Any]:
return json.loads(path.read_text(encoding="utf-8"))
def model_kwargs(config: dict[str, Any]) -> dict[str, Any]:
return {
"model": os.environ.get("AUTOGEN_MODEL") or config["model"],
"api_key": os.environ.get("OPENAI_API_KEY") or config["api_key"],
"base_url": os.environ.get("OPENAI_BASE_URL") or config["base_url"],
"model_info": config["model_info"],
"max_tokens": int(os.environ.get("AUTOGEN_MAX_TOKENS") or config.get("max_tokens") or 256),
"temperature": float(os.environ.get("AUTOGEN_TEMPERATURE") or config.get("temperature") or 0.0),
}
async def run_task(args: argparse.Namespace, config: dict[str, Any]) -> int:
from autogen_agentchat.agents import AssistantAgent
from autogen_ext.models.openai import OpenAIChatCompletionClient
client = OpenAIChatCompletionClient(**model_kwargs(config))
system_message = (
"You are running through the local DiffusionGemma AutoGen profile. "
"Keep answers short, ask for explicit file snippets before broad edits, "
"and prefer DG MCP/session tools when available."
)
agent = AssistantAgent("dg_autogen", model_client=client, system_message=system_message)
try:
result = await agent.run(task=args.task)
finally:
await client.close()
if args.json:
print(json.dumps({"status": "success", "messages": [str(item) for item in result.messages]}, ensure_ascii=False, indent=2))
else:
last = result.messages[-1] if result.messages else ""
print(getattr(last, "content", str(last)))
return 0
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(description="Run AutoGen AgentChat with the local DiffusionGemma profile.")
parser.add_argument("--repo", default=".", help="Target repo, used as working directory")
parser.add_argument("--config", default=str(DEFAULT_CONFIG))
parser.add_argument("--task", default="")
parser.add_argument("--dry-run", action="store_true")
parser.add_argument("--smoke-import", action="store_true")
parser.add_argument("--json", action="store_true")
return parser.parse_args()
def main() -> int:
args = parse_args()
repo = Path(args.repo).resolve()
config_path = Path(args.config).resolve()
config = load_config(config_path)
if args.smoke_import:
from autogen_agentchat.agents import AssistantAgent
from autogen_ext.models.openai import OpenAIChatCompletionClient
print("autogen import ok")
print(AssistantAgent.__name__)
print(OpenAIChatCompletionClient.__name__)
print(config["model_client"])
return 0
if args.dry_run:
data = {
"repo": str(repo),
"config": str(config_path),
"model_client": config["model_client"],
"model_kwargs": model_kwargs(config),
"command": f"scripts/dg_agent.sh autogen -- --repo {repo} --task '...'",
}
print(json.dumps(data, ensure_ascii=False, indent=2) if args.json else "\n".join(f"{k}: {v}" for k, v in data.items()))
return 0
if not args.task:
print("--task is required unless --dry-run or --smoke-import is used", flush=True)
return 2
os.chdir(repo)
return asyncio.run(run_task(args, config))
if __name__ == "__main__":
raise SystemExit(main())