Build and Deploy an Agent with Agent Engine in Vertex AI Reviews

1174 reviews

lufa G. · Reviewed 2 ימים ago

satryo p. · Reviewed 2 ימים ago

Consider corporate firewalls that block API requests, so the user might get an SSLCertVerification error.

Pralad M. · Reviewed 2 ימים ago

Mingfei J. · Reviewed 4 ימים ago

Aditya T. · Reviewed 4 ימים ago

Instructions are not clear, hence closing the lab

Nithin G. · Reviewed 4 ימים ago

Anish K. · Reviewed 5 ימים ago

unable to follow clearly

Maria C. · Reviewed 5 ימים ago

lufa G. · Reviewed 5 ימים ago

Kreeshika G. · Reviewed 5 ימים ago

Pablo J. · Reviewed 5 ימים ago

Srusti D. · Reviewed 6 ימים ago

Yogesh G. · Reviewed 7 ימים ago

Broken lab: --------------------------------------------------------------------------- SSLCertVerificationError Traceback (most recent call last) File /opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py:464, in HTTPConnectionPool._make_request(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length) 463 try: --> 464 self._validate_conn(conn) 465 except (SocketTimeout, BaseSSLError) as e: File /opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py:1093, in HTTPSConnectionPool._validate_conn(self, conn) 1092 if conn.is_closed: -> 1093 conn.connect() 1095 # TODO revise this, see https://github.com/urllib3/urllib3/issues/2791 File /opt/conda/lib/python3.10/site-packages/urllib3/connection.py:796, in HTTPSConnection.connect(self) 794 server_hostname_rm_dot = server_hostname.rstrip(".") --> 796 sock_and_verified = _ssl_wrap_socket_and_match_hostname( 797 sock=sock, 798 cert_reqs=self.cert_reqs, 799 ssl_version=self.ssl_version, 800 ssl_minimum_version=self.ssl_minimum_version, 801 ssl_maximum_version=self.ssl_maximum_version, 802 ca_certs=self.ca_certs, 803 ca_cert_dir=self.ca_cert_dir, 804 ca_cert_data=self.ca_cert_data, 805 cert_file=self.cert_file, 806 key_file=self.key_file, 807 key_password=self.key_password, 808 server_hostname=server_hostname_rm_dot, 809 ssl_context=self.ssl_context, 810 tls_in_tls=tls_in_tls, 811 assert_hostname=self.assert_hostname, 812 assert_fingerprint=self.assert_fingerprint, 813 ) 814 self.sock = sock_and_verified.socket File /opt/conda/lib/python3.10/site-packages/urllib3/connection.py:975, in _ssl_wrap_socket_and_match_hostname(sock, cert_reqs, ssl_version, ssl_minimum_version, ssl_maximum_version, cert_file, key_file, key_password, ca_certs, ca_cert_dir, ca_cert_data, assert_hostname, assert_fingerprint, server_hostname, ssl_context, tls_in_tls) 973 server_hostname = normalized --> 975 ssl_sock = ssl_wrap_socket( 976 sock=sock, 977 keyfile=key_file, 978 certfile=cert_file, 979 key_password=key_password, 980 ca_certs=ca_certs, 981 ca_cert_dir=ca_cert_dir, 982 ca_cert_data=ca_cert_data, 983 server_hostname=server_hostname, 984 ssl_context=context, 985 tls_in_tls=tls_in_tls, 986 ) 988 try: File /opt/conda/lib/python3.10/site-packages/urllib3/util/ssl_.py:483, in ssl_wrap_socket(sock, keyfile, certfile, cert_reqs, ca_certs, server_hostname, ssl_version, ciphers, ssl_context, ca_cert_dir, key_password, ca_cert_data, tls_in_tls) 481 context.set_alpn_protocols(ALPN_PROTOCOLS) --> 483 ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls, server_hostname) 484 return ssl_sock File /opt/conda/lib/python3.10/site-packages/urllib3/util/ssl_.py:527, in _ssl_wrap_socket_impl(sock, ssl_context, tls_in_tls, server_hostname) 525 return SSLTransport(sock, ssl_context, server_hostname) --> 527 return ssl_context.wrap_socket(sock, server_hostname=server_hostname) File /opt/conda/lib/python3.10/ssl.py:513, in SSLContext.wrap_socket(self, sock, server_side, do_handshake_on_connect, suppress_ragged_eofs, server_hostname, session) 507 def wrap_socket(self, sock, server_side=False, 508 do_handshake_on_connect=True, 509 suppress_ragged_eofs=True, 510 server_hostname=None, session=None): 511 # SSLSocket class handles server_hostname encoding before it calls 512 # ctx._wrap_socket() --> 513 return self.sslsocket_class._create( 514 sock=sock, 515 server_side=server_side, 516 do_handshake_on_connect=do_handshake_on_connect, 517 suppress_ragged_eofs=suppress_ragged_eofs, 518 server_hostname=server_hostname, 519 context=self, 520 session=session 521 ) File /opt/conda/lib/python3.10/ssl.py:1104, in SSLSocket._create(cls, sock, server_side, do_handshake_on_connect, suppress_ragged_eofs, server_hostname, context, session) 1103 raise ValueError("do_handshake_on_connect should not be specified for non-blocking sockets") -> 1104 self.do_handshake() 1105 except (OSError, ValueError): File /opt/conda/lib/python3.10/ssl.py:1375, in SSLSocket.do_handshake(self, block) 1374 self.settimeout(None) -> 1375 self._sslobj.do_handshake() 1376 finally: SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1017) During handling of the above exception, another exception occurred: SSLError Traceback (most recent call last) File /opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py:787, in HTTPConnectionPool.urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw) 786 # Make the request on the HTTPConnection object --> 787 response = self._make_request( 788 conn, 789 method, 790 url, 791 timeout=timeout_obj, 792 body=body, 793 headers=headers, 794 chunked=chunked, 795 retries=retries, 796 response_conn=response_conn, 797 preload_content=preload_content, 798 decode_content=decode_content, 799 **response_kw, 800 ) 802 # Everything went great! File /opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py:488, in HTTPConnectionPool._make_request(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length) 487 new_e = _wrap_proxy_error(new_e, conn.proxy.scheme) --> 488 raise new_e 490 # conn.request() calls http.client.*.request, not the method in 491 # urllib3.request. It also calls makefile (recv) on the socket. SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1017) The above exception was the direct cause of the following exception: MaxRetryError Traceback (most recent call last) File /opt/conda/lib/python3.10/site-packages/requests/adapters.py:644, in HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies) 643 try: --> 644 resp = conn.urlopen( 645 method=request.method, 646 url=url, 647 body=request.body, 648 headers=request.headers, 649 redirect=False, 650 assert_same_host=False, 651 preload_content=False, 652 decode_content=False, 653 retries=self.max_retries, 654 timeout=timeout, 655 chunked=chunked, 656 ) 658 except (ProtocolError, OSError) as err: File /opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py:871, in HTTPConnectionPool.urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw) 868 log.warning( 869 "Retrying (%r) after connection broken by '%r': %s", retries, err, url 870 ) --> 871 return self.urlopen( 872 method, 873 url, 874 body, 875 headers, 876 retries, 877 redirect, 878 assert_same_host, 879 timeout=timeout, 880 pool_timeout=pool_timeout, 881 release_conn=release_conn, 882 chunked=chunked, 883 body_pos=body_pos, 884 preload_content=preload_content, 885 decode_content=decode_content, 886 **response_kw, 887 ) 889 # Handle redirect? File /opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py:871, in HTTPConnectionPool.urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw) 868 log.warning( 869 "Retrying (%r) after connection broken by '%r': %s", retries, err, url 870 ) --> 871 return self.urlopen( 872 method, 873 url, 874 body, 875 headers, 876 retries, 877 redirect, 878 assert_same_host, 879 timeout=timeout, 880 pool_timeout=pool_timeout, 881 release_conn=release_conn, 882 chunked=chunked, 883 body_pos=body_pos, 884 preload_content=preload_content, 885 decode_content=decode_content, 886 **response_kw, 887 ) 889 # Handle redirect? File /opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py:871, in HTTPConnectionPool.urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw) 868 log.warning( 869 "Retrying (%r) after connection broken by '%r': %s", retries, err, url 870 ) --> 871 return self.urlopen( 872 method, 873 url, 874 body, 875 headers, 876 retries, 877 redirect, 878 assert_same_host, 879 timeout=timeout, 880 pool_timeout=pool_timeout, 881 release_conn=release_conn, 882 chunked=chunked, 883 body_pos=body_pos, 884 preload_content=preload_content, 885 decode_content=decode_content, 886 **response_kw, 887 ) 889 # Handle redirect? File /opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py:841, in HTTPConnectionPool.urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw) 839 new_e = ProtocolError("Connection aborted.", new_e) --> 841 retries = retries.increment( 842 method, url, error=new_e, _pool=self, _stacktrace=sys.exc_info()[2] 843 ) 844 retries.sleep() File /opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py:535, in Retry.increment(self, method, url, response, error, _pool, _stacktrace) 534 reason = error or ResponseError(cause) --> 535 raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type] 537 log.debug("Incremented Retry for (url='%s'): %r", url, new_retry) MaxRetryError: HTTPSConnectionPool(host='metadata.google.internal', port=443): Max retries exceeded with url: /computeMetadata/v1/instance/service-accounts/default/?recursive=true (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1017)'))) During handling of the above exception, another exception occurred: SSLError Traceback (most recent call last) File /opt/conda/lib/python3.10/site-packages/google/auth/transport/requests.py:188, in Request.__call__(self, url, method, body, headers, timeout, **kwargs) 187 _helpers.request_log(_LOGGER, method, url, body, headers) --> 188 response = self.session.request( 189 method, url, data=body, headers=headers, timeout=timeout, **kwargs 190 ) 191 _helpers.response_log(_LOGGER, response) File /opt/conda/lib/python3.10/site-packages/requests/sessions.py:589, in Session.request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json) 588 send_kwargs.update(settings) --> 589 resp = self.send(prep, **send_kwargs) 591 return resp File /opt/conda/lib/python3.10/site-packages/requests/sessions.py:703, in Session.send(self, request, **kwargs) 702 # Send the request --> 703 r = adapter.send(request, **kwargs) 705 # Total elapsed time of the request (approximately) File /opt/conda/lib/python3.10/site-packages/requests/adapters.py:675, in HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies) 673 if isinstance(e.reason, _SSLError): 674 # This branch is for urllib3 v1.22 and later. --> 675 raise SSLError(e, request=request) 677 raise ConnectionError(e, request=request) SSLError: HTTPSConnectionPool(host='metadata.google.internal', port=443): Max retries exceeded with url: /computeMetadata/v1/instance/service-accounts/default/?recursive=true (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1017)'))) The above exception was the direct cause of the following exception: TransportError Traceback (most recent call last) File /opt/conda/lib/python3.10/site-packages/google/auth/compute_engine/_metadata.py:317, in get(request, path, root, params, recursive, retry_count, headers, return_none_for_not_found_error, timeout) 316 try: --> 317 response = request( 318 url=url, method="GET", headers=headers_to_use, timeout=timeout 319 ) 320 if response.status in transport.DEFAULT_RETRYABLE_STATUS_CODES: File /opt/conda/lib/python3.10/site-packages/google/auth/transport/requests.py:195, in Request.__call__(self, url, method, body, headers, timeout, **kwargs) 194 new_exc = exceptions.TransportError(caught_exc) --> 195 raise new_exc from caught_exc TransportError: HTTPSConnectionPool(host='metadata.google.internal', port=443): Max retries exceeded with url: /computeMetadata/v1/instance/service-accounts/default/?recursive=true (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1017)'))) The above exception was the direct cause of the following exception: TransportError Traceback (most recent call last) File /opt/conda/lib/python3.10/site-packages/google/auth/compute_engine/credentials.py:139, in Credentials._perform_refresh_token(self, request) 138 try: --> 139 self._retrieve_info(request) 140 scopes = self._scopes if self._scopes is not None else self._default_scopes File /opt/conda/lib/python3.10/site-packages/google/auth/compute_engine/credentials.py:107, in Credentials._retrieve_info(self, request) 99 """Retrieve information about the service account. 100 101 Updates the scopes and retrieves the full service account email. (...) 105 HTTP requests. 106 """ --> 107 info = _metadata.get_service_account_info( 108 request, service_account=self._service_account_email 109 ) 111 if not info or "email" not in info: File /opt/conda/lib/python3.10/site-packages/google/auth/compute_engine/_metadata.py:460, in get_service_account_info(request, service_account) 458 # See https://cloud.google.com/compute/docs/metadata#aggcontents 459 # for more on the use of 'recursive'. --> 460 return get(request, path, params={"recursive": "true"}) File /opt/conda/lib/python3.10/site-packages/google/auth/compute_engine/_metadata.py:345, in get(request, path, root, params, recursive, retry_count, headers, return_none_for_not_found_error, timeout) 344 if last_exception: --> 345 raise exceptions.TransportError( 346 "Failed to retrieve {} from the Google Compute Engine " 347 "metadata service. Compute Engine Metadata server unavailable. " 348 "Last exception: {}".format(url, last_exception) 349 ) from last_exception 350 else: TransportError: Failed to retrieve https://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/?recursive=true from the Google Compute Engine metadata service. Compute Engine Metadata server unavailable. Last exception: HTTPSConnectionPool(host='metadata.google.internal', port=443): Max retries exceeded with url: /computeMetadata/v1/instance/service-accounts/default/?recursive=true (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1017)'))) The above exception was the direct cause of the following exception: RefreshError Traceback (most recent call last) Cell In[19], line 1 ----> 1 remote_agent = agent_engines.create( 2 agent, 3 requirements=[ 4 "google-cloud-aiplatform[agent_engines,langchain]", 5 "cloudpickle==3.0.0", 6 "pydantic>=2.10", 7 "requests", 8 ], 9 ) File /opt/conda/lib/python3.10/site-packages/vertexai/agent_engines/__init__.py:194, in create(agent_engine, requirements, display_name, description, gcs_dir_name, extra_packages, env_vars, build_options, service_account, psc_interface_config, min_instances, max_instances, resource_limits, container_concurrency, encryption_spec) 66 def create( 67 agent_engine: Optional[_AgentEngineInterface] = None, 68 *, (...) 84 encryption_spec: Optional[aip_types.EncryptionSpec] = None, 85 ) -> AgentEngine: 86 """Creates a new Agent Engine. 87 88 The Agent Engine will be an instance of the `agent_engine` that (...) 192 nonexistent file. 193 """ --> 194 return AgentEngine.create( 195 agent_engine=agent_engine, 196 requirements=requirements, 197 display_name=display_name, 198 description=description, 199 gcs_dir_name=gcs_dir_name, 200 extra_packages=extra_packages, 201 env_vars=env_vars, 202 build_options=build_options, 203 service_account=service_account, 204 psc_interface_config=psc_interface_config, 205 min_instances=min_instances, 206 max_instances=max_instances, 207 resource_limits=resource_limits, 208 container_concurrency=container_concurrency, 209 encryption_spec=encryption_spec, 210 ) File /opt/conda/lib/python3.10/site-packages/vertexai/agent_engines/_agent_engines.py:545, in AgentEngine.create(cls, agent_engine, requirements, display_name, description, gcs_dir_name, extra_packages, env_vars, build_options, service_account, psc_interface_config, min_instances, max_instances, resource_limits, container_concurrency, encryption_spec) 539 base.VertexAiResourceNounWithFutureManager.__init__(sdk_resource) 541 # Prepares the Agent Engine for creation in Vertex AI. 542 # This involves packaging and uploading the artifacts for 543 # agent_engine, requirements and extra_packages to 544 # `staging_bucket/gcs_dir_name`. --> 545 _prepare( 546 agent_engine=agent_engine, 547 requirements=requirements, 548 project=sdk_resource.project, 549 location=sdk_resource.location, 550 staging_bucket=staging_bucket, 551 gcs_dir_name=gcs_dir_name, 552 extra_packages=extra_packages, 553 ) 554 reasoning_engine = aip_types.ReasoningEngine( 555 display_name=display_name, 556 description=description, 557 encryption_spec=encryption_spec, 558 ) 559 if agent_engine is not None: 560 # Update the package spec. File /opt/conda/lib/python3.10/site-packages/vertexai/agent_engines/_agent_engines.py:1295, in _prepare(agent_engine, requirements, extra_packages, project, location, staging_bucket, gcs_dir_name, logger) 1293 if agent_engine is None: 1294 return -> 1295 gcs_bucket = _get_gcs_bucket( 1296 project=project, 1297 location=location, 1298 staging_bucket=staging_bucket, 1299 logger=logger, 1300 ) 1301 _upload_agent_engine( 1302 agent_engine=agent_engine, 1303 gcs_bucket=gcs_bucket, 1304 gcs_dir_name=gcs_dir_name, 1305 logger=logger, 1306 ) 1307 if requirements is not None: File /opt/conda/lib/python3.10/site-packages/vertexai/agent_engines/_agent_engines.py:1195, in _get_gcs_bucket(project, location, staging_bucket, logger) 1193 staging_bucket = staging_bucket.replace("gs://", "") 1194 try: -> 1195 gcs_bucket = storage_client.get_bucket(staging_bucket) 1196 logger.info(f"Using bucket {staging_bucket}") 1197 except exceptions.NotFound: File /opt/conda/lib/python3.10/contextlib.py:79, in ContextDecorator.__call__.<locals>.inner(*args, **kwds) 76 @wraps(func) 77 def inner(*args, **kwds): 78 with self._recreate_cm(): ---> 79 return func(*args, **kwds) File /opt/conda/lib/python3.10/site-packages/google/cloud/storage/client.py:907, in Client.get_bucket(self, bucket_or_name, timeout, if_metageneration_match, if_metageneration_not_match, retry, generation, soft_deleted) 846 """Retrieve a bucket via a GET request. 847 848 See [API reference docs](https://cloud.google.com/storage/docs/json_api/v1/buckets/get) and a [code sample](https://cloud.google.com/storage/docs/samples/storage-get-bucket-metadata#storage_get_bucket_metadata-python). (...) 904 If the bucket is not found. 905 """ 906 bucket = self._bucket_arg_to_bucket(bucket_or_name, generation=generation) --> 907 bucket.reload( 908 client=self, 909 timeout=timeout, 910 if_metageneration_match=if_metageneration_match, 911 if_metageneration_not_match=if_metageneration_not_match, 912 retry=retry, 913 soft_deleted=soft_deleted, 914 ) 915 return bucket File /opt/conda/lib/python3.10/contextlib.py:79, in ContextDecorator.__call__.<locals>.inner(*args, **kwds) 76 @wraps(func) 77 def inner(*args, **kwds): 78 with self._recreate_cm(): ---> 79 return func(*args, **kwds) File /opt/conda/lib/python3.10/site-packages/google/cloud/storage/bucket.py:1147, in Bucket.reload(self, client, projection, timeout, if_etag_match, if_etag_not_match, if_metageneration_match, if_metageneration_not_match, retry, soft_deleted) 1088 @create_trace_span(name="Storage.Bucket.reload") 1089 def reload( 1090 self, (...) 1099 soft_deleted=None, 1100 ): 1101 """Reload properties from Cloud Storage. 1102 1103 If :attr:`user_project` is set, bills the API request to that project. (...) 1145 See: https://cloud.google.com/storage/docs/soft-delete 1146 """ -> 1147 super(Bucket, self).reload( 1148 client=client, 1149 projection=projection, 1150 timeout=timeout, 1151 if_etag_match=if_etag_match, 1152 if_etag_not_match=if_etag_not_match, 1153 if_metageneration_match=if_metageneration_match, 1154 if_metageneration_not_match=if_metageneration_not_match, 1155 retry=retry, 1156 soft_deleted=soft_deleted, 1157 ) File /opt/conda/lib/python3.10/site-packages/google/cloud/storage/_helpers.py:303, in _PropertyMixin.reload(self, client, projection, if_etag_match, if_etag_not_match, if_generation_match, if_generation_not_match, if_metageneration_match, if_metageneration_not_match, timeout, retry, soft_deleted) 299 headers = self._encryption_headers() 300 _add_etag_match_headers( 301 headers, if_etag_match=if_etag_match, if_etag_not_match=if_etag_not_match 302 ) --> 303 api_response = client._get_resource( 304 self.path, 305 query_params=query_params, 306 headers=headers, 307 timeout=timeout, 308 retry=retry, 309 _target_object=self, 310 ) 311 self._set_properties(api_response) File /opt/conda/lib/python3.10/site-packages/google/cloud/storage/client.py:474, in Client._get_resource(self, path, query_params, headers, timeout, retry, _target_object) 418 def _get_resource( 419 self, 420 path, (...) 425 _target_object=None, 426 ): 427 """Helper for bucket / blob methods making API 'GET' calls. 428 429 Args: (...) 472 If the bucket is not found. 473 """ --> 474 return self._connection.api_request( 475 method="GET", 476 path=path, 477 query_params=query_params, 478 headers=headers, 479 timeout=timeout, 480 retry=retry, 481 _target_object=_target_object, 482 ) File /opt/conda/lib/python3.10/site-packages/google/cloud/storage/_http.py:90, in Connection.api_request(self, *args, **kwargs) 88 if retry: 89 call = retry(call) ---> 90 return call() File /opt/conda/lib/python3.10/site-packages/google/api_core/retry/retry_unary.py:294, in Retry.__call__.<locals>.retry_wrapped_func(*args, **kwargs) 290 target = functools.partial(func, *args, **kwargs) 291 sleep_generator = exponential_sleep_generator( 292 self._initial, self._maximum, multiplier=self._multiplier 293 ) --> 294 return retry_target( 295 target, 296 self._predicate, 297 sleep_generator, 298 timeout=self._timeout, 299 on_error=on_error, 300 ) File /opt/conda/lib/python3.10/site-packages/google/api_core/retry/retry_unary.py:156, in retry_target(target, predicate, sleep_generator, timeout, on_error, exception_factory, **kwargs) 152 # pylint: disable=broad-except 153 # This function explicitly must deal with broad exceptions. 154 except Exception as exc: 155 # defer to shared logic for handling errors --> 156 next_sleep = _retry_error_helper( 157 exc, 158 deadline, 159 sleep_iter, 160 error_list, 161 predicate, 162 on_error, 163 exception_factory, 164 timeout, 165 ) 166 # if exception not raised, sleep before next attempt 167 time.sleep(next_sleep) File /opt/conda/lib/python3.10/site-packages/google/api_core/retry/retry_base.py:216, in _retry_error_helper(exc, deadline, sleep_iterator, error_list, predicate_fn, on_error_fn, exc_factory_fn, original_timeout) 210 if not predicate_fn(exc): 211 final_exc, source_exc = exc_factory_fn( 212 error_list, 213 RetryFailureReason.NON_RETRYABLE_ERROR, 214 original_timeout, 215 ) --> 216 raise final_exc from source_exc 217 if on_error_fn is not None: 218 on_error_fn(exc) File /opt/conda/lib/python3.10/site-packages/google/api_core/retry/retry_unary.py:147, in retry_target(target, predicate, sleep_generator, timeout, on_error, exception_factory, **kwargs) 145 while True: 146 try: --> 147 result = target() 148 if inspect.isawaitable(result): 149 warnings.warn(_ASYNC_RETRY_WARNING) File /opt/conda/lib/python3.10/site-packages/google/cloud/_http/__init__.py:482, in JSONConnection.api_request(self, method, path, query_params, data, content_type, headers, api_base_url, api_version, expect_json, _target_object, timeout, extra_api_info) 479 data = json.dumps(data) 480 content_type = "application/json" --> 482 response = self._make_request( 483 method=method, 484 url=url, 485 data=data, 486 content_type=content_type, 487 headers=headers, 488 target_object=_target_object, 489 timeout=timeout, 490 extra_api_info=extra_api_info, 491 ) 493 if not 200 <= response.status_code < 300: 494 raise exceptions.from_http_response(response) File /opt/conda/lib/python3.10/site-packages/google/cloud/_http/__init__.py:341, in JSONConnection._make_request(self, method, url, data, content_type, headers, target_object, timeout, extra_api_info) 338 headers[CLIENT_INFO_HEADER] = self.user_agent 339 headers["User-Agent"] = self.user_agent --> 341 return self._do_request( 342 method, url, headers, data, target_object, timeout=timeout 343 ) File /opt/conda/lib/python3.10/site-packages/google/cloud/_http/__init__.py:379, in JSONConnection._do_request(self, method, url, headers, data, target_object, timeout) 345 def _do_request( 346 self, method, url, headers, data, target_object, timeout=_DEFAULT_TIMEOUT 347 ): # pylint: disable=unused-argument 348 """Low-level helper: perform the actual API request over HTTP. 349 350 Allows batch context managers to override and defer a request. (...) 377 :returns: The HTTP response. 378 """ --> 379 return self.http.request( 380 url=url, method=method, headers=headers, data=data, timeout=timeout 381 ) File /opt/conda/lib/python3.10/site-packages/google/auth/transport/requests.py:538, in AuthorizedSession.request(self, method, url, data, headers, max_allowed_time, timeout, **kwargs) 535 remaining_time = max_allowed_time 537 with TimeoutGuard(remaining_time) as guard: --> 538 self.credentials.before_request(auth_request, method, url, request_headers) 539 remaining_time = guard.remaining_timeout 541 with TimeoutGuard(remaining_time) as guard: File /opt/conda/lib/python3.10/site-packages/google/auth/credentials.py:230, in Credentials.before_request(self, request, method, url, headers) 228 self._non_blocking_refresh(request) 229 else: --> 230 self._blocking_refresh(request) 232 metrics.add_metric_header(headers, self._metric_header_for_usage()) 233 self.apply(headers) File /opt/conda/lib/python3.10/site-packages/google/auth/credentials.py:193, in Credentials._blocking_refresh(self, request) 191 def _blocking_refresh(self, request): 192 if not self.valid: --> 193 self.refresh(request) File /opt/conda/lib/python3.10/site-packages/google/auth/credentials.py:367, in CredentialsWithTrustBoundary.refresh(self, request) 361 def refresh(self, request): 362 """Refreshes the access token and the trust boundary. 363 364 This method calls the subclass's token refresh logic and then 365 refreshes the trust boundary if applicable. 366 """ --> 367 self._perform_refresh_token(request) 368 self._refresh_trust_boundary(request) File /opt/conda/lib/python3.10/site-packages/google/auth/compute_engine/credentials.py:147, in Credentials._perform_refresh_token(self, request) 145 except exceptions.TransportError as caught_exc: 146 new_exc = exceptions.RefreshError(caught_exc) --> 147 raise new_exc from caught_exc RefreshError: Failed to retrieve https://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/?recursive=true from the Google Compute Engine metadata service. Compute Engine Metadata server unavailable. Last exception: HTTPSConnectionPool(host='metadata.google.internal', port=443): Max retries exceeded with url: /computeMetadata/v1/instance/service-accounts/default/?recursive=true (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1017)')))

Richard G. · Reviewed 7 ימים ago

some errors

samantha.gunasena s. · Reviewed 7 ימים ago

Commands failed a few times and had to be re-run. Disconnected from lab frequently (no a problem on my network). Lab doesn't really give you much tie to absorb all the material.

Chris Jalbert G. · Reviewed 8 ימים ago

utkarsh s. · Reviewed 8 ימים ago

Rouhollah E. · Reviewed 8 ימים ago

Ali I. · Reviewed 9 ימים ago

I would like this to focus on our 1P stack - ADK instead of langchain

Christian B. · Reviewed 9 ימים ago

Shivaxi Z. · Reviewed 10 ימים ago

Alexey O. · Reviewed 11 ימים ago

Sam P. · Reviewed 11 ימים ago

Pradeep K. · Reviewed 11 ימים ago

Thomas L. · Reviewed 12 ימים ago

We do not ensure the published reviews originate from consumers who have purchased or used the products. Reviews are not verified by Google.

Vous devez vous connecter ou vous inscrire pour continuer.

close