feat: Add Codestral as separate ai provider (#171)

This commit is contained in:
Petr Mironychev 2025-04-20 09:48:36 +02:00 committed by GitHub
parent 7a33425d1a
commit 9a54f04a0d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 96 additions and 1 deletions

View File

@ -92,6 +92,7 @@ add_qtc_plugin(QodeAssist
providers/OpenRouterAIProvider.hpp providers/OpenRouterAIProvider.cpp
providers/GoogleAIProvider.hpp providers/GoogleAIProvider.cpp
providers/LlamaCppProvider.hpp providers/LlamaCppProvider.cpp
providers/CodestralProvider.hpp providers/CodestralProvider.cpp
QodeAssist.qrc
LSPCompletion.hpp
LLMSuggestion.hpp LLMSuggestion.cpp

View File

@ -0,0 +1,46 @@
/*
* Copyright (C) 2025 Petr Mironychev
*
* This file is part of QodeAssist.
*
* QodeAssist is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* QodeAssist is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with QodeAssist. If not, see <https://www.gnu.org/licenses/>.
*/
#include "CodestralProvider.hpp"
#include "settings/ProviderSettings.hpp"
namespace QodeAssist::Providers {
QString CodestralProvider::name() const
{
return "Codestral";
}
QString CodestralProvider::url() const
{
return "https://codestral.mistral.ai";
}
bool CodestralProvider::supportsModelListing() const
{
return false;
}
QString CodestralProvider::apiKey() const
{
return Settings::providerSettings().codestralApiKey();
}
} // namespace QodeAssist::Providers

View File

@ -0,0 +1,35 @@
/*
* Copyright (C) 2025 Petr Mironychev
*
* This file is part of QodeAssist.
*
* QodeAssist is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* QodeAssist is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with QodeAssist. If not, see <https://www.gnu.org/licenses/>.
*/
#pragma once
#include "MistralAIProvider.hpp"
namespace QodeAssist::Providers {
class CodestralProvider : public MistralAIProvider
{
public:
QString name() const override;
QString url() const override;
bool supportsModelListing() const override;
QString apiKey() const override;
};
} // namespace QodeAssist::Providers

View File

@ -21,6 +21,7 @@
#include "llmcore/ProvidersManager.hpp"
#include "providers/ClaudeProvider.hpp"
#include "providers/CodestralProvider.hpp"
#include "providers/GoogleAIProvider.hpp"
#include "providers/LMStudioProvider.hpp"
#include "providers/LlamaCppProvider.hpp"
@ -44,6 +45,7 @@ inline void registerProviders()
providerManager.registerProvider<MistralAIProvider>();
providerManager.registerProvider<GoogleAIProvider>();
providerManager.registerProvider<LlamaCppProvider>();
providerManager.registerProvider<CodestralProvider>();
}
} // namespace QodeAssist::Providers

View File

@ -87,6 +87,14 @@ ProviderSettings::ProviderSettings()
mistralAiApiKey.setDefaultValue("");
mistralAiApiKey.setAutoApply(true);
codestralApiKey.setSettingsKey(Constants::CODESTRAL_API_KEY);
codestralApiKey.setLabelText(Tr::tr("Codestral API Key:"));
codestralApiKey.setDisplayStyle(Utils::StringAspect::LineEditDisplay);
codestralApiKey.setPlaceHolderText(Tr::tr("Enter your API key here"));
codestralApiKey.setHistoryCompleter(Constants::CODESTRAL_API_KEY_HISTORY);
codestralApiKey.setDefaultValue("");
codestralApiKey.setAutoApply(true);
// GoogleAI Settings
googleAiApiKey.setSettingsKey(Constants::GOOGLE_AI_API_KEY);
googleAiApiKey.setLabelText(Tr::tr("Google AI API Key:"));
@ -125,7 +133,7 @@ ProviderSettings::ProviderSettings()
Space{8},
Group{title(Tr::tr("Claude Settings")), Column{claudeApiKey}},
Space{8},
Group{title(Tr::tr("Mistral AI Settings")), Column{mistralAiApiKey}},
Group{title(Tr::tr("Mistral AI Settings")), Column{mistralAiApiKey, codestralApiKey}},
Space{8},
Group{title(Tr::tr("Google AI Settings")), Column{googleAiApiKey}},
Space{8},

View File

@ -38,6 +38,7 @@ public:
Utils::StringAspect claudeApiKey{this};
Utils::StringAspect openAiApiKey{this};
Utils::StringAspect mistralAiApiKey{this};
Utils::StringAspect codestralApiKey{this};
Utils::StringAspect googleAiApiKey{this};
Utils::StringAspect ollamaBasicAuthApiKey{this};

View File

@ -101,6 +101,8 @@ const char OPEN_AI_API_KEY[] = "QodeAssist.openAiApiKey";
const char OPEN_AI_API_KEY_HISTORY[] = "QodeAssist.openAiApiKeyHistory";
const char MISTRAL_AI_API_KEY[] = "QodeAssist.mistralAiApiKey";
const char MISTRAL_AI_API_KEY_HISTORY[] = "QodeAssist.mistralAiApiKeyHistory";
const char CODESTRAL_API_KEY[] = "QodeAssist.codestralApiKey";
const char CODESTRAL_API_KEY_HISTORY[] = "QodeAssist.codestralApiKeyHistory";
const char GOOGLE_AI_API_KEY[] = "QodeAssist.googleAiApiKey";
const char GOOGLE_AI_API_KEY_HISTORY[] = "QodeAssist.googleAiApiKeyHistory";
const char OLLAMA_BASIC_AUTH_API_KEY[] = "QodeAssist.ollamaBasicAuthApiKey";