gpt-code-search enables you to search your codebase with natural language.
Project description
gpt-code-search
gpt-code-search is a tool enabling you to search your codebase with natural language. It utilizes OpenAI's function calling to retrieve, search and answer queries about your code, boosting productivity and code understanding.
Features
- 🧠 GPT-4: Code search, retrieval, and answering all done with OpenAI's function calling.
- 🔐 Privacy-first: Code snippets only leave your machine when you ask a question and the LLM requests the relevant code.
- 🔥 Works instantly: No pre-processing, chunking, or indexing, get started right away.
- 📦 File-system backed: Works with any code on your machine.
Getting Started
Installation
pip install gpt-code-search
Usage
Ask a question about your codebase
To query about the purpose of your codebase, you can use the query
command:
gpt-code-search query "What does this codebase do?"
# or use the shorthand alias
gcs query "What does this codebase do?"
If you want to generate a test for a specific file, for example analytics.py, you can mention the file name to improve accuracy:
gcs query "Can you generate a test for analytics.py?"
For a general usage question about a certain module, like analytics, you can use keywords to search across the codebase:
gcs query "How do I use the analytics module?"
Remember, mentioning the file name or specific keywords improves the accuracy of the search.
Select a model to use
gcs select-model
Defaults to gpt-3.5-turbo-16k
. The selected model is stored in $HOME/.gpt-code-search/config.toml
.
Configuration
The tool will prompt you to configure the OPENAI_API_KEY
, if you haven't already.
Problem
You want to leverage the power of GPT-4 to search your codebase, but you don't want to manually copy and paste code snippets into a prompt nor send your code to another third-party service (other than OpenAI).
This tool solves these problems by letting GPT-4 determine the most relevant code snippets within your codebase. Also, it meets you where you already live, in your terminal, not a new UI or window.
Examples of the types of questions you might want to ask:
- 🐛 Help debugging errors and finding the relevant code and files
- 📝 Document large files or functionalities formatted as markdown
- 🛠️ Generate new code based on existing files and conventions
- 📨 Ask general questions about any part of the codebase
How it works
We utilize OpenAI's function calling to let GPT-4 call certain predefined functions in our library. You do not need to implement any of these functions yourself. These functions are designed to interact with your codebase and return enough context for the LLM to perform code searches without pre-indexing it or uploading your repo to a third party other than OpenAI. So, you only need to run the tool from the directory you want to search.
The functions currently available for the LLM to call are:
search_codebase
- searches the codebase using a TF-IDF vectorizerget_file_tree
- provides the file tree of the codebaseget_file_contents
- provides the contents of a file
These functions are implemented in gpt-code-search
and are triggered by chat completions. The LLM is prompted to utilize the search_codebase and get_file_tree function as needed to find the necessary context to answer your query and then loops as needed to collect more context with the get_file_contents until the LLM responds.
Privacy
This tool prioritizes privacy. Outside of the LLM, no code is sent to us and is only used as context for the LLM. We do collect anonymous usage data to improve the tool, but you can opt out of this.
Limitations
This does have some limitations, namely:
- The LLM is unable to load context across multiple files at once. This means that if you ask a question that requires context from multiple files, you will need to ask multiple questions.
- Specify the file name and keywords in your question to improve accuracy. For example, if you want to ask a question about
analytics.py
, mention the file name in your question. - The level of search and retrieval is limited by the context window, which refers to the scope of the search conducted by the tool, meaning that we can only search 5 levels deep in the file system. So you need to run the tool from the folder/package closest to the code you want to search.
These limitations lead to suboptimal results in a few cases, but we're working on improving this. We wanted to get this tool out there as soon as possible to get feedback and iterate on it!
Roadmap
- Use vector embeddings to improve search and retrieval
- Add support for generating code and saving it to a file
- Support for searching across multiple codebases
- Allow the model to create new functions that it can then execute
- Use guidance to improve prompts
- Add support for additional models (Claude, Bedrock, etc)
Analytics
We collect anonymous crash and usage data to help us improve the tool. This data aids in understanding usage patterns and improving the tool. You can opt out of analytics by running:
gcs opt-out-of-analytics
You can check the data that by looking at the analytics and config files.
Here's an exhaustive list of the data we collect:
- exception - stacktraces of crashes
- uuid - a unique identifier for the user
- model - the model used for the query
- usage - the type of usage (query_count, query_at, query_execution_time)
Note: We do not collect any PII (ip-address), queries or code snippets.
Contributing
We love contributions from the community! ❤️ If you'd like to contribute, feel free to fork the repository and submit a pull request.
Please read our Code of Conduct and Contributing Guide for more detailed steps and information.
Code of Conduct
We are committed to fostering a welcoming community. To ensure that everyone feels safe and welcome, we have a Code of Conduct that all contributors, maintainers, and users of this project are expected to adhere to.
Support
If you're having trouble using gpt-code-search
, feel free to open an issue on our GitHub. You can also reach out to us directly at narenkmanoharan@gmail.com. We're always happy to help!
Feedback
Your feedback is very important to us! If you have ideas for how we can improve gpt-code-search
, we'd love to hear from you. Please open an issue or reach out to us directly at narenkmanoharan@gmail with your feedback or thoughts.
License
This project is licensed under the terms of the Apache 2.0.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file gpt_code_search-0.0.9.tar.gz
.
File metadata
- Download URL: gpt_code_search-0.0.9.tar.gz
- Upload date:
- Size: 18.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.5.1 CPython/3.11.3 Darwin/22.2.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4856e2b6ead616d2c264cc9b0282e66a31a81e4e833ecd7a74888ba7b37d99e3 |
|
MD5 | ec9ac2e25f2d483d0988d0bfe67f1dfa |
|
BLAKE2b-256 | ccc78200b9385434ce5586e346dc4b52b5b606c8b6ef2f797ac4894a158b4d43 |
File details
Details for the file gpt_code_search-0.0.9-py3-none-any.whl
.
File metadata
- Download URL: gpt_code_search-0.0.9-py3-none-any.whl
- Upload date:
- Size: 17.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.5.1 CPython/3.11.3 Darwin/22.2.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b8267b59b5085cf576c76ae898362b1fd7cb2167df5858448d50232b09c83199 |
|
MD5 | 1e7408b250e916e4daab05f516cfb4a0 |
|
BLAKE2b-256 | f10fa2e1d76b1a7700c26a02f77ef915463f5e9d86b80d013b105df355ef4067 |