use serde::{Deserialize, Serialize};
use super::GenerateModel;
#[derive(Serialize, Default, Debug)]
pub struct ChatRequest<'input> {
pub message: &'input str,
#[serde(skip_serializing_if = "Option::is_none")]
pub model: Option<GenerateModel>,
#[serde(skip_serializing_if = "Option::is_none")]
pub prompt_truncation: Option<PromptTruncation>,
#[serde(skip_serializing_if = "Option::is_none")]
pub temperature: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub citation_quality: Option<CitationQuality>,
#[serde(skip_serializing_if = "Option::is_none")]
pub conversation_id: Option<String>,
}
#[derive(Serialize, Debug)]
pub(crate) struct ChatStreamRequest<'input> {
#[serde(flatten)]
pub request: &'input ChatRequest<'input>,
pub stream: bool,
}
#[derive(strum_macros::Display, Serialize, Debug)]
pub enum PromptTruncation {
#[strum(serialize = "AUTO")]
#[serde(rename = "AUTO")]
Auto,
#[strum(serialize = "OFF")]
#[serde(rename = "OFF")]
Off,
}
#[derive(strum_macros::Display, Serialize, Debug)]
pub enum CitationQuality {
#[strum(serialize = "accurate")]
#[serde(rename = "accurate")]
Accurate,
#[strum(serialize = "fast")]
#[serde(rename = "fast")]
Fast,
}
#[derive(Deserialize, Debug, PartialEq)]
pub struct ChatResponse {
pub generation_id: String,
pub response_id: String,
pub text: String,
}
#[derive(Deserialize, Debug, PartialEq)]
#[serde(tag = "event_type")]
pub enum ChatStreamResponse {
#[serde(rename = "stream-start")]
ChatStreamStart {
generation_id: String,
is_finished: bool,
},
#[serde(rename = "text-generation")]
ChatTextGeneration { is_finished: bool, text: String },
#[serde(rename = "stream-end")]
ChatStreamEnd {
finish_reason: String,
is_finished: bool,
response: ChatResponse,
},
}