relationalai 0.12.1__py3-none-any.whl → 0.12.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.
- relationalai/clients/direct_access_client.py +5 -0
- relationalai/clients/snowflake.py +31 -8
- relationalai/clients/use_index_poller.py +24 -7
- relationalai/experimental/solvers.py +296 -93
- relationalai/semantics/internal/internal.py +8 -8
- relationalai/semantics/lqp/executor.py +36 -3
- relationalai/semantics/lqp/model2lqp.py +3 -2
- relationalai/semantics/lqp/rewrite/extract_common.py +4 -2
- relationalai/semantics/metamodel/builtins.py +6 -6
- relationalai/semantics/metamodel/dependency.py +40 -20
- relationalai/semantics/metamodel/helpers.py +7 -6
- relationalai/semantics/metamodel/rewrite/extract_nested_logicals.py +1 -4
- relationalai/semantics/reasoners/graph/core.py +731 -95
- relationalai/semantics/rel/executor.py +11 -2
- relationalai/semantics/std/math.py +2 -2
- {relationalai-0.12.1.dist-info → relationalai-0.12.3.dist-info}/METADATA +1 -1
- {relationalai-0.12.1.dist-info → relationalai-0.12.3.dist-info}/RECORD +20 -20
- {relationalai-0.12.1.dist-info → relationalai-0.12.3.dist-info}/WHEEL +0 -0
- {relationalai-0.12.1.dist-info → relationalai-0.12.3.dist-info}/entry_points.txt +0 -0
- {relationalai-0.12.1.dist-info → relationalai-0.12.3.dist-info}/licenses/LICENSE +0 -0
|
@@ -49,6 +49,11 @@ class DirectAccessClient:
|
|
|
49
49
|
"suspend_engine": Endpoint(method="POST", endpoint="/v1alpha1/engines/{engine_type}/{engine_name}/suspend"),
|
|
50
50
|
"resume_engine": Endpoint(method="POST", endpoint="/v1alpha1/engines/{engine_type}/{engine_name}/resume_async"),
|
|
51
51
|
"prepare_index": Endpoint(method="POST", endpoint="/v1alpha1/index/prepare"),
|
|
52
|
+
"get_job": Endpoint(method="GET", endpoint="/v1alpha1/jobs/{job_type}/{job_id}"),
|
|
53
|
+
"list_jobs": Endpoint(method="GET", endpoint="/v1alpha1/jobs"),
|
|
54
|
+
"get_job_events": Endpoint(method="GET", endpoint="/v1alpha1/jobs/{job_type}/{job_id}/events/{stream_name}"),
|
|
55
|
+
"create_job": Endpoint(method="POST", endpoint="/v1alpha1/jobs"),
|
|
56
|
+
"cancel_job": Endpoint(method="POST", endpoint="/v1alpha1/jobs/{job_type}/{job_id}/cancel"),
|
|
52
57
|
}
|
|
53
58
|
self.http_session = self._create_retry_session()
|
|
54
59
|
|
|
@@ -761,13 +761,13 @@ Otherwise, remove it from your '{profile}' configuration profile.
|
|
|
761
761
|
with debugging.span("create_model", name=name):
|
|
762
762
|
self._exec(f"call {APP_NAME}.api.create_database('{name}', false, {debugging.gen_current_propagation_headers()});")
|
|
763
763
|
|
|
764
|
-
def delete_graph(self, name:str, force=False):
|
|
764
|
+
def delete_graph(self, name:str, force=False, language:str="rel"):
|
|
765
765
|
prop_hdrs = debugging.gen_current_propagation_headers()
|
|
766
766
|
if self.config.get("use_graph_index", USE_GRAPH_INDEX):
|
|
767
767
|
keep_database = not force and self.config.get("reuse_model", True)
|
|
768
|
-
with debugging.span("release_index", name=name, keep_database=keep_database):
|
|
768
|
+
with debugging.span("release_index", name=name, keep_database=keep_database, language=language):
|
|
769
769
|
#TODO add headers to release_index
|
|
770
|
-
response = self._exec(f"call {APP_NAME}.api.release_index('{name}', OBJECT_CONSTRUCT('keep_database', {keep_database}));")
|
|
770
|
+
response = self._exec(f"call {APP_NAME}.api.release_index('{name}', OBJECT_CONSTRUCT('keep_database', {keep_database}, 'language', '{language}'));")
|
|
771
771
|
if response:
|
|
772
772
|
result = next(iter(response))
|
|
773
773
|
obj = json.loads(result["RELEASE_INDEX"])
|
|
@@ -795,6 +795,7 @@ Otherwise, remove it from your '{profile}' configuration profile.
|
|
|
795
795
|
model: str,
|
|
796
796
|
engine_name: str,
|
|
797
797
|
engine_size: str | None = None,
|
|
798
|
+
language: str = "rel",
|
|
798
799
|
program_span_id: str | None = None,
|
|
799
800
|
headers: Dict | None = None,
|
|
800
801
|
):
|
|
@@ -805,6 +806,7 @@ Otherwise, remove it from your '{profile}' configuration profile.
|
|
|
805
806
|
model,
|
|
806
807
|
engine_name,
|
|
807
808
|
engine_size,
|
|
809
|
+
language,
|
|
808
810
|
program_span_id,
|
|
809
811
|
headers,
|
|
810
812
|
self.generation
|
|
@@ -2970,7 +2972,16 @@ class SnowflakeClient(Client):
|
|
|
2970
2972
|
|
|
2971
2973
|
query_attrs_dict = json.loads(headers.get("X-Query-Attributes", "{}")) if headers else {}
|
|
2972
2974
|
with debugging.span("poll_use_index", sources=self.resources.sources, model=model, engine=engine_name, **query_attrs_dict):
|
|
2973
|
-
self.poll_use_index(
|
|
2975
|
+
self.poll_use_index(
|
|
2976
|
+
app_name=app_name,
|
|
2977
|
+
sources=self.resources.sources,
|
|
2978
|
+
model=model,
|
|
2979
|
+
engine_name=engine_name,
|
|
2980
|
+
engine_size=engine_size,
|
|
2981
|
+
language="rel",
|
|
2982
|
+
program_span_id=program_span_id,
|
|
2983
|
+
headers=headers
|
|
2984
|
+
)
|
|
2974
2985
|
|
|
2975
2986
|
self.last_database_version = len(self.resources.sources)
|
|
2976
2987
|
self._manage_packages()
|
|
@@ -2989,12 +3000,20 @@ class SnowflakeClient(Client):
|
|
|
2989
3000
|
model: str,
|
|
2990
3001
|
engine_name: str,
|
|
2991
3002
|
engine_size: str | None = None,
|
|
3003
|
+
language: str = "rel",
|
|
2992
3004
|
program_span_id: str | None = None,
|
|
2993
3005
|
headers: Dict | None = None,
|
|
2994
3006
|
):
|
|
2995
3007
|
assert isinstance(self.resources, Resources)
|
|
2996
3008
|
return self.resources.poll_use_index(
|
|
2997
|
-
app_name,
|
|
3009
|
+
app_name=app_name,
|
|
3010
|
+
sources=sources,
|
|
3011
|
+
model=model,
|
|
3012
|
+
engine_name=engine_name,
|
|
3013
|
+
engine_size=engine_size,
|
|
3014
|
+
language=language,
|
|
3015
|
+
program_span_id=program_span_id,
|
|
3016
|
+
headers=headers
|
|
2998
3017
|
)
|
|
2999
3018
|
|
|
3000
3019
|
|
|
@@ -3302,6 +3321,7 @@ class DirectAccessResources(Resources):
|
|
|
3302
3321
|
model: str,
|
|
3303
3322
|
engine_name: str,
|
|
3304
3323
|
engine_size: str = "",
|
|
3324
|
+
language: str = "rel",
|
|
3305
3325
|
rai_relations: List[str] | None = None,
|
|
3306
3326
|
pyrel_program_id: str | None = None,
|
|
3307
3327
|
skip_pull_relations: bool = False,
|
|
@@ -3317,6 +3337,7 @@ class DirectAccessResources(Resources):
|
|
|
3317
3337
|
payload = {
|
|
3318
3338
|
"model_name": model,
|
|
3319
3339
|
"caller_engine_name": engine_name,
|
|
3340
|
+
"language": language,
|
|
3320
3341
|
"pyrel_program_id": pyrel_program_id,
|
|
3321
3342
|
"skip_pull_relations": skip_pull_relations,
|
|
3322
3343
|
"rai_relations": rai_relations or [],
|
|
@@ -3342,6 +3363,7 @@ class DirectAccessResources(Resources):
|
|
|
3342
3363
|
model: str,
|
|
3343
3364
|
engine_name: str,
|
|
3344
3365
|
engine_size: str | None = None,
|
|
3366
|
+
language: str = "rel",
|
|
3345
3367
|
program_span_id: str | None = None,
|
|
3346
3368
|
headers: Dict | None = None,
|
|
3347
3369
|
):
|
|
@@ -3352,6 +3374,7 @@ class DirectAccessResources(Resources):
|
|
|
3352
3374
|
model=model,
|
|
3353
3375
|
engine_name=engine_name,
|
|
3354
3376
|
engine_size=engine_size,
|
|
3377
|
+
language=language,
|
|
3355
3378
|
program_span_id=program_span_id,
|
|
3356
3379
|
headers=headers,
|
|
3357
3380
|
generation=self.generation,
|
|
@@ -3492,14 +3515,14 @@ class DirectAccessResources(Resources):
|
|
|
3492
3515
|
with debugging.span("create_model", dbname=name):
|
|
3493
3516
|
return self._create_database(name,"")
|
|
3494
3517
|
|
|
3495
|
-
def delete_graph(self, name:str, force=False):
|
|
3518
|
+
def delete_graph(self, name:str, force=False, language: str = "rel"):
|
|
3496
3519
|
prop_hdrs = debugging.gen_current_propagation_headers()
|
|
3497
3520
|
if self.config.get("use_graph_index", USE_GRAPH_INDEX):
|
|
3498
3521
|
keep_database = not force and self.config.get("reuse_model", True)
|
|
3499
|
-
with debugging.span("release_index", name=name, keep_database=keep_database):
|
|
3522
|
+
with debugging.span("release_index", name=name, keep_database=keep_database, language=language):
|
|
3500
3523
|
response = self.request(
|
|
3501
3524
|
"release_index",
|
|
3502
|
-
payload={"model_name": name, "keep_database": keep_database},
|
|
3525
|
+
payload={"model_name": name, "keep_database": keep_database, "language": language},
|
|
3503
3526
|
headers=prop_hdrs,
|
|
3504
3527
|
)
|
|
3505
3528
|
if (
|
|
@@ -161,8 +161,9 @@ class UseIndexPoller:
|
|
|
161
161
|
model: str,
|
|
162
162
|
engine_name: str,
|
|
163
163
|
engine_size: Optional[str],
|
|
164
|
-
|
|
165
|
-
|
|
164
|
+
language: str = "rel",
|
|
165
|
+
program_span_id: Optional[str] = None,
|
|
166
|
+
headers: Optional[Dict] = None,
|
|
166
167
|
generation: Optional[Generation] = None,
|
|
167
168
|
):
|
|
168
169
|
self.res = resource
|
|
@@ -171,6 +172,7 @@ class UseIndexPoller:
|
|
|
171
172
|
self.model = model
|
|
172
173
|
self.engine_name = engine_name
|
|
173
174
|
self.engine_size = engine_size or self.res.config.get_default_engine_size()
|
|
175
|
+
self.language = language
|
|
174
176
|
self.program_span_id = program_span_id
|
|
175
177
|
self.headers = headers or {}
|
|
176
178
|
self.counter = 1
|
|
@@ -190,8 +192,8 @@ class UseIndexPoller:
|
|
|
190
192
|
)
|
|
191
193
|
current_user = self.res.get_sf_session().get_current_user()
|
|
192
194
|
assert current_user is not None, "current_user must be set"
|
|
193
|
-
data_freshness = self.res.config.get_data_freshness_mins()
|
|
194
|
-
self.cache = GraphIndexCache(current_user, model, data_freshness, self.sources)
|
|
195
|
+
self.data_freshness = self.res.config.get_data_freshness_mins()
|
|
196
|
+
self.cache = GraphIndexCache(current_user, model, self.data_freshness, self.sources)
|
|
195
197
|
self.sources = self.cache.choose_sources()
|
|
196
198
|
# execution_id is allowed to group use_index call, which belongs to the same loop iteration
|
|
197
199
|
self.execution_id = str(uuid.uuid4())
|
|
@@ -486,6 +488,8 @@ class UseIndexPoller:
|
|
|
486
488
|
"wait_for_stream_sync": self.wait_for_stream_sync,
|
|
487
489
|
"should_check_cdc": self.should_check_cdc,
|
|
488
490
|
"init_engine_async": self.init_engine_async,
|
|
491
|
+
"language": self.language,
|
|
492
|
+
"data_freshness_mins": self.data_freshness,
|
|
489
493
|
})
|
|
490
494
|
|
|
491
495
|
request_headers = debugging.add_current_propagation_headers(self.headers)
|
|
@@ -853,11 +857,23 @@ class DirectUseIndexPoller(UseIndexPoller):
|
|
|
853
857
|
model: str,
|
|
854
858
|
engine_name: str,
|
|
855
859
|
engine_size: Optional[str],
|
|
856
|
-
|
|
857
|
-
|
|
860
|
+
language: str = "rel",
|
|
861
|
+
program_span_id: Optional[str] = None,
|
|
862
|
+
headers: Optional[Dict] = None,
|
|
858
863
|
generation: Optional[Generation] = None,
|
|
859
864
|
):
|
|
860
|
-
super().__init__(
|
|
865
|
+
super().__init__(
|
|
866
|
+
resource=resource,
|
|
867
|
+
app_name=app_name,
|
|
868
|
+
sources=sources,
|
|
869
|
+
model=model,
|
|
870
|
+
engine_name=engine_name,
|
|
871
|
+
engine_size=engine_size,
|
|
872
|
+
language=language,
|
|
873
|
+
program_span_id=program_span_id,
|
|
874
|
+
headers=headers,
|
|
875
|
+
generation=generation,
|
|
876
|
+
)
|
|
861
877
|
from relationalai.clients.snowflake import DirectAccessResources
|
|
862
878
|
self.res: DirectAccessResources = cast(DirectAccessResources, self.res)
|
|
863
879
|
|
|
@@ -878,6 +894,7 @@ class DirectUseIndexPoller(UseIndexPoller):
|
|
|
878
894
|
model=self.model,
|
|
879
895
|
engine_name=self.engine_name,
|
|
880
896
|
engine_size=self.engine_size,
|
|
897
|
+
language=self.language,
|
|
881
898
|
rai_relations=[],
|
|
882
899
|
pyrel_program_id=self.program_span_id,
|
|
883
900
|
skip_pull_relations=True,
|