Skip to content

Migration

Migrating to v1.0.x

All Constructors Require Explicit base_url

In v1.0.0 the API was redesigned so every provider constructor takes an explicit base_url. This removes hidden defaults and makes multi-tenant / proxy routing obvious at the call site.

rust
// Before (v0.x)
let client = LlmClient::openai("sk-...")?;
let client = LlmClient::ollama()?;
let client = LlmClient::openai_with_base_url("sk-...", "https://...")?;

// After (v1.x)
let client = LlmClient::openai("sk-...", "https://api.openai.com/v1")?;
let client = LlmClient::ollama("http://localhost:11434")?;
// openai_with_base_url is removed — just use openai(key, url)

All affected constructors:

ProviderOldNew
openaiopenai(key)openai(key, base_url)
anthropicanthropic(key)anthropic(key, base_url)
aliyunaliyun(key)aliyun(key, base_url)
zhipuzhipu(key)zhipu(key, base_url)
ollamaollama()ollama(base_url)
deepseekdeepseek(key)deepseek(key, base_url)
moonshotmoonshot(key)moonshot(key, base_url)
volcenginevolcengine(key)volcengine(key, base_url)
xiaomixiaomi(key)xiaomi(key, base_url)
googlegoogle(key)google(key, base_url)
tencenttencent(id, key)tencent(id, key, base_url)

Deserialize on Protocol Request Types (v1.0.3)

OpenAIRequest, AnthropicRequest, GoogleRequest, OllamaChatRequest and all their nested structs now derive Deserialize in addition to Serialize. This enables reverse proxy / middleware / observability use cases where incoming wire-format bodies need to be parsed.

No breaking change — purely additive.


Migrating to v0.5.0

Multi-Modal Content

v0.5.0 introduced native multi-modal support, changing the Message.content field.

Breaking Change:

  • Message.content is now Vec<MessageBlock> internally.
  • Use helper constructors instead of direct field access.
rust
// Before
let msg = Message { role: Role::User, content: "hello".to_string(), .. };

// After
let msg = Message::user("hello");
// or
let msg = Message::text(Role::User, "hello");

Released under the MIT License.