🌐 AI搜索 & 代理 主页
Skip to content

Commit 24427b2

Browse files
author
Montana Low
committed
remove necessity of superuser to break the cache
1 parent 57ebe61 commit 24427b2

File tree

2 files changed

+42
-28
lines changed

2 files changed

+42
-28
lines changed

pgml-extension/pgml_extension/model.py

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -964,31 +964,27 @@ def deploy(self, strategy):
964964

965965
plpy.execute(
966966
f"""
967-
CREATE OR REPLACE FUNCTION pgml.predict(
968-
project_name TEXT, -- Human-friendly project name
969-
features DOUBLE PRECISION[] -- Must match the training data column order
970-
)
971-
RETURNS DOUBLE PRECISION
972-
AS $$
973-
from pgml_extension.model import Project
974-
975-
return float(Project.find_by_name(project_name, {q(deployment_id)}).deployed_model.predict(features))
976-
$$ LANGUAGE plpython3u;
967+
CREATE OR REPLACE FUNCTION pgml.predict(
968+
project_name TEXT, -- Human-friendly project name
969+
features DOUBLE PRECISION[] -- Must match the training data column order
970+
)
971+
RETURNS DOUBLE PRECISION
972+
AS $$
973+
SELECT pgml.predict_versioned(project_name, features, {q(deployment_id)});
974+
$$ LANGUAGE SQL;
977975
"""
978976
)
979977

980978
plpy.execute(
981979
f"""
982-
CREATE OR REPLACE FUNCTION pgml.predict_joint(
983-
project_name TEXT, -- Human-friendly project name
984-
features DOUBLE PRECISION[] -- Must match the training data column order
985-
)
986-
RETURNS DOUBLE PRECISION[]
987-
AS $$
988-
from pgml_extension.model import Project
989-
990-
return Project.find_by_name(project_name, {q(deployment_id)}).deployed_model.predict(features)
991-
$$ LANGUAGE plpython3u;
980+
CREATE OR REPLACE FUNCTION pgml.predict_joint(
981+
project_name TEXT, -- Human-friendly project name
982+
features DOUBLE PRECISION[] -- Must match the training data column order
983+
)
984+
RETURNS DOUBLE PRECISION[]
985+
AS $$
986+
SELECT pgml.predict_joint_versioned(project_name, features, {q(deployment_id)});
987+
$$ LANGUAGE SQL;
992988
"""
993989
)
994990

pgml-extension/pgml_extension/sql/install/models.sql

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -153,32 +153,50 @@ $$ LANGUAGE plpython3u;
153153
---
154154
--- Predict
155155
---
156-
CREATE OR REPLACE FUNCTION pgml.predict(
157-
project_name TEXT, -- Human-friendly project name
158-
features DOUBLE PRECISION[] -- Must match the training data column order
156+
CREATE OR REPLACE FUNCTION pgml.predict_versioned(
157+
project_name TEXT, -- Human-friendly project name
158+
features DOUBLE PRECISION[], -- Must match the training data column order
159+
version INTEGER DEFAULT 0
159160
)
160161
RETURNS DOUBLE PRECISION
161162
AS $$
162163
from pgml_extension.model import Project
163164

164-
return float(Project.find_by_name(project_name, 0).deployed_model.predict(features))
165+
return float(Project.find_by_name(project_name, version).deployed_model.predict(features))
165166
$$ LANGUAGE plpython3u;
166167

168+
CREATE OR REPLACE FUNCTION pgml.predict(
169+
project_name TEXT, -- Human-friendly project name
170+
features DOUBLE PRECISION[] -- Must match the training data column order
171+
)
172+
RETURNS DOUBLE PRECISION
173+
AS $$
174+
SELECT pgml.predict_versioned(project_name, features, 0);
175+
$$ LANGUAGE SQL;
167176

168177
---
169178
--- Predict w/ multiple outputs
170179
---
171-
CREATE OR REPLACE FUNCTION pgml.predict_joint(
172-
project_name TEXT, -- Human-friendly project name
173-
features DOUBLE PRECISION[] -- Must match the training data column order
180+
CREATE OR REPLACE FUNCTION pgml.predict_joint_versioned(
181+
project_name TEXT, -- Human-friendly project name
182+
features DOUBLE PRECISION[], -- Must match the training data column order
183+
version INTEGER DEFAULT 0
174184
)
175185
RETURNS DOUBLE PRECISION[]
176186
AS $$
177187
from pgml_extension.model import Project
178188

179-
return Project.find_by_name(project_name, 0).deployed_model.predict(features)
189+
return Project.find_by_name(project_name, version).deployed_model.predict(features)
180190
$$ LANGUAGE plpython3u;
181191

192+
CREATE OR REPLACE FUNCTION pgml.predict_joint(
193+
project_name TEXT, -- Human-friendly project name
194+
features DOUBLE PRECISION[] -- Must match the training data column order
195+
)
196+
RETURNS DOUBLE PRECISION[]
197+
AS $$
198+
SELECT pgml.predict_joint_versioned(project_name, features, 0);
199+
$$ LANGUAGE SQL;
182200

183201
---
184202
--- Predict using a specific model. Useful for debugging.

0 commit comments

Comments
 (0)