mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 01:10:23 +08:00
feat: wire OpenAI chat session affinity
This commit is contained in:
@@ -138,6 +138,7 @@ pub(crate) async fn materialize_local_openai_chat_candidate_attempts(
|
|||||||
"openai:chat",
|
"openai:chat",
|
||||||
Some(&input.requested_model),
|
Some(&input.requested_model),
|
||||||
Some(&input.auth_snapshot),
|
Some(&input.auth_snapshot),
|
||||||
|
input.client_session_affinity.as_ref(),
|
||||||
input.required_capabilities.as_ref(),
|
input.required_capabilities.as_ref(),
|
||||||
sticky_session_token.as_deref(),
|
sticky_session_token.as_deref(),
|
||||||
input.request_auth_channel.as_deref(),
|
input.request_auth_channel.as_deref(),
|
||||||
@@ -217,6 +218,7 @@ pub(crate) async fn build_local_openai_chat_candidate_attempt_source<'a>(
|
|||||||
"openai:chat",
|
"openai:chat",
|
||||||
Some(&input.requested_model),
|
Some(&input.requested_model),
|
||||||
Some(&input.auth_snapshot),
|
Some(&input.auth_snapshot),
|
||||||
|
input.client_session_affinity.as_ref(),
|
||||||
input.required_capabilities.as_ref(),
|
input.required_capabilities.as_ref(),
|
||||||
sticky_session_token.as_deref(),
|
sticky_session_token.as_deref(),
|
||||||
input.request_auth_channel.as_deref(),
|
input.request_auth_channel.as_deref(),
|
||||||
@@ -294,6 +296,7 @@ pub(crate) async fn build_lazy_local_openai_chat_candidate_attempt_source<'a>(
|
|||||||
&input.requested_model,
|
&input.requested_model,
|
||||||
require_streaming,
|
require_streaming,
|
||||||
&input.auth_snapshot,
|
&input.auth_snapshot,
|
||||||
|
input.client_session_affinity.as_ref(),
|
||||||
input.required_capabilities.as_ref(),
|
input.required_capabilities.as_ref(),
|
||||||
sticky_session_token.as_deref(),
|
sticky_session_token.as_deref(),
|
||||||
input.request_auth_channel.as_deref(),
|
input.request_auth_channel.as_deref(),
|
||||||
|
|||||||
@@ -139,7 +139,7 @@ pub(crate) async fn maybe_build_sync_local_decision_payload(
|
|||||||
}
|
}
|
||||||
|
|
||||||
let Some(input) = resolve_local_openai_chat_decision_input(
|
let Some(input) = resolve_local_openai_chat_decision_input(
|
||||||
state, trace_id, decision, body_json, plan_kind, false,
|
state, parts, trace_id, decision, body_json, plan_kind, false,
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
else {
|
else {
|
||||||
@@ -205,7 +205,7 @@ pub(crate) async fn maybe_build_stream_local_decision_payload(
|
|||||||
}
|
}
|
||||||
|
|
||||||
let Some(input) = resolve_local_openai_chat_decision_input(
|
let Some(input) = resolve_local_openai_chat_decision_input(
|
||||||
state, trace_id, decision, body_json, plan_kind, false,
|
state, parts, trace_id, decision, body_json, plan_kind, false,
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
else {
|
else {
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ pub(crate) async fn list_local_openai_chat_candidates(
|
|||||||
require_streaming,
|
require_streaming,
|
||||||
input.required_capabilities.as_ref(),
|
input.required_capabilities.as_ref(),
|
||||||
&input.auth_snapshot,
|
&input.auth_snapshot,
|
||||||
|
input.client_session_affinity.as_ref(),
|
||||||
false,
|
false,
|
||||||
LocalCandidatePreselectionKeyMode::ProviderEndpointKeyModel,
|
LocalCandidatePreselectionKeyMode::ProviderEndpointKeyModel,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -7,10 +7,12 @@ use crate::ai_serving::planner::decision_input::{
|
|||||||
build_local_requested_model_decision_input, resolve_local_authenticated_decision_input,
|
build_local_requested_model_decision_input, resolve_local_authenticated_decision_input,
|
||||||
};
|
};
|
||||||
use crate::ai_serving::resolve_local_decision_execution_runtime_auth_context;
|
use crate::ai_serving::resolve_local_decision_execution_runtime_auth_context;
|
||||||
|
use crate::client_session_affinity::client_session_affinity_from_parts;
|
||||||
use crate::AppState;
|
use crate::AppState;
|
||||||
|
|
||||||
pub(crate) async fn resolve_local_openai_chat_decision_input(
|
pub(crate) async fn resolve_local_openai_chat_decision_input(
|
||||||
state: &AppState,
|
state: &AppState,
|
||||||
|
parts: &http::request::Parts,
|
||||||
trace_id: &str,
|
trace_id: &str,
|
||||||
decision: &GatewayControlDecision,
|
decision: &GatewayControlDecision,
|
||||||
body_json: &serde_json::Value,
|
body_json: &serde_json::Value,
|
||||||
@@ -106,5 +108,6 @@ pub(crate) async fn resolve_local_openai_chat_decision_input(
|
|||||||
|
|
||||||
let mut input = build_local_requested_model_decision_input(resolved_input, requested_model);
|
let mut input = build_local_requested_model_decision_input(resolved_input, requested_model);
|
||||||
input.request_auth_channel = decision.request_auth_channel.clone();
|
input.request_auth_channel = decision.request_auth_channel.clone();
|
||||||
|
input.client_session_affinity = client_session_affinity_from_parts(parts, Some(body_json));
|
||||||
Some(input)
|
Some(input)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ pub(crate) async fn build_local_openai_chat_stream_attempt_source<'a>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
let Some(input) = resolve_local_openai_chat_decision_input(
|
let Some(input) = resolve_local_openai_chat_decision_input(
|
||||||
state, trace_id, decision, body_json, plan_kind, true,
|
state, parts, trace_id, decision, body_json, plan_kind, true,
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
else {
|
else {
|
||||||
@@ -163,7 +163,7 @@ pub(crate) async fn build_local_openai_chat_stream_plan_and_reports(
|
|||||||
}
|
}
|
||||||
|
|
||||||
let Some(input) = resolve_local_openai_chat_decision_input(
|
let Some(input) = resolve_local_openai_chat_decision_input(
|
||||||
state, trace_id, decision, body_json, plan_kind, true,
|
state, parts, trace_id, decision, body_json, plan_kind, true,
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
else {
|
else {
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ pub(crate) async fn build_local_openai_chat_sync_attempt_source<'a>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
let Some(input) = resolve_local_openai_chat_decision_input(
|
let Some(input) = resolve_local_openai_chat_decision_input(
|
||||||
state, trace_id, decision, body_json, plan_kind, true,
|
state, parts, trace_id, decision, body_json, plan_kind, true,
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
else {
|
else {
|
||||||
@@ -176,7 +176,7 @@ pub(crate) async fn build_local_openai_chat_sync_plan_and_reports(
|
|||||||
}
|
}
|
||||||
|
|
||||||
let Some(input) = resolve_local_openai_chat_decision_input(
|
let Some(input) = resolve_local_openai_chat_decision_input(
|
||||||
state, trace_id, decision, body_json, plan_kind, true,
|
state, parts, trace_id, decision, body_json, plan_kind, true,
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
else {
|
else {
|
||||||
|
|||||||
Reference in New Issue
Block a user