MCPcopy Index your code
hub / github.com/ChrisFeldmeier/OpenCodeRust / stream_message

Function stream_message

crates/opencode-server/src/routes.rs:1294–1620  ·  view source on GitHub ↗
(
    State(state): State<Arc<ServerState>>,
    Path(session_id): Path<String>,
    Json(req): Json<SendMessageRequest>,
)

Source from the content-addressed store, hash-verified

1292}
1293
1294async fn stream_message(
1295 State(state): State<Arc<ServerState>>,
1296 Path(session_id): Path<String>,
1297 Json(req): Json<SendMessageRequest>,
1298) -> std::result::Result<Sse<impl Stream<Item = std::result::Result<Event, Infallible>>>, ApiError>
1299{
1300 let config = CONFIG_STATE.read().await;
1301 let (provider, provider_id, model_id) =
1302 resolve_provider_and_model(&state, req.model.as_deref(), config.model.as_deref(), None)?;
1303 drop(config);
1304
1305 let (history, msg_id, selected_variant) = {
1306 let mut sessions = state.sessions.lock().await;
1307 let session = sessions
1308 .get_mut(&session_id)
1309 .ok_or_else(|| ApiError::SessionNotFound(session_id.clone()))?;
1310
1311 session.add_user_message(&req.content);
1312 let history = session.messages.clone();
1313 let selected_variant = req.variant.clone().or_else(|| {
1314 session
1315 .metadata
1316 .get("model_variant")
1317 .and_then(|value| value.as_str())
1318 .map(|value| value.to_string())
1319 });
1320 if let Some(variant) = req.variant.as_deref() {
1321 session
1322 .metadata
1323 .insert("model_variant".to_string(), serde_json::json!(variant));
1324 }
1325 session.metadata.insert(
1326 "model_provider".to_string(),
1327 serde_json::json!(provider_id.clone()),
1328 );
1329 session
1330 .metadata
1331 .insert("model_id".to_string(), serde_json::json!(model_id.clone()));
1332
1333 let assistant_msg = session.add_assistant_message();
1334 (history, assistant_msg.id.clone(), selected_variant)
1335 };
1336
1337 let provider_messages = session_messages_to_provider_messages(&history);
1338 let variant = selected_variant.clone();
1339 let temperature = temperature_for_model(&model_id).or(Some(0.7));
1340 let top_p = top_p_for_model(&model_id);
1341 let max_tokens = max_tokens_for_variant(4096, variant.as_deref());
1342 let request = opencode_provider::ChatRequest {
1343 model: model_id.clone(),
1344 messages: provider_messages,
1345 max_tokens: Some(max_tokens),
1346 temperature,
1347 top_p,
1348 system: None,
1349 tools: None,
1350 stream: Some(true),
1351 variant,

Callers

nothing calls this directly

Calls 15

temperature_for_modelFunction · 0.85
top_p_for_modelFunction · 0.85
max_tokens_for_variantFunction · 0.85
send_sse_eventFunction · 0.85
newFunction · 0.85
readMethod · 0.80
is_emptyMethod · 0.80
get_message_mutMethod · 0.80
add_textMethod · 0.80

Tested by

no test coverage detected