mirror of
https://github.com/memohai/Memoh.git
synced 2026-04-25 07:00:48 +09:00
This reverts commit c9dcfe287f.
This commit is contained in:
+17
-49
@@ -23,7 +23,6 @@ import (
|
||||
agentpkg "github.com/memohai/memoh/internal/agent"
|
||||
"github.com/memohai/memoh/internal/agent/background"
|
||||
agenttools "github.com/memohai/memoh/internal/agent/tools"
|
||||
audiopkg "github.com/memohai/memoh/internal/audio"
|
||||
"github.com/memohai/memoh/internal/bind"
|
||||
"github.com/memohai/memoh/internal/boot"
|
||||
"github.com/memohai/memoh/internal/bots"
|
||||
@@ -88,6 +87,7 @@ import (
|
||||
"github.com/memohai/memoh/internal/storage/providers/containerfs"
|
||||
"github.com/memohai/memoh/internal/storage/providers/fallback"
|
||||
"github.com/memohai/memoh/internal/storage/providers/localfs"
|
||||
ttspkg "github.com/memohai/memoh/internal/tts"
|
||||
"github.com/memohai/memoh/internal/version"
|
||||
"github.com/memohai/memoh/internal/workspace"
|
||||
)
|
||||
@@ -331,7 +331,7 @@ func provideChannelRouter(
|
||||
policyService *policy.Service,
|
||||
bindService *bind.Service,
|
||||
mediaService *media.Service,
|
||||
audioService *audiopkg.Service,
|
||||
ttsService *ttspkg.Service,
|
||||
settingsService *settings.Service,
|
||||
scheduleService *schedule.Service,
|
||||
mcpConnService *mcp.ConnectionService,
|
||||
@@ -372,8 +372,7 @@ func provideChannelRouter(
|
||||
processor.SetMediaService(mediaService)
|
||||
processor.SetStreamObserver(local.NewRouteHubBroadcaster(hub))
|
||||
processor.SetDispatcher(inbound.NewRouteDispatcher(log))
|
||||
processor.SetSpeechService(audioService, &settingsSpeechModelResolver{settings: settingsService})
|
||||
processor.SetTranscriptionService(&settingsTranscriptionAdapter{audio: audioService}, &settingsTranscriptionModelResolver{settings: settingsService})
|
||||
processor.SetTtsService(ttsService, &settingsTtsModelResolver{settings: settingsService})
|
||||
cmdHandler := command.NewHandler(
|
||||
log,
|
||||
&command.BotMemberRoleAdapter{BotService: botService},
|
||||
@@ -450,7 +449,7 @@ func provideBackgroundManager(log *slog.Logger) *background.Manager {
|
||||
return background.New(log)
|
||||
}
|
||||
|
||||
func provideToolProviders(log *slog.Logger, cfg config.Config, channelManager *channel.Manager, registry *channel.Registry, routeService *route.DBService, scheduleService *schedule.Service, settingsService *settings.Service, searchProviderService *searchproviders.Service, manager *workspace.Manager, mediaService *media.Service, memoryRegistry *memprovider.Registry, emailService *emailpkg.Service, emailManager *emailpkg.Manager, fedGateway *handlers.MCPFederationGateway, mcpConnService *mcp.ConnectionService, modelsService *models.Service, browserContextService *browsercontexts.Service, queries *dbsqlc.Queries, audioService *audiopkg.Service, sessionService *sessionpkg.Service, bgManager *background.Manager) []agenttools.ToolProvider {
|
||||
func provideToolProviders(log *slog.Logger, cfg config.Config, channelManager *channel.Manager, registry *channel.Registry, routeService *route.DBService, scheduleService *schedule.Service, settingsService *settings.Service, searchProviderService *searchproviders.Service, manager *workspace.Manager, mediaService *media.Service, memoryRegistry *memprovider.Registry, emailService *emailpkg.Service, emailManager *emailpkg.Manager, fedGateway *handlers.MCPFederationGateway, mcpConnService *mcp.ConnectionService, modelsService *models.Service, browserContextService *browsercontexts.Service, queries *dbsqlc.Queries, ttsService *ttspkg.Service, sessionService *sessionpkg.Service, bgManager *background.Manager) []agenttools.ToolProvider {
|
||||
var assetResolver messaging.AssetResolver
|
||||
if mediaService != nil {
|
||||
assetResolver = &mediaAssetResolverAdapter{media: mediaService}
|
||||
@@ -468,8 +467,7 @@ func provideToolProviders(log *slog.Logger, cfg config.Config, channelManager *c
|
||||
agenttools.NewSpawnProvider(log, settingsService, modelsService, queries, sessionService),
|
||||
agenttools.NewSkillProvider(log),
|
||||
agenttools.NewBrowserProvider(log, settingsService, browserContextService, manager, cfg.BrowserGateway),
|
||||
agenttools.NewTTSProvider(log, settingsService, audioService, channelManager, registry),
|
||||
agenttools.NewTranscriptionProvider(log, settingsService, audioService, mediaService),
|
||||
agenttools.NewTTSProvider(log, settingsService, ttsService, channelManager, registry),
|
||||
agenttools.NewImageGenProvider(log, settingsService, modelsService, queries, manager, config.DefaultDataMount),
|
||||
agenttools.NewFederationProvider(log, fedSource),
|
||||
agenttools.NewHistoryProvider(log, sessionService, queries),
|
||||
@@ -513,23 +511,23 @@ func provideUsersHandler(log *slog.Logger, accountService *accounts.Service, ide
|
||||
return handlers.NewUsersHandler(log, accountService, identityService, botService, routeService, channelStore, channelLifecycle, channelManager, registry)
|
||||
}
|
||||
|
||||
func provideWebHandler(channelManager *channel.Manager, channelStore *channel.Store, chatService *conversation.Service, hub *local.RouteHub, botService *bots.Service, accountService *accounts.Service, resolver *flow.Resolver, mediaService *media.Service, audioService *audiopkg.Service, settingsService *settings.Service) *handlers.LocalChannelHandler {
|
||||
func provideWebHandler(channelManager *channel.Manager, channelStore *channel.Store, chatService *conversation.Service, hub *local.RouteHub, botService *bots.Service, accountService *accounts.Service, resolver *flow.Resolver, mediaService *media.Service, ttsService *ttspkg.Service, settingsService *settings.Service) *handlers.LocalChannelHandler {
|
||||
h := handlers.NewLocalChannelHandler(local.WebType, channelManager, channelStore, chatService, hub, botService, accountService)
|
||||
h.SetResolver(resolver)
|
||||
h.SetMediaService(mediaService)
|
||||
h.SetSpeechService(audioService, &settingsSpeechModelResolver{settings: settingsService})
|
||||
h.SetTtsService(ttsService, &settingsTtsModelResolver{settings: settingsService})
|
||||
return h
|
||||
}
|
||||
|
||||
func provideAudioRegistry() *audiopkg.Registry {
|
||||
return audiopkg.NewRegistry()
|
||||
func provideTtsRegistry() *ttspkg.Registry {
|
||||
return ttspkg.NewRegistry()
|
||||
}
|
||||
|
||||
func provideAudioTempStore() (*audiopkg.TempStore, error) {
|
||||
return audiopkg.NewTempStore(os.TempDir())
|
||||
func provideTtsTempStore() (*ttspkg.TempStore, error) {
|
||||
return ttspkg.NewTempStore(os.TempDir())
|
||||
}
|
||||
|
||||
func startAudioTempStoreCleanup(lc fx.Lifecycle, store *audiopkg.TempStore) {
|
||||
func startTtsTempStoreCleanup(lc fx.Lifecycle, store *ttspkg.TempStore) {
|
||||
done := make(chan struct{})
|
||||
lc.Append(fx.Hook{
|
||||
OnStart: func(_ context.Context) error {
|
||||
@@ -585,11 +583,11 @@ func (a *sessionEnsurerAdapter) CreateNewSession(ctx context.Context, botID, rou
|
||||
return inbound.SessionResult{ID: sess.ID, Type: sess.Type}, nil
|
||||
}
|
||||
|
||||
type settingsSpeechModelResolver struct {
|
||||
type settingsTtsModelResolver struct {
|
||||
settings *settings.Service
|
||||
}
|
||||
|
||||
func (r *settingsSpeechModelResolver) ResolveSpeechModelID(ctx context.Context, botID string) (string, error) {
|
||||
func (r *settingsTtsModelResolver) ResolveTtsModelID(ctx context.Context, botID string) (string, error) {
|
||||
s, err := r.settings.GetBot(ctx, botID)
|
||||
if err != nil {
|
||||
return "", err
|
||||
@@ -597,36 +595,6 @@ func (r *settingsSpeechModelResolver) ResolveSpeechModelID(ctx context.Context,
|
||||
return s.TtsModelID, nil
|
||||
}
|
||||
|
||||
type settingsTranscriptionModelResolver struct {
|
||||
settings *settings.Service
|
||||
}
|
||||
|
||||
func (r *settingsTranscriptionModelResolver) ResolveTranscriptionModelID(ctx context.Context, botID string) (string, error) {
|
||||
s, err := r.settings.GetBot(ctx, botID)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return s.TranscriptionModelID, nil
|
||||
}
|
||||
|
||||
type settingsTranscriptionAdapter struct {
|
||||
audio *audiopkg.Service
|
||||
}
|
||||
|
||||
type inboundTranscriptionResult struct {
|
||||
text string
|
||||
}
|
||||
|
||||
func (r inboundTranscriptionResult) GetText() string { return r.text }
|
||||
|
||||
func (a *settingsTranscriptionAdapter) Transcribe(ctx context.Context, modelID string, audio []byte, filename string, contentType string, overrideCfg map[string]any) (inbound.TranscriptionResult, error) {
|
||||
result, err := a.audio.Transcribe(ctx, modelID, audio, filename, contentType, overrideCfg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return inboundTranscriptionResult{text: result.Text}, nil
|
||||
}
|
||||
|
||||
func provideEmailRegistry(log *slog.Logger, tokenStore *emailpkg.DBOAuthTokenStore) *emailpkg.Registry {
|
||||
reg := emailpkg.NewRegistry()
|
||||
reg.Register(emailgeneric.New(log))
|
||||
@@ -716,11 +684,11 @@ func startRegistrySync(lc fx.Lifecycle, log *slog.Logger, cfg config.Config, que
|
||||
})
|
||||
}
|
||||
|
||||
func startAudioProviderBootstrap(lc fx.Lifecycle, log *slog.Logger, queries *dbsqlc.Queries, registry *audiopkg.Registry) {
|
||||
func startSpeechProviderBootstrap(lc fx.Lifecycle, log *slog.Logger, queries *dbsqlc.Queries, registry *ttspkg.Registry) {
|
||||
lc.Append(fx.Hook{
|
||||
OnStart: func(ctx context.Context) error {
|
||||
if err := audiopkg.SyncRegistry(ctx, log, queries, registry); err != nil {
|
||||
log.Warn("audio registry bootstrap failed", slog.Any("error", err))
|
||||
if err := ttspkg.SyncRegistry(ctx, log, queries, registry); err != nil {
|
||||
log.Warn("speech registry bootstrap failed", slog.Any("error", err))
|
||||
}
|
||||
return nil
|
||||
},
|
||||
|
||||
+8
-8
@@ -8,7 +8,6 @@ import (
|
||||
|
||||
"github.com/memohai/memoh/internal/accounts"
|
||||
"github.com/memohai/memoh/internal/acl"
|
||||
audiopkg "github.com/memohai/memoh/internal/audio"
|
||||
"github.com/memohai/memoh/internal/bind"
|
||||
"github.com/memohai/memoh/internal/boot"
|
||||
"github.com/memohai/memoh/internal/bots"
|
||||
@@ -30,6 +29,7 @@ import (
|
||||
"github.com/memohai/memoh/internal/schedule"
|
||||
"github.com/memohai/memoh/internal/searchproviders"
|
||||
"github.com/memohai/memoh/internal/settings"
|
||||
ttspkg "github.com/memohai/memoh/internal/tts"
|
||||
)
|
||||
|
||||
func runServe() {
|
||||
@@ -63,9 +63,9 @@ func options() fx.Option {
|
||||
identities.NewService,
|
||||
bind.NewService,
|
||||
event.NewHub,
|
||||
provideAudioRegistry,
|
||||
audiopkg.NewService,
|
||||
provideAudioTempStore,
|
||||
provideTtsRegistry,
|
||||
ttspkg.NewService,
|
||||
provideTtsTempStore,
|
||||
emailpkg.NewDBOAuthTokenStore,
|
||||
provideEmailRegistry,
|
||||
emailpkg.NewService,
|
||||
@@ -121,8 +121,8 @@ func options() fx.Option {
|
||||
provideServerHandler(weixin.NewQRServerHandler),
|
||||
provideServerHandler(provideUsersHandler),
|
||||
provideServerHandler(handlers.NewMemoryProvidersHandler),
|
||||
provideServerHandler(handlers.NewAudioHandler),
|
||||
provideServerHandler(handlers.NewBotAudioHandler),
|
||||
provideServerHandler(handlers.NewSpeechHandler),
|
||||
provideServerHandler(handlers.NewBotTtsHandler),
|
||||
provideServerHandler(handlers.NewEmailProvidersHandler),
|
||||
provideServerHandler(handlers.NewEmailBindingsHandler),
|
||||
provideServerHandler(handlers.NewEmailOutboxHandler),
|
||||
@@ -141,7 +141,7 @@ func options() fx.Option {
|
||||
fx.Invoke(
|
||||
injectToolProviders,
|
||||
startRegistrySync,
|
||||
startAudioProviderBootstrap,
|
||||
startSpeechProviderBootstrap,
|
||||
startMemoryProviderBootstrap,
|
||||
startSearchProviderBootstrap,
|
||||
startScheduleService,
|
||||
@@ -151,7 +151,7 @@ func options() fx.Option {
|
||||
startEmailManager,
|
||||
startContainerReconciliation,
|
||||
startBackgroundTaskCleanup,
|
||||
startAudioTempStoreCleanup,
|
||||
startTtsTempStoreCleanup,
|
||||
startServer,
|
||||
),
|
||||
fx.WithLogger(func(logger *slog.Logger) fxevent.Logger {
|
||||
|
||||
Reference in New Issue
Block a user