gproxy_protocol/openai/generate_content/responses/items/actions/
web_search.rs1use serde::{Deserialize, Serialize};
2
3use crate::openai::common::Rest;
4
5#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
6#[serde(tag = "type")]
7#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
8pub enum WebSearchAction {
9 #[serde(rename = "search")]
10 Search {
11 #[serde(skip_serializing_if = "Option::is_none")]
12 queries: Option<Vec<String>>,
13 #[serde(skip_serializing_if = "Option::is_none")]
14 query: Option<String>,
15 #[serde(skip_serializing_if = "Option::is_none")]
16 sources: Option<Vec<WebSearchSource>>,
17 #[serde(default, flatten)]
18 rest: Rest,
19 },
20 #[serde(rename = "open_page")]
21 OpenPage {
22 #[serde(skip_serializing_if = "Option::is_none")]
23 url: Option<String>,
24 #[serde(default, flatten)]
25 rest: Rest,
26 },
27 #[serde(rename = "find_in_page")]
28 FindInPage {
29 pattern: String,
30 url: String,
31 #[serde(default, flatten)]
32 rest: Rest,
33 },
34}
35
36#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
37#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
38pub struct WebSearchSource {
39 #[serde(rename = "type")]
40 pub type_: WebSearchSourceType,
41 pub url: String,
42 #[serde(default, flatten)]
43 pub rest: Rest,
44}
45
46#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
47#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
48pub enum WebSearchSourceType {
49 #[serde(rename = "url")]
50 Url,
51}