Home / Blog /
How Tabnine adapts to your organization
//

How Tabnine adapts to your organization

//
Michelle Gienow /
9 minutes /
December 5, 2024

In today’s fast-paced software development environment, AI code assistants have transitioned from niche tools used by individual developers to essential resources for entire engineering teams. Among these, Tabnine stands out by offering a highly personalized AI experience tailored to the specific needs of each organization. This article explores how Tabnine goes beyond universal models to deliver precise, context-aware coding assistance, thereby enhancing developer productivity and efficiency.

The necessity of personalization in AI code assistants

AI code assistants, powered by large language models (LLMs), have shown significant potential in boosting developer productivity. However, their universal nature often results in generic recommendations that lack the specific knowledge of an organization’s codebase, architecture, and coding practices. This is where Tabnine excels. Our personalization engine enables Tabnine’s AI agents to intake, prioritize, and understand every developer, team, and organization’s context.

How Tabnine personalizes AI recommendations to you

Tabnine enhances its AI capabilities through four levels of progressive personalization, ensuring that its recommendations are highly relevant and tailored to the organization’s needs. These levels include:

  1. Context through local code awareness: Tabnine leverages the local code available on a developer’s machine to provide contextually accurate suggestions. This includes understanding variable types, comments, open files, and imported libraries without requiring additional input from the user. This automatic context awareness ensures more accurate and relevant code completions.
  2. Connection to software repositories: By connecting to organizational sources such as code repositories, design documents, and task management systems like Jira, Tabnine significantly improves the relevance of its code recommendations. This connection allows Tabnine to access a broader context, enhancing its ability to provide precise and useful suggestions.
  3. Coaching: Engineering teams can steer Tabnine’s behavior by setting explicit constraints and standards, ensuring that generated code adheres to specific guidelines. This feature enables teams to enforce coding standards and best practices automatically through customized code review agents, improving code quality across the organization.
  4. Customization: For maximum personalization, Tabnine supports fine-tuning and the creation of custom models tailored to a domain-specific language or an organization’s unique codebase. This requires high-quality training data but results in a model finely tuned to the organization’s specific needs. This level of customization ensures that the AI aligns perfectly with your organization’s coding style and practices.

Leveraging context and connection for better recommendations

Tabnine employs advanced retrieval methods to deliver precise and tailored suggestions:

Retrieval-augmented generation (RAG): This method enhances LLM performance by integrating relevant documents from an organization’s codebase into the model’s prompt, thereby improving the accuracy of generated responses. The process involves chunking code into manageable pieces, embedding these chunks, and querying a vector database to retrieve relevant documents. This approach ensures that the AI’s responses are informed by the most relevant and current information available.

Semantic memory RAG (SEM-RAG): SEM-RAG goes a step further by using static analysis to understand the semantic relationships within a codebase. This allows Tabnine to retrieve contextually relevant code elements even from imported libraries, enhancing the model’s ability to provide precise recommendations based on user-specific information. This method ensures that even complex and interconnected codebases are well-understood by the AI.

Combining personalization with AI agents designed for software development

Tabnine has developed a set of AI agents that you can access through chat, quick commands, and Code Lens buttons from inside your IDE. Using our prebuilt AI agents lets developers quickly execute every step of the software development life cycle. Unlike generic AI code assistants, Tabnine’s AI agents do the heavy lifting of prompt engineering for you. Below we’ve detailed two example use cases documentation and testing that help you understand what our AI agents take care of for you. 

For example, if you were to use a nonagentic AI code assistant to assist with code documentation, you might need to write a prompt with the following degree of detail to get a response that you could immediately implement: 

Documentation

“I am providing you with a Java code file that includes classes for generating passwords, checking password strength, and providing useful password guidelines. Here is what I need you to do with the code:

Carefully read through each function and class in the code. Add comprehensive inline documentation for every function, method, and class. Use JavaDoc-style comments, so the documentation is structured and standardized. Each class should have a high-level comment explaining its purpose, any dependencies, and its interactions with other classes.

Each method should include: A description of its purpose. Explanations of all parameters (if any) and their expected values. A description of the return value, if applicable. Any potential exceptions the method might throw and under what circumstances. For any loops, conditionals, or key operations, provide brief comments explaining what is happening and why it is necessary. Ensure the documentation provides clarity for future developers who may work on or maintain this code. Provide the fully documented code with inline JavaDoc comments.” 

With Tabnine, you could achieve the same result in seconds. All the input that would be required from a user would be two button clicks: one to activate workspace indexing and a second to use the Documentation Agent with a concise chat prompt “please document the code in @calculator.java” 

Through our codebase connection feature, Tabnine would automatically recognize that the documentation in the Java code in your codebase is written in inline JavaDoc format. The local IDE context awareness would intake the file and all contextually relevant elements creating documentation that seamlessly fits into your IDE and codebase. 

Testing

As another example, were you to use a nonagentic AI code assistant for generating tests, you’d need to write a prompt like: 

“Create a new Java test file in a structure that aligns with the Java testing framework, preferably JUnit 5. Write unit tests that cover each function individually to ensure that every line and branch of code is tested.

For the Password class: Test the constructor to ensure it initializes the values correctly. Test the CharType method to confirm it accurately classifies characters as uppercase, lowercase, digits, or symbols. Test PasswordStrength and calculateScore to confirm they return the correct password strength rating based on a variety of password inputs (weak, medium, strong).

For the Generator class: Test the GeneratePassword function with different length inputs and various inclusion settings for uppercase, lowercase, numbers, and symbols to confirm it generates the correct password formats. Ensure mainLoop and other user-interaction methods function as expected by simulating inputs. Include edge cases, such as zero-length passwords or requests with no character types selected. Ensure the unit tests have full coverage for every function, and validate that the expected output or exceptions match the actual results. 

Provide a separate file containing the JUnit test cases, along with a brief summary of how to execute these tests and verify code coverage.” 

With Tabnine, you could simply click on the beaker icon to have Tabnine @ reference all relevant files and code repositories if prioritizing context is desired. Tabnine would then generate a comprehensive testing plan with explanations for each test case. You could then review the tests suggested and ask Tabnine to further refine each one if desired. Tabnine would also automatically generate a new testing file or if you already have an existing testing file, Tabnine would read that file to identify gaps and optimizations further guiding the test generation. 

This becomes particularly important when you’re working on maintenance tasks, as being able to feed and direct testing context into your AI can save you hours of time when you need to adjust your testing to accommodate changes that have been pushed into your codebase from when the tests were first built. 

These are just a few examples of the many ways Tabnine personalizes our AI agents to your relevant context. We’ve also created a whole suite of additional AI agents:

  • Code Fix Agent: Find and fix errors in your code in seconds 
  • Explain Code Agent: Understand the purpose of the selected code 
  • Jira Implementation Agent: Intakes context from an individual Jira issue, layering on codebase and workspace context to execute individual Jira tickets
  • Jira Validation Agent: Validates the code you have built against the requirements of the Jira issue 
  • Code Review Agent: Checks code for compliance with your organization’s unique code review standards and suggests fixes to improve code quality, performance, and security 
  • Code Explorer Agent: Streamlines onboarding onto a new project or codebase, reading through the code providing a concise summary of key project elements, dependencies, and functionality, offering tailored follow-up questions to guide further exploration letting you chart your own path through the code 
  • Documentation Agent: Generate documentation that meets your organization’s standards
  • Refactor Code Agent: Translates code into other coding languages and offers solutions to improve the functionality and efficiency of code in response to your prompting 

As you’re moving through each step of your SDLC — plan, create, test, fix, document, explain, maintain — Tabnine’s personalized AI agents make working with an AI code assistant fit seamlessly into your workflow. After all, you’re an engineer, not a prompt engineer. Tabnine fits seamlessly into your workflow because the AI code assistant you use should adapt to you — you shouldn’t have to adapt to your AI. 

Personalization + AI agents + LLMs 

Tabnine is the AI code assistant that you control. That means every aspect of the AI is personalized to your organization. We’ve already covered how that works with our AI agents and the first three levels of personalization. 

What you may not be aware of is that you also have the option to switch the underlying LLM powering the AI agents. Our personalization and agentic enhancements are fully model-agnostic. You use our model switcher dropdown in your IDE to switch between eight different first-party and third-party LLMs in real time. 

The AI space is the fastest moving and progressing technology sector in human history and Tabnine is designed with model flexibility in mind. You can choose from the latest models from Anthropic, Cohere, OpenAI, IBM, Mistral, Tabnine, and others — all LLMs are included in your Tabnine Plan.

Furthermore, if you’re a Tabnine Enterprise customer, we give you additional optionality. Got your own API endpoint for an LLM? You can connect that into Tabnine and offer it inside the IDE plugin to your organization and leverage the agentic and personalization enhancements we’ve made. Developed your own model? No problem, you can connect that, too. 

The capabilities of LLMs continue to grow and evolve, but as you may have noticed recently, OpenAI delayed the launch of their new Orion model. The publicly available training data that LLM providers can access is discrete and limited, and the majority of this data has already been consumed and trained on. Further improvements in LLM performance for software development tasks can only be achieved through improving personalization engines. Can the LLMs you use intake your organizational data and leverage that context effectively to improve the code response? That’s what Tabnine excels at. Furthermore, unlike other AI providers, the context we intake is never stored, never used to train our universal models, and isn’t shared with third parties.

We believe that only your organization should benefit from your IP and using Tabnine gives you the advantage of maximizing AI performance while eliminating the risk of exposing sensitive data to third parties who would then consume and train their LLM on the data, essentially giving your competitors parity and access to your company’s innovations, destroying your advantage in the market.  

As this continues to evolve, we’re seeing an uptick in the desire for mature, sophisticated engineering organizations to run their AI entirely on-premises, and in some cases, fully air-gapped. Tabnine was the first to support fully private deployments. But an interesting roadblock you may run into is that large LLMs need large amounts of compute power, creating a challenge in costs and acquiring adequate GPUS to utilize the LLM. 

As we predicted months ago, the market is starting to shift towards highly specialized small language models. For example, IBM launched a model that excels at Cobol. It’s likely that your organization will develop such models or adopt them over time, as well as deploy them on-premises. With Tabnine, you’re future-proofing your AI code assistant provider: as you adopt SLMs and LLMs and deploy them on-premises, you’ll be able to connect them to Tabnine and layer on our deep integrations with your tech stack, AI agents, and personalization engine to maximize their impact. 

The ultimate level of personalization customization through fine-tuning

What if your codebase is primarily composed of languages that are poorly supported in open source or widely available training data? For example, System Verilog, VHL, or VHDL to name a few. Or what if your organization uses its own markup language or has very complex, highly specialized, large repositories? That’s when model fine-tuning, Tabnine’s fourth level of personalization, is useful. 

When retrieval methods are insufficient, especially for highly specialized or extensive codebases, Tabnine offers fine-tuning capabilities for code completions. Fine-tuning involves adjusting the model to better align with an organization’s unique code and practices. Tabnine utilizes parameter-efficient tuning techniques, such as low-rank adaptation (LoRA), to perform fine-tuning effectively. This method adds new weights to the model without altering the original ones, maintaining the model’s overall integrity while enhancing its performance on specific tasks. This allows organizations to create highly specialized AI models that perfectly fit their unique requirements.

Deploying fine-tuned models

Tabnine supports the deployment of multiple fine-tuned code completion models within the same server, allowing organizations to route completion requests based on programming language or user identity. This flexibility ensures that each department or project can benefit from a model tailored to its specific needs, optimizing overall productivity. By allowing different models to coexist and be used selectively, Tabnine ensures that the right tool is always available for the job.

The future of AI code assistants

Tabnine’s approach to personalization sets a new standard in AI-driven software development. By integrating context-aware, connection-driven, and customizable features, Tabnine elevates the capabilities of traditional LLMs, making them highly relevant and effective for organizational use. This personalized approach not only enhances developer productivity but also ensures that AI-generated code aligns with the specific requirements and standards of the organization.

In a rapidly evolving tech landscape, it’s critical to have the ability to tailor AI tools to fit the unique needs of an organization. Tabnine’s commitment to personalization transforms AI code assistants from generic tools into indispensable assets for modern engineering teams, paving the way for more efficient, accurate, and tailored software development processes.