next_web_ai/chat/model/
chat_response.rs1use 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}