Evaluating Bitrouter Routes
bitrouter/bitrouter
A skill your agent uses when evaluating BitRouter route decisions or Eval Exchange subjects with task-native verifiers, human reviewers, private enterprise evaluators, agentic judges, or genuinely…
LiteLLM-RS Provider 开发指南。用于添加新 provider(Tier 1 catalog 条目或 Tier 2 代码实现)、统一错误处理,或把旧错误枚举迁移到 ProviderError。
$ npx skills add majiayu000/litellm-rs --skill provider-development -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install majiayu000/litellm-rs provider-development --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/majiayu000/litellm-rs.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/provider-development .claude/skills/provider-development && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "provider-development" agent skill from https://github.com/majiayu000/litellm-rs/tree/main/.claude/skills/provider-development into .claude/skills/provider-development/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "provider-development", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/majiayu000/litellm-rs/tree/main/.claude/skills/provider-developmentType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add majiayu000/litellm-rs --skill provider-development -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install majiayu000/litellm-rs provider-development --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/majiayu000/litellm-rs.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/provider-development .agents/skills/provider-development && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "provider-development" agent skill from https://github.com/majiayu000/litellm-rs/tree/main/.claude/skills/provider-development into .agents/skills/provider-development/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "provider-development", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add majiayu000/litellm-rs --skill provider-development -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install majiayu000/litellm-rs provider-development --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/majiayu000/litellm-rs.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/provider-development .cursor/skills/provider-development && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "provider-development" agent skill from https://github.com/majiayu000/litellm-rs/tree/main/.claude/skills/provider-development into .cursor/skills/provider-development/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "provider-development", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/majiayu000/litellm-rs.git --path .claude/skills/provider-development--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add majiayu000/litellm-rs --skill provider-development -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install majiayu000/litellm-rs provider-development --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/majiayu000/litellm-rs.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/provider-development .gemini/skills/provider-development && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "provider-development" agent skill from https://github.com/majiayu000/litellm-rs/tree/main/.claude/skills/provider-development into .gemini/skills/provider-development/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "provider-development", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install majiayu000/litellm-rs provider-developmentInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add majiayu000/litellm-rs --skill provider-development -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/majiayu000/litellm-rs.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/provider-development .github/skills/provider-development && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "provider-development" agent skill from https://github.com/majiayu000/litellm-rs/tree/main/.claude/skills/provider-development into .github/skills/provider-development/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "provider-development", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add majiayu000/litellm-rs --skill provider-development -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install majiayu000/litellm-rs provider-development --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/majiayu000/litellm-rs.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/provider-development .opencode/skills/provider-development && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "provider-development" agent skill from https://github.com/majiayu000/litellm-rs/tree/main/.claude/skills/provider-development into .opencode/skills/provider-development/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "provider-development", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
provider-developmentLiteLLM-RS Provider 开发指南。用于添加新 provider(Tier 1 catalog 条目或 Tier 2 代码实现)、统一错误处理,或把旧错误枚举迁移到 ProviderError。
Provider Development is an agent skill from majiayu000/litellm-rs. LiteLLM-RS Provider 开发指南。用于添加新 provider(Tier 1 catalog 条目或 Tier 2 代码实现)、统一错误处理,或把旧错误枚举迁移到 ProviderError。
Its SKILL.md is about 3.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files (for example `reference/industry-notes-and-faq.md` and `reference/migration-and-checklists.md`).
It sits in AI & LLM Engineering, covering Model routing and gateways. It works with OpenAI and Rust. The repository describes itself as: Self-hosted Rust LLM gateway with OpenAI-compatible APIs, load balancing, failover, and a reusable Rust kernel. The licence is MIT.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit fb065f0. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are rust and bash).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
NAME_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Provider Development loads about 3.1k tokens when it runs. Until then it costs about 31 tokens; SKILL.md has 207 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from majiayu000/litellm-rs at commit fb065f0, republished under its MIT licence (© majiayu000). 207 words, ~3,080 tokens.
.claude/skills/provider-development/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.本项目采用统一错误 + 闭集 Provider 枚举派发。LLMProvider
统一各实现的方法签名,但路由部署存放的是具体 Provider 枚举,而不是
dyn LLMProvider trait object。
┌────────────────────────────────────────────────────────┐
│ 网关层 (Gateway) │
│ LiteLLMError = GatewayError(18 个变体) │
│ - 别名定义: core/types/errors/litellm.rs │
│ - 枚举定义: utils/error/gateway_error/types.rs │
│ - 处理路由、配置、认证等网关级错误 │
└────────────────────────────────────────────────────────┘
↓
┌────────────────────────────────────────────────────────┐
│ Provider 层 │
│ ProviderError(经 unified_provider 模块导出, │
│ 定义于 unified_provider_error.rs) │
│ - 统一 provider 错误,24 个变体 │
│ - 每个变体包含 provider: &'static str 字段 │
│ - 丰富的工厂方法和上下文信息 │
└────────────────────────────────────────────────────────┘
↓
┌────────────────────────────────────────────────────────┐
│ 各 Provider 实现(两层结构) │
│ - Tier 1: registry/catalog.rs 目录条目(def_chat 等),│
│ 经 OpenAILikeProvider 路由,无专属代码 │
│ - Tier 2: 代码型 provider 目录, │
│ 实现 LLMProvider 并注册到闭集 Provider 枚举 │
└────────────────────────────────────────────────────────┘Provider 数量随版本演进,不在此硬编码。枚举方法:
# 两个计数都会包含各自的 helper 定义,因此分别减 1
grep -c 'def_chat(' src/core/providers/registry/catalog.rs
grep -c 'def_local_chat(' src/core/providers/registry/catalog.rs
# 排除基础设施目录后再人工确认代码型 provider
ls -d src/core/providers/*/ | grep -vE '/(base|factory|macros|registry)/'Provider 定义在 src/core/providers/mod.rs,由本地 dispatch_provider! 宏把
方法转发给具体实现。宏分别维护 sync、async_err、value 和
async_direct 四类展开臂;Router 的 deployment 持有这个枚举,因此 Tier 2 provider
仅实现 LLMProvider 还不够;还必须添加枚举变体、dispatch/factory 分支及模块
注册。Tier 1 catalog provider 复用现有的 Provider::OpenAILike 变体,所以无需
为每个兼容端点增加枚举成员。
LLMProvider 使用原生 async fn 且没有关联错误类型;所有可失败的方法直接
返回 ProviderError。当前 trait 不是路由层的动态插件边界。真实的 trait object
仅出现在局部边界,例如 Box<dyn ErrorMapper<ProviderError>> 和 boxed streaming
Stream。仓库没有可支持具体纳秒、二进制大小或编译耗时对比的基准,因此本文
不提供这些数字。
pub enum ProviderError {
// 认证与授权
Authentication { provider, message },
// 限流与配额
RateLimit { provider, message, retry_after, rpm_limit, tpm_limit, current_usage },
QuotaExceeded { provider, message },
// 模型与请求
ModelNotFound { provider, model },
InvalidRequest { provider, message },
// 网络与可用性
Network { provider, message },
Timeout { provider, message },
ProviderUnavailable { provider, message },
// 功能支持
NotSupported { provider, feature },
NotImplemented { provider, feature },
FeatureDisabled { provider, feature },
// 内容与长度
ContextLengthExceeded { provider, max, actual },
TokenLimitExceeded { provider, message },
ContentFiltered { provider, reason, policy_violations, potentially_retryable },
// 配置与序列化
Configuration { provider, message },
Serialization { provider, message },
// 高级错误
ApiError { provider, status, message },
DeploymentError { provider, deployment, message },
ResponseParsing { provider, message },
RoutingError { provider, attempted_providers, message },
TransformationError { provider, from_format, to_format, message },
Streaming { provider, stream_type, position, last_chunk, message },
Cancelled { provider, operation_type, cancellation_reason },
Other { provider, message },
}// 基础工厂方法
ProviderError::authentication("openai", "Invalid API key")
ProviderError::rate_limit("anthropic", Some(60))
ProviderError::model_not_found("groq", "llama-invalid")
ProviderError::network("azure", "Connection timeout")
// 增强工厂方法
ProviderError::rate_limit_with_limits("openai", Some(60), Some(100), Some(40000), None)
ProviderError::context_length_exceeded("claude", 100000, 150000)
ProviderError::content_filtered("openai", "Violence detected", Some(vec!["violence"]), Some(false))
ProviderError::streaming_error("fireworks", "chat", Some(42), None, "Connection reset")src/core/providers/registry/catalog.rs 加一条 def_chat("name", "Display Name", "https://api.example.com/v1", "NAME_API_KEY"),工厂自动经 OpenAILikeProvider 路由,无需新建目录(本地部署类用 def_local_chat)。src/core/providers/my_provider/
├── mod.rs # 模块导出
├── config.rs # ProviderConfig 实现
├── provider.rs # LLMProvider 实现
├── model_info.rs # 模型定义和能力
└── streaming.rs # SSE 流解析(可选)实现 crate::core::traits::provider::ProviderConfig(定义于 src/core/traits/provider/config.rs,必需方法:validate / api_key / api_base / timeout / max_retries)。参考真实实现:src/core/providers/cloudflare/config.rs。
// config.rs
use crate::core::traits::provider::ProviderConfig;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MyProviderConfig {
pub api_key: Option<String>,
pub api_base: Option<String>,
#[serde(default = "default_timeout")]
pub timeout: u64,
#[serde(default = "default_max_retries")]
pub max_retries: u32,
}
fn default_timeout() -> u64 { 60 }
fn default_max_retries() -> u32 { 3 }
impl Default for MyProviderConfig {
fn default() -> Self {
Self {
api_key: std::env::var("MY_PROVIDER_API_KEY").ok(),
api_base: None,
timeout: default_timeout(),
max_retries: default_max_retries(),
}
}
}
impl ProviderConfig for MyProviderConfig {
fn validate(&self) -> Result<(), String> {
self.validate_standard("my_provider")
}
fn api_key(&self) -> Option<&str> { self.api_key.as_deref() }
fn api_base(&self) -> Option<&str> { self.api_base.as_deref() }
fn timeout(&self) -> std::time::Duration { std::time::Duration::from_secs(self.timeout) }
fn max_retries(&self) -> u32 { self.max_retries }
}LLMProvider trait(src/core/traits/provider/llm_provider/trait_definition.rs)没有关联类型:方法签名直接使用 ProviderError,错误映射通过 get_error_mapper() 提供;trait 方法是原生 async fn,实现时无需 #[async_trait] 宏。下面是完整的传输 helper;chat_completion 还需要把成功 JSON 转成 ChatResponse,可参考 cloudflare/provider.rs。
// provider.rs
use super::{get_models, MyProviderConfig};
use crate::core::providers::base::{header, BaseConfig, GlobalPoolManager, HttpMethod};
use crate::core::providers::unified_provider::ProviderError;
use crate::core::traits::provider::ProviderConfig;
use crate::core::types::{chat::ChatRequest, model::ModelInfo};
use serde_json::Value;
use std::sync::Arc;
const PROVIDER_NAME: &str = "my_provider";
#[derive(Debug, Clone)]
pub struct MyProvider {
config: MyProviderConfig,
pool_manager: Arc<GlobalPoolManager>,
models: Vec<ModelInfo>,
}
impl MyProvider {
pub async fn new(config: MyProviderConfig) -> Result<Self, ProviderError> {
config.validate()
.map_err(|e| ProviderError::configuration(PROVIDER_NAME, e))?;
let http_config = BaseConfig {
api_key: config.api_key.clone(),
api_base: config.api_base.clone(),
timeout: config.timeout,
max_retries: config.max_retries,
..BaseConfig::default()
};
let pool_manager = Arc::new(GlobalPoolManager::new_for_provider(
PROVIDER_NAME,
http_config,
)?);
Ok(Self { config, pool_manager, models: get_models() })
}
async fn execute_chat_json(&self, request: &ChatRequest) -> Result<Value, ProviderError> {
let api_key = self.config.api_key()
.ok_or_else(|| ProviderError::authentication(PROVIDER_NAME, "API key required"))?;
let api_base = self.config.api_base()
.ok_or_else(|| ProviderError::configuration(PROVIDER_NAME, "API base required"))?;
let url = format!("{}/chat/completions", api_base.trim_end_matches('/'));
let body = serde_json::to_value(request)
.map_err(|e| ProviderError::serialization(PROVIDER_NAME, e.to_string()))?;
let headers = vec![
header("Authorization", format!("Bearer {}", api_key)),
header("Content-Type", "application/json".to_string()),
];
let response = self.pool_manager
.execute_request(&url, HttpMethod::POST, headers, Some(body))
.await?;
let status = response.status();
if !status.is_success() {
let response_body = response.text().await
.map_err(|e| ProviderError::network(PROVIDER_NAME, e.to_string()))?;
return Err(self.map_http_error(status.as_u16(), &response_body));
}
let response_body = response.bytes().await
.map_err(|e| ProviderError::network(PROVIDER_NAME, e.to_string()))?;
serde_json::from_slice(&response_body)
.map_err(|e| ProviderError::response_parsing(PROVIDER_NAME, e.to_string()))
}
fn map_http_error(&self, status: u16, body: &str) -> ProviderError {
use crate::core::providers::shared::parse_retry_after_from_body;
match status {
401 => ProviderError::authentication(PROVIDER_NAME, "Invalid API key"),
404 => ProviderError::model_not_found(PROVIDER_NAME, body),
429 => ProviderError::rate_limit(PROVIDER_NAME, parse_retry_after_from_body(body)),
400 => ProviderError::invalid_request(PROVIDER_NAME, body),
500..=599 => ProviderError::provider_unavailable(PROVIDER_NAME, body),
_ => ProviderError::api_error(PROVIDER_NAME, status, body),
}
}
}// model_info.rs
use crate::core::types::model::{ModelInfo, ProviderCapability};
pub fn get_models() -> Vec<ModelInfo> {
vec![
ModelInfo {
id: "my-model-large".to_string(),
name: "My Model Large".to_string(),
provider: "my_provider".to_string(),
max_context_length: 128000,
max_output_length: Some(4096),
supports_streaming: true,
supports_tools: true,
supports_multimodal: false,
input_cost_per_1k_tokens: Some(0.01),
output_cost_per_1k_tokens: Some(0.03),
currency: "USD".to_string(),
capabilities: vec![
ProviderCapability::ChatCompletion,
ProviderCapability::ChatCompletionStream,
ProviderCapability::ToolCalling,
],
..Default::default()
},
]
}// src/core/providers/my_provider/mod.rs
mod config;
mod model_info;
mod provider;
pub use config::MyProviderConfig;
pub use provider::MyProvider;
pub use model_info::get_models;Tier 2 provider 接入闭合枚举(无法运行时注册,需以下 crate 内改动,参考 cloudflare 的接线方式):
src/core/providers/mod.rs 声明模块并给 Provider 增加带相同 feature gate 的变体。dispatch_provider! 的 sync、async_err、value、async_direct 四个 @expand 臂,并补齐 Provider::name() 和 provider_type() 分支。provider_type.rs 增加 ProviderType 变体,并加入 all_non_custom_provider_types();字符串转换由 registry 元数据派生,不要另写一套别名表。registry/types.rs 的 PROVIDER_TYPE_REGISTRY 增加 canonical name、aliases、catalog_backed 和正确的 ProviderDispatchKind。
feature-gated 原生实现应复用或新增 cfg-sensitive dispatch-kind helper,分别表达启用与禁用时的模式;registry entry 本身没有 feature 字段。factory/builder.rs 增加配置构造器,在 factory/registry.rs 增加工厂 match 分支;module、Provider、dispatch 与 factory wiring 使用同步的 cfg gate。© majiayu000, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 2 other files in .claude/skills/provider-development of majiayu000/litellm-rs.
Open the folder on GitHubat commit fb065f0
Provider Development next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Provider Development this skillmajiayu000/litellm-rs | 117 | — | ~3.1k | Automated safety check: Pass | MIT | |
| Evaluating Bitrouter Routesbitrouter/bitrouter | 235 | — | ~1.2k | Automated safety check: Pass | Apache-2.0 | |
| Run Bitrouter Benchmarkbitrouter/bitrouter | 235 | — | ~2.2k | Automated safety check: Pass | Apache-2.0 | |
| Run Shuntpleaseai/shunt | 281 | — | ~2.6k | Automated safety check: Pass | Apache-2.0 | |
| 9Router AI Gateway Setupdecolua/9router | 30k | — | ~744 | Automated safety check: Pass | MIT | |
| 9Router Chat Completionsdecolua/9router | 30k | — | ~635 | Automated safety check: Pass | MIT |
bitrouter/bitrouter
A skill your agent uses when evaluating BitRouter route decisions or Eval Exchange subjects with task-native verifiers, human reviewers, private enterprise evaluators, agentic judges, or genuinely…
bitrouter/bitrouter
A skill your agent uses when a user wants to run, compare, resume, audit, share, or submit a Harbor benchmark through BitRouter, including choosing a Harbor dataset and agent, confirming routed…
pleaseai/shunt
Build, launch, and drive shunt — the Claude Code LLM gateway (a Rust/axum Anthropic-Messages proxy).
decolua/9router
Sets up access to the 9Router AI gateway, an OpenAI-compatible REST endpoint for chat, images, speech, embeddings, web search and web fetch, and indexes its capability skills.
decolua/9router
Sends chat and code-generation requests through a 9Router gateway using OpenAI or Anthropic message formats, with streaming and auto-fallback combos.
2FastLabs/agent-squad
Map of the agent-squad Python framework for async multi-agent orchestration: which agent, classifier, storage and tool provider to pick, and the pitfalls to avoid.
majiayu000/litellm-rs
LiteLLM-RS Authentication Architecture. An agent skill from majiayu000/litellm-rs.
majiayu000/litellm-rs
LiteLLM-RS response caching architecture. An agent skill from majiayu000/litellm-rs.
majiayu000/litellm-rs
LiteLLM-RS Configuration Architecture. An agent skill from majiayu000/litellm-rs.
majiayu000/litellm-rs
LiteLLM-RS Error Handling Architecture. An agent skill from majiayu000/litellm-rs.
majiayu000/litellm-rs
LiteLLM-RS Observability Architecture. An agent skill from majiayu000/litellm-rs.
majiayu000/litellm-rs
LiteLLM-RS provider system in two tiers - data-driven OpenAI-compatible catalog entries auto-routed through OpenAILikeProvider, plus code-based provider modules implementing the LLMProvider trait…
Categories
LiteLLM-RS Provider 开发指南。用于添加新 provider(Tier 1 catalog 条目或 Tier 2 代码实现)、统一错误处理,或把旧错误枚举迁移到 ProviderError。. Provider Development is an agent skill from majiayu000/litellm-rs.
Provider Development fits situations like: tasks that involve Model routing and gateways.
Run `npx skills add majiayu000/litellm-rs --skill provider-development -a claude-code`. Or copy the skill folder (.claude/skills/provider-development in majiayu000/litellm-rs) into .claude/skills/provider-development in your project. Claude Code loads it when a task matches its description.
Run `npx skills add majiayu000/litellm-rs --skill provider-development -a codex`. Or copy the skill folder (.claude/skills/provider-development in majiayu000/litellm-rs) into .agents/skills/provider-development in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add majiayu000/litellm-rs --skill provider-development -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/provider-development, .gemini/skills/provider-development, .github/skills/provider-development and .opencode/skills/provider-development in your project.
Going by SKILL.md and its folder, Provider Development needs credentials named NAME_API_KEY. Our summary lists: A credential in NAME_API_KEY; A credential in MY_PROVIDER_API_KEY.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Provider Development is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.1k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Provider Development: Evaluating Bitrouter Routes (bitrouter/bitrouter, 235 stars), Run Bitrouter Benchmark (bitrouter/bitrouter, 235 stars), Run Shunt (pleaseai/shunt, 281 stars) and 9Router AI Gateway Setup (decolua/9router, 30k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
majiayu000 (a GitHub user) maintains it in majiayu000/litellm-rs, which has 117 GitHub stars. The repository holds 9 skills in this directory. The repository was last updated on October 8, 2026.
Source: majiayu000/litellm-rs on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.