Kill reqwest — minimal HTTP client on raw hyper + tokio-rustls
New src/agent/api/http.rs: ~240 lines, supports GET/POST, JSON/form bodies, SSE streaming via chunk(), TLS via rustls. No tracing dep. Removes reqwest from the main crate and telegram channel crate. Cargo.lock drops ~900 lines of transitive dependencies. tracing now only pulled in by tui-markdown. Co-Authored-By: Proof of Concept <poc@bcachefs.org>
This commit is contained in:
parent
a421c3c9f3
commit
1cf4f504c0
9 changed files with 360 additions and 915 deletions
|
|
@ -76,35 +76,29 @@ struct ScoreResponse {
|
|||
scores: Vec<ScoreResult>,
|
||||
}
|
||||
|
||||
fn http_client() -> reqwest::Client {
|
||||
reqwest::Client::builder()
|
||||
fn http_client() -> crate::agent::api::http::HttpClient {
|
||||
crate::agent::api::http::HttpClient::builder()
|
||||
.timeout(SCORE_TIMEOUT)
|
||||
.pool_max_idle_per_host(2)
|
||||
.build()
|
||||
.unwrap_or_default()
|
||||
}
|
||||
|
||||
async fn call_score(
|
||||
http: &reqwest::Client,
|
||||
http: &crate::agent::api::http::HttpClient,
|
||||
client: &ApiClient,
|
||||
messages: &[serde_json::Value],
|
||||
) -> anyhow::Result<Vec<ScoreResult>> {
|
||||
let url = format!("{}/score", client.base_url());
|
||||
let auth = format!("Bearer {}", client.api_key());
|
||||
let body = serde_json::json!({
|
||||
"model": client.model,
|
||||
"messages": messages,
|
||||
"logprobs": 1,
|
||||
});
|
||||
let response = http
|
||||
.post(format!("{}/score", client.base_url()))
|
||||
.header("Content-Type", "application/json")
|
||||
.header("Authorization", format!("Bearer {}", client.api_key()))
|
||||
.json(&serde_json::json!({
|
||||
"model": client.model,
|
||||
"messages": messages,
|
||||
"logprobs": 1,
|
||||
}))
|
||||
.send()
|
||||
.await
|
||||
.map_err(|e| if e.is_timeout() {
|
||||
anyhow::anyhow!("score request timed out after {}s", SCORE_TIMEOUT.as_secs())
|
||||
} else {
|
||||
anyhow::anyhow!("score request failed: {}", e)
|
||||
})?;
|
||||
.send_json("POST", &url, &[
|
||||
("authorization", &auth),
|
||||
], &body)
|
||||
.await?;
|
||||
|
||||
let status = response.status();
|
||||
let body: serde_json::Value = response.json().await?;
|
||||
|
|
@ -135,7 +129,7 @@ fn divergence(baseline: &[ScoreResult], without: &[ScoreResult]) -> Vec<f64> {
|
|||
|
||||
/// Score two message sets and return total divergence.
|
||||
async fn score_divergence(
|
||||
http: &reqwest::Client,
|
||||
http: &crate::agent::api::http::HttpClient,
|
||||
client: &ApiClient,
|
||||
context: &ContextState,
|
||||
range: std::ops::Range<usize>,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue