(
State(state): State<Arc<ServerState>>,
Path(id): Path<String>,
Json(req): Json<PromptAsyncRequest>,
)
| 1989 | } |
| 1990 | |
| 1991 | async fn prompt_async( |
| 1992 | State(state): State<Arc<ServerState>>, |
| 1993 | Path(id): Path<String>, |
| 1994 | Json(req): Json<PromptAsyncRequest>, |
| 1995 | ) -> Result<Json<serde_json::Value>> { |
| 1996 | let mut sessions = state.sessions.lock().await; |
| 1997 | let session = sessions |
| 1998 | .get_mut(&id) |
| 1999 | .ok_or_else(|| ApiError::SessionNotFound(id.clone()))?; |
| 2000 | let message_text: String = req |
| 2001 | .message |
| 2002 | .clone() |
| 2003 | .or_else(|| { |
| 2004 | req.parts.as_ref().map(|p| { |
| 2005 | let s = text_from_parts(p); |
| 2006 | if s.is_empty() { None } else { Some(s) } |
| 2007 | }).flatten() |
| 2008 | }) |
| 2009 | .unwrap_or_default(); |
| 2010 | session.add_user_message(&message_text); |
| 2011 | let assistant = session.add_assistant_message(); |
| 2012 | let assistant_id = assistant.id.clone(); |
| 2013 | drop(sessions); |
| 2014 | persist_sessions_if_enabled(&state).await; |
| 2015 | |
| 2016 | Ok(Json(serde_json::json!({ |
| 2017 | "status": "queued", |
| 2018 | "message_id": assistant_id, |
| 2019 | "model": req.model, |
| 2020 | }))) |
| 2021 | } |
| 2022 | |
| 2023 | #[derive(Debug, Deserialize)] |
| 2024 | pub struct InitSessionRequest { |
nothing calls this directly
no test coverage detected