Update app.py
Browse files
app.py
CHANGED
@@ -51,21 +51,22 @@ voice_agent = Agent(
|
|
51 |
"Create a 1-2 minute voiceover script. Return JSON with key 'script'."
|
52 |
)
|
53 |
|
54 |
-
# Orchestrator
|
55 |
document_orchestrator = Agent(
|
56 |
name="Workshop Orchestrator",
|
57 |
instructions="Invoke: topic_agent, content_agent, slide_agent, code_agent, voice_agent (optional); collect outputs.",
|
58 |
handoffs=[
|
59 |
-
handoff(topic_agent,
|
60 |
-
handoff(content_agent,
|
61 |
-
handoff(slide_agent,
|
62 |
-
handoff(code_agent,
|
63 |
-
handoff(voice_agent,
|
64 |
]
|
65 |
)
|
66 |
|
67 |
runner = Runner()
|
68 |
|
|
|
69 |
def build_workshop_bundle(topic: str, audience: str):
|
70 |
prompt = f"Create a {topic} workshop for {audience}."
|
71 |
results = runner.run(document_orchestrator, prompt).outputs
|
@@ -76,13 +77,13 @@ def build_workshop_bundle(topic: str, audience: str):
|
|
76 |
if isinstance(voice_info, dict) and "script" in voice_info:
|
77 |
audio_path = generate_tts_audio(voice_info["script"])
|
78 |
|
79 |
-
# Render slides
|
80 |
slides_json = results.get("slides", {})
|
81 |
with open("static/slides_template.html") as f:
|
82 |
template = f.read()
|
83 |
slide_html = template.replace("{{SLIDES_JSON}}", json.dumps(slides_json))
|
84 |
|
85 |
-
# Bundle into ZIP
|
86 |
tmpdir = tempfile.mkdtemp()
|
87 |
zip_path = os.path.join(tmpdir, "workshop_bundle.zip")
|
88 |
with ZipFile(zip_path, "w") as zipf:
|
@@ -100,7 +101,7 @@ def build_workshop_bundle(topic: str, audience: str):
|
|
100 |
zipf.write(audio_path, os.path.basename(audio_path))
|
101 |
return slide_html, audio_path, zip_path
|
102 |
|
103 |
-
# Gradio UI
|
104 |
def run_app(topic, audience):
|
105 |
return build_workshop_bundle(topic, audience)
|
106 |
|
|
|
51 |
"Create a 1-2 minute voiceover script. Return JSON with key 'script'."
|
52 |
)
|
53 |
|
54 |
+
# Orchestrator with corrected handoff signature
|
55 |
document_orchestrator = Agent(
|
56 |
name="Workshop Orchestrator",
|
57 |
instructions="Invoke: topic_agent, content_agent, slide_agent, code_agent, voice_agent (optional); collect outputs.",
|
58 |
handoffs=[
|
59 |
+
handoff(topic_agent, "outline"),
|
60 |
+
handoff(content_agent, "content"),
|
61 |
+
handoff(slide_agent, "slides"),
|
62 |
+
handoff(code_agent, "code_labs"),
|
63 |
+
handoff(voice_agent, "voiceover", optional=True),
|
64 |
]
|
65 |
)
|
66 |
|
67 |
runner = Runner()
|
68 |
|
69 |
+
# Bundle builder
|
70 |
def build_workshop_bundle(topic: str, audience: str):
|
71 |
prompt = f"Create a {topic} workshop for {audience}."
|
72 |
results = runner.run(document_orchestrator, prompt).outputs
|
|
|
77 |
if isinstance(voice_info, dict) and "script" in voice_info:
|
78 |
audio_path = generate_tts_audio(voice_info["script"])
|
79 |
|
80 |
+
# Render slides to HTML
|
81 |
slides_json = results.get("slides", {})
|
82 |
with open("static/slides_template.html") as f:
|
83 |
template = f.read()
|
84 |
slide_html = template.replace("{{SLIDES_JSON}}", json.dumps(slides_json))
|
85 |
|
86 |
+
# Bundle outputs into ZIP
|
87 |
tmpdir = tempfile.mkdtemp()
|
88 |
zip_path = os.path.join(tmpdir, "workshop_bundle.zip")
|
89 |
with ZipFile(zip_path, "w") as zipf:
|
|
|
101 |
zipf.write(audio_path, os.path.basename(audio_path))
|
102 |
return slide_html, audio_path, zip_path
|
103 |
|
104 |
+
# Gradio UI setup
|
105 |
def run_app(topic, audience):
|
106 |
return build_workshop_bundle(topic, audience)
|
107 |
|