Initial commit - WhyRating Engine (Google Reviews Scraper)
This commit is contained in:
83
run_synthesis.py
Normal file
83
run_synthesis.py
Normal file
@@ -0,0 +1,83 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Regenerate synthesis with new report format."""
|
||||
import asyncio
|
||||
import os
|
||||
import sys
|
||||
import uuid
|
||||
|
||||
sys.path.insert(0, '/app/packages/reviewiq-pipeline/src')
|
||||
sys.path.insert(0, '/app/packages/pipeline-core/src')
|
||||
|
||||
async def main():
|
||||
import asyncpg
|
||||
from reviewiq_pipeline.config import Config
|
||||
from reviewiq_pipeline.services.llm_client import LLMClient
|
||||
from reviewiq_pipeline.stages.stage5_synthesize import Stage5Synthesizer
|
||||
|
||||
job_id = "a3813665-ea23-4fb0-aab7-b282ef9443e4"
|
||||
|
||||
database_url = os.getenv(
|
||||
'DATABASE_URL',
|
||||
'postgresql://scraper:scraper123@scraper-db:5432/scraper'
|
||||
)
|
||||
|
||||
print("Connecting to database...")
|
||||
pool = await asyncpg.create_pool(database_url)
|
||||
|
||||
# Check if execution exists for this job, create one if not
|
||||
print("Checking for existing execution...")
|
||||
row = await pool.fetchrow(
|
||||
"SELECT id FROM pipeline.executions WHERE job_id = $1::uuid ORDER BY created_at DESC LIMIT 1",
|
||||
job_id
|
||||
)
|
||||
|
||||
if row:
|
||||
execution_id = str(row['id'])
|
||||
print(f"Found existing execution: {execution_id}")
|
||||
else:
|
||||
execution_id = str(uuid.uuid4())
|
||||
print(f"Creating new execution: {execution_id}")
|
||||
await pool.execute("""
|
||||
INSERT INTO pipeline.executions (id, pipeline_id, job_id, status, stages_requested, created_at)
|
||||
VALUES ($1::uuid, 'reviewiq', $2::uuid, 'running', ARRAY['synthesize'], NOW())
|
||||
""", execution_id, job_id)
|
||||
|
||||
print("Creating LLM client...")
|
||||
config = Config()
|
||||
llm_client = LLMClient.create(config)
|
||||
|
||||
try:
|
||||
print(f"Generating analyst report for job {job_id}...")
|
||||
stage5 = Stage5Synthesizer(pool=pool, llm_client=llm_client)
|
||||
synthesis = await stage5.run(job_id, execution_id)
|
||||
|
||||
# Mark execution as completed
|
||||
await pool.execute(
|
||||
"UPDATE pipeline.executions SET status = 'completed', completed_at = NOW() WHERE id = $1::uuid",
|
||||
execution_id
|
||||
)
|
||||
|
||||
print(f"\n{'='*70}")
|
||||
print("ANALYST REPORT GENERATED")
|
||||
print(f"{'='*70}")
|
||||
print(f"\nHEADLINE: {synthesis.headline}")
|
||||
print(f"\nVERDICT: {synthesis.verdict}")
|
||||
print(f"\nRATING: {synthesis.current_rating:.1f} → {synthesis.potential_rating:.1f} (gap: +{synthesis.rating_gap:.1f})")
|
||||
print(f"\nNARRATIVE:\n{synthesis.narrative[:500]}...")
|
||||
print(f"\nPRIMARY PROBLEM: {synthesis.primary_problem}")
|
||||
print(f"ROOT CAUSE: {synthesis.root_cause}")
|
||||
print(f"\nACTIONS ({len(synthesis.actions)}):")
|
||||
for a in synthesis.actions:
|
||||
print(f" [{a.priority}] {a.action}")
|
||||
print(f" Owner: {a.owner} | Impact: {a.impact}")
|
||||
print(f"\nEVIDENCE ({len(synthesis.evidence)}):")
|
||||
for e in synthesis.evidence[:3]:
|
||||
print(f" [{e.sentiment}] \"{e.quote[:60]}...\"")
|
||||
print(f" Context: {e.context}")
|
||||
|
||||
finally:
|
||||
await llm_client.close()
|
||||
await pool.close()
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
Reference in New Issue
Block a user