#![cfg(feature = "blocking")]
use std::env;
fn get_responses_test_config() -> Option<(String, String)> {
let url = env::var("MODELRELAY_TEST_URL").ok()?;
let key = env::var("MODELRELAY_TEST_SECRET_KEY").ok()?;
Some((url, key))
}
#[test]
fn integration_responses_basic_request() {
let Some((base_url, secret_key)) = get_responses_test_config() else {
eprintln!("Skipping responses integration test: MODELRELAY_TEST_URL and MODELRELAY_TEST_SECRET_KEY not set");
return;
};
use modelrelay::{BlockingClient, BlockingConfig, ResponseBuilder};
let secret_key =
modelrelay::SecretKey::parse(secret_key).expect("invalid MODELRELAY_TEST_SECRET_KEY");
let client = BlockingClient::new(BlockingConfig {
api_key: Some(secret_key.into()),
base_url: Some(base_url),
..Default::default()
})
.expect("failed to create client");
let response = ResponseBuilder::new()
.model("gpt-4o-mini")
.user("Say 'hello' in exactly one word.")
.max_output_tokens(10)
.send_blocking(&client.responses())
.expect("LLM request failed");
assert!(!response.id.is_empty(), "response.id should be set");
assert!(
!response.output.is_empty(),
"response.output should not be empty"
);
assert!(
response.usage.input_tokens > 0,
"input_tokens should be > 0"
);
assert!(
response.usage.output_tokens > 0,
"output_tokens should be > 0"
);
assert!(
response.usage.total_tokens > 0,
"total_tokens should be > 0"
);
println!(
"Rust SDK: responses - id={}, usage={:?}",
response.id, response.usage
);
}
#[test]
fn integration_responses_response_has_required_fields() {
let Some((base_url, secret_key)) = get_responses_test_config() else {
eprintln!("Skipping responses integration test: MODELRELAY_TEST_URL and MODELRELAY_TEST_SECRET_KEY not set");
return;
};
use modelrelay::{BlockingClient, BlockingConfig, ResponseBuilder};
let secret_key =
modelrelay::SecretKey::parse(secret_key).expect("invalid MODELRELAY_TEST_SECRET_KEY");
let client = BlockingClient::new(BlockingConfig {
api_key: Some(secret_key.into()),
base_url: Some(base_url),
..Default::default()
})
.expect("failed to create client");
let response = ResponseBuilder::new()
.model("gpt-4o-mini")
.user("Count from 1 to 3.")
.max_output_tokens(20)
.send_blocking(&client.responses())
.expect("LLM request failed");
assert!(!response.id.is_empty(), "id is required");
assert!(!response.output.is_empty(), "output is required");
assert!(
response.usage.total_tokens >= response.usage.input_tokens + response.usage.output_tokens
|| response.usage.total_tokens
== response.usage.input_tokens + response.usage.output_tokens,
"usage.total_tokens should be sum of input + output"
);
println!("Rust SDK: Response structure verified against OpenAPI spec");
}