[DEEP-DIVE] Scaffold component — #830
Some checks failed
Deploy Nexus / deploy (push) Has been cancelled
Some checks failed
Deploy Nexus / deploy (push) Has been cancelled
This commit is contained in:
85
scaffold/deep-dive/synthesis/synthesis_engine.py
Normal file
85
scaffold/deep-dive/synthesis/synthesis_engine.py
Normal file
@@ -0,0 +1,85 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Synthesis Engine for Deep Dive
|
||||
Generates intelligence briefings from filtered content
|
||||
"""
|
||||
|
||||
import json
|
||||
from datetime import datetime
|
||||
from typing import List, Any
|
||||
from dataclasses import dataclass
|
||||
|
||||
# Load prompt template
|
||||
with open("synthesis_prompt.txt") as f:
|
||||
SYSTEM_PROMPT = f.read()
|
||||
|
||||
@dataclass
|
||||
class Briefing:
|
||||
date: str
|
||||
headlines: List[dict]
|
||||
deep_dives: List[dict]
|
||||
implications: str
|
||||
reading_list: List[dict]
|
||||
raw_text: str
|
||||
|
||||
def generate_briefing(
|
||||
papers: List[Any],
|
||||
blogs: List[Any],
|
||||
model_client=None, # Hermes AIAgent or similar
|
||||
date: str = None
|
||||
) -> Briefing:
|
||||
"""Generate a briefing from ranked papers and blog posts."""
|
||||
|
||||
date = date or datetime.now().strftime("%Y-%m-%d")
|
||||
|
||||
# Build input for LLM
|
||||
input_data = {
|
||||
"date": date,
|
||||
"papers": [
|
||||
{
|
||||
"title": p.title,
|
||||
"authors": p.authors,
|
||||
"abstract": p.abstract[:500] + "..." if len(p.abstract) > 500 else p.abstract,
|
||||
"url": p.url,
|
||||
"arxiv_id": p.arxiv_id,
|
||||
"relevance_score": score
|
||||
}
|
||||
for p, score in papers[:10] # Top 10 papers
|
||||
],
|
||||
"blogs": [
|
||||
{
|
||||
"title": b.title,
|
||||
"source": b.source,
|
||||
"url": b.url,
|
||||
"summary": b.summary[:300] if b.summary else ""
|
||||
}
|
||||
for b in blogs[:5] # Top 5 blog posts
|
||||
]
|
||||
}
|
||||
|
||||
# Call LLM for synthesis (placeholder - integrate with Hermes routing)
|
||||
if model_client:
|
||||
response = model_client.chat(
|
||||
system_message=SYSTEM_PROMPT,
|
||||
message=f"Generate briefing from this data:\n```json\n{json.dumps(input_data, indent=2)}\n```"
|
||||
)
|
||||
raw_text = response
|
||||
else:
|
||||
# Mock output for testing
|
||||
raw_text = f"# Deep Dive Briefing — {date}\n\n(Mock output - integrate LLM)"
|
||||
|
||||
# Parse structured data from raw_text
|
||||
# (In production, use structured output or regex parsing)
|
||||
|
||||
return Briefing(
|
||||
date=date,
|
||||
headlines=[],
|
||||
deep_dives=[],
|
||||
implications="",
|
||||
reading_list=[],
|
||||
raw_text=raw_text
|
||||
)
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("Synthesis engine loaded")
|
||||
print(f"Prompt length: {len(SYSTEM_PROMPT)} chars")
|
||||
Reference in New Issue
Block a user