#src/lux — Lucent IR 核心包(导航索引)

    MoonBit 目录 = 包:本目录是一个包,不能再建子文件夹(子文件夹 = 子包, 会破坏 inherent methods 与包环约束,见 docs/report/lux-split-feasibility.md)。 包内组织靠文件名前缀 + 职责分区,本文件为阅读导航。

    #文件地图

    #1. 类型与构造(先读这里)

    文件内容
    types.mbt全部 IR 类型定义(Lucent* struct/enum,含诊断 Conversion* 类型)
    builders.mbt构造器(LucentX::new/default/create + with_* 副本方法)
    helpers.mbt跨包辅助(lucent_* 提取函数、to_string/from_string 映射)
    stream.mbt流事件类型(LucentStreamEvent / BlockAccumulator)

    #2. 序列化(IR → JSON)

    文件内容
    serialize_meta.mbt元数据序列化
    serialize_primitives.mbt基础类型 to_json
    serialize_request.mbtLucentRequest → JSON
    serialize_response.mbtLucentResponse → JSON
    serialize_stream.mbt流事件 → JSON
    diagnostics_json.mbtConversionStatus/Diagnostic 的 JSON 编解码

    #3. 反序列化(JSON → IR)

    文件内容
    deserialize_helpers.mbtget_/parse_ 共享辅助
    deserialize_primitives.mbt基础类型 from_json(Modality~AgentAction)
    deserialize_content.mbtContent/Message/ConversationItem
    deserialize_tools.mbtTool/ToolChoice/StructuredOutput
    deserialize_options.mbtOptions/ReasoningConfig/Capabilities
    deserialize_request.mbt / deserialize_response.mbt / deserialize_stream.mbt对应 to_json 的 from_json

    #4. 测试

    • *_wbtest.mbt:白盒测试(留包内,MoonBit 约束)
    • test/:黑盒测试子包(public API 校验)

    #依赖方向

    types.mbt → builders/helpers → serialize_*/deserialize_*(单向; helpers 提供 to_string/from_string 给编解码复用)。

    #约定

    • 新增类型 → types.mbt;新增构造器 → builders.mbt;新增辅助 → helpers.mbt
    • 序列化与反序列化成对修改(serialize_X ↔ deserialize_X 一一对应)
    • 遵循 docs/rules/naming-conventions.md

    AccumulatedResponse

    pub struct AccumulatedResponse {
    response : LucentResponse
    annotations : Array[LucentAnnotation]
    native_events : Array[LucentStreamEvent]
    agent_actions : Array[LucentAgentAction]
    diagnostics : Array[ConversionDiagnostic]
    } derive(Eq,
    Debug
    )

    AccumulatedResponse — 累加器产物:response + 未进入 response 的辅助信息

    AccumulatedResponse::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    BlockAccumulator

    pub(all) struct BlockAccumulator {
    block_types : Array[LucentBlockType]
    block_texts : Array[StringBuilder]
    block_thinking : Array[StringBuilder]
    block_signatures : Array[StringBuilder]
    block_tool_ids : Array[String]
    block_tool_names : Array[String]
    }

    BlockAccumulator — 块状态跟踪器

    管理流式解码中的块生命周期:按 block_index 跟踪类型、文本、 thinking、签名、工具调用信息。提供 ensure/flush/discard 操作。

    BlockAccumulator::discard_block

    fn BlockAccumulator::discard_block(self : BlockAccumulator, idx : Int) -> Unit

    丢弃该块已累加内容(Gemini 全量帧覆盖语义),保留类型信息

    BlockAccumulator::ensure_block

    fn BlockAccumulator::ensure_block(self : BlockAccumulator, idx : Int) -> Unit

    确保 block_index 在跟踪数组中占位

    BlockAccumulator::flush_block

    fn BlockAccumulator::flush_block(self : BlockAccumulator, idx : Int, content : Array[LucentContent], reasoning : LucentThinking?) -> LucentThinking?

    按类型把已累加内容刷入 content 数组

    BlockAccumulator::flush_remaining

    fn BlockAccumulator::flush_remaining(self : BlockAccumulator, content : Array[LucentContent], reasoning : LucentThinking?) -> LucentThinking?

    流结束时 flush 所有未闭合的块

    BlockAccumulator::new

    创建空的 BlockAccumulator

    ConversationSnapshot

    pub struct ConversationSnapshot {
    response_id : String
    request : LucentRequest
    response_text : String?
    } derive(Eq,
    Debug
    )

    ConversationSnapshot — 中间件本地会话存储单元(T8)

    背景:Responses 的 previous_response_id 是有状态续接——客户端第二轮 只带新 input + 上一轮 response id,历史在服务端。跨端转到无状态 端点(chat/messages/gemini)时必须由中间件本地保存并还原历史。 本类型是存储单元:某次 response_id 对应的请求上下文(还原所需) 与可选响应文本(审计/调试用)。不参与 wire 编解码; to_json/from_json 供宿主持久化(IR 提案见 .agent-workplace/docs/report/ir-proposal-previous-response-id.md)。

    ConversationSnapshot::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    ConversationSnapshot::from_json

    fn ConversationSnapshot::from_json(jv : Json) -> Result[ConversationSnapshot, String]

    ConversationSnapshot 反序列化(T8;缺失字段软失败为 Err 由调用方处置)

    ConversationSnapshot::new

    fn ConversationSnapshot::new(response_id : String, request : LucentRequest, response_text : String?) -> ConversationSnapshot

    ConversationSnapshot 构造器(T8)

    ConversationSnapshot::to_json

    ConversationSnapshot 序列化(T8;宿主持久化用,不参与 wire)

    ConversionDiagnostic

    pub struct ConversionDiagnostic {
    field : String
    status : ConversionStatus
    detail : String?
    } derive(Eq,
    Debug
    )

    ConversionDiagnostic — 单个字段的转换结果诊断

    ConversionDiagnostic::degraded

    fn ConversionDiagnostic::degraded(field : String, detail : String?) -> ConversionDiagnostic

    构造 Degraded 诊断(provider 适配器共用样板)。

    ConversionDiagnostic::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    ConversionDiagnostic::from_json

    fn ConversionDiagnostic::from_json(jv : Json) -> Result[ConversionDiagnostic, String]

    ConversionDiagnostic::new

    fn ConversionDiagnostic::new(field : String, status : ConversionStatus, detail : String?) -> ConversionDiagnostic

    ConversionDiagnostic::status

    获取诊断状态。

    ConversionDiagnostic::to_json

    ConversionDiagnostic::unsupported

    fn ConversionDiagnostic::unsupported(field : String, detail : String?) -> ConversionDiagnostic

    构造 Unsupported 诊断(provider 适配器共用样板)。

    ConversionResult

    pub struct ConversionResult[T] {
    value : T
    diagnostics : Array[ConversionDiagnostic]
    } derive(Eq,
    Debug
    )

    ConversionResult — 带诊断的转换结果 成功时不等于 Exact:value 可用但部分字段已丢失

    ConversionResult::diagnostics

    获取转换诊断列表。

    ConversionResult::envelope_json

    fn[T] ConversionResult::envelope_json(self : ConversionResult[T], value_json : Json) -> Json

    信封 JSON:{"value":<value_json>,"diagnostics":[...]}(WASM/SDK 边界用)。

    ConversionResult::equal

    fn[T : Eq] ConversionResult::equal(ConversionResult[T], ConversionResult[T]) -> Bool

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    ConversionResult::from_json

    fn[T] ConversionResult::from_json(jv : Json, decode : (Json) -> Result[T, String]) -> Result[ConversionResult[T], String]

    反序列化:value 由调用方提供解码函数。

    ConversionResult::new

    fn[T] ConversionResult::new(value : T) -> ConversionResult[T]

    ConversionResult::to_json

    fn[T] ConversionResult::to_json(self : ConversionResult[T], encode : (T) -> Json) -> Json

    序列化:value 由调用方提供编码函数,diagnostics 统一编码。

    ConversionResult::value

    fn[T] ConversionResult::value(self : ConversionResult[T]) -> T

    获取转换结果值。

    ConversionResult::with_diagnostic

    fn[T] ConversionResult::with_diagnostic(self : ConversionResult[T], diagnostic : ConversionDiagnostic) -> ConversionResult[T]

    追加一条转换诊断(返回新结果,不修改原结果的诊断数组)。

    ConversionResult::with_diagnostics

    fn[T] ConversionResult::with_diagnostics(self : ConversionResult[T], diagnostics : Array[ConversionDiagnostic]) -> ConversionResult[T]

    批量附加诊断(返回新结果,等价于逐条 with_diagnostic)。

    ConversionStatus

    pub(all) enum ConversionStatus {
    Exact
    Degraded
    Unsupported
    Invalid
    } derive(Eq,
    Debug
    )

    ConversionStatus — 字段转换状态(五道门治理要求)

    ConversionStatus::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    ConversionStatus::from_json

    fn ConversionStatus::from_json(jv : Json) -> Result[ConversionStatus, String]

    ConversionStatus::to_json

    fn ConversionStatus::to_json(self : ConversionStatus) -> Json

    LucentAgentAction

    pub struct LucentAgentAction {
    kind : String
    id : String
    call_id : String?
    name : String?
    arguments_json : String?
    result : String?
    provider_payload : Json?
    } derive(Eq,
    Debug
    )

    LucentAgentAction — Agent 动作占位(v1 仅类型化,参数走 provider_payload)

    LucentAgentAction::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentAgentAction::from_json

    fn LucentAgentAction::from_json(jv : Json) -> Result[LucentAgentAction, String]

    === LucentAgentAction ===

    LucentAgentAction::new

    fn LucentAgentAction::new(kind : String, id : String, call_id : String?, name : String?, arguments_json : String?, result : String?, provider_payload : Json?) -> LucentAgentAction

    LucentAgentAction::to_json

    LucentAnnotation

    pub struct LucentAnnotation {
    kind : LucentAnnotationKind
    text : String?
    reference : String?
    start : Int?
    end : Int?
    } derive(Eq,
    Debug
    )

    LucentAnnotation — 标注侧信道

    LucentAnnotation::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentAnnotation::from_json

    fn LucentAnnotation::from_json(jv : Json) -> Result[LucentAnnotation, String]

    === LucentAnnotation ===

    LucentAnnotation::new

    fn LucentAnnotation::new(kind : LucentAnnotationKind, text : String?, reference : String?, start : Int?, end : Int?) -> LucentAnnotation

    LucentAnnotation::to_json

    fn LucentAnnotation::to_json(self : LucentAnnotation) -> Json

    LucentAnnotationKind

    pub(all) enum LucentAnnotationKind {
    Url
    FileCitation
    WebSearchCitation
    Native(String)
    } derive(Eq,
    Debug
    )

    LucentAnnotationKind — 标注类型

    LucentAnnotationKind::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentAnnotationKind::from_json

    fn LucentAnnotationKind::from_json(jv : Json) -> Result[LucentAnnotationKind, String]

    === LucentAnnotationKind ===

    LucentAnnotationKind::to_json

    fn LucentAnnotationKind::to_json(self : LucentAnnotationKind) -> String

    LucentBlockDelta

    pub(all) enum LucentBlockDelta {
    TextDelta(String)
    ThinkingDelta(String)
    SignatureDelta(String)
    ToolArgumentsDelta(String)
    RefusalDelta(String)
    NativeDelta(String, Json)
    } derive(Eq,
    Debug
    )

    LucentBlockDelta — 块增量(类型化)

    LucentBlockDelta::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentBlockDelta::from_json

    fn LucentBlockDelta::from_json(jv : Json) -> Result[LucentBlockDelta, String]

    === LucentBlockDelta ===

    LucentBlockDelta::native_delta

    fn LucentBlockDelta::native_delta(tag : String, raw : Json) -> LucentBlockDelta

    LucentBlockDelta::refusal_delta

    fn LucentBlockDelta::refusal_delta(s : String) -> LucentBlockDelta

    LucentBlockDelta::signature_delta

    fn LucentBlockDelta::signature_delta(s : String) -> LucentBlockDelta

    LucentBlockDelta::text_delta

    fn LucentBlockDelta::text_delta(s : String) -> LucentBlockDelta

    LucentBlockDelta::thinking_delta

    fn LucentBlockDelta::thinking_delta(s : String) -> LucentBlockDelta

    LucentBlockDelta::to_json

    fn LucentBlockDelta::to_json(self : LucentBlockDelta) -> Json

    LucentBlockDelta::tool_arguments_delta

    fn LucentBlockDelta::tool_arguments_delta(s : String) -> LucentBlockDelta

    LucentBlockType

    pub(all) enum LucentBlockType {
    Text
    ToolCall(String, String)
    Thinking
    Refusal
    Image
    Audio
    Video
    Native(String)
    } derive(Eq,
    Debug
    )

    LucentBlockType — 块类型(类型化,替代字符串)

    LucentBlockType::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentBlockType::from_json

    fn LucentBlockType::from_json(jv : Json) -> Result[LucentBlockType, String]

    === LucentBlockType ===

    LucentBlockType::native

    fn LucentBlockType::native(tag : String) -> LucentBlockType

    LucentBlockType::refusal

    LucentBlockType::text

    LucentBlockType::thinking

    LucentBlockType::to_json

    fn LucentBlockType::to_json(self : LucentBlockType) -> Json

    LucentStreamEvent JSON 序列化

    LucentBlockType::tool_call

    fn LucentBlockType::tool_call(id : String, name : String) -> LucentBlockType

    LucentCapabilities

    pub struct LucentCapabilities {
    tool_calling : SupportLevel
    parallel_tool_calls : SupportLevel
    reasoning : SupportLevel
    multimodal_input : SupportLevel
    structured_output : SupportLevel
    input_modalities : Array[LucentModality]
    output_modalities : Array[LucentModality]
    } derive(Eq,
    Debug
    )

    LucentCapabilities — 标准化能力声明

    LucentCapabilities::create

    fn LucentCapabilities::create(tool_calling : SupportLevel, parallel_tool_calls : SupportLevel, reasoning : SupportLevel, multimodal_input : SupportLevel, structured_output : SupportLevel, input_modalities : Array[LucentModality], output_modalities : Array[LucentModality]) -> LucentCapabilities

    LucentCapabilities::default

    LucentCapabilities::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentCapabilities::from_json

    fn LucentCapabilities::from_json(jv : Json) -> Result[LucentCapabilities, String]

    === LucentCapabilities ===

    LucentCapabilities::to_json

    LucentChoice

    pub struct LucentChoice {
    index : Int
    message : LucentMessage
    finish_reason : LucentFinishReason
    safety_ratings : Array[LucentSafetyRating]?
    } derive(Eq,
    Debug
    )

    LucentChoice — 候选回复

    LucentChoice::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentChoice::from_json

    fn LucentChoice::from_json(jv : Json) -> Result[LucentChoice, String]

    === LucentChoice ===

    LucentChoice::new

    fn LucentChoice::new(index : Int, message : LucentMessage, finish_reason : LucentFinishReason, safety_ratings : Array[LucentSafetyRating]?) -> LucentChoice

    LucentChoice::to_json

    fn LucentChoice::to_json(self : LucentChoice) -> Json

    LucentContent

    pub(all) enum LucentContent {
    Text(String, Array[LucentAnnotation]?)
    ToolUse(LucentToolUse)
    ToolResult(LucentToolResult)
    Thinking(LucentThinking)
    Refusal(String)
    Image(LucentMultimedia)
    Audio(LucentMultimedia)
    Video(LucentMultimedia)
    File(LucentMultimedia)
    Native(String, Json)
    } derive(Eq,
    Debug
    )

    LucentContent — 内容块主枚举

    LucentContent::audio

    fn LucentContent::audio(media_type : String, source : LucentMediaSource) -> LucentContent

    LucentContent::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentContent::file

    fn LucentContent::file(media_type : String, source : LucentMediaSource) -> LucentContent

    构造文件 content(PDF 等非媒体文件),来源三选一:url / inline / file_uri

    LucentContent::from_json

    fn LucentContent::from_json(jv : Json) -> Result[LucentContent, String]

    === LucentContent ===

    LucentContent::image

    fn LucentContent::image(media_type : String, source : LucentMediaSource) -> LucentContent

    LucentContent::native

    fn LucentContent::native(type_tag : String, raw : Json) -> LucentContent

    LucentContent::redacted_thinking

    fn LucentContent::redacted_thinking(signature : String?) -> LucentContent

    LucentContent::refusal

    fn LucentContent::refusal(text : String) -> LucentContent

    LucentContent::text

    fn LucentContent::text(s : String) -> LucentContent

    LucentContent::text_with_annotations

    fn LucentContent::text_with_annotations(s : String, annotations : Array[LucentAnnotation]) -> LucentContent

    LucentContent::thinking

    fn LucentContent::thinking(text : String, signature : String?) -> LucentContent

    LucentContent::to_json

    fn LucentContent::to_json(self : LucentContent) -> Json

    LucentContent::tool_result

    fn LucentContent::tool_result(tool_use_id : String, content : Array[LucentContent]) -> LucentContent

    LucentContent::tool_result_error

    fn LucentContent::tool_result_error(tool_use_id : String, content : Array[LucentContent]) -> LucentContent

    LucentContent::tool_use

    fn LucentContent::tool_use(id : String, name : String, arguments_json : String, arguments_value : Json?) -> LucentContent

    LucentContent::video

    fn LucentContent::video(media_type : String, source : LucentMediaSource) -> LucentContent

    LucentConversationItem

    pub(all) enum LucentConversationItem {
    Message(LucentMessage)
    ToolCall(LucentToolUse)
    ToolResult(LucentToolResult)
    Reasoning(LucentThinking)
    AgentAction(LucentAgentAction)
    } derive(Eq,
    Debug
    )

    LucentConversationItem — 会话项异质平级

    LucentConversationItem::agent_action

    LucentConversationItem::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentConversationItem::from_json

    fn LucentConversationItem::from_json(jv : Json) -> Result[LucentConversationItem, String]

    === LucentConversationItem ===

    LucentConversationItem::message

    LucentConversationItem::reasoning

    LucentConversationItem::to_json

    LucentConversationItem::tool_call

    LucentConversationItem::tool_result

    LucentConversationMeta

    pub struct LucentConversationMeta {
    id : String?
    model : String?
    usage_input : Int?
    created_at : Int?
    extra : Json?
    } derive(Eq,
    Debug
    )

    LucentConversationMeta — 会话元信息(ConversationStart 携带)

    通用字段(所有/多家 provider 共有):
    • id:会话/响应 ID
    • model:模型名
    • usage_input:输入 token 数
    • created_at:创建时间戳(OpenAI 系的 created / created_at)

    非通用字段通过 extra 透传(如 OpenAI Responses 的 instructions、status 等)。

    LucentConversationMeta::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentConversationMeta::from_json

    fn LucentConversationMeta::from_json(jv : Json) -> Result[LucentConversationMeta, String]

    === LucentConversationMeta ===

    LucentConversationMeta::new

    fn LucentConversationMeta::new(id : String?, model : String?, usage_input : Int?) -> LucentConversationMeta

    LucentConversationMeta::new_full

    fn LucentConversationMeta::new_full(id : String?, model : String?, usage_input : Int?, created_at : Int?, extra : Json?) -> LucentConversationMeta

    创建完整的 LucentConversationMeta(含 created_at 和 extra)

    LucentConversationMeta::to_json

    LucentDiscovery

    pub struct LucentDiscovery {
    schema_version : String
    protocol_version : String
    schema_url : String
    providers : Array[ProviderCapability]
    } derive(Eq,
    Debug
    )

    LucentDiscovery — 能力发现响应 SDK 接入时第一步调用,获取 Prism 实例的能力清单

    LucentDiscovery::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentDiscovery::from_json

    fn LucentDiscovery::from_json(jv : Json) -> Result[LucentDiscovery, String]

    === LucentDiscovery ===

    LucentDiscovery::new

    fn LucentDiscovery::new(protocol_version : String, schema_url : String, providers : Array[ProviderCapability]) -> LucentDiscovery

    LucentDiscovery::to_json

    fn LucentDiscovery::to_json(self : LucentDiscovery) -> Json

    LucentError

    pub struct LucentError {
    kind : LucentErrorKind
    message : String
    provider_code : String?
    } derive(Eq,
    Debug
    )

    LucentError — 错误结构化

    LucentError::equal

    fn LucentError::equal(LucentError, LucentError) -> Bool

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentError::from_json

    fn LucentError::from_json(jv : Json) -> Result[LucentError, String]

    === LucentError ===

    LucentError::new

    fn LucentError::new(kind : LucentErrorKind, message : String, provider_code : String?) -> LucentError

    LucentError::simple

    fn LucentError::simple(message : String) -> LucentError

    LucentError::to_json

    fn LucentError::to_json(self : LucentError) -> Json

    LucentErrorKind

    pub(all) enum LucentErrorKind {
    RateLimit
    InvalidRequest
    Authentication
    ServerError
    ContentFilter
    Native(String)
    } derive(Eq,
    Debug
    )

    LucentErrorKind — 错误类型化

    LucentErrorKind::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentErrorKind::from_json

    fn LucentErrorKind::from_json(jv : Json) -> Result[LucentErrorKind, String]

    === LucentErrorKind ===

    LucentErrorKind::from_string

    fn LucentErrorKind::from_string(s : String) -> LucentErrorKind

    LucentErrorKind::to_json

    fn LucentErrorKind::to_json(self : LucentErrorKind) -> Json

    LucentFinishReason

    pub(all) enum LucentFinishReason {
    Stop
    Length
    ToolCalls
    ContentFilter
    Safety
    Recitation
    MalformedToolCall
    Error
    Native(String)
    } derive(Eq,
    Debug
    )

    LucentFinishReason — 结束原因

    LucentFinishReason::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentFinishReason::from_json

    fn LucentFinishReason::from_json(jv : Json) -> Result[LucentFinishReason, String]

    === LucentFinishReason ===

    LucentFinishReason::from_string

    fn LucentFinishReason::from_string(s : String) -> LucentFinishReason

    LucentFinishReason 字符串映射(适配器共用)

    LucentFinishReason::to_json

    LucentFinishReason::to_string

    fn LucentFinishReason::to_string(self : LucentFinishReason) -> String

    LucentMediaSource

    pub(all) enum LucentMediaSource {
    Inline(String)
    Url(String)
    FileUri(String)
    } derive(Eq,
    Debug
    )

    LucentMediaSource — 多模态来源三选一

    LucentMediaSource::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentMediaSource::file_uri

    fn LucentMediaSource::file_uri(uri : String) -> LucentMediaSource

    LucentMediaSource::from_json

    fn LucentMediaSource::from_json(jv : Json) -> Result[LucentMediaSource, String]

    === LucentMediaSource ===

    LucentMediaSource::inline

    fn LucentMediaSource::inline(data : String) -> LucentMediaSource

    LucentMediaSource::to_json

    LucentMediaSource::url

    fn LucentMediaSource::url(u : String) -> LucentMediaSource

    LucentMessage

    pub struct LucentMessage {
    role : LucentRole
    content : Array[LucentContent]
    phase : String?
    reasoning : LucentThinking?
    } derive(Eq,
    Debug
    )

    LucentMessage — 消息特例(role + content 块数组)

    LucentMessage::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentMessage::from_json

    fn LucentMessage::from_json(jv : Json) -> Result[LucentMessage, String]

    === LucentMessage ===

    LucentMessage::new

    LucentMessage::to_json

    fn LucentMessage::to_json(self : LucentMessage) -> Json

    LucentMessage::with_phase

    fn LucentMessage::with_phase(role : LucentRole, content : Array[LucentContent], phase : String?) -> LucentMessage

    LucentMessage::with_reasoning

    fn LucentMessage::with_reasoning(role : LucentRole, content : Array[LucentContent], reasoning : LucentThinking?) -> LucentMessage

    构造带消息级 reasoning 的 message(openai-chat 等适配器入站使用)

    LucentModality

    pub(all) enum LucentModality {
    Text
    Image
    Audio
    Video
    Pdf
    Native(String)
    } derive(Eq,
    Debug
    )

    LucentModality — 模态声明

    LucentModality::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentModality::from_json

    fn LucentModality::from_json(jv : Json) -> Result[LucentModality, String]

    === LucentModality ===

    LucentModality::from_string

    fn LucentModality::from_string(s : String) -> LucentModality?

    LucentModality::to_json

    fn LucentModality::to_json(self : LucentModality) -> Json

    LucentMultimedia

    pub struct LucentMultimedia {
    media_type : String
    source : LucentMediaSource
    } derive(Eq,
    Debug
    )

    LucentMultimedia — 多模态媒体块

    LucentMultimedia::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentMultimedia::from_json

    fn LucentMultimedia::from_json(jv : Json) -> Result[LucentMultimedia, String]

    === LucentMultimedia ===

    LucentMultimedia::new

    fn LucentMultimedia::new(media_type : String, source : LucentMediaSource) -> LucentMultimedia

    LucentMultimedia::to_json

    fn LucentMultimedia::to_json(self : LucentMultimedia) -> Json

    LucentOptions

    pub struct LucentOptions {
    temperature : Double?
    top_p : Double?
    top_k : Int?
    max_output_tokens : Int?
    stop : Array[String]?
    stream : Bool
    candidate_count : Int?
    structured_output : LucentStructuredOutput?
    store : Bool?
    previous_response_id : String?
    extras : Map[String, Json]?
    } derive(Eq,
    Debug
    )

    LucentOptions — 生成参数

    LucentOptions::default

    fn LucentOptions::default() -> LucentOptions

    LucentOptions::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentOptions::from_json

    fn LucentOptions::from_json(jv : Json) -> Result[LucentOptions, String]

    === LucentOptions ===

    LucentOptions::new

    fn LucentOptions::new(temperature : Double?, top_p : Double?, top_k : Int?, max_output_tokens : Int?, stop : Array[String]?, stream : Bool, candidate_count : Int?, structured_output : LucentStructuredOutput?, store : Bool?, extras : Map[String, Json]?) -> LucentOptions

    LucentOptions::to_json

    fn LucentOptions::to_json(self : LucentOptions) -> Json

    LucentOptions::with_extras

    fn LucentOptions::with_extras(self : LucentOptions, extras : Map[String, Json]?) -> LucentOptions

    构建含 extras 的选项副本

    LucentOptions::with_previous_response_id

    fn LucentOptions::with_previous_response_id(self : LucentOptions, id : String?) -> LucentOptions

    设置 previous_response_id(T8;Responses 有状态续接载体)

    LucentOptions::with_store

    fn LucentOptions::with_store(self : LucentOptions, store : Bool?) -> LucentOptions

    构建含 store 值的选项副本

    LucentReasoningConfig

    pub struct LucentReasoningConfig {
    enabled : Bool
    budget_tokens : Int?
    effort : LucentReasoningEffort?
    summary : LucentReasoningSummary?
    } derive(Eq,
    Debug
    )

    LucentReasoningConfig — 推理配置

    LucentReasoningConfig::copy_with_budget

    fn LucentReasoningConfig::copy_with_budget(self : LucentReasoningConfig, budget_tokens : Int?) -> LucentReasoningConfig

    构建替换 budget_tokens 的副本(保留其余字段)

    LucentReasoningConfig::disabled

    LucentReasoningConfig::enabled

    fn LucentReasoningConfig::enabled(budget : Int?) -> LucentReasoningConfig

    LucentReasoningConfig::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentReasoningConfig::from_json

    fn LucentReasoningConfig::from_json(jv : Json) -> Result[LucentReasoningConfig, String]

    === LucentReasoningConfig ===

    LucentReasoningConfig::new

    LucentReasoningConfig::to_json

    LucentReasoningEffort

    pub(all) enum LucentReasoningEffort {
    Low
    Medium
    High
    XHigh
    } derive(Eq,
    Debug
    )

    LucentReasoningEffort — 推理力度

    LucentReasoningEffort::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentReasoningEffort::from_json

    fn LucentReasoningEffort::from_json(jv : Json) -> Result[LucentReasoningEffort, String]

    === LucentReasoningEffort ===

    LucentReasoningEffort::to_string

    fn LucentReasoningEffort::to_string(self : LucentReasoningEffort) -> String

    LucentReasoningEffort 字符串映射(适配器共用)

    出站侧 openai / messages / responses 三处使用完全相同的档位名 ("low"/"medium"/"high"/"xhigh"),集中于此避免重复 match。 gemini 的降级映射(XHigh → ("high", true))语义不同,保留在 adapter。

    LucentReasoningSummary

    pub(all) enum LucentReasoningSummary {
    Auto
    Concise
    Detailed
    } derive(Eq,
    Debug
    )

    LucentReasoningSummary — 推理摘要详细度

    LucentReasoningSummary::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentReasoningSummary::from_json

    fn LucentReasoningSummary::from_json(jv : Json) -> Result[LucentReasoningSummary, String]

    === LucentReasoningSummary ===

    LucentRequest

    pub struct LucentRequest {
    schema_version : String
    model : String
    instructions : Array[LucentContent]?
    conversation : Array[LucentConversationItem]
    tools : Array[LucentTool]?
    tool_choice : LucentToolChoice?
    options : LucentOptions
    capabilities : LucentCapabilities?
    reasoning : LucentReasoningConfig?
    metadata : Map[String, String]?
    extra : Map[String, Json]?
    } derive(Eq,
    Debug
    )

    LucentRequest — 完整 LLM 请求

    LucentRequest::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentRequest::from_json

    fn LucentRequest::from_json(jv : Json) -> Result[LucentRequest, String]

    LucentRequest JSON 反序列化

    LucentRequest::from_messages

    fn LucentRequest::from_messages(model : String, instructions : Array[LucentContent]?, messages : Array[LucentMessage], tools : Array[LucentTool]?, tool_choice : LucentToolChoice?, options : LucentOptions, capabilities : LucentCapabilities?, reasoning : LucentReasoningConfig?, metadata : Map[String, String]?, extra : Map[String, Json]?) -> LucentRequest

    便利构造器:用 messages 数组(旧风格)替代 conversation

    LucentRequest::new

    fn LucentRequest::new(model : String, instructions : Array[LucentContent]?, conversation : Array[LucentConversationItem], tools : Array[LucentTool]?, tool_choice : LucentToolChoice?, options : LucentOptions, capabilities : LucentCapabilities?, reasoning : LucentReasoningConfig?, metadata : Map[String, String]?, extra : Map[String, Json]?) -> LucentRequest

    LucentRequest::to_json

    fn LucentRequest::to_json(self : LucentRequest) -> Json

    LucentRequest JSON 序列化

    LucentRequest::validate

    校验 LucentRequest 的字段值合法性(与 ProviderCapability 无关的基本校验) 例如:temperature 范围 [0, 2],max_output_tokens >= 1,model 非空

    LucentRequest::with_conversation

    fn LucentRequest::with_conversation(self : LucentRequest, conversation : Array[LucentConversationItem]) -> LucentRequest

    构建含新 conversation 的请求(子包后处理用)

    LucentRequest::with_stream

    fn LucentRequest::with_stream(self : LucentRequest, stream : Bool) -> LucentRequest

    构建含 stream 标志的请求副本(SDK 使用)

    LucentResponse

    pub struct LucentResponse {
    schema_version : String
    id : String
    model : String
    created_at : Int?
    choices : Array[LucentChoice]
    usage : LucentUsage?
    provider_payload : Json?
    } derive(Eq,
    Debug
    )

    LucentResponse — 非流式 LLM 响应

    LucentResponse::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentResponse::from_json

    fn LucentResponse::from_json(jv : Json) -> Result[LucentResponse, String]

    === LucentResponse ===

    LucentResponse::get_text

    fn LucentResponse::get_text(self : LucentResponse) -> String

    提取响应中的纯文本(L1 SDK 使用)

    LucentResponse::new

    fn LucentResponse::new(id : String, model : String, created_at : Int?, choices : Array[LucentChoice], usage : LucentUsage?, provider_payload : Json?) -> LucentResponse

    LucentResponse::reasoning

    fn LucentResponse::reasoning(self : LucentResponse) -> LucentThinking?

    便捷访问:首个 choice 的消息级 reasoning(SDK 取用入口)

    LucentResponse::to_json

    fn LucentResponse::to_json(self : LucentResponse) -> Json

    LucentResponse::validate

    校验 LucentResponse 字段合法性

    LucentResponse::with_provider_payload

    fn LucentResponse::with_provider_payload(self : LucentResponse, payload : Json?) -> LucentResponse

    构建含 provider_payload 的新响应(外部包访问用)

    LucentRole

    pub(all) enum LucentRole {
    System
    User
    Assistant
    Tool
    Model
    Developer
    Native(String)
    } derive(Eq,
    Debug
    )

    LucentRole — 对话角色

    LucentRole::equal

    fn LucentRole::equal(LucentRole, LucentRole) -> Bool

    显式声明 Eq::equal 保留为常规方法(隐式提升已弃用,见 E0079)

    LucentRole::from_json

    fn LucentRole::from_json(jv : Json) -> Result[LucentRole, String]

    LucentRole::from_string

    fn LucentRole::from_string(s : String) -> LucentRole?

    LucentRole::to_json

    fn LucentRole::to_json(self : LucentRole) -> Json

    === LucentRole ===

    LucentRole::to_string

    fn LucentRole::to_string(self : LucentRole) -> String

    LucentSafetyRating

    pub struct LucentSafetyRating {
    category : String
    probability : String
    } derive(Eq,
    Debug
    )

    LucentSafetyRating — 安全评级

    LucentSafetyRating::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentSafetyRating::from_json

    fn LucentSafetyRating::from_json(jv : Json) -> Result[LucentSafetyRating, String]

    === LucentSafetyRating ===

    LucentSafetyRating::new

    fn LucentSafetyRating::new(category : String, probability : String) -> LucentSafetyRating

    LucentSafetyRating::to_json

    LucentStreamEvent

    pub(all) enum LucentStreamEvent {
    ConversationStart(LucentConversationMeta)
    ItemStart(Int, LucentConversationItem)
    BlockStart(Int, LucentBlockType)
    BlockDelta(Int, LucentBlockDelta)
    BlockEnd(Int)
    ItemEnd(Int)
    BlockDiscard(Int)
    Annotations(Int, Array[LucentAnnotation])
    Finish(LucentFinishReason)
    Usage(LucentUsage)
    Error(LucentError)
    Done
    } derive(Eq,
    Debug
    )

    LucentStreamEvent — 流事件(canonical:块生命周期)

    LucentStreamEvent::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentStreamEvent::from_json

    fn LucentStreamEvent::from_json(jv : Json) -> Result[LucentStreamEvent, String]

    LucentStreamEvent JSON 反序列化

    LucentStreamEvent::to_json

    LucentStructuredOutput

    pub(all) enum LucentStructuredOutput {
    JsonObject
    Text
    JsonSchema(String)
    } derive(Eq,
    Debug
    )

    LucentStructuredOutput — 结构化输出

    LucentStructuredOutput::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentStructuredOutput::from_json

    fn LucentStructuredOutput::from_json(jv : Json) -> Result[LucentStructuredOutput, String]

    === LucentStructuredOutput ===

    LucentStructuredOutput::to_json

    LucentThinking

    pub struct LucentThinking {
    text : String
    signature : String?
    redacted : Bool
    summary : Array[LucentContent]?
    } derive(Eq,
    Debug
    )

    LucentThinking — 推理内容

    LucentThinking::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentThinking::from_json

    fn LucentThinking::from_json(jv : Json) -> Result[LucentThinking, String]

    === LucentThinking ===

    LucentThinking::new

    fn LucentThinking::new(text : String, signature : String?, redacted : Bool, summary : Array[LucentContent]?) -> LucentThinking

    LucentThinking::redacted

    fn LucentThinking::redacted(signature : String?) -> LucentThinking

    LucentThinking::to_json

    fn LucentThinking::to_json(self : LucentThinking) -> Json

    LucentThinking::visible

    fn LucentThinking::visible(text : String, signature : String?) -> LucentThinking

    LucentTool

    pub struct LucentTool {
    name : String
    description : String?
    parameters_json : String
    strict : Bool?
    kind : LucentToolKind
    } derive(Eq,
    Debug
    )

    LucentTool — 工具定义

    LucentTool::equal

    fn LucentTool::equal(LucentTool, LucentTool) -> Bool

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentTool::from_json

    fn LucentTool::from_json(jv : Json) -> Result[LucentTool, String]

    === LucentTool ===

    LucentTool::new

    fn LucentTool::new(name : String, description : String?, parameters_json : String, strict : Bool?, kind : LucentToolKind) -> LucentTool

    LucentTool::simple

    fn LucentTool::simple(name : String, description : String, parameters_json : String) -> LucentTool

    LucentTool::to_json

    fn LucentTool::to_json(self : LucentTool) -> Json

    LucentToolChoice

    pub(all) enum LucentToolChoice {
    Auto
    None
    Required
    SpecificTool(String)
    } derive(Eq,
    Debug
    )

    LucentToolChoice — 工具选择(类型化)

    LucentToolChoice::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentToolChoice::from_json

    fn LucentToolChoice::from_json(jv : Json) -> Result[LucentToolChoice, String]

    === LucentToolChoice ===

    LucentToolChoice::to_json

    fn LucentToolChoice::to_json(self : LucentToolChoice) -> Json

    LucentToolKind

    pub(all) enum LucentToolKind {
    Function
    FileSearch
    WebSearch
    CodeInterpreter
    ComputerUse
    CodeExecution
    Shell
    ApplyPatch
    MCP
    Native(String)
    } derive(Eq,
    Debug
    )

    LucentToolKind — 工具类型(消费方处理逻辑不同)

    LucentToolKind::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentToolResult

    pub struct LucentToolResult {
    tool_use_id : String
    content : Array[LucentContent]
    is_error : Bool
    } derive(Eq,
    Debug
    )

    LucentToolResult — 工具结果(多块内容)

    LucentToolResult::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentToolResult::error

    fn LucentToolResult::error(tool_use_id : String, content : Array[LucentContent]) -> LucentToolResult

    LucentToolResult::from_json

    fn LucentToolResult::from_json(jv : Json) -> Result[LucentToolResult, String]

    === LucentToolResult ===

    LucentToolResult::new

    fn LucentToolResult::new(tool_use_id : String, content : Array[LucentContent], is_error : Bool) -> LucentToolResult

    LucentToolResult::ok

    fn LucentToolResult::ok(tool_use_id : String, content : Array[LucentContent]) -> LucentToolResult

    LucentToolResult::to_json

    fn LucentToolResult::to_json(self : LucentToolResult) -> Json

    LucentToolUse

    pub struct LucentToolUse {
    id : String
    name : String
    arguments_json : String
    arguments_value : Json?
    } derive(Eq,
    Debug
    )

    LucentToolUse — 工具调用(结构化)

    LucentToolUse::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentToolUse::from_json

    fn LucentToolUse::from_json(jv : Json) -> Result[LucentToolUse, String]

    === LucentToolUse ===

    LucentToolUse::new

    fn LucentToolUse::new(id : String, name : String, arguments_json : String, arguments_value : Json?) -> LucentToolUse

    LucentToolUse::to_json

    fn LucentToolUse::to_json(self : LucentToolUse) -> Json

    LucentUsage

    pub(all) struct LucentUsage {
    prompt_tokens : Int
    completion_tokens : Int
    total_tokens : Int
    reasoning_tokens : Int?
    cached_tokens : Int?
    cache_creation_tokens : Int?
    } derive(Eq,
    Debug
    )

    LucentUsage — Token 用量(面向 reasoning 时代)

    LucentUsage::equal

    fn LucentUsage::equal(LucentUsage, LucentUsage) -> Bool

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    LucentUsage::from_json

    fn LucentUsage::from_json(jv : Json) -> Result[LucentUsage, String]

    LucentResponse JSON 反序列化

    LucentUsage::full

    fn LucentUsage::full(prompt_tokens : Int, completion_tokens : Int, total_tokens : Int, reasoning_tokens : Int?, cached_tokens : Int?, cache_creation_tokens : Int?) -> LucentUsage

    构造含细化用量的 LucentUsage(reasoning / cached / cache_creation)

    LucentUsage::new

    fn LucentUsage::new(prompt_tokens : Int, completion_tokens : Int, total_tokens : Int) -> LucentUsage

    LucentUsage::to_json

    fn LucentUsage::to_json(self : LucentUsage) -> Json

    LucentResponse JSON 序列化

    LucentUsage::with_reasoning

    fn LucentUsage::with_reasoning(prompt_tokens : Int, completion_tokens : Int, total_tokens : Int, reasoning_tokens : Int) -> LucentUsage

    ProviderCapability

    pub struct ProviderCapability {
    model_pattern : String
    provider : String
    capabilities : LucentCapabilities
    extra_params : Map[String, Json]?
    } derive(Eq,
    Debug
    )

    ProviderCapability — 适配器能力声明(SDK 自省用)

    ProviderCapability::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    ProviderCapability::from_json

    fn ProviderCapability::from_json(jv : Json) -> Result[ProviderCapability, String]

    === ProviderCapability ===

    ProviderCapability::new

    fn ProviderCapability::new(model_pattern : String, provider : String, capabilities : LucentCapabilities, extra_params : Map[String, Json]?) -> ProviderCapability

    ProviderCapability::to_json

    ProviderCapability/LucentDiscovery JSON 序列化

    SupportLevel

    pub(all) enum SupportLevel {
    Full
    Partial
    Absent
    } derive(Eq,
    Debug
    )

    SupportLevel — 能力支持级别 替代原有 Bool 能力声明,区分「完全支持 / 部分支持 / 不支持」三档。 线格式:"full" / "partial" / "none"(Absent 命名避开 Option::None 冲突)。

    SupportLevel::equal

    explicit: Eq::equal kept as a regular method (implicit promotion is deprecated, E0079)

    SupportLevel::from_json

    fn SupportLevel::from_json(jv : Json) -> Result[SupportLevel, String]

    === SupportLevel ===

    SupportLevel::from_string

    fn SupportLevel::from_string(s : String) -> SupportLevel?

    SupportLevel::to_json

    fn SupportLevel::to_json(self : SupportLevel) -> Json

    SupportLevel::to_string

    fn SupportLevel::to_string(self : SupportLevel) -> String

    ValidateResult

    pub struct ValidateResult {
    valid : Bool
    errors : Array[String]
    warnings : Array[String]
    }

    ValidateResult — 校验结果

    ValidateResult::error

    fn ValidateResult::error(msg : String) -> ValidateResult

    ValidateResult::ok

    lucent_collect_annotations

    fn lucent_collect_annotations(events : Array[LucentStreamEvent]) -> Array[LucentAnnotation]

    便利:从 LucentStreamEvent 流中提取所有 Annotations 事件(宿主语言收集标注用)

    lucent_content_to_text

    fn lucent_content_to_text(parts : Array[LucentContent]) -> String

    将 LucentContent 数组拼接为纯文本(Text 块拼接,其他块忽略)

    lucent_items_from_messages

    fn lucent_items_from_messages(msgs : Array[LucentMessage]) -> Array[LucentConversationItem]

    便利:将 Array[LucentMessage] 包装为 Array[LucentConversationItem]

    lucent_messages_from_items

    fn lucent_messages_from_items(items : Array[LucentConversationItem]) -> Array[LucentMessage]

    从 conversation items 中提取所有 Message 项(用于适配器需要 messages 视图的场景)

    lucent_stream_events_to_accumulated

    fn lucent_stream_events_to_accumulated(events : Array[LucentStreamEvent], fallback_id : String, fallback_model : String) -> AccumulatedResponse

    完整累加:把流事件合成为 LucentResponse,同时保留 annotations/native_events/agent_actions 及对应诊断。原 lucent_stream_events_to_response 是其薄包装(取 .response)。

    lucent_stream_events_to_response

    fn lucent_stream_events_to_response(events : Array[LucentStreamEvent], fallback_id : String, fallback_model : String) -> LucentResponse

    薄包装:取累加结果的 response(既有调用方兼容)

    lux_to_json_string

    fn lux_to_json_string(jv : Json) -> String

    push_unsupported

    fn push_unsupported(field : String, detail : String, diagnostics : Array[ConversionDiagnostic]) -> Unit

    构造 unsupported feature 诊断并推入诊断数组

    更通用的版本,用于非 content 类型的 unsupported 诊断(如 tools.kind, options.store 等)。

    用法:
    push_unsupported("tools.kind", "tool kind not supported by gemini", diagnostics)

    push_unsupported_content

    fn push_unsupported_content(type_name : String, adapter : String, diagnostics : Array[ConversionDiagnostic]) -> Unit

    构造 unsupported content 诊断并推入诊断数组

    统一 ConversionDiagnostic::unsupported("content.xxx", Some("...")) 模式。 适配器编码循环中遇到不支持的内容类型时调用。

    用法:
    push_unsupported_content("audio", "openai-chat", diagnostics) // 生成: unsupported("content.audio", "audio content not supported by openai-chat")

    skip_thinking_when_dual_carrier

    fn skip_thinking_when_dual_carrier(content : LucentContent, reasoning : LucentThinking?, diagnostics : Array[ConversionDiagnostic]) -> Bool

    检测并处理 reasoning dual_carrier 场景

    当消息级 reasoning(vLLM/DeepSeek)与 content 中的 Thinking 块并存时, 优先使用消息级 reasoning,跳过 content Thinking 块,并记录 Degraded 诊断。

    用法:在适配器编码循环中,对每个 content 块调用此函数:
    if skip_thinking_when_dual_carrier(content[i], reasoning, diagnostics) { i = i + 1 continue }

    返回 true 表示当前块应跳过(Thinking 块 + reasoning 已存在)。