fix: address PR review - remove duplicate transcription, dead config, fix comment, trim EOF
This commit is contained in:
parent
dfe65da016
commit
65fd049022
3 changed files with 8 additions and 50 deletions
|
|
@ -622,45 +622,10 @@ func (al *AgentLoop) processMessage(ctx context.Context, msg bus.InboundMessage)
|
||||||
"route_channel": route.Channel,
|
"route_channel": route.Channel,
|
||||||
})
|
})
|
||||||
|
|
||||||
// Transcribe any audio media refs before passing to the agent.
|
// transcribeAudioInMessage already ran earlier in processMessage,
|
||||||
|
// so msg.Content has transcripts injected. Use it directly.
|
||||||
userMessage := msg.Content
|
userMessage := msg.Content
|
||||||
|
|
||||||
if al.transcriber != nil && len(msg.Media) > 0 && al.mediaStore != nil {
|
|
||||||
for _, ref := range msg.Media {
|
|
||||||
localPath, meta, err := al.mediaStore.ResolveWithMeta(ref)
|
|
||||||
if err != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
mediaType := inferMediaType(meta.Filename, meta.ContentType)
|
|
||||||
|
|
||||||
// Handle audio transcription
|
|
||||||
if mediaType == "audio" {
|
|
||||||
logger.InfoCF("agent", "Transcribing audio", map[string]any{
|
|
||||||
"ref": ref, "path": localPath, "filename": meta.Filename,
|
|
||||||
})
|
|
||||||
result, err := al.transcriber.Transcribe(ctx, localPath)
|
|
||||||
if err != nil {
|
|
||||||
logger.WarnCF("agent", "Audio transcription failed", map[string]any{
|
|
||||||
"ref": ref, "error": err.Error(),
|
|
||||||
})
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
logger.InfoCF("agent", "Transcribed audio", map[string]any{
|
|
||||||
"ref": ref, "length": len(result.Text),
|
|
||||||
})
|
|
||||||
// Replace the [voice]/[audio] placeholder with the actual transcript
|
|
||||||
userMessage = strings.NewReplacer("[voice]", "", "[audio]", "").Replace(userMessage)
|
|
||||||
userMessage = strings.TrimSpace(userMessage)
|
|
||||||
if userMessage != "" {
|
|
||||||
userMessage = userMessage + "\n\n[Voice transcript]: " + result.Text
|
|
||||||
} else {
|
|
||||||
userMessage = result.Text
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return al.runAgentLoop(ctx, agent, processOptions{
|
return al.runAgentLoop(ctx, agent, processOptions{
|
||||||
SessionKey: sessionKey,
|
SessionKey: sessionKey,
|
||||||
Channel: msg.Channel,
|
Channel: msg.Channel,
|
||||||
|
|
@ -1750,5 +1715,3 @@ func extractParentPeer(msg bus.InboundMessage) *routing.RoutePeer {
|
||||||
}
|
}
|
||||||
return &routing.RoutePeer{Kind: parentKind, ID: parentID}
|
return &routing.RoutePeer{Kind: parentKind, ID: parentID}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -659,12 +659,6 @@ type MediaCleanupConfig struct {
|
||||||
Interval int ` env:"PICOCLAW_MEDIA_CLEANUP_INTERVAL" json:"interval_minutes"`
|
Interval int ` env:"PICOCLAW_MEDIA_CLEANUP_INTERVAL" json:"interval_minutes"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type TranscribeConfig struct {
|
|
||||||
Enabled bool `json:"enabled" env:"PICOCLAW_TRANSCRIBE_ENABLED"`
|
|
||||||
APIKey string `json:"api_key" env:"PICOCLAW_TRANSCRIBE_API_KEY"`
|
|
||||||
Model string `json:"model" env:"PICOCLAW_TRANSCRIBE_MODEL"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type ToolsConfig struct {
|
type ToolsConfig struct {
|
||||||
AllowReadPaths []string `json:"allow_read_paths" env:"PICOCLAW_TOOLS_ALLOW_READ_PATHS"`
|
AllowReadPaths []string `json:"allow_read_paths" env:"PICOCLAW_TOOLS_ALLOW_READ_PATHS"`
|
||||||
AllowWritePaths []string `json:"allow_write_paths" env:"PICOCLAW_TOOLS_ALLOW_WRITE_PATHS"`
|
AllowWritePaths []string `json:"allow_write_paths" env:"PICOCLAW_TOOLS_ALLOW_WRITE_PATHS"`
|
||||||
|
|
@ -673,7 +667,6 @@ type ToolsConfig struct {
|
||||||
Exec ExecConfig `json:"exec"`
|
Exec ExecConfig `json:"exec"`
|
||||||
Skills SkillsToolsConfig `json:"skills"`
|
Skills SkillsToolsConfig `json:"skills"`
|
||||||
MediaCleanup MediaCleanupConfig `json:"media_cleanup"`
|
MediaCleanup MediaCleanupConfig `json:"media_cleanup"`
|
||||||
Transcribe TranscribeConfig `json:"transcribe"`
|
|
||||||
MCP MCPConfig `json:"mcp"`
|
MCP MCPConfig `json:"mcp"`
|
||||||
AppendFile ToolConfig `json:"append_file" envPrefix:"PICOCLAW_TOOLS_APPEND_FILE_"`
|
AppendFile ToolConfig `json:"append_file" envPrefix:"PICOCLAW_TOOLS_APPEND_FILE_"`
|
||||||
EditFile ToolConfig `json:"edit_file" envPrefix:"PICOCLAW_TOOLS_EDIT_FILE_"`
|
EditFile ToolConfig `json:"edit_file" envPrefix:"PICOCLAW_TOOLS_EDIT_FILE_"`
|
||||||
|
|
|
||||||
|
|
@ -361,10 +361,12 @@ func parseResponse(body io.Reader) (*LLMResponse, error) {
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// openaiMessage is the wire-format message for OpenAI-compatible APIs.
|
// openaiMessage is the wire-format message for OpenAI-compatible APIs for
|
||||||
// It mirrors protocoltypes.Message but omits SystemParts, which is an
|
// simple text-only messages. It mirrors protocoltypes.Message but omits
|
||||||
// internal field that would be unknown to third-party endpoints.
|
// SystemParts, which is an internal field that would be unknown to
|
||||||
// Content can be either a string or an array of content blocks for multimodal messages.
|
// third-party endpoints. For messages that include media, serializeMessages
|
||||||
|
// constructs a map[string]any where "content" is an array of content blocks,
|
||||||
|
// instead of using this struct.
|
||||||
type openaiMessage struct {
|
type openaiMessage struct {
|
||||||
Role string `json:"role"`
|
Role string `json:"role"`
|
||||||
Content string `json:"content"`
|
Content string `json:"content"`
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue