pub struct Agent<M>where
M: ModelAdapter,{ /* private fields */ }Expand description
A configured agent ready to start a session.
Build one with Agent::builder, supplying at minimum a ModelAdapter.
Optionally preload prior conversation state via
AgentBuilder::transcript and the next user turn via
AgentBuilder::input. Then call Agent::start with a
SessionConfig to obtain a LoopDriver that drives the agentic loop.
If no input is preloaded, the first call to LoopDriver::next yields
LoopInterrupt::AwaitingInput so the host can supply the first user
message via InputRequest::submit. If input was preloaded, the first
next() dispatches the model directly.
§Example
use agentkit_core::{Item, ItemKind};
use agentkit_loop::{
Agent, PromptCacheRequest, PromptCacheRetention, SessionConfig,
};
use agentkit_tools_core::ToolRegistry;
let agent = Agent::builder()
.model(adapter)
.add_tool_source(ToolRegistry::new())
.transcript(vec![Item::text(ItemKind::System, "You are a helpful assistant.")])
.input(vec![Item::text(ItemKind::User, "Hello!")])
.build()?;
let mut driver = agent
.start(SessionConfig::new("s1").with_cache(
PromptCacheRequest::automatic().with_retention(PromptCacheRetention::Short),
))
.await?;
// First next() drives the model since input was preloaded.
let _ = driver.next().await?;Implementations§
Source§impl<M> Agent<M>where
M: ModelAdapter,
impl<M> Agent<M>where
M: ModelAdapter,
Sourcepub fn builder() -> AgentBuilder<M>
pub fn builder() -> AgentBuilder<M>
Create a new AgentBuilder for configuring this agent.
Sourcepub async fn start(
&self,
config: SessionConfig,
) -> Result<LoopDriver<M::Session>, LoopError>
pub async fn start( &self, config: SessionConfig, ) -> Result<LoopDriver<M::Session>, LoopError>
Start a session, returning a LoopDriver preloaded with whatever
transcript and input were configured on the builder. See
AgentBuilder::transcript and AgentBuilder::input for what each
one does and when to use them.
This calls ModelAdapter::start_session and emits an
AgentEvent::RunStarted event to all registered observers.
&self so a single configured agent can mint multiple sessions over
its lifetime — e.g. an outer agent that uses an inner sub-agent for
transcript compaction.
§Errors
Returns LoopError if the model adapter fails to create a session.