(
state: State<'_, AppState>,
coordinator: State<'_, Arc<ConversationCoordinator>>,
request: BtwAskStreamRequest,
)
| 74 | |
| 75 | #[tauri::command] |
| 76 | pub async fn btw_ask_stream( |
| 77 | state: State<'_, AppState>, |
| 78 | coordinator: State<'_, Arc<ConversationCoordinator>>, |
| 79 | request: BtwAskStreamRequest, |
| 80 | ) -> Result<BtwAskStreamResponse, String> { |
| 81 | if request.request_id.trim().is_empty() { |
| 82 | return Err("requestId is required".to_string()); |
| 83 | } |
| 84 | if request.session_id.trim().is_empty() { |
| 85 | return Err("sessionId is required".to_string()); |
| 86 | } |
| 87 | if request.question.trim().is_empty() { |
| 88 | return Err("question is required".to_string()); |
| 89 | } |
| 90 | let child_session_id = request.child_session_id.trim(); |
| 91 | if child_session_id.is_empty() { |
| 92 | return Err("childSessionId is required".to_string()); |
| 93 | } |
| 94 | let child_session_id = child_session_id.to_string(); |
| 95 | let child_session_name = request.child_session_name.clone(); |
| 96 | let model_id = request.model_id.clone(); |
| 97 | let image_contexts = request.image_contexts; |
| 98 | |
| 99 | let turn_id = coordinator |
| 100 | .start_hidden_btw_turn( |
| 101 | &request.request_id, |
| 102 | &request.session_id, |
| 103 | &child_session_id, |
| 104 | child_session_name.as_deref(), |
| 105 | &request.question, |
| 106 | model_id.as_deref(), |
| 107 | image_contexts, |
| 108 | ) |
| 109 | .await |
| 110 | .map_err(|e| e.to_string())?; |
| 111 | |
| 112 | state |
| 113 | .side_question_runtime |
| 114 | .register_btw_turn( |
| 115 | request.request_id.clone(), |
| 116 | child_session_id.clone(), |
| 117 | turn_id.clone(), |
| 118 | ) |
| 119 | .await; |
| 120 | let runtime = state.side_question_runtime.clone(); |
| 121 | let request_id = request.request_id.clone(); |
| 122 | let child_session_id = child_session_id; |
| 123 | let turn_id = turn_id; |
| 124 | let coordinator = coordinator.inner().clone(); |
| 125 | tokio::spawn(async move { |
| 126 | loop { |
| 127 | let Some(session) = coordinator |
| 128 | .get_session_manager() |
| 129 | .get_session(&child_session_id) |
| 130 | else { |
| 131 | runtime.remove(&request_id).await; |
| 132 | break; |
| 133 | }; |
nothing calls this directly
no test coverage detected