weave-python 0.28.2__py3-none-any.whl → 0.30.3__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.
- weave/weaveapi/auth/v1/service_pb2.py +194 -98
- weave/weaveapi/auth/v1/service_pb2.pyi +1288 -1134
- weave/weaveapi/auth/v1/service_pb2_grpc.pyi +248 -335
- weave/weaveapi/auth/v1/session_pb2.py +14 -6
- weave/weaveapi/auth/v1/session_pb2.pyi +109 -89
- weave/weaveapi/auth/v1/session_pb2_grpc.pyi +11 -10
- weave/weaveapi/auth/v1/usage_pb2.py +18 -14
- weave/weaveapi/auth/v1/usage_pb2.pyi +251 -197
- weave/weaveapi/auth/v1/usage_pb2_grpc.pyi +11 -10
- weave/weaveapi/auth/v1/user_pb2.py +60 -18
- weave/weaveapi/auth/v1/user_pb2.pyi +588 -505
- weave/weaveapi/auth/v1/user_pb2_grpc.pyi +11 -10
- weave/weaveapi/generate/v1/configuration_pb2.py +31 -19
- weave/weaveapi/generate/v1/configuration_pb2.pyi +277 -241
- weave/weaveapi/generate/v1/configuration_pb2_grpc.pyi +11 -10
- weave/weaveapi/generate/v1/generate_pb2.py +32 -6
- weave/weaveapi/generate/v1/generate_pb2.pyi +138 -40
- weave/weaveapi/generate/v1/generate_pb2_grpc.pyi +11 -10
- weave/weaveapi/generate/v1/service_pb2.py +52 -22
- weave/weaveapi/generate/v1/service_pb2.pyi +264 -135
- weave/weaveapi/generate/v1/service_pb2_grpc.py +47 -0
- weave/weaveapi/generate/v1/service_pb2_grpc.pyi +89 -78
- weave/weaveapi/llmx/v1/architecture_pb2.py +42 -42
- weave/weaveapi/llmx/v1/architecture_pb2.pyi +664 -555
- weave/weaveapi/llmx/v1/architecture_pb2_grpc.pyi +11 -10
- weave/weaveapi/llmx/v1/capabilities_pb2.py +88 -56
- weave/weaveapi/llmx/v1/capabilities_pb2.pyi +967 -852
- weave/weaveapi/llmx/v1/capabilities_pb2_grpc.pyi +11 -10
- weave/weaveapi/llmx/v1/model_pb2.py +56 -20
- weave/weaveapi/llmx/v1/model_pb2.pyi +533 -455
- weave/weaveapi/llmx/v1/model_pb2_grpc.pyi +11 -10
- weave/weaveapi/llmx/v1/pricing_pb2.py +24 -20
- weave/weaveapi/llmx/v1/pricing_pb2.pyi +194 -172
- weave/weaveapi/llmx/v1/pricing_pb2_grpc.pyi +11 -10
- weave/weaveapi/llmx/v1/provider_pb2.py +6 -6
- weave/weaveapi/llmx/v1/provider_pb2.pyi +84 -59
- weave/weaveapi/llmx/v1/provider_pb2_grpc.pyi +11 -10
- weave/weaveapi/llmx/v1/service_pb2.py +228 -90
- weave/weaveapi/llmx/v1/service_pb2.pyi +1651 -1403
- weave/weaveapi/llmx/v1/service_pb2_grpc.pyi +160 -203
- weave/weaveapi/mcpregistry/v1/server_pb2.py +16 -10
- weave/weaveapi/mcpregistry/v1/server_pb2.pyi +143 -121
- weave/weaveapi/mcpregistry/v1/server_pb2_grpc.pyi +11 -10
- weave/weaveapi/mcpregistry/v1/service_pb2.py +51 -31
- weave/weaveapi/mcpregistry/v1/service_pb2.pyi +132 -122
- weave/weaveapi/mcpregistry/v1/service_pb2_grpc.pyi +87 -112
- weave/weaveapi/payment/v1/invoice_pb2.py +38 -12
- weave/weaveapi/payment/v1/invoice_pb2.pyi +352 -291
- weave/weaveapi/payment/v1/invoice_pb2_grpc.pyi +11 -10
- weave/weaveapi/payment/v1/service_pb2.py +264 -98
- weave/weaveapi/payment/v1/service_pb2.pyi +1381 -1242
- weave/weaveapi/payment/v1/service_pb2_grpc.pyi +229 -319
- weave/weaveapi/payment/v1/subscription_pb2.py +99 -23
- weave/weaveapi/payment/v1/subscription_pb2.pyi +727 -611
- weave/weaveapi/payment/v1/subscription_pb2_grpc.pyi +11 -10
- weave/weaveapi/storage/v1/auth_pb2.py +6 -6
- weave/weaveapi/storage/v1/auth_pb2.pyi +42 -29
- weave/weaveapi/storage/v1/auth_pb2_grpc.pyi +11 -10
- weave/weaveapi/storage/v1/nosql_database_pb2.py +47 -23
- weave/weaveapi/storage/v1/nosql_database_pb2.pyi +438 -372
- weave/weaveapi/storage/v1/nosql_database_pb2_grpc.pyi +11 -10
- weave/weaveapi/storage/v1/object_store_pb2.py +27 -13
- weave/weaveapi/storage/v1/object_store_pb2.pyi +203 -187
- weave/weaveapi/storage/v1/object_store_pb2_grpc.pyi +11 -10
- weave/weaveapi/storage/v1/service_pb2.py +96 -36
- weave/weaveapi/storage/v1/service_pb2.pyi +414 -357
- weave/weaveapi/storage/v1/service_pb2_grpc.pyi +88 -107
- weave/weaveapi/storage/v1/sql_database_pb2.py +39 -23
- weave/weaveapi/storage/v1/sql_database_pb2.pyi +481 -400
- weave/weaveapi/storage/v1/sql_database_pb2_grpc.pyi +11 -10
- weave/weaveapi/storage/v1/storage_pb2.py +20 -6
- weave/weaveapi/storage/v1/storage_pb2.pyi +79 -70
- weave/weaveapi/storage/v1/storage_pb2_grpc.pyi +11 -10
- weave/weaveapi/synthesize/v1/dataset_pb2.py +14 -12
- weave/weaveapi/synthesize/v1/dataset_pb2.pyi +158 -128
- weave/weaveapi/synthesize/v1/dataset_pb2_grpc.pyi +11 -10
- weave/weaveapi/synthesize/v1/inline_data_pb2.py +9 -9
- weave/weaveapi/synthesize/v1/inline_data_pb2.pyi +31 -27
- weave/weaveapi/synthesize/v1/inline_data_pb2_grpc.pyi +11 -10
- weave/weaveapi/synthesize/v1/relationship_pb2.py +19 -11
- weave/weaveapi/synthesize/v1/relationship_pb2.pyi +67 -64
- weave/weaveapi/synthesize/v1/relationship_pb2_grpc.pyi +11 -10
- weave/weaveapi/synthesize/v1/service_pb2.py +42 -24
- weave/weaveapi/synthesize/v1/service_pb2.pyi +202 -168
- weave/weaveapi/synthesize/v1/service_pb2_grpc.pyi +67 -79
- weave/weaveapi/synthesize/v1/training_pb2.py +19 -13
- weave/weaveapi/synthesize/v1/training_pb2.pyi +119 -106
- weave/weaveapi/synthesize/v1/training_pb2_grpc.pyi +11 -10
- weave/weavesql/llmxdb/capabilities.py +487 -0
- weave/weavesql/llmxdb/changes.py +297 -0
- weave/weavesql/llmxdb/models.py +594 -0
- weave/weavesql/llmxdb/providers.py +348 -0
- weave/weavesql/llmxdb/scraper_runs.py +287 -0
- weave/weavesql/llmxdb/search.py +721 -0
- weave/weavesql/weavedb/dataset.py +75 -0
- weave/weavesql/weavedb/models.py +135 -0
- weave/weavesql/weavedb/relationships.py +72 -0
- weave/weavesql/weavedb/storage.py +113 -0
- weave/weavesql/weavedb/synthesizer.py +107 -0
- {weave_python-0.28.2.dist-info → weave_python-0.30.3.dist-info}/METADATA +3 -3
- weave_python-0.30.3.dist-info/RECORD +131 -0
- {weave_python-0.28.2.dist-info → weave_python-0.30.3.dist-info}/WHEEL +1 -1
- weave_python-0.28.2.dist-info/RECORD +0 -120
- {weave_python-0.28.2.dist-info → weave_python-0.30.3.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
# Code generated by sqlc. DO NOT EDIT.
|
|
2
|
+
# versions:
|
|
3
|
+
# sqlc v1.28.0
|
|
4
|
+
# source: changes.sql
|
|
5
|
+
import dataclasses
|
|
6
|
+
import datetime
|
|
7
|
+
from typing import AsyncIterator, Iterator, List, Optional
|
|
8
|
+
import uuid
|
|
9
|
+
|
|
10
|
+
import sqlalchemy
|
|
11
|
+
import sqlalchemy.ext.asyncio
|
|
12
|
+
|
|
13
|
+
from weave.weavesql.llmxdb import models
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
BATCH_INSERT_CHANGES = """-- name: batch_insert_changes \\:copyfrom
|
|
17
|
+
INSERT INTO model_changes (
|
|
18
|
+
model_id, field_name, old_value, new_value, change_type
|
|
19
|
+
) VALUES (
|
|
20
|
+
:p1, :p2, :p3, :p4, :p5
|
|
21
|
+
)
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@dataclasses.dataclass()
|
|
26
|
+
class BatchInsertChangesParams:
|
|
27
|
+
model_id: uuid.UUID
|
|
28
|
+
field_name: str
|
|
29
|
+
old_value: Optional[str]
|
|
30
|
+
new_value: Optional[str]
|
|
31
|
+
change_type: Optional[str]
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
GET_CHANGES_BY_MODEL = """-- name: get_changes_by_model \\:many
|
|
35
|
+
SELECT id, model_id, field_name, old_value, new_value, change_type, detected_at, created_at
|
|
36
|
+
FROM model_changes
|
|
37
|
+
WHERE model_id = :p1
|
|
38
|
+
ORDER BY detected_at DESC
|
|
39
|
+
LIMIT :p2
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
GET_CHANGES_BY_TYPE = """-- name: get_changes_by_type \\:many
|
|
44
|
+
SELECT mc.id, mc.model_id, mc.field_name, mc.old_value, mc.new_value, mc.change_type, mc.detected_at, mc.created_at,
|
|
45
|
+
lm.slug as model_slug,
|
|
46
|
+
lm.name as model_name
|
|
47
|
+
FROM model_changes mc
|
|
48
|
+
JOIN llm_models lm ON mc.model_id = lm.id
|
|
49
|
+
WHERE mc.change_type = :p1
|
|
50
|
+
AND mc.detected_at > :p2
|
|
51
|
+
ORDER BY mc.detected_at DESC
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
@dataclasses.dataclass()
|
|
56
|
+
class GetChangesByTypeRow:
|
|
57
|
+
id: uuid.UUID
|
|
58
|
+
model_id: uuid.UUID
|
|
59
|
+
field_name: str
|
|
60
|
+
old_value: Optional[str]
|
|
61
|
+
new_value: Optional[str]
|
|
62
|
+
change_type: Optional[str]
|
|
63
|
+
detected_at: Optional[datetime.datetime]
|
|
64
|
+
created_at: Optional[datetime.datetime]
|
|
65
|
+
model_slug: str
|
|
66
|
+
model_name: str
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
GET_RECENT_CHANGES = """-- name: get_recent_changes \\:many
|
|
70
|
+
SELECT id, model_id, field_name, old_value, new_value, change_type, detected_at, created_at
|
|
71
|
+
FROM model_changes
|
|
72
|
+
WHERE detected_at > NOW() - INTERVAL '24 hours'
|
|
73
|
+
ORDER BY detected_at DESC
|
|
74
|
+
LIMIT :p1
|
|
75
|
+
"""
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
INSERT_MODEL_CHANGE = """-- name: insert_model_change \\:one
|
|
79
|
+
INSERT INTO model_changes (model_id, field_name, old_value, new_value, change_type)
|
|
80
|
+
VALUES (:p1, :p2, :p3, :p4, :p5)
|
|
81
|
+
RETURNING id, model_id, field_name, old_value, new_value, change_type, detected_at, created_at
|
|
82
|
+
"""
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
@dataclasses.dataclass()
|
|
86
|
+
class InsertModelChangeParams:
|
|
87
|
+
model_id: uuid.UUID
|
|
88
|
+
field_name: str
|
|
89
|
+
old_value: Optional[str]
|
|
90
|
+
new_value: Optional[str]
|
|
91
|
+
change_type: Optional[str]
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
class Querier:
|
|
95
|
+
def __init__(self, conn: sqlalchemy.engine.Connection):
|
|
96
|
+
self._conn = conn
|
|
97
|
+
|
|
98
|
+
def batch_insert_changes(self, arg_list: List[BatchInsertChangesParams]) -> int:
|
|
99
|
+
data = list()
|
|
100
|
+
for item in arg_list:
|
|
101
|
+
data.append(
|
|
102
|
+
{
|
|
103
|
+
"p1": item.model_id,
|
|
104
|
+
"p2": item.field_name,
|
|
105
|
+
"p3": item.old_value,
|
|
106
|
+
"p4": item.new_value,
|
|
107
|
+
"p5": item.change_type,
|
|
108
|
+
}
|
|
109
|
+
)
|
|
110
|
+
result = self._conn.execute(sqlalchemy.text(BATCH_INSERT_CHANGES), data)
|
|
111
|
+
return result.rowcount
|
|
112
|
+
|
|
113
|
+
def get_changes_by_model(
|
|
114
|
+
self, *, model_id: uuid.UUID, limit_count: int
|
|
115
|
+
) -> Iterator[models.ModelChange]:
|
|
116
|
+
result = self._conn.execute(
|
|
117
|
+
sqlalchemy.text(GET_CHANGES_BY_MODEL), {"p1": model_id, "p2": limit_count}
|
|
118
|
+
)
|
|
119
|
+
for row in result:
|
|
120
|
+
yield models.ModelChange(
|
|
121
|
+
id=row[0],
|
|
122
|
+
model_id=row[1],
|
|
123
|
+
field_name=row[2],
|
|
124
|
+
old_value=row[3],
|
|
125
|
+
new_value=row[4],
|
|
126
|
+
change_type=row[5],
|
|
127
|
+
detected_at=row[6],
|
|
128
|
+
created_at=row[7],
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
def get_changes_by_type(
|
|
132
|
+
self, *, change_type: Optional[str], since: Optional[datetime.datetime]
|
|
133
|
+
) -> Iterator[GetChangesByTypeRow]:
|
|
134
|
+
result = self._conn.execute(
|
|
135
|
+
sqlalchemy.text(GET_CHANGES_BY_TYPE), {"p1": change_type, "p2": since}
|
|
136
|
+
)
|
|
137
|
+
for row in result:
|
|
138
|
+
yield GetChangesByTypeRow(
|
|
139
|
+
id=row[0],
|
|
140
|
+
model_id=row[1],
|
|
141
|
+
field_name=row[2],
|
|
142
|
+
old_value=row[3],
|
|
143
|
+
new_value=row[4],
|
|
144
|
+
change_type=row[5],
|
|
145
|
+
detected_at=row[6],
|
|
146
|
+
created_at=row[7],
|
|
147
|
+
model_slug=row[8],
|
|
148
|
+
model_name=row[9],
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
def get_recent_changes(self, *, limit_count: int) -> Iterator[models.ModelChange]:
|
|
152
|
+
result = self._conn.execute(
|
|
153
|
+
sqlalchemy.text(GET_RECENT_CHANGES), {"p1": limit_count}
|
|
154
|
+
)
|
|
155
|
+
for row in result:
|
|
156
|
+
yield models.ModelChange(
|
|
157
|
+
id=row[0],
|
|
158
|
+
model_id=row[1],
|
|
159
|
+
field_name=row[2],
|
|
160
|
+
old_value=row[3],
|
|
161
|
+
new_value=row[4],
|
|
162
|
+
change_type=row[5],
|
|
163
|
+
detected_at=row[6],
|
|
164
|
+
created_at=row[7],
|
|
165
|
+
)
|
|
166
|
+
|
|
167
|
+
def insert_model_change(
|
|
168
|
+
self, arg: InsertModelChangeParams
|
|
169
|
+
) -> Optional[models.ModelChange]:
|
|
170
|
+
row = self._conn.execute(
|
|
171
|
+
sqlalchemy.text(INSERT_MODEL_CHANGE),
|
|
172
|
+
{
|
|
173
|
+
"p1": arg.model_id,
|
|
174
|
+
"p2": arg.field_name,
|
|
175
|
+
"p3": arg.old_value,
|
|
176
|
+
"p4": arg.new_value,
|
|
177
|
+
"p5": arg.change_type,
|
|
178
|
+
},
|
|
179
|
+
).first()
|
|
180
|
+
if row is None:
|
|
181
|
+
return None
|
|
182
|
+
return models.ModelChange(
|
|
183
|
+
id=row[0],
|
|
184
|
+
model_id=row[1],
|
|
185
|
+
field_name=row[2],
|
|
186
|
+
old_value=row[3],
|
|
187
|
+
new_value=row[4],
|
|
188
|
+
change_type=row[5],
|
|
189
|
+
detected_at=row[6],
|
|
190
|
+
created_at=row[7],
|
|
191
|
+
)
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
class AsyncQuerier:
|
|
195
|
+
def __init__(self, conn: sqlalchemy.ext.asyncio.AsyncConnection):
|
|
196
|
+
self._conn = conn
|
|
197
|
+
|
|
198
|
+
async def batch_insert_changes(
|
|
199
|
+
self, arg_list: List[BatchInsertChangesParams]
|
|
200
|
+
) -> int:
|
|
201
|
+
data = list()
|
|
202
|
+
for item in arg_list:
|
|
203
|
+
data.append(
|
|
204
|
+
{
|
|
205
|
+
"p1": item.model_id,
|
|
206
|
+
"p2": item.field_name,
|
|
207
|
+
"p3": item.old_value,
|
|
208
|
+
"p4": item.new_value,
|
|
209
|
+
"p5": item.change_type,
|
|
210
|
+
}
|
|
211
|
+
)
|
|
212
|
+
result = await self._conn.execute(sqlalchemy.text(BATCH_INSERT_CHANGES), data)
|
|
213
|
+
return result.rowcount
|
|
214
|
+
|
|
215
|
+
async def get_changes_by_model(
|
|
216
|
+
self, *, model_id: uuid.UUID, limit_count: int
|
|
217
|
+
) -> AsyncIterator[models.ModelChange]:
|
|
218
|
+
result = await self._conn.stream(
|
|
219
|
+
sqlalchemy.text(GET_CHANGES_BY_MODEL), {"p1": model_id, "p2": limit_count}
|
|
220
|
+
)
|
|
221
|
+
async for row in result:
|
|
222
|
+
yield models.ModelChange(
|
|
223
|
+
id=row[0],
|
|
224
|
+
model_id=row[1],
|
|
225
|
+
field_name=row[2],
|
|
226
|
+
old_value=row[3],
|
|
227
|
+
new_value=row[4],
|
|
228
|
+
change_type=row[5],
|
|
229
|
+
detected_at=row[6],
|
|
230
|
+
created_at=row[7],
|
|
231
|
+
)
|
|
232
|
+
|
|
233
|
+
async def get_changes_by_type(
|
|
234
|
+
self, *, change_type: Optional[str], since: Optional[datetime.datetime]
|
|
235
|
+
) -> AsyncIterator[GetChangesByTypeRow]:
|
|
236
|
+
result = await self._conn.stream(
|
|
237
|
+
sqlalchemy.text(GET_CHANGES_BY_TYPE), {"p1": change_type, "p2": since}
|
|
238
|
+
)
|
|
239
|
+
async for row in result:
|
|
240
|
+
yield GetChangesByTypeRow(
|
|
241
|
+
id=row[0],
|
|
242
|
+
model_id=row[1],
|
|
243
|
+
field_name=row[2],
|
|
244
|
+
old_value=row[3],
|
|
245
|
+
new_value=row[4],
|
|
246
|
+
change_type=row[5],
|
|
247
|
+
detected_at=row[6],
|
|
248
|
+
created_at=row[7],
|
|
249
|
+
model_slug=row[8],
|
|
250
|
+
model_name=row[9],
|
|
251
|
+
)
|
|
252
|
+
|
|
253
|
+
async def get_recent_changes(
|
|
254
|
+
self, *, limit_count: int
|
|
255
|
+
) -> AsyncIterator[models.ModelChange]:
|
|
256
|
+
result = await self._conn.stream(
|
|
257
|
+
sqlalchemy.text(GET_RECENT_CHANGES), {"p1": limit_count}
|
|
258
|
+
)
|
|
259
|
+
async for row in result:
|
|
260
|
+
yield models.ModelChange(
|
|
261
|
+
id=row[0],
|
|
262
|
+
model_id=row[1],
|
|
263
|
+
field_name=row[2],
|
|
264
|
+
old_value=row[3],
|
|
265
|
+
new_value=row[4],
|
|
266
|
+
change_type=row[5],
|
|
267
|
+
detected_at=row[6],
|
|
268
|
+
created_at=row[7],
|
|
269
|
+
)
|
|
270
|
+
|
|
271
|
+
async def insert_model_change(
|
|
272
|
+
self, arg: InsertModelChangeParams
|
|
273
|
+
) -> Optional[models.ModelChange]:
|
|
274
|
+
row = (
|
|
275
|
+
await self._conn.execute(
|
|
276
|
+
sqlalchemy.text(INSERT_MODEL_CHANGE),
|
|
277
|
+
{
|
|
278
|
+
"p1": arg.model_id,
|
|
279
|
+
"p2": arg.field_name,
|
|
280
|
+
"p3": arg.old_value,
|
|
281
|
+
"p4": arg.new_value,
|
|
282
|
+
"p5": arg.change_type,
|
|
283
|
+
},
|
|
284
|
+
)
|
|
285
|
+
).first()
|
|
286
|
+
if row is None:
|
|
287
|
+
return None
|
|
288
|
+
return models.ModelChange(
|
|
289
|
+
id=row[0],
|
|
290
|
+
model_id=row[1],
|
|
291
|
+
field_name=row[2],
|
|
292
|
+
old_value=row[3],
|
|
293
|
+
new_value=row[4],
|
|
294
|
+
change_type=row[5],
|
|
295
|
+
detected_at=row[6],
|
|
296
|
+
created_at=row[7],
|
|
297
|
+
)
|