Skip to content

Commit e5372e0

Browse files
robotdadclaude
andauthored
fix: handle LLM array responses in style extraction (#67)
LLM sometimes wraps JSON objects in arrays. Added type checking to extract the first element when LLM returns [{...}] instead of {...}. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude <noreply@anthropic.com>
1 parent 5e4b409 commit e5372e0

File tree

1 file changed

+13
-0
lines changed
  • scenarios/blog_writer/style_extractor

1 file changed

+13
-0
lines changed

scenarios/blog_writer/style_extractor/core.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,19 @@ async def query_with_parsing(enhanced_prompt: str):
135135
logger.warning("Could not extract style after retries, using defaults")
136136
return StyleProfile(**self._default_profile())
137137

138+
# Handle both dict and list responses from LLM
139+
# If LLM returns an array like [{...}], extract first element
140+
if isinstance(parsed, list):
141+
if len(parsed) > 0 and isinstance(parsed[0], dict):
142+
parsed = parsed[0]
143+
logger.debug("Extracted style data from array response")
144+
else:
145+
logger.warning("LLM returned empty or invalid array, using defaults")
146+
return StyleProfile(**self._default_profile())
147+
elif not isinstance(parsed, dict):
148+
logger.warning(f"Unexpected response type: {type(parsed)}, using defaults")
149+
return StyleProfile(**self._default_profile())
150+
138151
# Log what we extracted
139152
logger.info("Successfully extracted style profile:")
140153
logger.info(f" - Tone: {parsed.get('tone', 'N/A')}")

0 commit comments

Comments
 (0)