Spaces:
Runtime error
Runtime error
File size: 3,939 Bytes
15342b4 8c024cb 15342b4 8c024cb 15342b4 8c024cb 37686f5 15342b4 8c024cb 37686f5 8c024cb 15342b4 8c024cb 15342b4 8c024cb 15342b4 8c024cb 15342b4 8c024cb 15342b4 8c024cb 15342b4 8c024cb 15342b4 8c024cb 15342b4 8c024cb | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | # fusion_analysis_v3_diagnostic.py
import pandas as pd
import firebase_admin
from firebase_admin import credentials, db
import os
import json
# --- CONFIGURATION ---
SA_KEY_JSON = os.environ.get('FIRESTORE_SA_KEY')
DB_URL = os.environ.get('FIREBASE_DB_URL')
AGENT_SIGNALS_REF = 'signals_v2'
NEWS_SENTIMENT_REF = 'news_sentiment'
def initialize_firebase():
"""Initializes the Firebase app if not already done."""
if not firebase_admin._apps:
try:
cred_dict = json.loads(SA_KEY_JSON)
cred = credentials.Certificate(cred_dict)
firebase_admin.initialize_app(cred, {'databaseURL': DB_URL})
print("β
Firebase connection successful.")
return True
except Exception as e:
print(f"β CRITICAL ERROR - Firebase initialization failed: {e}")
return False
return True
def fetch_data_from_firebase(ref_name):
"""Fetches, validates, and processes data from a Firebase reference."""
try:
ref = db.reference(ref_name)
data = ref.get()
if not data:
print(f"β οΈ No data found in '{ref_name}'.")
return pd.DataFrame()
df = pd.DataFrame.from_dict(data, orient='index')
timestamp_col = 'timestamp_entry' if 'timestamp_entry' in df.columns else 'timestamp_published'
if not timestamp_col in df.columns:
print(f"β Timestamp column not found in '{ref_name}'.")
return pd.DataFrame()
df.dropna(subset=[timestamp_col], inplace=True)
df['timestamp'] = pd.to_datetime(df[timestamp_col], utc=True, errors='coerce')
df.dropna(subset=['timestamp'], inplace=True)
df = df.set_index('timestamp').sort_index()
print(f"β
Fetched and validated {len(df)} records from '{ref_name}'.")
return df
except Exception as e:
print(f"β Error fetching data from '{ref_name}': {e}")
return pd.DataFrame()
def run_fusion_analysis():
"""Main function to fetch, fuse, and analyze the data."""
if not initialize_firebase():
return
agent_df = fetch_data_from_firebase(AGENT_SIGNALS_REF)
news_df = fetch_data_from_firebase(NEWS_SENTIMENT_REF)
if agent_df.empty or news_df.empty:
print("\nCould not proceed. One or both data sources are empty.")
return
# --- NEW: DIAGNOSTIC STEP ---
print("\n--- Time Range Diagnostics ---")
print(f"Agent Signals Span From: {agent_df.index.min()} to {agent_df.index.max()}")
print(f"News Headlines Span From: {news_df.index.min()} to {news_df.index.max()}")
# ----------------------------
print("\n--- Fusing Agent Decisions with News Sentiment ---")
# --- MODIFIED: INCREASED TOLERANCE FOR TESTING ---
# We increase the tolerance to see if there's any overlap in a wider window.
# If this finds matches, it confirms the events are just not close enough together.
fused_df = pd.merge_asof(
left=agent_df,
right=news_df[['sentiment', 'confidence_score', 'headline']],
left_index=True,
right_index=True,
direction='backward',
tolerance=pd.Timedelta(hours=2) # Increased from 30 minutes to 2 hours
)
fused_df.dropna(subset=['sentiment'], inplace=True)
if fused_df.empty:
print("\nAnalysis Result: Even with a 2-hour window, no agent signals were found to have occurred after a news headline.")
print("Recommendation: Let the news sentiment agent run for a longer period to collect more data points.")
return
print(f"β
Fusion complete. Matched {len(fused_df)} agent signals with news headlines within a 2-hour window.")
# --- THE INTELLIGENCE LABORATORY (No changes below) ---
print("\n--- Advanced Analysis Results ---")
# ... (The rest of the analysis code is the same) ...
if __name__ == "__main__":
run_fusion_analysis() |