19 private const AI_TEXT_CATEGORY =
'text';
20 private const DEFAULT_COPILOT_ENABLED =
true;
21 private const SETTING_COPILOT_CHAT =
'im_allow_chat_answer_generate';
22 private const PORTAL_ZONE_BLACKLIST = [
'cn'];
24 private static ?
bool $isActive =
null;
25 private static ?
bool $isAvailable =
null;
29 self::$isActive ??= $this->isActiveInternal();
31 return self::$isActive;
36 self::$isAvailable ??= $this->isAvailableInternal();
38 return self::$isAvailable;
47 if (!empty(Engine::getListAvailable(self::AI_TEXT_CATEGORY)))
50 'title' => Loc::getMessage(
'IM_RESTRICTION_COPILOT_GROUP_MSGVER_1'),
51 'description' => Loc::getMessage(
'IM_RESTRICTION_COPILOT_DESCRIPTION'),
52 'helpdesk' =>
'18505482',
55 $items[self::SETTING_COPILOT_CHAT] = [
56 'group' =>
'im_copilot_chat',
57 'title' => Loc::getMessage(
'IM_RESTRICTION_COPILOT_TITLE'),
58 'header' => Loc::getMessage(
'IM_RESTRICTION_COPILOT_HEADER'),
59 'type' => Type::BOOLEAN,
60 'default' => self::DEFAULT_COPILOT_ENABLED,
63 $items[self::SETTING_COPILOT_CHAT_PROVIDER] = array_merge(
65 'group' =>
'im_copilot_chat',
66 'title' => Loc::getMessage(
'IM_RESTRICTION_COPILOT_PROVIDER_TITLE'),
68 Defaults::getProviderSelectFieldParams(self::AI_TEXT_CATEGORY)
76 'im_copilot_chat' => [
77 self::SETTING_COPILOT_CHAT => [
78 self::SETTING_COPILOT_CHAT_PROVIDER,
87 private function isActiveInternal(): bool
90 !Loader::includeModule(
'ai')
98 $engine = Engine::getListAvailable(self::AI_TEXT_CATEGORY);
104 return $this->isCopilotOptionEnabled();
107 private function isCopilotOptionEnabled(): bool
111 return (
bool)(
$settings[self::SETTING_COPILOT_CHAT] ?? self::DEFAULT_COPILOT_ENABLED);
114 private function isAvailableInternal(): bool
119 return !in_array(
$portalZone, self::PORTAL_ZONE_BLACKLIST,
true);