Merge pull request #3 from leachy14/codex/refactor-handle_user_message-to-pass-references

Avoid cloning session data for chat completions
This commit is contained in:
Christopher 2025-08-25 00:56:23 -04:00 committed by GitHub
commit 1ac7914646
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 29 additions and 25 deletions

View File

@ -93,6 +93,7 @@ impl ChatCLI {
self.session.add_user_message(message.to_string());
self.session.save()?;
// Clone data needed for the API call before getting mutable client reference
let model = self.session.model.clone();
let messages = self.session.messages.clone();
@ -124,20 +125,22 @@ impl ChatCLI {
}) as StreamCallback
};
let client = self.get_client()?;
match client
let client = self.get_client()?.clone();
let response = client
.chat_completion_stream(
&model,
&messages,
enable_web_search,
enable_reasoning_summary,
&reasoning_effort,
enable_extended_thinking,
thinking_budget_tokens,
&self.session.model,
&self.session.messages,
self.session.enable_web_search,
self.session.enable_reasoning_summary,
&self.session.reasoning_effort,
self.session.enable_extended_thinking,
self.session.thinking_budget_tokens,
stream_callback,
)
.await
{
.await;
match response {
Ok(response) => {
println!(); // Add newline after streaming
self.session.add_assistant_message(response);
@ -153,20 +156,21 @@ impl ChatCLI {
} else {
// Fallback to non-streaming
let spinner = self.display.show_spinner("Thinking");
let client = self.get_client()?;
match client
let client = self.get_client()?.clone();
let response = client
.chat_completion(
&model,
&messages,
enable_web_search,
enable_reasoning_summary,
&reasoning_effort,
enable_extended_thinking,
thinking_budget_tokens,
&self.session.model,
&self.session.messages,
self.session.enable_web_search,
self.session.enable_reasoning_summary,
&self.session.reasoning_effort,
self.session.enable_extended_thinking,
self.session.thinking_budget_tokens,
)
.await
{
.await;
match response {
Ok(response) => {
spinner.finish("Done");
self.display.print_assistant_response(&response);

View File

@ -13,7 +13,7 @@ use super::{provider::Provider, session::Message};
pub type StreamCallback = Box<dyn Fn(&str) -> Pin<Box<dyn Future<Output = ()> + Send>> + Send + Sync>;
#[derive(Debug)]
#[derive(Debug, Clone)]
pub enum ChatClient {
OpenAI(OpenAIClient),
Anthropic(AnthropicClient),
@ -80,14 +80,14 @@ impl ChatClient {
}
}
#[derive(Debug)]
#[derive(Debug, Clone)]
pub struct OpenAIClient {
client: Client,
api_key: String,
base_url: String,
}
#[derive(Debug)]
#[derive(Debug, Clone)]
pub struct AnthropicClient {
client: Client,
api_key: String,