fix(enrichment): handle ObjectId/datetime in persona dict before LLM call
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
604fdb9458
commit
c25d2423a0
1 changed files with 18 additions and 2 deletions
|
|
@ -14,6 +14,7 @@ import asyncio
|
|||
import json
|
||||
import os
|
||||
import sys
|
||||
from datetime import datetime
|
||||
|
||||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
|
||||
|
|
@ -60,6 +61,21 @@ async def enrich_persona(db, persona: dict) -> bool:
|
|||
print(f"\n→ Enriching: {name} ({pid})")
|
||||
print(f" Missing fields: {missing}")
|
||||
|
||||
# Strip non-serializable MongoDB types (ObjectId, datetime) before passing to LLM service
|
||||
def _to_plain(obj):
|
||||
name = type(obj).__name__
|
||||
if name == 'ObjectId':
|
||||
return str(obj)
|
||||
if isinstance(obj, datetime):
|
||||
return obj.isoformat()
|
||||
if isinstance(obj, dict):
|
||||
return {k: _to_plain(v) for k, v in obj.items()}
|
||||
if isinstance(obj, list):
|
||||
return [_to_plain(i) for i in obj]
|
||||
return obj
|
||||
|
||||
clean = {k: _to_plain(v) for k, v in persona.items() if k != '_id'}
|
||||
|
||||
update = {}
|
||||
|
||||
# Summary fields (aiSynthesizedBio, qualitativeAttributes, topPersonalityTraits)
|
||||
|
|
@ -67,7 +83,7 @@ async def enrich_persona(db, persona: dict) -> bool:
|
|||
if summary_missing:
|
||||
try:
|
||||
print(f" 🤖 Generating summary...")
|
||||
summary = await generate_persona_summary(persona, llm_model="gpt-5.4-mini")
|
||||
summary = await generate_persona_summary(clean, llm_model="gpt-5.4-mini")
|
||||
for f in summary_missing:
|
||||
if f in summary:
|
||||
update[f] = summary[f]
|
||||
|
|
@ -80,7 +96,7 @@ async def enrich_persona(db, persona: dict) -> bool:
|
|||
if detail_missing:
|
||||
try:
|
||||
print(f" 🤖 Generating detailed enrichment...")
|
||||
detailed = await generate_persona(basic_persona=persona, llm_model="gpt-5.4")
|
||||
detailed = await generate_persona(basic_persona=clean, llm_model="gpt-5.4")
|
||||
for f in detail_missing:
|
||||
if f in detailed and f not in persona:
|
||||
update[f] = detailed[f]
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue