1
package main
1
package main
2
2
3
// This binary converts text into embedding vecors.
3
// This binary converts text into embedding vecors.
4
4
5
import "encoding/json"
5
import "encoding/json"
6
import "flag"
6
import "flag"
7
import "fmt"
7
import "fmt"
8
import "io/ioutil"
8
import "io/ioutil"
9
import "log"
9
import "log"
10
import "os"
10
import "os"
11
11
12
import "oscarkilo.com/klex-git/api"
12
import "oscarkilo.com/klex-git/api"
13
import "oscarkilo.com/klex-git/config"
13
import "oscarkilo.com/klex-git/config"
14
14
15
var model = flag.String("model", "openai:text-embedding-3-small", "")
15
var model = flag.String("model", "openai:text-embedding-3-small", "")
16
16
17
func main() {
17
func main() {
18
flag.Parse()
18
flag.Parse()
19
19
20
// Find the API keys and configure a Klex client.
20
// Find the API keys and configure a Klex client.
21
config, err := config.ReadConfig()
21
config, err := config.ReadConfig()
22
if err != nil {
22
if err != nil {
23
log.Fatalf("Failed to read config: %v", err)
23
log.Fatalf("Failed to read config: %v", err)
24
}
24
}
25
client := api.NewClient(config.KlexUrl, config.ApiKey)
25
client := api.NewClient(config.KlexUrl, config.ApiKey)
26
if client == nil {
26
if client == nil {
27
log.Fatalf("Failed to create Klex client")
27
log.Fatalf("Failed to create Klex client")
28
}
28
}
29
29
30
// Read stdin as text.
30
// Read stdin as text.
31
sin, err := ioutil.ReadAll(os.Stdin)
31
sin, err := ioutil.ReadAll(os.Stdin)
32
if err != nil {
32
if err != nil {
33
log.Fatalf("Failed to read stdin: %v", err)
33
log.Fatalf("Failed to read stdin: %v", err)
34
}
34
}
35
35
36
json_vector, err := client.F("embed-" + *model, string(sin))
36
json_vector, err := client.F("embed-" + *model, string(sin))
37
if err != nil {
37
if err != nil {
38
log.Fatalf("Failed to call F: %v", err)
38
log.Fatalf("Failed to call F: %v", err)
39
}
39
}
40
var vector []float32
40
var vector []float32
41
err = json.Unmarshal([]byte(json_vector), &vector)
41
err = json.Unmarshal([]byte(json_vector), &vector)
42
if err != nil {
42
if err != nil {
43
log.Fatalf("Failed to parse vector: %v", err)
43
log.Fatalf("Failed to parse vector: %v", err)
44
}
44
}
45
45
46
for i, w := range vector {
46
for i, w := range vector {
47
if
47
if
48
48
49
fmt.Println()
50
}
49
}
50
fmt.Printf("%g", w)
51
}
51
}
52
fmt.Printf("\n")
52
}
53
}