codetether_agent/session/helper/
request_state.rs1use std::path::Path;
2use std::sync::Arc;
3
4use crate::provider::{Provider, ToolDefinition};
5use crate::tool::ToolRegistry;
6
7use super::bootstrap::{inject_tool_prompt, list_tools_bootstrap_definition};
8use super::provider::{prefers_temperature_one, temperature_is_deprecated};
9use super::runtime::{is_interactive_tool, is_local_cuda_provider, local_cuda_light_system_prompt};
10
11pub(crate) struct ProviderStepState {
12 pub tool_registry: Arc<ToolRegistry>,
13 pub tool_definitions: Vec<ToolDefinition>,
14 pub advertised_tool_definitions: Vec<ToolDefinition>,
15 pub temperature: Option<f32>,
16 pub model_supports_tools: bool,
17 pub system_prompt: String,
18}
19
20pub(crate) fn build_provider_step_state(
21 provider: Arc<dyn Provider>,
22 selected_provider: &str,
23 model: &str,
24 cwd: &Path,
25) -> ProviderStepState {
26 let tool_registry = ToolRegistry::with_provider_arc(provider, model.to_string());
27 let tool_definitions: Vec<_> = tool_registry
28 .definitions()
29 .into_iter()
30 .filter(|tool| !is_interactive_tool(&tool.name))
31 .collect();
32
33 let temperature = if temperature_is_deprecated(model) {
34 None
35 } else if prefers_temperature_one(model) {
36 Some(1.0)
37 } else {
38 Some(0.7)
39 };
40
41 let model_supports_tools = !matches!(
42 selected_provider,
43 "gemini-web" | "local-cuda" | "local_cuda" | "localcuda"
44 );
45 let advertised_tool_definitions = if model_supports_tools {
46 tool_definitions.clone()
47 } else {
48 vec![list_tools_bootstrap_definition()]
49 };
50
51 let system_prompt = if is_local_cuda_provider(selected_provider) {
52 local_cuda_light_system_prompt()
53 } else {
54 crate::agent::builtin::build_system_prompt(cwd)
55 };
56 let system_prompt = if !model_supports_tools && !advertised_tool_definitions.is_empty() {
57 inject_tool_prompt(&system_prompt, &advertised_tool_definitions)
58 } else {
59 system_prompt
60 };
61
62 ProviderStepState {
63 tool_registry,
64 tool_definitions,
65 advertised_tool_definitions,
66 temperature,
67 model_supports_tools,
68 system_prompt,
69 }
70}