Skip to content

Commit

Permalink
Add support for Anthropic Claude API for generating commit messages
Browse files Browse the repository at this point in the history
  • Loading branch information
soramimi committed Jun 15, 2024
1 parent 605ddcc commit 8810f72
Show file tree
Hide file tree
Showing 10 changed files with 303 additions and 106 deletions.
12 changes: 10 additions & 2 deletions src/ApplicationGlobal.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,18 @@ class ApplicationGlobal : public ApplicationBasicData {

QString OpenAiApiKey() const
{
if (appsettings.use_OPENAI_API_KEY_env_value) {
if (appsettings.use_openai_api_key_environment_value) {
return getenv("OPENAI_API_KEY");
} else {
return appsettings.openai_api_key_by_aicommits;
return appsettings.openai_api_key;
}
}
QString AnthropicAiApiKey() const
{
if (appsettings.use_anthropic_api_key_environment_value) {
return getenv("ANTHROPIC_API_KEY");
} else {
return appsettings.anthropic_api_key;
}
}
};
Expand Down
46 changes: 29 additions & 17 deletions src/ApplicationSettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ template <> void operator << (SetValue<QColor> &&l, QColor const &r)

} // namespace

#if 0
QString ApplicationSettings::loadOpenAiApiKey()
{
QString home = QStandardPaths::writableLocation(QStandardPaths::HomeLocation);
Expand All @@ -70,16 +71,17 @@ void ApplicationSettings::saveOpenAiApiKey(QString const &key)
QSettings s(home / ".aicommits", QSettings::IniFormat);
s.setValue("OPENAI_KEY", key.trimmed());
}
#endif

QStringList ApplicationSettings::openai_gpt_models()
std::vector<GenerativeAiModel> ApplicationSettings::generative_ai_models()
{
QStringList list;
list.append("gpt-3.5-turbo");
list.append("gpt-4");
list.append("gpt-4-turbo");
list.append("gpt-4o");
list.sort();
return list;
std::vector<GenerativeAiModel> models;
models.emplace_back("gpt-3.5-turbo");
models.emplace_back("gpt-4");
models.emplace_back("gpt-4-turbo");
models.emplace_back("gpt-4o");
models.emplace_back("claude-3-opus-20240229");
return models;
}

ApplicationSettings ApplicationSettings::loadSettings()
Expand Down Expand Up @@ -125,15 +127,20 @@ ApplicationSettings ApplicationSettings::loadSettings()

s.beginGroup("Options");
GetValue<bool>(s, "GenerateCommitMessageByAI") >> as.generate_commit_message_by_ai;
GetValue<bool>(s, "UseOpenAiApiKeyEnvironmentValue") >> as.use_OPENAI_API_KEY_env_value;
GetValue<QString>(s, "OpenAI_GPT_Model") >> as.openai_gpt_model;
GetValue<bool>(s, "UseOpenAiApiKeyEnvironmentValue") >> as.use_openai_api_key_environment_value;
GetValue<bool>(s, "UseAnthropicApiKeyEnvironmentValue") >> as.use_anthropic_api_key_environment_value;
GetValue<QString>(s, "OPENAI_API_KEY") >> as.openai_api_key;
GetValue<QString>(s, "ANTHROPIC_API_KEY") >> as.anthropic_api_key;
GetValue<QString>(s, "AiMode") >> as.ai_model.model;
s.endGroup();

if (as.openai_gpt_model.isEmpty()) {
as.openai_gpt_model = "gpt-4o";
if (as.ai_model.model.isEmpty()) {
as = {"gpt-4o"};
}

as.openai_api_key_by_aicommits = loadOpenAiApiKey();

#if 0
as.openai_api_key = loadOpenAiApiKey();
#endif

return as;
}
Expand Down Expand Up @@ -179,11 +186,16 @@ void ApplicationSettings::saveSettings() const

s.beginGroup("Options");
SetValue<bool>(s, "GenerateCommitMessageByAI") << this->generate_commit_message_by_ai;
SetValue<bool>(s, "UseOpenAiApiKeyEnvironmentValue") << this->use_OPENAI_API_KEY_env_value;
SetValue<QString>(s, "OpenAI_GPT_Model") << this->openai_gpt_model;
SetValue<bool>(s, "UseOpenAiApiKeyEnvironmentValue") << this->use_openai_api_key_environment_value;
SetValue<bool>(s, "UseAnthropicApiKeyEnvironmentValue") << this->use_anthropic_api_key_environment_value;
SetValue<QString>(s, "OPENAI_API_KEY") << this->openai_api_key;
SetValue<QString>(s, "ANTHROPIC_API_KEY") << this->anthropic_api_key;
SetValue<QString>(s, "AiMode") << this->ai_model.model;
s.endGroup();

if (0) { // ここでは保存しない
saveOpenAiApiKey(this->openai_api_key_by_aicommits);
#if 0
saveOpenAiApiKey(this->openai_api_key);
#endif
}
}
21 changes: 17 additions & 4 deletions src/ApplicationSettings.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,15 @@
#define ORGANIZATION_NAME "soramimi.jp"
#define APPLICATION_NAME "Guitar"

struct GenerativeAiModel {
QString model;
GenerativeAiModel() = default;
GenerativeAiModel(const QString &model)
: model(model)
{
}
};

class ApplicationBasicData {
public:
QString organization_name = ORGANIZATION_NAME;
Expand All @@ -30,9 +39,11 @@ class ApplicationSettings {
QString proxy_server;

bool generate_commit_message_by_ai = false;
bool use_OPENAI_API_KEY_env_value = false;
QString openai_api_key_by_aicommits;
QString openai_gpt_model;
bool use_openai_api_key_environment_value = false;
bool use_anthropic_api_key_environment_value = false;
QString openai_api_key;
QString anthropic_api_key;
GenerativeAiModel ai_model;

bool get_avatar_icon_from_network_enabled = true;
struct {
Expand All @@ -58,10 +69,12 @@ class ApplicationSettings {

static ApplicationSettings defaultSettings();

#if 0
static QString loadOpenAiApiKey();
static void saveOpenAiApiKey(const QString &key);
#endif

static QStringList openai_gpt_models();
static std::vector<GenerativeAiModel> generative_ai_models();
};

#endif // APPLICATIONSETTINGS_H
Loading

0 comments on commit 8810f72

Please sign in to comment.