1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
ai.php
См. документацию.
1<?php
2
4
5use Bitrix\AI\Context;
6use Bitrix\AI\Engine;
7use Bitrix\AI\Engine\IEngine;
8use Bitrix\AI\Quality;
9use Bitrix\AI\Tuning;
18
19class Ai
20{
21 public const TUNING_CODE_GROUP = 'landing';
22
23 private const TUNING_CODE_ALLOW_COPILOT = 'landing_allow_copilot';
24 private const TUNING_CODE_IMAGE_PROVIDER = 'landing_image_provider';
25 private const TUNING_CODE_TEXT_PROVIDER = 'landing_text_provider';
26
27 public const TUNING_CODE_ALLOW_SITE_COPILOT = 'landing_allow_site';
28 public const TUNING_CODE_SITE_IMAGE_PROVIDER = 'landing_site_image_provider';
29 public const TUNING_CODE_SITE_TEXT_PROVIDER = 'landing_site_text_provider';
30
31 private const NOT_ALLOWED_ZONES_FOR_IMAGE = [];
32 private const NOT_ALLOWED_ZONES_FOR_TEXT = ['cn'];
33
38 public static function isImageAvailable(): bool
39 {
40 if (!Loader::includeModule('ai'))
41 {
42 return false;
43 }
44
45 $engine = Engine::getByCategory('image', Context::getFake());
46 if (!$engine)
47 {
48 return false;
49 }
50
51 if (in_array(Manager::getZone(), self::NOT_ALLOWED_ZONES_FOR_IMAGE, true))
52 {
53 return false;
54 }
55
56 return true;
57 }
58
63 public static function isImageActive(): bool
64 {
65 if (!self::isImageAvailable())
66 {
67 return false;
68 }
69
70 $default = false;
71 $setting = (new Tuning\Manager())->getItem(self::TUNING_CODE_ALLOW_COPILOT);
72
73 return $setting ? (bool)$setting->getValue() : $default;
74 }
75
80 public static function isTextAvailable(): bool
81 {
82 if (!Loader::includeModule('ai'))
83 {
84 return false;
85 }
86
87 $engine = Engine::getByCategory('text', Context::getFake());
88 if (!$engine)
89 {
90 return false;
91 }
92
93 if (in_array(Manager::getZone(), self::NOT_ALLOWED_ZONES_FOR_TEXT, true))
94 {
95 return false;
96 }
97
98 return true;
99 }
100
105 public static function isCopilotAvailable(): bool
106 {
107 if (!self::isTextAvailable())
108 {
109 return false;
110 }
111
112 return true;
113 }
114
119 public static function isTextActive(): bool
120 {
121 if (!self::isTextAvailable())
122 {
123 return false;
124 }
125
126 $default = false;
127 $setting = (new Tuning\Manager())->getItem(self::TUNING_CODE_ALLOW_COPILOT);
128
129 return $setting ? (bool)$setting->getValue() : $default;
130 }
131
136 public static function onTuningLoad(): Entity\EventResult
137 {
138 $result = new Entity\EventResult;
139 $items = [];
140 $groups = [];
141 $relations = [];
142
143 $groups[self::TUNING_CODE_GROUP] = [
144 'title' => Loc::getMessage('LANDING_CONNECTOR_AI_GROUP_TITLE'),
145 'description' => Loc::getMessage('LANDING_CONNECTOR_AI_GROUP_DESC'),
146 'helpdesk' => 24409174,
147 ];
148
149 // region ai site
150 if (Copilot\Manager::isAvailable())
151 {
152 $items[self::TUNING_CODE_ALLOW_SITE_COPILOT] = [
153 'group' => self::TUNING_CODE_GROUP,
154 'title' => Loc::getMessage('LANDING_CONNECTOR_AI_ALLOW_SITE'),
155 'header' => Loc::getMessage('LANDING_CONNECTOR_AI_ALLOW_SITE_DESC'),
156 'type' => Tuning\Type::BOOLEAN,
157 'default' => true,
158 'sort' => 100,
159 ];
160
161 try
162 {
163 $quality = new Quality([
164 Quality::QUALITIES['ai_site'],
165 ]);
166 }
167 catch (SystemException)
168 {
169 $quality = null;
170 }
171
172 if (Copilot\Manager::isFeatureEnabled())
173 {
174 $items[self::TUNING_CODE_SITE_IMAGE_PROVIDER] = array_merge(
175 Tuning\Defaults::getProviderSelectFieldParams(Engine::CATEGORIES['image']),
176 [
177 'group' => self::TUNING_CODE_GROUP,
178 'title' => Loc::getMessage('LANDING_CONNECTOR_AI_SITE_IMAGE_PROVIDER'),
179 'sort' => 110,
180 ],
181 );
182
183 $items[self::TUNING_CODE_SITE_TEXT_PROVIDER] = array_merge(
184 Tuning\Defaults::getProviderSelectFieldParams(Engine::CATEGORIES['text'], $quality),
185 [
186 'group' => self::TUNING_CODE_GROUP,
187 'title' => Loc::getMessage('LANDING_CONNECTOR_AI_SITE_TEXT_PROVIDER'),
188 'sort' => 120,
189 ],
190 );
191
192 $relations[self::TUNING_CODE_ALLOW_SITE_COPILOT] = [
193 self::TUNING_CODE_SITE_IMAGE_PROVIDER,
194 self::TUNING_CODE_SITE_TEXT_PROVIDER,
195 ];
196 }
197 else
198 {
199 $items[self::TUNING_CODE_ALLOW_SITE_COPILOT]['additional'] = [
200 'bannerCode' => 'limit_copilot',
201 'helpMessage' => Loc::getMessage('LANDING_CONNECTOR_AI_SITE_UNAVAILABLE_MESSAGE'),
202 ];
203 }
204 }
205 // endregion
206
207 // region standart copilot
208 $items[self::TUNING_CODE_ALLOW_COPILOT] = [
209 'group' => self::TUNING_CODE_GROUP,
210 'title' => Loc::getMessage('LANDING_CONNECTOR_AI_ALLOW_TITLE'),
211 'header' => Loc::getMessage('LANDING_CONNECTOR_AI_ALLOW_DESC'),
212 'type' => Tuning\Type::BOOLEAN,
213 'default' => true,
214 'sort' => 200,
215 ];
216
217 $items[self::TUNING_CODE_IMAGE_PROVIDER] = array_merge(
218 Tuning\Defaults::getProviderSelectFieldParams(Engine::CATEGORIES['image']),
219 [
220 'group' => self::TUNING_CODE_GROUP,
221 'title' => Loc::getMessage('LANDING_CONNECTOR_AI_IMAGE_PROVIDER_TITLE'),
222 'sort' => 210,
223 ],
224 );
225
226 $items[self::TUNING_CODE_TEXT_PROVIDER] = array_merge(
227 Tuning\Defaults::getProviderSelectFieldParams(Engine::CATEGORIES['text']),
228 [
229 'group' => self::TUNING_CODE_GROUP,
230 'title' => Loc::getMessage('LANDING_CONNECTOR_AI_TEXT_PROVIDER_TITLE'),
231 'sort' => 220,
232 ],
233 );
234
235 $relations[self::TUNING_CODE_ALLOW_COPILOT] = [
236 self::TUNING_CODE_IMAGE_PROVIDER,
237 self::TUNING_CODE_TEXT_PROVIDER,
238 ];
239 // endregion
240
241 $result->modifyFields([
242 'items' => $items,
243 'groups' => $groups,
244 'itemRelations' => [
245 self::TUNING_CODE_GROUP => $relations,
246 ],
247 ]);
248
249 return $result;
250 }
251
258 public static function onBeforeCompletions(Event $event): EventResult
259 {
261 $engine = $event->getParameter('engine');
262 $category = $engine->getCategory();
263 $module = $engine->getContext()->getModuleId();
264
265 $config = new Tuning\Manager();
266 $configItem = $config->getItem("{$module}_allow_{$category}_generate");
267
268 if ($configItem && $configItem->getValue())
269 {
270 return new EventResult(EventResult::SUCCESS);
271 }
272
273 return new EventResult(EventResult::ERROR);
274 }
275}
static isTextActive()
Определения ai.php:119
static isTextAvailable()
Определения ai.php:80
static isImageAvailable()
Определения ai.php:38
const TUNING_CODE_GROUP
Определения ai.php:21
static isImageActive()
Определения ai.php:63
const TUNING_CODE_SITE_IMAGE_PROVIDER
Определения ai.php:28
static onTuningLoad()
Определения ai.php:136
const TUNING_CODE_SITE_TEXT_PROVIDER
Определения ai.php:29
static isCopilotAvailable()
Определения ai.php:105
const TUNING_CODE_ALLOW_SITE_COPILOT
Определения ai.php:27
static getZone()
Определения manager.php:930
Определения event.php:5
Определения loader.php:13
$result
Определения get_property_values.php:14
$groups
Определения options.php:30
Определения ai.php:3
Определения ufield.php:9
Определения buffer.php:3
$event
Определения prolog_after.php:141
$config
Определения quickway.php:69
$items
Определения template.php:224
$engine
Определения options.php:121