mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 09:20:22 +08:00
feat: 扩展 cache creation token 细分统计与 effective_input_tokens 计费逻辑
- 新增 cache_creation_ephemeral_5m/1h_input_tokens 字段,区分不同 TTL 的缓存写入 token - 引入 effective_input_tokens(扣除 cache read 后的有效输入 token),暴露给 usage 接口 - billing 规则生成器支持 5m/1h ephemeral cache 独立定价与分级计费 - usage_mapper 增加 Claude/Anthropic 格式映射,修复 OpenAI responses 格式字段兼容性 - 迁移逻辑增强:支持 checksum 容错、applied/pending 数量日志、逐步执行信息输出 - executor 抽离 LocalExecutionRequestOutcome 类型,统一 sync/stream 路径返回语义 - provider-transport auth 层新增 complete passthrough headers 构建逻辑 - 前端 usage 类型全面补充 effective_input_tokens、cache_creation_tokens、total_input_context 字段
This commit is contained in:
@@ -3,7 +3,9 @@ use axum::http::{HeaderName, HeaderValue, Response};
|
||||
|
||||
use crate::constants::CONTROL_EXECUTED_HEADER;
|
||||
use crate::control::GatewayControlDecision;
|
||||
use crate::executor::{maybe_execute_stream_request, maybe_execute_sync_request};
|
||||
use crate::executor::{
|
||||
maybe_execute_stream_request, maybe_execute_sync_request, LocalExecutionRequestOutcome,
|
||||
};
|
||||
use crate::{AppState, GatewayError};
|
||||
|
||||
use super::resolve_execution_runtime_auth_context;
|
||||
@@ -19,9 +21,9 @@ pub(crate) async fn maybe_execute_via_control(
|
||||
trace_id: &str,
|
||||
decision: Option<&GatewayControlDecision>,
|
||||
require_stream: bool,
|
||||
) -> Result<Option<Response<Body>>, GatewayError> {
|
||||
) -> Result<LocalExecutionRequestOutcome, GatewayError> {
|
||||
let Some(decision) = decision else {
|
||||
return Ok(None);
|
||||
return Ok(LocalExecutionRequestOutcome::NoPath);
|
||||
};
|
||||
|
||||
let mut local_decision = decision.clone();
|
||||
@@ -46,7 +48,15 @@ pub(crate) async fn maybe_execute_via_control(
|
||||
.await?
|
||||
};
|
||||
|
||||
Ok(response.map(mark_control_executed))
|
||||
Ok(match response {
|
||||
LocalExecutionRequestOutcome::Responded(response) => {
|
||||
LocalExecutionRequestOutcome::Responded(mark_control_executed(response))
|
||||
}
|
||||
LocalExecutionRequestOutcome::Exhausted(outcome) => {
|
||||
LocalExecutionRequestOutcome::Exhausted(outcome)
|
||||
}
|
||||
LocalExecutionRequestOutcome::NoPath => LocalExecutionRequestOutcome::NoPath,
|
||||
})
|
||||
}
|
||||
|
||||
fn mark_control_executed(mut response: Response<Body>) -> Response<Body> {
|
||||
|
||||
Reference in New Issue
Block a user