docs/decisions/0031-feature-branch-strategy.md
Normally Connectors are Middle to Complex new Features that can be developed by a single person or a team. In order to avoid conflicts and to have a better control of the development process, we strongly suggest the usage of a Feature Branch Strategy in our repositories.
In our current software development process, managing changes in the main branch has become increasingly complex, leading to potential conflicts and delays in release cycles.
SK-dotnet.sln file.
{Project GUID}.Publish|Any CPU.ActiveCfg = Publish|Any CPU
{Project GUID}.Publish|Any CPU.Build.0 = Publish|Any CPU
As soon we identify that contributors are willing to take/create a Feature Issue as a potential connector implementation, we will create a new branch for that feature.
Once we have agreed to take a new connector we will work with the contributors to make sure the implementation progresses and is supported if needed.
The contributor(s) will then be one of the responsibles to incrementally add the majority of changes through small Pull Requests to the feature branch under our supervision and review process.
This strategy involves creating a separate branch in the repository for each new big feature, like connectors. This isolation means that changes are made in a controlled environment without affecting the main branch.
We may also engage in the development and changes to the feature branch when needed, the changes and full or co-authorship on the PRs will be tracked and properly referred into the Release Notes.
LM Studio has a local deployment option, which can be used to deploy models locally. This option is available for Windows, Linux, and MacOS.
Pros:
Cons:
Ollama has a local deployment option, which can be used to deploy models locally. This option is available for Linux and MacOS only for now.
Pros:
Cons:
| Feature | Ollama | LM Studio |
|---|---|---|
| Local LLM | Yes | Yes |
| OpenAI API Similarity | Yes | Yes |
| Windows Support | No | Yes |
| Linux Support | Yes | Yes |
| MacOS Support | Yes | Yes |
| Number of Models | 61 +Any GGUF converted | 25 +Any GGUF Converted |
| Model Support | Ollama | LM Studio |
|---|---|---|
| Phi-2 Support | Yes | Yes |
| Llama-2 Support | Yes | Yes |
| Mistral Support | Yes | Yes |
Currently we are looking for community support on the following models
The support on the below can be either achieved creating a practical example using one of the existing Connectors against one of this models or providing a new Connector that supports a deployment platform that hosts one of the models below:
| Model Name | Local Support | Deployment | Connectors |
|---|---|---|---|
| Gpt-4 | No | OpenAI, Azure | Azure+OpenAI |
| Phi-2 | Yes | Azure, Hugging Face, LM Studio, Ollama | OpenAI, HuggingFace, LM Studio***, Ollama** |
| Gemini | No | Google AI Platform | GoogleAI** |
| Llama-2 | Yes | Azure, LM Studio, HuggingFace, Ollama | HuggingFace, Azure+OpenAI, LM Studio***, Ollama** |
| Mistral | Yes | Azure, LM Studio, HuggingFace, Ollama | HuggingFace, Azure+OpenAI, LM Studio***, Ollama** |
| Claude | No | Anthropic, Amazon Bedrock | Anthropic**, Amazon** |
| Titan | No | Amazon Bedrock | Amazon** |
** Connectors not yet available
*** May not be needed as an OpenAI Connector can be used
Connectors may be needed not per Model basis but rather per deployment platform. For example, using OpenAI or HuggingFace connector you may be able to call a Phi-2 Model.
The following deployment platforms are not yet supported by any Connectors and we strongly encourage the community to engage and support on those:
Currently the priorities are ordered but not necessarily needs to be implemented sequentially, an
| Deployment Platform | Local Model Support |
|---|---|
| Ollama | Yes |
| GoogleAI | No |
| Anthropic | No |
| Amazon | No |
Chosen option: "Feature Branch Strategy", because it allows individual features to be developed in isolation, minimizing conflicts with the main branch and facilitating easier code reviews.
You proceed normally with the fork and PR targeting main, as soon we identify that your contribution PR to main is a big and desirable feature (Look at the ones we described as expected in this ADR) we will create a dedicated feature branch (feature-yourfeature) where you can retarget our forks PR to target it.
All further incremental changes and contributions will follow as normal, but instead of main you will be targeting the feature-* branch.
This will happen when we all agreed that the current feature implementation is complete and ready to merge in main.
As soon the feature is finished, a merge from main will be pushed into the feature branch.
This will normally trigger the conflicts that need to be sorted.
That normally will be the last PR targeting the feature branch which will be followed right away by another PR from the feature branch targeting main with minimal conflicts if any.
The merging to main might be fast (as all the intermediate feature PRs were all agreed and approved before)
The merging of the main branch into the feature branch should only be done with the command:
git checkout <feature branch> && git merge main without --squash
Merge from the main should never be done by PR to feature branch, it will cause merging history of main merge with history of PR (because PR are merged with --squash), and as a consequence it will generate strange conflicts on subsequent merges of main and also make it difficult to analyze history of feature branch.