Skip to content

QA-Pilot is an interactive chat project that leverages online/local LLM for rapid understanding and navigation of GitHub code repository.

License

Notifications You must be signed in to change notification settings

reid41/QA-Pilot

Repository files navigation

qa-pilot

QA-Pilot is an interactive chat project that leverages online/local LLM for rapid understanding and navigation of GitHub code repository.

Features

  • Chat with github public repository with git clone way
  • Store the chat history
  • Easy to set the configuration
  • Multiple chat sessions
  • Locate the session quicly with search function
  • Integrate with codegraph to view the python file
  • Support the different LLM models
    • ollama(llama3.1, phi3, llama3, gemma2)
    • openai(gpt-4o, gpt-4-turbo, gpt-4, and gpt-3.5-turbo)
    • mistralai(mistral-tiny, mistral-tiny, mistral-small-latest, mistral-medium-latest, mistral-large-latest, codestral-lates)
    • localai(gpt-4, more)
    • zhipuai(glm-4-0520, glm-4, glm-4-air, glm-4-airx, glm-4-flash)
    • anthropic(claude-3-opus-20240229, claude-3-sonnet-20240229, claude-3-haiku-20240307, claude-3-5-sonnet-20240620)
    • llamacpp
    • nvidia(meta/llama3-70b-instruct, more)
    • tongyi(qwen-turbo, qwen-plus, qwen-max, more)
    • moonshot(moonshot-v1-8k, moonshot-v1-32k, moonshot-v1-128k)

Release

  • 2024-07-03 update langchain to 0.2.6 version and add moonshot API support

  • 2024-06-30 add Go Codegraph

  • 2024-06-27 add nvidia/tongyi API support

  • 2024-06-19 add llamacpp API support, improve the settings list in the sidebar and add upload model function for llamacpp, add prompt templates setting

  • 2024-06-15 add anthropic API support, refactor some functions, and fix chat show messages

  • 2024-06-12 add zhipuai API support

  • 2024-06-10 Convert flask to fastapi and add localai API support

  • 2024-06-07 Add rr: option and use FlashRank for the search

  • 2024-06-05 Upgrade langchain to v0.2 and add ollama embeddings

  • 2024-05-26 Release v2.0.1: Refactoring to replace Streamlit fontend with Svelte to improve the performance.

Disclaimer

  • This is a test project to validate the feasibility of a fully local solution for question answering using LLMs and Vector embeddings. It is not production ready, and it is not meant to be used in production.
  • Do not use models for analyzing your critical or production data!!
  • Do not use models for analyzing customer data to ensure data privacy and security!!
  • Do not use models for analyzing you private/sensitivity code respository!!

QA-Pilot

qa-demo-new

CodeGraph

code-graph-new

To deploy QA-Pilot, you can follow the below steps:

  1. Clone the QA-Pilot repository:
git clone https://github.com/reid41/QA-Pilot.git
cd QA-Pilot
  1. Install conda for virtual environment management. Create and activate a new virtual environment.
conda create -n QA-Pilot python=3.10.14
conda activate QA-Pilot
  1. Install the required dependencies:
pip install -r requirements.txt
  1. Install the pytorch with cuda pytorch

  2. Setup providers

ollama pull <model_name>

ollama list
  • For setup localAI and LocalAI github to manage the local LLM, set the localAI base_url in config/config.ini. e.g.
docker run -p 8080:8080 --name local-ai -ti localai/localai:latest-aio-cpu
# Do you have a Nvidia GPUs? Use this instead
# CUDA 11
# docker run -p 8080:8080 --gpus all --name local-ai -ti localai/localai:latest-aio-gpu-nvidia-cuda-11
# CUDA 12
# docker run -p 8080:8080 --gpus all --name local-ai -ti localai/localai:latest-aio-gpu-nvidia-cuda-12

# quick check the service with http://<localAI host>:8080/
# quick check the models with http://<localAI host>:8080/models/
  • For setup llamacpp with llama-cpp-python

    • upload the model to llamacpp_models dir or upload from the llamacpp models under the Settings
    • set the model in llamacpp_llm_models section in config/config.ini
  • For setup API key in .env

    • OpenAI: OPENAI_API_KEY='<openai_api_key,>'
    • MistralAI: MISTRAL_API_KEY='<mistralai_api_key>'
    • ZhipuAI: ZHIPUAI_API_KEY='<zhipuai_api_key,>'
    • Anthropic: ANTHROPIC_API_KEY='<anthropic_api_key>'
    • Nvidia: NVIDIA_API_KEY='<nvidia_api_key>'
    • TongYi: DASHSCOPE_API_KEY='<tongyi_api_key>'
    • Moonshot: MOONSHOT_API_KEY='<moonshot_api_key>'
  • For Go codegraph, make sure setup GO env, compile go file and test

go build -o parser parser.go

# test
./parser /path/test.go
  1. Set the related parameters in config/config.ini, e.g. model provider, model, variable, Ollama API url and setup the Postgresql env
# create the db, e.g.
CREATE DATABASE qa_pilot_chatsession_db;
CREATE USER qa_pilot_user WITH ENCRYPTED PASSWORD 'qa_pilot_p';
GRANT ALL PRIVILEGES ON DATABASE qa_pilot_chatsession_db TO qa_pilot_user;

# set the connection
cat config/config.ini
[database]
db_name = qa_pilot_chatsession_db
db_user = qa_pilot_user
db_password = qa_pilot_p
db_host = localhost
db_port = 5432


# set the arg in script and test connection
python check_postgresql_connection.py
  1. Download and install node.js and Set up the fontend env in one terminal
# make sure the backend server host ip is correct, localhost is by default
cat svelte-app/src/config.js
export const API_BASE_URL = 'http://localhost:5000';

# install deps
cd svelte-app
npm install

npm run dev
  1. Run the backend QA-Pilot in another terminal:
python qa_pilot_run.py

Tips

  • Do not use url and upload at the same time.
  • The remove button cannot really remove the local chromadb, need to remove it manually when stop it.
  • Switch to New Source Button to add a new project
  • Use rsd: to start the input and get the source document
  • Use rr: to start the input and use the FlashrankRerank for the search
  • Click Open Code Graph in QA-Pilot to view the code(make sure the the already in the project session and loaded before click), curretly support python and go