Ajout de SEARXNG pour les recherches web
This commit is contained in:
1 parent
87eeb41364
commit
345129c7bf
30 files changed
+919
-166
No files matched your search
@@ -1,105 +0,0 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"trankilou.fr/lassistanoque/backend/internal/adapter/auth/password"
|
||||
"trankilou.fr/lassistanoque/backend/internal/adapter/database"
|
||||
"trankilou.fr/lassistanoque/backend/internal/adapter/file"
|
||||
"trankilou.fr/lassistanoque/backend/internal/adapter/llm"
|
||||
"trankilou.fr/lassistanoque/backend/internal/adapter/security"
|
||||
"trankilou.fr/lassistanoque/backend/internal/adapter/tools/weather"
|
||||
"trankilou.fr/lassistanoque/backend/internal/domain"
|
||||
"trankilou.fr/lassistanoque/backend/internal/service/auth"
|
||||
"trankilou.fr/lassistanoque/backend/internal/service/chat"
|
||||
"trankilou.fr/lassistanoque/backend/internal/service/storage"
|
||||
)
|
||||
|
||||
var db database.Database
|
||||
var store storage.StorageProvider
|
||||
var userRepository domain.UserRepository
|
||||
var providerRepository domain.ProviderRepository
|
||||
var agentRepository domain.AgentRepository
|
||||
var chatRepository domain.ChatRepository
|
||||
var settingsRepository domain.SettingsRepository
|
||||
var authenticators = make(map[string]auth.Authenticator)
|
||||
var tokenManager auth.TokenManager
|
||||
var llmengine domain.LLMEngine
|
||||
|
||||
func init() {
|
||||
var err error
|
||||
|
||||
db, err := database.GetDatabase()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
err = db.Migrate()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// repositories
|
||||
userRepository = db.UserRepository()
|
||||
providerRepository = db.ProviderRepository()
|
||||
agentRepository = db.AgentRepository()
|
||||
chatRepository = db.ChatRepository()
|
||||
settingsRepository = db.SettingsRepository()
|
||||
|
||||
// storage
|
||||
store, err = file.GetStorageProvider(db.FileRepository())
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// authentication
|
||||
tokenManager = security.NewJwtTokenManager(12*time.Hour, 7*24*time.Hour, "lassistanoque")
|
||||
pwdAuth := password.NewPasswordAuthenticator(tokenManager, GetUserRepository())
|
||||
authenticators["password"] = pwdAuth
|
||||
|
||||
// llm
|
||||
llmengine = llm.NewAnyLLMEngine()
|
||||
|
||||
// llm tools
|
||||
chat.RegisterTool(&weather.WeatherTool{})
|
||||
}
|
||||
|
||||
func GetStorageProvider() storage.StorageProvider {
|
||||
return store
|
||||
}
|
||||
|
||||
func GetUserRepository() domain.UserRepository {
|
||||
return userRepository
|
||||
}
|
||||
|
||||
func GetProviderRepository() domain.ProviderRepository {
|
||||
return providerRepository
|
||||
}
|
||||
|
||||
func GetAgentRepository() domain.AgentRepository {
|
||||
return agentRepository
|
||||
}
|
||||
|
||||
func GetChatRepository() domain.ChatRepository {
|
||||
return chatRepository
|
||||
}
|
||||
|
||||
func GetSettingsRepository() domain.SettingsRepository {
|
||||
return settingsRepository
|
||||
}
|
||||
|
||||
func GetAuthenticators() map[string]auth.Authenticator {
|
||||
return authenticators
|
||||
}
|
||||
|
||||
func GetTokenManager() auth.TokenManager {
|
||||
return tokenManager
|
||||
}
|
||||
|
||||
func GetLLMEngine() domain.LLMEngine {
|
||||
return llmengine
|
||||
}
|
||||
|
||||
func Close() {
|
||||
db.Close()
|
||||
}
|
||||
@@ -0,0 +1,145 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"trankilou.fr/lassistanoque/backend/internal/adapter/auth/password"
|
||||
"trankilou.fr/lassistanoque/backend/internal/adapter/database"
|
||||
"trankilou.fr/lassistanoque/backend/internal/adapter/file"
|
||||
"trankilou.fr/lassistanoque/backend/internal/adapter/llm"
|
||||
"trankilou.fr/lassistanoque/backend/internal/adapter/security"
|
||||
"trankilou.fr/lassistanoque/backend/internal/adapter/tools/searxng"
|
||||
"trankilou.fr/lassistanoque/backend/internal/adapter/tools/weather"
|
||||
"trankilou.fr/lassistanoque/backend/internal/domain"
|
||||
"trankilou.fr/lassistanoque/backend/internal/service/agent"
|
||||
"trankilou.fr/lassistanoque/backend/internal/service/auth"
|
||||
"trankilou.fr/lassistanoque/backend/internal/service/chat"
|
||||
"trankilou.fr/lassistanoque/backend/internal/service/provider"
|
||||
"trankilou.fr/lassistanoque/backend/internal/service/storage"
|
||||
"trankilou.fr/lassistanoque/backend/internal/service/tool"
|
||||
"trankilou.fr/lassistanoque/backend/internal/service/user"
|
||||
)
|
||||
|
||||
var db database.Database
|
||||
|
||||
// adapters
|
||||
var storeAdapter storage.StorageProvider
|
||||
var llmengine domain.LLMEngine
|
||||
|
||||
// services
|
||||
var authService *auth.Service
|
||||
var userService *user.Service
|
||||
var storageService *storage.Service
|
||||
var providerService *provider.Service
|
||||
var agentService *agent.Service
|
||||
var toolService *tool.Service
|
||||
var chatService *chat.Service
|
||||
var tokenManager auth.TokenManager
|
||||
|
||||
func init() {
|
||||
var err error
|
||||
|
||||
db, err = database.GetDatabase()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
err = db.Migrate()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func Close() {
|
||||
db.Close()
|
||||
}
|
||||
|
||||
// Adapters
|
||||
func getStoreAdapter() storage.StorageProvider {
|
||||
if storeAdapter == nil {
|
||||
var err error
|
||||
storeAdapter, err = file.GetStorageProvider(db.FileRepository())
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
return storeAdapter
|
||||
}
|
||||
|
||||
func getAuthenticators() map[string]auth.Authenticator {
|
||||
authenticators := make(map[string]auth.Authenticator)
|
||||
pwdAuth := password.NewPasswordAuthenticator(GetTokenManager(), db.UserRepository())
|
||||
authenticators["password"] = pwdAuth
|
||||
return authenticators
|
||||
}
|
||||
|
||||
func GetTokenManager() auth.TokenManager {
|
||||
if tokenManager == nil {
|
||||
tokenManager = security.NewJwtTokenManager(12*time.Hour, 7*24*time.Hour, "lassistanoque")
|
||||
}
|
||||
return tokenManager
|
||||
}
|
||||
|
||||
func GetLLMAdapter() domain.LLMEngine {
|
||||
if llmengine == nil {
|
||||
llmengine = llm.NewAnyLLMEngine()
|
||||
}
|
||||
return llmengine
|
||||
}
|
||||
|
||||
// Services
|
||||
func GetStorageService() *storage.Service {
|
||||
if storageService == nil {
|
||||
storageService = storage.NewService(getStoreAdapter())
|
||||
}
|
||||
return storageService
|
||||
}
|
||||
|
||||
func GetAuthService() *auth.Service {
|
||||
if authService == nil {
|
||||
authService = auth.NewService(db.SettingsRepository(), db.UserRepository(), getAuthenticators())
|
||||
}
|
||||
return authService
|
||||
}
|
||||
|
||||
func GetUserService() *user.Service {
|
||||
if userService == nil {
|
||||
userService = user.NewService(db.UserRepository())
|
||||
}
|
||||
return userService
|
||||
}
|
||||
func GetProviderService() *provider.Service {
|
||||
if providerService == nil {
|
||||
providerService = provider.NewService(db.ProviderRepository(), db.UserRepository(), GetLLMAdapter())
|
||||
}
|
||||
return providerService
|
||||
}
|
||||
|
||||
func GetAgentService() *agent.Service {
|
||||
if agentService == nil {
|
||||
agentService = agent.NewService(db.AgentRepository(), db.UserRepository())
|
||||
}
|
||||
return agentService
|
||||
}
|
||||
func GetChatService() *chat.Service {
|
||||
if chatService == nil {
|
||||
chatService = chat.NewService(
|
||||
db.UserRepository(),
|
||||
db.AgentRepository(),
|
||||
db.ProviderRepository(),
|
||||
db.ChatRepository(),
|
||||
GetLLMAdapter(),
|
||||
GetToolService(),
|
||||
)
|
||||
}
|
||||
return chatService
|
||||
}
|
||||
|
||||
func GetToolService() *tool.Service {
|
||||
if toolService == nil {
|
||||
toolService = tool.NewService(db.ToolRepository(), db.UserRepository())
|
||||
toolService.RegisterToolImpl(&weather.WeatherTool{})
|
||||
toolService.RegisterToolImpl(&searxng.SearxngTool{})
|
||||
}
|
||||
return toolService
|
||||
}
|
||||
+11
-26
@@ -11,14 +11,8 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
"trankilou.fr/lassistanoque/backend/internal/brain"
|
||||
"trankilou.fr/lassistanoque/backend/internal/gateway"
|
||||
"trankilou.fr/lassistanoque/backend/internal/http"
|
||||
"trankilou.fr/lassistanoque/backend/internal/service/agent"
|
||||
"trankilou.fr/lassistanoque/backend/internal/service/auth"
|
||||
"trankilou.fr/lassistanoque/backend/internal/service/chat"
|
||||
"trankilou.fr/lassistanoque/backend/internal/service/provider"
|
||||
"trankilou.fr/lassistanoque/backend/internal/service/storage"
|
||||
"trankilou.fr/lassistanoque/backend/internal/service/user"
|
||||
)
|
||||
|
||||
func init() {
|
||||
@@ -44,35 +38,26 @@ func runServe() {
|
||||
|
||||
defer Close()
|
||||
|
||||
// services
|
||||
authService := auth.NewService(GetSettingsRepository(), GetUserRepository(), GetAuthenticators())
|
||||
userService := user.NewService(GetUserRepository())
|
||||
storageService := storage.NewService(GetStorageProvider())
|
||||
providerService := provider.NewService(GetProviderRepository(), GetUserRepository(), GetLLMEngine())
|
||||
agentService := agent.NewService(GetAgentRepository(), GetUserRepository())
|
||||
chatService := chat.NewService(GetUserRepository(), GetAgentRepository(), GetProviderRepository(), GetChatRepository(), GetLLMEngine())
|
||||
|
||||
// http server
|
||||
httpRouter := http.NewRouter(http.Dependencies{
|
||||
StorageService: storageService,
|
||||
AuthService: authService,
|
||||
UserService: userService,
|
||||
ProviderService: providerService,
|
||||
AgentService: agentService,
|
||||
ChatService: chatService,
|
||||
StorageService: GetStorageService(),
|
||||
AuthService: GetAuthService(),
|
||||
UserService: GetUserService(),
|
||||
ProviderService: GetProviderService(),
|
||||
AgentService: GetAgentService(),
|
||||
ChatService: GetChatService(),
|
||||
ToolService: GetToolService(),
|
||||
TokenManager: GetTokenManager(),
|
||||
})
|
||||
|
||||
brainRouter := brain.NewRouter(brain.Dependencies{
|
||||
ChatRepository: GetChatRepository(),
|
||||
})
|
||||
gatewayRouter := gateway.NewRouter(gateway.Dependencies{})
|
||||
|
||||
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
|
||||
defer stop()
|
||||
|
||||
// start Brain router
|
||||
go func() {
|
||||
if err := brainRouter.Start(); err != nil && !errors.Is(err, nethttp.ErrServerClosed) {
|
||||
if err := gatewayRouter.Start(); err != nil && !errors.Is(err, nethttp.ErrServerClosed) {
|
||||
slog.Error("failed to start llm server", "error", err)
|
||||
}
|
||||
}()
|
||||
@@ -97,7 +82,7 @@ func runServe() {
|
||||
// stop LLM service
|
||||
ctx, cancel2 := context.WithTimeout(context.Background(), 10*time.Second)
|
||||
defer cancel2()
|
||||
if err := brainRouter.Stop(ctx); err != nil {
|
||||
if err := gatewayRouter.Stop(ctx); err != nil {
|
||||
slog.Error("failed to stop llm server", "error", err)
|
||||
}
|
||||
slog.Info("LLM server stopped gracefully")
|
||||
|
||||
Reference in new issue
Block a user