mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 17:30:23 +08:00
feat: 引入 Rust executor/gateway sidecar 及 Python 侧双后端适配
- 新增 Rust workspace crates: aether-contracts, aether-executor, aether-gateway - aether-executor: 支持 Unix Socket/TCP 双传输模式,处理同步/流式上游请求 - aether-gateway: 作为本地主入口代理,集成 /api/internal/gateway/resolve 认证预解析 - Python 侧新增 ExecutionPlan 契约和 RustExecutorClient,各 handler 支持 executor_backend=rust 时将可序列化请求转发给 Rust executor 执行 - 重构 dev.sh 支持 executor/gateway 进程编排与生命周期管理 - 新增 internal gateway 路由,提供 resolve/passthrough 端点 - handler 层(chat/cli/video/endpoint_checker 等)全面适配 Rust executor 回退逻辑 - pipeline 层支持 trusted auth context 跳过重复认证 - 新增 Rust CI workflow 及对应测试用例
This commit is contained in:
58
crates/aether-contracts/src/frame.rs
Normal file
58
crates/aether-contracts/src/frame.rs
Normal file
@@ -0,0 +1,58 @@
|
||||
use std::collections::BTreeMap;
|
||||
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serde_json::Value;
|
||||
|
||||
use crate::{ExecutionError, ExecutionTelemetry};
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum StreamFrameType {
|
||||
Headers,
|
||||
Data,
|
||||
Error,
|
||||
Telemetry,
|
||||
Eof,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
|
||||
#[serde(tag = "kind", rename_all = "snake_case")]
|
||||
pub enum StreamFramePayload {
|
||||
Headers {
|
||||
status_code: u16,
|
||||
#[serde(default)]
|
||||
headers: BTreeMap<String, String>,
|
||||
},
|
||||
Data {
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
chunk_b64: Option<String>,
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
text: Option<String>,
|
||||
},
|
||||
Error {
|
||||
error: ExecutionError,
|
||||
},
|
||||
Telemetry {
|
||||
telemetry: ExecutionTelemetry,
|
||||
},
|
||||
Eof {
|
||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||
summary: Option<Value>,
|
||||
},
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
|
||||
pub struct StreamFrame {
|
||||
#[serde(rename = "type")]
|
||||
pub frame_type: StreamFrameType,
|
||||
pub payload: StreamFramePayload,
|
||||
}
|
||||
|
||||
impl StreamFrame {
|
||||
pub fn eof() -> Self {
|
||||
Self {
|
||||
frame_type: StreamFrameType::Eof,
|
||||
payload: StreamFramePayload::Eof { summary: None },
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user