Natural-language queries
Ask in English. The writer agent is primed with the full database schema, so it produces valid joins and column references rather than hallucinated ones.
GitPulseAnalytics turns a plain-English question about GitHub activity into working analysis code. A writer agent drafts it, a reviewer agent scores it, an executor agent runs it — and the table, chart, or forecast comes back in seconds.
Plot the trend of closed issues over time and forecast the next 30 days
GitPulseAnalytics collects issues, pull requests, commits, and repository metadata from the GitHub API into PostgreSQL, then puts a natural-language layer on top of it.
Instead of hand-writing a join across four tables and a plotting script every time a question comes up, you type the question. The system generates schema-aware Python that connects to the database, loads the relevant tables into pandas, and renders the answer as text, a table, or a chart.
Forecasting is built in: Prophet for issue volume, ARIMA/SARIMA for commits and pull requests, projected thirty days out.
Every query is generated, statically checked, scored, and executed — and you can read exactly what ran. Design principle
Each query passes through generation, static analysis, LLM review, and sandboxed execution before a result is shown.
Ask in English. The writer agent is primed with the full database schema, so it produces valid joins and column references rather than hallucinated ones.
Deterministic static checks — AST compile, banned file I/O, import correctness — run alongside an LLM reviewer returning a 0–100 score and an accept/reject verdict.
matplotlib, seaborn, and plotly output renders directly into the Streamlit surface. Charts are produced only when the question actually calls for one.
Prophet models issue trends; statsmodels ARIMA/SARIMA handles commit and PR velocity. Per-repository fits are aligned on a shared index for clean comparison.
A collection notebook pulls repos, issues, pulls, and commits through PyGithub into four typed tables, so analysis runs against a relational store rather than raw API responses.
The generated code, the review score, and the execution result all appear in the interface. Nothing runs behind a curtain — you can read exactly what was executed.
The orchestrator coordinates three specialised agents, each with a single responsibility.
An analytics question is typed into the Streamlit interface and handed to the orchestrator. There are no dropdowns, filters, or pre-built dashboards to configure first.
A GPT-4o-mini call through LangChain receives the question plus the full schema of all four tables. It returns executable Python — Postgres connection, pandas loading, analysis, and Streamlit rendering — with markdown fences stripped by the orchestrator.
Two checks run in sequence. Static analysis compiles the code and flags concrete violations — plt.show() calls, file I/O, input(), missing imports, incorrect Prophet usage, or a timestamp column that contradicts the question. An LLM reviewer then scores quality from 0 to 100 and returns ACCEPTED or REJECTED.
The code runs inside a LangChain PythonREPL, with execution errors caught and surfaced rather than crashing the app. The generated code, quality score, and result — text, dataframe, or figure — return together to the interface.
The same schema is embedded in the writer agent's prompt and enforced by the reviewer's static checks.
| Table | Contents | Key columns |
|---|---|---|
| github_repos | Repository-level popularity metrics | repo · stars · forks |
| github_issues | Issue lifecycle and labelling | state · created_at · closed_at · labels |
| github_pulls | Pull request flow and authorship | state · merged_at · user_login |
| github_commits | Commit history per contributor | sha · author_login · committed_at |
Python 3.11 throughout, with a deliberately small and well-supported dependency surface.
The full multi-agent pipeline, the data collection notebook, and setup instructions are on GitHub. Clone it, point it at your own repositories, and start asking questions.