Revert "Feat/speech support (#392)" (#393)

This reverts commit c9dcfe287f.
This commit is contained in:
Acbox
2026-04-22 00:11:16 +08:00
committed by GitHub
parent c9dcfe287f
commit fd8f1ec078
70 changed files with 1689 additions and 6609 deletions
+17 -49
View File
@@ -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
},