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