MCPcopy Create free account
hub / github.com/GCWing/BitFun / btw_ask_stream

Function btw_ask_stream

src/apps/desktop/src/api/btw_api.rs:76–150  ·  view source on GitHub ↗
(
    state: State<'_, AppState>,
    coordinator: State<'_, Arc<ConversationCoordinator>>,
    request: BtwAskStreamRequest,
)

Source from the content-addressed store, hash-verified

74
75#[tauri::command]
76pub 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 };

Callers

nothing calls this directly

Calls 8

trimMethod · 0.80
start_hidden_btw_turnMethod · 0.80
register_btw_turnMethod · 0.80
get_session_managerMethod · 0.80
is_emptyMethod · 0.45
cloneMethod · 0.45
get_sessionMethod · 0.45
removeMethod · 0.45

Tested by

no test coverage detected