Skip to main content

edgequake_sdk/types/
query.rs

1//! Query-related types.
2
3use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5
6/// Query mode.
7#[derive(Debug, Clone, Serialize, Deserialize, Default)]
8#[serde(rename_all = "lowercase")]
9pub enum QueryMode {
10    #[default]
11    Hybrid,
12    Local,
13    Global,
14    Naive,
15    Mix,
16}
17
18/// Query request.
19#[derive(Debug, Clone, Serialize)]
20pub struct QueryRequest {
21    pub query: String,
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub mode: Option<QueryMode>,
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub top_k: Option<u32>,
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub stream: Option<bool>,
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub only_need_context: Option<bool>,
30}
31
32/// Source reference in query response.
33#[derive(Debug, Clone, Deserialize, Serialize)]
34pub struct SourceReference {
35    #[serde(default)]
36    pub document_id: Option<String>,
37    #[serde(default)]
38    pub chunk_id: Option<String>,
39    #[serde(default)]
40    pub content: Option<String>,
41    #[serde(default)]
42    pub score: Option<f64>,
43    #[serde(default)]
44    pub metadata: Option<HashMap<String, serde_json::Value>>,
45    /// Original file path or title of the source document.
46    #[serde(default)]
47    pub file_path: Option<String>,
48}
49
50/// Query response.
51#[derive(Debug, Clone, Deserialize, Serialize)]
52pub struct QueryResponse {
53    #[serde(default)]
54    pub answer: Option<String>,
55    #[serde(default)]
56    pub sources: Vec<SourceReference>,
57    #[serde(default)]
58    pub mode: Option<String>,
59}
60
61/// Query stream chunk (SSE event data).
62#[derive(Debug, Clone, Deserialize)]
63pub struct QueryStreamChunk {
64    #[serde(default)]
65    pub chunk: Option<String>,
66    #[serde(default)]
67    pub done: Option<bool>,
68    #[serde(default)]
69    pub sources: Option<Vec<SourceReference>>,
70}