Skip to content

Commit c3314b2

Browse files
Add runtime/static errors for moved/deprecated functions (#405)
* Add runtime/static errors for moved/deprecated functions * Never = typing.NoReturn
1 parent 045ceba commit c3314b2

File tree

2 files changed

+129
-1
lines changed

2 files changed

+129
-1
lines changed

src/cohere/client.py

Lines changed: 121 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
from .base_client import BaseCohere, AsyncBaseCohere
66
from .environment import CohereEnvironment
77

8+
# Use NoReturn as Never type for compatibility
9+
Never = typing.NoReturn
10+
811

912
def validate_args(obj: typing.Any, method_name: str, check_fn: typing.Callable[[typing.Any], typing.Any]) -> None:
1013
method = getattr(obj, method_name)
@@ -22,6 +25,33 @@ def throw_if_stream_is_true(*args, **kwargs) -> None:
2225
"Since python sdk cohere==5.0.0, you must now use chat_stream(...) instead of chat(stream=True, ...)"
2326
)
2427

28+
def moved_function(fn_name: str, new_fn_name: str) -> typing.Any:
29+
"""
30+
This method is moved. Please update usage.
31+
"""
32+
33+
def fn(*args, **kwargs):
34+
raise ValueError(
35+
f"Since python sdk cohere==5.0.0, the function {fn_name}(...) has been moved to {new_fn_name}(...). "
36+
f"Please update your code. Issues may be filed in https://github.com/cohere-ai/cohere-python/issues."
37+
)
38+
39+
return fn
40+
41+
42+
def deprecated_function(fn_name: str) -> typing.Any:
43+
"""
44+
This method is deprecated. Please update usage.
45+
"""
46+
47+
def fn(*args, **kwargs):
48+
raise ValueError(
49+
f"Since python sdk cohere==5.0.0, the function {fn_name}(...) has been deprecated. "
50+
f"Please update your code. Issues may be filed in https://github.com/cohere-ai/cohere-python/issues."
51+
)
52+
53+
return fn
54+
2555

2656
class Client(BaseCohere):
2757
def __init__(
@@ -46,6 +76,51 @@ def __init__(
4676

4777
validate_args(self, "chat", throw_if_stream_is_true)
4878

79+
"""
80+
The following methods have been moved or deprecated in cohere==5.0.0. Please update your usage.
81+
Issues may be filed in https://github.com/cohere-ai/cohere-python/issues.
82+
"""
83+
check_api_key: Never = deprecated_function("check_api_key")
84+
loglikelihood: Never = deprecated_function("loglikelihood")
85+
batch_generate: Never = deprecated_function("batch_generate")
86+
codebook: Never = deprecated_function("codebook")
87+
batch_tokenize: Never = deprecated_function("batch_tokenize")
88+
batch_detokenize: Never = deprecated_function("batch_detokenize")
89+
detect_language: Never = deprecated_function("detect_language")
90+
generate_feedback: Never = deprecated_function("generate_feedback")
91+
generate_preference_feedback: Never = deprecated_function("generate_preference_feedback")
92+
create_dataset: Never = moved_function("create_dataset", ".datasets.create")
93+
get_dataset: Never = moved_function("get_dataset", ".datasets.get")
94+
list_datasets: Never = moved_function("list_datasets", ".datasets.list")
95+
delete_dataset: Never = moved_function("delete_dataset", ".datasets.delete")
96+
get_dataset_usage: Never = moved_function("get_dataset_usage", ".datasets.get_usage")
97+
wait_for_dataset: Never = deprecated_function("wait_for_dataset")
98+
_check_response: Never = deprecated_function("_check_response")
99+
_request: Never = deprecated_function("_request")
100+
create_cluster_job: Never = deprecated_function("create_cluster_job")
101+
get_cluster_job: Never = deprecated_function("get_cluster_job")
102+
list_cluster_jobs: Never = deprecated_function("list_cluster_jobs")
103+
wait_for_cluster_job: Never = deprecated_function("wait_for_cluster_job")
104+
create_embed_job: Never = moved_function("create_embed_job", ".embed_jobs.create")
105+
list_embed_jobs: Never = moved_function("list_embed_jobs", ".embed_jobs.list")
106+
get_embed_job: Never = moved_function("get_embed_job", ".embed_jobs.get")
107+
cancel_embed_job: Never = moved_function("cancel_embed_job", ".embed_jobs.cancel")
108+
wait_for_embed_job: Never = deprecated_function("wait_for_embed_job")
109+
create_custom_model: Never = deprecated_function("create_custom_model")
110+
wait_for_custom_model: Never = deprecated_function("wait_for_custom_model")
111+
_upload_dataset: Never = deprecated_function("_upload_dataset")
112+
_create_signed_url: Never = deprecated_function("_create_signed_url")
113+
get_custom_model: Never = deprecated_function("get_custom_model")
114+
get_custom_model_by_name: Never = deprecated_function("get_custom_model_by_name")
115+
get_custom_model_metrics: Never = deprecated_function("get_custom_model_metrics")
116+
list_custom_models: Never = deprecated_function("list_custom_models")
117+
create_connector: Never = moved_function("create_connector", ".connectors.create")
118+
update_connector: Never = moved_function("update_connector", ".connectors.update")
119+
get_connector: Never = moved_function("get_connector", ".connectors.get")
120+
list_connectors: Never = moved_function("list_connectors", ".connectors.list")
121+
delete_connector: Never = moved_function("delete_connector", ".connectors.delete")
122+
oauth_authorize_connector: Never = moved_function("oauth_authorize_connector", ".connectors.o_auth_authorize")
123+
49124

50125
class AsyncClient(AsyncBaseCohere):
51126
def __init__(
@@ -68,4 +143,49 @@ def __init__(
68143
httpx_client=httpx_client,
69144
)
70145

71-
validate_args(self, "chat", throw_if_stream_is_true)
146+
validate_args(self, "chat", throw_if_stream_is_true)
147+
148+
"""
149+
The following methods have been moved or deprecated in cohere==5.0.0. Please update your usage.
150+
Issues may be filed in https://github.com/cohere-ai/cohere-python/issues.
151+
"""
152+
check_api_key: Never = deprecated_function("check_api_key")
153+
loglikelihood: Never = deprecated_function("loglikelihood")
154+
batch_generate: Never = deprecated_function("batch_generate")
155+
codebook: Never = deprecated_function("codebook")
156+
batch_tokenize: Never = deprecated_function("batch_tokenize")
157+
batch_detokenize: Never = deprecated_function("batch_detokenize")
158+
detect_language: Never = deprecated_function("detect_language")
159+
generate_feedback: Never = deprecated_function("generate_feedback")
160+
generate_preference_feedback: Never = deprecated_function("generate_preference_feedback")
161+
create_dataset: Never = moved_function("create_dataset", ".datasets.create")
162+
get_dataset: Never = moved_function("get_dataset", ".datasets.get")
163+
list_datasets: Never = moved_function("list_datasets", ".datasets.list")
164+
delete_dataset: Never = moved_function("delete_dataset", ".datasets.delete")
165+
get_dataset_usage: Never = moved_function("get_dataset_usage", ".datasets.get_usage")
166+
wait_for_dataset: Never = deprecated_function("wait_for_dataset")
167+
_check_response: Never = deprecated_function("_check_response")
168+
_request: Never = deprecated_function("_request")
169+
create_cluster_job: Never = deprecated_function("create_cluster_job")
170+
get_cluster_job: Never = deprecated_function("get_cluster_job")
171+
list_cluster_jobs: Never = deprecated_function("list_cluster_jobs")
172+
wait_for_cluster_job: Never = deprecated_function("wait_for_cluster_job")
173+
create_embed_job: Never = moved_function("create_embed_job", ".embed_jobs.create")
174+
list_embed_jobs: Never = moved_function("list_embed_jobs", ".embed_jobs.list")
175+
get_embed_job: Never = moved_function("get_embed_job", ".embed_jobs.get")
176+
cancel_embed_job: Never = moved_function("cancel_embed_job", ".embed_jobs.cancel")
177+
wait_for_embed_job: Never = deprecated_function("wait_for_embed_job")
178+
create_custom_model: Never = deprecated_function("create_custom_model")
179+
wait_for_custom_model: Never = deprecated_function("wait_for_custom_model")
180+
_upload_dataset: Never = deprecated_function("_upload_dataset")
181+
_create_signed_url: Never = deprecated_function("_create_signed_url")
182+
get_custom_model: Never = deprecated_function("get_custom_model")
183+
get_custom_model_by_name: Never = deprecated_function("get_custom_model_by_name")
184+
get_custom_model_metrics: Never = deprecated_function("get_custom_model_metrics")
185+
list_custom_models: Never = deprecated_function("list_custom_models")
186+
create_connector: Never = moved_function("create_connector", ".connectors.create")
187+
update_connector: Never = moved_function("update_connector", ".connectors.update")
188+
get_connector: Never = moved_function("get_connector", ".connectors.get")
189+
list_connectors: Never = moved_function("list_connectors", ".connectors.list")
190+
delete_connector: Never = moved_function("delete_connector", ".connectors.delete")
191+
oauth_authorize_connector: Never = moved_function("oauth_authorize_connector", ".connectors.o_auth_authorize")

tests/test_client.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,14 @@ def test_stream_equals_true(self) -> None:
3535
message="What year was he born?",
3636
)
3737

38+
def test_deprecated_fn(self) -> None:
39+
with self.assertRaises(ValueError):
40+
co.check_api_key("dummy", dummy="dummy") # type: ignore
41+
42+
def test_moved_fn(self) -> None:
43+
with self.assertRaises(ValueError):
44+
co.list_connectors("dummy", dummy="dummy") # type: ignore
45+
3846
def test_generate(self) -> None:
3947
response = co.generate(
4048
prompt='Please explain to me how LLMs work',

0 commit comments

Comments
 (0)