AgentGen + Microsoft AutoGen
AutoGen agents can reason and collaborate, but their outputs are text. Integrate AgentGen as a registered function and any AutoGen agent can produce a shareable PDF or image — invoices, reports, certificates — and hand the download link back to the user.
Install
pip install pyautogen requests python-dotenv
Step 1 — Define the AgentGen functions
import os, requests
AGENTGEN_KEY = os.environ["AGENTGEN_API_KEY"]
def generate_pdf(html: str, page_size: str = "A4", page_size_source: str = "css") -> dict:
"""
Render an HTML string to a PDF document using AgentGen.
Returns a dict with 'url' (CDN download link) and 'tokens_used'.
Cost: 2 tokens per page.
"""
r = requests.post(
"https://www.agent-gen.com/api/v1/generate/pdf",
headers={"X-API-Key": AGENTGEN_KEY, "Content-Type": "application/json"},
json={"html": html, "page_size_source": page_size_source, "format": page_size},
timeout=30,
)
if r.status_code == 402:
return {"error": "Insufficient tokens. Top up at agent-gen.com/pricing."}
r.raise_for_status()
return r.json()
def generate_image(html: str, viewport_width: int = 1200, selector: str | None = None) -> dict:
"""
Render an HTML string to a PNG image using AgentGen.
Returns a dict with 'url' (CDN link). Cost: 1 token.
"""
r = requests.post(
"https://www.agent-gen.com/api/v1/generate/image",
headers={"X-API-Key": AGENTGEN_KEY, "Content-Type": "application/json"},
json={"html": html, "viewport_width": viewport_width, "selector": selector, "format": "png"},
timeout=30,
)
r.raise_for_status()
return r.json()Step 2 — Register with AutoGen agents
import autogen
config_list = [{"model": "gpt-4o", "api_key": os.environ["OPENAI_API_KEY"]}]
# The assistant agent that writes HTML and calls tools
assistant = autogen.AssistantAgent(
name="DocumentAgent",
system_message=(
"You are a document generation specialist. When asked to create a PDF or image, "
"write complete, styled HTML with inline CSS, then call generate_pdf or generate_image. "
"Always share the returned URL with the user."
),
llm_config={
"config_list": config_list,
"functions": [
{
"name": "generate_pdf",
"description": "Render HTML to a PDF. Returns a CDN download URL. Cost: 2 tokens/page.",
"parameters": {
"type": "object",
"properties": {
"html": {"type": "string", "description": "Complete HTML to render"},
"page_size": {"type": "string", "enum": ["A4", "Letter"], "default": "A4"},
"page_size_source": {"type": "string", "enum": ["css", "format"], "default": "css"},
},
"required": ["html"],
},
},
{
"name": "generate_image",
"description": "Render HTML to a PNG image. Returns a CDN URL. Cost: 1 token.",
"parameters": {
"type": "object",
"properties": {
"html": {"type": "string"},
"viewport_width": {"type": "integer", "default": 1200},
"selector": {"type": "string"},
},
"required": ["html"],
},
},
],
},
)
# The user proxy that executes function calls
user_proxy = autogen.UserProxyAgent(
name="UserProxy",
human_input_mode="NEVER",
max_consecutive_auto_reply=5,
function_map={
"generate_pdf": generate_pdf,
"generate_image": generate_image,
},
)Step 3 — Run the agent
user_proxy.initiate_chat(
assistant,
message=(
"Create a PDF invoice for Acme Corp. "
"Services: API integration consulting — $4,500. "
"Due: April 15, 2026."
),
)
# DocumentAgent writes HTML, calls generate_pdf, returns:
# → "Your invoice is ready: https://cdn.agent-gen.com/output/abc123.pdf"Multi-agent workflow
AgentGen works equally well in multi-agent AutoGen setups. A DataAgent can fetch and summarise metrics while a DocumentAgent renders the final report PDF — with the function registered on the executor proxy shared between both:
groupchat = autogen.GroupChat(
agents=[data_agent, document_agent, user_proxy],
messages=[],
max_round=10,
)
manager = autogen.GroupChatManager(groupchat=groupchat, llm_config={"config_list": config_list})
user_proxy.initiate_chat(
manager,
message="Analyse last week's sales data and generate a PDF summary report.",
)Why AutoGen teams use this pattern
Good fit
AutoGen shines when one agent gathers data and another formats the deliverable. AgentGen slots naturally into the execution layer because the file-generation step becomes a deterministic function call.
Key benefit
The executor agent gets back a hosted URL, so the collaboration flow ends with an artifact the user can open immediately instead of raw HTML or a pasted report.
Give your AutoGen agents a download link
50 free tokens on signup — no credit card required.