diff --git a/sky/adaptors/seeweb.py b/sky/adaptors/seeweb.py index af870384144..12b9e19f321 100644 --- a/sky/adaptors/seeweb.py +++ b/sky/adaptors/seeweb.py @@ -66,7 +66,18 @@ def check_compute_credentials() -> bool: # Test connection by fetching servers list to validate the key try: seeweb_client = ecsapi.Api(token=api_key) - seeweb_client.fetch_servers() + try: + seeweb_client.fetch_servers() + except pydantic.ValidationError: + # Fallback: fetch raw JSON to validate authentication + # pylint: disable=protected-access + base_url = seeweb_client._Api__generate_base_url() # type: ignore + headers = seeweb_client._Api__generate_authentication_headers( + ) # type: ignore + url = f'{base_url}/servers' + resp = requests.get(url, headers=headers, timeout=15) + resp.raise_for_status() + # If we get here, authentication worked even if schema mismatches except Exception as e: # pylint: disable=broad-except raise SeewebAuthenticationError( f'Unable to authenticate with Seeweb API: {e}') from e diff --git a/sky/setup_files/dependencies.py b/sky/setup_files/dependencies.py index fc9ff64d039..e60d2dcb20e 100644 --- a/sky/setup_files/dependencies.py +++ b/sky/setup_files/dependencies.py @@ -220,7 +220,7 @@ PROTOBUF, ] + aws_dependencies, 'hyperbolic': [], # No dependencies needed for hyperbolic - 'seeweb': ['ecsapi>=0.2.0'], + 'seeweb': ['ecsapi==0.4.0'], 'server': server_dependencies, }