use std::collections::HashMap;
use async_openai::types::chat::{CreateChatCompletionRequest, CreateChatCompletionResponse, CreateChatCompletionStreamResponse};
use async_openai::types::completions::{CreateCompletionRequest, CreateCompletionResponse};
use async_openai::types::embeddings::{CreateBase64EmbeddingResponse, CreateEmbeddingRequest, CreateEmbeddingResponse};
use async_openai::types::responses::{Response, ResponseStreamEvent};
use serde::{Deserialize, Serialize};
use serde_json::Value;
use thiserror::Error;
#[derive(Debug, Clone, PartialEq, Error)]
pub enum SseParseError {
#[error("Input does not contain valid SSE format or contains no data")]
InvalidFormat,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
#[allow(clippy::large_enum_variant)]
pub enum AiRequest {
ChatCompletions(CreateChatCompletionRequest),
Completions(CreateCompletionRequest),
Embeddings(CreateEmbeddingRequest),
Other(Value),
}
#[derive(Debug, Clone)]
pub struct ResponsesRequest {
pub model: Option<String>,
pub stream: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ParsedAIRequest {
pub headers: HashMap<String, String>,
pub request: AiRequest,
#[serde(skip)]
pub responses_request: Option<ResponsesRequest>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum ChatCompletionChunk {
Normal(CreateChatCompletionStreamResponse),
#[serde(rename = "[DONE]")]
Done,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum CompletionChunk {
Normal(CreateCompletionResponse), #[serde(rename = "[DONE]")]
Done,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
#[allow(clippy::large_enum_variant)]
pub enum AiResponse {
ChatCompletions(CreateChatCompletionResponse),
ChatCompletionsStream(Vec<ChatCompletionChunk>),
Completions(CreateCompletionResponse),
CompletionsStream(Vec<CompletionChunk>),
Embeddings(CreateEmbeddingResponse),
Base64Embeddings(CreateBase64EmbeddingResponse),
Responses(Response),
ResponsesStream(Vec<ResponseStreamEvent>),
Other(Value),
}