package main // This binary converts text into embedding vecors. import "flag" import "fmt" import "io/ioutil" import "log" import "os" import "oscarkilo.com/klex-git/api" import "oscarkilo.com/klex-git/config" var model = flag.String("model", "openai:text-embedding-3-small", "") var dims = flag.Int("dims", 1536, "Number of vector dimensions to return") var full_path = flag.Bool("full_path", false, "Returns a list of vectors") func main() { flag.Parse() // Find the API keys and configure a Klex client. config, err := config.ReadConfig() if err != nil { log.Fatalf("Failed to read config: %v", err) } client := api.NewClient(config.KlexUrl, config.ApiKey) if client == nil { log.Fatalf("Failed to create Klex client") } // Read stdin as text. sin, err := ioutil.ReadAll(os.Stdin) if err != nil { log.Fatalf("Failed to read stdin: %v", err) } vectors, err := client.Embed(api.EmbedRequest{ Text: string(sin), Model: *model, Dims: *dims, FullPath: *full_path, }) if err != nil { log.Fatalf("Failed to call Embed: %v", err) } for _, vector := range vectors { for i, w := range vector { if i > 0 { fmt.Printf(" ") } fmt.Printf("%g", w) } fmt.Printf("\n") } }