Inspiration
What it does It lookup for the papers and give suggestion for users if they provide what they are looking for and also make papers for them which would make them more focused on the project
How we built it User types a question → React sends POST to /api/research → FastAPI opens a Server-Sent Events stream → runs 6 agents sequentially → each agent fires SSE events → React updates the UI in real time → final report appears with typewriter animation.
- OrchestratorAgent-1 OrchestratorAgent Plans pipeline, identifies domain + complexity User query JSON: {domain, complexity}-input is original input 2 QueryDecomposer->Breaks query into 4 focused sub-queries. Original query JSON array of 4 strings 3.WebSearchAgent-Fetches arXiv papers for each sub-query-Paper list + 1-line findings
- PDFReaderAgent-Reads uploaded PDFs from S3 via Bedrock-S3 PDF keys-Key insights per PDF 5.SynthesisAgent-Finds consensus, contradictions, gaps-Papers + PDF insights-JSON synthesis object
- ReportWriterAgent-Writes structured markdown report-All above outputs-Full research report
Challenges we ran into. I came across the challenge of what happens if it goes offline, then I developed an offline database which can be used to retrieve the paper information through offline way so the work can go on
Accomplishments that we're proud of I am proud of the thought that I came to interact with the Amazon Great Service of AI Nova Lite, and also the bedrock, and coming in contact with the rest of the AWS services, and getting to interact with them and using them
What we learned- Amazon Nova has its own rules. The biggest surprise was that Nova Lite's message format is different from every other LLM API. Content must be a JSON array — [{"text": "your message"}] — not a plain string. This caused a ValidationException that looked completely cryptic until we traced it to that one field. The lesson: always read the model's own documentation, never assume OpenAI conventions transfer.
Agents need structured outputs, not prose. Early prompts asked agents to "describe" things. That broke downstream agents that needed to parse the response. The fix was forcing every agent to return strict JSON — {"domain": "...", "complexity": "..."} — and catching parse failures with a fallback. In a real pipeline, agents talk to each other through data, not language. Streaming makes everything feel alive. The actual research takes 15-20 seconds. Without SSE streaming, the user would stare at a spinner. With it, they watch each agent light up, turn gold while running, then green when done. Same total time, completely different experience. StreamingResponse with an async generator in FastAPI was simpler than expected — under 10 lines of code for a real-time data stream.
What's next for AI research assistant
Real PDF reading. Right now the PDFReaderAgent receives a base64 string and can only see the first 500 characters. The next step is actually parsing the PDF with pdfplumber or pymupdf, chunking it into sections, and feeding the full text to the model. This turns the agent from a placeholder into something genuinely useful.
Citation linking. The report generates references like Smith et al. 2024 but they're not clickable. Connecting them back to the real arXiv URLs from the WebSearchAgent's results would make the report actually usable for research.
Memory across sessions. Every research session starts fresh. Storing past reports and synthesis results in SQLite means users could ask "how does this relate to what I searched last week?" — the beginning of a real research workspace.
Log in or sign up for Devpost to join the conversation.