next_web_ai/chat/model/
generation.rs

1use crate::{
2    chat::{
3        messages::assistant_message::AssistantMessage,
4        meta_data::{
5            chat_generation_meta_data::ChatGenerationMetadata,
6            default_chat_generation_metadata::DefaultChatGenerationMetadata,
7        },
8    },
9    model::{model_result::ModelResult, result_meta_data::ResultMetadata},
10};
11
12#[derive(Clone)]
13pub struct Generation {
14    assistant_message: AssistantMessage,
15    chat_generation_metadata: Option<Box<dyn ChatGenerationMetadata>>,
16}
17
18impl Generation {
19    pub fn new(assistant_message: AssistantMessage) -> Self {
20        Self {
21            assistant_message,
22            chat_generation_metadata: None,
23        }
24    }
25}
26impl ModelResult<AssistantMessage> for Generation {
27    fn output(&self) -> &AssistantMessage {
28        &self.assistant_message
29    }
30
31    fn meta_data(&self) -> Box<dyn ResultMetadata> {
32        self.chat_generation_metadata
33            .as_ref()
34            .map(|s| s.clone())
35            .unwrap_or(Box::new(DefaultChatGenerationMetadata::null()))
36    }
37}