feat: AI-анализ terraform plan (уровни 0-5, Google Gemini)
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
// internal/ai/provider.go
|
||||
// Дата: 2026-03-12
|
||||
// Интерфейс LLMProvider — абстракция над любым LLM-бэкендом.
|
||||
// Сейчас реализован Google Gemini. В будущем — облачный LLM (drop-in замена).
|
||||
|
||||
package ai
|
||||
|
||||
import "context"
|
||||
|
||||
// LLMProvider — единственный интерфейс для всех LLM-провайдеров.
|
||||
// Менять провайдер = менять одну env-переменную AI_PROVIDER.
|
||||
type LLMProvider interface {
|
||||
// Analyze отправляет промпт в LLM и возвращает текстовый ответ.
|
||||
Analyze(ctx context.Context, prompt string) (string, error)
|
||||
// Name возвращает имя провайдера для логирования.
|
||||
Name() string
|
||||
}
|
||||
|
||||
// Config — конфигурация анализатора, читается из env-переменных.
|
||||
type Config struct {
|
||||
// Provider: "google" или "cloud" (в будущем)
|
||||
Provider string
|
||||
// HintLevel: 0–5, если 0 — AI не вызывается
|
||||
HintLevel int
|
||||
// Google Gemini
|
||||
GoogleAPIKey string
|
||||
GoogleModel string // по умолчанию "gemini-pro"
|
||||
// Будущий облачный LLM
|
||||
CloudEndpoint string
|
||||
CloudToken string
|
||||
}
|
||||
|
||||
// NewProvider — фабрика провайдеров. Выбор по Config.Provider.
|
||||
// При добавлении нового провайдера — только сюда добавить case.
|
||||
func NewProvider(cfg Config) (LLMProvider, error) {
|
||||
switch cfg.Provider {
|
||||
case "google":
|
||||
model := cfg.GoogleModel
|
||||
if model == "" {
|
||||
model = "gemini-2.0-flash"
|
||||
}
|
||||
return NewGeminiProvider(cfg.GoogleAPIKey, model)
|
||||
case "cloud":
|
||||
return NewCloudLLMProvider(cfg.CloudEndpoint, cfg.CloudToken)
|
||||
default:
|
||||
// По умолчанию google, если AI_PROVIDER не задан
|
||||
model := cfg.GoogleModel
|
||||
if model == "" {
|
||||
model = "gemini-2.0-flash"
|
||||
}
|
||||
return NewGeminiProvider(cfg.GoogleAPIKey, model)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user