reasoninglayer 0.2.1

Rust client SDK for the Reasoning Layer API
Documentation
//! Context assembly DTOs.

use std::collections::BTreeMap;

use serde::{Deserialize, Serialize};

/// Output format for rendered context.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum OutputFormatDto {
    Yaml,
    Markdown,
    Json,
}

/// Feature configuration for domain-specific concept features.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct FeatureConfigDto {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub dependent_feature: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub id_feature: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub name_feature: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub prerequisite_feature: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub related_feature: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub searchable_text_feature: Option<String>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub source_feature: Option<String>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AssembleContextRequest {
    pub concept_sort_id: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub feature_config: Option<FeatureConfigDto>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub include_dependents: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub include_hierarchy: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub include_prerequisites: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub include_related: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub include_sources: Option<bool>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub max_concepts: Option<u32>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub max_tokens: Option<u32>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub min_similarity: Option<f64>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub output_format: Option<OutputFormatDto>,
    pub query: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AssembledConceptDto {
    #[serde(default)]
    pub features: BTreeMap<String, String>,
    pub name: String,
    pub relevance: f64,
    pub sort_name: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AssembledRelationDto {
    pub confidence: f64,
    pub relation: String,
    pub source: String,
    pub target: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CitationMarkerDto {
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub document: Option<String>,
    pub excerpt: String,
    pub index: u64,
    pub label: String,
    pub relevance: f64,
    pub source_type: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub term_id: Option<String>,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct AssemblyTokenCountsDto {
    pub concepts: u64,
    pub hierarchy: u64,
    pub relations: u64,
    pub remaining: u64,
    pub sources: u64,
    pub total: u64,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct RetrievalStatsDto {
    pub assembly_ms: u64,
    pub concepts_found: u64,
    pub feature_relations_found: u64,
    pub graph_traversal_ms: u64,
    pub relation_scan_ms: u64,
    pub relation_terms_found: u64,
    pub search_ms: u64,
    pub terms_searched: u64,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SourceExcerptDto {
    pub concept: String,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub document: Option<String>,
    pub text: String,
}

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct AssembleContextResponse {
    #[serde(default)]
    pub citations: Vec<CitationMarkerDto>,
    #[serde(default)]
    pub concepts: Vec<AssembledConceptDto>,
    #[serde(default, skip_serializing_if = "Option::is_none")]
    pub hierarchy_summary: Option<String>,
    #[serde(default)]
    pub relations: Vec<AssembledRelationDto>,
    #[serde(default)]
    pub rendered: String,
    #[serde(default)]
    pub source_excerpts: Vec<SourceExcerptDto>,
    #[serde(default)]
    pub stats: RetrievalStatsDto,
    #[serde(default)]
    pub token_counts: AssemblyTokenCountsDto,
}