Files
sless/internal/ai/provider.go
T

54 lines
2.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 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: 05, если 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)
}
}