Skip to main content

simple_agents_core/
lib.rs

1//! Core client API for SimpleAgents.
2//!
3//! This crate provides the unified `SimpleAgentsClient` that integrates
4//! providers, routing, caching, healing, and middleware in one place.
5//!
6//! # Example
7//! ```no_run
8//! use simple_agents_core::{
9//!     CompletionOptions, CompletionOutcome, RoutingMode, SimpleAgentsClient,
10//!     SimpleAgentsClientBuilder,
11//! };
12//! use simple_agent_type::prelude::*;
13//! # use async_trait::async_trait;
14//! # use std::sync::Arc;
15//! #
16//! # struct MockProvider;
17//! #
18//! # #[async_trait]
19//! # impl Provider for MockProvider {
20//! #     fn name(&self) -> &str { "mock" }
21//! #     fn transform_request(&self, _req: &CompletionRequest) -> Result<ProviderRequest> {
22//! #         Ok(ProviderRequest::new("http://example.com"))
23//! #     }
24//! #     async fn execute(&self, _req: ProviderRequest) -> Result<ProviderResponse> {
25//! #         Ok(ProviderResponse::new(200, serde_json::json!({"ok": true})))
26//! #     }
27//! #     fn transform_response(&self, _resp: ProviderResponse) -> Result<CompletionResponse> {
28//! #         Ok(CompletionResponse {
29//! #             id: "resp_1".to_string(),
30//! #             model: "test".to_string(),
31//! #             choices: vec![CompletionChoice {
32//! #                 index: 0,
33//! #                 message: Message::assistant("ok"),
34//! #                 finish_reason: FinishReason::Stop,
35//! #                 logprobs: None,
36//! #             }],
37//! #             usage: Usage::new(1, 1),
38//! #             created: None,
39//! #             provider: Some("mock".to_string()),
40//! #             healing_metadata: None,
41//! #         })
42//! #     }
43//! # }
44//! #
45//! # async fn example() -> Result<()> {
46//! let client = SimpleAgentsClientBuilder::new()
47//!     .with_provider(Arc::new(MockProvider))
48//!     .with_routing_mode(RoutingMode::RoundRobin)
49//!     .build()?;
50//!
51//! let request = CompletionRequest::builder()
52//!     .model("gpt-4")
53//!     .message(Message::user("Hello!"))
54//!     .build()?;
55//!
56//! let outcome = client.complete(&request, CompletionOptions::default()).await?;
57//! let response = match outcome {
58//!     CompletionOutcome::Response(response) => response,
59//!     _ => return Ok(()),
60//! };
61//! println!("{}", response.content().unwrap_or_default());
62//! # Ok(())
63//! # }
64//! ```
65
66#![deny(missing_docs)]
67#![deny(unsafe_code)]
68
69mod client;
70mod healing;
71mod middleware;
72mod routing;
73
74pub use client::{
75    CompletionMode, CompletionOptions, CompletionOutcome, SimpleAgentsClient,
76    SimpleAgentsClientBuilder,
77};
78pub use healing::{HealedJsonResponse, HealedSchemaResponse, HealingSettings};
79pub use middleware::Middleware;
80pub use routing::RoutingMode;
81
82// Re-export commonly used types.
83pub use simple_agent_type::prelude;