Skip to content
12 changes: 8 additions & 4 deletions launch/cli/endpoints.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,15 @@ def list_endpoints(ctx: click.Context):
servable_endpoint.model_endpoint.bundle_name,
servable_endpoint.model_endpoint.status,
servable_endpoint.model_endpoint.endpoint_type,
(servable_endpoint.model_endpoint.worker_settings or {}).get(
"min_workers"
str(
(servable_endpoint.model_endpoint.worker_settings or {}).get(
"min_workers"
)
),
(servable_endpoint.model_endpoint.worker_settings or {}).get(
"max_workers"
str(
(servable_endpoint.model_endpoint.worker_settings or {}).get(
"max_workers"
)
),
servable_endpoint.model_endpoint.metadata or "{}",
)
Expand Down
27 changes: 22 additions & 5 deletions launch/connection.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,21 +26,38 @@ def __eq__(self, other):
)

def delete(self, route: str):
return self.make_request({}, route, requests_command=requests.delete)
return self.make_request(
{},
route,
requests_command=requests.delete,
)

def get(self, route: str):
return self.make_request({}, route, requests_command=requests.get)
return self.make_request(
{},
route,
requests_command=requests.get,
)

def post(self, payload: dict, route: str):
return self.make_request(
payload, route, requests_command=requests.post
payload,
route,
requests_command=requests.post,
)

def put(self, payload: dict, route: str):
return self.make_request(payload, route, requests_command=requests.put)
return self.make_request(
payload,
route,
requests_command=requests.put,
)

def make_request(
self, payload: dict, route: str, requests_command=requests.post
self,
payload: dict,
route: str,
requests_command=requests.post,
) -> dict:
"""
Makes a request to Launch endpoint and logs a warning if not
Expand Down
12 changes: 10 additions & 2 deletions launch/model_endpoint.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ def __init__(
status: str,
result_url: Optional[str] = None,
result: Optional[str] = None,
traceback: Optional[str] = None,
):
"""
Parameters:
Expand All @@ -140,14 +141,17 @@ def __init__(
Exactly one of ``result_url`` or ``result`` will be populated,
depending on the value of ``return_pickled`` in the request.

traceback: The stack trace if the inference endpoint raised an error. Can be used for debugging

"""
self.client = client
self.status = status
self.result_url = result_url
self.result = result
self.traceback = traceback

def __str__(self) -> str:
return f"status: {self.status}, result: {self.result}, result_url: {self.result_url}"
return f"status: {self.status}, result: {self.result}, result_url: {self.result_url}, traceback: {self.traceback}"


class EndpointResponseFuture:
Expand Down Expand Up @@ -188,13 +192,15 @@ def get(self) -> EndpointResponse:
status=async_response["state"],
result_url=async_response.get("result_url", None),
result=async_response.get("result", None),
traceback=None,
)
elif async_response["state"] == "FAILURE":
return EndpointResponse(
client=self.client,
status=async_response["state"],
result_url=None,
result=None,
traceback=async_response.get("traceback", None),
)
else:
raise ValueError(
Expand Down Expand Up @@ -236,9 +242,10 @@ def predict(self, request: EndpointRequest) -> EndpointResponse:
)
return EndpointResponse(
client=self.client,
status=TASK_SUCCESS_STATE,
status=raw_response.get("state"),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we consolidate on state vs status haha

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should tbh, I like status personally

result_url=raw_response.get("result_url", None),
result=raw_response.get("result", None),
traceback=raw_response.get("traceback", None),
)

def status(self):
Expand Down Expand Up @@ -429,6 +436,7 @@ def single_request(inner_url, inner_task_id):
status=raw_response["state"],
result_url=raw_response.get("result_url", None),
result=raw_response.get("result", None),
traceback=raw_response.get("traceback", None),
)
self.responses[url] = response_object

Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ exclude = [

[tool.poetry]
name = "scale-launch"
version = "0.2.0"
version = "0.2.1"
description = "The official Python client library for Launch, the Data Platform for AI"
authors = ["Your Name <you@example.com>"]
readme = "README.md"
Expand Down