mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-15 14:22:14 +00:00
FakeYou with backoff
This commit is contained in:
1 parent
5ca4dd3600
commit
b6be95144c
5 files changed
+36
-12
No files matched your search
Generated
+1
@@ -2628,6 +2628,7 @@ dependencies = [
|
||||
name = "fakeyou_client"
|
||||
version = "0.0.1"
|
||||
dependencies = [
|
||||
"backoff",
|
||||
"bytes 1.3.0",
|
||||
"chrono",
|
||||
"enums",
|
||||
|
||||
@@ -31,6 +31,7 @@ serde_json = "1.0.64"
|
||||
toml = "0.5.8"
|
||||
|
||||
# HTTP
|
||||
backoff = { version = "0.4.0", features = ["futures"] } # Exponential backoff retry
|
||||
reqwest = { version = "0.11", features = ["json", "cookies"] } # HTTP Client
|
||||
|
||||
[dev-dependencies]
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
use std::sync::Arc;
|
||||
use backoff::future::retry;
|
||||
use backoff::{ExponentialBackoff, ExponentialBackoffBuilder};
|
||||
use crate::api::tts_inference::{CreateTtsInferenceRequest, CreateTtsInferenceResponse, TtsInferenceJobStatus};
|
||||
use errors::AnyhowResult;
|
||||
use reqwest::{Client, ClientBuilder, RequestBuilder, Url};
|
||||
use reqwest::cookie::Jar;
|
||||
use crate::credentials::FakeYouCredentials;
|
||||
use errors::{anyhow, AnyhowResult};
|
||||
use reqwest::cookie::Jar;
|
||||
use reqwest::{Client, ClientBuilder, RequestBuilder, Url};
|
||||
use std::sync::Arc;
|
||||
use std::time::Duration;
|
||||
|
||||
const AUTHORIZATION_HEADER: &'static str = "Authorization";
|
||||
const SESSION_COOKIE_NAME : &'static str = "session";
|
||||
@@ -55,18 +58,37 @@ impl FakeYouApiClient {
|
||||
|
||||
// TODO: need to yield better, more "library"-appropriate errors.
|
||||
pub async fn create_tts_inference(&self, request: CreateTtsInferenceRequest<'_>) -> AnyhowResult<CreateTtsInferenceResponse> {
|
||||
let url = format!("https://{}/tts/inference", self.api_domain);
|
||||
let response = self.do_create_tts_inference(&request).await?;
|
||||
let response = serde_json::from_str(&response)?;
|
||||
Ok(response)
|
||||
}
|
||||
|
||||
pub async fn create_tts_inference_with_backoff(&self, request: CreateTtsInferenceRequest<'_>) -> AnyhowResult<CreateTtsInferenceResponse> {
|
||||
//let backoff = ExponentialBackoff::default();
|
||||
let mut backoff = ExponentialBackoffBuilder::new()
|
||||
.with_initial_interval(Duration::from_secs(3)) // Initial retry interval: 3 seconds
|
||||
.with_randomization_factor(0.5) // 50% below, 50% above interval
|
||||
.with_multiplier(2.0) // Double the wait
|
||||
.with_max_elapsed_time(Some(Duration::from_secs(60)))
|
||||
//.with_max_interval(Duration::from_secs(30))
|
||||
.build();
|
||||
let response = retry(backoff, || async {
|
||||
Ok(self.do_create_tts_inference(&request).await?)
|
||||
}).await?;
|
||||
|
||||
let response = serde_json::from_str(&response)?;
|
||||
Ok(response)
|
||||
}
|
||||
|
||||
pub async fn do_create_tts_inference(&self, request: &CreateTtsInferenceRequest<'_>) -> Result<String, reqwest::Error> {
|
||||
let url = format!("https://{}/tts/inference", self.api_domain);
|
||||
let response = self.add_credentials(self.client
|
||||
.post(url))
|
||||
.json(&request)
|
||||
.json(request)
|
||||
.send()
|
||||
.await?
|
||||
.text()
|
||||
.await?;
|
||||
|
||||
let response = serde_json::from_str(&response)?;
|
||||
|
||||
Ok(response)
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -21,7 +21,7 @@ pub async fn process_single_record(target: &TtsRenderTask, job_state: &Arc<JobSt
|
||||
|
||||
let result = job_state
|
||||
.fakeyou_client
|
||||
.create_tts_inference(CreateTtsInferenceRequest {
|
||||
.create_tts_inference_with_backoff(CreateTtsInferenceRequest {
|
||||
uuid_idempotency_token: &uuid_idempotency_token,
|
||||
tts_model_token: &tts_model_token,
|
||||
inference_text: &target.full_text,
|
||||
@@ -39,7 +39,7 @@ pub async fn process_single_record(target: &TtsRenderTask, job_state: &Arc<JobSt
|
||||
},
|
||||
Ok(res) => {
|
||||
if !res.success {
|
||||
error!("unknown problem in submitting to FakeYou");
|
||||
error!("unknown problem in submitting TTS request to FakeYou");
|
||||
|
||||
update_tts_render_task_unsuccessfully_submitted(UnsuccessfulArgs {
|
||||
tts_render_task_token: &target.token,
|
||||
|
||||
+1
-1
@@ -40,7 +40,7 @@ pub async fn process_single_record(target: &TtsRenderTask, job_state: &Arc<JobSt
|
||||
Ok(res) => {
|
||||
match res.state {
|
||||
None => {
|
||||
error!("unknown problem in submitting to FakeYou");
|
||||
error!("unknown problem in checking FakeYou TTS inference job status");
|
||||
// TODO: Errors
|
||||
//update_tts_render_task_unsuccessfully_submitted(UnsuccessfulArgs {
|
||||
// tts_render_task_token: &target.token,
|
||||
|
||||
Reference in new issue
Block a user