holmesgpt 0.14.3a0__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.
- holmes/__init__.py +1 -1
- holmes/clients/robusta_client.py +12 -10
- holmes/common/env_vars.py +14 -0
- holmes/config.py +51 -4
- holmes/core/conversations.py +3 -2
- holmes/core/llm.py +198 -72
- holmes/core/openai_formatting.py +13 -0
- holmes/core/tool_calling_llm.py +129 -95
- holmes/core/tools.py +21 -1
- holmes/core/tools_utils/token_counting.py +2 -1
- holmes/core/tools_utils/tool_context_window_limiter.py +13 -4
- holmes/interactive.py +17 -7
- holmes/plugins/prompts/_general_instructions.jinja2 +1 -2
- holmes/plugins/toolsets/__init__.py +4 -0
- holmes/plugins/toolsets/atlas_mongodb/mongodb_atlas.py +0 -1
- holmes/plugins/toolsets/azure_sql/azure_sql_toolset.py +0 -1
- holmes/plugins/toolsets/grafana/grafana_api.py +1 -1
- holmes/plugins/toolsets/investigator/core_investigation.py +14 -13
- holmes/plugins/toolsets/opensearch/opensearch_ppl_query_docs.jinja2 +1616 -0
- holmes/plugins/toolsets/opensearch/opensearch_query_assist.py +78 -0
- holmes/plugins/toolsets/opensearch/opensearch_query_assist_instructions.jinja2 +223 -0
- holmes/plugins/toolsets/prometheus/prometheus.py +7 -4
- holmes/plugins/toolsets/service_discovery.py +1 -1
- holmes/plugins/toolsets/servicenow/servicenow.py +0 -1
- holmes/utils/stream.py +30 -1
- {holmesgpt-0.14.3a0.dist-info → holmesgpt-0.15.0.dist-info}/METADATA +3 -1
- {holmesgpt-0.14.3a0.dist-info → holmesgpt-0.15.0.dist-info}/RECORD +30 -27
- {holmesgpt-0.14.3a0.dist-info → holmesgpt-0.15.0.dist-info}/LICENSE.txt +0 -0
- {holmesgpt-0.14.3a0.dist-info → holmesgpt-0.15.0.dist-info}/WHEEL +0 -0
- {holmesgpt-0.14.3a0.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" %}
|
|
@@ -92,9 +92,12 @@ class PrometheusConfig(BaseModel):
|
|
|
92
92
|
rules_cache_duration_seconds: Optional[int] = 1800 # 30 minutes
|
|
93
93
|
additional_labels: Optional[Dict[str, str]] = None
|
|
94
94
|
prometheus_ssl_enabled: bool = True
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
95
|
+
|
|
96
|
+
# Custom limit to the max number of tokens that a query result can take to proactively
|
|
97
|
+
# prevent token limit issues. Expressed in % of the model's context window.
|
|
98
|
+
# This limit only overrides the global limit for all tools (TOOL_MAX_ALLOCATED_CONTEXT_WINDOW_PCT)
|
|
99
|
+
# if it is lower.
|
|
100
|
+
query_response_size_limit_pct: Optional[int] = None
|
|
98
101
|
|
|
99
102
|
@field_validator("prometheus_url")
|
|
100
103
|
def ensure_trailing_slash(cls, v: Optional[str]) -> Optional[str]:
|
|
@@ -1588,7 +1591,7 @@ class PrometheusToolset(Toolset):
|
|
|
1588
1591
|
)
|
|
1589
1592
|
|
|
1590
1593
|
except Exception as e:
|
|
1591
|
-
logging.
|
|
1594
|
+
logging.debug("Failed to initialize Prometheus", exc_info=True)
|
|
1592
1595
|
return (
|
|
1593
1596
|
False,
|
|
1594
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"
|
|
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.
|
|
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=
|
|
3
|
-
holmes/clients/robusta_client.py,sha256=
|
|
4
|
-
holmes/common/env_vars.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
25
|
-
holmes/core/tools.py,sha256=
|
|
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=
|
|
28
|
-
holmes/core/tools_utils/tool_context_window_limiter.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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.
|
|
247
|
-
holmesgpt-0.
|
|
248
|
-
holmesgpt-0.
|
|
249
|
-
holmesgpt-0.
|
|
250
|
-
holmesgpt-0.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|