Skip to main content

gproxy_protocol/openai/generate_content/responses/items/actions/
web_search.rs

1use 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}