whisper-api-server/internal/resources/cliArgs.go

106 lines
2.6 KiB
Go

package resources
import (
_ "embed"
"encoding/json"
"fmt"
"os"
"strconv"
"strings"
"github.com/spf13/cobra"
)
//go:embed languageMap.json
var languageMapData []byte // Embedded language map file as a byte slice
// Arguments holds the parsed CLI arguments
type Arguments struct {
Language string
ModelPath string
Port int
}
// ParsedArguments holds the processed arguments
type ParsedArguments struct {
Language int32
ModelPath string
Port int
}
// LanguageMap represents the mapping of languages to their hex codes
type LanguageMap map[string]string
func processLanguageAndCode(language string) (int32, error) {
var languageMap LanguageMap
err := json.Unmarshal(languageMapData, &languageMap)
if err != nil {
return 0x6E65, fmt.Errorf("error parsing language map: %w", err)
}
hexCode, ok := languageMap[strings.ToLower(language)]
if !ok {
return 0x6E65, fmt.Errorf("unsupported language")
}
fmt.Printf("Hex Code Found: %s\n", hexCode)
languageCode, err := strconv.ParseInt(hexCode, 0, 32)
if err != nil {
return 0x6E65, fmt.Errorf("error converting hex code: %w", err)
}
return int32(languageCode), nil
}
func ApplyExitOnHelp(c *cobra.Command, exitCode int) {
helpFunc := c.HelpFunc()
c.SetHelpFunc(func(c *cobra.Command, s []string) {
helpFunc(c, s)
os.Exit(exitCode)
})
}
func ParseFlags() (*ParsedArguments, error) {
args := &Arguments{}
var parsedArgs *ParsedArguments
cobra.MousetrapHelpText = ""
rootCmd := &cobra.Command{
Use: "whisper",
Short: "Audio transcription using the OpenAI Whisper models",
RunE: func(cmd *cobra.Command, _ []string) error {
// Process language code with fallback
languageCode, err := processLanguageAndCode(args.Language)
if err != nil {
fmt.Println("Error setting language, defaulting to English")
// Default to English
languageCode = 0x6E65
}
parsedArgs = &ParsedArguments{
Language: languageCode,
ModelPath: args.ModelPath,
Port: args.Port,
}
return nil
},
}
rootCmd.Flags().StringVarP(&args.Language, "language", "l", "", "Language to be processed")
rootCmd.Flags().StringVarP(&args.ModelPath, "modelPath", "m", "ggml-medium.bin", "Path to the model file (required)")
rootCmd.Flags().IntVarP(&args.Port, "port", "p", 3000, "Port to start the server on")
ApplyExitOnHelp(rootCmd, 0)
err := rootCmd.Execute()
if err != nil {
return nil, err
}
return parsedArgs, nil
}