From bc3fcae41f1f26bc9ef9d2adbb6a946fbf9ad554 Mon Sep 17 00:00:00 2001 From: Remi Dyon Date: Wed, 19 Aug 2026 08:52:56 -0400 Subject: [PATCH] Add podcast generation agent Contribute the unpacked Podcast Generation Agent solution with gallery metadata and import guidance. --- .../podcast-generation-agent/README.md | 20 ++ .../podcast-generation-agent/metadata.json | 17 ++ .../botcomponent_connectionreferenceset.xml | 5 + .../solution/[Content_Types].xml | 1 + .../botcomponent.xml | 14 ++ .../filedata/metadata.json | 11 + .../botcomponent.xml | 14 ++ .../filedata/README.md | 73 ++++++ .../botcomponent.xml | 14 ++ .../filedata/SKILL.md | 236 ++++++++++++++++++ .../botcomponent.xml | 11 + .../data | 2 + .../botcomponent.xml | 11 + .../data | 5 + .../bots/cr88d_podcastdemo_OMpe9u/bot.xml | 11 + .../configuration.json | 43 ++++ .../solution/customizations.xml | 26 ++ .../solution/solution.xml | 82 ++++++ 18 files changed, 596 insertions(+) create mode 100644 submissions/podcast-generation-agent/README.md create mode 100644 submissions/podcast-generation-agent/metadata.json create mode 100644 submissions/podcast-generation-agent/solution/Assets/botcomponent_connectionreferenceset.xml create mode 100644 submissions/podcast-generation-agent/solution/[Content_Types].xml create mode 100644 submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.file.metadatajson_3bwQq/botcomponent.xml create mode 100644 submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.file.metadatajson_3bwQq/filedata/metadata.json create mode 100644 submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.file.readmemd_jxKnE/botcomponent.xml create mode 100644 submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.file.readmemd_jxKnE/filedata/README.md create mode 100644 submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.file.skillmd_A9jgI/botcomponent.xml create mode 100644 submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.file.skillmd_A9jgI/filedata/SKILL.md create mode 100644 submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.skill.generating-podcast-script_Jt6/botcomponent.xml create mode 100644 submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.skill.generating-podcast-script_Jt6/data create mode 100644 submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.tool.ConverttexttospeechwithSSML_VGp/botcomponent.xml create mode 100644 submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.tool.ConverttexttospeechwithSSML_VGp/data create mode 100644 submissions/podcast-generation-agent/solution/bots/cr88d_podcastdemo_OMpe9u/bot.xml create mode 100644 submissions/podcast-generation-agent/solution/bots/cr88d_podcastdemo_OMpe9u/configuration.json create mode 100644 submissions/podcast-generation-agent/solution/customizations.xml create mode 100644 submissions/podcast-generation-agent/solution/solution.xml diff --git a/submissions/podcast-generation-agent/README.md b/submissions/podcast-generation-agent/README.md new file mode 100644 index 0000000..d3126e8 --- /dev/null +++ b/submissions/podcast-generation-agent/README.md @@ -0,0 +1,20 @@ +# Podcast Generation Agent + +Turn a topic or source material such as newsletters, articles, reports, and notes into a two-host podcast episode. The agent produces a readable transcript, multi-voice SSML, and optional narrated audio. + +## Agent + +The agent uses two recurring hosts with distinct voices and conversational roles. It organizes source material into segments, targets the requested episode length, and produces TTS-ready output without narration-style prose. + +## Tools and skills + +- The podcast script skill analyzes and ranks source material, writes the dialogue, and generates SSML. +- The Azure Text to Speech connector converts the SSML into a WAV audio file when requested. +- Web search is enabled to support requests that require current source material. + +## Import notes + +- Import the solution into a Copilot Studio environment. +- Configure the included Azure Text to Speech connection reference during import. +- Ensure the connected Speech resource can use `en-US-AvaMultilingualNeural` and `en-US-AndrewMultilingualNeural`, or update the agent to use available neural voices. +- Review the agent and connection configuration before publishing. The exported solution is configured to publish on import. \ No newline at end of file diff --git a/submissions/podcast-generation-agent/metadata.json b/submissions/podcast-generation-agent/metadata.json new file mode 100644 index 0000000..6d72204 --- /dev/null +++ b/submissions/podcast-generation-agent/metadata.json @@ -0,0 +1,17 @@ +{ + "name": "Podcast Generation Agent", + "description": "Turns topics, newsletters, articles, and notes into a two-host podcast with a transcript, multi-voice SSML, and optional narrated audio.", + "tags": [ + "content", + "podcast", + "audio", + "text-to-speech", + "ssml" + ], + "author": "Remi Dyon", + "authorUrl": "https://github.com/raemone", + "authorGithub": "raemone", + "createdAt": "2026-07-28", + "updatedAt": "2026-07-28", + "featured": false +} \ No newline at end of file diff --git a/submissions/podcast-generation-agent/solution/Assets/botcomponent_connectionreferenceset.xml b/submissions/podcast-generation-agent/solution/Assets/botcomponent_connectionreferenceset.xml new file mode 100644 index 0000000..89a8277 --- /dev/null +++ b/submissions/podcast-generation-agent/solution/Assets/botcomponent_connectionreferenceset.xml @@ -0,0 +1,5 @@ + + + 1 + + \ No newline at end of file diff --git a/submissions/podcast-generation-agent/solution/[Content_Types].xml b/submissions/podcast-generation-agent/solution/[Content_Types].xml new file mode 100644 index 0000000..b171c47 --- /dev/null +++ b/submissions/podcast-generation-agent/solution/[Content_Types].xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.file.metadatajson_3bwQq/botcomponent.xml b/submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.file.metadatajson_3bwQq/botcomponent.xml new file mode 100644 index 0000000..f4c7bc3 --- /dev/null +++ b/submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.file.metadatajson_3bwQq/botcomponent.xml @@ -0,0 +1,14 @@ + + 14 + metadata.json + 0 + ./metadata.json + + cr88d_podcastdemo_OMpe9u.skill.generating-podcast-script_Jt6 + + + cr88d_podcastdemo_OMpe9u + + 0 + 1 + \ No newline at end of file diff --git a/submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.file.metadatajson_3bwQq/filedata/metadata.json b/submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.file.metadatajson_3bwQq/filedata/metadata.json new file mode 100644 index 0000000..a679387 --- /dev/null +++ b/submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.file.metadatajson_3bwQq/filedata/metadata.json @@ -0,0 +1,11 @@ +{ + "name": "Podcast Script Generator", + "description": "Turn a topic or a pile of source material \u2014 a newsletter, news digest, or set of articles \u2014 into a two-host, NotebookLM-style podcast episode, with multi-voice SSML and optional Azure Text-to-Speech audio.", + "platforms": ["Copilot Studio"], + "tags": ["content", "podcast", "audio", "text-to-speech", "ssml", "news"], + "author": "Remi Dyon", + "authorUrl": "https://github.com/remidyon", + "version": "1.1.0", + "createdAt": "2026-07-28", + "updatedAt": "2026-07-28" +} diff --git a/submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.file.readmemd_jxKnE/botcomponent.xml b/submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.file.readmemd_jxKnE/botcomponent.xml new file mode 100644 index 0000000..c1ac910 --- /dev/null +++ b/submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.file.readmemd_jxKnE/botcomponent.xml @@ -0,0 +1,14 @@ + + 14 + README.md + 0 + ./README.md + + cr88d_podcastdemo_OMpe9u.skill.generating-podcast-script_Jt6 + + + cr88d_podcastdemo_OMpe9u + + 0 + 1 + \ No newline at end of file diff --git a/submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.file.readmemd_jxKnE/filedata/README.md b/submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.file.readmemd_jxKnE/filedata/README.md new file mode 100644 index 0000000..86ccbe8 --- /dev/null +++ b/submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.file.readmemd_jxKnE/filedata/README.md @@ -0,0 +1,73 @@ +# Podcast Script Generator + +Turn a topic — or a pile of source material like a newsletter, a news digest, or +a set of articles — into a two-host podcast episode that actually sounds like +two people talking. You get a readable transcript, a multi-voice SSML document, +and optionally a narrated `.wav`. + +## What you get + +- **Two recurring hosts with distinct personalities.** *Nova* is the warm, quick + lead host who asks the question you're thinking. *Miles* is the dry, precise + analyst who supplies the numbers and the caveats. They talk to each other, not + at the microphone — no narrator voice, no "welcome to the podcast". +- **Real editorial judgement on source material.** Feed it a digest and it + parses out each distinct item, merges duplicates, throws away footers and + unsubscribe boilerplate, ranks what's left by newsworthiness, gives the top + 4–6 full segments, and sweeps the rest into a rapid-fire round. +- **Conversational dialogue, not read-aloud prose.** Short lines, contractions, + genuine reactions, one concrete analogy per complex idea, and a naive + clarifying question whenever something needs unpacking. +- **TTS-ready output.** Numbers and acronyms are spelled out the way a + synthesizer needs them, and the SSML uses one `` per turn with per-line + prosody so the delivery never goes flat. + +## Before you start + +- **Copilot Studio** — this skill targets the Copilot Studio Python/Linux + container and writes into `/app/created/`. +- **Azure Text-to-Speech connector** — the audio step calls the + `ConverttexttospeechwithSSML` tool. Add it to your agent (Actions → Add an + action → Azure Text to Speech) before asking for audio. Without it you still + get the transcript and the SSML file; only the narration step is skipped. +- **Multi-voice SSML** — the default cast uses `en-US-AvaMultilingualNeural` and + `en-US-AndrewMultilingualNeural`. Your Speech resource needs access to those + neural voices. + +## How to use it + +Paste or point at your material and ask: + +> Here's this week's AI newsletter. Make it a six-minute podcast and give me the +> audio. + +> Turn these five articles into a Nova and Miles episode, short version. + +Or skip the source material entirely and just give it a topic: + +> Do a twelve-minute episode on the history of submarines. + +The agent will parse and rank the material, write the transcript to +`/app/created/_Podcast_Script.txt` and the SSML to +`/app/created/_Podcast.ssml`, show you a segment-by-segment summary, then +offer to narrate it into `/app/created/_Podcast.wav`. + +## Good to know + +- **Length is a real target, not a suggestion.** Everything is budgeted at ~150 + spoken words per minute and the agent aims to land within 10 percent. Six + minutes is roughly 900 words of dialogue. +- **It won't invent opinions.** Reactions to facts are fair game ("that number + is wild"); made-up takes on people, companies, or politics are not. Unconfirmed + claims get flagged out loud on air. +- **Two files, two audiences.** The `.txt` transcript carries `NOVA:` / `MILES:` + labels so you can read along. The `.ssml` is the machine artifact — nothing + but the SSML document, ready to hand straight to the TTS connector. +- **Long episodes and the 40k character cap.** The SSML is kept under 40,000 + characters. If an episode is too big for one synthesis call, the agent splits + at a segment boundary and stitches the audio back together. +- **Customising the cast.** Ask for different voices, different names, or a + single host and it'll adapt — the Nova/Miles pairing is just the default. +- **Non-English material.** Foreign names and phrases inside an English line get + wrapped in a `` tag so they're pronounced properly. For a fully + non-English episode, say so and specify matching neural voices. diff --git a/submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.file.skillmd_A9jgI/botcomponent.xml b/submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.file.skillmd_A9jgI/botcomponent.xml new file mode 100644 index 0000000..0acc855 --- /dev/null +++ b/submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.file.skillmd_A9jgI/botcomponent.xml @@ -0,0 +1,14 @@ + + 14 + SKILL.md + 0 + ./SKILL.md + + cr88d_podcastdemo_OMpe9u.skill.generating-podcast-script_Jt6 + + + cr88d_podcastdemo_OMpe9u + + 0 + 1 + \ No newline at end of file diff --git a/submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.file.skillmd_A9jgI/filedata/SKILL.md b/submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.file.skillmd_A9jgI/filedata/SKILL.md new file mode 100644 index 0000000..1230fee --- /dev/null +++ b/submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.file.skillmd_A9jgI/filedata/SKILL.md @@ -0,0 +1,236 @@ +--- +name: generating-podcast-script +description: Use this skill whenever the user asks to write, generate, or create a podcast script or podcast episode — from a topic, or from source material such as a news digest, newsletter, email review, or set of articles — and optionally convert it to audio with Azure Text-to-Speech. Handles the initial request and every follow-up refinement (source, topic, length, cast, narration) in the same task. +--- + +# Podcast Script Generation + +Produces a two-host, NotebookLM-style conversational episode: a readable script +plus a multi-voice SSML document ready for Azure Text-to-Speech. + +## Step 1 — Gather inputs + +Ask only for what is missing. Do not ask for optional fields that have safe +defaults. + +| Input | Required | Default | +|---|---|---| +| `source` or `topic` | Yes | — (source material such as a digest/newsletter/articles, **or** a plain topic) | +| `duration` | No | `medium` — `short` ≈ 3 min / ~450 words, `medium` ≈ 6 min / ~900 words, `long` ≈ 12 min / ~1,800 words | +| `language` | No | English | +| `cast` | No | Two hosts, NOVA and MILES (see Step 4) | +| `generate_audio` | No | Ask after the script is ready | + +All word targets assume ~150 spoken words per minute. Stay within 10 percent of +target. + +Derive a lowercase-hyphenated `` from the source or topic (max 6 words, +ASCII only). + +## Step 2 — Parse the source material + +Skip this step when the user gave a bare topic with no source material. + +Extract every distinct article or item. For each, capture: + +- headline +- publication / source +- date, if present +- the core factual claim +- any figures or quotes +- the "so what" + +Merge duplicates covering the same event. Discard boilerplate, footers, +disclaimers, legal notices, unsubscribe text, and image captions. + +## Step 3 — Editorial selection + +Rank items by newsworthiness and reader impact. Keep the top 4 to 6 for full +treatment (fewer for `short`, more for `long`). Group the remainder into one +fast **rapid fire** segment. If the material has a dominant theme, lead with it +and thread it through the episode. + +## Step 4 — Cast + +Two hosts, always the same personalities, always distinct voices: + +- **NOVA** — voice `en-US-AvaMultilingualNeural`. Lead host. Warm, curious, + quick. Drives the agenda, asks the question the listener is thinking, reacts + out loud, reframes jargon into plain language. Slightly faster cadence. +- **MILES** — voice `en-US-AndrewMultilingualNeural`. Analyst. Calm, dry, + precise. Supplies context, numbers, caveats, second-order implications. + Slightly slower, lower pitch. Occasionally pushes back on Nova. + +Neither host is a narrator. They talk **to each other**, not to the microphone. + +## Step 5 — Episode structure + +1. **Cold open** (15–20s) — Nova opens on the single most striking fact or + tension. No "welcome to the podcast", no channel branding, no music cues. +2. **Agenda tease** (10s) — Miles lays out what they'll cover, casually. +3. **Story segments** (60–90s each) — one item per segment. Pattern: + hook → the facts → why it matters → a short exchange of interpretation → + handoff line into the next story. Vary who leads each segment. +4. **Rapid fire** (45s) — alternating one-liners on the leftover items, quick + tempo. +5. **Close** (20–30s) — three concrete takeaways split between the two hosts, + then a short human sign-off. Alternate whether Nova or Miles ends. + +## Step 6 — Dialogue style + +This is what makes it sound conversational rather than read-aloud. + +- Write spoken English, not written English. Contractions everywhere. +- Keep most lines under 30 words. Break long explanations across two or three + turns with the other host interjecting. +- Use real conversational connective tissue — "okay so", "right", "wait, back + up", "here's the part I didn't expect", "yeah, and that's the thing", "hmm". + Roughly one marker every 4 to 5 turns. Never let it become a tic. +- One host regularly asks the naive clarifying question so the other can + explain. +- Use one concrete analogy or comparison per complex item. +- Genuine reactions are allowed ("that number is wild"). Invented opinions on + people, companies, or politics are not. +- Never read a headline verbatim. Paraphrase it into speech. +- Attribute clearly: "according to the Financial Times", "Reuters is + reporting". +- If the source is ambiguous or a claim is unconfirmed, say so on air: "the + report is careful to call that unconfirmed". +- No stage directions, no "[laughs]", no speaker labels, no markdown, no + emojis, no bullet points, and no URLs in the **spoken text**. + +## Step 7 — TTS hygiene + +Applies to every word that will be spoken. + +- Spell out anything a synthesizer would mangle: "twenty twenty-six" not + `2026`, "three point two billion dollars" not `$3.2B`, "about fifteen + percent" not `~15%`. +- First mention of an acronym: expand it, then use the short form. +- Letter-by-letter acronyms: `API`. +- Odd proper nouns: `Name`. +- A non-English name or phrase inside an English line: + `...`. +- Escape XML entities in all spoken text: `&` → `&`, `<` → `<`, + `>` → `>`. +- Never emit smart quotes, em dashes, asterisks, or underscores. + +## Step 8 — Write the readable script + +Write the human-readable transcript to: + +```text +/app/created/_Podcast_Script.txt +``` + +This file — and only this file — may carry `NOVA:` / `MILES:` speaker labels so +a person can follow along. It contains no stage directions and no markdown. The +spoken text itself must already satisfy Steps 6 and 7 so it can be lifted into +SSML unchanged. + +## Step 9 — SSML output contract + +Produce the SSML document and **nothing else** — no preamble, no explanation, no +code fences, no trailing notes inside the artifact. Write it verbatim to: + +```text +/app/created/_Podcast.ssml +``` + +Rules: + +- Exactly one root `` element with `version="1.0"`, + `xmlns="http://www.w3.org/2001/10/synthesis"`, + `xmlns:mstts="http://www.w3.org/2001/mstts"`, `xml:lang="en-US"`. +- One `` element per conversational turn. Alternate speakers. Never put + both hosts inside one `` element. +- Vary delivery with `` so it never sounds flat. Baselines: Nova + `rate="+6%" pitch="+2%"`, Miles `rate="-2%" pitch="-4%"`. Nudge per line to + match the emotion of the sentence. +- Use `` where the voice supports it. Preferred + styles: `chat` for banter, `friendly` for explanation, + `narration-professional` for the factual core of a story, `excited` sparingly + for the cold open. An unsupported style is ignored by the service, so keep + styles optional — never structural. +- Pauses: `` between turns within a segment, + `` between segments, `` before a + punchline or a pivot. Never exceed `900ms`. +- **Every `` must sit inside a `` element.** A `` placed + between `` elements — as a direct child of `` — is invalid in a + multi-voice document and will fail synthesis. Two `` elements may sit + directly next to each other with nothing between them. To pause *between* + turns, put the break at the **end of the preceding turn's** text, inside that + turn's ``. +- `` on at most one or two key terms per segment. +- Keep the total document under 40,000 characters. + +### Shape + +```xml + + + + Okay, so the number that stopped me cold + this morning was forty percent. Forty percent, in one + quarter. + + + + + Right, and the part everyone's skipping is + that it's off a very small base. Context matters + here. + + + +``` + +Note the trailing `` closing each turn: the 250ms is the gap before the +next turn, the 700ms is the longer gap before the next segment. Nothing sits +between the two `` elements. + +## Step 10 — Review, then generate audio + +Show the user a table summarising each segment (title, one-line description, +approximate spoken duration), print both file paths, and ask: + +> Would you like me to convert this to an audio file? + +Only if they say yes: + +1. Confirm the `ConverttexttospeechwithSSML` tool is available on the agent. If + it is not, tell the user how to add it and stop. +2. Call `ConverttexttospeechwithSSML` with the SSML document from Step 9 and + `outputFormat: riff-24khz-16bit-mono-pcm`. +3. Decode the base64 response and save to `/app/created/_Podcast.wav`. + +If the document is too large for a single call, split it at a segment boundary, +synthesize each part, and concatenate the decoded audio in order. + +```python +import base64 + +with open('', 'r') as f: + content = f.read().strip() + +audio_bytes = base64.b64decode(content) + +with open('/app/created/_Podcast.wav', 'wb') as f: + f.write(audio_bytes) +``` + +## Step 11 — Final report + +Always end with: + +| Item | Details | +|---|---| +| Script file | `/app/created/_Podcast_Script.txt` | +| SSML file | `/app/created/_Podcast.ssml` | +| Word count / estimated duration | actual vs. target at ~150 wpm | +| Items covered | full segments + rapid-fire count | +| Voices | `en-US-AvaMultilingualNeural` (Nova), `en-US-AndrewMultilingualNeural` (Miles) | +| Audio file | `/app/created/_Podcast.wav` *(only if audio generated)* | diff --git a/submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.skill.generating-podcast-script_Jt6/botcomponent.xml b/submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.skill.generating-podcast-script_Jt6/botcomponent.xml new file mode 100644 index 0000000..3d99251 --- /dev/null +++ b/submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.skill.generating-podcast-script_Jt6/botcomponent.xml @@ -0,0 +1,11 @@ + + 9 + Use this skill whenever the user asks to write, generate, or create a podcast script or podcast episode — from a topic, or from source material such as a news digest, newsletter, email review, or set of articles — and optionally convert it to audio with Azure Text-to-Speech. Handles the initial request and every follow-up refinement (source, topic, length, cast, narration) in the same task. + 0 + generating-podcast-script + + cr88d_podcastdemo_OMpe9u + + 0 + 1 + \ No newline at end of file diff --git a/submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.skill.generating-podcast-script_Jt6/data b/submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.skill.generating-podcast-script_Jt6/data new file mode 100644 index 0000000..94261c9 --- /dev/null +++ b/submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.skill.generating-podcast-script_Jt6/data @@ -0,0 +1,2 @@ +kind: InlineAgentSkill +content: \ No newline at end of file diff --git a/submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.tool.ConverttexttospeechwithSSML_VGp/botcomponent.xml b/submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.tool.ConverttexttospeechwithSSML_VGp/botcomponent.xml new file mode 100644 index 0000000..d86e345 --- /dev/null +++ b/submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.tool.ConverttexttospeechwithSSML_VGp/botcomponent.xml @@ -0,0 +1,11 @@ + + 9 + Convert text to speech by using Speech Synthesis Markup Language (SSML) + 0 + Convert text to speech with SSML + + cr88d_podcastdemo_OMpe9u + + 0 + 1 + \ No newline at end of file diff --git a/submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.tool.ConverttexttospeechwithSSML_VGp/data b/submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.tool.ConverttexttospeechwithSSML_VGp/data new file mode 100644 index 0000000..be44470 --- /dev/null +++ b/submissions/podcast-generation-agent/solution/botcomponents/cr88d_podcastdemo_OMpe9u.tool.ConverttexttospeechwithSSML_VGp/data @@ -0,0 +1,5 @@ +kind: ConnectorTool +authMode: Maker +connectionReference: cr88d_podcastdemo_OMpe9u.cr.shared_azuretexttospeech.05570216-c221-4c89-b8db-91dc3749dcde +connectorId: /providers/Microsoft.PowerApps/apis/shared_azuretexttospeech +operationId: ConvertTextToSpeechWithSSML \ No newline at end of file diff --git a/submissions/podcast-generation-agent/solution/bots/cr88d_podcastdemo_OMpe9u/bot.xml b/submissions/podcast-generation-agent/solution/bots/cr88d_podcastdemo_OMpe9u/bot.xml new file mode 100644 index 0000000..28b5b7f --- /dev/null +++ b/submissions/podcast-generation-agent/solution/bots/cr88d_podcastdemo_OMpe9u/bot.xml @@ -0,0 +1,11 @@ + + 2 + 1 + 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 + 0 + 1033 + Podcast Agent Demo + 0 + + 4 + \ No newline at end of file diff --git a/submissions/podcast-generation-agent/solution/bots/cr88d_podcastdemo_OMpe9u/configuration.json b/submissions/podcast-generation-agent/solution/bots/cr88d_podcastdemo_OMpe9u/configuration.json new file mode 100644 index 0000000..6256028 --- /dev/null +++ b/submissions/podcast-generation-agent/solution/bots/cr88d_podcastdemo_OMpe9u/configuration.json @@ -0,0 +1,43 @@ +{ + "$kind": "BotConfiguration", + "channels": [ + { + "$kind": "ChannelDefinition", + "id": "MsTeams", + "channelId": "MsTeams" + }, + { + "$kind": "ChannelDefinition", + "id": "Microsoft365Copilot", + "channelId": "Microsoft365Copilot" + } + ], + "publishOnCreate": false, + "publishOnImport": true, + "isLightweightBot": false, + "recognizer": { + "$kind": "CLICopilotRecognizer" + }, + "agentSettings": { + "$kind": "AgentSettings", + "model": { + "$kind": "ModelConfig", + "series": "Sonnet46" + }, + "instructions": { + "$kind": "Instructions", + "segments": [ + { + "$kind": "StaticSegment", + "value": "When a user asks for podcast generation:\n- call the generating podcast script tool \n- once the script is ready call the convert text to speech with SSML\u200B\u200C\n- Retrieve output and generate a wav file for download by the user (post it to the chat)\u200B\u200C\u200B\u200C\n\nAlways include reasoning steps and progress to the end user by sending regular messages about what you are doing between each major steps.\u200B\u200B\u200C\n" + } + ] + }, + "greetingText": "\uD83C\uDF99\uFE0F\uD83D\uDD34 Mics are live.\n\nGive me anything \uD83D\uDCC4 an article, a report, a doc, a pile of messy notes \uD83D\uDDD2\uFE0F and I\u0027ll turn it into a two-host podcast conversation you can actually listen to \uD83C\uDFA7\n\nPaste it below and we\u0027ll roll \uD83C\uDFAC", + "web": { + "$kind": "WebSettings", + "enableWebSearch": true + } + }, + "deferredProvisioning": false +} \ No newline at end of file diff --git a/submissions/podcast-generation-agent/solution/customizations.xml b/submissions/podcast-generation-agent/solution/customizations.xml new file mode 100644 index 0000000..99ad764 --- /dev/null +++ b/submissions/podcast-generation-agent/solution/customizations.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + cr88d_podcastdemo_OMpe9u.cr.shared_azuretexttospeech.05570216-c221-4c89-b8db-91dc3749dcde + /providers/Microsoft.PowerApps/apis/shared_azuretexttospeech + 0 + 0 + 0 + 1 + + + + 1033 + + \ No newline at end of file diff --git a/submissions/podcast-generation-agent/solution/solution.xml b/submissions/podcast-generation-agent/solution/solution.xml new file mode 100644 index 0000000..1180122 --- /dev/null +++ b/submissions/podcast-generation-agent/solution/solution.xml @@ -0,0 +1,82 @@ + + + PodcastGenerationAgent + + + + + 1.0.0.1 + 0 + + RemiDyon + + + + + + + rdyon + 92566 + +
+ 1 + 1 + + + + + + + + + + + + + + + + 1 + + + + + + + + +
+
+ 2 + 1 + + + + + + + + + + + + + + + + 1 + + + + + + + + +
+
+
+ + +
+
\ No newline at end of file