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