Choose how to run this agent
Download Agent
Choose how you want to use this agent:
Use Security Settings Key (Recommended)
Use the API key you've already saved in Security Settings. Quick and convenient!
- No need to re-enter API key
- Works offline after download
- Centralized key management
No API key found in Security Settings. Add one now
Enter API Key Manually
Enter your API key now for this specific agent download.
- Use different key for this agent
- One-time use (not saved)
- Works offline after download
Configure Agent Encryption
Description
Turn a meeting recording into a summary, key decisions, and action items, then ask follow-up questions — private and in-browser.
Source Code
# Accumulated transcript segments for this meeting: [{"source": name, "text": text}]
TRANSCRIPTS = []
async def _transcribe_audio(samples, name):
"""(JS-callable) Transcribe decoded audio samples and remember the result.
Underscore-prefixed so it is never exposed to the LLM as a tool. ``samples``
is a Float32Array of mono 16 kHz samples handed over by the page JS.
"""
text = (await agentop_ml.transcribe(samples)).strip()
TRANSCRIPTS.append({"source": name, "text": text})
return text
def _transcript_context():
return "\n\n".join(
f"[{i + 1}] (from {t['source']}) {t['text']}"
for i, t in enumerate(TRANSCRIPTS)
)
async def _generate_minutes():
"""(JS-callable) Turn the transcript into structured minutes via wllama."""
if not TRANSCRIPTS:
return "Upload a meeting recording first, then generate the minutes."
prompt = (
"You are given the TRANSCRIPT of a meeting. Produce concise minutes with "
"exactly these three sections, using this markdown:\n"
"## Summary\n(2-4 sentences)\n\n"
"## Key decisions\n(bullet list; write 'None recorded.' if none)\n\n"
"## Action items\n(bullet list of 'owner - task'; 'None recorded.' if none)\n\n"
"Use ONLY what is in the transcript; do not invent names or tasks.\n\n"
f"TRANSCRIPT:\n{_transcript_context()}"
)
return await process_user_query_wllama(
prompt, globals().get("TEMPLATE_SYSTEM_PROMPT", "")
)
async def process_user_query(query):
"""Free follow-up Q&A grounded ONLY in the meeting transcript.
Overrides the default router so context is deterministic (small local
models are unreliable at deciding to call tools themselves).
"""
if not TRANSCRIPTS:
return "No meeting has been transcribed yet - upload a recording first."
grounded_prompt = (
"Answer the QUESTION using ONLY the meeting TRANSCRIPT below. "
"If the answer is not in the transcript, say you could not find it. "
"Cite segment numbers like [1] where relevant.\n\n"
f"TRANSCRIPT:\n{_transcript_context()}\n\nQUESTION: {query}"
)
return await process_user_query_wllama(
grounded_prompt, globals().get("TEMPLATE_SYSTEM_PROMPT", "")
)
More by ozzo
New Hire Handbook Q&A
Based on the New Hire Handbook Q&A template.
Contract Plain-Language Explainer
Upload a contract and get it explained in plain language — obligations, fees, deadlines, exit claus…
WhatsApp Sales Copilot
Turn a raw WhatsApp chat export into a mini CRM — typed quotes, bookings, payments and boarding pas…
Private Quote & Material Estimator
Drop competing contractor quotes and compare them side by side — totals, inclusions, exclusions — t…
Messy Itinerary Travel Planner
Drop your messy pile of booking PDFs and trip notes and get a clean day-by-day itinerary — plus war…
Semantic Search
Search your own notes or documents by meaning, not keywords — instant results with no LLM download.