ποΈ Briefing Room β Pre-Meeting Intel Agent
You have a call with a company in 30 minutes. What do you need to know?
Enter a company name (and optionally the attendee) and the agent researches the live web and produces a one-page, fully cited pre-meeting brief: three things to know, a company snapshot, three questions to ask, and one thing to avoid.
Built with LangGraph, Tavily, and Nebius Token Factory.
π Features
- LangGraph research loop, not a chain β the graph plans research questions, searches the web with Tavily, then a reflection node checks coverage and loops back with follow-up queries if it finds gaps (up to your iteration budget).
- Cited output β every claim in the brief is grounded in the collected evidence with inline
[n]citations and a sources list. - Live graph progress β the Streamlit UI streams node-by-node updates (plan β research β reflect β write) as the run happens.
- Structured intermediate outputs β planning and reflection use Pydantic structured output (
with_structured_output), so the control flow is data-driven, not prompt-parsing. - CLI + Streamlit UI β run it headless in a terminal or interactively in the browser.
- Optional LangSmith tracing β flip two env vars to watch every graph step in LangSmith.
π οΈ Tech Stack
- Python 3.10+
- LangGraph β state machine with a conditional reflectβresearch cycle
- langchain-tavily β Tavily web search as a LangChain tool
- langchain-openai β OpenAI-compatible client pointed at Nebius Token Factory
- Streamlit β web UI
- Pydantic β structured outputs
Workflow
ββββββββββ ββββββββββββ βββββββββββ
START ββΆβ plan β βββΆ β research β βββΆ β reflect β βββ gaps + budget left
ββββββββββ ββββββββββββ βββββββββββ β
β² β
βββββββββββββββββββββββββββββββββββββββββ
β sufficient
βΌ
ββββββββββ
β write β βββΆ END
ββββββββββ
- plan β decomposes "meeting with company" into 4β6 search-ready research questions (structured output).
- research β runs each question through Tavily, dedupes by URL, and accumulates evidence in graph state.
- reflect β an editor-persona LLM judges coverage (structured output:
sufficient,gaps). Gaps route the graph back to research; otherwise it proceeds. - write β synthesizes the markdown brief with inline citations from the numbered evidence.
π¦ Getting Started
Prerequisites
- Python 3.10+
- uv (recommended) or pip
- API keys:
- Nebius Token Factory β serves the LLM
- Tavily β powers web research
Installation
git clone https://github.com/nebius/token-factory-cookbook
cd token-factory-cookbook/agents/langchain/meeting_briefing_agent
uv sync # or: pip install -e .
cp env.example .env # add your NEBIUS_API_KEY and TAVILY_API_KEY
The app resolves .env from the meeting_briefing_agent directory, regardless
of the directory from which Streamlit is launched. The sidebar keeps the
original password-masked fields and fills them from .env when configured.
βοΈ Usage
Streamlit UI:
uv run streamlit run app.py
Open http://localhost:8501, enter a company (e.g. LangChain), optionally an attendee and your meeting goal, and hit Generate brief. Watch the graph work through its nodes, then read the brief and inspect the evidence table. Download the brief as Markdown with one click.
CLI:
uv run python main.py "LangChain" --attendee "Harrison Chase, CEO" --context "exploring an integration partnership"
LangSmith (optional): add these to .env to trace every run:
LANGSMITH_TRACING=true
LANGSMITH_API_KEY=your_langsmith_api_key
π Project Structure
meeting_briefing_agent/
βββ graph.py # LangGraph state machine (plan β research β reflect β β write)
βββ app.py # Streamlit UI with live node progress + evidence table
βββ main.py # CLI entrypoint
βββ pyproject.toml # Dependencies (uv/pip)
βββ test_graph.py # Deterministic graph tests (no API calls)
βββ env.example # Required/optional environment variables
βββ README.md
π Technical Notes
- Default model:
Qwen/Qwen3-30B-A3B-Instruct-2507on Nebius Token Factory (an economical MoE model with structured-output support). Switch toQwen/Qwen3.5-397B-A17B,deepseek-ai/DeepSeek-V4-Pro, orzai-org/GLM-5.2in the sidebar for higher-quality reasoning and writing, or setNEBIUS_MODEL. - Iteration budget: the reflectβresearch loop runs at most
max_iterationstimes (default 2, configurable) so a run always terminates. - Evidence dedupe: sources are deduplicated by URL across all research passes.