mirror of
https://github.com/sourcegit-scm/sourcegit
synced 2025-05-21 12:15:00 +00:00
refactor: OpenAI integration
* supports configure multiple services * supports select service when generate commit message by OpenAI Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
parent
8280287362
commit
1044915be1
13 changed files with 283 additions and 229 deletions
|
@ -3,7 +3,7 @@ using System.Collections.Generic;
|
|||
using System.IO;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
using Avalonia.Collections;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
|
||||
namespace SourceGit.ViewModels
|
||||
|
@ -25,7 +25,6 @@ namespace SourceGit.ViewModels
|
|||
_instance.PrepareGit();
|
||||
_instance.PrepareShellOrTerminal();
|
||||
_instance.PrepareWorkspaces();
|
||||
_instance.PrepareOpenAIPrompt();
|
||||
|
||||
return _instance;
|
||||
}
|
||||
|
@ -277,71 +276,6 @@ namespace SourceGit.ViewModels
|
|||
set => SetProperty(ref _externalMergeToolPath, value);
|
||||
}
|
||||
|
||||
public string OpenAIServer
|
||||
{
|
||||
get => Models.OpenAI.Server;
|
||||
set
|
||||
{
|
||||
if (value != Models.OpenAI.Server)
|
||||
{
|
||||
Models.OpenAI.Server = value;
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public string OpenAIApiKey
|
||||
{
|
||||
get => Models.OpenAI.ApiKey;
|
||||
set
|
||||
{
|
||||
if (value != Models.OpenAI.ApiKey)
|
||||
{
|
||||
Models.OpenAI.ApiKey = value;
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public string OpenAIModel
|
||||
{
|
||||
get => Models.OpenAI.Model;
|
||||
set
|
||||
{
|
||||
if (value != Models.OpenAI.Model)
|
||||
{
|
||||
Models.OpenAI.Model = value;
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public string OpenAIAnalyzeDiffPrompt
|
||||
{
|
||||
get => Models.OpenAI.AnalyzeDiffPrompt;
|
||||
set
|
||||
{
|
||||
if (value != Models.OpenAI.AnalyzeDiffPrompt)
|
||||
{
|
||||
Models.OpenAI.AnalyzeDiffPrompt = value;
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public string OpenAIGenerateSubjectPrompt
|
||||
{
|
||||
get => Models.OpenAI.GenerateSubjectPrompt;
|
||||
set
|
||||
{
|
||||
if (value != Models.OpenAI.GenerateSubjectPrompt)
|
||||
{
|
||||
Models.OpenAI.GenerateSubjectPrompt = value;
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public uint StatisticsSampleColor
|
||||
{
|
||||
get => _statisticsSampleColor;
|
||||
|
@ -360,6 +294,12 @@ namespace SourceGit.ViewModels
|
|||
set;
|
||||
} = [];
|
||||
|
||||
public AvaloniaList<Models.OpenAIService> OpenAIServices
|
||||
{
|
||||
get;
|
||||
set;
|
||||
} = [];
|
||||
|
||||
public double LastCheckUpdateTime
|
||||
{
|
||||
get => _lastCheckUpdateTime;
|
||||
|
@ -554,45 +494,6 @@ namespace SourceGit.ViewModels
|
|||
}
|
||||
}
|
||||
|
||||
private void PrepareOpenAIPrompt()
|
||||
{
|
||||
if (string.IsNullOrEmpty(Models.OpenAI.AnalyzeDiffPrompt))
|
||||
{
|
||||
Models.OpenAI.AnalyzeDiffPrompt = """
|
||||
You are an expert developer specialist in creating commits.
|
||||
Provide a super concise one sentence overall changes summary of the user `git diff` output following strictly the next rules:
|
||||
- Do not use any code snippets, imports, file routes or bullets points.
|
||||
- Do not mention the route of file that has been change.
|
||||
- Write clear, concise, and descriptive messages that explain the MAIN GOAL made of the changes.
|
||||
- Use the present tense and active voice in the message, for example, "Fix bug" instead of "Fixed bug.".
|
||||
- Use the imperative mood, which gives the message a sense of command, e.g. "Add feature" instead of "Added feature".
|
||||
- Avoid using general terms like "update" or "change", be specific about what was updated or changed.
|
||||
- Avoid using terms like "The main goal of", just output directly the summary in plain text
|
||||
""";
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(Models.OpenAI.GenerateSubjectPrompt))
|
||||
{
|
||||
Models.OpenAI.GenerateSubjectPrompt = """
|
||||
You are an expert developer specialist in creating commits messages.
|
||||
Your only goal is to retrieve a single commit message.
|
||||
Based on the provided user changes, combine them in ONE SINGLE commit message retrieving the global idea, following strictly the next rules:
|
||||
- Assign the commit {type} according to the next conditions:
|
||||
feat: Only when adding a new feature.
|
||||
fix: When fixing a bug.
|
||||
docs: When updating documentation.
|
||||
style: When changing elements styles or design and/or making changes to the code style (formatting, missing semicolons, etc.) without changing the code logic.
|
||||
test: When adding or updating tests.
|
||||
chore: When making changes to the build process or auxiliary tools and libraries.
|
||||
revert: When undoing a previous commit.
|
||||
refactor: When restructuring code without changing its external behavior, or is any of the other refactor types.
|
||||
- Do not add any issues numeration, explain your output nor introduce your answer.
|
||||
- Output directly only one commit message in plain text with the next format: {type}: {commit_message}.
|
||||
- Be as concise as possible, keep the message under 50 characters.
|
||||
""";
|
||||
}
|
||||
}
|
||||
|
||||
private RepositoryNode FindNodeRecursive(string id, List<RepositoryNode> collection)
|
||||
{
|
||||
foreach (var node in collection)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue