mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2026-05-21 17:52:16 +00:00
Fixed handling of query rejection
This commit is contained in:
parent
42af40d0e0
commit
381369fa40
@ -8,12 +8,22 @@ public sealed partial class RustService
|
|||||||
public async Task<string> ReadArbitraryFileData(string path, int maxChunks, bool extractImages = false)
|
public async Task<string> ReadArbitraryFileData(string path, int maxChunks, bool extractImages = false)
|
||||||
{
|
{
|
||||||
var streamId = Guid.NewGuid().ToString();
|
var streamId = Guid.NewGuid().ToString();
|
||||||
var requestUri = $"/retrieval/fs/extract?path={Uri.EscapeDataString(path)}&stream_id={streamId}&extract_images={extractImages}";
|
var extractImagesQueryValue = extractImages ? "true" : "false";
|
||||||
|
var requestUri = $"/retrieval/fs/extract?path={Uri.EscapeDataString(path)}&stream_id={streamId}&extract_images={extractImagesQueryValue}";
|
||||||
var request = new HttpRequestMessage(HttpMethod.Get, requestUri);
|
var request = new HttpRequestMessage(HttpMethod.Get, requestUri);
|
||||||
var response = await this.http.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
|
var response = await this.http.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
|
||||||
|
|
||||||
if (!response.IsSuccessStatusCode)
|
if (!response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
var responseBody = await response.Content.ReadAsStringAsync();
|
||||||
|
this.logger?.LogError(
|
||||||
|
"Failed to read arbitrary file data from Rust runtime. Status: {StatusCode}, reason: '{ReasonPhrase}', path: '{Path}', body: '{Body}'",
|
||||||
|
response.StatusCode,
|
||||||
|
response.ReasonPhrase,
|
||||||
|
path,
|
||||||
|
responseBody);
|
||||||
return string.Empty;
|
return string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
var resultBuilder = new StringBuilder();
|
var resultBuilder = new StringBuilder();
|
||||||
|
|
||||||
|
|||||||
@ -5,6 +5,7 @@ use crate::pandoc::PandocProcessBuilder;
|
|||||||
use crate::pdfium::PdfiumInit;
|
use crate::pdfium::PdfiumInit;
|
||||||
use async_stream::stream;
|
use async_stream::stream;
|
||||||
use axum::extract::Query;
|
use axum::extract::Query;
|
||||||
|
use axum::extract::rejection::QueryRejection;
|
||||||
use axum::response::sse::{Event, Sse};
|
use axum::response::sse::{Event, Sse};
|
||||||
use base64::{engine::general_purpose, Engine as _};
|
use base64::{engine::general_purpose, Engine as _};
|
||||||
use calamine::{open_workbook_auto, Reader};
|
use calamine::{open_workbook_auto, Reader};
|
||||||
@ -15,7 +16,7 @@ use pptx_to_md::{ImageHandlingMode, ParserConfig, PptxContainer};
|
|||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use std::pin::Pin;
|
use std::pin::Pin;
|
||||||
use log::{debug, error};
|
use log::{debug, error, warn};
|
||||||
use tokio::io::AsyncBufReadExt;
|
use tokio::io::AsyncBufReadExt;
|
||||||
use tokio::sync::mpsc;
|
use tokio::sync::mpsc;
|
||||||
use tokio_stream::wrappers::ReceiverStream;
|
use tokio_stream::wrappers::ReceiverStream;
|
||||||
@ -90,9 +91,20 @@ pub struct ExtractDataQuery {
|
|||||||
|
|
||||||
pub async fn extract_data(
|
pub async fn extract_data(
|
||||||
_token: APIToken,
|
_token: APIToken,
|
||||||
Query(query): Query<ExtractDataQuery>,
|
query: std::result::Result<Query<ExtractDataQuery>, QueryRejection>,
|
||||||
) -> Sse<impl Stream<Item = std::result::Result<Event, Infallible>>> {
|
) -> Sse<impl Stream<Item = std::result::Result<Event, Infallible>>> {
|
||||||
|
let query = match query {
|
||||||
|
Ok(Query(query)) => Ok(query),
|
||||||
|
Err(e) => {
|
||||||
|
let message = format!("Invalid query for '/retrieval/fs/extract': {e}");
|
||||||
|
warn!("{message}");
|
||||||
|
Err(message)
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
let stream = stream! {
|
let stream = stream! {
|
||||||
|
match query {
|
||||||
|
Ok(query) => {
|
||||||
let stream_result = stream_data(&query.path, query.extract_images).await;
|
let stream_result = stream_data(&query.path, query.extract_images).await;
|
||||||
let id_ref = &query.stream_id;
|
let id_ref = &query.stream_id;
|
||||||
|
|
||||||
@ -116,6 +128,12 @@ pub async fn extract_data(
|
|||||||
Err(e) => {
|
Err(e) => {
|
||||||
yield Ok(Event::default().json_data(format!("Error starting stream: {e}")).unwrap_or_else(|_| Event::default().data(format!("Error starting stream: {e}"))));
|
yield Ok(Event::default().json_data(format!("Error starting stream: {e}")).unwrap_or_else(|_| Event::default().data(format!("Error starting stream: {e}"))));
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
Err(e) => {
|
||||||
|
yield Ok(Event::default().json_data(format!("Error starting stream: {e}")).unwrap_or_else(|_| Event::default().data(format!("Error starting stream: {e}"))));
|
||||||
|
},
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user