Skip to main content

feagi_agent/sdk/sensory/text/
config.rs

1//! Text encoder configuration.
2
3use crate::core::{AgentConfig, AgentType, SdkError};
4use crate::sdk::types::{CorticalID, CorticalUnitIndex, FrameChangeHandling, SensoryCorticalUnit};
5
6/// Configuration for the text encoder.
7#[derive(Debug, Clone)]
8pub struct TextEncoderConfig {
9    pub agent_id: String,
10    pub cortical_unit_id: u8,
11    pub feagi_host: String,
12    pub feagi_api_port: u16,
13    pub feagi_zmq_registration_port: u16,
14    pub feagi_zmq_sensory_port: u16,
15    pub feagi_tick_hz: u32,
16    pub feagi_heartbeat_interval_s: f64,
17    pub feagi_connection_timeout_ms: u64,
18    pub feagi_registration_retries: u32,
19}
20
21impl TextEncoderConfig {
22    /// Build an AgentConfig for this text encoder.
23    pub fn to_agent_config(&self) -> Result<AgentConfig, SdkError> {
24        let registration_endpoint = format!(
25            "tcp://{}:{}",
26            self.feagi_host, self.feagi_zmq_registration_port
27        );
28        let sensory_endpoint = format!("tcp://{}:{}", self.feagi_host, self.feagi_zmq_sensory_port);
29
30        let agent_type = AgentType::Sensory;
31        Ok(AgentConfig::new(self.agent_id.clone(), agent_type)
32            .with_sensory_capability(self.feagi_tick_hz as f64, None)
33            .with_registration_endpoint(registration_endpoint)
34            .with_sensory_endpoint(sensory_endpoint)
35            .with_heartbeat_interval(self.feagi_heartbeat_interval_s)
36            .with_connection_timeout_ms(self.feagi_connection_timeout_ms)
37            .with_registration_retries(self.feagi_registration_retries))
38    }
39
40    /// Cortical ID used for text input.
41    pub fn cortical_id(&self) -> CorticalID {
42        SensoryCorticalUnit::get_cortical_ids_array_for_text_english_input_with_parameters(
43            FrameChangeHandling::Absolute,
44            CorticalUnitIndex::from(self.cortical_unit_id),
45        )[0]
46    }
47}