1- use std:: fmt:: Display ;
2-
31use reqwest:: {
42 header:: { HeaderMap , HeaderValue } ,
53 Body , Client , Url ,
64} ;
75use serde:: Serialize ;
86use spin_world:: v2:: llm:: { self as wasi_llm} ;
97
10- use crate :: { EmbeddingResponseBody , InferResponseBody } ;
8+ use crate :: {
9+ schema:: { EmbeddingModels , EncodingFormat , Message , Model , Role } ,
10+ EmbeddingResponseBody , InferResponseBody ,
11+ } ;
1112
1213pub ( crate ) struct OpenAIAgentEngine ;
1314
@@ -38,15 +39,13 @@ impl OpenAIAgentEngine {
3839 tracing:: info!( "Sending remote inference request to {chat_url}" ) ;
3940
4041 let body = CreateChatCompletionRequest {
41- messages : vec ! [ Message {
42- role: Role :: User , // TODO: Joshua: make customizable
43- content: prompt,
44- } ] ,
45- model : model. into ( ) ,
42+ // TODO: Joshua: make Role customizable
43+ messages : vec ! [ Message :: new( Role :: User , prompt) ] ,
44+ model : model. as_str ( ) . try_into ( ) ?,
4645 max_completion_tokens : Some ( params. max_tokens ) ,
4746 frequency_penalty : Some ( params. repeat_penalty ) , // TODO: Joshua: change to frequency_penalty
48- reasoning_effort : Some ( ReasoningEffort :: Medium ) ,
49- verbosity : Some ( Verbosity :: Low ) ,
47+ reasoning_effort : None ,
48+ verbosity : None ,
5049 } ;
5150
5251 let resp = client
@@ -87,7 +86,7 @@ impl OpenAIAgentEngine {
8786
8887 let body = CreateEmbeddingRequest {
8988 input : data,
90- model : EmbeddingModel :: Custom ( model) ,
89+ model : model. as_str ( ) . try_into ( ) ? ,
9190 encoding_format : None ,
9291 dimensions : None ,
9392 user : None ,
@@ -126,9 +125,9 @@ struct CreateChatCompletionRequest {
126125 #[ serde( skip_serializing_if = "Option::is_none" ) ]
127126 frequency_penalty : Option < f32 > ,
128127 #[ serde( skip_serializing_if = "Option::is_none" ) ]
129- reasoning_effort : Option < ReasoningEffort > ,
128+ reasoning_effort : Option < String > ,
130129 #[ serde( skip_serializing_if = "Option::is_none" ) ]
131- verbosity : Option < Verbosity > ,
130+ verbosity : Option < String > ,
132131}
133132
134133impl From < CreateChatCompletionRequest > for Body {
@@ -137,122 +136,10 @@ impl From<CreateChatCompletionRequest> for Body {
137136 }
138137}
139138
140- #[ derive( Serialize , Debug ) ]
141- enum Verbosity {
142- Low ,
143- _Medium,
144- _High,
145- }
146-
147- #[ derive( Serialize , Debug ) ]
148- enum ReasoningEffort {
149- _Minimal,
150- _Low,
151- Medium ,
152- _High,
153- }
154-
155- impl Display for ReasoningEffort {
156- fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
157- match self {
158- ReasoningEffort :: _Minimal => write ! ( f, "minimal" ) ,
159- ReasoningEffort :: _Low => write ! ( f, "low" ) ,
160- ReasoningEffort :: Medium => write ! ( f, "medium" ) ,
161- ReasoningEffort :: _High => write ! ( f, "high" ) ,
162- }
163- }
164- }
165-
166- #[ derive( Serialize , Debug ) ]
167- enum Model {
168- GPT5 ,
169- GPT5Mini ,
170- GPT5Nano ,
171- GPT5Chat ,
172- GPT45 ,
173- GPT41 ,
174- GPT41Mini ,
175- GPT41Nano ,
176- GPT4 ,
177- GPT4o ,
178- GPT4oMini ,
179- O4Mini ,
180- O3 ,
181- O1 ,
182- }
183-
184- impl From < String > for Model {
185- fn from ( value : String ) -> Self {
186- match value. as_str ( ) {
187- "gpt-5" => Model :: GPT5 ,
188- "gpt-5-mini" => Model :: GPT5Mini ,
189- "gpt-5-nano" => Model :: GPT5Nano ,
190- "gpt-5-chat" => Model :: GPT5Chat ,
191- "gpt-4.5" => Model :: GPT45 ,
192- "gpt-4.1" => Model :: GPT41 ,
193- "gpt-4.1-mini" => Model :: GPT41Mini ,
194- "gpt-4.1-nano" => Model :: GPT41Nano ,
195- "gpt-4" => Model :: GPT4 ,
196- "gpt-4o" => Model :: GPT4o ,
197- "gpt-4o-mini" => Model :: GPT4oMini ,
198- "o4-mini" => Model :: O4Mini ,
199- "o3" => Model :: O3 ,
200- "o1" => Model :: O1 ,
201- _ => Model :: GPT4 ,
202- }
203- }
204- }
205-
206- impl Display for Model {
207- fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
208- match self {
209- Model :: GPT5 => write ! ( f, "gpt-5" ) ,
210- Model :: GPT5Mini => write ! ( f, "gpt-5-mini" ) ,
211- Model :: GPT5Nano => write ! ( f, "gpt-5-nano" ) ,
212- Model :: GPT5Chat => write ! ( f, "gpt-5-chat" ) ,
213- Model :: GPT45 => write ! ( f, "gpt-4.5" ) ,
214- Model :: GPT41 => write ! ( f, "gpt-4.1" ) ,
215- Model :: GPT41Mini => write ! ( f, "gpt-4.1-mini" ) ,
216- Model :: GPT41Nano => write ! ( f, "gpt-4.1-nano" ) ,
217- Model :: GPT4 => write ! ( f, "gpt-4" ) ,
218- Model :: GPT4o => write ! ( f, "gpt-4o" ) ,
219- Model :: GPT4oMini => write ! ( f, "gpt-4o-mini" ) ,
220- Model :: O4Mini => write ! ( f, "o4-mini" ) ,
221- Model :: O3 => write ! ( f, "o3" ) ,
222- Model :: O1 => write ! ( f, "o1" ) ,
223- }
224- }
225- }
226-
227- #[ derive( Serialize , Debug ) ]
228- struct Message {
229- role : Role ,
230- content : String ,
231- }
232-
233- #[ derive( Serialize , Debug ) ]
234- enum Role {
235- _System,
236- User ,
237- _Assistant,
238- _Tool,
239- }
240-
241- impl Display for Role {
242- fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
243- match self {
244- Role :: _System => write ! ( f, "system" ) ,
245- Role :: User => write ! ( f, "user" ) ,
246- Role :: _Assistant => write ! ( f, "assistant" ) ,
247- Role :: _Tool => write ! ( f, "tool" ) ,
248- }
249- }
250- }
251-
252139#[ derive( Serialize , Debug ) ]
253140pub struct CreateEmbeddingRequest {
254141 input : Vec < String > ,
255- model : EmbeddingModel ,
142+ model : EmbeddingModels ,
256143 #[ serde( skip_serializing_if = "Option::is_none" ) ]
257144 encoding_format : Option < EncodingFormat > ,
258145 #[ serde( skip_serializing_if = "Option::is_none" ) ]
@@ -266,37 +153,3 @@ impl From<CreateEmbeddingRequest> for Body {
266153 Body :: from ( serde_json:: to_string ( & val) . unwrap ( ) )
267154 }
268155}
269-
270- #[ derive( Serialize , Debug ) ]
271- enum EncodingFormat {
272- _Float,
273- _Base64,
274- }
275-
276- impl Display for EncodingFormat {
277- fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
278- match self {
279- EncodingFormat :: _Float => write ! ( f, "float" ) ,
280- EncodingFormat :: _Base64 => write ! ( f, "base64" ) ,
281- }
282- }
283- }
284-
285- #[ derive( Serialize , Debug ) ]
286- enum EmbeddingModel {
287- _TextEmbeddingAda002,
288- _TextEmbedding3Small,
289- _TextEmbedding3Large,
290- Custom ( String ) ,
291- }
292-
293- impl Display for EmbeddingModel {
294- fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
295- match self {
296- EmbeddingModel :: _TextEmbeddingAda002 => write ! ( f, "text-embedding-ada-002" ) ,
297- EmbeddingModel :: _TextEmbedding3Small => write ! ( f, "text-embedding-3-small" ) ,
298- EmbeddingModel :: _TextEmbedding3Large => write ! ( f, "text-embedding-3-large" ) ,
299- EmbeddingModel :: Custom ( model) => write ! ( f, "{model}" ) ,
300- }
301- }
302- }
0 commit comments