use serde_json::Value;
use crate::{
adapter::{NativeToolDefinition, ToolDefinition},
message::{ModelMessage, ModelResponse},
transport::MaxTokensParameter,
ModelError, ModelResponseStreamEvent, ModelSettings,
};
mod request;
mod response;
mod stream;
pub use stream::OpenAiResponsesStreamParser;
pub struct OpenAiResponsesAdapter;
impl OpenAiResponsesAdapter {
pub fn build_request(
model: &str,
messages: &[ModelMessage],
settings: Option<&ModelSettings>,
tools: &[ToolDefinition],
native_tools: &[NativeToolDefinition],
) -> Result<Value, ModelError> {
Self::build_request_with_options(
model,
messages,
settings,
tools,
native_tools,
MaxTokensParameter::Default,
)
}
pub fn build_request_with_options(
model: &str,
messages: &[ModelMessage],
settings: Option<&ModelSettings>,
tools: &[ToolDefinition],
native_tools: &[NativeToolDefinition],
max_tokens_parameter: MaxTokensParameter,
) -> Result<Value, ModelError> {
request::build_request_with_options(
model,
messages,
settings,
tools,
native_tools,
max_tokens_parameter,
)
}
pub fn parse_response(value: &Value) -> Result<ModelResponse, ModelError> {
response::parse_response(value)
}
pub fn parse_stream_events(
events: &[Value],
) -> Result<Vec<ModelResponseStreamEvent>, ModelError> {
stream::parse_stream_events(events)
}
pub(crate) fn response_replay_items(
response: &ModelResponse,
settings: Option<&ModelSettings>,
) -> Vec<Value> {
request::response_replay_items(response, settings)
}
}
#[cfg(test)]
mod tests;