diff --git a/.claude/sessions/session-1775009583240.json b/.claude/sessions/session-1775009583240.json new file mode 100644 index 0000000..332894e --- /dev/null +++ b/.claude/sessions/session-1775009583240.json @@ -0,0 +1 @@ +{"messages":[{"blocks":[{"text":"Explain what Rust is in exactly 3 sentences.","type":"text"}],"role":"user"},{"blocks":[{"text":"Rust is a systems programming language focused on safety, speed, and concurrency, designed to provide memory safety without relying on a garbage collector. It achieves this through its ownership system, which enforces strict rules about how memory is accessed and shared at compile time, eliminating entire classes of bugs like data races and dangling pointers. Rust has gained widespread adoption for building performance-critical software such as operating systems, game engines, web browsers, and command-line tools.","type":"text"}],"role":"assistant","usage":{"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"input_tokens":2383,"output_tokens":102}}],"version":1} \ No newline at end of file diff --git a/.claude/sessions/session-1775009651284.json b/.claude/sessions/session-1775009651284.json new file mode 100644 index 0000000..3d1830e --- /dev/null +++ b/.claude/sessions/session-1775009651284.json @@ -0,0 +1 @@ +{"messages":[{"blocks":[{"text":"Say hello","type":"text"}],"role":"user"},{"blocks":[{"text":"Hello! 👋 How can I help you today?","type":"text"}],"role":"assistant","usage":{"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"input_tokens":2958,"output_tokens":16}}],"version":1} \ No newline at end of file diff --git a/rust/crates/api/src/client.rs b/rust/crates/api/src/client.rs index 3b137b4..7ef7e83 100644 --- a/rust/crates/api/src/client.rs +++ b/rust/crates/api/src/client.rs @@ -311,9 +311,6 @@ impl AnthropicClient { request: &MessageRequest, ) -> Result { let request_url = format!("{}/v1/messages", self.base_url.trim_end_matches('/')); - let resolved_base_url = self.base_url.trim_end_matches('/'); - eprintln!("[anthropic-client] resolved_base_url={resolved_base_url}"); - eprintln!("[anthropic-client] request_url={request_url}"); let request_builder = self .http .post(&request_url) @@ -321,16 +318,6 @@ impl AnthropicClient { .header("content-type", "application/json"); let mut request_builder = self.auth.apply(request_builder); - eprintln!( - "[anthropic-client] headers x-api-key={} authorization={} anthropic-version={ANTHROPIC_VERSION} content-type=application/json", - if self.auth.api_key().is_some() { - "[REDACTED]" - } else { - "" - }, - self.auth.masked_authorization_header() - ); - request_builder = request_builder.json(request); request_builder.send().await.map_err(ApiError::from) } diff --git a/rust/crates/rusty-claude-cli/src/main.rs b/rust/crates/rusty-claude-cli/src/main.rs index f1bb7b0..b5a4e57 100644 --- a/rust/crates/rusty-claude-cli/src/main.rs +++ b/rust/crates/rusty-claude-cli/src/main.rs @@ -35,7 +35,17 @@ use serde_json::json; use tools::{execute_tool, mvp_tool_specs, ToolSpec}; const DEFAULT_MODEL: &str = "claude-opus-4-6"; -const DEFAULT_MAX_TOKENS: u32 = 32; +fn max_tokens_for_model(model: &str) -> u32 { + if model.contains("opus") { + 32_000 + } else if model.contains("sonnet") { + 64_000 + } else if model.contains("haiku") { + 64_000 + } else { + 16_384 + } +} const DEFAULT_DATE: &str = "2026-03-31"; const DEFAULT_OAUTH_CALLBACK_PORT: u16 = 4545; const VERSION: &str = env!("CARGO_PKG_VERSION"); @@ -1046,7 +1056,7 @@ impl LiveCli { .with_base_url(api::read_base_url()); let request = MessageRequest { model: self.model.clone(), - max_tokens: DEFAULT_MAX_TOKENS, + max_tokens: max_tokens_for_model(&self.model), messages: vec![InputMessage { role: "user".to_string(), content: vec![InputContentBlock::Text { @@ -1970,7 +1980,7 @@ impl ApiClient for AnthropicRuntimeClient { fn stream(&mut self, request: ApiRequest) -> Result, RuntimeError> { let message_request = MessageRequest { model: self.model.clone(), - max_tokens: DEFAULT_MAX_TOKENS, + max_tokens: max_tokens_for_model(&self.model), messages: convert_messages(&request.messages), system: (!request.system_prompt.is_empty()).then(|| request.system_prompt.join("\n\n")), tools: self.enable_tools.then(|| {