import os import json import sys from dotenv import load_dotenv # Load environment variables from .env file if it exists load_dotenv() # Check for required environment variables and provide guidance if missing required_vars = ["OPENAI_API_KEY", "PROJECT_ID", "DATASET_ID", "BIGQUERY_KEY_PATH"] missing_vars = [var for var in required_vars if not os.environ.get(var)] if missing_vars: print("ERROR: Missing required environment variables:") for var in missing_vars: print(f"- {var}") print("\nPlease set these variables in your environment or in a .env file.") print("Example .env file:") print(""" OPENAI_API_KEY=your_openai_api_key PROJECT_ID=your_gcp_project_id DATASET_ID=your_bigquery_dataset_id BIGQUERY_KEY_PATH=path/to/your/bigquery/credentials.json """) # Handle BigQuery credentials print("DEBUG: Handling BigQuery credentials...") if os.environ.get("BIGQUERY_KEY_PATH"): bigquery_key = os.environ.get("BIGQUERY_KEY_PATH") print(f"DEBUG: BIGQUERY_KEY_PATH is set, length: {len(bigquery_key)} characters") # Create a temporary credentials file from the environment variable credentials_path = "/tmp/bigquery_credentials.json" try: # Try to directly write the content to a file without JSON parsing with open(credentials_path, "w") as f: f.write(bigquery_key) print(f"DEBUG: Wrote credentials to {credentials_path}") os.environ["BIGQUERY_KEY_PATH"] = credentials_path print(f"DEBUG: Set BIGQUERY_KEY_PATH to {credentials_path}") # Verify the file exists if os.path.exists(credentials_path): print(f"DEBUG: Confirmed credentials file exists at {credentials_path}") # Try to validate the JSON by reading it back try: with open(credentials_path, "r") as f: json.load(f) print("DEBUG: Credentials file contains valid JSON") except json.JSONDecodeError as e: print(f"WARNING: Credentials file contains invalid JSON: {str(e)}") print("This might cause issues with BigQuery authentication") else: print(f"ERROR: Failed to create credentials file at {credentials_path}") except Exception as e: print(f"ERROR: Failed to process BigQuery credentials: {str(e)}") else: print("WARNING: BIGQUERY_KEY_PATH environment variable is not set") # BigQuery configuration BIGQUERY_KEY_PATH = os.environ.get("BIGQUERY_KEY_PATH") PROJECT_ID = os.environ.get("PROJECT_ID") DATASET_ID = os.environ.get("DATASET_ID")