use std::sync::atomic::AtomicBool;
use reqwest::Client;
use tokio::sync::mpsc::Sender;
use crate::cm_types::llm_config::LlmHttpAuthMode;
use crate::cm_llm::stream_host::StreamChatHost;
#[derive(Clone)]
pub struct LlmRetryingTransportOpts<'a> {
pub out: Option<&'a Sender<String>>,
pub no_stream: bool,
pub cancel: Option<&'a AtomicBool>,
}
impl<'a> LlmRetryingTransportOpts<'a> {
pub fn headless_no_stream() -> Self {
Self {
out: None,
no_stream: true,
cancel: None,
}
}
}
#[derive(Clone)]
pub struct StreamChatParams<'a> {
pub host: &'a dyn StreamChatHost,
pub client: &'a Client,
pub api_key: &'a str,
pub api_base: &'a str,
pub auth_mode: LlmHttpAuthMode,
pub out: Option<&'a Sender<String>>,
pub no_stream: bool,
pub cancel: Option<&'a AtomicBool>,
pub fold_system_into_user: bool,
pub preserve_reasoning_on_assistant_tool_calls: bool,
pub preserve_deepseek_thinking_reasoning_roundtrip: bool,
pub thinking_trace_enabled: bool,
pub chat_uploads_dir: Option<&'a std::path::Path>,
pub chat_workspace_root: Option<&'a std::path::Path>,
pub provider_usage_sink:
Option<&'a std::sync::Arc<std::sync::Mutex<Option<crate::cm_types::Usage>>>>,
}