Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b7c25c4ff1 | |||
| 23960cbbb6 | |||
| c3503975a0 | |||
| 1949a461b2 | |||
| 074379aa22 | |||
| 179f1b1a74 |
+4
-8
@@ -2,6 +2,7 @@
|
|||||||
import requests
|
import requests
|
||||||
import json
|
import json
|
||||||
import urllib3
|
import urllib3
|
||||||
|
import os
|
||||||
import math
|
import math
|
||||||
import warnings
|
import warnings
|
||||||
import datetime
|
import datetime
|
||||||
@@ -170,8 +171,8 @@ def find_user_in_ad(requester, caller_phone=None, ticket_id=None):
|
|||||||
try:
|
try:
|
||||||
server = Server(AD_SERVER, get_info=ALL, connect_timeout=AD_CONNECT_TIMEOUT)
|
server = Server(AD_SERVER, get_info=ALL, connect_timeout=AD_CONNECT_TIMEOUT)
|
||||||
conn = Connection(server, user=AD_USER, password=AD_PASSWORD, auto_bind=True, receive_timeout=AD_RECEIVE_TIMEOUT)
|
conn = Connection(server, user=AD_USER, password=AD_PASSWORD, auto_bind=True, receive_timeout=AD_RECEIVE_TIMEOUT)
|
||||||
conn.search(search_base=AD_BASE, search_filter=ldap_filter, attributes=["l", "company", "manager"])
|
|
||||||
conn.search(search_base=AD_BASE, search_filter=ldap_filter, attributes=["l", "company", "manager", "department"])
|
conn.search(search_base=AD_BASE, search_filter=ldap_filter, attributes=["l", "company", "manager", "department"])
|
||||||
|
|
||||||
if not conn.entries:
|
if not conn.entries:
|
||||||
log_to_file(f" [AD] ❌ Объект ({search_by}) не найден in AD!", ticket_id)
|
log_to_file(f" [AD] ❌ Объект ({search_by}) не найден in AD!", ticket_id)
|
||||||
return None
|
return None
|
||||||
@@ -196,8 +197,8 @@ def find_user_in_ad(requester, caller_phone=None, ticket_id=None):
|
|||||||
manager_email = conn.entries[0].mail.value
|
manager_email = conn.entries[0].mail.value
|
||||||
|
|
||||||
department = user.department.value if "department" in user and user.department.value else None
|
department = user.department.value if "department" in user and user.department.value else None
|
||||||
return {"city": city, "company": company, "ad_path": ad_path, "manager_email": manager_email, "source": f"AD ({search_by})"}
|
|
||||||
return {"city": city, "company": company, "department": department, "ad_path": ad_path, "manager_email": manager_email, "source": f"AD ({search_by})"}
|
return {"city": city, "company": company, "department": department, "ad_path": ad_path, "manager_email": manager_email, "source": f"AD ({search_by})"}
|
||||||
|
except Exception as e:
|
||||||
log_to_file(f"❌ Ошибка LDAP или таймаут сети AD: {e}", ticket_id)
|
log_to_file(f"❌ Ошибка LDAP или таймаут сети AD: {e}", ticket_id)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@@ -555,9 +556,7 @@ def classify_ticket(text, ticket_id=None):
|
|||||||
if not result:
|
if not result:
|
||||||
return "Не определено", 0, [], True, [], {"pure_qdrant_choice": "Не определено", "q_variance": 0, "q_unique_groups": 0, "q_max_score": 0, "q_dominance": 0}
|
return "Не определено", 0, [], True, [], {"pure_qdrant_choice": "Не определено", "q_variance": 0, "q_unique_groups": 0, "q_max_score": 0, "q_dominance": 0}
|
||||||
|
|
||||||
# =================================================================
|
|
||||||
# ЭТАП 1: РАСЧЕТ ВЫБОРА ЧИСТОГО QDRANT (ДО СЛУЖБЫ РЕРАНКИНГА)
|
# ЭТАП 1: РАСЧЕТ ВЫБОРА ЧИСТОГО QDRANT (ДО СЛУЖБЫ РЕРАНКИНГА)
|
||||||
# =================================================================
|
|
||||||
pure_scores = defaultdict(float)
|
pure_scores = defaultdict(float)
|
||||||
pure_counts = defaultdict(int)
|
pure_counts = defaultdict(int)
|
||||||
for p in result:
|
for p in result:
|
||||||
@@ -573,9 +572,7 @@ def classify_ticket(text, ticket_id=None):
|
|||||||
|
|
||||||
qdrant_scores = [p.score for p in result]
|
qdrant_scores = [p.score for p in result]
|
||||||
|
|
||||||
# =================================================================
|
|
||||||
# ЭТАП 2: СЛУЖБА ПЕРЕРАНЖИРОВАНИЯ CROSS-ENCODER + БЛЕНДИНГ СКОРОВ
|
# ЭТАП 2: СЛУЖБА ПЕРЕРАНЖИРОВАНИЯ CROSS-ENCODER + БЛЕНДИНГ СКОРОВ
|
||||||
# =================================================================
|
|
||||||
documents = [p.payload.get("text", "Текст отсутствует").strip()[:RERANKER_MAX_DOC_CHARS] for p in result]
|
documents = [p.payload.get("text", "Текст отсутствует").strip()[:RERANKER_MAX_DOC_CHARS] for p in result]
|
||||||
|
|
||||||
rerank_payload = {
|
rerank_payload = {
|
||||||
@@ -903,8 +900,7 @@ def process_ticket_logic(req_id):
|
|||||||
break
|
break
|
||||||
if is_excluded:
|
if is_excluded:
|
||||||
t_log(" ⏭ Пропуск: пользователь в исключённом отделе.")
|
t_log(" ⏭ Пропуск: пользователь в исключённом отделе.")
|
||||||
continue
|
else:
|
||||||
|
|
||||||
if is_city_ok and (is_group_ok or is_cat_ok):
|
if is_city_ok and (is_group_ok or is_cat_ok):
|
||||||
if manager_email:
|
if manager_email:
|
||||||
t_log(f"✔ Условия совпали. Запуск процесса согласования для {manager_email}...")
|
t_log(f"✔ Условия совпали. Запуск процесса согласования для {manager_email}...")
|
||||||
|
|||||||
Reference in New Issue
Block a user