next_web_ai/chat/observation/
chat_model_observation_context.rs1use 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}