Add odidere command

This commit is contained in:
dwrz
2026-02-13 15:03:49 +00:00
parent d5a27c776e
commit 3cd36e7558

83
cmd/odidere/main.go Normal file
View File

@@ -0,0 +1,83 @@
// Command odidere serves the odidere voice assistant API.
// It provides STT, LLM, and TTS orchestration via HTTP endpoints.
// See package service for the main orchestration logic and package
// config for configuration options.
package main
import (
"context"
"flag"
"log/slog"
"os"
"runtime/debug"
"github.com/chimerical-llc/odidere/internal/config"
"github.com/chimerical-llc/odidere/internal/service"
)
func main() {
var cfgPath = flag.String(
"c", "", "path to configuration file (required)",
)
flag.Parse()
var log = slog.New(slog.NewTextHandler(
os.Stderr,
&slog.HandlerOptions{
AddSource: true,
Level: slog.LevelDebug,
},
))
if *cfgPath == "" {
log.Error("missing config path")
os.Exit(1)
}
// Log build info.
bi, ok := debug.ReadBuildInfo()
if ok {
var commit, time string
for _, s := range bi.Settings {
switch s.Key {
case "vcs.revision":
commit = s.Value
case "vcs.time":
time = s.Value
}
}
log.Debug(
"odidered",
slog.Group(
"build",
slog.String("commit", commit),
slog.String("time", time),
),
)
}
cfg, err := config.Load(*cfgPath)
if err != nil {
log.Error(
"failed to load config",
slog.Any("error", err),
)
os.Exit(1)
}
svc, err := service.New(cfg, log)
if err != nil {
log.Error(
"failed to create service",
slog.Any("error", err),
)
os.Exit(1)
}
if err := svc.Run(context.Background()); err != nil {
log.Error(
"failed to run",
slog.Any("error", err),
)
os.Exit(1)
}
}