Skip to content

Codai is an AI code assistant that helps developers through a session-based CLI, providing intelligent code suggestions, refactoring, and code reviews based on the full context of the project. It supports multiple LLMs, including GPT-4o, GPT-4, and Ollama, to streamline daily development tasks.

License

Notifications You must be signed in to change notification settings

meysamhadeli/codai

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

CI Go Version Apache License Go Reference

Codai

๐Ÿ’ก Codai is an AI code assistant designed to help developers efficiently manage their daily tasks through a session-based CLI, such as adding new features, refactoring, and performing detailed code reviews. What makes codai stand out is its deep understanding of the entire context of your project, enabling it to analyze your code base and suggest improvements or new code based on your context. This AI-powered tool supports multiple LLM models, including GPT-4o, GPT-4, Ollama, and more.

We use two main methods to manage and summarize full context:

  1. RAG (Retrieval-Augmented Generation)

  2. Summarize Full Context of Code with Tree-sitter.

Each method has its own benefits and is chosen depending on the specific needs of the request. Below is a description of each method.

๐Ÿ“š RAG

The codai uses RAG (Retrieval-Augmented Generation) to improve code suggestions by embedding and retrieving the most relevant information based on user input. RAG generates embeddings for the entire code context, allowing the AI to dynamically find the most relevant details. By connecting to an embedding model, codai retrieves the just necessary context, which is then sent with the userโ€™s query to the code-suggestion AI model. This approach reduces token usage and provides accurate, helpful responses, making it the recommended method.

๐ŸŒณ Summarize Full Context of Code with Tree-sitter

Another approach involves creating a summary of the full context of project with Tree-sitter and in this approach we just send the signature body of our code without full implementation of code block to the AI. When a user requests a specific part of code, the system can retrieve the full context for just that section. This approach also saves tokens because it just sends only completed parts, but it usually uses slightly more tokens than the RAG method. In RAG, only the related context send to the AI for saving even more tokens.

๐Ÿš€ Get Started

To install codai globally, you can use the following command:

go install github.com/meysamhadeli/codai@latest

โš™๏ธ Set Environment Variables

To use codai, you need to set your environment variable for the API key.

For Bash, use:

export CHAT_API_KEY="your_chat_api_key"
export EMBEDDINGS_API_KEY="your_embeddings_api_key"     #(Optional, If you want use RAG.)

For PowerShell, use:

$env:CHAT_API_KEY="your_chat_api_key"
$env:EMBEDDINGS_API_KEY="your_embeddings_api_key"     #(Optional, If you want use RAG.) 

๐Ÿ”ง Configuration

codai requires a codai-config.yml file in the root of your working directory or using environment variables to set below configs globally as a configuration.

The codai-config file should be like following example base on your AI provider:

codai-config.yml

ai_provider_config:
  provider_name: "openai"     # openai | ollama | azure-openai
  base_url: "https://api.openai.com"     # "http://localhost:11434" | "https://test,openai.azure.com"
  chat_completion_model: "gpt-4o"
  embedding_model: "text-embedding-3-small"     #(Optional, If you want use RAG.)
  chat_api_version: "2024-04-01-preview"     #(Optional, If your AI provider like AzureOpenai has chat api version.)
  embeddings_api_version: "2024-01-01-preview"     #(Optional, If your AI provider like AzureOpenai has embeddings api version.)
  temperature: 0.2
  threshold: 0.2     #(Optional, If you want use RAG.)
theme: "dracula"
rag: true     #(Optional, If you want use RAG.)

Note: We used the standard integration of OpenAI APIs, Ollama APIs and Azure Openai and you can find more details in documentation of each APIs.

If you wish to customize your configuration, you can create your own codai-config.yml file and place it in the root directory of each project you want to analyze with codai. If no configuration file is provided, codai will use the default settings.

You can also specify a configuration file from any directory by using the following CLI command:

codai code --config ./codai-config.yml

Additionally, you can pass configuration options directly in the command line. For example:

codai code --provider_name openapi --temperature 0.8 --chat_api_key test-chat-key --embeddings_api_key test-embeddings-key

This flexibility allows you to customize config of codai on the fly.

Note: We used Chroma for style of our text and code block, and you can find more theme here in Chroma Style Gallery and use it as a theme in codai.

๐Ÿ”ฎ LLM Models

โšก Best Models

The codai works well with advanced LLM models specifically designed for code generation, including GPT-4o and GPT-4. These models leverage the latest in AI technology, providing powerful capabilities for understanding and generating code, making them ideal for enhancing your development workflow.

๐Ÿ’ป Local Models

In addition to cloud-based models, codai is compatible with local models such as Ollama. To achieve the best results, it is recommended to utilize models like Phi-3-medium instruct (128k), Mistral Large (2407) and Meta-Llama-3.1-70B-Instruct. These models have been optimized for coding tasks, ensuring that you can maximize the efficiency and effectiveness of your coding projects.

๐ŸŒ OpenAI Embedding Models

The codai platform uses OpenAI embedding models to retrieve relevant content with high efficiency. Recommended models include are text-embedding-3-large, text-embedding-3-small, and text-embedding-ada-002, both known for their cost-effectiveness and accuracy in capturing semantic relationships. These models are ideal for applications needing high-quality performance in code context retrieval.

๐Ÿฆ™ Ollama Embedding Models

codai also supports Ollama embedding models for local, cost-effective, and efficient embedding generation and retrieval of relevant content. Models such as mxbai-embed-large, all-minilm, and nomic-embed-text provide effective, private embedding creation optimized for high-quality performance. These models are well-suited for RAG-based retrieval in code contexts, eliminating the need for external API calls.

โ–ถ๏ธ How to Run

To use codai as your code assistant, navigate to the directory where you want to apply codai and run the following command:

codai code

This command will initiate the codai assistant to help you with your coding tasks with understanding the context of your code.

โœจ Features

๐Ÿง  Intelligent Code Suggestions: Provide context-aware code completion and suggestions as you type.

โž• Add New Features or Test Cases: Suggest new features or generate test cases based on existing code, helping to enhance functionality and ensure code reliability.

๐Ÿ”„ Code Refactoring: Provide specific suggestions to improve the structure and efficiency of existing code, making it cleaner and easier to maintain.

๐Ÿ› Describe a Bug: Users can describe bugs in their code, allowing the AI to analyze the issue and provide targeted suggestions for resolution or debugging steps.

โœ… Code Review Assistance: Analyze code and identify potential bugs, providing suggestions to refactor for cleaner and better-performing code.

โœ”๏ธ Direct Code Acceptance: After receiving code suggestions from the AI, users can directly accept changes, which will be applied immediately to the codebase.

๐Ÿ“š Documentation Generation: Automatically generate documentation based on the codebase, including function descriptions, parameter details, and usage examples.

๐ŸŒ Multi-Language Support: Support for various programming languages (C#, Go, Python, Java, Javascript, Typescript) to cater to a wider range of developers.

โš™๏ธ Customizable Config: Allow users to customize settings through a config file (e.g., changing AI provider, tuning temperature settings).

๐Ÿ“Š Project Context Awareness: Maintain awareness of the entire project context to provide more accurate suggestions.

๐ŸŒณ Full Context Summarization with Tree-sitter: Summarize the full context of your codebase using Tree-sitter for accurate and efficient code analysis.

๐Ÿ” RAG System Implementation: Implement a Retrieval-Augmented Generation system to improve the relevance and accuracy of code suggestions by retrieving relevant context from the project.

โšก Support variety of LLM models: Work with advanced LLM models like GPT-4o, GPT-4 and Ollama to get high-quality code suggestions and interactions.

๐Ÿ—‚๏ธ Edit Multiple Files at Once: Enable the AI to modify several files at the same time, making it easier to handle complex requests that need changes in different areas of the code.

๐Ÿ’ณ Token Management: Track and represent the token consumption for each request, providing transparency on how many tokens are used, which helps in managing API costs effectively.

๐Ÿ—บ๏ธ Plan

๐ŸŒ€ This project is a work in progress; new features will be added over time. ๐ŸŒ€

I will try to add new features in the Issues section of this app.

๐ŸŒŸ Support

If you like my work, feel free to:

  • โญ this repository. And we will be happy together :)

Thanks a bunch for supporting me!

๐Ÿค Contribution

Thanks to all contributors, you're awesome and this wouldn't be possible without you! The goal is to build a categorized, community-driven collection of very well-known resources.

Please follow this contribution guideline to submit a pull request or create the issue.

About

Codai is an AI code assistant that helps developers through a session-based CLI, providing intelligent code suggestions, refactoring, and code reviews based on the full context of the project. It supports multiple LLMs, including GPT-4o, GPT-4, and Ollama, to streamline daily development tasks.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published