Illuminating research with agentic AI.
ArcLight Copilot is a demo-ready, portfolio-grade agentic research assistant built with LangChain and Azure OpenAI, featuring planning, tool use (web/RAG), reflection, and a clean Streamlit UI.
Why this repo? Most demos are chat wrappers. ArcLight plans tasks, uses tools, cites sources, and self-checks answers—showcasing real agent patterns and Azure integration.
- Agentic flow: Planner → Researcher (RAG/tool use) → Reviewer (reflection) → Final Answer
- Azure-first: Azure OpenAI (LLM & embeddings), optional Azure AI Search for RAG
- Streamlit UI: one-file run, live step log, exportable run trace
- Quality: tests, CI (ruff/black/pytest), Dockerfile, DevContainer
- Safe defaults: Runs in a demo mode without API keys; full features light up when env vars are set
User
└─ Streamlit UI
└─ ArcLight Orchestrator
├─ Planner Agent (LangChain Tools Agent)
├─ Researcher (RAG chain + tools)
├─ Reviewer (critique & retry)
└─ Finalizer (answer + citations + action log)
Tools:
- Web Search (stub or Tavily/SerpAPI)
- Azure AI Search (optional)
- GitHub Issues (stub)
- Python Sandbox (restricted)
Memory:
- Local JSON store (dev) or plug in Cosmos DB
python -m venv .venv && source .venv/bin/activate
pip install -U pip
pip install -r requirements.txtcp .env.example .env
# Fill Azure settings if you want live LLM and RAGpip install -e .streamlit run app/ui_streamlit.pyNo keys? No problem. ArcLight will run in Demo Mode with canned agent outputs so you can see the UX and flow.
Copy .env.example and fill as needed.
Required for live LLM
AZURE_OPENAI_ENDPOINTAZURE_OPENAI_API_KEYAZURE_OPENAI_DEPLOYMENT(e.g., gpt-4o-mini)AZURE_OPENAI_API_VERSION(e.g., 2024-06-01)
Optional for RAG
AZURE_SEARCH_ENDPOINTAZURE_SEARCH_KEYAZURE_SEARCH_INDEX
ArcLight-Copilot/
├─ app/
│ └─ ui_streamlit.py
├─ arclight/
│ ├─ agents/
│ │ ├─ planner.py
│ │ ├─ researcher.py
│ │ └─ reviewer.py
│ ├─ chains/
│ │ └─ rag_chain.py
│ ├─ tools/
│ │ ├─ web_search.py
│ │ ├─ github_issues.py
│ │ └─ py_sandbox.py
│ ├─ models/
│ │ └─ llm.py
│ ├─ memory/
│ │ └─ conversation_store.py
│ └─ config.py
├─ tests/
│ ├─ test_tools.py
│ └─ eval_tasks/
│ └─ tasks.yaml
├─ .github/workflows/ci.yml
├─ .devcontainer/devcontainer.json
├─ Dockerfile
├─ requirements.txt
├─ .env.example
├─ .gitignore
└─ README.md
- Left sidebar: Model/feature status, demo-mode toggle, export trace
- Main: Prompt box → live “Agent Log” → final answer with citations
- RAG panel: Shows retrieved docs (when Azure AI Search is configured)
tests/test_tools.py– sanity checks for tools (no external calls in CI)tests/eval_tasks/tasks.yaml– sample eval tasks for regression checks
Run tests:
pytest -q- Python sandbox is restricted (builtins off, tiny allowlist).
- Web search tool is a stub by default—swap with Tavily/SerpAPI for production.
- Do not store keys in code. Use
.envor your secret manager.
- Ingestion script to push PDFs/notes into Azure AI Search
- Richer reviewer with structured hallucination scoring
- Next.js UI option
- Trace export as shareable JSON (replay in UI)
Built using LangChain, Streamlit, and Azure services. MIT Licensed.