1
1
//! Client configurations: [OpenAIConfig] for OpenAI, [AzureConfig] for Azure OpenAI Service.
2
2
use reqwest:: header:: { HeaderMap , AUTHORIZATION } ;
3
+ use secrecy:: { ExposeSecret , Secret } ;
3
4
use serde:: Deserialize ;
4
5
5
6
/// Default v1 API base url
@@ -16,33 +17,23 @@ pub trait Config: Clone {
16
17
17
18
fn api_base ( & self ) -> & str ;
18
19
19
- fn api_key ( & self ) -> & str ;
20
+ fn api_key ( & self ) -> & Secret < String > ;
20
21
}
21
22
22
23
/// Configuration for OpenAI API
23
- #[ derive( Clone , Deserialize ) ]
24
+ #[ derive( Clone , Debug , Deserialize ) ]
24
25
#[ serde( default ) ]
25
26
pub struct OpenAIConfig {
26
27
api_base : String ,
27
- api_key : String ,
28
+ api_key : Secret < String > ,
28
29
org_id : String ,
29
30
}
30
31
31
- impl std:: fmt:: Debug for OpenAIConfig {
32
- fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
33
- f. debug_struct ( "OpenAIConfig" )
34
- . field ( "api_base" , & self . api_base )
35
- . field ( "api_key" , & "[redacted]" )
36
- . field ( "org_id" , & self . org_id )
37
- . finish ( )
38
- }
39
- }
40
-
41
32
impl Default for OpenAIConfig {
42
33
fn default ( ) -> Self {
43
34
Self {
44
35
api_base : OPENAI_API_BASE . to_string ( ) ,
45
- api_key : std:: env:: var ( "OPENAI_API_KEY" ) . unwrap_or_else ( |_| "" . to_string ( ) ) ,
36
+ api_key : std:: env:: var ( "OPENAI_API_KEY" ) . unwrap_or_else ( |_| "" . to_string ( ) ) . into ( ) ,
46
37
org_id : Default :: default ( ) ,
47
38
}
48
39
}
@@ -62,7 +53,7 @@ impl OpenAIConfig {
62
53
63
54
/// To use a different API key different from default OPENAI_API_KEY env var
64
55
pub fn with_api_key < S : Into < String > > ( mut self , api_key : S ) -> Self {
65
- self . api_key = api_key. into ( ) ;
56
+ self . api_key = Secret :: from ( api_key. into ( ) ) ;
66
57
self
67
58
}
68
59
@@ -89,7 +80,7 @@ impl Config for OpenAIConfig {
89
80
90
81
headers. insert (
91
82
AUTHORIZATION ,
92
- format ! ( "Bearer {}" , self . api_key) . as_str ( ) . parse ( ) . unwrap ( ) ,
83
+ format ! ( "Bearer {}" , self . api_key. expose_secret ( ) ) . as_str ( ) . parse ( ) . unwrap ( ) ,
93
84
) ;
94
85
95
86
headers
@@ -103,7 +94,7 @@ impl Config for OpenAIConfig {
103
94
& self . api_base
104
95
}
105
96
106
- fn api_key ( & self ) -> & str {
97
+ fn api_key ( & self ) -> & Secret < String > {
107
98
& self . api_key
108
99
}
109
100
@@ -113,31 +104,21 @@ impl Config for OpenAIConfig {
113
104
}
114
105
115
106
/// Configuration for Azure OpenAI Service
116
- #[ derive( Clone , Deserialize ) ]
107
+ #[ derive( Clone , Debug , Deserialize ) ]
117
108
#[ serde( default ) ]
118
109
pub struct AzureConfig {
119
110
api_version : String ,
120
111
deployment_id : String ,
121
112
api_base : String ,
122
- api_key : String ,
113
+ api_key : Secret < String > ,
123
114
}
124
115
125
- impl std:: fmt:: Debug for AzureConfig {
126
- fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
127
- f. debug_struct ( "AzureConfig" )
128
- . field ( "api_version" , & self . api_version )
129
- . field ( "deployment_id" , & self . deployment_id )
130
- . field ( "api_base" , & self . api_base )
131
- . field ( "api_key" , & "[redacted]" )
132
- . finish ( )
133
- }
134
- }
135
116
136
117
impl Default for AzureConfig {
137
118
fn default ( ) -> Self {
138
119
Self {
139
120
api_base : Default :: default ( ) ,
140
- api_key : std:: env:: var ( "OPENAI_API_KEY" ) . unwrap_or_else ( |_| "" . to_string ( ) ) ,
121
+ api_key : std:: env:: var ( "OPENAI_API_KEY" ) . unwrap_or_else ( |_| "" . to_string ( ) ) . into ( ) ,
141
122
deployment_id : Default :: default ( ) ,
142
123
api_version : Default :: default ( ) ,
143
124
}
@@ -161,7 +142,7 @@ impl AzureConfig {
161
142
162
143
/// To use a different API key different from default OPENAI_API_KEY env var
163
144
pub fn with_api_key < S : Into < String > > ( mut self , api_key : S ) -> Self {
164
- self . api_key = api_key. into ( ) ;
145
+ self . api_key = Secret :: from ( api_key. into ( ) ) ;
165
146
self
166
147
}
167
148
@@ -176,7 +157,7 @@ impl Config for AzureConfig {
176
157
fn headers ( & self ) -> HeaderMap {
177
158
let mut headers = HeaderMap :: new ( ) ;
178
159
179
- headers. insert ( "api-key" , self . api_key . as_str ( ) . parse ( ) . unwrap ( ) ) ;
160
+ headers. insert ( "api-key" , self . api_key . expose_secret ( ) . as_str ( ) . parse ( ) . unwrap ( ) ) ;
180
161
181
162
headers
182
163
}
@@ -192,7 +173,7 @@ impl Config for AzureConfig {
192
173
& self . api_base
193
174
}
194
175
195
- fn api_key ( & self ) -> & str {
176
+ fn api_key ( & self ) -> & Secret < String > {
196
177
& self . api_key
197
178
}
198
179
0 commit comments