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 }