feat: goose2 add support for custom providers in ui & acp (#8924)

This commit is contained in:
Kalvin C
2026-04-30 14:05:10 -07:00
committed by GitHub
parent 7d69e1448d
commit ef73610cc1
57 changed files with 7047 additions and 854 deletions
+201
View File
@@ -384,6 +384,207 @@ pub struct ProviderConfigChangeResponse {
pub refresh: RefreshProviderInventoryResponse,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
pub struct ProviderCatalogEntryDto {
pub provider_id: String,
pub name: String,
pub format: String,
pub api_url: String,
pub model_count: usize,
pub doc_url: String,
pub env_var: String,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
pub struct ProviderTemplateCapabilitiesDto {
pub tool_call: bool,
pub reasoning: bool,
pub attachment: bool,
pub temperature: bool,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
pub struct ProviderTemplateModelDto {
pub id: String,
pub name: String,
pub context_limit: usize,
pub capabilities: ProviderTemplateCapabilitiesDto,
pub deprecated: bool,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
pub struct ProviderTemplateDto {
pub provider_id: String,
pub name: String,
pub format: String,
pub api_url: String,
pub models: Vec<ProviderTemplateModelDto>,
pub supports_streaming: bool,
pub env_var: String,
pub doc_url: String,
}
/// List custom-provider catalog entries. Omit `format` to list all formats.
#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)]
#[request(
method = "_goose/providers/catalog/list",
response = ProviderCatalogListResponse
)]
#[serde(rename_all = "camelCase")]
pub struct ProviderCatalogListRequest {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub format: Option<String>,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcResponse)]
#[serde(rename_all = "camelCase")]
pub struct ProviderCatalogListResponse {
pub providers: Vec<ProviderCatalogEntryDto>,
}
/// Return the editable template for one catalog provider.
#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)]
#[request(
method = "_goose/providers/catalog/template",
response = ProviderCatalogTemplateResponse
)]
#[serde(rename_all = "camelCase")]
pub struct ProviderCatalogTemplateRequest {
pub provider_id: String,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcResponse)]
#[serde(rename_all = "camelCase")]
pub struct ProviderCatalogTemplateResponse {
pub template: ProviderTemplateDto,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
pub struct CustomProviderConfigDto {
pub provider_id: String,
pub engine: String,
pub display_name: String,
pub api_url: String,
#[serde(default)]
pub models: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub supports_streaming: Option<bool>,
#[serde(default)]
pub headers: HashMap<String, String>,
pub requires_auth: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub catalog_provider_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub base_path: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub api_key_env: Option<String>,
pub api_key_set: bool,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
pub struct CustomProviderUpsertDto {
pub engine: String,
pub display_name: String,
pub api_url: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub api_key: Option<String>,
#[serde(default)]
pub models: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub supports_streaming: Option<bool>,
#[serde(default)]
pub headers: HashMap<String, String>,
pub requires_auth: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub catalog_provider_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub base_path: Option<String>,
}
/// Create a custom provider backed by Goose's declarative provider store.
#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)]
#[request(
method = "_goose/providers/custom/create",
response = CustomProviderCreateResponse
)]
#[serde(rename_all = "camelCase")]
pub struct CustomProviderCreateRequest {
#[serde(flatten)]
pub provider: CustomProviderUpsertDto,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcResponse)]
#[serde(rename_all = "camelCase")]
pub struct CustomProviderCreateResponse {
pub provider_id: String,
pub status: ProviderConfigStatusDto,
pub refresh: RefreshProviderInventoryResponse,
}
/// Read a declarative provider config. Custom configs are editable; bundled configs are read-only.
#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)]
#[request(
method = "_goose/providers/custom/read",
response = CustomProviderReadResponse
)]
#[serde(rename_all = "camelCase")]
pub struct CustomProviderReadRequest {
pub provider_id: String,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcResponse)]
#[serde(rename_all = "camelCase")]
pub struct CustomProviderReadResponse {
pub provider: CustomProviderConfigDto,
pub editable: bool,
pub status: ProviderConfigStatusDto,
}
/// Update a custom provider backed by Goose's declarative provider store.
#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)]
#[request(
method = "_goose/providers/custom/update",
response = CustomProviderUpdateResponse
)]
#[serde(rename_all = "camelCase")]
pub struct CustomProviderUpdateRequest {
pub provider_id: String,
#[serde(flatten)]
pub provider: CustomProviderUpsertDto,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcResponse)]
#[serde(rename_all = "camelCase")]
pub struct CustomProviderUpdateResponse {
pub provider_id: String,
pub status: ProviderConfigStatusDto,
pub refresh: RefreshProviderInventoryResponse,
}
/// Delete a custom provider from Goose's declarative provider store.
#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcRequest)]
#[request(
method = "_goose/providers/custom/delete",
response = CustomProviderDeleteResponse
)]
#[serde(rename_all = "camelCase")]
pub struct CustomProviderDeleteRequest {
pub provider_id: String,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema, JsonRpcResponse)]
#[serde(rename_all = "camelCase")]
pub struct CustomProviderDeleteResponse {
pub provider_id: String,
pub refresh: RefreshProviderInventoryResponse,
}
/// The type of source entity.
#[derive(
Debug, Default, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize, JsonSchema,