gestion des providers
This commit is contained in:
1 parent
357bf9b41c
commit
4d72952b2c
46 files changed
+995
-150
No files matched your search
@@ -0,0 +1,76 @@
|
||||
package llm
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
anyllm "github.com/mozilla-ai/any-llm-go"
|
||||
"github.com/mozilla-ai/any-llm-go/providers/anthropic"
|
||||
"github.com/mozilla-ai/any-llm-go/providers/ollama"
|
||||
"github.com/mozilla-ai/any-llm-go/providers/openai"
|
||||
"trankilou.fr/lassistanoque/backend/internal/domain"
|
||||
)
|
||||
|
||||
var providerTypes = []domain.Item{
|
||||
{ID: "anthropic", Text: "Anthropic"},
|
||||
{ID: "openai", Text: "OpenAI"},
|
||||
{ID: "ollama", Text: "Ollama"},
|
||||
{ID: "openaicomp", Text: "OpenAI compatible"},
|
||||
{ID: "openrouter", Text: "Openrouter"},
|
||||
}
|
||||
|
||||
type AnyLLMEngine struct {
|
||||
}
|
||||
|
||||
func NewAnyLLMEngine() *AnyLLMEngine {
|
||||
return &AnyLLMEngine{}
|
||||
}
|
||||
|
||||
func (e *AnyLLMEngine) ListProviderTypes() []domain.Item {
|
||||
return providerTypes
|
||||
}
|
||||
|
||||
func providerFactory(provider *domain.Provider) (anyllm.Provider, error) {
|
||||
switch provider.Type {
|
||||
case "ollama":
|
||||
return ollama.New(
|
||||
anyllm.WithBaseURL(provider.URL),
|
||||
)
|
||||
case "openai":
|
||||
return openai.New(
|
||||
anyllm.WithAPIKey(provider.APIKey),
|
||||
)
|
||||
case "openaicomp":
|
||||
return openai.New(
|
||||
anyllm.WithBaseURL(provider.URL),
|
||||
anyllm.WithAPIKey(provider.APIKey),
|
||||
)
|
||||
case "anthropic":
|
||||
return anthropic.New(
|
||||
anyllm.WithAPIKey(provider.APIKey),
|
||||
)
|
||||
}
|
||||
return nil, fmt.Errorf("unknown provider type: %s", provider.Type)
|
||||
}
|
||||
|
||||
func (e *AnyLLMEngine) ListModelsFromProvider(ctx context.Context, provider *domain.Provider) ([]string, error) {
|
||||
|
||||
models := make([]string, 0)
|
||||
|
||||
prov, err := providerFactory(provider)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if lister, ok := prov.(anyllm.ModelLister); ok {
|
||||
response, err := lister.ListModels(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, m := range response.Data {
|
||||
models = append(models, m.ID)
|
||||
}
|
||||
} else {
|
||||
models = append(models, "Default")
|
||||
}
|
||||
return models, nil
|
||||
}
|
||||
Reference in new issue
Block a user