diff --git a/backend/windmill-api/openapi.yaml b/backend/windmill-api/openapi.yaml index c89d759c41..c96155a91b 100644 --- a/backend/windmill-api/openapi.yaml +++ b/backend/windmill-api/openapi.yaml @@ -12497,7 +12497,7 @@ components: AIProvider: type: string - enum: [openai, anthropic, mistral, deepseek, googleai, groq, openrouter, customai] + enum: [openai, anthropic, mistral, deepseek, googleai, groq, openrouter, togetherai, customai] AIProviderModel: type: object diff --git a/backend/windmill-api/src/ai.rs b/backend/windmill-api/src/ai.rs index 4ff0f77d57..6c66690774 100644 --- a/backend/windmill-api/src/ai.rs +++ b/backend/windmill-api/src/ai.rs @@ -314,6 +314,7 @@ pub enum AIProvider { GoogleAI, Groq, OpenRouter, + TogetherAI, CustomAI, } @@ -326,6 +327,7 @@ impl AIProvider { )), AIProvider::Groq => Ok(Some("https://api.groq.com/openai/v1".to_string())), AIProvider::OpenRouter => Ok(Some("https://openrouter.ai/api/v1".to_string())), + AIProvider::TogetherAI => Ok(Some("https://api.together.xyz/v1".to_string())), AIProvider::Anthropic => Ok(Some("https://api.anthropic.com/v1".to_string())), AIProvider::Mistral => Ok(Some("https://api.mistral.ai/v1".to_string())), AIProvider::CustomAI => Ok(None), @@ -343,6 +345,7 @@ impl TryFrom<&str> for AIProvider { "mistral" => Ok(AIProvider::Mistral), "groq" => Ok(AIProvider::Groq), "openrouter" => Ok(AIProvider::OpenRouter), + "togetherai" => Ok(AIProvider::TogetherAI), "deepseek" => Ok(AIProvider::DeepSeek), "googleai" => Ok(AIProvider::GoogleAI), "customai" => Ok(AIProvider::CustomAI), diff --git a/backend/windmill-api/src/workspaces.rs b/backend/windmill-api/src/workspaces.rs index f82a3a29c6..abd13601e9 100644 --- a/backend/windmill-api/src/workspaces.rs +++ b/backend/windmill-api/src/workspaces.rs @@ -52,9 +52,6 @@ use windmill_git_sync::handle_deployment_metadata; #[cfg(feature = "enterprise")] use windmill_common::utils::require_admin_or_devops; -#[cfg(not(feature = "enterprise"))] -use crate::ai::AIProvider; - use hyper::StatusCode; use serde::{Deserialize, Serialize}; use sqlx::{FromRow, Postgres, Transaction}; @@ -707,15 +704,6 @@ async fn edit_copilot_config( if let Some(ref providers) = ai_config.providers { for provider in providers.keys() { - #[cfg(not(feature = "enterprise"))] - { - if matches!(provider, &AIProvider::CustomAI) { - return Err(Error::BadRequest( - "Custom AI is only available on EE".to_string(), - )); - } - } - AI_KEY_CACHE.remove(&(w_id.clone(), provider.clone())); } } diff --git a/frontend/src/lib/components/copilot/chat/AIChatDisplay.svelte b/frontend/src/lib/components/copilot/chat/AIChatDisplay.svelte index 34815f91ea..cf3b7d92bd 100644 --- a/frontend/src/lib/components/copilot/chat/AIChatDisplay.svelte +++ b/frontend/src/lib/components/copilot/chat/AIChatDisplay.svelte @@ -246,12 +246,14 @@