(
State(state): State<Arc<ServerState>>,
Path(id): Path<String>,
Json(req): Json<SessionPromptRequest>,
)
| 1630 | } |
| 1631 | |
| 1632 | async fn session_prompt( |
| 1633 | State(state): State<Arc<ServerState>>, |
| 1634 | Path(id): Path<String>, |
| 1635 | Json(req): Json<SessionPromptRequest>, |
| 1636 | ) -> Result<Json<serde_json::Value>> { |
| 1637 | let prompt_text = if let Some(message) = req.message.as_deref() { |
| 1638 | message.to_string() |
| 1639 | } else if let Some(command) = req.command.as_deref() { |
| 1640 | req.arguments |
| 1641 | .as_deref() |
| 1642 | .map(|args| format!("/{command} {args}")) |
| 1643 | .unwrap_or_else(|| format!("/{command}")) |
| 1644 | } else { |
| 1645 | return Err(ApiError::BadRequest( |
| 1646 | "Either `message` or `command` must be provided".to_string(), |
| 1647 | )); |
| 1648 | }; |
| 1649 | |
| 1650 | { |
| 1651 | let sessions = state.sessions.lock().await; |
| 1652 | if sessions.get(&id).is_none() { |
| 1653 | return Err(ApiError::SessionNotFound(id)); |
| 1654 | } |
| 1655 | } |
| 1656 | |
| 1657 | let config = CONFIG_STATE.read().await; |
| 1658 | let (provider, provider_id, model_id) = |
| 1659 | resolve_provider_and_model(&state, req.model.as_deref(), config.model.as_deref(), None)?; |
| 1660 | drop(config); |
| 1661 | |
| 1662 | let task_state = state.clone(); |
| 1663 | let session_id = id.clone(); |
| 1664 | let task_variant = req.variant.clone(); |
| 1665 | let task_agent = req.agent.clone(); |
| 1666 | let task_model = model_id.clone(); |
| 1667 | let task_provider = provider_id.clone(); |
| 1668 | tokio::spawn(async move { |
| 1669 | let mut session = { |
| 1670 | let sessions = task_state.sessions.lock().await; |
| 1671 | let Some(session) = sessions.get(&session_id).cloned() else { |
| 1672 | return; |
| 1673 | }; |
| 1674 | session |
| 1675 | }; |
| 1676 | set_session_run_status(&task_state, &session_id, SessionRunStatus::Busy).await; |
| 1677 | |
| 1678 | if let Some(variant) = task_variant.as_deref() { |
| 1679 | session |
| 1680 | .metadata |
| 1681 | .insert("model_variant".to_string(), serde_json::json!(variant)); |
| 1682 | } else { |
| 1683 | session.metadata.remove("model_variant"); |
| 1684 | } |
| 1685 | session.metadata.insert( |
| 1686 | "model_provider".to_string(), |
| 1687 | serde_json::json!(&task_provider), |
| 1688 | ); |
| 1689 | session |
nothing calls this directly
no test coverage detected