next_web_ai/chat/observation/
chat_model_observation_context.rs

1use std::ops::{Deref, DerefMut};
2
3use crate::{
4    chat::{
5        model::chat_response::ChatResponse,
6        observation::{
7            ai_operation_metadata::AiOperationMetadata,
8            conventions::ai_operation_type::AiOperationType,
9            model_observation_context::ModelObservationContext,
10        },
11        prompt::{chat_options::ChatOptions, prompt::Prompt},
12    },
13    observation::observation::Context,
14};
15
16#[derive(Clone)]
17pub struct ChatModelObservationContext {
18    request_options: Box<dyn ChatOptions>,
19    model_observation_context: ModelObservationContext<Prompt, ChatResponse>,
20}
21
22impl ChatModelObservationContext {
23    pub fn new(
24        prompt: Prompt,
25        provider: impl Into<String>,
26        request_options: Box<dyn ChatOptions>,
27    ) -> Self {
28        let operation_metadata = AiOperationMetadata {
29            operation_type: AiOperationType::Chat.to_string(),
30            provider: provider.into(),
31        };
32        Self {
33            model_observation_context: ModelObservationContext::new(prompt, operation_metadata),
34            request_options,
35        }
36    }
37}
38
39impl ChatModelObservationContext {
40    pub fn request_options(&self) -> &dyn ChatOptions {
41        self.request_options.as_ref()
42    }
43}
44
45impl Context for ChatModelObservationContext {
46    fn set_parent_from_current_observation(
47        &mut self,
48        registry: &dyn crate::observation::observation_registry::ObservationRegistry,
49    ) {
50    }
51
52    fn add_low_cardinality_key_values(
53        &mut self,
54        key_values: crate::util::key_values::KeyValues<Box<dyn crate::util::key_value::KeyValue>>,
55    ) {
56    }
57
58    fn set_name(&mut self, name: &str) {
59        self.name = Some(name.to_string());
60    }
61
62    fn set_contextual_name(&mut self, contextual_name: &str) {
63        self.contextual_name = Some(contextual_name.to_string());
64    }
65}
66
67impl Deref for ChatModelObservationContext {
68    type Target = ModelObservationContext<Prompt, ChatResponse>;
69
70    fn deref(&self) -> &Self::Target {
71        &self.model_observation_context
72    }
73}
74
75impl DerefMut for ChatModelObservationContext {
76    fn deref_mut(&mut self) -> &mut Self::Target {
77        &mut self.model_observation_context
78    }
79}