pub struct AgentClient { /* private fields */ }Expand description
Unified agent client
Provides a single interface for:
- LLM inference via stakai (with Stakpak or direct providers)
- Session/checkpoint management (Stakpak API or local SQLite)
- MCP tools, billing, rulebooks (Stakpak API only)
Implementations§
Source§impl AgentClient
impl AgentClient
Sourcepub async fn new(config: AgentClientConfig) -> Result<Self, String>
pub async fn new(config: AgentClientConfig) -> Result<Self, String>
Create a new AgentClient
Sourcepub fn has_stakpak(&self) -> bool
pub fn has_stakpak(&self) -> bool
Check if Stakpak API is available
Sourcepub fn get_stakpak_api_endpoint(&self) -> &str
pub fn get_stakpak_api_endpoint(&self) -> &str
Get the Stakpak API endpoint (with default fallback)
Sourcepub fn stakai(&self) -> &StakAIClient
pub fn stakai(&self) -> &StakAIClient
Get reference to the StakAI client
Sourcepub fn stakpak_api(&self) -> Option<&StakpakApiClient>
pub fn stakpak_api(&self) -> Option<&StakpakApiClient>
Get reference to the Stakpak API client (if available)
Sourcepub fn local_db(&self) -> &Connection
pub fn local_db(&self) -> &Connection
Get reference to the local database
Sourcepub fn hook_registry(&self) -> &Arc<HookRegistry<AgentState>>
pub fn hook_registry(&self) -> &Arc<HookRegistry<AgentState>>
Get reference to the hook registry
Sourcepub fn model_options(&self) -> &ModelOptions
pub fn model_options(&self) -> &ModelOptions
Get the model options
Sourcepub fn get_model_string(&self, model: &AgentModel) -> LLMModel
pub fn get_model_string(&self, model: &AgentModel) -> LLMModel
Get the model string for the given agent model type
When Stakpak is available, routes through Stakpak provider. Otherwise, uses direct provider.
Trait Implementations§
Source§impl AgentProvider for AgentClient
impl AgentProvider for AgentClient
fn get_my_account<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<GetMyAccountResponse, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_billing_info<'life0, 'life1, 'async_trait>(
&'life0 self,
account_username: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<BillingResponse, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list_rulebooks<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<ListRuleBook>, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_rulebook_by_uri<'life0, 'life1, 'async_trait>(
&'life0 self,
uri: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<RuleBook, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn create_rulebook<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
uri: &'life1 str,
description: &'life2 str,
content: &'life3 str,
tags: Vec<String>,
visibility: Option<RuleBookVisibility>,
) -> Pin<Box<dyn Future<Output = Result<CreateRuleBookResponse, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn delete_rulebook<'life0, 'life1, 'async_trait>(
&'life0 self,
uri: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list_agent_sessions<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<AgentSession>, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_agent_session<'life0, 'async_trait>(
&'life0 self,
session_id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<AgentSession, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_agent_session_stats<'life0, 'async_trait>(
&'life0 self,
_session_id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<AgentSessionStats, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_agent_checkpoint<'life0, 'async_trait>(
&'life0 self,
checkpoint_id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<RunAgentOutput, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_agent_session_latest_checkpoint<'life0, 'async_trait>(
&'life0 self,
session_id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<RunAgentOutput, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn chat_completion<'life0, 'async_trait>(
&'life0 self,
model: AgentModel,
messages: Vec<ChatMessage>,
tools: Option<Vec<Tool>>,
) -> Pin<Box<dyn Future<Output = Result<ChatCompletionResponse, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn chat_completion_stream<'life0, 'async_trait>(
&'life0 self,
model: AgentModel,
messages: Vec<ChatMessage>,
tools: Option<Vec<Tool>>,
_headers: Option<HeaderMap>,
) -> Pin<Box<dyn Future<Output = Result<(Pin<Box<dyn Stream<Item = Result<ChatCompletionStreamResponse, ApiStreamError>> + Send>>, Option<String>), String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn cancel_stream<'life0, 'async_trait>(
&'life0 self,
request_id: String,
) -> Pin<Box<dyn Future<Output = Result<(), String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn search_docs<'life0, 'life1, 'async_trait>(
&'life0 self,
input: &'life1 SearchDocsRequest,
) -> Pin<Box<dyn Future<Output = Result<Vec<Content>, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn memorize_session<'life0, 'async_trait>(
&'life0 self,
checkpoint_id: Uuid,
) -> Pin<Box<dyn Future<Output = Result<(), String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn search_memory<'life0, 'life1, 'async_trait>(
&'life0 self,
input: &'life1 SearchMemoryRequest,
) -> Pin<Box<dyn Future<Output = Result<Vec<Content>, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn slack_read_messages<'life0, 'life1, 'async_trait>(
&'life0 self,
input: &'life1 SlackReadMessagesRequest,
) -> Pin<Box<dyn Future<Output = Result<Vec<Content>, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn slack_read_replies<'life0, 'life1, 'async_trait>(
&'life0 self,
input: &'life1 SlackReadRepliesRequest,
) -> Pin<Box<dyn Future<Output = Result<Vec<Content>, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn slack_send_message<'life0, 'life1, 'async_trait>(
&'life0 self,
input: &'life1 SlackSendMessageRequest,
) -> Pin<Box<dyn Future<Output = Result<Vec<Content>, String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§impl Clone for AgentClient
impl Clone for AgentClient
Source§fn clone(&self) -> AgentClient
fn clone(&self) -> AgentClient
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl Freeze for AgentClient
impl !RefUnwindSafe for AgentClient
impl Send for AgentClient
impl Sync for AgentClient
impl Unpin for AgentClient
impl !UnwindSafe for AgentClient
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T in a tonic::Request