mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-04 17:38:10 +00:00
retry rate limit bypass; new speakers
This commit is contained in:
1 parent
08a94bccb7
commit
5f02cb0df9
8 files changed
+62
-8
No files matched your search
@@ -1,3 +1,17 @@
|
||||
[[speakers]]
|
||||
name = "Michael Rosen"
|
||||
slug = "michael-rosen"
|
||||
model_pipeline = "ArpabetGlowTtsMelgan"
|
||||
glow_tts = "glow-tts_michael-rosen_ljstx_2020.09.05_expr-1_chkpt-5682.torchjit"
|
||||
melgan = "melgan_manyvoice5.0_2020-07-23_12d5838_10760.torchjit"
|
||||
|
||||
[[speakers]]
|
||||
name = "Wizard (Death Battle!)"
|
||||
slug = "wizard"
|
||||
model_pipeline = "ArpabetGlowTtsMelgan"
|
||||
glow_tts = "glow-tts_wiz_ljstx_2020.09.05_expr-1_chkpt-4500.torchjit"
|
||||
melgan = "melgan_wiz_2020.09.07_d3b9647_17000.torchjit"
|
||||
|
||||
[[speakers]]
|
||||
name = "Tucker Carlson"
|
||||
slug = "tucker-carlson"
|
||||
|
||||
+16
-2
@@ -4,10 +4,24 @@ name = "Current Experiment"
|
||||
slug = "experiment"
|
||||
model_pipeline = "ArpabetGlowTtsMelgan"
|
||||
glow_tts = "glow_tts_single_speaker.torchjit"
|
||||
melgan = "melgan_manyvoice5.0_2020-07-23_12d5838_10760.torchjit"
|
||||
#melgan = "melgan_manyvoice5.0_2020-07-23_12d5838_10760.torchjit"
|
||||
#melgan = "melgan_manyvoice2.0_2020-07-08_12d5838_9330.torchjit"
|
||||
#melgan = "manyvoice1.0_2020-06-28_12d5838_6610.torchjit"
|
||||
#melgan = "melgan-vocodes.torchjit"
|
||||
melgan = "melgan-vocodes.torchjit"
|
||||
|
||||
[[speakers]]
|
||||
name = "Michael Rosen"
|
||||
slug = "michael-rosen"
|
||||
model_pipeline = "ArpabetGlowTtsMelgan"
|
||||
glow_tts = "glow-tts_michael-rosen_ljstx_2020.09.05_expr-1_chkpt-5682.torchjit"
|
||||
melgan = "melgan_manyvoice5.0_2020-07-23_12d5838_10760.torchjit"
|
||||
|
||||
[[speakers]]
|
||||
name = "Wizard (Death Battle!)"
|
||||
slug = "wizard"
|
||||
model_pipeline = "ArpabetGlowTtsMelgan"
|
||||
glow_tts = "glow-tts_wiz_ljstx_2020.09.05_expr-1_chkpt-4500.torchjit"
|
||||
melgan = "melgan_wiz_2020.09.07_d3b9647_17000.torchjit"
|
||||
|
||||
[[speakers]]
|
||||
name = "Tucker Carlson"
|
||||
|
||||
@@ -8,8 +8,19 @@ use std::fmt;
|
||||
pub struct SpeakRequest {
|
||||
/// Slug for the speaker
|
||||
pub speaker: String,
|
||||
|
||||
/// Raw text to be spoken
|
||||
pub text: String,
|
||||
|
||||
/// Retry attempt.
|
||||
/// The first request is "0", and all subsequent requests are incremented.
|
||||
/// Subsequent requests do not trigger the rate limiter.
|
||||
#[serde(default)]
|
||||
pub retry_attempt_number: u8,
|
||||
|
||||
/// Admin/debug requests get to skip the rate limiter.
|
||||
#[serde(default)]
|
||||
pub skip_rate_limiter: bool,
|
||||
}
|
||||
|
||||
#[derive(Serialize,Debug)]
|
||||
|
||||
@@ -35,7 +35,7 @@ pub async fn post_speak(request: HttpRequest,
|
||||
|
||||
let ip_address = get_request_ip(&request);
|
||||
|
||||
if let Err(_err) = app_state.rate_limiter.maybe_ratelimit_request(&ip_address, &request.headers()) {
|
||||
if let Err(_err) = app_state.rate_limiter.maybe_ratelimit_request(&ip_address, &request.headers(), &query) {
|
||||
return Err(SpeakError::rate_limited());
|
||||
}
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@ pub async fn post_speak_with_spectrogram(request: HttpRequest,
|
||||
|
||||
let ip_address = get_request_ip(&request);
|
||||
|
||||
if let Err(_err) = app_state.rate_limiter.maybe_ratelimit_request(&ip_address, &request.headers()) {
|
||||
if let Err(_err) = app_state.rate_limiter.maybe_ratelimit_request(&ip_address, &request.headers(), &query) {
|
||||
return Err(SpeakError::rate_limited());
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
use crate::rate_limiter::rate_limiter::{RateLimiter, RateLimiterError};
|
||||
use actix_web::HttpRequest;
|
||||
use actix_web::http::HeaderMap;
|
||||
use crate::endpoints::speak::api::SpeakRequest;
|
||||
|
||||
pub struct NoOpRateLimiter {}
|
||||
|
||||
impl RateLimiter for NoOpRateLimiter {
|
||||
fn maybe_ratelimit_request(&self, ip_address: &str, headers: &HeaderMap) -> Result<(), RateLimiterError> {
|
||||
fn maybe_ratelimit_request(&self, ip_address: &str, headers: &HeaderMap,
|
||||
speak_request: &SpeakRequest) -> Result<(), RateLimiterError> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
use actix_web::HttpRequest;
|
||||
use actix_web::http::header::HeaderMap;
|
||||
use crate::endpoints::speak::api::SpeakRequest;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum RateLimiterError {
|
||||
@@ -14,7 +15,8 @@ pub enum RateLimiterError {
|
||||
pub trait RateLimiter : Send + Sync {
|
||||
/// Potentially try to rate limit.
|
||||
/// Certain headers can be used to bypass.
|
||||
fn maybe_ratelimit_request(&self, ip_address: &str, headers: &HeaderMap) -> Result<(), RateLimiterError>;
|
||||
fn maybe_ratelimit_request(&self, ip_address: &str, headers: &HeaderMap,
|
||||
speak_request: &SpeakRequest) -> Result<(), RateLimiterError>;
|
||||
|
||||
/// Attempt to acquire the rate limiter.
|
||||
fn acquire(&self, rate_limit_key: &str) -> Result<(), RateLimiterError>;
|
||||
|
||||
@@ -8,6 +8,7 @@ use actix_web::HttpRequest;
|
||||
use crate::endpoints::helpers::ip_address::get_request_ip;
|
||||
use actix_web::http::header::HeaderMap;
|
||||
use actix_web::http::HeaderName;
|
||||
use crate::endpoints::speak::api::SpeakRequest;
|
||||
|
||||
const RATE_LIMIT_BYPASS_HEADER : &'static str = "limitless";
|
||||
|
||||
@@ -71,9 +72,19 @@ impl RedisRateLimiter {
|
||||
}
|
||||
|
||||
impl RateLimiter for RedisRateLimiter {
|
||||
fn maybe_ratelimit_request(&self, ip_address: &str, headers: &HeaderMap) -> Result<(), RateLimiterError> {
|
||||
fn maybe_ratelimit_request(&self, ip_address: &str, headers: &HeaderMap, speak_request: &SpeakRequest) -> Result<(), RateLimiterError> {
|
||||
if speak_request.skip_rate_limiter {
|
||||
info!("Bypassing rate limiter with request param.");
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
if headers.contains_key(&self.rate_limit_bypass_header) {
|
||||
info!("Bypassing rate limiter");
|
||||
info!("Bypassing rate limiter with admin debug header.");
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
if speak_request.retry_attempt_number > 0 {
|
||||
info!("Retries bypass the rate limiter.");
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user