Skip to content
Merged

Dev #66

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
185 changes: 173 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,89 @@
![code coverage](https://github.com/Pantheon-temple/Prometheus/raw/coverage-badge/coverage.svg)
![Code Coverage](https://github.com/Pantheon-temple/Prometheus/raw/coverage-badge/coverage.svg)

Prometheus is a FastAPI backend service that performs intelligent codebase-level operations including answering questions, resolving issues, and reviewing pull requests. At its core, it implements a multi-agent approach governed by a state machine that ensures code quality through automated reviews, build verification, and test execution.
# Prometheus

Prometheus can be connected to other services provided in the `Pantheon-temple` orgnization, for example:
* Connect it to `Pantheon-temple/Argus-GitHub` to automatically pull the latest changes from your GitHub repository, answer/fix issues, and review pull requests.
* Connect it to `Pantheon-temple/Hermes` to have chat interface with your codebase (GitHub or local).
* Connect it your own service, by sending requests to the FastAPI endpoints.
Prometheus is a FastAPI-based backend service designed to perform intelligent codebase-level operations, including
answering questions, resolving issues, and reviewing pull requests. At its core, it implements a multi-agent approach
governed by a state machine to ensure code quality through automated reviews, build verification, and test execution.

# Quick start
## 🚀 Features

In this project we use `docker-compose.yml`(for Linux), or `docker-compose.win_mac.yml` (for Windows or MacOS). You should update the `example_settings.toml` with the API keys, and then rename the file to `settings.toml`.
- **Codebase Analysis**: Answer questions about your codebase and provide insights.
- **Issue Resolution**: Automatically resolve issues in your repository.
- **Pull Request Reviews**: Perform intelligent reviews of pull requests to ensure code quality.
- **Multi-Agent System**: Uses a state machine to coordinate multiple agents for efficient task execution.
- **Integration with External Services**: Seamlessly connects with other services in the `Pantheon-temple` organization.

Now, simply run `docker compose up`, and you can access Promtheus at `http://localhost:9001` and the OpenAPI docs at `http://localhost:9001/docs`
---

## 🔗 Integrations

```
Prometheus can be connected to other services for extended functionality:

- **[Argus-GitHub](https://github.com/Pantheon-temple/Argus-GitHub)**: Automatically pull the latest changes from your
GitHub repository, answer/fix issues, and review pull requests.
- **[Hermes](https://github.com/Pantheon-temple/Hermes)**: Enable a chat interface to interact with your codebase (
GitHub or local).
- **Custom Services**: Connect your own services by sending requests to the FastAPI endpoints.

---

## ⚙️ Quick Start

### ✅ Prerequisites

- Docker
- Docker Compose
- API keys (e.g. OpenAI, Anthropic, Google Gemini)

---

### 📦 Setup

1. Clone the repository:
```bash
git clone https://github.com/Pantheon-temple/Prometheus.git
cd Prometheus
```

2. Copy the `example.env` file to `.env` and update it with your API keys and other required configurations:
```bash
mv example.env .env
```

3. Start the services using Docker Compose:

- **Linux (includes PostgreSQL)**:
```bash
docker-compose up --build
```

- **macOS / Windows**:

> ⚠️ `docker-compose.win_mac.yml` does **not include PostgreSQL**.If you don't have PostgreSQL on your device,
you may have to start the PostgreSQL container manually **before starting services** by following the "Database
Setup" section below.

```bash
docker-compose -f docker-compose.win_mac.yml up --build
```

4. Access Prometheus:
- Service: [http://localhost:9001](http://localhost:9001)
- OpenAPI Docs: [http://localhost:9001/docs](http://localhost:9001/docs)

---

## 🗄️ Database Setup

### PostgreSQL

> ⚠️ If you're using `docker-compose.win_mac.yml`, you may have to manually start PostgreSQL before launching
> Prometheus:

Run the following command to start a PostgreSQL container:

```bash
docker run -d \
-p 5432:5432 \
-e POSTGRES_USER=postgres \
Expand All @@ -23,7 +92,11 @@ docker run -d \
postgres
```

```
### Neo4j

Run the following command to start a Neo4j container:

```bash
docker run -d \
-p 7474:7474 \
-p 7687:7687 \
Expand All @@ -33,4 +106,92 @@ docker run -d \
-e NEO4J_dbms_memory_heap_max__size=8G \
-e NEO4J_dbms_memory_pagecache_size=4G \
neo4j
```
```

Verify Neo4J at: [http://localhost:7474](http://localhost:7474)

---

## ⚙️ Configuration

Set the following variables in your `.env` file:

### 🔹 Neo4j

* `PROMETHEUS_NEO4J_URI`
* `PROMETHEUS_NEO4J_USERNAME`
* `PROMETHEUS_NEO4J_PASSWORD`

### 🔹 LLM Models

* `PROMETHEUS_ADVANCED_MODEL`
* `PROMETHEUS_BASE_MODEL`
* API Keys:

* `PROMETHEUS_OPENAI_API_KEY`
* `PROMETHEUS_ANTHROPIC_API_KEY`
* `PROMETHEUS_GEMINI_API_KEY`
* `PROMETHEUS_OPENROUTER_API_KEY`

### 🔹 Other Settings

* `PROMETHEUS_WORKING_DIRECTORY`
* `PROMETHEUS_GITHUB_ACCESS_TOKEN`
* `PROMETHEUS_KNOWLEDGE_GRAPH_MAX_AST_DEPTH`
* `PROMETHEUS_NEO4J_BATCH_SIZE`
* `PROMETHEUS_POSTGRES_URI`

---

## 🧪 Development

### Requirements

* Python 3.11+

### Steps

1. Install dependencies:

```bash
pip install hatchling
pip install .
pip install .[test]
```

2. Run tests:

```bash
coverage run --source=prometheus -m pytest -v -s -m "not git"
```

3. Generate coverage report:

```bash
coverage report -m
```
4. Generate HTML report:

```bash
coverage html
open htmlcov/index.html
```

5. Start dev server:

```bash
uvicorn prometheus.app.main:app --host 0.0.0.0 --port 9001
```

---

## 📄 License

Licensed under the [Apache License 2.0](LICENSE).

---

## 📬 Contact

For questions or support, please open an issue in
the [GitHub repository](https://github.com/Pantheon-temple/Prometheus/issues).
22 changes: 11 additions & 11 deletions docker-compose.win_mac.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,24 +32,24 @@ services:
ports:
- "9001:9001"
environment:
- PROMETHEUS_LOGGING_LEVEL="DEBUG"
- PROMETHEUS_NEO4J_URI="bolt://neo4j:7687"
- PROMETHEUS_NEO4J_USERNAME=neo4j
- PROMETHEUS_NEO4J_PASSWORD=password
- PROMETHEUS_NEO4J_BATCH_SIZE=1000
- PROMETHEUS_KNOWLEDGE_GRAPH_MAX_AST_DEPTH=3
- PROMETHEUS_KNOWLEDGE_GRAPH_CHUNK_SIZE=10000
- PROMETHEUS_KNOWLEDGE_GRAPH_CHUNK_OVERLAP=1000
- PROMETHEUS_MAX_TOKEN_PER_NEO4J_RESULT=10000
- PROMETHEUS_LOGGING_LEVEL=${PROMETHEUS_LOGGING_LEVEL}
- PROMETHEUS_NEO4J_URI=${PROMETHEUS_NEO4J_URI}
- PROMETHEUS_NEO4J_USERNAME=${PROMETHEUS_NEO4J_USERNAME}
- PROMETHEUS_NEO4J_PASSWORD=${PROMETHEUS_NEO4J_PASSWORD}
- PROMETHEUS_NEO4J_BATCH_SIZE=${PROMETHEUS_NEO4J_BATCH_SIZE}
- PROMETHEUS_KNOWLEDGE_GRAPH_MAX_AST_DEPTH=${PROMETHEUS_KNOWLEDGE_GRAPH_MAX_AST_DEPTH}
- PROMETHEUS_KNOWLEDGE_GRAPH_CHUNK_SIZE=${PROMETHEUS_KNOWLEDGE_GRAPH_CHUNK_SIZE}
- PROMETHEUS_KNOWLEDGE_GRAPH_CHUNK_OVERLAP=${PROMETHEUS_KNOWLEDGE_GRAPH_CHUNK_OVERLAP}
- PROMETHEUS_MAX_TOKEN_PER_NEO4J_RESULT=${PROMETHEUS_MAX_TOKEN_PER_NEO4J_RESULT}
- PROMETHEUS_ADVANCED_MODEL=${PROMETHEUS_ADVANCED_MODEL}
- PROMETHEUS_BASE_MODEL=${PROMETHEUS_BASE_MODEL}
- PROMETHEUS_ANTHROPIC_API_KEY=${PROMETHEUS_ANTHROPIC_API_KEY}
- PROMETHEUS_GEMINI_API_KEY=${PROMETHEUS_GEMINI_API_KEY}
- PROMETHEUS_OPENAI_API_KEY=${PROMETHEUS_OPENAI_API_KEY}
- PROMETHEUS_OPENROUTER_API_KEY=${PROMETHEUS_OPENROUTER_API_KEY}
- PROMETHEUS_WORKING_DIRECTORY="/app/working_dir"
- PROMETHEUS_WORKING_DIRECTORY=${PROMETHEUS_WORKING_DIRECTORY}
- PROMETHEUS_GITHUB_ACCESS_TOKEN=${PROMETHEUS_GITHUB_ACCESS_TOKEN}
- PROMETHEUS_POSTGRES_URI="postgresql://postgres:password@postgres:5432/postgres?sslmode=disable"
- PROMETHEUS_POSTGRES_URI=${PROMETHEUS_POSTGRES_URI}
networks:
- prometheus_network
volumes:
Expand Down
22 changes: 11 additions & 11 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,24 +43,24 @@ services:
ports:
- "9001:9001"
environment:
- PROMETHEUS_LOGGING_LEVEL="DEBUG"
- PROMETHEUS_NEO4J_URI="bolt://localhost:7687"
- PROMETHEUS_NEO4J_USERNAME=neo4j
- PROMETHEUS_NEO4J_PASSWORD=password
- PROMETHEUS_NEO4J_BATCH_SIZE=1000
- PROMETHEUS_KNOWLEDGE_GRAPH_MAX_AST_DEPTH=3
- PROMETHEUS_KNOWLEDGE_GRAPH_CHUNK_SIZE=10000
- PROMETHEUS_KNOWLEDGE_GRAPH_CHUNK_OVERLAP=1000
- PROMETHEUS_MAX_TOKEN_PER_NEO4J_RESULT=10000
- PROMETHEUS_LOGGING_LEVEL=${PROMETHEUS_LOGGING_LEVEL}
- PROMETHEUS_NEO4J_URI=${PROMETHEUS_NEO4J_URI}
- PROMETHEUS_NEO4J_USERNAME=${PROMETHEUS_NEO4J_USERNAME}
- PROMETHEUS_NEO4J_PASSWORD=${PROMETHEUS_NEO4J_PASSWORD}
- PROMETHEUS_NEO4J_BATCH_SIZE=${PROMETHEUS_NEO4J_BATCH_SIZE}
- PROMETHEUS_KNOWLEDGE_GRAPH_MAX_AST_DEPTH=${PROMETHEUS_KNOWLEDGE_GRAPH_MAX_AST_DEPTH}
- PROMETHEUS_KNOWLEDGE_GRAPH_CHUNK_SIZE=${PROMETHEUS_KNOWLEDGE_GRAPH_CHUNK_SIZE}
- PROMETHEUS_KNOWLEDGE_GRAPH_CHUNK_OVERLAP=${PROMETHEUS_KNOWLEDGE_GRAPH_CHUNK_OVERLAP}
- PROMETHEUS_MAX_TOKEN_PER_NEO4J_RESULT=${PROMETHEUS_MAX_TOKEN_PER_NEO4J_RESULT}
- PROMETHEUS_ADVANCED_MODEL=${PROMETHEUS_ADVANCED_MODEL}
- PROMETHEUS_BASE_MODEL=${PROMETHEUS_BASE_MODEL}
- PROMETHEUS_ANTHROPIC_API_KEY=${PROMETHEUS_ANTHROPIC_API_KEY}
- PROMETHEUS_GEMINI_API_KEY=${PROMETHEUS_GEMINI_API_KEY}
- PROMETHEUS_OPENAI_API_KEY=${PROMETHEUS_OPENAI_API_KEY}
- PROMETHEUS_OPENROUTER_API_KEY=${PROMETHEUS_OPENROUTER_API_KEY}
- PROMETHEUS_WORKING_DIRECTORY="/app/working_dir"
- PROMETHEUS_WORKING_DIRECTORY=${PROMETHEUS_WORKING_DIRECTORY}
- PROMETHEUS_GITHUB_ACCESS_TOKEN=${PROMETHEUS_GITHUB_ACCESS_TOKEN}
- PROMETHEUS_POSTGRES_URI="postgresql://postgres:password@localhost:5432/postgres?sslmode=disable"
- PROMETHEUS_POSTGRES_URI=${PROMETHEUS_POSTGRES_URI}
volumes:
- .:/app
- /var/run/docker.sock:/var/run/docker.sock
Expand Down
29 changes: 29 additions & 0 deletions example.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Logging
PROMETHEUS_LOGGING_LEVEL=DEBUG

# Neo4j settings
PROMETHEUS_NEO4J_URI=bolt://localhost:7687
PROMETHEUS_NEO4J_USERNAME=neo4j
PROMETHEUS_NEO4J_PASSWORD=password
PROMETHEUS_NEO4J_BATCH_SIZE=1000

# Knowledge Graph settings
PROMETHEUS_WORKING_DIRECTORY=/tmp/
PROMETHEUS_KNOWLEDGE_GRAPH_MAX_AST_DEPTH=3
PROMETHEUS_KNOWLEDGE_GRAPH_CHUNK_SIZE=10000
PROMETHEUS_KNOWLEDGE_GRAPH_CHUNK_OVERLAP=1000
PROMETHEUS_MAX_TOKEN_PER_NEO4J_RESULT=10000

# LLM API keys and model settings
PROMETHEUS_ADVANCED_MODEL=gpt-4o
PROMETHEUS_BASE_MODEL=gpt-4o
PROMETHEUS_ANTHROPIC_API_KEY=anthropic_api_key
PROMETHEUS_GEMINI_API_KEY=gemini_api_key
PROMETHEUS_OPENAI_API_KEY=openai_api_key
PROMETHEUS_OPENROUTER_API_KEY=openrouter_api_key

# GitHub settings
PROMETHEUS_GITHUB_ACCESS_TOKEN=github_access_token

# PostgreSQL settings
PROMETHEUS_POSTGRES_URI=postgresql://postgres:password@localhost:5432/postgres?sslmode=disable
29 changes: 0 additions & 29 deletions example_settings.toml

This file was deleted.

Loading
Loading