Proxy handler for inference requests (same as desktop)
(
State(state): State<AppState>,
method: Method,
headers: HeaderMap,
uri: Uri,
body: Body,
)
| 275 | |
| 276 | /// Proxy handler for inference requests (same as desktop) |
| 277 | async fn proxy_handler( |
| 278 | State(state): State<AppState>, |
| 279 | method: Method, |
| 280 | headers: HeaderMap, |
| 281 | uri: Uri, |
| 282 | body: Body, |
| 283 | ) -> Result<Response<Body>, StatusCode> { |
| 284 | let path = uri.path(); |
| 285 | let query = uri.query().unwrap_or(""); |
| 286 | |
| 287 | let target_url = { |
| 288 | let settings = state.app_handle.state::<AppSettings>(); |
| 289 | let ollama_url_guard = settings.ollama_url.lock().unwrap(); |
| 290 | |
| 291 | let base_url = ollama_url_guard |
| 292 | .as_deref() |
| 293 | .unwrap_or("http://127.0.0.1:11434"); |
| 294 | |
| 295 | format!("{}{}?{}", base_url, path, query) |
| 296 | }; |
| 297 | |
| 298 | eprintln!("Proxying {} request to: {}", method, target_url); |
| 299 | |
| 300 | let body_bytes = match body.collect().await { |
| 301 | Ok(collected) => collected.to_bytes(), |
| 302 | Err(e) => { |
| 303 | eprintln!("Failed to collect request body: {}", e); |
| 304 | return Err(StatusCode::INTERNAL_SERVER_ERROR); |
| 305 | } |
| 306 | }; |
| 307 | |
| 308 | let reqwest_request = state |
| 309 | .http_client |
| 310 | .request(method, &target_url) |
| 311 | .headers(headers) |
| 312 | .body(body_bytes); |
| 313 | |
| 314 | match reqwest_request.send().await { |
| 315 | Ok(upstream_response) => { |
| 316 | eprintln!("Proxy response status: {}", upstream_response.status()); |
| 317 | let mut response_builder = Response::builder() |
| 318 | .status(upstream_response.status()) |
| 319 | .version(upstream_response.version()); |
| 320 | |
| 321 | if let Some(headers) = response_builder.headers_mut() { |
| 322 | headers.extend(upstream_response.headers().clone()); |
| 323 | } |
| 324 | |
| 325 | let response_stream = upstream_response.bytes_stream(); |
| 326 | let response_body = Body::from_stream(response_stream); |
| 327 | |
| 328 | Ok(response_builder.body(response_body).unwrap()) |
| 329 | } |
| 330 | Err(e) => { |
| 331 | eprintln!("Proxy request to inference server failed: {}", e); |
| 332 | Err(StatusCode::BAD_GATEWAY) |
| 333 | } |
| 334 | } |
nothing calls this directly
no outgoing calls
no test coverage detected