next_web_ai/chat/model/
chat_response.rs

1use crate::{
2    chat::{
3        messages::assistant_message::AssistantMessage,
4        meta_data::chat_response_meta_data::ChatResponseMetadata, model::generation::Generation,
5    },
6    model::model_response::ModelResponse,
7};
8
9#[derive(Clone)]
10pub struct ChatResponse {
11    pub(crate) chat_response_meta_data: ChatResponseMetadata,
12    pub(crate) generations: Vec<Generation>,
13}
14
15impl ChatResponse {
16    pub fn new(
17        chat_response_meta_data: ChatResponseMetadata,
18        generations: Vec<Generation>,
19    ) -> Self {
20        Self {
21            chat_response_meta_data,
22            generations,
23        }
24    }
25}
26
27impl ModelResponse<Generation, AssistantMessage> for ChatResponse {
28    fn result(&self) -> Option<Generation> {
29        self.generations
30            .is_empty()
31            .then(|| self.generations.first().cloned())
32            .unwrap_or(None)
33    }
34
35    fn results(&self) -> impl IntoIterator<Item = Generation> {
36        self.generations.to_owned()
37    }
38
39    fn resp_meta_data(&self) -> impl crate::model::response_meta_data::ResponseMetadata {
40        self.chat_response_meta_data.clone()
41    }
42}