1mod agent;
21mod macros;
22mod providers;
23
24pub mod prelude;
25pub mod runtime;
26pub mod util;
27
28pub use fchat::{
29 ChatError, ChatErrorKind, ChatErrorPhase, ChatErrorSource, ChatEvent, ChatEventStream,
30 ChatPolicy, ChatService, ChatServiceBuilder, ChatSession, ChatTurnOptions, ChatTurnRequest,
31 ChatTurnRequestBuilder, ChatTurnResult, ConversationStore, InMemoryConversationStore,
32};
33pub use fcommon::{BoxFuture, MetadataMap, SessionId, TraceId};
34pub use fharness::{
35 AcceptAllValidator, ChatEventObserver, FailFastPolicy, FeatureSelector,
36 FirstPendingFeatureSelector, Harness, HarnessBuilder, HarnessError, HarnessErrorKind,
37 HarnessPhase, HealthChecker, InitializerRequest, InitializerResult, NoopHealthChecker,
38 OutcomeValidator, RunPolicy, RunPolicyMode, RuntimeRunOutcome, RuntimeRunRequest,
39 TaskIterationRequest, TaskIterationResult,
40};
41pub use fmemory::{
42 BootstrapState, FeatureRecord, InMemoryMemoryBackend, InitCommand, InitPlan, InitShell,
43 InitShellScript, InitStep, MemoryBackend, MemoryBackendConfig, MemoryConversationStore,
44 MemoryError, MemoryErrorKind, ProgressEntry, RunCheckpoint, RunStatus, SessionManifest,
45 SqliteMemoryBackend, create_default_memory_backend, create_memory_backend,
46};
47pub use fprovider::{
48 BoxedEventStream, BrowserLoginSession, CredentialAccessAction, CredentialAccessEvent,
49 CredentialAccessObserver, CredentialKind, CredentialMetadata, Message, ModelEventStream,
50 ModelProvider, ModelRequest, ModelRequestBuilder, ModelResponse, NoopOperationHooks,
51 OutputItem, ProviderCredential, ProviderError, ProviderErrorKind, ProviderFuture, ProviderId,
52 ProviderOperationHooks, ProviderRegistry, RetryPolicy, Role, SecretString,
53 SecureCredentialManager, StopReason, StreamEvent, TokenUsage, ToolCall, ToolDefinition,
54 ToolResult, VecEventStream, execute_with_retry,
55};
56pub use ftooling::{
57 DefaultToolRuntime, FunctionTool, NoopToolRuntimeHooks, Tool, ToolError, ToolErrorKind,
58 ToolExecutionContext, ToolExecutionResult, ToolFuture, ToolRegistry, ToolRuntime,
59 ToolRuntimeHooks, parse_json_object, parse_json_value, required_string,
60};
61
62pub use agent::{AgentHarnessBuilder, AgentRuntime};
63pub use providers::{
64 ProviderBuildConfig, build_provider_from_api_key, build_provider_with_config,
65 list_models_with_api_key,
66};
67pub use runtime::{
68 RuntimeBundle, build_runtime, build_runtime_with, build_runtime_with_memory,
69 build_runtime_with_tooling, chat_service, chat_service_with_memory, in_memory_backend,
70};
71pub use util::{
72 assistant_message, parse_provider_id, session, streaming_turn, system_message, tool_message,
73 turn, user_message,
74};
75
76pub mod chat {
77 pub use crate::{
78 ChatError, ChatErrorKind, ChatErrorPhase, ChatErrorSource, ChatEvent, ChatEventStream,
79 ChatPolicy, ChatService, ChatServiceBuilder, ChatSession, ChatTurnOptions, ChatTurnRequest,
80 ChatTurnRequestBuilder, ChatTurnResult, ConversationStore, InMemoryConversationStore,
81 };
82}
83
84pub mod harness {
85 pub use crate::{
86 AcceptAllValidator, ChatEventObserver, FailFastPolicy, FeatureSelector,
87 FirstPendingFeatureSelector, Harness, HarnessBuilder, HarnessError, HarnessErrorKind,
88 HarnessPhase, HealthChecker, InitializerRequest, InitializerResult, NoopHealthChecker,
89 OutcomeValidator, RunPolicy, RunPolicyMode, RuntimeRunOutcome, RuntimeRunRequest,
90 TaskIterationRequest, TaskIterationResult,
91 };
92}
93
94pub mod memory {
95 pub use crate::{
96 BootstrapState, FeatureRecord, InMemoryMemoryBackend, InitCommand, InitPlan, InitShell,
97 InitShellScript, InitStep, MemoryBackend, MemoryBackendConfig, MemoryConversationStore,
98 MemoryError, MemoryErrorKind, ProgressEntry, RunCheckpoint, RunStatus, SessionManifest,
99 SqliteMemoryBackend, create_default_memory_backend, create_memory_backend,
100 };
101}
102
103pub mod provider {
104 pub use crate::{
105 BoxedEventStream, BrowserLoginSession, CredentialAccessAction, CredentialAccessEvent,
106 CredentialAccessObserver, CredentialKind, CredentialMetadata, Message, ModelEventStream,
107 ModelProvider, ModelRequest, ModelRequestBuilder, ModelResponse, NoopOperationHooks,
108 OutputItem, ProviderCredential, ProviderError, ProviderErrorKind, ProviderFuture,
109 ProviderId, ProviderOperationHooks, ProviderRegistry, RetryPolicy, Role, SecretString,
110 SecureCredentialManager, StopReason, StreamEvent, TokenUsage, ToolCall, ToolDefinition,
111 ToolResult, VecEventStream, execute_with_retry,
112 };
113}
114
115pub mod tooling {
116 pub use crate::{
117 DefaultToolRuntime, FunctionTool, NoopToolRuntimeHooks, Tool, ToolError, ToolErrorKind,
118 ToolExecutionContext, ToolExecutionResult, ToolFuture, ToolRegistry, ToolRuntime,
119 ToolRuntimeHooks, parse_json_object, parse_json_value, required_string,
120 };
121}
122
123#[cfg(test)]
124mod tests {
125 use crate::{ProviderId, Role};
126
127 #[test]
128 fn fs_msg_macro_creates_expected_message() {
129 let message = crate::fs_msg!(user => "hello");
130 assert_eq!(message.role, Role::User);
131 assert_eq!(message.content, "hello");
132 }
133
134 #[test]
135 fn fs_messages_macro_builds_message_vector() {
136 let messages = crate::fs_messages![
137 system => "You are concise.",
138 user => "Summarize the repo",
139 ];
140
141 assert_eq!(messages.len(), 2);
142 assert_eq!(messages[0].role, Role::System);
143 assert_eq!(messages[1].role, Role::User);
144 }
145
146 #[test]
147 fn fs_session_macro_supports_provider_shorthand_and_prompt() {
148 let session = crate::fs_session!(
149 "session-1",
150 openai,
151 "gpt-4o-mini",
152 "You are concise and technical."
153 );
154
155 assert_eq!(session.provider, ProviderId::OpenAi);
156 assert_eq!(
157 session.system_prompt.as_deref(),
158 Some("You are concise and technical.")
159 );
160 }
161}