Skip to main content

Observation

Struct Observation 

Source
pub struct Observation {
Show 16 fields pub id: ObservationId, pub tenant_id: TenantId, pub project_id: ProjectId, pub source_event_id: Option<String>, pub source_uri: Option<String>, pub subject_id: Option<VertexId>, pub predicate: String, pub object_id: Option<VertexId>, pub object_value: Option<Value>, pub observed_at: DateTime<Utc>, pub extracted_at: DateTime<Utc>, pub confidence: Option<f32>, pub evidence_ids: Vec<EvidenceId>, pub extractor_version: Option<String>, pub metadata: Value, pub author: Option<AuthorStamp>,
}
Expand description

An atomic, source-bound fact about a subject.

Append-only: once an observation is stored, it cannot be modified. Re-submitting identical content under the same id is a no-op (idempotent). Re-submitting different content under the same id is a conflict.

Fields§

§id: ObservationId

Observation id, unique within the scope.

§tenant_id: TenantId

Owning tenant.

§project_id: ProjectId

Owning project.

§source_event_id: Option<String>

Identifier of the source event (e.g. “meeting_001”, “email_002”, “crm_webhook_2026-04-29T18:02”). Optional because some observations are aggregated (e.g. “champion silent for 14 days”) and don’t tie to a single event.

§source_uri: Option<String>

URI of the source artifact (e.g. “antares://transcripts/m1#1240-1295”). Optional and may duplicate evidence_ids[0].source_uri.

§subject_id: Option<VertexId>

Subject of the observation — typically a deal, person, meeting, or email vertex. Optional for observations that aren’t anchored to a specific entity (e.g. aggregate behavioral signals).

§predicate: String

What was observed about the subject. Free-form string — common values include “joined_review”, “mentioned_topic”, “viewed”, “opened_email”, “forwarded_to”, “went_silent”, “usage_dropped”.

§object_id: Option<VertexId>

Object of the predicate when the observation is relational.

§object_value: Option<Value>

Object as a literal value when the observation isn’t relational (e.g. “SOC2 was mentioned” → object_value = “SOC2”; “page opens count” → object_value = 5).

§observed_at: DateTime<Utc>

Wall-clock time the underlying event happened.

§extracted_at: DateTime<Utc>

Wall-clock time the extractor produced this observation.

§confidence: Option<f32>

Confidence in [0,1]; None is treated as 1.0.

§evidence_ids: Vec<EvidenceId>

First-class evidence references. Each Observation should point at one or more Evidence records that back it.

§extractor_version: Option<String>

Version tag of the producing extractor, verbatim.

§metadata: Value

Free-form metadata for extractor-specific extras.

§author: Option<AuthorStamp>

Which user authored this observation. None for older records and for anonymous calls. Set by the writer from the resolved authentication context at write time.

Trait Implementations§

Source§

impl Clone for Observation

Source§

fn clone(&self) -> Observation

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Observation

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Observation

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for Observation

Source§

fn eq(&self, other: &Observation) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Serialize for Observation

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for Observation

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.