mirror of
				https://github.com/meilisearch/meilisearch.git
				synced 2025-10-31 16:06:31 +00:00 
			
		
		
		
	Fix the chat, chats, and chatsSettings actions
This commit is contained in:
		| @@ -125,6 +125,13 @@ impl HeedAuthStore { | ||||
|                 Action::MetricsAll => { | ||||
|                     actions.insert(Action::MetricsGet); | ||||
|                 } | ||||
|                 Action::ChatsSettingsAll => { | ||||
|                     actions.extend([ | ||||
|                         Action::ChatsSettingsGet, | ||||
|                         Action::ChatsSettingsUpdate, | ||||
|                         Action::ChatsSettingsDelete, | ||||
|                     ]); | ||||
|                 } | ||||
|                 other => { | ||||
|                     actions.insert(*other); | ||||
|                 } | ||||
|   | ||||
| @@ -53,7 +53,7 @@ pub struct CreateApiKey { | ||||
|     #[schema(example = json!(["documents.add"]))] | ||||
|     #[deserr(error = DeserrJsonError<InvalidApiKeyActions>, missing_field_error = DeserrJsonError::missing_api_key_actions)] | ||||
|     pub actions: Vec<Action>, | ||||
|     /// A list of accesible indexes permitted for the key. `["*"]` for all indexes. The `*` character can be used as a wildcard when located at the last position. e.g. `products_*` to allow access to all indexes whose names start with `products_`. | ||||
|     /// A list of accessible indexes permitted for the key. `["*"]` for all indexes. The `*` character can be used as a wildcard when located at the last position. e.g. `products_*` to allow access to all indexes whose names start with `products_`. | ||||
|     #[deserr(error = DeserrJsonError<InvalidApiKeyIndexes>, missing_field_error = DeserrJsonError::missing_api_key_indexes)] | ||||
|     #[schema(value_type = Vec<String>, example = json!(["products"]))] | ||||
|     pub indexes: Vec<IndexUidPattern>, | ||||
| @@ -166,7 +166,7 @@ impl Key { | ||||
|             name: Some("Default Chat API Key".to_string()), | ||||
|             description: Some("Use it to chat and search from the frontend".to_string()), | ||||
|             uid, | ||||
|             actions: vec![Action::Chat, Action::Search], | ||||
|             actions: vec![Action::ChatCompletions, Action::Search], | ||||
|             indexes: vec![IndexUidPattern::all()], | ||||
|             expires_at: None, | ||||
|             created_at: now, | ||||
| @@ -324,9 +324,9 @@ pub enum Action { | ||||
|     #[deserr(rename = "network.update")] | ||||
|     NetworkUpdate, | ||||
|     // TODO should we rename it chatCompletions.get ? | ||||
|     #[serde(rename = "chat")] | ||||
|     #[deserr(rename = "chat")] | ||||
|     Chat, | ||||
|     #[serde(rename = "chatCompletion")] | ||||
|     #[deserr(rename = "chatCompletion")] | ||||
|     ChatCompletions, | ||||
|     #[serde(rename = "chats.get")] | ||||
|     #[deserr(rename = "chats.get")] | ||||
|     ChatsGet, | ||||
| @@ -367,7 +367,7 @@ impl Action { | ||||
|             SETTINGS_ALL => Some(Self::SettingsAll), | ||||
|             SETTINGS_GET => Some(Self::SettingsGet), | ||||
|             SETTINGS_UPDATE => Some(Self::SettingsUpdate), | ||||
|             CHAT => Some(Self::Chat), | ||||
|             CHAT_COMPLETIONS => Some(Self::ChatCompletions), | ||||
|             CHATS_GET => Some(Self::ChatsGet), | ||||
|             CHATS_SETTINGS_ALL => Some(Self::ChatsSettingsAll), | ||||
|             CHATS_SETTINGS_GET => Some(Self::ChatsSettingsGet), | ||||
| @@ -438,7 +438,7 @@ pub mod actions { | ||||
|     pub const NETWORK_GET: u8 = NetworkGet.repr(); | ||||
|     pub const NETWORK_UPDATE: u8 = NetworkUpdate.repr(); | ||||
|  | ||||
|     pub const CHAT: u8 = Chat.repr(); | ||||
|     pub const CHAT_COMPLETIONS: u8 = ChatCompletions.repr(); | ||||
|     pub const CHATS_GET: u8 = ChatsGet.repr(); | ||||
|     pub const CHATS_SETTINGS_ALL: u8 = ChatsSettingsAll.repr(); | ||||
|     pub const CHATS_SETTINGS_GET: u8 = ChatsSettingsGet.repr(); | ||||
|   | ||||
| @@ -309,7 +309,7 @@ pub mod policies { | ||||
|             token: &str, | ||||
|         ) -> Result<TenantTokenOutcome, AuthError> { | ||||
|             // Only search and chat actions can be accessed by a tenant token. | ||||
|             if A != actions::SEARCH && A != actions::CHAT { | ||||
|             if A != actions::SEARCH && A != actions::CHAT_COMPLETIONS { | ||||
|                 return Ok(TenantTokenOutcome::NotATenantToken); | ||||
|             } | ||||
|  | ||||
|   | ||||
| @@ -56,7 +56,7 @@ pub fn configure(cfg: &mut web::ServiceConfig) { | ||||
|  | ||||
| /// Get a chat completion | ||||
| async fn chat( | ||||
|     index_scheduler: GuardedData<ActionPolicy<{ actions::CHAT }>, Data<IndexScheduler>>, | ||||
|     index_scheduler: GuardedData<ActionPolicy<{ actions::CHAT_COMPLETIONS }>, Data<IndexScheduler>>, | ||||
|     auth_ctrl: web::Data<AuthController>, | ||||
|     chats_param: web::Path<ChatsParam>, | ||||
|     req: HttpRequest, | ||||
| @@ -208,7 +208,10 @@ fn setup_search_tool( | ||||
|  | ||||
| /// Process search request and return formatted results | ||||
| async fn process_search_request( | ||||
|     index_scheduler: &GuardedData<ActionPolicy<{ actions::CHAT }>, Data<IndexScheduler>>, | ||||
|     index_scheduler: &GuardedData< | ||||
|         ActionPolicy<{ actions::CHAT_COMPLETIONS }>, | ||||
|         Data<IndexScheduler>, | ||||
|     >, | ||||
|     auth_ctrl: web::Data<AuthController>, | ||||
|     search_queue: &web::Data<SearchQueue>, | ||||
|     auth_token: &str, | ||||
| @@ -288,7 +291,7 @@ async fn process_search_request( | ||||
| } | ||||
|  | ||||
| async fn non_streamed_chat( | ||||
|     index_scheduler: GuardedData<ActionPolicy<{ actions::CHAT }>, Data<IndexScheduler>>, | ||||
|     index_scheduler: GuardedData<ActionPolicy<{ actions::CHAT_COMPLETIONS }>, Data<IndexScheduler>>, | ||||
|     auth_ctrl: web::Data<AuthController>, | ||||
|     search_queue: web::Data<SearchQueue>, | ||||
|     workspace_uid: &str, | ||||
| @@ -388,7 +391,7 @@ async fn non_streamed_chat( | ||||
| } | ||||
|  | ||||
| async fn streamed_chat( | ||||
|     index_scheduler: GuardedData<ActionPolicy<{ actions::CHAT }>, Data<IndexScheduler>>, | ||||
|     index_scheduler: GuardedData<ActionPolicy<{ actions::CHAT_COMPLETIONS }>, Data<IndexScheduler>>, | ||||
|     auth_ctrl: web::Data<AuthController>, | ||||
|     search_queue: web::Data<SearchQueue>, | ||||
|     workspace_uid: &str, | ||||
| @@ -463,7 +466,10 @@ async fn streamed_chat( | ||||
| /// and report progress and errors. | ||||
| #[allow(clippy::too_many_arguments)] | ||||
| async fn run_conversation<C: Config>( | ||||
|     index_scheduler: &GuardedData<ActionPolicy<{ actions::CHAT }>, Data<IndexScheduler>>, | ||||
|     index_scheduler: &GuardedData< | ||||
|         ActionPolicy<{ actions::CHAT_COMPLETIONS }>, | ||||
|         Data<IndexScheduler>, | ||||
|     >, | ||||
|     auth_ctrl: &web::Data<AuthController>, | ||||
|     search_queue: &web::Data<SearchQueue>, | ||||
|     auth_token: &str, | ||||
| @@ -589,7 +595,10 @@ async fn run_conversation<C: Config>( | ||||
|  | ||||
| #[allow(clippy::too_many_arguments)] | ||||
| async fn handle_meili_tools( | ||||
|     index_scheduler: &GuardedData<ActionPolicy<{ actions::CHAT }>, Data<IndexScheduler>>, | ||||
|     index_scheduler: &GuardedData< | ||||
|         ActionPolicy<{ actions::CHAT_COMPLETIONS }>, | ||||
|         Data<IndexScheduler>, | ||||
|     >, | ||||
|     auth_ctrl: &web::Data<AuthController>, | ||||
|     search_queue: &web::Data<SearchQueue>, | ||||
|     auth_token: &str, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user