code.oscarkilo.com/klex-git

Hash:
2bd1a4b29f8ebc3a498b313aef881adc5146b402
Author:
Igor Naverniouk <[email protected]>
Date:
Fri May 16 13:08:58 2025 -0700
Message:
custom dimensions in embeddings
diff --git a/embed/main.go b/embed/main.go
index 91b304e..5a98a6c 100644
--- a/embed/main.go
+++ b/embed/main.go
@@ -13,6 +13,7 @@ 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")

func main() {
flag.Parse()
@@ -33,7 +34,8 @@ func main() {
log.Fatalf("Failed to read stdin: %v", err)
}

- json_vector, err := client.F("embed-" + *model, string(sin))
+ f_name := fmt.Sprintf("embed-%s@%d", *model, *dims)
+ json_vector, err := client.F(f_name, string(sin))
if err != nil {
log.Fatalf("Failed to call F: %v", err)
}
a/embed/main.go
b/embed/main.go
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
var dims = flag.Int("dims", 1536, "Number of vector dimensions to return")
16
17
17
func main() {
18
func main() {
18
flag.Parse()
19
flag.Parse()
19
20
20
// Find the API keys and configure a Klex client.
21
// Find the API keys and configure a Klex client.
21
config, err := config.ReadConfig()
22
config, err := config.ReadConfig()
22
if err != nil {
23
if err != nil {
23
log.Fatalf("Failed to read config: %v", err)
24
log.Fatalf("Failed to read config: %v", err)
24
}
25
}
25
client := api.NewClient(config.KlexUrl, config.ApiKey)
26
client := api.NewClient(config.KlexUrl, config.ApiKey)
26
if client == nil {
27
if client == nil {
27
log.Fatalf("Failed to create Klex client")
28
log.Fatalf("Failed to create Klex client")
28
}
29
}
29
30
30
// Read stdin as text.
31
// Read stdin as text.
31
sin, err := ioutil.ReadAll(os.Stdin)
32
sin, err := ioutil.ReadAll(os.Stdin)
32
if err != nil {
33
if err != nil {
33
log.Fatalf("Failed to read stdin: %v", err)
34
log.Fatalf("Failed to read stdin: %v", err)
34
}
35
}
35
36
36
json_vector, err := client.F("embed-" + *model, string(sin))
37
f_name := fmt.Sprintf("embed-%s@%d", *model, *dims)
38
json_vector, err := client.F(f_name, string(sin))
37
if err != nil {
39
if err != nil {
38
log.Fatalf("Failed to call F: %v", err)
40
log.Fatalf("Failed to call F: %v", err)
39
}
41
}
40
var vector []float32
42
var vector []float32
41
err = json.Unmarshal([]byte(json_vector), &vector)
43
err = json.Unmarshal([]byte(json_vector), &vector)
42
if err != nil {
44
if err != nil {
43
log.Fatalf("Failed to parse vector: %v", err)
45
log.Fatalf("Failed to parse vector: %v", err)
44
}
46
}
45
47
46
for i, w := range vector {
48
for i, w := range vector {
47
if i > 0 {
49
if i > 0 {
48
fmt.Printf(" ")
50
fmt.Printf(" ")
49
}
51
}
50
fmt.Printf("%g", w)
52
fmt.Printf("%g", w)
51
}
53
}
52
fmt.Printf("\n")
54
fmt.Printf("\n")
53
}
55
}