Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 19 additions & 19 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ categories = ["network-programming", "web-programming::http-server"]

# 二进制走 CalVer,crate 走 SemVer —— 两者是两回事,卖给不同的人。
# 这里是 crate 的版本。
version = "0.63.0"
version = "0.64.0"

[workspace.dependencies]
# ── 内部 crate ───────────────────────────────────────────
Expand Down
2 changes: 1 addition & 1 deletion crates/tw-api/msg-codes.txt
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ config.key_limit_not_positive
config.key_limit_retention
config.key_limit_two_measures
config.model_spec_blank_model
config.model_spec_empty
config.model_spec_nothing_set
config.model_spec_wildcard
config.model_spec_zero
config.name_collision
Expand Down
26 changes: 24 additions & 2 deletions crates/tw-api/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -794,7 +794,11 @@ pub const MSG_CODES: &str = include_str!("../msg-codes.txt");
/// Responses 的 WebSocket 连接上每个 `response.create` 是一行请求(带用量和费用,按轮算上限、
/// 并发、快慢和成败),连接本身不留行;Realtime 和别的路径照旧整条连接一行。照 38 写的界面
/// 保存组和密钥时会把权重、上限丢掉。
pub const CONTROL_API_VERSION: u32 = 39;
///
/// **40 起模型规格多了会不会推理、收不收图**:[`ModelRow`] 多了 `reasoning`、`image_input`
/// 和它们的来源,[`ModelSpecSave`] 多了 `reasoning`、`image_input`(四项都空才是删掉)。
/// 照 39 写的界面保存规格时会把这两项丢掉。
pub const CONTROL_API_VERSION: u32 = 40;

#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "ts", derive(ts_rs::TS))]
Expand Down Expand Up @@ -3098,6 +3102,18 @@ pub struct ModelRow {
/// `max_output_tokens` 从哪儿来。不知道输出上限时没有
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_output_tokens_source: Option<SpecSource>,
/// 会不会推理:这一家手写的,没写时来自价目表。不知道时没有
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reasoning: Option<bool>,
/// `reasoning` 从哪儿来。不知道时没有
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reasoning_source: Option<SpecSource>,
/// 收不收图:这一家手写的,没写时来自价目表。不知道时没有
#[serde(default, skip_serializing_if = "Option::is_none")]
pub image_input: Option<bool>,
/// `image_input` 从哪儿来。不知道时没有
#[serde(default, skip_serializing_if = "Option::is_none")]
pub image_input_source: Option<SpecSource>,
/// 按这个上游选的价目表查到的价格。空 = 无法计价
#[serde(default, skip_serializing_if = "Option::is_none")]
pub price: Option<PriceFields>,
Expand Down Expand Up @@ -3162,7 +3178,7 @@ pub struct ProviderSave {
}

/// 设一家上游的一个模型的规格(`PUT /provider-model-spec`):价目表不认识这个模型、
/// 或者写错了时手写。**两项都空就是删掉这一项**,回到价目表。
/// 或者写错了时手写。**四项都空就是删掉这一项**,回到价目表。
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[cfg_attr(feature = "ts", derive(ts_rs::TS))]
pub struct ModelSpecSave {
Expand All @@ -3175,6 +3191,12 @@ pub struct ModelSpecSave {
/// 输出上限(token)。空 = 用价目表的
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_output_tokens: Option<u32>,
/// 会不会推理。空 = 用价目表的
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reasoning: Option<bool>,
/// 收不收图。空 = 用价目表的
#[serde(default, skip_serializing_if = "Option::is_none")]
pub image_input: Option<bool>,
/// 你基于哪一版。**对不上就是 409**
#[serde(default, skip_serializing_if = "Option::is_none")]
pub base_version: Option<String>,
Expand Down
3 changes: 2 additions & 1 deletion crates/tw-config/src/edit.rs
Original file line number Diff line number Diff line change
Expand Up @@ -631,7 +631,7 @@ pub fn remove_alias(text: &str, name: &str) -> Result<String, EditError> {
/// - 那一家写成了行内(`- { name: a, … }`):整项换成块式,位置不变(和 [`upsert`] 一样);
/// `model_specs` 写成了行内:整张换掉
///
/// 两项都空的 `spec` 交过来是调用方的错 —— 那是「删掉」,传 `None`。
/// 全空的 `spec` 交过来是调用方的错 —— 那是「删掉」,传 `None`。
pub fn set_model_spec(
text: &str,
provider: &str,
Expand Down Expand Up @@ -1314,6 +1314,7 @@ routes: []
crate::ModelSpec {
context_window,
max_output_tokens,
..Default::default()
}
}

Expand Down
2 changes: 1 addition & 1 deletion crates/tw-config/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ pub use aliases::{Alias, Aliases};
pub use credential::{CredentialError, Header, Headers, Secret, SecretResolveError, auth_header};
pub use init::{generate_control_key, generate_initial, generate_key};
pub use limits::{KeyLimit, LimitMeasure, LimitPer};
pub use model_specs::{ModelLimits, ModelSpec, Sourced, SpecSource};
pub use model_specs::{ModelSpec, ResolvedSpec, Sourced, SpecSource};
pub use plugins::Plugin;
pub use proxy::{DIRECT, OnProxyFail, Proxy, ProxyKind, SYSTEM};
pub use validate::ValidationError;
Expand Down
Loading
Loading