| | import json |
| | import asyncio |
| | from google import genai |
| | from credentials_manager import CredentialManager, parse_multiple_json_credentials |
| | import config as app_config |
| | from model_loader import refresh_models_config_cache |
| |
|
| | |
| | |
| | |
| |
|
| | |
| |
|
| | async def init_vertex_ai(credential_manager_instance: CredentialManager) -> bool: |
| | """ |
| | Initializes the credential manager with credentials from GOOGLE_CREDENTIALS_JSON (if provided) |
| | and verifies if any credentials (environment or file-based through the manager) are available. |
| | The CredentialManager itself handles loading file-based credentials upon its instantiation. |
| | This function primarily focuses on augmenting the manager with env var credentials. |
| | |
| | Returns True if any credentials seem available in the manager, False otherwise. |
| | """ |
| | try: |
| | credentials_json_str = app_config.GOOGLE_CREDENTIALS_JSON_STR |
| | env_creds_loaded_into_manager = False |
| |
|
| | if credentials_json_str: |
| | print("INFO: Found GOOGLE_CREDENTIALS_JSON environment variable. Attempting to load into CredentialManager.") |
| | try: |
| | |
| | json_objects = parse_multiple_json_credentials(credentials_json_str) |
| | if json_objects: |
| | print(f"DEBUG: Parsed {len(json_objects)} potential credential objects from GOOGLE_CREDENTIALS_JSON.") |
| | success_count = credential_manager_instance.load_credentials_from_json_list(json_objects) |
| | if success_count > 0: |
| | print(f"INFO: Successfully loaded {success_count} credentials from GOOGLE_CREDENTIALS_JSON into manager.") |
| | env_creds_loaded_into_manager = True |
| | |
| | |
| | if not env_creds_loaded_into_manager: |
| | print("DEBUG: Multi-JSON loading from GOOGLE_CREDENTIALS_JSON did not add to manager or was empty. Attempting single JSON load.") |
| | try: |
| | credentials_info = json.loads(credentials_json_str) |
| | |
| |
|
| | if isinstance(credentials_info, dict) and \ |
| | all(field in credentials_info for field in ["type", "project_id", "private_key_id", "private_key", "client_email"]): |
| | if credential_manager_instance.add_credential_from_json(credentials_info): |
| | print("INFO: Successfully loaded single credential from GOOGLE_CREDENTIALS_JSON into manager.") |
| | |
| | else: |
| | print("WARNING: Single JSON from GOOGLE_CREDENTIALS_JSON failed to load into manager via add_credential_from_json.") |
| | else: |
| | print("WARNING: Single JSON from GOOGLE_CREDENTIALS_JSON is not a valid dict or missing required fields for basic check.") |
| | except json.JSONDecodeError as single_json_err: |
| | print(f"WARNING: GOOGLE_CREDENTIALS_JSON could not be parsed as a single JSON object: {single_json_err}.") |
| | except Exception as single_load_err: |
| | print(f"WARNING: Error trying to load single JSON from GOOGLE_CREDENTIALS_JSON into manager: {single_load_err}.") |
| | except Exception as e_json_env: |
| | |
| | print(f"WARNING: Error processing GOOGLE_CREDENTIALS_JSON env var: {e_json_env}.") |
| | else: |
| | print("INFO: GOOGLE_CREDENTIALS_JSON environment variable not found.") |
| |
|
| | |
| | print("INFO: Attempting to pre-warm model configuration cache during startup...") |
| | models_loaded_successfully = await refresh_models_config_cache() |
| | if models_loaded_successfully: |
| | print("INFO: Model configuration cache pre-warmed successfully.") |
| | else: |
| | print("WARNING: Failed to pre-warm model configuration cache during startup. It will be loaded lazily on first request.") |
| | |
| | |
| |
|
| | |
| | |
| | |
| | if credential_manager_instance.refresh_credentials_list(): |
| | total_creds = credential_manager_instance.get_total_credentials() |
| | print(f"INFO: Credential Manager reports {total_creds} credential(s) available (from files and/or GOOGLE_CREDENTIALS_JSON).") |
| | |
| | |
| | |
| | print("INFO: Attempting to validate a random credential by creating a temporary client...") |
| | temp_creds_val, temp_project_id_val = credential_manager_instance.get_random_credentials() |
| | if temp_creds_val and temp_project_id_val: |
| | try: |
| | _ = genai.Client(vertexai=True, credentials=temp_creds_val, project=temp_project_id_val, location="global") |
| | print(f"INFO: Successfully validated a credential from Credential Manager (Project: {temp_project_id_val}). Initialization check passed.") |
| | return True |
| | except Exception as e_val: |
| | print(f"WARNING: Failed to validate a random credential from manager by creating a temp client: {e_val}. App may rely on non-validated credentials.") |
| | |
| | |
| | return True |
| | elif total_creds > 0 : |
| | print(f"WARNING: {total_creds} credentials reported by manager, but could not retrieve one for validation. Problems might occur.") |
| | return True |
| | else: |
| | print("ERROR: No credentials available after attempting to load from all sources.") |
| | return False |
| | else: |
| | print("ERROR: Credential Manager reports no available credentials after processing all sources.") |
| | return False |
| |
|
| | except Exception as e: |
| | print(f"CRITICAL ERROR during Vertex AI credential setup: {e}") |
| | return False |