@iola_adm/iola-cli 0.1.104 → 0.1.105
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/cli.js +43 -1
package/package.json
CHANGED
package/src/cli.js
CHANGED
|
@@ -6551,12 +6551,33 @@ async function localToolAsk(question, providerConfig, options) {
|
|
|
6551
6551
|
|
|
6552
6552
|
function guardNonPublicQuestion(question) {
|
|
6553
6553
|
const normalized = String(question || "").toLocaleLowerCase("ru-RU");
|
|
6554
|
+
if (isDangerousInstructionQuestion(normalized)) {
|
|
6555
|
+
return "Не могу помогать с созданием оружия, взрывчатых веществ или инструкциями по причинению вреда.";
|
|
6556
|
+
}
|
|
6554
6557
|
if (/(зарплат|получа[ею]т|доход|домашн|паспорт|снилс|личн|персональн)/iu.test(normalized)) {
|
|
6555
6558
|
return "Это поле не входит в открытые публичные данные.";
|
|
6556
6559
|
}
|
|
6560
|
+
if (isUnsupportedPublicEntityQuestion(normalized)) {
|
|
6561
|
+
return "Сейчас в открытых слоях CLI подключены школы и детские сады. По музеям, маршрутам, больницам и другим организациям я пока не могу давать проверяемые ответы.";
|
|
6562
|
+
}
|
|
6557
6563
|
return "";
|
|
6558
6564
|
}
|
|
6559
6565
|
|
|
6566
|
+
function isDangerousInstructionQuestion(normalized) {
|
|
6567
|
+
const asksHow = /(как|сдела|собра|изготов|созда|надо|нужн|инструкц|рецепт|схем|компонент)/iu.test(normalized);
|
|
6568
|
+
const weapon = /(бомб|взрывчат|взрывн|детонатор|термит|напалм|оруж|патрон|яд|отрав|боеприпас|мина|гранат)/iu.test(normalized);
|
|
6569
|
+
const nuclear = /(атомн|ядерн|уран|плутони|обогащен)/iu.test(normalized) && /(бомб|оруж|собра|сдела|созда|надо|нужн)/iu.test(normalized);
|
|
6570
|
+
return (asksHow && weapon) || nuclear;
|
|
6571
|
+
}
|
|
6572
|
+
|
|
6573
|
+
function isUnsupportedPublicEntityQuestion(normalized) {
|
|
6574
|
+
const unsupportedEntity = /(музе[йяею]|театр|больниц|поликлиник|аптек|магазин|кафе|ресторан|гостиниц|банк|мфц|библиотек|парк|маршрут|остановк)/iu.test(normalized);
|
|
6575
|
+
if (!unsupportedEntity) return false;
|
|
6576
|
+
const supportedEducation = /(школ|гимнази|лице|детск\w*\s+сад|детсад|садик)/iu.test(normalized);
|
|
6577
|
+
if (supportedEducation) return false;
|
|
6578
|
+
return /(адрес|где|как пройти|как добраться|директ|руководител|заведующ|телефон|сайт|почт|инн|кто|находится)/iu.test(normalized);
|
|
6579
|
+
}
|
|
6580
|
+
|
|
6560
6581
|
function buildCasualDirectAnswer(question) {
|
|
6561
6582
|
const normalized = String(question || "").toLocaleLowerCase("ru-RU").trim();
|
|
6562
6583
|
if (/^(кто ты|что ты|какая ты модель|что ты за модель|что за модель|какая модель|назови модель|ты какая модель|ты кто)([?.!\s]*)$/iu.test(normalized)) {
|
|
@@ -6767,8 +6788,10 @@ function validateToolPlan(plan, options = {}) {
|
|
|
6767
6788
|
}
|
|
6768
6789
|
|
|
6769
6790
|
async function searchPublicEntities(args = {}) {
|
|
6791
|
+
const layer = normalizeEntityLayer(args.layer);
|
|
6792
|
+
assertSupportedPublicEntityLayer(layer);
|
|
6770
6793
|
const payload = await postJson(`${await getApiBaseUrl()}/search-entities`, {
|
|
6771
|
-
layer
|
|
6794
|
+
layer,
|
|
6772
6795
|
query: args.query || args.entity_name || args.name || "",
|
|
6773
6796
|
limit: Number(args.limit || 10),
|
|
6774
6797
|
filters: args.filters || undefined,
|
|
@@ -6784,6 +6807,7 @@ async function resolvePublicEntityField(args = {}) {
|
|
|
6784
6807
|
const endpoint = `${await getApiBaseUrl()}/resolve-entity-field`;
|
|
6785
6808
|
const requestedField = normalizeEntityField(args.field);
|
|
6786
6809
|
const layer = normalizeEntityLayer(args.layer);
|
|
6810
|
+
assertSupportedPublicEntityLayer(layer);
|
|
6787
6811
|
const strictQuestionNumber = extractEntityNumberFromQuestion(args.source_question, layer);
|
|
6788
6812
|
const payload = {
|
|
6789
6813
|
layer,
|
|
@@ -6988,9 +7012,24 @@ function normalizeEntityLayer(layer) {
|
|
|
6988
7012
|
const value = String(layer || "").toLocaleLowerCase("ru-RU");
|
|
6989
7013
|
if (value === "school" || value === "schools" || value.includes("школ")) return "schools";
|
|
6990
7014
|
if (value === "kindergarten" || value === "kindergartens" || value.includes("сад")) return "kindergartens";
|
|
7015
|
+
if (value === "museum" || value === "museums" || value.includes("музе")) return "museums";
|
|
6991
7016
|
return value || "schools";
|
|
6992
7017
|
}
|
|
6993
7018
|
|
|
7019
|
+
function assertSupportedPublicEntityLayer(layer) {
|
|
7020
|
+
if (layer === "schools" || layer === "kindergartens") return;
|
|
7021
|
+
throw createUnsupportedPublicDatasetError(layer);
|
|
7022
|
+
}
|
|
7023
|
+
|
|
7024
|
+
function createUnsupportedPublicDatasetError(layer) {
|
|
7025
|
+
const detail = {
|
|
7026
|
+
error: "unsupported_public_dataset",
|
|
7027
|
+
message: "Unknown public dataset",
|
|
7028
|
+
layer,
|
|
7029
|
+
};
|
|
7030
|
+
return new Error(`Request failed: 400 Bad Request (local-validation)\n${JSON.stringify({ detail })}`);
|
|
7031
|
+
}
|
|
7032
|
+
|
|
6994
7033
|
function normalizeEntityField(field) {
|
|
6995
7034
|
const value = String(field || "").toLocaleLowerCase("ru-RU");
|
|
6996
7035
|
if (value === "director" || value === "directors" || value === "directs" || value === "direct" || value === "head" || value === "head_name" || value.includes("директ") || value.includes("руковод")) return "director";
|
|
@@ -7037,6 +7076,9 @@ function isLocalEntityValidationError(error) {
|
|
|
7037
7076
|
|
|
7038
7077
|
function formatToolExecutionError(error, plan) {
|
|
7039
7078
|
const details = parseErrorJsonDetails(error);
|
|
7079
|
+
if (details?.error === "unsupported_public_dataset" || details === "Unknown public dataset") {
|
|
7080
|
+
return "Сейчас в открытых слоях CLI подключены школы и детские сады. По этому типу организаций я пока не могу давать проверяемые ответы.";
|
|
7081
|
+
}
|
|
7040
7082
|
if (details?.error !== "entity_not_found") return "";
|
|
7041
7083
|
if (details.local_validation && details.entity_name) {
|
|
7042
7084
|
return `В открытом слое не нашел организацию по названию "${details.entity_name}". Проверьте название.`;
|