Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1fc2f0f65a | ||
|
|
f7cb38b620 | ||
|
|
04e7667d11 | ||
|
|
78cbfda481 | ||
|
|
36fd6a4dda | ||
|
|
1308196419 | ||
|
|
b3546ebaf1 | ||
|
|
2499e6baca | ||
|
|
871b9d2f3b | ||
|
|
4a36cf9446 | ||
|
|
a2180452c9 |
@@ -1,3 +1,12 @@
|
|||||||
|
# (2026-06-05) Version 1.21.0
|
||||||
|
|
||||||
|
- (**Improvement**) Default to OpenAI's `gpt-image-2` model for image generation (in newly-created OpenAI agents and the sample provider configs).
|
||||||
|
|
||||||
|
- (**Internal Improvement**) Update [async-openai](https://crates.io/crates/async-openai) from 0.40 to 0.41, which [resynchronizes with the upstream OpenAI API spec](https://github.com/64bit/async-openai/issues/557) after it had drifted out of sync — a mismatch that was already causing some breakage (hopefully now resolved). Adapts to the newly-added `gpt-image-2` image model and an `ImageSize` type change.
|
||||||
|
|
||||||
|
- (**Internal Improvement**) Dependency updates.
|
||||||
|
|
||||||
|
|
||||||
# (2026-06-02) Version 1.20.0
|
# (2026-06-02) Version 1.20.0
|
||||||
|
|
||||||
- (**Internal Improvement**) Update [matrix-sdk](https://crates.io/crates/matrix-sdk) from 0.17 to 0.18 and [mxlink](https://crates.io/crates/mxlink) to 1.15.0.
|
- (**Internal Improvement**) Update [matrix-sdk](https://crates.io/crates/matrix-sdk) from 0.17 to 0.18 and [mxlink](https://crates.io/crates/mxlink) to 1.15.0.
|
||||||
|
|||||||
14
Cargo.lock
generated
14
Cargo.lock
generated
@@ -184,9 +184,9 @@ checksum = "4288f83726785267c6f2ef073a3d83dc3f9b81464e9f99898240cced85fce35a"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "async-openai"
|
name = "async-openai"
|
||||||
version = "0.40.3"
|
version = "0.41.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "278af84d3d19995d440ea7b401a4b121c780c8d37f5eb6e883d987c17b523aa4"
|
checksum = "3ec57a13b36ba76764870363a9182d8bc9fb49538dc5a948dd2e5224fe65ce40"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-openai-macros",
|
"async-openai-macros",
|
||||||
"base64 0.22.1",
|
"base64 0.22.1",
|
||||||
@@ -315,7 +315,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "baibot"
|
name = "baibot"
|
||||||
version = "1.20.0"
|
version = "1.21.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anthropic",
|
"anthropic",
|
||||||
"anyhow",
|
"anyhow",
|
||||||
@@ -546,9 +546,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "chrono"
|
name = "chrono"
|
||||||
version = "0.4.44"
|
version = "0.4.45"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0"
|
checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"iana-time-zone",
|
"iana-time-zone",
|
||||||
"js-sys",
|
"js-sys",
|
||||||
@@ -2946,9 +2946,9 @@ checksum = "007d8adb5ddab6f8e3f491ac63566a7d5002cc7ed73901f72057943fa71ae1ae"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "quick_cache"
|
name = "quick_cache"
|
||||||
version = "0.6.22"
|
version = "0.6.23"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d1c821816e9b928e20e92ed59bb3ac4aab321d16ca2316871c9fe7ca739cd477"
|
checksum = "3a3db184a8b66cfe87f0263a1de147a6b554c864d1767c6f7fa4eb0e5497b565"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ahash",
|
"ahash",
|
||||||
"equivalent",
|
"equivalent",
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ license = "AGPL-3.0-or-later"
|
|||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
keywords = ["matrix", "chat", "bot", "AI", "LLM"]
|
keywords = ["matrix", "chat", "bot", "AI", "LLM"]
|
||||||
include = ["/etc/assets/baibot-torso-768.png", "/src", "/README.md", "/CHANGELOG.md", "/LICENSE"]
|
include = ["/etc/assets/baibot-torso-768.png", "/src", "/README.md", "/CHANGELOG.md", "/LICENSE"]
|
||||||
version = "1.20.0"
|
version = "1.21.0"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
@@ -17,7 +17,7 @@ path = "src/lib.rs"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
anthropic = { git = "https://github.com/etkecc/anthropic-rs.git", branch = "fix-content-block-image" }
|
anthropic = { git = "https://github.com/etkecc/anthropic-rs.git", branch = "fix-content-block-image" }
|
||||||
anyhow = "1.0.*"
|
anyhow = "1.0.*"
|
||||||
async-openai = { version = "0.40.0", features = ["audio", "chat-completion", "image", "responses"] }
|
async-openai = { version = "0.41.0", features = ["audio", "chat-completion", "image", "responses"] }
|
||||||
base64 = "0.22.*"
|
base64 = "0.22.*"
|
||||||
chrono = { version = "0.4.*", default-features = false, features = ["std", "now"] }
|
chrono = { version = "0.4.*", default-features = false, features = ["std", "now"] }
|
||||||
# We'd rather not depend on this, but we cannot use the ruma-events EventContent macro without it.
|
# We'd rather not depend on this, but we cannot use the ruma-events EventContent macro without it.
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ text_to_speech:
|
|||||||
speed: 1.0
|
speed: 1.0
|
||||||
response_format: opus
|
response_format: opus
|
||||||
image_generation:
|
image_generation:
|
||||||
model_id: gpt-image-1.5
|
model_id: gpt-image-2
|
||||||
style: null
|
style: null
|
||||||
size: null
|
size: null
|
||||||
quality: null
|
quality: null
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ agents:
|
|||||||
# speed: 1.0
|
# speed: 1.0
|
||||||
# response_format: opus
|
# response_format: opus
|
||||||
# image_generation:
|
# image_generation:
|
||||||
# model_id: gpt-image-1.5
|
# model_id: gpt-image-2
|
||||||
# style: null
|
# style: null
|
||||||
# size: null
|
# size: null
|
||||||
# quality: null
|
# quality: null
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
services:
|
services:
|
||||||
ollama:
|
ollama:
|
||||||
image: docker.io/ollama/ollama:0.30.0
|
image: docker.io/ollama/ollama:0.30.5
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
ports:
|
ports:
|
||||||
- "${SERVICE_OLLAMA_BIND_PORT_HTTP}:11434"
|
- "${SERVICE_OLLAMA_BIND_PORT_HTTP}:11434"
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ services:
|
|||||||
- /etc/passwd:/etc/passwd:ro
|
- /etc/passwd:/etc/passwd:ro
|
||||||
|
|
||||||
synapse:
|
synapse:
|
||||||
image: ghcr.io/element-hq/synapse:v1.153.0
|
image: ghcr.io/element-hq/synapse:v1.154.0
|
||||||
user: "${UID}:${GID}"
|
user: "${UID}:${GID}"
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
entrypoint: python
|
entrypoint: python
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
[tools]
|
[tools]
|
||||||
prek = "0.4.3"
|
prek = "0.4.4"
|
||||||
|
|
||||||
[settings]
|
[settings]
|
||||||
# Disable automatic trust prompts - we trust this config
|
# Disable automatic trust prompts - we trust this config
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use super::OPENAI_IMAGE_MODEL_GPT_IMAGE_1_DOT_5;
|
use super::OPENAI_IMAGE_MODEL_GPT_IMAGE_2;
|
||||||
use crate::agent::{default_prompt, provider::ConfigTrait};
|
use crate::agent::{default_prompt, provider::ConfigTrait};
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
@@ -175,7 +175,7 @@ pub struct ImageGenerationConfig {
|
|||||||
impl Default for ImageGenerationConfig {
|
impl Default for ImageGenerationConfig {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
model_id: OPENAI_IMAGE_MODEL_GPT_IMAGE_1_DOT_5.to_owned(),
|
model_id: OPENAI_IMAGE_MODEL_GPT_IMAGE_2.to_owned(),
|
||||||
style: default_image_style(),
|
style: default_image_style(),
|
||||||
size: default_image_size(),
|
size: default_image_size(),
|
||||||
quality: default_image_quality(),
|
quality: default_image_quality(),
|
||||||
@@ -193,6 +193,7 @@ impl ImageGenerationConfig {
|
|||||||
"gpt-image-1" => Ok(async_openai::types::images::ImageModel::GptImage1),
|
"gpt-image-1" => Ok(async_openai::types::images::ImageModel::GptImage1),
|
||||||
"gpt-image-1.5" => Ok(async_openai::types::images::ImageModel::GptImage1dot5),
|
"gpt-image-1.5" => Ok(async_openai::types::images::ImageModel::GptImage1dot5),
|
||||||
"gpt-image-1-mini" => Ok(async_openai::types::images::ImageModel::GptImage1Mini),
|
"gpt-image-1-mini" => Ok(async_openai::types::images::ImageModel::GptImage1Mini),
|
||||||
|
"gpt-image-2" => Ok(async_openai::types::images::ImageModel::GptImage2),
|
||||||
other => Ok(async_openai::types::images::ImageModel::Other(
|
other => Ok(async_openai::types::images::ImageModel::Other(
|
||||||
other.to_owned(),
|
other.to_owned(),
|
||||||
)),
|
)),
|
||||||
|
|||||||
@@ -271,6 +271,7 @@ impl ControllerTrait for Controller {
|
|||||||
ImageModel::GptImage1 => ImageModel::GptImage1Mini,
|
ImageModel::GptImage1 => ImageModel::GptImage1Mini,
|
||||||
ImageModel::GptImage1dot5 => ImageModel::GptImage1Mini,
|
ImageModel::GptImage1dot5 => ImageModel::GptImage1Mini,
|
||||||
ImageModel::GptImage1Mini => ImageModel::GptImage1Mini,
|
ImageModel::GptImage1Mini => ImageModel::GptImage1Mini,
|
||||||
|
ImageModel::GptImage2 => ImageModel::GptImage1Mini,
|
||||||
ImageModel::Other(_) => ImageModel::DallE2,
|
ImageModel::Other(_) => ImageModel::DallE2,
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -310,7 +311,7 @@ impl ControllerTrait for Controller {
|
|||||||
let size = if params.smallest_size_possible {
|
let size = if params.smallest_size_possible {
|
||||||
Some(get_sticker_size(&model))
|
Some(get_sticker_size(&model))
|
||||||
} else {
|
} else {
|
||||||
image_generation_config.size
|
image_generation_config.size.clone()
|
||||||
};
|
};
|
||||||
|
|
||||||
let response_format = match model.clone() {
|
let response_format = match model.clone() {
|
||||||
@@ -321,6 +322,7 @@ impl ControllerTrait for Controller {
|
|||||||
ImageModel::GptImage1 => None,
|
ImageModel::GptImage1 => None,
|
||||||
ImageModel::GptImage1Mini => None,
|
ImageModel::GptImage1Mini => None,
|
||||||
ImageModel::GptImage1dot5 => None,
|
ImageModel::GptImage1dot5 => None,
|
||||||
|
ImageModel::GptImage2 => None,
|
||||||
ImageModel::Other(_) => Some(ImageResponseFormat::B64Json),
|
ImageModel::Other(_) => Some(ImageResponseFormat::B64Json),
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -430,6 +432,7 @@ impl ControllerTrait for Controller {
|
|||||||
ImageModel::GptImage1 => None,
|
ImageModel::GptImage1 => None,
|
||||||
ImageModel::GptImage1Mini => None,
|
ImageModel::GptImage1Mini => None,
|
||||||
ImageModel::GptImage1dot5 => None,
|
ImageModel::GptImage1dot5 => None,
|
||||||
|
ImageModel::GptImage2 => None,
|
||||||
ImageModel::Other(_) => Some(ImageResponseFormat::B64Json),
|
ImageModel::Other(_) => Some(ImageResponseFormat::B64Json),
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -647,6 +650,7 @@ fn get_sticker_size(model: &ImageModel) -> async_openai::types::images::ImageSiz
|
|||||||
ImageModel::GptImage1 => ImageSize::S1024x1024,
|
ImageModel::GptImage1 => ImageSize::S1024x1024,
|
||||||
ImageModel::GptImage1Mini => ImageSize::S1024x1024,
|
ImageModel::GptImage1Mini => ImageSize::S1024x1024,
|
||||||
ImageModel::GptImage1dot5 => ImageSize::S1024x1024,
|
ImageModel::GptImage1dot5 => ImageSize::S1024x1024,
|
||||||
|
ImageModel::GptImage2 => ImageSize::S1024x1024,
|
||||||
ImageModel::Other(_) => ImageSize::S1024x1024,
|
ImageModel::Other(_) => ImageSize::S1024x1024,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ use super::super::AgentInstantiationResult;
|
|||||||
use super::ConfigTrait;
|
use super::ConfigTrait;
|
||||||
use super::controller::ControllerType;
|
use super::controller::ControllerType;
|
||||||
|
|
||||||
pub const OPENAI_IMAGE_MODEL_GPT_IMAGE_1_DOT_5: &str = "gpt-image-1.5";
|
pub const OPENAI_IMAGE_MODEL_GPT_IMAGE_2: &str = "gpt-image-2";
|
||||||
|
|
||||||
pub fn create_controller_from_yaml_value_config(
|
pub fn create_controller_from_yaml_value_config(
|
||||||
agent_id: &str,
|
agent_id: &str,
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ fn agent_config_parsing_works() {
|
|||||||
let sample_config = crate::agent::default_config_for_provider(&provider);
|
let sample_config = crate::agent::default_config_for_provider(&provider);
|
||||||
let sample_config_pretty_yaml = serde_yaml_ng::to_string(&sample_config).unwrap();
|
let sample_config_pretty_yaml = serde_yaml_ng::to_string(&sample_config).unwrap();
|
||||||
|
|
||||||
let test_cases = vec![
|
let test_cases = [
|
||||||
// Invalid input
|
// Invalid input
|
||||||
TestCase {
|
TestCase {
|
||||||
input: r#"Hello"#.to_owned(),
|
input: r#"Hello"#.to_owned(),
|
||||||
|
|||||||
@@ -105,7 +105,8 @@ pub mod test {
|
|||||||
|
|
||||||
let bpe = super::get_bpe_for_model(model);
|
let bpe = super::get_bpe_for_model(model);
|
||||||
|
|
||||||
let max_response_tokens: Option<u32> = Some(5);
|
let max_response_tokens_value: u32 = 5;
|
||||||
|
let max_response_tokens: Option<u32> = Some(max_response_tokens_value);
|
||||||
|
|
||||||
let prompt = super::Message {
|
let prompt = super::Message {
|
||||||
author: super::Author::Prompt,
|
author: super::Author::Prompt,
|
||||||
@@ -193,7 +194,7 @@ pub mod test {
|
|||||||
&Some(prompt),
|
&Some(prompt),
|
||||||
conversation_messages,
|
conversation_messages,
|
||||||
max_response_tokens,
|
max_response_tokens,
|
||||||
prompt_length + max_response_tokens.unwrap_or(0) + forth_length + third_length,
|
prompt_length + max_response_tokens_value + forth_length + third_length,
|
||||||
);
|
);
|
||||||
|
|
||||||
assert_eq!(2, new_conversation_messages.len());
|
assert_eq!(2, new_conversation_messages.len());
|
||||||
@@ -215,7 +216,8 @@ pub mod test {
|
|||||||
|
|
||||||
let bpe = super::get_bpe_for_model(model);
|
let bpe = super::get_bpe_for_model(model);
|
||||||
|
|
||||||
let max_response_tokens: Option<u32> = Some(5);
|
let max_response_tokens_value: u32 = 5;
|
||||||
|
let max_response_tokens: Option<u32> = Some(max_response_tokens_value);
|
||||||
|
|
||||||
let prompt = super::Message {
|
let prompt = super::Message {
|
||||||
author: super::Author::User,
|
author: super::Author::User,
|
||||||
@@ -303,7 +305,7 @@ pub mod test {
|
|||||||
&Some(prompt),
|
&Some(prompt),
|
||||||
conversation_messages,
|
conversation_messages,
|
||||||
max_response_tokens,
|
max_response_tokens,
|
||||||
prompt_length + max_response_tokens.unwrap_or(0) + forth_length + third_length,
|
prompt_length + max_response_tokens_value + forth_length + third_length,
|
||||||
);
|
);
|
||||||
|
|
||||||
assert_eq!(2, new_conversation_messages.len());
|
assert_eq!(2, new_conversation_messages.len());
|
||||||
|
|||||||
Reference in New Issue
Block a user