MCPcopy Create free account
hub / github.com/ChrisFeldmeier/OpenCodeRust / generate_agent_response

Function generate_agent_response

crates/opencode-cli/src/main.rs:5047–5120  ·  view source on GitHub ↗
(
    prompt: &str,
    model: Option<String>,
    agent_name: &str,
)

Source from the content-addressed store, hash-verified

5045}
5046
5047async fn generate_agent_response(
5048 prompt: &str,
5049 model: Option<String>,
5050 agent_name: &str,
5051) -> anyhow::Result<String> {
5052 let cwd = std::env::current_dir()?;
5053 let config = load_config(&cwd)?;
5054 let provider_registry = Arc::new(setup_providers(&config).await?);
5055 if provider_registry.list().is_empty() {
5056 anyhow::bail!("No providers configured for GitHub run.");
5057 }
5058
5059 let tool_registry = Arc::new(create_default_registry().await);
5060 let agent_registry = AgentRegistry::from_config(&config);
5061 let mut agent_info = agent_registry
5062 .get(agent_name)
5063 .cloned()
5064 .unwrap_or_else(AgentInfo::build);
5065
5066 let (provider, model_id) = parse_model_and_provider(model);
5067 if let Some(model_id) = model_id {
5068 let provider_id = provider.unwrap_or_else(|| {
5069 if model_id.starts_with("claude") {
5070 "anthropic".to_string()
5071 } else {
5072 "openai".to_string()
5073 }
5074 });
5075 agent_info = agent_info.with_model(model_id, provider_id);
5076 }
5077
5078 let mut executor = AgentExecutor::new(agent_info.clone(), provider_registry, tool_registry);
5079
5080 // Build model-specific system prompt + environment context (TS parity)
5081 {
5082 let (model_api_id, provider_id) = match &agent_info.model {
5083 Some(m) => (m.model_id.clone(), m.provider_id.clone()),
5084 None => (
5085 "claude-sonnet-4-20250514".to_string(),
5086 "anthropic".to_string(),
5087 ),
5088 };
5089 let cwd = std::env::current_dir().unwrap_or_default();
5090 let model_prompt = SystemPrompt::for_model(&model_api_id);
5091 let env_ctx = EnvironmentContext::from_current(
5092 &model_api_id,
5093 &provider_id,
5094 cwd.to_string_lossy().as_ref(),
5095 );
5096 let env_prompt = SystemPrompt::environment(&env_ctx);
5097 let full_prompt = format!("{}\n\n{}", model_prompt, env_prompt);
5098 executor = executor.with_system_prompt(full_prompt);
5099 }
5100
5101 let stream = executor.execute_streaming(prompt.to_string()).await?;
5102 let mut stream = std::pin::pin!(stream);
5103 let mut response = String::new();
5104

Callers 1

handle_github_commandFunction · 0.85

Calls 13

load_configFunction · 0.85
newFunction · 0.85
setup_providersFunction · 0.85
from_configFunction · 0.85
parse_model_and_providerFunction · 0.85
is_emptyMethod · 0.80
execute_streamingMethod · 0.80
create_default_registryFunction · 0.50
listMethod · 0.45
getMethod · 0.45
with_modelMethod · 0.45
cloneMethod · 0.45

Tested by

no test coverage detected