PatrickRedStar commited on
Commit
904689f
·
1 Parent(s): 9b0afcd

Restore agents/__init__.py with smolagents integration

Browse files
Files changed (1) hide show
  1. agents/__init__.py +197 -0
agents/__init__.py ADDED
@@ -0,0 +1,197 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Агенты для анализа логов на основе smolagents.
3
+ Используют трансформеры для интеллектуального анализа.
4
+ """
5
+
6
+ import os
7
+ import json
8
+ from smolagents import ToolCallingAgent, InferenceClientModel, FinalAnswerTool
9
+ from schemas.schemas import parser_schema, anomaly_schema, rca_schema
10
+ from utils.validation import validate_schema
11
+ from utils.agent_runner import run_agent_safely
12
+
13
+ # Загружаем модель
14
+ # Токен должен быть установлен через переменную окружения HF_TOKEN
15
+ # В Hugging Face Spaces установите секрет через настройки Space
16
+ hf_token = os.getenv("HF_TOKEN")
17
+ if not hf_token:
18
+ raise ValueError(
19
+ "HF_TOKEN environment variable is not set. "
20
+ "Please set it in Hugging Face Spaces secrets or as an environment variable."
21
+ )
22
+
23
+ model = InferenceClientModel(
24
+ model_id="deepseek-ai/DeepSeek-V3.1-Terminus",
25
+ token=hf_token,
26
+ max_tokens=2048
27
+ )
28
+
29
+ final_tool = FinalAnswerTool()
30
+
31
+ # Агент 1: Парсинг логов
32
+ parser_agent = ToolCallingAgent(
33
+ model=model,
34
+ tools=[final_tool],
35
+ instructions="""
36
+ Ты эксперт по анализу системных логов. Твоя задача - парсить сырые логи и преобразовывать их в структурированный JSON формат.
37
+
38
+ Для каждой строки лога определи:
39
+ - timestamp: временная метка (если есть)
40
+ - level: уровень логирования (INFO, WARNING, ERROR, CRITICAL, DEBUG, TRACE)
41
+ - message: основное сообщение
42
+ - type: тип события (SYSTEM, HTTP_REQUEST, DATABASE, AUTHENTICATION, CONNECTION, EXCEPTION, GENERAL)
43
+
44
+ Также определи:
45
+ - errors: список всех событий с уровнем ERROR или CRITICAL (полные объекты событий)
46
+ - warnings: список всех событий с уровнем WARNING (полные объекты событий)
47
+ - statistics: статистика с total_lines, parsed_events, errors, warnings, info_messages, event_types, time_range
48
+
49
+ Временной диапазон (time_range) должен содержать start и end - первую и последнюю временную метку.
50
+
51
+ Ответ строго верни в JSON через final_answer в следующем формате:
52
+ {
53
+ "events": [{"line_number": int, "timestamp": "str|null", "level": "str", "message": "str", "type": "str"}, ...],
54
+ "errors": [{"line_number": int, "timestamp": "str|null", "level": "str", "message": "str", "type": "str"}, ...],
55
+ "warnings": [{"line_number": int, "timestamp": "str|null", "level": "str", "message": "str", "type": "str"}, ...],
56
+ "statistics": {
57
+ "total_lines": int,
58
+ "parsed_events": int,
59
+ "errors": int,
60
+ "warnings": int,
61
+ "info_messages": int,
62
+ "event_types": {"TYPE": count, ...},
63
+ "time_range": {"start": "str|null", "end": "str|null"} | null
64
+ }
65
+ }
66
+ """,
67
+ name="LogParserAgent",
68
+ max_steps=10,
69
+ )
70
+
71
+ # Агент 2: Обнаружение аномалий
72
+ anomaly_agent = ToolCallingAgent(
73
+ model=model,
74
+ tools=[final_tool],
75
+ instructions="""
76
+ Ты эксперт по обнаружению аномалий в системных логах. Твоя задача - анализировать структурированные логи и находить проблемные паттерны.
77
+
78
+ Ищи следующие типы аномалий:
79
+ 1. BURST_ERRORS - всплески ошибок (5+ ошибок за короткий промежуток времени)
80
+ 2. REPEATED_ERRORS - повторяющиеся ошибки (одна и та же ошибка 3+ раза)
81
+ 3. ERROR_BEFORE_CRASH - ошибки перед крашем системы (критические ошибки в конце логов)
82
+ 4. TEMPORAL_SPIKE - временные всплески событий (превышение среднего в 2 раза)
83
+ 5. REPEATED_STACK_TRACES - повторяющиеся stack traces
84
+
85
+ Для каждой аномалии укажи:
86
+ - type: тип аномалии
87
+ - severity: CRITICAL, HIGH, MEDIUM, LOW
88
+ - description: описание проблемы
89
+ - count: количество вхождений (если применимо)
90
+ - error_message: пример сообщения об ошибке (если есть)
91
+ - metadata: дополнительная информация (affected_lines и т.д.)
92
+
93
+ Также вычисли статистику:
94
+ - total: общее количество аномалий
95
+ - by_type: распределение по типам
96
+ - by_severity: распределение по серьёзности
97
+
98
+ Ответ строго верни в JSON через final_answer в следующем формате:
99
+ {
100
+ "anomalies": [{"type": "str", "severity": "str", "description": "str", "count": int|null, "error_message": "str|null", "metadata": object|null}, ...],
101
+ "statistics": {
102
+ "total": int,
103
+ "by_type": {"TYPE": count, ...},
104
+ "by_severity": {"SEVERITY": count, ...}
105
+ },
106
+ "severity_summary": {"CRITICAL": int, "HIGH": int, "MEDIUM": int, "LOW": int}
107
+ }
108
+ """,
109
+ name="AnomalyDetectionAgent",
110
+ max_steps=10,
111
+ )
112
+
113
+ # Агент 3: Анализ первопричин и рекомендации
114
+ rca_agent = ToolCallingAgent(
115
+ model=model,
116
+ tools=[final_tool],
117
+ instructions="""
118
+ Ты эксперт по анализу первопричин и формированию рекомендаций. Твоя задача - интерпретировать обнаруженные аномалии и предлагать конкретные решения.
119
+
120
+ Для каждой группы аномалий определи:
121
+ - possible_causes: возможные первопричины проблемы
122
+ - recommendations: рекомендации по устранению с приоритетами (CRITICAL, HIGH, MEDIUM, LOW)
123
+ - actions: конкретные действия для решения проблемы
124
+
125
+ Также сформулируй общие рекомендации для улучшения системы мониторинга и предотвращения подобных проблем.
126
+
127
+ Ответ строго верни в JSON через final_answer в следующем формате:
128
+ {
129
+ "analysis": {
130
+ "root_causes": ["причина1", "причина2", ...],
131
+ "details": [{
132
+ "anomaly_type": "str",
133
+ "severity": "str",
134
+ "description": "str",
135
+ "possible_causes": ["причина1", ...]
136
+ }, ...]
137
+ },
138
+ "recommendations": [{
139
+ "priority": "str",
140
+ "text": "str",
141
+ "actions": ["действие1", "действие2", ...]
142
+ }, ...],
143
+ "general_recommendations": ["рекомендация1", "рекомендация2", ...]
144
+ }
145
+ """,
146
+ name="RootCauseAgent",
147
+ max_steps=10,
148
+ )
149
+
150
+ # Pipeline шаг 1 — парсинг логов
151
+ def run_parser_agent(raw_logs: str):
152
+ """Парсит сырые логи в структурированный формат."""
153
+ if not raw_logs or not raw_logs.strip():
154
+ return {
155
+ "events": [],
156
+ "errors": [],
157
+ "warnings": [],
158
+ "statistics": {
159
+ "total_lines": 0,
160
+ "parsed_events": 0,
161
+ "errors": 0,
162
+ "warnings": 0,
163
+ "info_messages": 0,
164
+ "event_types": {},
165
+ "time_range": None
166
+ }
167
+ }
168
+
169
+ result = run_agent_safely(parser_agent, task=raw_logs)
170
+ validate_schema(result, parser_schema)
171
+ return result
172
+
173
+ # Pipeline шаг 2 — обнаружение аномалий
174
+ def run_anomaly_agent(structured_data: dict):
175
+ """Обнаруживает аномалии в структурированных логах."""
176
+ input_data = json.dumps(structured_data, ensure_ascii=False, indent=2)
177
+ result = run_agent_safely(anomaly_agent, task=input_data)
178
+ validate_schema(result, anomaly_schema)
179
+ return result
180
+
181
+ # Pipeline шаг 3 — анализ первопричин и рекомендации
182
+ def run_rca_agent(anomaly_report: dict):
183
+ """Анализирует первопричины и генерирует рекомендации."""
184
+ input_data = json.dumps(anomaly_report, ensure_ascii=False, indent=2)
185
+ result = run_agent_safely(rca_agent, task=input_data)
186
+ validate_schema(result, rca_schema)
187
+ return result
188
+
189
+ # Экспорт для обратной совместимости
190
+ from .gpt_prompt_agent import GPTPromptAgent
191
+
192
+ __all__ = [
193
+ 'run_parser_agent',
194
+ 'run_anomaly_agent',
195
+ 'run_rca_agent',
196
+ 'GPTPromptAgent',
197
+ ]