code.oscarkilo.com/klex-git/embed/main.go

..
main.go
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")
  }
}