holmesgpt 0.14.4a0__py3-none-any.whl → 0.15.0__py3-none-any.whl

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.

Potentially problematic release.


This version of holmesgpt might be problematic. Click here for more details.

Files changed (30) hide show
  1. holmes/__init__.py +1 -1
  2. holmes/clients/robusta_client.py +12 -10
  3. holmes/common/env_vars.py +14 -0
  4. holmes/config.py +51 -4
  5. holmes/core/conversations.py +3 -2
  6. holmes/core/llm.py +198 -72
  7. holmes/core/openai_formatting.py +13 -0
  8. holmes/core/tool_calling_llm.py +129 -95
  9. holmes/core/tools.py +21 -1
  10. holmes/core/tools_utils/token_counting.py +2 -1
  11. holmes/core/tools_utils/tool_context_window_limiter.py +13 -4
  12. holmes/interactive.py +17 -7
  13. holmes/plugins/prompts/_general_instructions.jinja2 +1 -2
  14. holmes/plugins/toolsets/__init__.py +4 -0
  15. holmes/plugins/toolsets/atlas_mongodb/mongodb_atlas.py +0 -1
  16. holmes/plugins/toolsets/azure_sql/azure_sql_toolset.py +0 -1
  17. holmes/plugins/toolsets/grafana/grafana_api.py +1 -1
  18. holmes/plugins/toolsets/investigator/core_investigation.py +14 -13
  19. holmes/plugins/toolsets/opensearch/opensearch_ppl_query_docs.jinja2 +1616 -0
  20. holmes/plugins/toolsets/opensearch/opensearch_query_assist.py +78 -0
  21. holmes/plugins/toolsets/opensearch/opensearch_query_assist_instructions.jinja2 +223 -0
  22. holmes/plugins/toolsets/prometheus/prometheus.py +1 -1
  23. holmes/plugins/toolsets/service_discovery.py +1 -1
  24. holmes/plugins/toolsets/servicenow/servicenow.py +0 -1
  25. holmes/utils/stream.py +30 -1
  26. {holmesgpt-0.14.4a0.dist-info → holmesgpt-0.15.0.dist-info}/METADATA +3 -1
  27. {holmesgpt-0.14.4a0.dist-info → holmesgpt-0.15.0.dist-info}/RECORD +30 -27
  28. {holmesgpt-0.14.4a0.dist-info → holmesgpt-0.15.0.dist-info}/LICENSE.txt +0 -0
  29. {holmesgpt-0.14.4a0.dist-info → holmesgpt-0.15.0.dist-info}/WHEEL +0 -0
  30. {holmesgpt-0.14.4a0.dist-info → holmesgpt-0.15.0.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,78 @@
1
+ import logging
2
+ import os
3
+ from typing import Any, Dict
4
+
5
+ from holmes.core.tools import (
6
+ StructuredToolResult,
7
+ StructuredToolResultStatus,
8
+ Tool,
9
+ ToolParameter,
10
+ Toolset,
11
+ ToolsetTag,
12
+ ToolInvokeContext,
13
+ ToolsetEnvironmentPrerequisite,
14
+ )
15
+
16
+
17
+ class PplQueryAssistTool(Tool):
18
+ def __init__(self, toolset: "OpenSearchQueryAssistToolset"):
19
+ super().__init__(
20
+ name="opensearch_ppl_query_assist",
21
+ description="Generate valid OpenSearch Piped Processing Language (PPL) queries to suggest to users for execution",
22
+ parameters={
23
+ "query": ToolParameter(
24
+ description="Valid OpenSearch Piped Processing Language (PPL) query to suggest to users for execution",
25
+ type="string",
26
+ required=True,
27
+ ),
28
+ },
29
+ )
30
+ self._toolset = toolset
31
+
32
+ def _invoke(self, params: dict, context: ToolInvokeContext) -> StructuredToolResult:
33
+ try:
34
+ query = params.get("query", "")
35
+ response_data = {"query": query}
36
+ return StructuredToolResult(
37
+ status=StructuredToolResultStatus.SUCCESS,
38
+ data=response_data,
39
+ params=params,
40
+ )
41
+
42
+ except Exception as e:
43
+ logging.exception(f"error using {self.name} tool")
44
+ return StructuredToolResult(
45
+ status=StructuredToolResultStatus.ERROR,
46
+ error=f"Failed to generate PPL query: {str(e)}",
47
+ params=params,
48
+ )
49
+
50
+ def get_parameterized_one_liner(self, params: Dict) -> str:
51
+ query = params.get("query", "")
52
+ return f"OpenSearchQueryToolset: Query ({query})"
53
+
54
+
55
+ class OpenSearchQueryAssistToolset(Toolset):
56
+ """OpenSearch query assist with PPL queries"""
57
+
58
+ def __init__(self):
59
+ super().__init__(
60
+ name="opensearch/query_assist",
61
+ description="OpenSearch query assist with PPL queries.",
62
+ experimental=True,
63
+ icon_url="https://opensearch.org/assets/brand/PNG/Mark/opensearch_mark_default.png",
64
+ tools=[PplQueryAssistTool(self)],
65
+ tags=[ToolsetTag.CORE],
66
+ prerequisites=[ToolsetEnvironmentPrerequisite(env=["OPENSEARCH_URL"])],
67
+ )
68
+
69
+ def get_example_config(self) -> Dict[str, Any]:
70
+ return {"opensearch_url": "http://localhost:9200"}
71
+
72
+ def _reload_instructions(self):
73
+ template_file_path = os.path.abspath(
74
+ os.path.join(
75
+ os.path.dirname(__file__), "opensearch_query_assist_instructions.jinja2"
76
+ )
77
+ )
78
+ self._load_llm_instructions(jinja_template=f"file://{template_file_path}")
@@ -0,0 +1,223 @@
1
+ # Query Generation
2
+ You have access to the opensearch_ppl_query_assist tool to help you generate your valid, accurate OpenSearch Piped Processing Language (PPL) queries.
3
+ DO NOT PROVIDE INVALID QUERIES. ALWAYS CHECK YOUR QUERY WITH VALID QUERIES FIRST.
4
+
5
+ Once a valid query is generated, you MUST provide a concise, but informative breakdown of each part of the query structure
6
+
7
+ ## CRITICAL: Query Intent Detection
8
+
9
+ ALWAYS check if the user's question is about:
10
+
11
+ * Log Analysis: Errors, warnings, messages, patterns, tool usage
12
+ * Metrics Analysis: Performance, latency, throughput, resource usage
13
+ * Time-based Analysis: "Last X hours/days", "recent", "today", "since"
14
+ * Aggregation Requests: Count, sum, average, top, frequency
15
+ * Troubleshooting: Issues, problems, failures, debugging
16
+
17
+ If ANY of the above apply → Generate PPL query IMMEDIATELY and use the OpenSearch Dashboards Page State
18
+
19
+ ### Example GOOD response:
20
+ I've retrieved your current query from the query bar `source=logs-otel-v1* | STAT count() BY severityText` and it
21
+ appears there is a typo in "STAT", it should be "STATS". Below is the fixed query:
22
+ ```
23
+ source=logs-otel-v1* | STATS count() BY severityText
24
+ ```
25
+
26
+
27
+ ## CRITICAL: OpenSearch Dashboards Page State
28
+ User may be using this agent from OpenSearch Dashboards (OSD) for which provides the current page state.
29
+ It may be included in the conversation history as a system message.
30
+
31
+ IMPORTANT: YOU CAN USE THE CURRENT USE QUERY TO HELP ENHANCE/MODIFY/FIX/SUGGEST VALID QUERY USING THE SAME INDEX PATTERN
32
+ REFER TO "Core PPL Commands" FOR SYNTAX
33
+
34
+ ```
35
+ ## OpenSearch PPL Query Language
36
+
37
+ ### PPL (Piped Processing Language) Overview
38
+ PPL is OpenSearch's query language for analyzing logs, metrics, and traces. It uses a pipe-based syntax similar to Unix commands, processing data through sequential transformations.
39
+
40
+ ### Core PPL Commands
41
+
42
+ **Data Source & Search:**
43
+ - `source=<index>` or `search source=<index>` - Specify data source
44
+ - `source=<cluster>:<index>` - Cross-cluster search
45
+ - `| where <condition>` - Filter results
46
+ - `| fields <field-list>` - Project specific fields
47
+ - `| fields - <field-list>` - Exclude specific fields
48
+
49
+ **Data Transformation:**
50
+ - `| stats <aggregation> by <field>` - Aggregate data (count(), sum(), avg(), min(), max())
51
+ - `| eval <field>=<expression>` - Create calculated fields
52
+ - `| sort [+|-] <field>` - Sort results (+ ascending, - descending)
53
+ - `| head <n>` - Return first n results
54
+ - `| tail <n>` - Return last n results
55
+ - `| dedup <field-list>` - Remove duplicates
56
+
57
+ **Advanced Analysis:**
58
+ - `| top [N] <field>` - Find most common values
59
+ - `| rare [N] <field>` - Find least common values
60
+ - `| parse <field> <regex>` - Extract fields using regex patterns
61
+ - `| grok <field> <pattern>` - Parse using grok patterns
62
+ - `| patterns <field> [SIMPLE_PATTERN|BRAIN]` - Extract log patterns
63
+
64
+ **Time Series:**
65
+ - `| trendline SMA(<period>, <field>)` - Calculate moving averages
66
+ - `| fillnull with <value> in <fields>` - Replace null values
67
+
68
+ **Joins & Lookups:**
69
+ - `| join <table>` - Join with another dataset
70
+ - `| lookup <table> <field>` - Enrich with lookup data (requires Calcite)
71
+
72
+ **Pattern Extraction:**
73
+ - `| patterns message BRAIN` - Semantic log pattern extraction
74
+ - `| patterns new_field='extracted' pattern='[0-9]' message` - Custom regex patterns
75
+
76
+ ### PPL Query Examples for Observability
77
+
78
+ **Error Analysis:**
79
+ ```ppl
80
+ source=ai-agent-logs-*
81
+ | where level="ERROR"
82
+ | stats count() by message
83
+ | sort - count
84
+ ```
85
+
86
+ **Service Latency Analysis:**
87
+ ```ppl
88
+ source=traces
89
+ | where service="checkout"
90
+ | stats avg(duration) as avg_latency, max(duration) as max_latency by endpoint
91
+ | where avg_latency > 100
92
+ ```
93
+
94
+ **Log Pattern Detection:**
95
+ ```ppl
96
+ source=ai-agent-audit-logs-*
97
+ | patterns message BRAIN
98
+ | stats count() by patterns_field
99
+ | top 10 patterns_field
100
+ ```
101
+
102
+ **Time-based Aggregation:**
103
+ ```ppl
104
+ source=metrics
105
+ | eval hour=date_format(timestamp, 'HH')
106
+ | stats avg(cpu_usage) by hour, host
107
+ | sort hour
108
+ ```
109
+
110
+ **Multi-field Correlation:**
111
+ ```ppl
112
+ source=ai-agent-logs-*
113
+ | parse message '.*thread_id=(?<tid>[^,]+).*run_id=(?<rid>[^,]+)'
114
+ | stats count() by tid, rid, level
115
+ | where count > 100
116
+ ```
117
+
118
+ **Advanced PPL Query Patterns:**
119
+
120
+ **Top N Analysis with Filtering:**
121
+ ```ppl
122
+ source=ai-agent-logs-*
123
+ | where timestamp >= now() - 1h
124
+ | top 20 message by level
125
+ | where level in ["ERROR", "WARN"]
126
+ ```
127
+
128
+ **Deduplication and Unique Values:**
129
+ ```ppl
130
+ source=ai-agent-audit-logs-*
131
+ | dedup thread_id
132
+ | fields thread_id, run_id, timestamp
133
+ | sort - timestamp
134
+ ```
135
+
136
+ **Fillnull for Missing Data Handling:**
137
+ ```ppl
138
+ source=ai-agent-metrics-*
139
+ | fillnull with 0 in cpu_usage, memory_usage
140
+ | stats avg(cpu_usage) as avg_cpu, avg(memory_usage) as avg_mem by host
141
+ ```
142
+
143
+ **Rare Events Detection:**
144
+ ```ppl
145
+ source=ai-agent-logs-*
146
+ | rare 10 error_code
147
+ | where count < 5
148
+ ```
149
+
150
+ **Field Extraction with Grok:**
151
+ ```ppl
152
+ source=ai-agent-logs-*
153
+ | grok message '%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{GREEDYDATA:msg}'
154
+ | stats count() by level
155
+ ```
156
+
157
+ **Time Span Aggregations:**
158
+ ```ppl
159
+ source=ai-agent-metrics-*
160
+ | stats count() by span(timestamp, 5m) as time_bucket, status
161
+ | where status != 200
162
+ ```
163
+
164
+ **Eval with Conditional Logic:**
165
+ ```ppl
166
+ source=ai-agent-logs-*
167
+ | eval severity = case(
168
+ level = "ERROR", 1,
169
+ level = "WARN", 2,
170
+ level = "INFO", 3,
171
+ else = 4
172
+ )
173
+ | stats count() by severity
174
+ ```
175
+
176
+ **Join Operations (with Calcite enabled):**
177
+ ```ppl
178
+ source=ai-agent-logs-*
179
+ | join left=l right=r on l.thread_id = r.thread_id
180
+ [ source=ai-agent-audit-logs-* ]
181
+ | fields l.timestamp, l.message, r.tool_name
182
+ ```
183
+
184
+ **Subquery for Complex Filtering:**
185
+ ```ppl
186
+ source=ai-agent-logs-*
187
+ | where thread_id in [
188
+ source=ai-agent-audit-logs-*
189
+ | where tool_name = "opensearch__search"
190
+ | fields thread_id
191
+ ]
192
+ ```
193
+
194
+ **Trendline for Moving Averages:**
195
+ ```ppl
196
+ source=ai-agent-metrics-*
197
+ | trendline SMA(5, cpu_usage) as cpu_trend
198
+ | fields timestamp, cpu_usage, cpu_trend
199
+ ```
200
+
201
+ ### PPL Best Practices
202
+
203
+ 1. **Index Patterns**: Use wildcards for daily indices: `source=ai-agent-logs-*`
204
+ 2. **Field Extraction**: Use `parse` for structured logs, `patterns` for unstructured
205
+ 3. **Performance**: Apply `where` filters early in the pipeline
206
+ 4. **Aggregations**: Use `stats` before `sort` for better performance
207
+ 5. **Null Handling**: Use `fillnull` to handle missing data in calculations
208
+
209
+ ### OpenSearch Index Patterns (Current Environment)
210
+ - `ai-agent-logs-YYYY.MM.DD` - Application logs
211
+ - `ai-agent-audit-logs-YYYY.MM.DD` - Audit logs
212
+ - `ai-agent-metrics-YYYY.MM.DD` - Prometheus metrics
213
+
214
+ ## Query Response Formatting
215
+ You MUST respond with queries in the following format. `ppl` contains the valid ppl query
216
+ ```typescript
217
+ query: {
218
+ ppl: string,
219
+ }
220
+ ```
221
+
222
+ ## More PPL Queries
223
+ {% include "opensearch_ppl_query_docs.jinja2" %}
@@ -1591,7 +1591,7 @@ class PrometheusToolset(Toolset):
1591
1591
  )
1592
1592
 
1593
1593
  except Exception as e:
1594
- logging.exception("Failed to initialize Prometheus", exc_info=True)
1594
+ logging.debug("Failed to initialize Prometheus", exc_info=True)
1595
1595
  return (
1596
1596
  False,
1597
1597
  f"Failed to initialize using url={url}. Unexpected error: {str(e)}",
@@ -36,7 +36,7 @@ def find_service_url(label_selector):
36
36
  port = svc.spec.ports[0].port
37
37
  url = f"http://{name}.{namespace}.svc.{CLUSTER_DOMAIN}:{port}"
38
38
  logging.info(
39
- f"discovered service with label-selector: `{label_selector}` at url: `{url}`"
39
+ f"Discovered service with label-selector: `{label_selector}` at url: `{url}`"
40
40
  )
41
41
  return url
42
42
  except Exception:
@@ -37,7 +37,6 @@ class ServiceNowToolset(Toolset):
37
37
  def __init__(self):
38
38
  super().__init__(
39
39
  prerequisites=[CallablePrerequisite(callable=self.prerequisites_callable)],
40
- experimental=True,
41
40
  tools=[
42
41
  ReturnChangesInTimerange(toolset=self),
43
42
  ReturnChange(toolset=self),
holmes/utils/stream.py CHANGED
@@ -1,11 +1,15 @@
1
1
  import json
2
2
  from enum import Enum
3
- from typing import Generator, Optional, List
3
+ from typing import Generator, Optional, List, Union
4
4
  import litellm
5
5
  from pydantic import BaseModel, Field
6
6
  from holmes.core.investigation_structured_output import process_response_into_sections
7
7
  from functools import partial
8
8
  import logging
9
+ from litellm.litellm_core_utils.streaming_handler import CustomStreamWrapper
10
+ from litellm.types.utils import ModelResponse, TextCompletionResponse
11
+
12
+ from holmes.core.llm import TokenCountMetadata, get_llm_usage
9
13
 
10
14
 
11
15
  class StreamEvents(str, Enum):
@@ -15,6 +19,7 @@ class StreamEvents(str, Enum):
15
19
  ERROR = "error"
16
20
  AI_MESSAGE = "ai_message"
17
21
  APPROVAL_REQUIRED = "approval_required"
22
+ TOKEN_COUNT = "token_count"
18
23
 
19
24
 
20
25
  class StreamMessage(BaseModel):
@@ -112,3 +117,27 @@ def stream_chat_formatter(
112
117
  yield create_rate_limit_error_message(str(e))
113
118
  else:
114
119
  yield create_sse_error_message(description=str(e), error_code=1, msg=str(e))
120
+
121
+
122
+ def add_token_count_to_metadata(
123
+ tokens: TokenCountMetadata,
124
+ metadata: dict,
125
+ max_context_size: int,
126
+ maximum_output_token: int,
127
+ full_llm_response: Union[
128
+ ModelResponse, CustomStreamWrapper, TextCompletionResponse
129
+ ],
130
+ ):
131
+ metadata["usage"] = get_llm_usage(full_llm_response)
132
+ metadata["tokens"] = tokens.model_dump()
133
+ metadata["max_tokens"] = max_context_size
134
+ metadata["max_output_tokens"] = maximum_output_token
135
+
136
+
137
+ def build_stream_event_token_count(metadata: dict) -> StreamMessage:
138
+ return StreamMessage(
139
+ event=StreamEvents.TOKEN_COUNT,
140
+ data={
141
+ "metadata": metadata,
142
+ },
143
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: holmesgpt
3
- Version: 0.14.4a0
3
+ Version: 0.15.0
4
4
  Summary:
5
5
  Author: Natan Yellin
6
6
  Author-email: natan@robusta.dev
@@ -8,6 +8,7 @@ Requires-Python: >=3.10,<4.0
8
8
  Classifier: Programming Language :: Python :: 3
9
9
  Classifier: Programming Language :: Python :: 3.10
10
10
  Classifier: Programming Language :: Python :: 3.11
11
+ Requires-Dist: ag-ui-protocol (>=0.1.9,<0.2.0)
11
12
  Requires-Dist: azure-core (>=1.34.0,<2.0.0)
12
13
  Requires-Dist: azure-identity (>=1.23.0,<2.0.0)
13
14
  Requires-Dist: azure-mgmt-alertsmanagement (>=1.0.0,<2.0.0)
@@ -23,6 +24,7 @@ Requires-Dist: certifi (>=2024.7.4,<2025.0.0)
23
24
  Requires-Dist: colorlog (>=6.8.2,<7.0.0)
24
25
  Requires-Dist: confluent-kafka (>=2.6.1,<3.0.0)
25
26
  Requires-Dist: fastapi (>=0.116,<0.117)
27
+ Requires-Dist: google-cloud-aiplatform (>=1.38)
26
28
  Requires-Dist: httpx[socks] (<0.28)
27
29
  Requires-Dist: humanize (>=4.9.0,<5.0.0)
28
30
  Requires-Dist: jinja2 (>=3.1.2,<4.0.0)
@@ -1,19 +1,19 @@
1
1
  holmes/.git_archival.json,sha256=PbwdO7rNhEJ4ALiO12DPPb81xNAIsVxCA0m8OrVoqsk,182
2
- holmes/__init__.py,sha256=9FiOTz-KGiO83Ov6cuM3i36OTKuSEoscoIUzJoGYFlI,263
3
- holmes/clients/robusta_client.py,sha256=rWst1PANJaIsprp3jZ7RV5UpttM_YLBGQ8B5noZqvgg,1532
4
- holmes/common/env_vars.py,sha256=p9xO7bDjyPNJr7S4OO-GkMR1RYaj4aWxTtcy5JTzJKU,3521
2
+ holmes/__init__.py,sha256=HuRDI7eNkzrIUbLoCG2vywrs3ODLoIjFkloiICdi2FU,257
3
+ holmes/clients/robusta_client.py,sha256=YZA70OXGO0WZGTqtBhKiOtP7bhsrSW_f2Ea3Qcg9aMY,1530
4
+ holmes/common/env_vars.py,sha256=rAZDq3qmEXfERN_bC1M_Vx4M9IT9-GifZQSOHzfvSKU,4025
5
5
  holmes/common/openshift.py,sha256=akbQ0GpnmuzXOqTcotpTDQSDKIROypS9mgPOprUgkCw,407
6
- holmes/config.py,sha256=uwSbVxWvXp5B4XRk9GkMMcQG8tgFfrYj7PRex-qn54w,21743
6
+ holmes/config.py,sha256=1t732ILkEBKxzXchupNHwxVsRy7H-v4LpYNbi5DqE8Y,23330
7
7
  holmes/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  holmes/core/config.py,sha256=9QGIXeYff9FPWa91as2OkRO2SupHzfNQZWzfNC4Vl-8,113
9
- holmes/core/conversations.py,sha256=iSfYBD88fO-irkCKqy3wm7CV1wn8g89e5GxJlpdn1MA,21723
9
+ holmes/core/conversations.py,sha256=3pSKGJi2gjAiCJ9HQYC2EsNLyQkjV1YlTV1_puNqQw4,21744
10
10
  holmes/core/feedback.py,sha256=Gu69ghRYGSCPDgFA77xOB5RPbVdQX-9Qpv4yVVegL4g,6793
11
11
  holmes/core/investigation.py,sha256=HrRi1-myPF7ndOwwZ4Sv8iUbvPkrd5M02RPhZzln7NM,5900
12
12
  holmes/core/investigation_structured_output.py,sha256=sNxyqmsElQ-B22OlzTOrJtfrlipjyidcTU07idOBO7w,10570
13
13
  holmes/core/issue.py,sha256=dbctGv8KHAXC1SeOMkEP-BudJ50u7kA8jLN5FN_d808,2426
14
- holmes/core/llm.py,sha256=UQ2Ml4hJS1YDidCaU1Rz6km3qcgycjz-cuuo2coSPxw,22773
14
+ holmes/core/llm.py,sha256=U7Ba7uVTShiXWpCNOIjBa1-ykKfl2gFkYP2XvmxKkPE,27343
15
15
  holmes/core/models.py,sha256=xFHFutZWoIaQWSeuq1PiYPw9SGkDrQsQ9qYXuk60EEU,9096
16
- holmes/core/openai_formatting.py,sha256=wL0Fq6lDePIKR5viitQz9ZWCQZZkHZHmEUqPIsOoFns,4077
16
+ holmes/core/openai_formatting.py,sha256=31MwVvu0v0JiXot4Y0AwDJlFYe9vx8IB6mZiyC1y_lo,4684
17
17
  holmes/core/performance_timing.py,sha256=MTbTiiX2jjPmW7PuNA2eYON40eWsHPryR1ap_KlwZ_E,2217
18
18
  holmes/core/prompt.py,sha256=YkztY4gsobXys0fHxcwgngZBR2xDtBSYryY7HRnTxCQ,3025
19
19
  holmes/core/resource_instruction.py,sha256=rduue_t8iQi1jbWc3-k3jX867W1Fvc6Tah5uOJk35Mc,483
@@ -21,11 +21,11 @@ holmes/core/runbooks.py,sha256=Oj5ICmiGgaq57t4erPzQDvHQ0rMGj1nhiiYhl8peH3Q,939
21
21
  holmes/core/safeguards.py,sha256=XrKgmMoJxSROfoSOW6t6QEG2MFppzC20Nyn1HA5G4Go,4935
22
22
  holmes/core/supabase_dal.py,sha256=KSNwGz1v5dZAk_sDme1JCrPTJKc2fwApKQQu_U_r3cM,22433
23
23
  holmes/core/todo_tasks_formatter.py,sha256=USyJZcoX6zoxID1UV-abAKdaWFYLO6QJd-UKryJAurI,1487
24
- holmes/core/tool_calling_llm.py,sha256=YUUFmoTDw11ERC78gg2jTRZ6t9Dy_ba8wQiyJeJWL0k,50206
25
- holmes/core/tools.py,sha256=IOBmRdwTKeHvbvxlcT8xYJmBLcNI9CGP_iwrI-WhVio,31786
24
+ holmes/core/tool_calling_llm.py,sha256=89yMIisEb9zTZzlpTlSqCWc08GRUvNLClihGkv_YrWE,51690
25
+ holmes/core/tools.py,sha256=V0YZogQUzGUVg79mTaS0cfSh6nR_NS1zhOr0h6sNpZU,32730
26
26
  holmes/core/tools_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
- holmes/core/tools_utils/token_counting.py,sha256=3WTAgi19uK1IbtwivtSibiZWwqdtZeOOgZCVFRxUJG8,406
28
- holmes/core/tools_utils/tool_context_window_limiter.py,sha256=LoehZXp2C2ptoxbfZzzCe_t02iQOdhz-eM0k159ZIb8,2605
27
+ holmes/core/tools_utils/token_counting.py,sha256=7ZXbPqEIb8ClVvG_t9z2wlujDtX7m_pTVi242-2ZmQE,427
28
+ holmes/core/tools_utils/tool_context_window_limiter.py,sha256=LqyToJsDK-QgWmddHjDlQdb0SMMPx1iZE6soM_md6CI,2773
29
29
  holmes/core/tools_utils/tool_executor.py,sha256=pUkddbm_kgYdfhR1w5IbnSmwG56kvA4VadzBV8OqG8g,2632
30
30
  holmes/core/tools_utils/toolset_utils.py,sha256=SvWzen8Fg_TB_6Idw1hK0nCPrJL40ueWVMfsv8Kh2RY,2363
31
31
  holmes/core/toolset_manager.py,sha256=UqAUfjY09SAGirOHzyQwpOu2wxQUzU0F1STw8w-1abw,25878
@@ -36,7 +36,7 @@ holmes/core/transformers/llm_summarize.py,sha256=ZEJn3DElzMZLCCHNIzlCozllM2CmQ-J
36
36
  holmes/core/transformers/registry.py,sha256=x8kKRXJvc_tJO2RvNGyoVXt6rFgG4S_ZcTG8p_OXYH0,3771
37
37
  holmes/core/transformers/transformer.py,sha256=rfT84Oq6qJyryevZGFKEbo1VSxinK4FBWUw_HpJ72xE,1028
38
38
  holmes/core/truncation/dal_truncation_utils.py,sha256=I69I7Jac1kTtpxDRMe8O3IPN8Au0bZJqI8gXwW-GMaI,776
39
- holmes/interactive.py,sha256=bXP9qRsClwW0AlxNDWHJfJTeEwGByAoNUfL4cypJjtg,46767
39
+ holmes/interactive.py,sha256=MGo5b6PKfQWrCmwMKMiISjNY02KWDxgoKdUAfcwmjTE,47102
40
40
  holmes/main.py,sha256=cz3i9YZkvXWTK8pk5O-LfAM5AsYcOcTEKYnbvpVY5ns,35001
41
41
  holmes/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
42
  holmes/plugins/destinations/__init__.py,sha256=vMYwTfA5nQ05us5Rzbaoe0R5C8Navo6ENVZhojtACTk,98
@@ -48,7 +48,7 @@ holmes/plugins/prompts/_ai_safety.jinja2,sha256=IoVdOXHnkGwLaiuUzMczEdoahyrKhkdY
48
48
  holmes/plugins/prompts/_current_date_time.jinja2,sha256=KynAvkQFqf_SXjqVY77nB8z4RgN7gti4SBSq1H7moHs,354
49
49
  holmes/plugins/prompts/_default_log_prompt.jinja2,sha256=Tqw8CD2ZMStXIfMdYaoZT_d-FvQ_PMg6-knqag-YEgc,1478
50
50
  holmes/plugins/prompts/_fetch_logs.jinja2,sha256=penrJcRCfr8geKWNSQc-jdJ52dV-bEb1kxO6QB90dzw,5088
51
- holmes/plugins/prompts/_general_instructions.jinja2,sha256=0RB5TFGqhbQ-xNt2_oHXJjvMIBLThuRDusBbbEruy2w,5777
51
+ holmes/plugins/prompts/_general_instructions.jinja2,sha256=IvGkmKaIrG7wXJlVcNqtYrst1Z-vRZYRMENzf_nDoz4,5774
52
52
  holmes/plugins/prompts/_global_instructions.jinja2,sha256=d_c-BtDhU_Rmx637TPAyzlIIim8ZAxy7JK3V4GV8IWI,1359
53
53
  holmes/plugins/prompts/_permission_errors.jinja2,sha256=gIMQx-zaTnuEv7SkQVC_GvxsR5R85fLuDZnJIKWcm5A,480
54
54
  holmes/plugins/prompts/_runbook_instructions.jinja2,sha256=ngm3rmPPvgPG-9fjtR3yVb84YQNdNWfWShDGIag1JnY,1121
@@ -78,12 +78,12 @@ holmes/plugins/sources/pagerduty/__init__.py,sha256=LYoN1dkUg7NCx7g-gdSomTTJhHyB
78
78
  holmes/plugins/sources/prometheus/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
79
79
  holmes/plugins/sources/prometheus/models.py,sha256=9TcDIRLWZQhwjYGfRZFP_2fGweCn4G5xvYrLoXiQZTc,2904
80
80
  holmes/plugins/sources/prometheus/plugin.py,sha256=oBmuOwNM67suy6HmasUnyVOlBq9-mAxLZLlUzRHIggg,5941
81
- holmes/plugins/toolsets/__init__.py,sha256=ydF9jawE6cn8lDpyYhqSCxlvj6eAywLyUoo1bI9wDrE,7589
81
+ holmes/plugins/toolsets/__init__.py,sha256=j0gZgSU5CTSWLE87I5f0zUsHw6vh0uZl0BALEMy-wXU,7738
82
82
  holmes/plugins/toolsets/aks-node-health.yaml,sha256=37Dvk4D0ez1GQlt91MQkI0pZ5RLtUEFAOxDXDCVzb-g,5995
83
83
  holmes/plugins/toolsets/aks.yaml,sha256=_XwrMSsghFnCqlbsZvVfwF3qgQFnxi47AC5Oavi2YC0,9532
84
84
  holmes/plugins/toolsets/argocd.yaml,sha256=lbRIooJIkpumNdRgoDRHTjNb9PvFTfjQcT0iWU2x8mg,3932
85
85
  holmes/plugins/toolsets/atlas_mongodb/instructions.jinja2,sha256=iyft4EwvYcImI_YrMte8_BTJZXGV6i0k84g3oKXR23k,988
86
- holmes/plugins/toolsets/atlas_mongodb/mongodb_atlas.py,sha256=1FlArSlvS6XobEr5A-4J_VNwCIbmB4ZwFA9O0l4XRK8,15678
86
+ holmes/plugins/toolsets/atlas_mongodb/mongodb_atlas.py,sha256=8AdGtsox8huiR5UhKnQRN0cz8uPwNr1AGrtsUzvg7bY,15647
87
87
  holmes/plugins/toolsets/aws.yaml,sha256=AM5MizvfHeGFoCRr6kf3Wcd6y_EAhSDqtZajTFrLVfE,4475
88
88
  holmes/plugins/toolsets/azure_sql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
89
89
  holmes/plugins/toolsets/azure_sql/apis/alert_monitoring_api.py,sha256=DSrKzzE6lofynViYr0SGaQrWjePpzbfdt3DcplbFGek,26397
@@ -93,7 +93,7 @@ holmes/plugins/toolsets/azure_sql/apis/connection_monitoring_api.py,sha256=10k5K
93
93
  holmes/plugins/toolsets/azure_sql/apis/storage_analysis_api.py,sha256=sbz8b2IeGqwosA34ddbqnXbD_iPYKuAMyZrV0-__O9g,13835
94
94
  holmes/plugins/toolsets/azure_sql/azure_base_toolset.py,sha256=8eQPsFBPTCf_GMpbjfzzN3u-rGUXiElTD06RWCe7uso,2163
95
95
  holmes/plugins/toolsets/azure_sql/azure_sql_instructions.jinja2,sha256=GvuxActaoJXA__4k72en7I44jEv_ye0MevSmlHfnzxA,6557
96
- holmes/plugins/toolsets/azure_sql/azure_sql_toolset.py,sha256=l87m6mieP8-uTpj_NDRXbom43YP4b6TzOhnGyvn4r8c,8069
96
+ holmes/plugins/toolsets/azure_sql/azure_sql_toolset.py,sha256=QqMiV7ZY-Dh3jgRyKeON5ha5H-wbvmAVHYA9GF-2UVI,8038
97
97
  holmes/plugins/toolsets/azure_sql/install.md,sha256=eBhdG-OG9HhbrEGvI31aAHRPWwBQne6H95mvBROqZ_s,1585
98
98
  holmes/plugins/toolsets/azure_sql/tools/__init__.py,sha256=lEYFZ5X0mHdqwmi6XXTlM1qA7sBYsuQwVCXmluo-L34,25
99
99
  holmes/plugins/toolsets/azure_sql/tools/analyze_connection_failures.py,sha256=f_3TPbAjMDNAjqUr6BkoNzbMn4wvG_gQS-6HH3bC4AY,13385
@@ -169,7 +169,7 @@ holmes/plugins/toolsets/git.py,sha256=eUpQRolp6CEqUS9nMqCJcL-th0m1c8F4oYdhMv_qcG
169
169
  holmes/plugins/toolsets/grafana/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
170
170
  holmes/plugins/toolsets/grafana/base_grafana_toolset.py,sha256=AjvbS4txSo97YqeeFlXUnu95oPFt8rB-CD1Ccf92a04,1760
171
171
  holmes/plugins/toolsets/grafana/common.py,sha256=yYy6knRNUYQmZvgII-Cte9RQJNY8Sj7QlbHB0aCNFYU,2459
172
- holmes/plugins/toolsets/grafana/grafana_api.py,sha256=nq7KWoUAfFxp1-3VqKadPNKbTifLTgKUAZOFUH5QWUY,1665
172
+ holmes/plugins/toolsets/grafana/grafana_api.py,sha256=Hw6yTRyPC4pGIzV4paXYblY93iDrLjsHGxsONaq9gPU,1665
173
173
  holmes/plugins/toolsets/grafana/grafana_tempo_api.py,sha256=C8XEZzIKzeh9pG-DBQoMW4Qi2Kh3ZoI4TXVGUx2CxUc,14688
174
174
  holmes/plugins/toolsets/grafana/loki_api.py,sha256=f7oTzfhJ1LojsPoAfsKt32ADWffLEywBJQWG9eyfb7I,2529
175
175
  holmes/plugins/toolsets/grafana/toolset_grafana.py,sha256=M10S7CeOsLaSCZqQysjT4vviG7nUPc95QzWCTtPBXXE,4930
@@ -181,7 +181,7 @@ holmes/plugins/toolsets/helm.yaml,sha256=-IPDChKMHcxGbzA0z9GKczRshL-mD24cHpBizfN
181
181
  holmes/plugins/toolsets/internet/internet.py,sha256=qeV6M9302QWacFcr7bOfsZUc84v9MnlTEF_76oUOSNA,7787
182
182
  holmes/plugins/toolsets/internet/notion.py,sha256=ELDtsP8kxdU8rExEL8hq1yV5DEeWDNOljHZEwjnumJc,4795
183
183
  holmes/plugins/toolsets/investigator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
184
- holmes/plugins/toolsets/investigator/core_investigation.py,sha256=NqNlPjWGyb3A_bw5JV-ePhWOdJUmAIO4IYwa_WsygJM,5213
184
+ holmes/plugins/toolsets/investigator/core_investigation.py,sha256=kdH3kNwepSfPt7JB3IKYDbeHJAb_p3J9TWK8dAO8TcI,5292
185
185
  holmes/plugins/toolsets/investigator/investigator_instructions.jinja2,sha256=C6y6OaJI2dQSLSw7Zq9-D-sWmL5K_40zRItvkzVAdH4,13967
186
186
  holmes/plugins/toolsets/investigator/model.py,sha256=6AE9Iy05GaX3gC9ChTtZQOFGjSUsas_pB9_YyDaJXP0,342
187
187
  holmes/plugins/toolsets/kafka.py,sha256=kO_CKzdXG__6QmiwaGumZgPkdZbft0f1DpqhNV8ogs8,24774
@@ -199,10 +199,13 @@ holmes/plugins/toolsets/newrelic/newrelic.py,sha256=PCV-rN2w8gxYvo3Nq5Fauoq967ds
199
199
  holmes/plugins/toolsets/opensearch/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
200
200
  holmes/plugins/toolsets/opensearch/opensearch.py,sha256=VVyEJnECRfhwNUQqilugi9t0tPymyp7hRFwYQSFDg2E,8629
201
201
  holmes/plugins/toolsets/opensearch/opensearch_logs.py,sha256=_j-JAhLWtxhBPafCveympxtxQ2EalsqKW6jLfaXHG94,5929
202
+ holmes/plugins/toolsets/opensearch/opensearch_ppl_query_docs.jinja2,sha256=D1Xl_tFfZ91XvzRqdUjsrH0vQjs95Ddn_EPwMcwlzcs,56327
203
+ holmes/plugins/toolsets/opensearch/opensearch_query_assist.py,sha256=lt27E6Ey7EQ34YejSOrUWYlHnWTnqdgm7wHMGVVjZUo,2721
204
+ holmes/plugins/toolsets/opensearch/opensearch_query_assist_instructions.jinja2,sha256=Qoqb8wFqj0WBukA_uhA6l-2bFs06PqYFDESQCN_uWZQ,6699
202
205
  holmes/plugins/toolsets/opensearch/opensearch_traces.py,sha256=Xd_toAzZikdUrInZG8_oBQ0gI-QCvYrf0w2ZciFC1kU,8869
203
206
  holmes/plugins/toolsets/opensearch/opensearch_traces_instructions.jinja2,sha256=Xn8AW4XCMYV1VkBbF8nNB9fUpKQ1Vbm88iFczj-LQXo,1035
204
207
  holmes/plugins/toolsets/opensearch/opensearch_utils.py,sha256=mh9Wp22tOdJYmA9IaFS7tD3aEENljyeuPOsF-lEe5C0,5097
205
- holmes/plugins/toolsets/prometheus/prometheus.py,sha256=veoBZRy0ftfNeXUUNfZi8v1B_JsNNXMFucXd-01vQVs,67747
208
+ holmes/plugins/toolsets/prometheus/prometheus.py,sha256=Ip18XzSxqT0lPCQ2jnZ5MXUQoodOZdCak6KZI_IyqnM,67743
206
209
  holmes/plugins/toolsets/prometheus/prometheus_instructions.jinja2,sha256=taf5C-N9rdp1A7S__hETefcm2OaYHJLjs1ZbuqIsGtE,6383
207
210
  holmes/plugins/toolsets/prometheus/utils.py,sha256=ZenD354dP0sRmm0R-QBuAq1jyn40GjYf4wx15bXIYRc,775
208
211
  holmes/plugins/toolsets/rabbitmq/api.py,sha256=-BtqF7hQWtl_OamnQ521vYHhR8E2n2wcPNYxfI9r4kQ,14307
@@ -213,10 +216,10 @@ holmes/plugins/toolsets/robusta/robusta.py,sha256=jRNxoIUoJkvCTZZnKpFFhLA3ip0l1c
213
216
  holmes/plugins/toolsets/robusta/robusta_instructions.jinja2,sha256=E3UxlbyoNx96Fsk6d1laBTrnca1nLreWGMWnGPD2KbI,2060
214
217
  holmes/plugins/toolsets/runbook/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
215
218
  holmes/plugins/toolsets/runbook/runbook_fetcher.py,sha256=0WN_-T55M5CASGGf9uyUclhALazF8m7xYLk5-kKcHf0,10271
216
- holmes/plugins/toolsets/service_discovery.py,sha256=QVrCCVcTE7APqyr0C44MGmJyCW9Ft-Ac-Wr4XfFBfjA,3268
219
+ holmes/plugins/toolsets/service_discovery.py,sha256=HqENA92SyN7Z_Kd8OZVfw-S9PwdYhn6HDFUAo1-fosw,3268
217
220
  holmes/plugins/toolsets/servicenow/install.md,sha256=UeL069Qd2e4wC3kmc54wk62AoSpyeizKWV6NB1jUYVM,1217
218
221
  holmes/plugins/toolsets/servicenow/instructions.jinja2,sha256=koA2vJ1tOkGi2T5aGjmk9oTZPrt7WdoMSuVyxfO5-k4,491
219
- holmes/plugins/toolsets/servicenow/servicenow.py,sha256=Cb3gcrnaj-GEjoTPQJd4Tb18KwJ8hyLvHekjgs8POs8,8560
222
+ holmes/plugins/toolsets/servicenow/servicenow.py,sha256=Y95lWJugbBmz6eCjwBibMTkYMvHYc9OP_uAp1YwqYYA,8529
220
223
  holmes/plugins/toolsets/slab.yaml,sha256=1Pz0Rzs0B6-TnJiiN2w8qJ9E_bh2haQn0mfhTszaZE0,677
221
224
  holmes/plugins/toolsets/utils.py,sha256=EZqPEBJcnMZliWMiN82XOQstr_NwanEqnzsd6incEFk,6891
222
225
  holmes/plugins/utils.py,sha256=Wn_UxZMB4V2_UiJDNy0pifGnIGS_zUwRhUlmttCywnY,372
@@ -240,11 +243,11 @@ holmes/utils/llms.py,sha256=YLqq54I84wW7Kp7Z7CPVTxAFPb-Sq6xkdmVGzVf60jI,629
240
243
  holmes/utils/markdown_utils.py,sha256=_yDc_IRB5zkj9THUlZ6nzir44VfirTjPccC_DrFrBkc,1507
241
244
  holmes/utils/pydantic_utils.py,sha256=g0e0jLTa8Je8JKrhEP4N5sMxj0_hhPOqFZr0Vpd67sg,1649
242
245
  holmes/utils/sentry_helper.py,sha256=BPkyMs7Yo_0b7QLMmAQ3mKZyXTmxkgVRjr3kikr5ZX8,1328
243
- holmes/utils/stream.py,sha256=B0PigMm2_KBwFKeVu0IxxR07gR65Eq3mJ5FntdVTNTo,3894
246
+ holmes/utils/stream.py,sha256=W3qk6XLjMMtm6tMrQ_QB9lWPbtHcaGGZmKSTlSk6QQ8,4803
244
247
  holmes/utils/tags.py,sha256=SU4EZMBtLlIb7OlHsSpguFaypczRzOcuHYxDSanV3sQ,3364
245
248
  holmes/version.py,sha256=5-3__IY_2hcIC4WQyTqcdyX1QF-e2VfkYKrI4BIrq0Q,5992
246
- holmesgpt-0.14.4a0.dist-info/LICENSE.txt,sha256=RdZMj8VXRQdVslr6PMYMbAEu5pOjOdjDqt3yAmWb9Ds,1072
247
- holmesgpt-0.14.4a0.dist-info/METADATA,sha256=sTDKlYJOK5I5hnc2sTIzsNDsKw_usivdEzdoupLYMH8,16078
248
- holmesgpt-0.14.4a0.dist-info/WHEEL,sha256=kLuE8m1WYU0Ig0_YEGrXyTtiJvKPpLpDEiChiNyei5Y,88
249
- holmesgpt-0.14.4a0.dist-info/entry_points.txt,sha256=JdzEyZhpaYr7Boo4uy4UZgzY1VsAEbzMgGmHZtx9KFY,42
250
- holmesgpt-0.14.4a0.dist-info/RECORD,,
249
+ holmesgpt-0.15.0.dist-info/LICENSE.txt,sha256=RdZMj8VXRQdVslr6PMYMbAEu5pOjOdjDqt3yAmWb9Ds,1072
250
+ holmesgpt-0.15.0.dist-info/METADATA,sha256=uS5b8hrYZ0d0WMzrameeXcIRulIXfrlBuGROP0fNlrI,16171
251
+ holmesgpt-0.15.0.dist-info/WHEEL,sha256=kLuE8m1WYU0Ig0_YEGrXyTtiJvKPpLpDEiChiNyei5Y,88
252
+ holmesgpt-0.15.0.dist-info/entry_points.txt,sha256=JdzEyZhpaYr7Boo4uy4UZgzY1VsAEbzMgGmHZtx9KFY,42
253
+ holmesgpt-0.15.0.dist-info/RECORD,,