feat: more models, make decisions a wrapper for system one
This commit is contained in:
@@ -32,6 +32,7 @@ pub struct V1SystemOnePath;
|
||||
)]
|
||||
#[strum(serialize_all = "lowercase")]
|
||||
pub enum Shortcut {
|
||||
S,
|
||||
M,
|
||||
}
|
||||
|
||||
@@ -41,14 +42,26 @@ impl Shortcut {
|
||||
use Shortcut as S;
|
||||
|
||||
match self {
|
||||
S::S => {
|
||||
vec![
|
||||
(P::LiquidAi, "d1:free".into()),
|
||||
(P::CloudflareWorkersAi, "clef-omni".into()),
|
||||
(P::CloudflareWorkersAi, "clef-flash".into()),
|
||||
(P::OpenRouter, "respan/span-01-lite:free".into()),
|
||||
(P::OpenRouter, "respan/span-01-lite".into()),
|
||||
]
|
||||
}
|
||||
S::M => {
|
||||
vec![(P::LiquidAi, "d1:free".into())]
|
||||
vec![
|
||||
(P::CloudflareWorkersAi, "clef".into()),
|
||||
(P::OpenRouter, "inception/mercury-decide:free".into()),
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct SystemOneResponse(openai::system_one::SystemOneResponse<String>);
|
||||
pub struct SystemOneResponse(pub openai::system_one::SystemOneResponse<String>);
|
||||
|
||||
impl IntoResponse for SystemOneResponse {
|
||||
fn into_response(self) -> Response {
|
||||
@@ -94,7 +107,7 @@ pub async fn create_system_one(
|
||||
}| {
|
||||
Upstream::builder()
|
||||
.url(
|
||||
format!("https://api.cloudflare.com/client/v4/accounts/{account_id}/ai/v1/systemone")
|
||||
format!("https://api.cloudflare.com/client/v4/accounts/{account_id}/run/@cf/cloudflare/{model}")
|
||||
.parse()
|
||||
.expect("TODO"),
|
||||
)
|
||||
@@ -147,15 +160,22 @@ pub async fn create_system_one(
|
||||
|
||||
tracing::info!(?model, ?upstream);
|
||||
|
||||
let openai::system_one::SystemOneRequest { model: _shortcut, state, questions } = request.clone();
|
||||
let openai::system_one::SystemOneRequest {
|
||||
model: _shortcut,
|
||||
state,
|
||||
files,
|
||||
images,
|
||||
questions,
|
||||
} = request.clone();
|
||||
|
||||
let request = openai::system_one::SystemOneRequest {
|
||||
model,
|
||||
state,
|
||||
files,
|
||||
images,
|
||||
questions,
|
||||
};
|
||||
|
||||
|
||||
let client = reqwest::Client::builder()
|
||||
.tls_certs_only(
|
||||
webpki_root_certs::TLS_SERVER_ROOT_CERTS
|
||||
@@ -165,9 +185,7 @@ pub async fn create_system_one(
|
||||
.build()
|
||||
.expect("TODO");
|
||||
|
||||
let mut upstream_request = client
|
||||
.post(upstream.url)
|
||||
.json(&request);
|
||||
let mut upstream_request = client.post(upstream.url).json(&request);
|
||||
|
||||
if let Some(api_key) = upstream.api_key {
|
||||
let authorization =
|
||||
@@ -200,16 +218,15 @@ pub async fn create_system_one(
|
||||
continue;
|
||||
};
|
||||
|
||||
|
||||
let response = match upstream_response.json().await {
|
||||
Ok(response) => response,
|
||||
Err(json_error) => {
|
||||
tracing::error!(?json_error);
|
||||
continue;
|
||||
}
|
||||
};
|
||||
let response = match upstream_response.json().await {
|
||||
Ok(response) => response,
|
||||
Err(json_error) => {
|
||||
tracing::error!(?json_error);
|
||||
continue;
|
||||
}
|
||||
};
|
||||
|
||||
return Ok(SystemOneResponse(response));
|
||||
return Ok(SystemOneResponse(response));
|
||||
}
|
||||
Err(SystemOneError::NoneSucceeded)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user