ragit_api/response/
openai.rs1use super::{IntoChatResponse, Response};
2use crate::error::Error;
3use serde::Deserialize;
4
5#[allow(dead_code)]
6#[derive(Deserialize)]
7pub struct OpenAiResponse {
8 id: String,
9 object: String,
10 created: i64,
11 model: String,
12 choices: Vec<OpenAiChoice>,
13 usage: OpenAiUsage,
14}
15
16#[allow(dead_code)]
17#[derive(Deserialize)]
18struct OpenAiChoice {
19 index: usize,
20 message: OpenAiMessage,
21 finish_reason: String,
22}
23
24#[allow(dead_code)]
25#[derive(Deserialize)]
26struct OpenAiUsage {
27 prompt_tokens: usize,
28 completion_tokens: usize,
29 total_tokens: usize,
30
31 #[serde(skip)]
33 prompt_time: f32,
34 #[serde(skip)]
35 completion_time: f32,
36 #[serde(skip)]
37 total_time: f32,
38}
39
40#[allow(dead_code)]
41#[derive(Deserialize)]
42struct OpenAiMessage {
43 role: String,
44 content: String,
45 reasoning_content: Option<String>,
46}
47
48impl IntoChatResponse for OpenAiResponse {
49 fn into_chat_response(&self) -> Result<Response, Error> {
50 Ok(Response {
51 messages: self.choices.iter().map(
52 |choice| choice.message.content.to_string()
53 ).collect(),
54 reasonings: self.choices.iter().map(
55 |choice| choice.message.reasoning_content.clone()
56 ).collect(),
57 output_tokens: self.usage.completion_tokens,
58 prompt_tokens: self.usage.prompt_tokens,
59 total_tokens: self.usage.total_tokens,
60 })
61 }
62}