use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
pub struct AnthropicMessagesApiRequest {
pub model: String,
pub messages: Vec<AnthropicMessagesApiMessage>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "system")]
pub system_prompt: Option<String>,
#[serde(rename = "max_tokens")]
pub max_tokens_to_sample: usize,
#[serde(skip_serializing_if = "Option::is_none")]
pub stop_sequences: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub temperature: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub top_k: Option<usize>,
}
#[derive(Debug, PartialEq, Eq)]
pub enum AnthropicMessage {
User(String),
Assistant(String),
}
#[derive(Debug)]
pub enum AnthropicMessageRole {
User,
Assistant,
}
impl std::fmt::Display for AnthropicMessageRole {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
AnthropicMessageRole::User => write!(f, "User"),
AnthropicMessageRole::Assistant => write!(f, "Assistant"),
}
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct AnthropicMessagesApiMessage {
pub role: String,
pub content: String,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(untagged)]
pub enum AnthropicMessagesApiResponse {
Success(AnthropicMessagesApiResponseSuccess),
Error(AnthropicApiError),
}
#[derive(Debug, Serialize, Deserialize)]
pub struct AnthropicMessagesApiResponseSuccess {
#[serde(rename = "type")]
pub typ: String,
pub role: String,
pub model: String,
pub content: Vec<AnthropicMessagesApiResponseSuccessContent>,
pub stop_reason: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct AnthropicMessagesApiResponseSuccessContent {
#[serde(rename = "type")]
pub typ: String,
pub text: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct AnthropicApiError {
#[serde(rename = "type")]
pub typ: String,
pub error: AnthropicApiErrorBody,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct AnthropicApiErrorBody {
#[serde(rename = "type")]
pub typ: String,
pub message: String,
}