@@ -34,7 +34,7 @@ struct Args {
34
34
enum Commands {
35
35
Serve {
36
36
#[ arg( short, long) ]
37
- key : String ,
37
+ key : Option < String > ,
38
38
#[ arg( short, long) ]
39
39
directory : String ,
40
40
#[ arg( short, long, default_value_t = 8080 ) ]
@@ -44,7 +44,7 @@ enum Commands {
44
44
} ,
45
45
Load {
46
46
#[ arg( short, long) ]
47
- key : String ,
47
+ key : Option < String > ,
48
48
#[ arg( short, long) ]
49
49
commit : String ,
50
50
#[ arg( long) ]
@@ -58,21 +58,21 @@ enum Commands {
58
58
} ,
59
59
Embed {
60
60
#[ arg( short, long) ]
61
- key : String ,
61
+ key : Option < String > ,
62
62
#[ arg( short, long) ]
63
63
string : String ,
64
64
} ,
65
65
Compare {
66
66
#[ arg( short, long) ]
67
- key : String ,
67
+ key : Option < String > ,
68
68
#[ arg( long) ]
69
69
s1 : String ,
70
70
#[ arg( long) ]
71
71
s2 : String ,
72
72
} ,
73
73
Compare2 {
74
74
#[ arg( short, long) ]
75
- key : String ,
75
+ key : Option < String > ,
76
76
#[ arg( long) ]
77
77
s1 : String ,
78
78
#[ arg( long) ]
@@ -82,7 +82,7 @@ enum Commands {
82
82
} ,
83
83
Test {
84
84
#[ arg( short, long) ]
85
- key : String ,
85
+ key : Option < String > ,
86
86
} ,
87
87
}
88
88
@@ -93,6 +93,11 @@ enum DistanceVariant {
93
93
Scalar ,
94
94
}
95
95
96
+ fn key_or_env ( k : Option < String > ) -> String {
97
+ k. or_else ( || std:: env:: var ( "OPENAI_KEY" ) . ok ( ) )
98
+ . expect ( "No OpenAI key given" )
99
+ }
100
+
96
101
#[ tokio:: main]
97
102
async fn main ( ) -> Result < ( ) , Box < dyn std:: error:: Error + Send + Sync > > {
98
103
let args = Args :: parse ( ) ;
@@ -102,13 +107,13 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
102
107
directory,
103
108
port,
104
109
size,
105
- } => server:: serve ( directory, port, size, key) . await ?,
110
+ } => server:: serve ( directory, port, size, key_or_env ( key) ) . await ?,
106
111
Commands :: Embed { key, string } => {
107
- let v = openai:: embeddings_for ( & key, & [ string] ) . await ?;
112
+ let v = openai:: embeddings_for ( & key_or_env ( key) , & [ string] ) . await ?;
108
113
eprintln ! ( "{:?}" , v) ;
109
114
}
110
115
Commands :: Compare { key, s1, s2 } => {
111
- let v = openai:: embeddings_for ( & key, & [ s1, s2] ) . await ?;
116
+ let v = openai:: embeddings_for ( & key_or_env ( key) , & [ s1, s2] ) . await ?;
112
117
let p1 = Point :: Mem {
113
118
vec : Box :: new ( v[ 0 ] ) ,
114
119
} ;
@@ -127,7 +132,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
127
132
s2,
128
133
variant,
129
134
} => {
130
- let v = openai:: embeddings_for ( & key, & [ s1, s2] ) . await ?;
135
+ let v = openai:: embeddings_for ( & key_or_env ( key) , & [ s1, s2] ) . await ?;
131
136
let p1 = & v[ 0 ] ;
132
137
let p2 = & v[ 1 ] ;
133
138
let distance = match variant {
@@ -139,7 +144,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
139
144
}
140
145
Commands :: Test { key } => {
141
146
let v = openai:: embeddings_for (
142
- & key,
147
+ & key_or_env ( key) ,
143
148
& [
144
149
"king" . to_string ( ) ,
145
150
"man" . to_string ( ) ,
@@ -179,6 +184,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
179
184
} )
180
185
. chunks ( 100 ) ;
181
186
187
+ let key = key_or_env ( key) ;
182
188
for structs in opstream {
183
189
let structs: Vec < _ > = structs. collect ( ) ;
184
190
let new_ops =
0 commit comments