zeroentropy_community/resources/
queries.rs1use crate::client::Client;
2use crate::error::Result;
3use crate::types::{
4 Filter, LatencyMode, TopDocumentsResponse, TopPagesResponse, TopSnippetsResponse,
5};
6use serde::Serialize;
7
8pub struct Queries<'a> {
10 client: &'a Client,
11}
12
13impl<'a> Queries<'a> {
14 pub(crate) fn new(client: &'a Client) -> Self {
15 Self { client }
16 }
17
18 pub async fn top_documents(
29 &self,
30 collection_name: impl Into<String>,
31 query: impl Into<String>,
32 k: u32,
33 filter: Option<Filter>,
34 include_metadata: Option<bool>,
35 latency_mode: Option<LatencyMode>,
36 reranker: Option<String>,
37 ) -> Result<TopDocumentsResponse> {
38 #[derive(Serialize)]
39 struct Request {
40 collection_name: String,
41 query: String,
42 k: u32,
43 #[serde(skip_serializing_if = "Option::is_none")]
44 filter: Option<Filter>,
45 #[serde(skip_serializing_if = "Option::is_none")]
46 include_metadata: Option<bool>,
47 #[serde(skip_serializing_if = "Option::is_none")]
48 latency_mode: Option<LatencyMode>,
49 #[serde(skip_serializing_if = "Option::is_none")]
50 reranker: Option<String>,
51 }
52
53 let body = Request {
54 collection_name: collection_name.into(),
55 query: query.into(),
56 k,
57 filter,
58 include_metadata,
59 latency_mode,
60 reranker,
61 };
62
63 self.client.post("/queries/top-documents", &body).await
64 }
65
66 pub async fn top_pages(
76 &self,
77 collection_name: impl Into<String>,
78 query: impl Into<String>,
79 k: u32,
80 filter: Option<Filter>,
81 include_content: Option<bool>,
82 latency_mode: Option<LatencyMode>,
83 ) -> Result<TopPagesResponse> {
84 #[derive(Serialize)]
85 struct Request {
86 collection_name: String,
87 query: String,
88 k: u32,
89 #[serde(skip_serializing_if = "Option::is_none")]
90 filter: Option<Filter>,
91 #[serde(skip_serializing_if = "Option::is_none")]
92 include_content: Option<bool>,
93 #[serde(skip_serializing_if = "Option::is_none")]
94 latency_mode: Option<LatencyMode>,
95 }
96
97 let body = Request {
98 collection_name: collection_name.into(),
99 query: query.into(),
100 k,
101 filter,
102 include_content,
103 latency_mode,
104 };
105
106 self.client.post("/queries/top-pages", &body).await
107 }
108
109 pub async fn top_snippets(
120 &self,
121 collection_name: impl Into<String>,
122 query: impl Into<String>,
123 k: u32,
124 filter: Option<Filter>,
125 include_document_metadata: Option<bool>,
126 precise_responses: Option<bool>,
127 reranker: Option<String>,
128 ) -> Result<TopSnippetsResponse> {
129 #[derive(Serialize)]
130 struct Request {
131 collection_name: String,
132 query: String,
133 k: u32,
134 #[serde(skip_serializing_if = "Option::is_none")]
135 filter: Option<Filter>,
136 #[serde(skip_serializing_if = "Option::is_none")]
137 include_document_metadata: Option<bool>,
138 #[serde(skip_serializing_if = "Option::is_none")]
139 precise_responses: Option<bool>,
140 #[serde(skip_serializing_if = "Option::is_none")]
141 reranker: Option<String>,
142 }
143
144 let body = Request {
145 collection_name: collection_name.into(),
146 query: query.into(),
147 k,
148 filter,
149 include_document_metadata,
150 precise_responses,
151 reranker,
152 };
153
154 self.client.post("/queries/top-snippets", &body).await
155 }
156}