open_ai_response.rs

 1pub fn text_from_response(mut res: open_ai::Response) -> Option<String> {
 2    let choice = res.choices.pop()?;
 3    let output_text = match choice.message {
 4        open_ai::RequestMessage::Assistant {
 5            content: Some(open_ai::MessageContent::Plain(content)),
 6            ..
 7        } => content,
 8        open_ai::RequestMessage::Assistant {
 9            content: Some(open_ai::MessageContent::Multipart(mut content)),
10            ..
11        } => {
12            if content.is_empty() {
13                log::error!("No output from Baseten completion response");
14                return None;
15            }
16
17            match content.remove(0) {
18                open_ai::MessagePart::Text { text } => text,
19                open_ai::MessagePart::Image { .. } => {
20                    log::error!("Expected text, got an image");
21                    return None;
22                }
23            }
24        }
25        _ => {
26            log::error!("Invalid response message: {:?}", choice.message);
27            return None;
28        }
29    };
30    Some(output_text)
31}