/Users/manta/Documents/Projects/TheRoad-I1/backend/app/api/v1/prompts.py:19: UserWarning: Field name "schema_json" in "PromptCreate" shadows an attribute in parent "BaseModel" class PromptCreate(BaseModel): /Users/manta/Documents/Projects/TheRoad-I1/backend/app/api/v1/prompts.py:27: UserWarning: Field name "schema_json" in "PromptUpdate" shadows an attribute in parent "BaseModel" class PromptUpdate(BaseModel): INFO: Started server process [23998] INFO: Waiting for application startup. {"timestamp": "2026-05-28T05:13:06.616104+00:00", "level": "WARNING", "logger": "app.main", "message": "SECURITY: insecure default credentials in use — DEFAULT_ADMIN_PASSWORD, DEFAULT_CREATOR_PASSWORD. Override via env vars before exposing this server."} INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8015 (Press CTRL+C to quit) {"timestamp": "2026-05-28T05:13:21.170071+00:00", "level": "INFO", "logger": "app.core.job_manager", "message": "Starting background job: run_all:4f948193-6809-4ae3-a3c6-2ca4e8af1c1a:dc70c0b3-5c09-4664-8c0f-9cac38c0c6ca:all (Run all all steps for dc70c0b3-5c09-4664-8c0f-9cac38c0c6ca)"} INFO: 127.0.0.1:50797 - "POST /api/v1/projects/4f948193-6809-4ae3-a3c6-2ca4e8af1c1a/episodes/dc70c0b3-5c09-4664-8c0f-9cac38c0c6ca/steps/run-all?mode=resume&category=all&approve_image_generation=true&image_call_cap=60 HTTP/1.1" 200 OK {"timestamp": "2026-05-28T05:13:21.176529+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step planning_doc_analysis: skipped"} {"timestamp": "2026-05-28T05:13:21.178105+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step text_cleanup: skipped"} {"timestamp": "2026-05-28T05:13:21.179545+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step scene_segmentation: skipped"} {"timestamp": "2026-05-28T05:13:21.180331+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step episode_summary: skipped"} {"timestamp": "2026-05-28T05:13:21.182320+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step visual_world_rules: skipped"} {"timestamp": "2026-05-28T05:13:21.183766+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step scene_save: skipped"} {"timestamp": "2026-05-28T05:13:21.185866+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step entity_character_list: skipped"} {"timestamp": "2026-05-28T05:13:21.187901+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step scene_summary: skipped"} {"timestamp": "2026-05-28T05:13:21.191666+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step beat_extract: skipped"} {"timestamp": "2026-05-28T05:13:21.194429+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step shot_extract: skipped"} {"timestamp": "2026-05-28T05:13:21.196327+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step shot_validator: skipped"} {"timestamp": "2026-05-28T05:13:21.198644+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step entity_all_character: skipped"} {"timestamp": "2026-05-28T05:13:21.199881+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step entity_extract_character: skipped"} {"timestamp": "2026-05-28T05:13:21.201964+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step entity_all_location: skipped"} {"timestamp": "2026-05-28T05:13:21.203289+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step entity_extract_location: skipped"} {"timestamp": "2026-05-28T05:13:21.205307+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step entity_all_prop: skipped"} {"timestamp": "2026-05-28T05:13:21.206499+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step entity_extract_prop: skipped"} {"timestamp": "2026-05-28T05:13:21.209662+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step entity_merge: skipped"} {"timestamp": "2026-05-28T05:13:21.211270+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step entity_relation: skipped"} {"timestamp": "2026-05-28T05:13:21.213118+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step entity_filter: skipped"} {"timestamp": "2026-05-28T05:13:21.214808+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step entity_detail: skipped"} {"timestamp": "2026-05-28T05:13:21.216689+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step entity_t2i: skipped"} {"timestamp": "2026-05-28T05:13:21.218273+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step shot_selection: skipped"} {"timestamp": "2026-05-28T05:13:21.250455+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.entity_sync_service", "message": "Synced 41 entities to DB from checkpoint (upsert); removed 0 stale links"} {"timestamp": "2026-05-28T05:13:21.283014+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced 152 scene_stills (shot-based) to DB"} {"timestamp": "2026-05-28T05:13:21.294290+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced scene_summary from checkpoint"} {"timestamp": "2026-05-28T05:13:21.304454+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced shot_type from scene_cinematography checkpoint (legacy)"} {"timestamp": "2026-05-28T05:13:21.314661+00:00", "level": "WARNING", "logger": "app.core.name_matcher", "message": "name_index collision: key='경찰수사점퍼' kept existing entry, skipped new from raw='경찰수사점퍼'"} {"timestamp": "2026-05-28T05:13:21.316163+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.outlook_sync_service", "message": "Synced 12 outlooks + 13 character-outlook links (Δ +0 / -0)"} {"timestamp": "2026-05-28T05:13:21.324472+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.episode_projection_service", "message": "T2I appearance counts: 0 entities updated, 28 total short_ids found"} {"timestamp": "2026-05-28T05:13:21.325476+00:00", "level": "WARNING", "logger": "app.core.applicability", "message": "_if_planning_doc fallback to False: '_StubRunner' object has no attribute 'db'"} {"timestamp": "2026-05-28T05:13:21.327222+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.orchestrator", "message": "orchestrate_full_sync: all changes committed atomically (episode dc70c0b3, step=-, repaired=0)"} {"timestamp": "2026-05-28T05:13:21.328678+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step scene_director: skipped"} {"timestamp": "2026-05-28T05:13:21.330183+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step shot_director: skipped"} {"timestamp": "2026-05-28T05:13:21.332428+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step scene_camera_flow: skipped"} {"timestamp": "2026-05-28T05:13:21.333402+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step shot_dependency: skipped"} {"timestamp": "2026-05-28T05:13:21.355457+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.entity_sync_service", "message": "Synced 41 entities to DB from checkpoint (upsert); removed 0 stale links"} {"timestamp": "2026-05-28T05:13:21.382855+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced 152 scene_stills (shot-based) to DB"} {"timestamp": "2026-05-28T05:13:21.394117+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced scene_summary from checkpoint"} {"timestamp": "2026-05-28T05:13:21.405729+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced shot_type from scene_cinematography checkpoint (legacy)"} {"timestamp": "2026-05-28T05:13:21.415018+00:00", "level": "WARNING", "logger": "app.core.name_matcher", "message": "name_index collision: key='경찰수사점퍼' kept existing entry, skipped new from raw='경찰수사점퍼'"} {"timestamp": "2026-05-28T05:13:21.416235+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.outlook_sync_service", "message": "Synced 12 outlooks + 13 character-outlook links (Δ +0 / -0)"} {"timestamp": "2026-05-28T05:13:21.423209+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.episode_projection_service", "message": "T2I appearance counts: 0 entities updated, 28 total short_ids found"} {"timestamp": "2026-05-28T05:13:21.423796+00:00", "level": "WARNING", "logger": "app.core.applicability", "message": "_if_planning_doc fallback to False: '_StubRunner' object has no attribute 'db'"} {"timestamp": "2026-05-28T05:13:21.425831+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.orchestrator", "message": "orchestrate_full_sync: all changes committed atomically (episode dc70c0b3, step=-, repaired=0)"} {"timestamp": "2026-05-28T05:13:21.427385+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step outlook_phase1: skipped"} {"timestamp": "2026-05-28T05:13:21.449764+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.entity_sync_service", "message": "Synced 41 entities to DB from checkpoint (upsert); removed 0 stale links"} {"timestamp": "2026-05-28T05:13:21.477290+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced 152 scene_stills (shot-based) to DB"} {"timestamp": "2026-05-28T05:13:21.489534+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced scene_summary from checkpoint"} {"timestamp": "2026-05-28T05:13:21.501635+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced shot_type from scene_cinematography checkpoint (legacy)"} {"timestamp": "2026-05-28T05:13:21.511911+00:00", "level": "WARNING", "logger": "app.core.name_matcher", "message": "name_index collision: key='경찰수사점퍼' kept existing entry, skipped new from raw='경찰수사점퍼'"} {"timestamp": "2026-05-28T05:13:21.513108+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.outlook_sync_service", "message": "Synced 12 outlooks + 13 character-outlook links (Δ +0 / -0)"} {"timestamp": "2026-05-28T05:13:21.520062+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.episode_projection_service", "message": "T2I appearance counts: 0 entities updated, 28 total short_ids found"} {"timestamp": "2026-05-28T05:13:21.520681+00:00", "level": "WARNING", "logger": "app.core.applicability", "message": "_if_planning_doc fallback to False: '_StubRunner' object has no attribute 'db'"} {"timestamp": "2026-05-28T05:13:21.522020+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.orchestrator", "message": "orchestrate_full_sync: all changes committed atomically (episode dc70c0b3, step=-, repaired=0)"} {"timestamp": "2026-05-28T05:13:21.523564+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step outlook_phase2: skipped"} {"timestamp": "2026-05-28T05:13:21.544899+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.entity_sync_service", "message": "Synced 41 entities to DB from checkpoint (upsert); removed 0 stale links"} {"timestamp": "2026-05-28T05:13:21.571597+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced 152 scene_stills (shot-based) to DB"} {"timestamp": "2026-05-28T05:13:21.584029+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced scene_summary from checkpoint"} {"timestamp": "2026-05-28T05:13:21.596351+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced shot_type from scene_cinematography checkpoint (legacy)"} {"timestamp": "2026-05-28T05:13:21.606060+00:00", "level": "WARNING", "logger": "app.core.name_matcher", "message": "name_index collision: key='경찰수사점퍼' kept existing entry, skipped new from raw='경찰수사점퍼'"} {"timestamp": "2026-05-28T05:13:21.607251+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.outlook_sync_service", "message": "Synced 12 outlooks + 13 character-outlook links (Δ +0 / -0)"} {"timestamp": "2026-05-28T05:13:21.614555+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.episode_projection_service", "message": "T2I appearance counts: 0 entities updated, 28 total short_ids found"} {"timestamp": "2026-05-28T05:13:21.615290+00:00", "level": "WARNING", "logger": "app.core.applicability", "message": "_if_planning_doc fallback to False: '_StubRunner' object has no attribute 'db'"} {"timestamp": "2026-05-28T05:13:21.616689+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.orchestrator", "message": "orchestrate_full_sync: all changes committed atomically (episode dc70c0b3, step=-, repaired=0)"} {"timestamp": "2026-05-28T05:13:21.618044+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step outlook_phase3: skipped"} {"timestamp": "2026-05-28T05:13:21.620695+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step shot_staging: skipped"} {"timestamp": "2026-05-28T05:13:21.622960+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step background_classify: skipped"} {"timestamp": "2026-05-28T05:13:21.624980+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step background_master_plan: skipped"} {"timestamp": "2026-05-28T05:13:21.627280+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step floor_plan_prompt: skipped"} {"timestamp": "2026-05-28T05:13:21.629790+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step shot_essence_extraction: not_applicable"} {"timestamp": "2026-05-28T05:13:21.633340+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step scene_consistency: skipped"} {"timestamp": "2026-05-28T05:13:21.637939+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step floor_plan_render: skipped"} {"timestamp": "2026-05-28T05:13:21.639483+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step floor_plan_overlay_payload: skipped"} {"timestamp": "2026-05-28T05:13:21.641531+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step base_location_dossier: skipped"} {"timestamp": "2026-05-28T05:13:21.643582+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step floor_plan_geometry_readback: skipped"} {"timestamp": "2026-05-28T05:13:21.645743+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step shot_aware_bg_render_plan: skipped"} {"timestamp": "2026-05-28T05:13:21.648336+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step background_prompt: skipped"} {"timestamp": "2026-05-28T05:13:21.650106+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step episode_reference_policy: skipped"} {"timestamp": "2026-05-28T05:13:21.670607+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.entity_sync_service", "message": "Synced 41 entities to DB from checkpoint (upsert); removed 0 stale links"} {"timestamp": "2026-05-28T05:13:21.698787+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced 152 scene_stills (shot-based) to DB"} {"timestamp": "2026-05-28T05:13:21.711894+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced scene_summary from checkpoint"} {"timestamp": "2026-05-28T05:13:21.724616+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced shot_type from scene_cinematography checkpoint (legacy)"} {"timestamp": "2026-05-28T05:13:21.734662+00:00", "level": "WARNING", "logger": "app.core.name_matcher", "message": "name_index collision: key='경찰수사점퍼' kept existing entry, skipped new from raw='경찰수사점퍼'"} {"timestamp": "2026-05-28T05:13:21.735759+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.outlook_sync_service", "message": "Synced 12 outlooks + 13 character-outlook links (Δ +0 / -0)"} {"timestamp": "2026-05-28T05:13:21.742665+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.episode_projection_service", "message": "T2I appearance counts: 0 entities updated, 28 total short_ids found"} {"timestamp": "2026-05-28T05:13:21.743256+00:00", "level": "WARNING", "logger": "app.core.applicability", "message": "_if_planning_doc fallback to False: '_StubRunner' object has no attribute 'db'"} {"timestamp": "2026-05-28T05:13:21.744727+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.orchestrator", "message": "orchestrate_full_sync: all changes committed atomically (episode dc70c0b3, step=-, repaired=0)"} {"timestamp": "2026-05-28T05:13:21.764021+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "_load_chain_bg_owned_by_shot: 22 shots mapped from 12 backgrounds"} {"timestamp": "2026-05-28T05:13:21.764635+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "scene_detail: 50 shot_staging entries loaded"} {"timestamp": "2026-05-28T05:13:21.770425+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "scene_detail: 50 shot_staging entries loaded"} {"timestamp": "2026-05-28T05:13:21.770768+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "scene_detail: 18 scenes with fixed elements loaded"} {"timestamp": "2026-05-28T05:13:21.776942+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "_load_chain_bg_guide_by_shot: 22 shot guides loaded (0 skipped warnings)"} {"timestamp": "2026-05-28T05:13:21.778182+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "_load_chain_bg_camera_meta_by_shot: 22 shots with camera meta loaded (0 skipped warnings)"} {"timestamp": "2026-05-28T05:13:21.778613+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "_load_chain_bg_owned_by_shot: 22 shots mapped from 12 backgrounds"} {"timestamp": "2026-05-28T05:13:21.778961+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "_load_chain_bg_id_by_shot: 22 shots mapped to bg_id from 12 backgrounds"} {"timestamp": "2026-05-28T05:13:21.781657+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "scene_detail: 9 prop term maps loaded for Task 14 namespace reconciliation"} {"timestamp": "2026-05-28T05:13:21.795974+00:00", "level": "INFO", "logger": "app.core.steps.detail_steps", "message": "verify_completion: s1_sh3 card hash drift resolved by upstream shot_dependency recompute (downstream shot_dependency_t2i false-positive)"} {"timestamp": "2026-05-28T05:13:21.802771+00:00", "level": "INFO", "logger": "app.core.steps.detail_steps", "message": "verify_completion: s2_sh1 card hash drift resolved by upstream shot_dependency recompute (downstream shot_dependency_t2i false-positive)"} {"timestamp": "2026-05-28T05:13:21.809499+00:00", "level": "INFO", "logger": "app.core.steps.detail_steps", "message": "verify_completion: s2_sh3 card hash drift resolved by upstream shot_dependency recompute (downstream shot_dependency_t2i false-positive)"} {"timestamp": "2026-05-28T05:13:21.842688+00:00", "level": "INFO", "logger": "app.core.steps.detail_steps", "message": "verify_completion: s7_sh5 card hash drift resolved by upstream shot_dependency recompute (downstream shot_dependency_t2i false-positive)"} {"timestamp": "2026-05-28T05:13:21.855912+00:00", "level": "INFO", "logger": "app.core.steps.detail_steps", "message": "verify_completion: s8_sh4 card hash drift resolved by upstream shot_dependency recompute (downstream shot_dependency_t2i false-positive)"} {"timestamp": "2026-05-28T05:13:21.862728+00:00", "level": "INFO", "logger": "app.core.steps.detail_steps", "message": "verify_completion: s9_sh1 card hash drift resolved by upstream shot_dependency recompute (downstream shot_dependency_t2i false-positive)"} {"timestamp": "2026-05-28T05:13:21.869271+00:00", "level": "INFO", "logger": "app.core.steps.detail_steps", "message": "verify_completion: s10_sh1 card hash drift resolved by upstream shot_dependency recompute (downstream shot_dependency_t2i false-positive)"} {"timestamp": "2026-05-28T05:13:21.869401+00:00", "level": "WARNING", "logger": "app.core.subject_reference_policy", "message": "subject_reference_policy: dropping policy for non-shot-visible subject C09 (visible=[]) render_prompt_card:s10.shot4"} {"timestamp": "2026-05-28T05:13:21.869424+00:00", "level": "WARNING", "logger": "app.core.subject_reference_policy", "message": "subject_reference_policy: dropping policy for non-shot-visible subject C05 (visible=[]) render_prompt_card:s10.shot4"} {"timestamp": "2026-05-28T05:13:21.872737+00:00", "level": "WARNING", "logger": "app.core.subject_reference_policy", "message": "subject_reference_policy: dropping policy for non-shot-visible subject C09 (visible=[]) render_prompt_card:s10.shot4"} {"timestamp": "2026-05-28T05:13:21.872760+00:00", "level": "WARNING", "logger": "app.core.subject_reference_policy", "message": "subject_reference_policy: dropping policy for non-shot-visible subject C05 (visible=[]) render_prompt_card:s10.shot4"} {"timestamp": "2026-05-28T05:13:21.875955+00:00", "level": "INFO", "logger": "app.core.steps.detail_steps", "message": "verify_completion: s10_sh4 card hash drift resolved by upstream shot_dependency recompute (downstream shot_dependency_t2i false-positive)"} {"timestamp": "2026-05-28T05:13:21.882457+00:00", "level": "INFO", "logger": "app.core.steps.detail_steps", "message": "verify_completion: s11_sh1 card hash drift resolved by upstream shot_dependency recompute (downstream shot_dependency_t2i false-positive)"} {"timestamp": "2026-05-28T05:13:21.908877+00:00", "level": "INFO", "logger": "app.core.steps.detail_steps", "message": "verify_completion: s13_sh4 card hash drift resolved by upstream shot_dependency recompute (downstream shot_dependency_t2i false-positive)"} {"timestamp": "2026-05-28T05:13:21.915571+00:00", "level": "INFO", "logger": "app.core.steps.detail_steps", "message": "verify_completion: s13_sh5 card hash drift resolved by upstream shot_dependency recompute (downstream shot_dependency_t2i false-positive)"} {"timestamp": "2026-05-28T05:13:21.932069+00:00", "level": "WARNING", "logger": "app.core.frame_spatial_contract", "message": "frame_spatial_contract: dropping constraint for non-shot-visible character target C02 (visible=['C01', 'L11'])"} {"timestamp": "2026-05-28T05:13:21.935412+00:00", "level": "WARNING", "logger": "app.core.frame_spatial_contract", "message": "frame_spatial_contract: dropping constraint for non-shot-visible character target C02 (visible=['C01', 'L11'])"} {"timestamp": "2026-05-28T05:13:21.938652+00:00", "level": "INFO", "logger": "app.core.steps.detail_steps", "message": "verify_completion: s15_sh4 card hash drift resolved by upstream shot_dependency recompute (downstream shot_dependency_t2i false-positive)"} {"timestamp": "2026-05-28T05:13:21.951670+00:00", "level": "INFO", "logger": "app.core.steps.detail_steps", "message": "verify_completion: s17_sh1 card hash drift resolved by upstream shot_dependency recompute (downstream shot_dependency_t2i false-positive)"} {"timestamp": "2026-05-28T05:13:21.958500+00:00", "level": "WARNING", "logger": "app.core.frame_spatial_contract", "message": "frame_spatial_contract: dropping constraint for non-shot-visible prop target P02 (visible=['C01', 'C05'])"} {"timestamp": "2026-05-28T05:13:21.961823+00:00", "level": "WARNING", "logger": "app.core.frame_spatial_contract", "message": "frame_spatial_contract: dropping constraint for non-shot-visible prop target P02 (visible=['C01', 'C05'])"} {"timestamp": "2026-05-28T05:13:21.964942+00:00", "level": "INFO", "logger": "app.core.steps.detail_steps", "message": "verify_completion: s18_sh11 card hash drift resolved by upstream shot_dependency recompute (downstream shot_dependency_t2i false-positive)"} {"timestamp": "2026-05-28T05:13:21.965060+00:00", "level": "WARNING", "logger": "app.core.frame_spatial_contract", "message": "frame_spatial_contract: dropping constraint for non-shot-visible character target C06 (visible=['C01', 'L10'])"} {"timestamp": "2026-05-28T05:13:21.965097+00:00", "level": "WARNING", "logger": "app.core.subject_reference_policy", "message": "subject_reference_policy: dropping policy for non-shot-visible subject C06 (visible=['C01']) render_prompt_card:s19.shot3"} {"timestamp": "2026-05-28T05:13:21.968433+00:00", "level": "WARNING", "logger": "app.core.frame_spatial_contract", "message": "frame_spatial_contract: dropping constraint for non-shot-visible character target C06 (visible=['C01', 'L10'])"} {"timestamp": "2026-05-28T05:13:21.968470+00:00", "level": "WARNING", "logger": "app.core.subject_reference_policy", "message": "subject_reference_policy: dropping policy for non-shot-visible subject C06 (visible=['C01']) render_prompt_card:s19.shot3"} {"timestamp": "2026-05-28T05:13:21.978160+00:00", "level": "INFO", "logger": "app.core.steps.detail_steps", "message": "verify_completion: s19_sh4 card hash drift resolved by upstream shot_dependency recompute (downstream shot_dependency_t2i false-positive)"} {"timestamp": "2026-05-28T05:13:21.988349+00:00", "level": "INFO", "logger": "app.core.steps.detail_steps", "message": "verify_completion: s21_sh6 card hash drift resolved by upstream shot_dependency recompute (downstream shot_dependency_t2i false-positive)"} {"timestamp": "2026-05-28T05:13:22.008074+00:00", "level": "INFO", "logger": "app.core.steps.detail_steps", "message": "verify_completion: s24_sh2 card hash drift resolved by upstream shot_dependency recompute (downstream shot_dependency_t2i false-positive)"} {"timestamp": "2026-05-28T05:13:22.014976+00:00", "level": "INFO", "logger": "app.core.steps.detail_steps", "message": "verify_completion: s25_sh3 card hash drift resolved by upstream shot_dependency recompute (downstream shot_dependency_t2i false-positive)"} {"timestamp": "2026-05-28T05:13:22.031595+00:00", "level": "INFO", "logger": "app.core.steps.detail_steps", "message": "verify_completion: s26_sh6 card hash drift resolved by upstream shot_dependency recompute (downstream shot_dependency_t2i false-positive)"} {"timestamp": "2026-05-28T05:13:22.047668+00:00", "level": "INFO", "logger": "app.core.steps.detail_steps", "message": "verify_completion: s28_sh5 card hash drift resolved by upstream shot_dependency recompute (downstream shot_dependency_t2i false-positive)"} {"timestamp": "2026-05-28T05:13:22.061186+00:00", "level": "INFO", "logger": "app.core.steps.detail_steps", "message": "verify_completion: s29_sh4 card hash drift resolved by upstream shot_dependency recompute (downstream shot_dependency_t2i false-positive)"} {"timestamp": "2026-05-28T05:13:22.067986+00:00", "level": "INFO", "logger": "app.core.steps.detail_steps", "message": "verify_completion: s29_sh8 card hash drift resolved by upstream shot_dependency recompute (downstream shot_dependency_t2i false-positive)"} {"timestamp": "2026-05-28T05:13:22.077651+00:00", "level": "INFO", "logger": "app.core.steps.detail_steps", "message": "verify_completion: s30_sh3 card hash drift resolved by upstream shot_dependency recompute (downstream shot_dependency_t2i false-positive)"} {"timestamp": "2026-05-28T05:13:22.078769+00:00", "level": "ERROR", "logger": "app.services.analysis_dispatch_service", "message": "Step scene_detail error: scene_detail invariant drift detected — invariant drift detected by verify (1차 정책): [\"15 render_prompt_card drift/missing: [(5, 1, 'hash'), (5, 7, 'hash'), (8, 2, 'hash'), (12, 5, 'hash'), (12, 7, 'hash')]\"]. force 재실행 또는 수동 진단 필요."} {"timestamp": "2026-05-28T05:17:20.708093+00:00", "level": "INFO", "logger": "app.core.job_manager", "message": "Starting background job: step:4f948193-6809-4ae3-a3c6-2ca4e8af1c1a:dc70c0b3-5c09-4664-8c0f-9cac38c0c6ca:scene_detail (Step scene_detail for dc70c0b3-5c09-4664-8c0f-9cac38c0c6ca)"} INFO: 127.0.0.1:50873 - "POST /api/v1/projects/4f948193-6809-4ae3-a3c6-2ca4e8af1c1a/episodes/dc70c0b3-5c09-4664-8c0f-9cac38c0c6ca/steps/scene_detail?mode=force HTTP/1.1" 200 OK {"timestamp": "2026-05-28T05:17:20.749832+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.entity_sync_service", "message": "Synced 41 entities to DB from checkpoint (upsert); removed 0 stale links"} {"timestamp": "2026-05-28T05:17:20.781667+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced 152 scene_stills (shot-based) to DB"} {"timestamp": "2026-05-28T05:17:20.793519+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced scene_summary from checkpoint"} {"timestamp": "2026-05-28T05:17:20.806090+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced shot_type from scene_cinematography checkpoint (legacy)"} {"timestamp": "2026-05-28T05:17:20.817643+00:00", "level": "WARNING", "logger": "app.core.name_matcher", "message": "name_index collision: key='경찰수사점퍼' kept existing entry, skipped new from raw='경찰수사점퍼'"} {"timestamp": "2026-05-28T05:17:20.819303+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.outlook_sync_service", "message": "Synced 12 outlooks + 13 character-outlook links (Δ +0 / -0)"} {"timestamp": "2026-05-28T05:17:20.827371+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.episode_projection_service", "message": "T2I appearance counts: 0 entities updated, 28 total short_ids found"} {"timestamp": "2026-05-28T05:17:20.828133+00:00", "level": "WARNING", "logger": "app.core.applicability", "message": "_if_planning_doc fallback to False: '_StubRunner' object has no attribute 'db'"} {"timestamp": "2026-05-28T05:17:20.829801+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.orchestrator", "message": "orchestrate_full_sync: all changes committed atomically (episode dc70c0b3, step=-, repaired=0)"} {"timestamp": "2026-05-28T05:17:20.835050+00:00", "level": "INFO", "logger": "app.core.step_runner", "message": "Preserved stale checkpoint for shot_dependency_t2i (consumed by scene_detail) — 파일 보존, DB stale. drift 방지를 위해 scene_detail force 완료 후 shot_dependency_t2i도 재실행 권장"} {"timestamp": "2026-05-28T05:17:20.837452+00:00", "level": "INFO", "logger": "app.core.step_runner", "message": "Invalidated 5 downstream steps from scene_detail (delete_cp=True): ['scene_image_pipeline', 'scene_verify', 'shot_dependency_t2i', 't2i_review', 'world_guide']"} {"timestamp": "2026-05-28T05:17:20.839690+00:00", "level": "INFO", "logger": "app.core.step_runner", "message": "Step scene_detail started (run_id=fc5bafa1-714c-4bd3-820f-043a5628913c, model=gemini-pro)"} {"timestamp": "2026-05-28T05:17:20.842556+00:00", "level": "WARNING", "logger": "app.core.steps.scene_context_loader", "message": "scene_detail: shot_dependency_t2i checkpoint is STALE — 이전 scene_detail 기반 ref_usage를 사용 중. drift 방지를 위해 scene_detail 완료 후 shot_dependency_t2i도 force 재실행 권장."} {"timestamp": "2026-05-28T05:17:20.843869+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "scene_detail: 50 shot_staging entries loaded"} {"timestamp": "2026-05-28T05:17:20.844220+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "scene_detail: 18 scenes with fixed elements loaded"} {"timestamp": "2026-05-28T05:17:20.849089+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "_load_chain_bg_guide_by_shot: 22 shot guides loaded (0 skipped warnings)"} {"timestamp": "2026-05-28T05:17:20.850274+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "_load_chain_bg_camera_meta_by_shot: 22 shots with camera meta loaded (0 skipped warnings)"} {"timestamp": "2026-05-28T05:17:20.850700+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "_load_chain_bg_owned_by_shot: 22 shots mapped from 12 backgrounds"} {"timestamp": "2026-05-28T05:17:20.851041+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "_load_chain_bg_id_by_shot: 22 shots mapped to bg_id from 12 backgrounds"} {"timestamp": "2026-05-28T05:17:20.853135+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "scene_detail: 9 prop term maps loaded for Task 14 namespace reconciliation"} {"timestamp": "2026-05-28T05:17:20.855369+00:00", "level": "INFO", "logger": "app.core.steps.detail_steps", "message": "scene_detail: 30 segments → 50 tasks (shot-based, 0 edited skipped)"} {"timestamp": "2026-05-28T05:17:20.859476+00:00", "level": "INFO", "logger": "app.modules.llm.llm_client", "message": "Opik callback enabled (project: theroad-scene-lab)"} 14:17:20 - LiteLLM Router:INFO: router.py:784 - Routing strategy: simple-shuffle {"timestamp": "2026-05-28T05:17:20.885064+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "Routing strategy: simple-shuffle"} {"timestamp": "2026-05-28T05:17:20.886291+00:00", "level": "INFO", "logger": "app.modules.llm.llm_client", "message": "LiteLLM Router initialized: 8 deployments (1 Gemini keys, OpenAI=True)"} 14:17:20 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:17:20.892373+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:17:20 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:17:20.893688+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:17:20 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:17:20.895107+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:17:20 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:17:20.895963+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:17:20 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:17:20.897012+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:17:49 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:17:49.190879+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:17:49 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:17:49.196392+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} 14:17:49 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:17:49.224611+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} {"timestamp": "2026-05-28T05:17:49.306221+00:00", "level": "ERROR", "logger": "asyncio", "message": "Task was destroyed but it is pending!\ntask: wait_for=>"} 14:17:55 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:17:55.877145+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:17:55 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:17:55.880939+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:17:55.896040+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "scene_detail S1 shot3 variation var_1 frame_spatial_contract phrase diagnostic: {'constraint_id': 'fsc_001', 'label_missing': True, 'zone_missing': False, 'depth_missing': False}"} 14:17:55 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:17:55.911987+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:17:58 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:17:58.271811+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:17:58 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:17:58.273152+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} 14:17:58 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:17:58.304391+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:18:00 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:18:00.159074+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:18:00 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:18:00.159588+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} 14:18:00 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:18:00.174041+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:18:15 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:18:15.199766+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:18:15 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:18:15.202177+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:18:15.225424+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "Scene 2: 제거할 ID: L01 — retry"} 14:18:15 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:18:15.227953+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:18:16 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:18:16.191692+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:18:16 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:18:16.196651+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} 14:18:16 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:18:16.233422+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:18:37 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:18:37.101545+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:18:37 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:18:37.108149+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:18:37.126681+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "scene_detail S6 shot1 variation var_1 frame_spatial_contract phrase diagnostic: {'constraint_id': 'fsc_001', 'label_missing': True, 'zone_missing': False, 'depth_missing': False}"} 14:18:37 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:18:37.134809+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:18:45 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:18:45.260321+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:18:45 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:18:45.262987+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:18:45.285107+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "scene_detail S5 shot7 variation var_1 frame_spatial_contract phrase diagnostic: {'constraint_id': 'fsc_001', 'label_missing': True, 'zone_missing': False, 'depth_missing': False}"} {"timestamp": "2026-05-28T05:18:45.285291+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "씬 5: C05 유효하지 않은 아웃룩 → O05로 교체"} 14:18:45 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:18:45.297101+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:18:45 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:18:45.537918+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:18:45 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:18:45.540290+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:18:45.563632+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "Scene 2: retry 후에도 위반 {'L02'} — 강제 제거"} 14:18:45 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:18:45.581025+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:18:47 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:18:47.360589+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:18:47 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:18:47.366953+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:18:47.389675+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "scene_detail S5 shot1 variation var_1 frame_spatial_contract phrase diagnostic: {'constraint_id': 'fsc_001', 'label_missing': True, 'zone_missing': False, 'depth_missing': False}"} 14:18:47 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:18:47.401764+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:18:50 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:18:50.581607+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:18:50 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:18:50.585875+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} 14:18:50 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:18:50.623804+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:18:52 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:18:52.439827+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:18:52 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:18:52.444770+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} 14:18:52 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:18:52.469547+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:19:01 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:19:01.294942+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:19:01 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:19:01.297927+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} 14:19:01 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:19:01.307659+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:19:08 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:19:08.272493+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:19:08 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:19:08.278321+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} 14:19:08 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:19:08.293034+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:19:15 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:19:15.929939+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:19:15 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:19:15.935395+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} 14:19:15 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:19:15.967526+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:19:19 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:19:19.283345+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:19:19 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:19:19.286401+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:19:19.291651+00:00", "level": "INFO", "logger": "app.core.steps.detail_steps", "message": "scene_detail owned_repair S5_Shot1: owned redraw repair 성공 — 1 redraw_violation 해소"} 14:19:19 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:19:19.301869+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:19:21 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:19:21.228262+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:19:21 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:19:21.230728+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:19:21.242033+00:00", "level": "WARNING", "logger": "app.core.subject_reference_policy", "message": "subject_reference_policy: dropping policy for non-shot-visible subject C09 (visible=[]) render_prompt_card:s10.shot4"} {"timestamp": "2026-05-28T05:19:21.242251+00:00", "level": "WARNING", "logger": "app.core.subject_reference_policy", "message": "subject_reference_policy: dropping policy for non-shot-visible subject C05 (visible=[]) render_prompt_card:s10.shot4"} 14:19:21 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:19:21.256034+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:19:22 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:19:22.096238+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:19:22 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:19:22.102679+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} 14:19:22 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:19:22.142060+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:19:25 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:19:25.005122+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:19:25 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:19:25.010486+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} 14:19:25 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:19:25.049680+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:19:29 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:19:29.100325+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:19:29 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:19:29.103200+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} 14:19:29 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:19:29.143867+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:19:52 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:19:52.582277+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:19:52 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:19:52.585126+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:19:52.609128+00:00", "level": "WARNING", "logger": "app.core.subject_reference_policy", "message": "subject_reference_policy: dropping policy for non-shot-visible subject C09 (visible=[]) render_prompt_card:s10.shot4"} {"timestamp": "2026-05-28T05:19:52.609302+00:00", "level": "WARNING", "logger": "app.core.subject_reference_policy", "message": "subject_reference_policy: dropping policy for non-shot-visible subject C05 (visible=[]) render_prompt_card:s10.shot4"} 14:19:52 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:19:52.626123+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:19:53 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:19:53.097274+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:19:53 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:19:53.099522+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:19:53.114699+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "scene_detail S11 shot1 variation var_1 frame_spatial_contract phrase diagnostic: {'constraint_id': 'fsc_002', 'label_missing': True, 'zone_missing': False, 'depth_missing': False}"} 14:19:53 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:19:53.132379+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:20:00 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:20:00.028503+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:20:00 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:20:00.035246+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:20:00.056222+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "씬 10: C09 유효하지 않은 아웃룩 → O09로 교체"} 14:20:00 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:20:00.075013+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:20:01 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:20:01.900709+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:20:01 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:20:01.902406+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} 14:20:01 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:20:01.939117+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:20:07 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:20:07.851888+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:20:07 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:20:07.852993+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} 14:20:07 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:20:07.873756+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:20:14 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:20:14.111925+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:20:14 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:20:14.113826+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} 14:20:14 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:20:14.127617+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:20:20 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:20:20.914358+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:20:20 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:20:20.916830+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} 14:20:20 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:20:20.923721+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:20:27 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:20:27.621303+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:20:27 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:20:27.623191+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} 14:20:27 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:20:27.657669+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:20:29 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:20:29.171383+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:20:29 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:20:29.173851+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} 14:20:29 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:20:29.188274+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:20:36 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:20:36.598461+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:20:36 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:20:36.602773+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:20:36.611524+00:00", "level": "INFO", "logger": "app.core.steps.detail_steps", "message": "scene_detail owned_repair S12_Shot7: owned redraw repair 성공 — 1 redraw_violation 해소"} 14:20:36 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:20:36.626786+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:20:41 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:20:41.561065+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:20:41 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:20:41.567405+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:20:41.588157+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "씬 12: C05 유효하지 않은 아웃룩 → O05로 교체"} 14:20:41 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:20:41.600067+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:20:42 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:20:42.911037+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:20:42 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:20:42.916912+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:20:42.936862+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "Scene 13: 제거할 ID: L01 — retry"} 14:20:42 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:20:42.939169+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:20:48 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:20:48.870860+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:20:48 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:20:48.873159+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} 14:20:48 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:20:48.903056+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:20:51 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:20:51.914857+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:20:51 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:20:51.918108+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} 14:20:51 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:20:51.929322+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:20:56 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:20:56.830455+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:20:56 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:20:56.832276+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:20:56.840437+00:00", "level": "WARNING", "logger": "app.core.frame_spatial_contract", "message": "frame_spatial_contract: dropping constraint for non-shot-visible character target C02 (visible=['C01', 'L11'])"} 14:20:56 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:20:56.852464+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:20:59 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:20:59.046197+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:20:59 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:20:59.047819+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} 14:20:59 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:20:59.055240+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:21:02 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:21:02.837551+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:21:02 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:21:02.840219+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} 14:21:02 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:21:02.876544+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:21:04 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:21:04.600862+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:21:04 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:21:04.602696+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:21:04.607916+00:00", "level": "INFO", "logger": "app.core.steps.detail_steps", "message": "scene_detail owned_repair S12_Shot11: owned redraw repair 성공 — 2 redraw_violation 해소"} 14:21:04 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:21:04.620834+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:21:08 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:21:08.748526+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:21:08 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:21:08.750962+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} 14:21:08 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:21:08.788223+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:21:08 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:21:08.917919+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:21:08 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:21:08.920123+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} 14:21:08 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:21:08.942513+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:21:35 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:21:35.644898+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:21:35 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:21:35.651274+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:21:35.669823+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "scene_detail S13 shot5 variation var_1 frame_spatial_contract phrase diagnostic: {'constraint_id': 'fsc_001', 'label_missing': True, 'zone_missing': False, 'depth_missing': False}"} {"timestamp": "2026-05-28T05:21:35.680380+00:00", "level": "WARNING", "logger": "app.core.frame_spatial_contract", "message": "frame_spatial_contract: dropping constraint for non-shot-visible prop target P02 (visible=['C01', 'C05'])"} 14:21:35 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:21:35.689564+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:21:37 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:21:37.084034+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:21:37 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:21:37.089620+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:21:37.120792+00:00", "level": "WARNING", "logger": "app.core.frame_spatial_contract", "message": "frame_spatial_contract: dropping constraint for non-shot-visible character target C06 (visible=['C01', 'L10'])"} {"timestamp": "2026-05-28T05:21:37.120958+00:00", "level": "WARNING", "logger": "app.core.subject_reference_policy", "message": "subject_reference_policy: dropping policy for non-shot-visible subject C06 (visible=['C01']) render_prompt_card:s19.shot3"} 14:21:37 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:21:37.129771+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:21:50 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:21:50.890968+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:21:50 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:21:50.892775+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:21:50.916431+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "scene_detail S15 shot4 variation var_1 frame_spatial_contract phrase diagnostic: {'constraint_id': 'fsc_002', 'label_missing': True, 'zone_missing': False, 'depth_missing': False}"} {"timestamp": "2026-05-28T05:21:50.916811+00:00", "level": "WARNING", "logger": "app.core.frame_spatial_contract", "message": "frame_spatial_contract: dropping constraint for non-shot-visible character target C02 (visible=['C01', 'L11'])"} 14:21:50 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:21:50.935526+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:22:01 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:22:01.041527+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:22:01 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:22:01.048030+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:22:01.069716+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "scene_detail S16 shot3 variation var_1 frame_spatial_contract phrase diagnostic: {'constraint_id': 'fsc_001', 'label_missing': True, 'zone_missing': False, 'depth_missing': False}"} 14:22:01 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:22:01.080909+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:22:07 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:22:07.190028+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:22:07 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:22:07.195446+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:22:07.214726+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "scene_detail S18 shot8 variation var_1 frame_spatial_contract phrase diagnostic: {'constraint_id': 'fsc_001', 'label_missing': True, 'zone_missing': False, 'depth_missing': False}"} {"timestamp": "2026-05-28T05:22:07.214943+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "scene_detail S18 shot8 variation var_1 frame_spatial_contract phrase diagnostic: {'constraint_id': 'fsc_002', 'label_missing': True, 'zone_missing': False, 'depth_missing': False}"} 14:22:07 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:22:07.226063+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:22:10 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:22:10.472237+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:22:10 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:22:10.474506+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} 14:22:10 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:22:10.496363+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:22:10 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:22:10.787166+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:22:10 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:22:10.789549+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:22:10.806138+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "scene_detail S19 shot3 variation var_1 frame_spatial_contract phrase diagnostic: {'constraint_id': 'fsc_002', 'label_missing': True, 'zone_missing': False, 'depth_missing': False}"} {"timestamp": "2026-05-28T05:22:10.806469+00:00", "level": "WARNING", "logger": "app.core.frame_spatial_contract", "message": "frame_spatial_contract: dropping constraint for non-shot-visible character target C06 (visible=['C01', 'L10'])"} {"timestamp": "2026-05-28T05:22:10.806585+00:00", "level": "WARNING", "logger": "app.core.subject_reference_policy", "message": "subject_reference_policy: dropping policy for non-shot-visible subject C06 (visible=['C01']) render_prompt_card:s19.shot3"} 14:22:10 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:22:10.817722+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:22:14 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:22:14.708017+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:22:14 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:22:14.711660+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} 14:22:14 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:22:14.734823+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:22:17 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:22:17.503674+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:22:17 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:22:17.507987+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} 14:22:17 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:22:17.532828+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:22:22 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:22:22.721148+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:22:22 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:22:22.727260+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:22:22.749147+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "Scene 19: 제거할 ID: L09 — retry"} 14:22:22 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:22:22.751530+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:22:31 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:22:31.489856+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:22:31 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:22:31.496290+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:22:31.515484+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "Scene 18: 제거할 ID: L01 — retry"} 14:22:31 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:22:31.517592+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:22:35 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:22:35.295843+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:22:35 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:22:35.296973+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:22:35.310682+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "Scene 20: 제거할 ID: L01 — retry"} 14:22:35 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:22:35.312253+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:22:55 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:22:55.091190+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:22:55 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:22:55.093837+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:22:55.118901+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "Scene 21: 제거할 ID: L01 — retry"} 14:22:55 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:22:55.121591+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:22:55 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:22:55.291456+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:22:55 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:22:55.293857+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:22:55.312099+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "Scene 19: retry 후에도 위반 {'L01'} — 강제 제거"} 14:22:55 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:22:55.322723+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:23:00 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:23:00.172248+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:23:00 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:23:00.178288+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} 14:23:00 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:23:00.218771+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:23:06 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:23:06.804012+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:23:06 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:23:06.809605+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} 14:23:06 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:23:06.836650+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:23:18 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:23:18.776227+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:23:18 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:23:18.778564+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} 14:23:18 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:23:18.786257+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:23:24 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:23:24.761972+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:23:24 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:23:24.766075+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:23:24.783293+00:00", "level": "WARNING", "logger": "app.core.frame_spatial_contract", "message": "frame_spatial_contract: dropping constraint for non-shot-visible prop target P02 (visible=['C01', 'C05'])"} 14:23:24 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:23:24.798628+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:23:30 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:23:30.626893+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:23:30 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:23:30.628220+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} 14:23:30 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:23:30.639314+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:23:30 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:23:30.642704+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:23:30.660075+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "scene_detail S22 shot2 variation var_1 frame_spatial_contract phrase diagnostic: {'constraint_id': 'fsc_002', 'label_missing': True, 'zone_missing': False, 'depth_missing': False}"} 14:23:30 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:23:30.677408+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:23:30 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:23:30.680659+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:23:31 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:23:31.364671+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:23:31 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:23:31.370194+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:23:31.391081+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "Scene 21: retry 후에도 위반 {'L13'} — 강제 제거"} 14:23:31 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:23:31.409866+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:23:41 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:23:41.077028+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:23:41 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:23:41.081093+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:23:41.089749+00:00", "level": "INFO", "logger": "app.core.steps.detail_steps", "message": "scene_detail owned_repair S21_Shot8: owned redraw repair 성공 — 1 redraw_violation 해소"} 14:23:41 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:23:41.104391+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:23:45 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:23:45.294026+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:23:45 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:23:45.295760+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:23:45.311987+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "씬 23: C01 유효하지 않은 아웃룩 → O01로 교체"} 14:23:45 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:23:45.327056+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:23:55 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:23:55.157603+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:23:55 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:23:55.164161+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:23:55.185230+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "Scene 24: 제거할 ID: L01 — retry"} 14:23:55 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:23:55.187486+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:23:57 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:23:57.263290+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:23:57 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:23:57.268397+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:23:57.288466+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "scene_detail S25 shot3 variation var_1 frame_spatial_contract phrase diagnostic: {'constraint_id': 'fsc_001', 'label_missing': True, 'zone_missing': False, 'depth_missing': False}"} 14:23:57 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:23:57.307466+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:24:21 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:24:21.703111+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:24:21 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:24:21.705866+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:24:21.729145+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "Scene 26: 제거할 ID: L01 — retry"} 14:24:21 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:24:21.731404+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:24:22 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:24:22.125993+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:24:22 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:24:22.131952+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:24:22.154014+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "scene_detail S26 shot5 variation var_1 frame_spatial_contract phrase diagnostic: {'constraint_id': 'fsc_001', 'label_missing': True, 'zone_missing': False, 'depth_missing': False}"} {"timestamp": "2026-05-28T05:24:22.154173+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "scene_detail S26 shot5 variation var_1 frame_spatial_contract phrase diagnostic: {'constraint_id': 'fsc_002', 'label_missing': True, 'zone_missing': False, 'depth_missing': False}"} {"timestamp": "2026-05-28T05:24:22.154258+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "scene_detail S26 shot5 variation var_1 frame_spatial_contract phrase diagnostic: {'constraint_id': 'fsc_003', 'label_missing': True, 'zone_missing': False, 'depth_missing': False}"} 14:24:22 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:24:22.172163+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:24:24 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:24:24.628150+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:24:24 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:24:24.630015+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:24:24.657332+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "Scene 24: retry 후에도 위반 {'L02'} — 강제 제거"} 14:24:24 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:24:24.674008+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:24:33 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:24:33.209990+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:24:33 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:24:33.216120+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} 14:24:33 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:24:33.248051+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:24:35 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:24:35.653792+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:24:35 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:24:35.658305+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:24:35.680891+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "scene_detail S25 shot7 variation var_1 frame_spatial_contract phrase diagnostic: {'constraint_id': 'fsc_001', 'label_missing': True, 'zone_missing': False, 'depth_missing': False}"} {"timestamp": "2026-05-28T05:24:35.681112+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "scene_detail S25 shot7 variation var_1 frame_spatial_contract phrase diagnostic: {'constraint_id': 'fsc_002', 'label_missing': True, 'zone_missing': False, 'depth_missing': False}"} 14:24:35 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:24:35.693208+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:24:40 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:24:40.539491+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:24:40 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:24:40.541560+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} 14:24:40 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:24:40.564585+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:24:41 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:24:41.356392+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:24:41 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:24:41.358061+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:24:41.360793+00:00", "level": "WARNING", "logger": "app.modules.llm.llm_client", "message": "call_structured[scene_detail] Tier 1 failed (LLM returned empty response for step=scene_detail, model=gemini-pro), trying sanitized input"} 14:24:41 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:24:41.374474+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:24:42 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:24:42.193281+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:24:42 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:24:42.198011+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:24:42.199099+00:00", "level": "WARNING", "logger": "app.modules.llm.llm_client", "message": "call_structured[scene_detail] Tier 2 sanitized failed (LLM returned empty response for step=scene_detail, model=gemini-pro), trying GPT fallback"} 14:24:42 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:24:42.203943+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:24:44 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:24:44.893582+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:24:44 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:24:44.899106+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} 14:24:44 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:24:44.922914+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:24:45 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:24:45.835135+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:24:45 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:24:45.840600+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:24:45.841824+00:00", "level": "WARNING", "logger": "app.modules.llm.llm_client", "message": "call_structured[scene_detail] Tier 1 failed (LLM returned empty response for step=scene_detail, model=gemini-pro), trying sanitized input"} 14:24:45 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:24:45.857894+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:24:46 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:24:46.675193+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:24:46 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:24:46.677385+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:24:46.677880+00:00", "level": "WARNING", "logger": "app.modules.llm.llm_client", "message": "call_structured[scene_detail] Tier 2 sanitized failed (LLM returned empty response for step=scene_detail, model=gemini-pro), trying GPT fallback"} 14:24:46 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:24:46.679559+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:24:47 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:24:47.936556+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:24:47 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:24:47.941812+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} 14:24:47 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:24:47.980252+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:24:55 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:24:55.253214+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:24:55 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:24:55.257288+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:24:55.276883+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "Scene 28: 제거할 ID: L01 — retry"} 14:24:55 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:24:55.278922+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:25:00 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:25:00.062436+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:25:00 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:25:00.068837+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:25:00.090430+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "Scene 26: retry 후에도 위반 {'L02'} — 강제 제거"} 14:25:00 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:25:00.108200+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:25:20 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:25:20.442238+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:25:20 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:25:20.448333+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} 14:25:20 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:25:20.483866+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:25:28 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:25:28.338208+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:25:28 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:25:28.342122+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:25:28.361071+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "Scene 28: retry 후에도 위반 {'L02'} — 강제 제거"} {"timestamp": "2026-05-28T05:25:28.361237+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "scene_detail S28 shot5 variation var_1 frame_spatial_contract phrase diagnostic: {'constraint_id': 'fsc_001', 'label_missing': True, 'zone_missing': False, 'depth_missing': False}"} 14:25:29 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:25:29.596954+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:25:29 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:25:29.600177+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:25:29.620831+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "Scene 29: 제거할 ID: L01 — retry"} 14:25:29 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:25:29.621940+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:25:47 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:25:47.991438+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:25:47 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:25:47.996657+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} 14:26:11 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:26:11.223689+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:26:11 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:26:11.226338+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:26:11.244867+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "scene_detail S29 shot1 variation var_1 frame_spatial_contract phrase diagnostic: {'constraint_id': 'fsc_002', 'label_missing': True, 'zone_missing': False, 'depth_missing': False}"} {"timestamp": "2026-05-28T05:26:11.244978+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "scene_detail S29 shot1 variation var_1 frame_spatial_contract phrase diagnostic: {'constraint_id': 'fsc_003', 'label_missing': True, 'zone_missing': False, 'depth_missing': False}"} 14:26:11 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:26:11.252192+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:26:19 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:26:19.070257+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:26:19 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:26:19.075783+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:26:19.095252+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "Scene 29: 제거할 ID: L20 — retry"} 14:26:19 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini {"timestamp": "2026-05-28T05:26:19.097375+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.1-pro-preview; provider = gemini"} 14:26:19 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:26:19.538828+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:26:19 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:26:19.539852+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:26:19.560654+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "Scene 29: retry 후에도 위반 {'L20'} — 강제 제거"} {"timestamp": "2026-05-28T05:26:19.560877+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "scene_detail S29 shot8 variation var_1 frame_spatial_contract phrase diagnostic: {'constraint_id': 'fsc_001', 'label_missing': True, 'zone_missing': False, 'depth_missing': False}"} {"timestamp": "2026-05-28T05:26:19.560982+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "scene_detail S29 shot8 variation var_1 frame_spatial_contract phrase diagnostic: {'constraint_id': 'fsc_002', 'label_missing': True, 'zone_missing': False, 'depth_missing': False}"} 14:26:21 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:26:21.725409+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:26:21 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:26:21.729388+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} 14:26:56 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:26:56.572200+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:26:56 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.1-pro-preview) 200 OK {"timestamp": "2026-05-28T05:26:56.577394+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.1-pro-preview)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:26:56.597187+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "Scene 29: retry 후에도 위반 {'L01'} — 강제 제거"} {"timestamp": "2026-05-28T05:26:56.597442+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "scene_detail S29 shot4 variation var_1 frame_spatial_contract phrase diagnostic: {'constraint_id': 'fsc_001', 'label_missing': True, 'zone_missing': False, 'depth_missing': False}"} {"timestamp": "2026-05-28T05:26:56.597534+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "scene_detail S29 shot4 variation var_1 frame_spatial_contract phrase diagnostic: {'constraint_id': 'fsc_002', 'label_missing': True, 'zone_missing': False, 'depth_missing': False}"} {"timestamp": "2026-05-28T05:26:56.597621+00:00", "level": "WARNING", "logger": "app.core.steps.detail_steps", "message": "씬 29: C01 유효하지 않은 아웃룩 → O01로 교체"} {"timestamp": "2026-05-28T05:26:56.610356+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "_load_chain_bg_owned_by_shot: 22 shots mapped from 12 backgrounds"} {"timestamp": "2026-05-28T05:26:56.612023+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "scene_detail: 50 shot_staging entries loaded"} {"timestamp": "2026-05-28T05:26:56.617955+00:00", "level": "WARNING", "logger": "app.core.steps.scene_context_loader", "message": "scene_detail: shot_dependency_t2i checkpoint is STALE — 이전 scene_detail 기반 ref_usage를 사용 중. drift 방지를 위해 scene_detail 완료 후 shot_dependency_t2i도 force 재실행 권장."} {"timestamp": "2026-05-28T05:26:56.620586+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "scene_detail: 50 shot_staging entries loaded"} {"timestamp": "2026-05-28T05:26:56.621634+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "scene_detail: 18 scenes with fixed elements loaded"} {"timestamp": "2026-05-28T05:26:56.636618+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "_load_chain_bg_guide_by_shot: 22 shot guides loaded (0 skipped warnings)"} {"timestamp": "2026-05-28T05:26:56.638545+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "_load_chain_bg_camera_meta_by_shot: 22 shots with camera meta loaded (0 skipped warnings)"} {"timestamp": "2026-05-28T05:26:56.639187+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "_load_chain_bg_owned_by_shot: 22 shots mapped from 12 backgrounds"} {"timestamp": "2026-05-28T05:26:56.639692+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "_load_chain_bg_id_by_shot: 22 shots mapped to bg_id from 12 backgrounds"} {"timestamp": "2026-05-28T05:26:56.646382+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "scene_detail: 9 prop term maps loaded for Task 14 namespace reconciliation"} {"timestamp": "2026-05-28T05:26:56.704165+00:00", "level": "WARNING", "logger": "app.core.subject_reference_policy", "message": "subject_reference_policy: dropping policy for non-shot-visible subject C09 (visible=[]) render_prompt_card:s10.shot4"} {"timestamp": "2026-05-28T05:26:56.704197+00:00", "level": "WARNING", "logger": "app.core.subject_reference_policy", "message": "subject_reference_policy: dropping policy for non-shot-visible subject C05 (visible=[]) render_prompt_card:s10.shot4"} {"timestamp": "2026-05-28T05:26:56.735959+00:00", "level": "WARNING", "logger": "app.core.frame_spatial_contract", "message": "frame_spatial_contract: dropping constraint for non-shot-visible character target C02 (visible=['C01', 'L11'])"} {"timestamp": "2026-05-28T05:26:56.748753+00:00", "level": "WARNING", "logger": "app.core.frame_spatial_contract", "message": "frame_spatial_contract: dropping constraint for non-shot-visible prop target P02 (visible=['C01', 'C05'])"} {"timestamp": "2026-05-28T05:26:56.751932+00:00", "level": "WARNING", "logger": "app.core.frame_spatial_contract", "message": "frame_spatial_contract: dropping constraint for non-shot-visible character target C06 (visible=['C01', 'L10'])"} {"timestamp": "2026-05-28T05:26:56.751972+00:00", "level": "WARNING", "logger": "app.core.subject_reference_policy", "message": "subject_reference_policy: dropping policy for non-shot-visible subject C06 (visible=['C01']) render_prompt_card:s19.shot3"} {"timestamp": "2026-05-28T05:26:56.841173+00:00", "level": "INFO", "logger": "app.core.step_runner", "message": "Step scene_detail completed (completed=50/50, failed=0)"} {"timestamp": "2026-05-28T05:26:56.872147+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.entity_sync_service", "message": "Synced 41 entities to DB from checkpoint (upsert); removed 0 stale links"} {"timestamp": "2026-05-28T05:26:56.915095+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced 152 scene_stills (shot-based) to DB"} {"timestamp": "2026-05-28T05:26:56.926955+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced scene_summary from checkpoint"} {"timestamp": "2026-05-28T05:26:56.939617+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced shot_type from scene_cinematography checkpoint (legacy)"} {"timestamp": "2026-05-28T05:26:56.948524+00:00", "level": "WARNING", "logger": "app.core.name_matcher", "message": "name_index collision: key='경찰수사점퍼' kept existing entry, skipped new from raw='경찰수사점퍼'"} {"timestamp": "2026-05-28T05:26:56.949748+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.outlook_sync_service", "message": "Synced 12 outlooks + 13 character-outlook links (Δ +0 / -0)"} {"timestamp": "2026-05-28T05:26:56.957438+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.episode_projection_service", "message": "T2I appearance counts: 8 entities updated, 29 total short_ids found"} {"timestamp": "2026-05-28T05:26:56.960067+00:00", "level": "WARNING", "logger": "app.core.applicability", "message": "_if_planning_doc fallback to False: '_StubRunner' object has no attribute 'db'"} {"timestamp": "2026-05-28T05:26:56.960644+00:00", "level": "WARNING", "logger": "app.services.checkpoint_sync.episode_projection_service", "message": "Episode dc70c0b3-5c09-4664-8c0f-9cac38c0c6ca status NOT advanced — incomplete steps: ['shot_dependency_t2i', 't2i_review']"} {"timestamp": "2026-05-28T05:26:56.961938+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.orchestrator", "message": "orchestrate_full_sync: all changes committed atomically (episode dc70c0b3, step=scene_detail, repaired=0)"} {"timestamp": "2026-05-28T05:27:29.587249+00:00", "level": "INFO", "logger": "app.core.job_manager", "message": "Starting background job: run_all:4f948193-6809-4ae3-a3c6-2ca4e8af1c1a:dc70c0b3-5c09-4664-8c0f-9cac38c0c6ca:all (Run all all steps for dc70c0b3-5c09-4664-8c0f-9cac38c0c6ca)"} INFO: 127.0.0.1:51267 - "POST /api/v1/projects/4f948193-6809-4ae3-a3c6-2ca4e8af1c1a/episodes/dc70c0b3-5c09-4664-8c0f-9cac38c0c6ca/steps/run-all?mode=resume&category=all&approve_image_generation=true&image_call_cap=60 HTTP/1.1" 200 OK {"timestamp": "2026-05-28T05:27:29.590617+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step planning_doc_analysis: skipped"} {"timestamp": "2026-05-28T05:27:29.591400+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step text_cleanup: skipped"} {"timestamp": "2026-05-28T05:27:29.592364+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step scene_segmentation: skipped"} {"timestamp": "2026-05-28T05:27:29.592943+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step episode_summary: skipped"} {"timestamp": "2026-05-28T05:27:29.593647+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step visual_world_rules: skipped"} {"timestamp": "2026-05-28T05:27:29.594436+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step scene_save: skipped"} {"timestamp": "2026-05-28T05:27:29.595598+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step entity_character_list: skipped"} {"timestamp": "2026-05-28T05:27:29.596833+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step scene_summary: skipped"} {"timestamp": "2026-05-28T05:27:29.598330+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step beat_extract: skipped"} {"timestamp": "2026-05-28T05:27:29.600034+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step shot_extract: skipped"} {"timestamp": "2026-05-28T05:27:29.601139+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step shot_validator: skipped"} {"timestamp": "2026-05-28T05:27:29.602587+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step entity_all_character: skipped"} {"timestamp": "2026-05-28T05:27:29.603481+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step entity_extract_character: skipped"} {"timestamp": "2026-05-28T05:27:29.604997+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step entity_all_location: skipped"} {"timestamp": "2026-05-28T05:27:29.606014+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step entity_extract_location: skipped"} {"timestamp": "2026-05-28T05:27:29.607113+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step entity_all_prop: skipped"} {"timestamp": "2026-05-28T05:27:29.607967+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step entity_extract_prop: skipped"} {"timestamp": "2026-05-28T05:27:29.609981+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step entity_merge: skipped"} {"timestamp": "2026-05-28T05:27:29.610615+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step entity_relation: skipped"} {"timestamp": "2026-05-28T05:27:29.611513+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step entity_filter: skipped"} {"timestamp": "2026-05-28T05:27:29.612504+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step entity_detail: skipped"} {"timestamp": "2026-05-28T05:27:29.613666+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step entity_t2i: skipped"} {"timestamp": "2026-05-28T05:27:29.614576+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step shot_selection: skipped"} {"timestamp": "2026-05-28T05:27:29.637729+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.entity_sync_service", "message": "Synced 41 entities to DB from checkpoint (upsert); removed 0 stale links"} {"timestamp": "2026-05-28T05:27:29.668522+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced 152 scene_stills (shot-based) to DB"} {"timestamp": "2026-05-28T05:27:29.682769+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced scene_summary from checkpoint"} {"timestamp": "2026-05-28T05:27:29.697251+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced shot_type from scene_cinematography checkpoint (legacy)"} {"timestamp": "2026-05-28T05:27:29.708626+00:00", "level": "WARNING", "logger": "app.core.name_matcher", "message": "name_index collision: key='경찰수사점퍼' kept existing entry, skipped new from raw='경찰수사점퍼'"} {"timestamp": "2026-05-28T05:27:29.709820+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.outlook_sync_service", "message": "Synced 12 outlooks + 13 character-outlook links (Δ +0 / -0)"} {"timestamp": "2026-05-28T05:27:29.716894+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.episode_projection_service", "message": "T2I appearance counts: 0 entities updated, 29 total short_ids found"} {"timestamp": "2026-05-28T05:27:29.717592+00:00", "level": "WARNING", "logger": "app.core.applicability", "message": "_if_planning_doc fallback to False: '_StubRunner' object has no attribute 'db'"} {"timestamp": "2026-05-28T05:27:29.718214+00:00", "level": "WARNING", "logger": "app.services.checkpoint_sync.episode_projection_service", "message": "Episode dc70c0b3-5c09-4664-8c0f-9cac38c0c6ca status NOT advanced — incomplete steps: ['shot_dependency_t2i', 't2i_review']"} {"timestamp": "2026-05-28T05:27:29.719203+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.orchestrator", "message": "orchestrate_full_sync: all changes committed atomically (episode dc70c0b3, step=-, repaired=0)"} {"timestamp": "2026-05-28T05:27:29.720817+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step scene_director: skipped"} {"timestamp": "2026-05-28T05:27:29.722356+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step shot_director: skipped"} {"timestamp": "2026-05-28T05:27:29.724528+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step scene_camera_flow: skipped"} {"timestamp": "2026-05-28T05:27:29.725544+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step shot_dependency: skipped"} {"timestamp": "2026-05-28T05:27:29.746974+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.entity_sync_service", "message": "Synced 41 entities to DB from checkpoint (upsert); removed 0 stale links"} {"timestamp": "2026-05-28T05:27:29.776438+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced 152 scene_stills (shot-based) to DB"} {"timestamp": "2026-05-28T05:27:29.792709+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced scene_summary from checkpoint"} {"timestamp": "2026-05-28T05:27:29.807080+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced shot_type from scene_cinematography checkpoint (legacy)"} {"timestamp": "2026-05-28T05:27:29.817958+00:00", "level": "WARNING", "logger": "app.core.name_matcher", "message": "name_index collision: key='경찰수사점퍼' kept existing entry, skipped new from raw='경찰수사점퍼'"} {"timestamp": "2026-05-28T05:27:29.819194+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.outlook_sync_service", "message": "Synced 12 outlooks + 13 character-outlook links (Δ +0 / -0)"} {"timestamp": "2026-05-28T05:27:29.827223+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.episode_projection_service", "message": "T2I appearance counts: 0 entities updated, 29 total short_ids found"} {"timestamp": "2026-05-28T05:27:29.827821+00:00", "level": "WARNING", "logger": "app.core.applicability", "message": "_if_planning_doc fallback to False: '_StubRunner' object has no attribute 'db'"} {"timestamp": "2026-05-28T05:27:29.828363+00:00", "level": "WARNING", "logger": "app.services.checkpoint_sync.episode_projection_service", "message": "Episode dc70c0b3-5c09-4664-8c0f-9cac38c0c6ca status NOT advanced — incomplete steps: ['shot_dependency_t2i', 't2i_review']"} {"timestamp": "2026-05-28T05:27:29.829167+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.orchestrator", "message": "orchestrate_full_sync: all changes committed atomically (episode dc70c0b3, step=-, repaired=0)"} {"timestamp": "2026-05-28T05:27:29.830727+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step outlook_phase1: skipped"} {"timestamp": "2026-05-28T05:27:29.852523+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.entity_sync_service", "message": "Synced 41 entities to DB from checkpoint (upsert); removed 0 stale links"} {"timestamp": "2026-05-28T05:27:29.881484+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced 152 scene_stills (shot-based) to DB"} {"timestamp": "2026-05-28T05:27:29.896252+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced scene_summary from checkpoint"} {"timestamp": "2026-05-28T05:27:29.911143+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced shot_type from scene_cinematography checkpoint (legacy)"} {"timestamp": "2026-05-28T05:27:29.922552+00:00", "level": "WARNING", "logger": "app.core.name_matcher", "message": "name_index collision: key='경찰수사점퍼' kept existing entry, skipped new from raw='경찰수사점퍼'"} {"timestamp": "2026-05-28T05:27:29.923823+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.outlook_sync_service", "message": "Synced 12 outlooks + 13 character-outlook links (Δ +0 / -0)"} {"timestamp": "2026-05-28T05:27:29.930936+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.episode_projection_service", "message": "T2I appearance counts: 0 entities updated, 29 total short_ids found"} {"timestamp": "2026-05-28T05:27:29.931645+00:00", "level": "WARNING", "logger": "app.core.applicability", "message": "_if_planning_doc fallback to False: '_StubRunner' object has no attribute 'db'"} {"timestamp": "2026-05-28T05:27:29.932270+00:00", "level": "WARNING", "logger": "app.services.checkpoint_sync.episode_projection_service", "message": "Episode dc70c0b3-5c09-4664-8c0f-9cac38c0c6ca status NOT advanced — incomplete steps: ['shot_dependency_t2i', 't2i_review']"} {"timestamp": "2026-05-28T05:27:29.933168+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.orchestrator", "message": "orchestrate_full_sync: all changes committed atomically (episode dc70c0b3, step=-, repaired=0)"} {"timestamp": "2026-05-28T05:27:29.934715+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step outlook_phase2: skipped"} {"timestamp": "2026-05-28T05:27:29.956295+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.entity_sync_service", "message": "Synced 41 entities to DB from checkpoint (upsert); removed 0 stale links"} {"timestamp": "2026-05-28T05:27:29.985075+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced 152 scene_stills (shot-based) to DB"} {"timestamp": "2026-05-28T05:27:30.001219+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced scene_summary from checkpoint"} {"timestamp": "2026-05-28T05:27:30.017580+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced shot_type from scene_cinematography checkpoint (legacy)"} {"timestamp": "2026-05-28T05:27:30.027649+00:00", "level": "WARNING", "logger": "app.core.name_matcher", "message": "name_index collision: key='경찰수사점퍼' kept existing entry, skipped new from raw='경찰수사점퍼'"} {"timestamp": "2026-05-28T05:27:30.028760+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.outlook_sync_service", "message": "Synced 12 outlooks + 13 character-outlook links (Δ +0 / -0)"} {"timestamp": "2026-05-28T05:27:30.035428+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.episode_projection_service", "message": "T2I appearance counts: 0 entities updated, 29 total short_ids found"} {"timestamp": "2026-05-28T05:27:30.036075+00:00", "level": "WARNING", "logger": "app.core.applicability", "message": "_if_planning_doc fallback to False: '_StubRunner' object has no attribute 'db'"} {"timestamp": "2026-05-28T05:27:30.036667+00:00", "level": "WARNING", "logger": "app.services.checkpoint_sync.episode_projection_service", "message": "Episode dc70c0b3-5c09-4664-8c0f-9cac38c0c6ca status NOT advanced — incomplete steps: ['shot_dependency_t2i', 't2i_review']"} {"timestamp": "2026-05-28T05:27:30.037640+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.orchestrator", "message": "orchestrate_full_sync: all changes committed atomically (episode dc70c0b3, step=-, repaired=0)"} {"timestamp": "2026-05-28T05:27:30.039043+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step outlook_phase3: skipped"} {"timestamp": "2026-05-28T05:27:30.041248+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step shot_staging: skipped"} {"timestamp": "2026-05-28T05:27:30.043696+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step background_classify: skipped"} {"timestamp": "2026-05-28T05:27:30.045722+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step background_master_plan: skipped"} {"timestamp": "2026-05-28T05:27:30.047916+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step floor_plan_prompt: skipped"} {"timestamp": "2026-05-28T05:27:30.050040+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step shot_essence_extraction: not_applicable"} {"timestamp": "2026-05-28T05:27:30.053427+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step scene_consistency: skipped"} {"timestamp": "2026-05-28T05:27:30.056821+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step floor_plan_render: skipped"} {"timestamp": "2026-05-28T05:27:30.058497+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step floor_plan_overlay_payload: skipped"} {"timestamp": "2026-05-28T05:27:30.060457+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step base_location_dossier: skipped"} {"timestamp": "2026-05-28T05:27:30.062507+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step floor_plan_geometry_readback: skipped"} {"timestamp": "2026-05-28T05:27:30.064561+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step shot_aware_bg_render_plan: skipped"} {"timestamp": "2026-05-28T05:27:30.066726+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step background_prompt: skipped"} {"timestamp": "2026-05-28T05:27:30.068279+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step episode_reference_policy: skipped"} {"timestamp": "2026-05-28T05:27:30.089458+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.entity_sync_service", "message": "Synced 41 entities to DB from checkpoint (upsert); removed 0 stale links"} {"timestamp": "2026-05-28T05:27:30.119328+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced 152 scene_stills (shot-based) to DB"} {"timestamp": "2026-05-28T05:27:30.131363+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced scene_summary from checkpoint"} {"timestamp": "2026-05-28T05:27:30.143634+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced shot_type from scene_cinematography checkpoint (legacy)"} {"timestamp": "2026-05-28T05:27:30.154367+00:00", "level": "WARNING", "logger": "app.core.name_matcher", "message": "name_index collision: key='경찰수사점퍼' kept existing entry, skipped new from raw='경찰수사점퍼'"} {"timestamp": "2026-05-28T05:27:30.155571+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.outlook_sync_service", "message": "Synced 12 outlooks + 13 character-outlook links (Δ +0 / -0)"} {"timestamp": "2026-05-28T05:27:30.162499+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.episode_projection_service", "message": "T2I appearance counts: 0 entities updated, 29 total short_ids found"} {"timestamp": "2026-05-28T05:27:30.163100+00:00", "level": "WARNING", "logger": "app.core.applicability", "message": "_if_planning_doc fallback to False: '_StubRunner' object has no attribute 'db'"} {"timestamp": "2026-05-28T05:27:30.163669+00:00", "level": "WARNING", "logger": "app.services.checkpoint_sync.episode_projection_service", "message": "Episode dc70c0b3-5c09-4664-8c0f-9cac38c0c6ca status NOT advanced — incomplete steps: ['shot_dependency_t2i', 't2i_review']"} {"timestamp": "2026-05-28T05:27:30.164554+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.orchestrator", "message": "orchestrate_full_sync: all changes committed atomically (episode dc70c0b3, step=-, repaired=0)"} {"timestamp": "2026-05-28T05:27:30.183056+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "_load_chain_bg_owned_by_shot: 22 shots mapped from 12 backgrounds"} {"timestamp": "2026-05-28T05:27:30.183690+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "scene_detail: 50 shot_staging entries loaded"} {"timestamp": "2026-05-28T05:27:30.184678+00:00", "level": "WARNING", "logger": "app.core.steps.scene_context_loader", "message": "scene_detail: shot_dependency_t2i checkpoint is STALE — 이전 scene_detail 기반 ref_usage를 사용 중. drift 방지를 위해 scene_detail 완료 후 shot_dependency_t2i도 force 재실행 권장."} {"timestamp": "2026-05-28T05:27:30.185795+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "scene_detail: 50 shot_staging entries loaded"} {"timestamp": "2026-05-28T05:27:30.186165+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "scene_detail: 18 scenes with fixed elements loaded"} {"timestamp": "2026-05-28T05:27:30.191003+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "_load_chain_bg_guide_by_shot: 22 shot guides loaded (0 skipped warnings)"} {"timestamp": "2026-05-28T05:27:30.192142+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "_load_chain_bg_camera_meta_by_shot: 22 shots with camera meta loaded (0 skipped warnings)"} {"timestamp": "2026-05-28T05:27:30.192554+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "_load_chain_bg_owned_by_shot: 22 shots mapped from 12 backgrounds"} {"timestamp": "2026-05-28T05:27:30.192897+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "_load_chain_bg_id_by_shot: 22 shots mapped to bg_id from 12 backgrounds"} {"timestamp": "2026-05-28T05:27:30.194888+00:00", "level": "INFO", "logger": "app.core.steps.scene_context_loader", "message": "scene_detail: 9 prop term maps loaded for Task 14 namespace reconciliation"} {"timestamp": "2026-05-28T05:27:30.246592+00:00", "level": "WARNING", "logger": "app.core.subject_reference_policy", "message": "subject_reference_policy: dropping policy for non-shot-visible subject C09 (visible=[]) render_prompt_card:s10.shot4"} {"timestamp": "2026-05-28T05:27:30.246632+00:00", "level": "WARNING", "logger": "app.core.subject_reference_policy", "message": "subject_reference_policy: dropping policy for non-shot-visible subject C05 (visible=[]) render_prompt_card:s10.shot4"} {"timestamp": "2026-05-28T05:27:30.280122+00:00", "level": "WARNING", "logger": "app.core.frame_spatial_contract", "message": "frame_spatial_contract: dropping constraint for non-shot-visible character target C02 (visible=['C01', 'L11'])"} {"timestamp": "2026-05-28T05:27:30.293576+00:00", "level": "WARNING", "logger": "app.core.frame_spatial_contract", "message": "frame_spatial_contract: dropping constraint for non-shot-visible prop target P02 (visible=['C01', 'C05'])"} {"timestamp": "2026-05-28T05:27:30.296936+00:00", "level": "WARNING", "logger": "app.core.frame_spatial_contract", "message": "frame_spatial_contract: dropping constraint for non-shot-visible character target C06 (visible=['C01', 'L10'])"} {"timestamp": "2026-05-28T05:27:30.296986+00:00", "level": "WARNING", "logger": "app.core.subject_reference_policy", "message": "subject_reference_policy: dropping policy for non-shot-visible subject C06 (visible=['C01']) render_prompt_card:s19.shot3"} {"timestamp": "2026-05-28T05:27:30.365457+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step scene_detail: skipped"} {"timestamp": "2026-05-28T05:27:30.368810+00:00", "level": "WARNING", "logger": "app.core.step_runner", "message": "[RECOVERY] step=shot_dependency_t2i status=running → force-like"} {"timestamp": "2026-05-28T05:27:30.369593+00:00", "level": "INFO", "logger": "app.core.step_runner", "message": "Step shot_dependency_t2i started (run_id=21472a7a-2230-4efe-b29c-79a6596cb367, model=gpt-mini)"} 14:27:30 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:27:30.380652+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:27:37 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:27:37.722944+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:27:37 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:27:37.724493+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:27:37.739820+00:00", "level": "INFO", "logger": "app.core.steps.shot_dependency_t2i_step", "message": "shot_dependency_t2i: L01 (2 shots) — LLM OK"} 14:27:37 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:27:37.741302+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:27:44 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:27:44.900574+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:27:44 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:27:44.903651+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:27:44.915893+00:00", "level": "INFO", "logger": "app.core.steps.shot_dependency_t2i_step", "message": "shot_dependency_t2i: L02 (2 shots) — LLM OK"} 14:27:44 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:27:44.917523+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:28:06 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:28:06.348130+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:28:06 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:28:06.351121+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:28:06.365805+00:00", "level": "INFO", "logger": "app.core.steps.shot_dependency_t2i_step", "message": "shot_dependency_t2i: L04 (7 shots) — LLM OK"} 14:28:06 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:28:06.367667+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:28:39 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:28:39.246883+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:28:39 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:28:39.248081+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:28:39.257917+00:00", "level": "INFO", "logger": "app.core.steps.shot_dependency_t2i_step", "message": "shot_dependency_t2i: L05 (12 shots) — LLM OK"} 14:28:39 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:28:39.259605+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:28:51 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:28:51.731072+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:28:51 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:28:51.733362+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:28:51.740920+00:00", "level": "INFO", "logger": "app.core.steps.shot_dependency_t2i_step", "message": "shot_dependency_t2i: L06 (3 shots) — LLM OK"} 14:28:51 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:28:51.743047+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:28:58 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:28:58.668128+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:28:58 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:28:58.669338+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:28:58.678277+00:00", "level": "INFO", "logger": "app.core.steps.shot_dependency_t2i_step", "message": "shot_dependency_t2i: L07 (2 shots) — LLM OK"} 14:28:58 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:28:58.679800+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:29:11 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:29:11.053776+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:29:11 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:29:11.058642+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:29:11.077046+00:00", "level": "INFO", "logger": "app.core.steps.shot_dependency_t2i_step", "message": "shot_dependency_t2i: L09 (4 shots) — LLM OK"} 14:29:11 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:29:11.079542+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:29:20 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:29:20.011290+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:29:20 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:29:20.012389+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:29:20.020548+00:00", "level": "INFO", "logger": "app.core.steps.shot_dependency_t2i_step", "message": "shot_dependency_t2i: L11 (2 shots) — LLM OK"} 14:29:20 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:29:20.022043+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:29:31 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:29:31.787794+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:29:31 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:29:31.789021+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:29:31.798147+00:00", "level": "INFO", "logger": "app.core.steps.shot_dependency_t2i_step", "message": "shot_dependency_t2i: L13 (3 shots) — LLM OK"} 14:29:31 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:29:31.799887+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:29:41 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:29:41.771493+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:29:41 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:29:41.775315+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:29:41.783191+00:00", "level": "INFO", "logger": "app.core.steps.shot_dependency_t2i_step", "message": "shot_dependency_t2i: L17 (2 shots) — LLM OK"} 14:29:41 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:29:41.785403+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:29:49 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:29:49.272905+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:29:49 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:29:49.275927+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:29:49.283988+00:00", "level": "INFO", "logger": "app.core.steps.shot_dependency_t2i_step", "message": "shot_dependency_t2i: L19 (2 shots) — LLM OK"} 14:29:49 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:29:49.285695+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:29:50 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:29:50.306729+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:29:50 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:29:50.308664+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:29:50.310926+00:00", "level": "WARNING", "logger": "app.modules.llm.llm_client", "message": "call_structured[shot_dependency_t2i] Tier 1 failed (LLM returned empty response for step=shot_dependency_t2i, model=gpt-mini), trying sanitized input"} 14:29:50 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:29:50.316072+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:29:51 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:29:51.244071+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:29:51 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:29:51.246408+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:29:51.249956+00:00", "level": "WARNING", "logger": "app.modules.llm.llm_client", "message": "call_structured[shot_dependency_t2i] Tier 2 sanitized failed (LLM returned empty response for step=shot_dependency_t2i, model=gpt-mini), trying GPT fallback"} 14:29:51 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:29:51.254012+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:30:09 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:30:09.250112+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:30:09 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:30:09.252190+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:30:09.269004+00:00", "level": "INFO", "logger": "app.core.steps.shot_dependency_t2i_step", "message": "shot_dependency_t2i: L20 (3 shots) — LLM OK"} 14:30:09 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:30:09.274308+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:30:16 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:30:16.317096+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:30:16 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:30:16.320711+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:30:16.331245+00:00", "level": "INFO", "logger": "app.core.steps.shot_dependency_t2i_step", "message": "shot_dependency_t2i: L18 (2 shots) — LLM OK"} {"timestamp": "2026-05-28T05:30:16.334292+00:00", "level": "INFO", "logger": "app.core.steps.shot_dependency_t2i_step", "message": "shot_dependency_t2i: 24/50 linked (LLM-based)"} {"timestamp": "2026-05-28T05:30:16.351458+00:00", "level": "INFO", "logger": "app.core.step_runner", "message": "Step shot_dependency_t2i completed (completed=50/50, failed=0)"} {"timestamp": "2026-05-28T05:30:16.351552+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step shot_dependency_t2i: completed"} {"timestamp": "2026-05-28T05:30:16.362126+00:00", "level": "WARNING", "logger": "app.core.step_runner", "message": "[RECOVERY] step=t2i_review status=running → force-like"} {"timestamp": "2026-05-28T05:30:16.364583+00:00", "level": "INFO", "logger": "app.core.step_runner", "message": "Step t2i_review started (run_id=7d21103c-ca60-4108-b329-0948f9cb5752, model=gpt)"} 14:30:16 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:30:16.391742+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:31:13 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:31:13.737674+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:31:13 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:31:13.740525+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:31:13.755641+00:00", "level": "INFO", "logger": "app.modules.pipeline.t2i_review", "message": "t2i_review entity C11 [awkward_translation]: 원문 Korean 설명의 '거친 얼굴선'이 영어 프롬프트에서 부자연스러운 얼굴 구조 표현으로 번역되어 어색합니다. Regen 시 원문의 거친 인"} {"timestamp": "2026-05-28T05:31:13.755913+00:00", "level": "INFO", "logger": "app.modules.pipeline.t2i_review", "message": "t2i_review entity C13 [missing_ethnicity]: 보통명사 인물 '12살 여자아이'에 원문이 명시한 Korean demographic descriptor가 누락되었습니다. Regen 시 stor"} {"timestamp": "2026-05-28T05:31:13.756005+00:00", "level": "INFO", "logger": "app.modules.pipeline.t2i_review", "message": "t2i_review entity L16 [awkward_translation]: 원문 한국어의 자연스러운 공간명 'PC방'이 영어에서 일반적인 internet cafe로 옮겨져 한국적 생활공간의 뉘앙스가 약해졌습니다. Reg"} {"timestamp": "2026-05-28T05:31:13.756066+00:00", "level": "INFO", "logger": "app.modules.pipeline.t2i_review", "message": "t2i_review entity L18 [proper_noun_translated]: 원문 지명 '서해'가 T2I 프롬프트에서 원어 표기 없이 일반적인 바다 공간으로 처리되어 고유 지명의 뉘앙스가 손실되었습니다. Regen 시 원"} {"timestamp": "2026-05-28T05:31:13.756122+00:00", "level": "INFO", "logger": "app.modules.pipeline.t2i_review", "message": "t2i_review entity P09 [missing_ethnicity]: 사진 속 훼손된 피해자 신체에 대해 원문이 Korean으로 보이는 인물 증거를 제시하지만 T2I 프롬프트에는 해당 demographic desc"} 14:31:13 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:31:13.761627+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:31:42 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:31:42.198010+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:31:42 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:31:42.201611+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:31:42.214374+00:00", "level": "INFO", "logger": "app.modules.pipeline.t2i_review", "message": "t2i_review scene batch 1/5: 10 items, 1 issues"} 14:31:42 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:31:42.217447+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:32:05 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:32:05.573635+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:32:05 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:32:05.577988+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:32:05.590267+00:00", "level": "INFO", "logger": "app.modules.pipeline.t2i_review", "message": "t2i_review scene batch 2/5: 10 items, 0 issues"} 14:32:05 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:32:05.593221+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:32:37 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:32:37.121439+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:32:37 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:32:37.125443+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:32:37.137790+00:00", "level": "INFO", "logger": "app.modules.pipeline.t2i_review", "message": "t2i_review scene batch 3/5: 10 items, 0 issues"} 14:32:37 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:32:37.140651+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:33:15 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:33:15.491400+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:33:15 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:33:15.494000+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:33:15.509695+00:00", "level": "INFO", "logger": "app.modules.pipeline.t2i_review", "message": "t2i_review scene batch 4/5: 10 items, 1 issues"} 14:33:15 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:33:15.512620+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:34:00 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:34:00.406376+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:34:00 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:34:00.408210+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:34:00.422388+00:00", "level": "INFO", "logger": "app.modules.pipeline.t2i_review", "message": "t2i_review scene batch 5/5: 10 items, 1 issues"} {"timestamp": "2026-05-28T05:34:00.422860+00:00", "level": "INFO", "logger": "app.modules.pipeline.t2i_review", "message": "t2i_review v1: entity 5 diagnostics, scene 3 diagnostics (mutation=0)"} {"timestamp": "2026-05-28T05:34:00.446604+00:00", "level": "INFO", "logger": "app.core.step_runner", "message": "Step t2i_review completed (completed=1/1, failed=0)"} {"timestamp": "2026-05-28T05:34:00.447037+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step t2i_review: completed"} {"timestamp": "2026-05-28T05:34:00.457507+00:00", "level": "WARNING", "logger": "app.core.step_runner", "message": "[RECOVERY] step=world_guide status=running → force-like"} {"timestamp": "2026-05-28T05:34:00.460065+00:00", "level": "INFO", "logger": "app.core.step_runner", "message": "Step world_guide started (run_id=f1f73122-68a8-44de-9d5b-5786c16cea35, model=gpt)"} 14:34:00 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:34:00.493292+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:34:57 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:34:57.033406+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:34:57 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:34:57.036894+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:34:57.059999+00:00", "level": "INFO", "logger": "app.core.step_runner", "message": "Step world_guide completed (completed=1/1, failed=0)"} {"timestamp": "2026-05-28T05:34:57.060054+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step world_guide: completed"} {"timestamp": "2026-05-28T05:34:57.070139+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step ref_image_gen: skipped"} {"timestamp": "2026-05-28T05:34:57.074866+00:00", "level": "INFO", "logger": "app.core.step_runner", "message": "Step composite_image_gen started (run_id=d294ca23-c8f4-4f4d-b50a-f00a16a96a16, model=gemini-image)"} {"timestamp": "2026-05-28T05:34:57.105747+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.entity_sync_service", "message": "Synced 41 entities to DB from checkpoint (upsert); removed 0 stale links"} {"timestamp": "2026-05-28T05:34:57.147266+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced 152 scene_stills (shot-based) to DB"} {"timestamp": "2026-05-28T05:34:57.163330+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced scene_summary from checkpoint"} {"timestamp": "2026-05-28T05:34:57.181315+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced shot_type from scene_cinematography checkpoint (legacy)"} {"timestamp": "2026-05-28T05:34:57.205115+00:00", "level": "WARNING", "logger": "app.core.name_matcher", "message": "name_index collision: key='경찰수사점퍼' kept existing entry, skipped new from raw='경찰수사점퍼'"} {"timestamp": "2026-05-28T05:34:57.206409+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.outlook_sync_service", "message": "Synced 12 outlooks + 13 character-outlook links (Δ +0 / -0)"} {"timestamp": "2026-05-28T05:34:57.214663+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.episode_projection_service", "message": "T2I appearance counts: 0 entities updated, 29 total short_ids found"} {"timestamp": "2026-05-28T05:34:57.215492+00:00", "level": "WARNING", "logger": "app.core.applicability", "message": "_if_planning_doc fallback to False: '_StubRunner' object has no attribute 'db'"} {"timestamp": "2026-05-28T05:34:57.217629+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.orchestrator", "message": "orchestrate_full_sync: all changes committed atomically (episode dc70c0b3, step=-, repaired=0)"} 14:34:57 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:34:57.291039+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:36:00 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:36:00.605749+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:36:00 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:36:00.608655+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:36:00.635929+00:00", "level": "INFO", "logger": "app.modules.image_checkpoint", "message": "Checkpoint loaded: reference — 16 completed, 0 failed"} {"timestamp": "2026-05-28T05:36:00.670367+00:00", "level": "INFO", "logger": "app.services.reference_pipeline_orchestrator", "message": "Low-freq decision: 낯선 한국인 남자 (character, t2i_count=1, base_for_variant=False, variant_self=False, required=True, skipped=False)"} {"timestamp": "2026-05-28T05:36:00.670468+00:00", "level": "INFO", "logger": "app.services.reference_pipeline_orchestrator", "message": "Low-freq decision: 겁에 질린 남자 (character, t2i_count=0, base_for_variant=False, variant_self=False, required=False, skipped=True)"} {"timestamp": "2026-05-28T05:36:00.670521+00:00", "level": "INFO", "logger": "app.services.reference_pipeline_orchestrator", "message": "Low-freq decision: 한국인 남자 (character, t2i_count=3, base_for_variant=False, variant_self=False, required=True, skipped=False)"} {"timestamp": "2026-05-28T05:36:00.670560+00:00", "level": "INFO", "logger": "app.services.reference_pipeline_orchestrator", "message": "Low-freq decision: 낡은 인형 (prop, t2i_count=0, base_for_variant=False, variant_self=False, required=False, skipped=True)"} {"timestamp": "2026-05-28T05:36:00.670595+00:00", "level": "INFO", "logger": "app.services.reference_pipeline_orchestrator", "message": "Low-freq decision: 12살 여자아이 (character, t2i_count=0, base_for_variant=False, variant_self=True, required=False, skipped=False)"} {"timestamp": "2026-05-28T05:36:00.670628+00:00", "level": "INFO", "logger": "app.services.reference_pipeline_orchestrator", "message": "Low-freq decision: 붉은 원형 표식 (prop, t2i_count=3, base_for_variant=False, variant_self=False, required=True, skipped=False)"} {"timestamp": "2026-05-28T05:36:00.670667+00:00", "level": "INFO", "logger": "app.services.reference_pipeline_orchestrator", "message": "Low-freq decision: 혜수 (character, t2i_count=6, base_for_variant=False, variant_self=False, required=True, skipped=False)"} {"timestamp": "2026-05-28T05:36:00.670700+00:00", "level": "INFO", "logger": "app.services.reference_pipeline_orchestrator", "message": "Low-freq decision: 인우 (character, t2i_count=4, base_for_variant=False, variant_self=False, required=True, skipped=False)"} {"timestamp": "2026-05-28T05:36:00.670732+00:00", "level": "INFO", "logger": "app.services.reference_pipeline_orchestrator", "message": "Low-freq decision: 낡은 사진 (prop, t2i_count=4, base_for_variant=False, variant_self=False, required=True, skipped=False)"} {"timestamp": "2026-05-28T05:36:00.670764+00:00", "level": "INFO", "logger": "app.services.reference_pipeline_orchestrator", "message": "Low-freq decision: 해상 지도 (prop, t2i_count=1, base_for_variant=False, variant_self=False, required=True, skipped=False)"} {"timestamp": "2026-05-28T05:36:00.670794+00:00", "level": "INFO", "logger": "app.services.reference_pipeline_orchestrator", "message": "Low-freq decision: 한국인 여자 (character, t2i_count=2, base_for_variant=False, variant_self=False, required=True, skipped=False)"} {"timestamp": "2026-05-28T05:36:00.670826+00:00", "level": "INFO", "logger": "app.services.reference_pipeline_orchestrator", "message": "Low-freq decision: 좌표 메모지 (prop, t2i_count=1, base_for_variant=False, variant_self=False, required=True, skipped=False)"} {"timestamp": "2026-05-28T05:36:00.670856+00:00", "level": "INFO", "logger": "app.services.reference_pipeline_orchestrator", "message": "Low-freq decision: 살인 사건 현장 사진 (prop, t2i_count=0, base_for_variant=False, variant_self=False, required=False, skipped=True)"} {"timestamp": "2026-05-28T05:36:00.670890+00:00", "level": "INFO", "logger": "app.services.reference_pipeline_orchestrator", "message": "Low-freq decision: 수리영 (character, t2i_count=24, base_for_variant=False, variant_self=False, required=True, skipped=False)"} {"timestamp": "2026-05-28T05:36:00.670920+00:00", "level": "INFO", "logger": "app.services.reference_pipeline_orchestrator", "message": "Low-freq decision: 검은 실루엣의 한국인 남자 (character, t2i_count=1, base_for_variant=False, variant_self=False, required=True, skipped=False)"} {"timestamp": "2026-05-28T05:36:00.670952+00:00", "level": "INFO", "logger": "app.services.reference_pipeline_orchestrator", "message": "Low-freq decision: 김형사 (character, t2i_count=0, base_for_variant=False, variant_self=False, required=False, skipped=True)"} {"timestamp": "2026-05-28T05:36:00.670983+00:00", "level": "INFO", "logger": "app.services.reference_pipeline_orchestrator", "message": "Low-freq decision: 약초 잎 (prop, t2i_count=2, base_for_variant=False, variant_self=False, required=False, skipped=False)"} {"timestamp": "2026-05-28T05:36:00.671014+00:00", "level": "INFO", "logger": "app.services.reference_pipeline_orchestrator", "message": "Low-freq decision: 로트와일러 (character, t2i_count=0, base_for_variant=False, variant_self=False, required=False, skipped=True)"} {"timestamp": "2026-05-28T05:36:00.671044+00:00", "level": "INFO", "logger": "app.services.reference_pipeline_orchestrator", "message": "Low-freq decision: 민숙 (character, t2i_count=4, base_for_variant=True, variant_self=False, required=True, skipped=False)"} {"timestamp": "2026-05-28T05:36:00.671076+00:00", "level": "INFO", "logger": "app.services.reference_pipeline_orchestrator", "message": "Low-freq decision: 백팩 (prop, t2i_count=2, base_for_variant=False, variant_self=False, required=False, skipped=False)"} {"timestamp": "2026-05-28T05:36:00.671105+00:00", "level": "INFO", "logger": "app.services.reference_pipeline_orchestrator", "message": "Low-freq decision: 스마트폰 (prop, t2i_count=5, base_for_variant=False, variant_self=False, required=False, skipped=False)"} {"timestamp": "2026-05-28T05:36:00.671138+00:00", "level": "INFO", "logger": "app.services.reference_pipeline_orchestrator", "message": "Low-freq decision: 검은 고양이 (character, t2i_count=0, base_for_variant=False, variant_self=False, required=False, skipped=True)"} {"timestamp": "2026-05-28T05:36:00.710085+00:00", "level": "INFO", "logger": "app.services.reference_phase2_service", "message": "Generating 9 standalone outfit images (parallel)"} 14:36:00 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:36:00.715371+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:36:05 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:36:05.277401+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:36:05 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:36:05.279082+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} 14:36:05 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:36:05.289549+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:36:09 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:36:09.220525+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:36:09 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:36:09.225387+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} 14:36:09 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:36:09.235531+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:36:14 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:36:14.140905+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:36:14 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:36:14.144731+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} 14:36:14 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:36:14.154279+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:36:19 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:36:19.239349+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:36:19 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:36:19.242953+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} 14:36:19 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:36:19.255985+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:36:23 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:36:23.609982+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:36:23 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:36:23.612096+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} 14:36:23 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:36:23.623625+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:36:27 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:36:27.443180+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:36:27 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:36:27.447723+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} 14:36:27 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:36:27.457366+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:36:31 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:36:31.476395+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:36:31 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:36:31.480224+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} 14:36:31 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:36:31.486460+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:36:37 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:36:37.202286+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:36:37 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:36:37.205739+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} 14:36:37 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:36:37.211857+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:36:41 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:36:41.495388+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:36:41 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:36:41.497836+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:36:41.506078+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Generating reference image for: 자전거용캐주얼 (type=outlook)"} {"timestamp": "2026-05-28T05:36:41.506257+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Generating reference image for: 블라우스와스커트 (type=outlook)"} {"timestamp": "2026-05-28T05:36:41.506516+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Generating reference image for: 일상홈웨어 (type=outlook)"} {"timestamp": "2026-05-28T05:36:41.506950+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Generating reference image for: 도심어두운점퍼 (type=outlook)"} {"timestamp": "2026-05-28T05:36:41.507511+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Generating reference image for: 70년대아동복 (type=outlook)"} {"timestamp": "2026-05-28T05:36:41.507862+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Generating reference image for: 경찰수사점퍼 (type=outlook)"} {"timestamp": "2026-05-28T05:36:41.508716+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Generating reference image for: 어업작업복 (type=outlook)"} {"timestamp": "2026-05-28T05:36:41.509304+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Generating reference image for: 검은실루엣복장 (type=outlook)"} {"timestamp": "2026-05-28T05:36:41.509864+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Generating reference image for: 검은인영복장 (type=outlook)"} {"timestamp": "2026-05-28T05:36:41.510468+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Using type-specific ref prompt template for 블라우스와스커트 (outlook)"} {"timestamp": "2026-05-28T05:36:41.511051+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Using type-specific ref prompt template for 일상홈웨어 (outlook)"} {"timestamp": "2026-05-28T05:36:41.511891+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Using type-specific ref prompt template for 자전거용캐주얼 (outlook)"} {"timestamp": "2026-05-28T05:36:41.512202+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Using type-specific ref prompt template for 70년대아동복 (outlook)"} {"timestamp": "2026-05-28T05:36:41.512577+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Using type-specific ref prompt template for 도심어두운점퍼 (outlook)"} {"timestamp": "2026-05-28T05:36:41.512728+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Using type-specific ref prompt template for 경찰수사점퍼 (outlook)"} {"timestamp": "2026-05-28T05:36:41.512967+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Using type-specific ref prompt template for 검은실루엣복장 (outlook)"} {"timestamp": "2026-05-28T05:36:41.513357+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Using type-specific ref prompt template for 검은인영복장 (outlook)"} {"timestamp": "2026-05-28T05:36:41.513514+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Using type-specific ref prompt template for 어업작업복 (outlook)"} {"timestamp": "2026-05-28T05:36:41.514085+00:00", "level": "INFO", "logger": "app.modules.llm.gemini_key_pool", "message": "Gemini key pool: 1 key(s) loaded"} 14:36:53 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:36:53.086682+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:36:54 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:36:54.143409+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:36:55 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:36:55.690311+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:36:56 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:36:56.484971+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:36:56 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:36:56.491889+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:36:56.507474+00:00", "level": "INFO", "logger": "app.services.reference_phase2_service", "message": "Standalone outfit generated: 블라우스와스커트"} 14:36:57 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:36:57.935402+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:36:57 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:36:57.944003+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:36:57.957823+00:00", "level": "INFO", "logger": "app.services.reference_phase2_service", "message": "Standalone outfit generated: 도심어두운점퍼"} 14:36:58 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:36:58.028402+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:36:58 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:36:58.036311+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:36:58.046589+00:00", "level": "INFO", "logger": "app.services.reference_phase2_service", "message": "Standalone outfit generated: 일상홈웨어"} 14:37:04 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:37:04.337149+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:37:04 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:37:04.931649+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:37:07 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:37:07.755036+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:37:08 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:37:08.189339+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:37:09 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:37:09.200722+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:37:09 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:37:09.208427+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:37:09.221479+00:00", "level": "INFO", "logger": "app.services.reference_phase2_service", "message": "Standalone outfit generated: 자전거용캐주얼"} 14:37:09 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:37:09.449359+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:37:09 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:37:09.484261+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:37:09 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:37:09.486164+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:37:09.491545+00:00", "level": "INFO", "logger": "app.services.reference_phase2_service", "message": "Standalone outfit generated: 검은실루엣복장"} 14:37:11 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:37:11.384227+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:37:11 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:37:11.392681+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:37:11.405211+00:00", "level": "INFO", "logger": "app.services.reference_phase2_service", "message": "Standalone outfit generated: 어업작업복"} 14:37:11 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:37:11.592728+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:37:11 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:37:11.599769+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:37:11.610094+00:00", "level": "INFO", "logger": "app.services.reference_phase2_service", "message": "Standalone outfit generated: 경찰수사점퍼"} 14:37:12 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:37:12.874633+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:37:12 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:37:12.879120+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:37:12.890325+00:00", "level": "INFO", "logger": "app.services.reference_phase2_service", "message": "Standalone outfit generated: 검은인영복장"} 14:37:25 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:37:25.658310+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:37:29 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:37:29.662834+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:37:29 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:37:29.670922+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:37:29.684930+00:00", "level": "INFO", "logger": "app.services.reference_phase2_service", "message": "Standalone outfit generated: 70년대아동복"} {"timestamp": "2026-05-28T05:37:29.810256+00:00", "level": "INFO", "logger": "app.services.reference_phase3_service", "message": "Generating 9 composite images (face + outfit refs)"} {"timestamp": "2026-05-28T05:37:29.815502+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Generating reference image for: 검은 실루엣의 한국인 남자 (검은인영복장) (type=composite)"} {"timestamp": "2026-05-28T05:37:29.815827+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Generating reference image for: 수리영 (자전거용캐주얼) (type=composite)"} {"timestamp": "2026-05-28T05:37:29.816404+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Generating reference image for: 한국인 여자 (블라우스와스커트) (type=composite)"} {"timestamp": "2026-05-28T05:37:29.816725+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Generating reference image for: 낯선 한국인 남자 (검은실루엣복장) (type=composite)"} {"timestamp": "2026-05-28T05:37:29.817017+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Generating reference image for: 민숙 (일상홈웨어) (type=composite)"} {"timestamp": "2026-05-28T05:37:29.817667+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Generating reference image for: 12살 여자아이 (70년대아동복) (type=composite)"} {"timestamp": "2026-05-28T05:37:29.818075+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Generating reference image for: 인우 (어업작업복) (type=composite)"} {"timestamp": "2026-05-28T05:37:29.818388+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Generating reference image for: 혜수 (경찰수사점퍼) (type=composite)"} {"timestamp": "2026-05-28T05:37:29.818655+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Generating reference image for: 한국인 남자 (도심어두운점퍼) (type=composite)"} {"timestamp": "2026-05-28T05:37:29.818877+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Using type-specific ref prompt template for 검은 실루엣의 한국인 남자 (검은인영복장) (composite)"} {"timestamp": "2026-05-28T05:37:29.831610+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Using type-specific ref prompt template for 한국인 여자 (블라우스와스커트) (composite)"} {"timestamp": "2026-05-28T05:37:29.847037+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Using type-specific ref prompt template for 수리영 (자전거용캐주얼) (composite)"} {"timestamp": "2026-05-28T05:37:29.859451+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Using type-specific ref prompt template for 낯선 한국인 남자 (검은실루엣복장) (composite)"} {"timestamp": "2026-05-28T05:37:29.870405+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Using type-specific ref prompt template for 12살 여자아이 (70년대아동복) (composite)"} {"timestamp": "2026-05-28T05:37:29.880407+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Using type-specific ref prompt template for 민숙 (일상홈웨어) (composite)"} {"timestamp": "2026-05-28T05:37:29.889790+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Using type-specific ref prompt template for 한국인 남자 (도심어두운점퍼) (composite)"} {"timestamp": "2026-05-28T05:37:29.900450+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Using type-specific ref prompt template for 혜수 (경찰수사점퍼) (composite)"} {"timestamp": "2026-05-28T05:37:29.908635+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Using type-specific ref prompt template for 인우 (어업작업복) (composite)"} 14:37:47 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:37:47.357134+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:37:48 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:37:48.890356+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:37:48 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:37:48.896534+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:37:48.906543+00:00", "level": "INFO", "logger": "app.services.reference_phase3_service", "message": "Composite generated: 한국인 여자 + 블라우스와스커트"} 14:37:50 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:37:50.218151+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:37:53 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:37:53.220160+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:37:53 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:37:53.918050+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:37:53 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:37:53.999185+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:37:53 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:37:54.001174+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:37:54.006281+00:00", "level": "INFO", "logger": "app.services.reference_phase3_service", "message": "Composite generated: 혜수 + 경찰수사점퍼"} 14:37:56 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:37:56.571105+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:37:56 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:37:56.577803+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:37:56.587109+00:00", "level": "INFO", "logger": "app.services.reference_phase3_service", "message": "Composite generated: 검은 실루엣의 한국인 남자 + 검은인영복장"} 14:37:59 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:37:59.690626+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:38:00 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:38:00.563299+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:38:00 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:38:00.565113+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} 14:38:00 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:38:00.566053+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} {"timestamp": "2026-05-28T05:38:00.571413+00:00", "level": "INFO", "logger": "app.services.reference_phase3_service", "message": "Composite generated: 민숙 + 일상홈웨어"} 14:38:00 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:38:00.621023+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:38:01 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:38:01.776394+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:38:03 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:38:03.734735+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:38:03 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:38:03.741748+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:38:03.752432+00:00", "level": "INFO", "logger": "app.services.reference_phase3_service", "message": "Composite generated: 12살 여자아이 + 70년대아동복"} 14:38:04 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:38:04.618946+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:38:04 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:38:04.625582+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:38:04.636161+00:00", "level": "INFO", "logger": "app.services.reference_phase3_service", "message": "Composite generated: 한국인 남자 + 도심어두운점퍼"} 14:38:04 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:38:04.665816+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:38:04 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:38:04.670674+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:38:04.684275+00:00", "level": "INFO", "logger": "app.services.reference_phase3_service", "message": "Composite generated: 인우 + 어업작업복"} 14:38:07 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:38:07.004546+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:38:07 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:38:07.012881+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:38:07.024179+00:00", "level": "INFO", "logger": "app.services.reference_phase3_service", "message": "Composite generated: 낯선 한국인 남자 + 검은실루엣복장"} 14:38:10 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:38:10.072683+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:38:14 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:38:14.145066+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:38:14 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:38:14.151905+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:38:14.154194+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Severe issue for 수리영 (자전거용캐주얼) — regenerating"} 14:38:30 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:38:30.519255+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:38:34 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:38:34.140735+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:38:34 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:38:34.142491+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:38:34.151511+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Comparison for 수리영 (자전거용캐주얼): winner=image_2 reason=두 이미지 모두 같은 인물이 민트색 스웨트셔츠, 회색 조거 팬츠, 운동화를 착용한 캐주얼 복장으로 설명의 '자전거용캐주얼'과 어느 정도 맞습니다. 다만 image_2가 인물과 의상이 더 크게 보이고 선명해 착용한 캐주얼 스타일을 확인하기 쉽습니다."} {"timestamp": "2026-05-28T05:38:34.161364+00:00", "level": "INFO", "logger": "app.services.reference_phase3_service", "message": "Composite generated: 수리영 + 자전거용캐주얼"} {"timestamp": "2026-05-28T05:38:34.238599+00:00", "level": "INFO", "logger": "app.core.step_runner", "message": "Step composite_image_gen completed (completed=9/9, failed=0)"} {"timestamp": "2026-05-28T05:38:34.238829+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step composite_image_gen: completed"} {"timestamp": "2026-05-28T05:38:34.254631+00:00", "level": "INFO", "logger": "app.core.step_runner", "message": "Step character_state_variant started (run_id=e53cfadc-0327-4ac8-bacd-b1e3321213bd, model=gemini-image)"} {"timestamp": "2026-05-28T05:38:34.257727+00:00", "level": "INFO", "logger": "app.core.steps.image_steps", "message": "character_state_variant: 5 characters with state variants: ['한국인 남자', '겁에 질린 남자', '한국인 여자', '민숙', '수리영']"} {"timestamp": "2026-05-28T05:38:34.343400+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Generating reference image for: 한국인 남자 (severely_injured) (type=character_state_variant)"} 14:38:54 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:38:54.249164+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:38:56 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:38:56.383666+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:38:56 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:38:56.392797+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:38:56.404304+00:00", "level": "INFO", "logger": "app.core.steps.image_steps", "message": "character_state_variant: 한국인 남자 (severely_injured) — generated"} {"timestamp": "2026-05-28T05:38:56.413909+00:00", "level": "WARNING", "logger": "app.core.steps.image_steps", "message": "character_state_variant: no ref image for 겁에 질린 남자 — skipping"} {"timestamp": "2026-05-28T05:38:56.419685+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Generating reference image for: 한국인 여자 (severely_injured) (type=character_state_variant)"} 14:39:23 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:39:23.204272+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:39:30 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:39:30.214943+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:39:30 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:39:30.224694+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:39:30.233628+00:00", "level": "INFO", "logger": "app.core.steps.image_steps", "message": "character_state_variant: 한국인 여자 (severely_injured) — generated"} {"timestamp": "2026-05-28T05:39:30.241803+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Generating reference image for: 민숙 (dead) (type=character_state_variant)"} 14:39:44 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:39:44.441324+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:39:45 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:39:45.909835+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:39:45 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:39:45.917972+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:39:45.925242+00:00", "level": "INFO", "logger": "app.core.steps.image_steps", "message": "character_state_variant: 민숙 (dead) — generated"} {"timestamp": "2026-05-28T05:39:45.933078+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Generating reference image for: 민숙 (severely_injured) (type=character_state_variant)"} 14:40:12 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:40:12.788701+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:40:14 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:40:14.302155+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:40:14 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:40:14.305912+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:40:14.311482+00:00", "level": "INFO", "logger": "app.core.steps.image_steps", "message": "character_state_variant: 민숙 (severely_injured) — generated"} {"timestamp": "2026-05-28T05:40:14.315941+00:00", "level": "INFO", "logger": "app.modules.pipeline.ref_image_pipeline", "message": "Generating reference image for: 수리영 (unconscious) (type=character_state_variant)"} 14:40:27 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:40:27.873100+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:40:33 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:40:33.314666+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:40:33 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:40:33.320192+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:40:33.326551+00:00", "level": "INFO", "logger": "app.core.steps.image_steps", "message": "character_state_variant: 수리영 (unconscious) — generated"} {"timestamp": "2026-05-28T05:40:33.331557+00:00", "level": "INFO", "logger": "app.core.step_runner", "message": "Step character_state_variant partial (completed=5/6, failed=1)"} {"timestamp": "2026-05-28T05:40:33.331649+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step character_state_variant: partial"} {"timestamp": "2026-05-28T05:40:33.331714+00:00", "level": "WARNING", "logger": "app.services.analysis_dispatch_service", "message": "Step character_state_variant partial — continuing (downstream may use partial results)"} {"timestamp": "2026-05-28T05:40:33.347612+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step background_render: skipped"} {"timestamp": "2026-05-28T05:40:33.356061+00:00", "level": "INFO", "logger": "app.core.step_runner", "message": "Step scene_image_pipeline started (run_id=f5a943bc-7652-4fa2-a0eb-d28de8d75cce, model=mixed)"} {"timestamp": "2026-05-28T05:40:33.398928+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.entity_sync_service", "message": "Synced 41 entities to DB from checkpoint (upsert); removed 0 stale links"} {"timestamp": "2026-05-28T05:40:33.444252+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced 152 scene_stills (shot-based) to DB"} {"timestamp": "2026-05-28T05:40:33.461521+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced scene_summary from checkpoint"} {"timestamp": "2026-05-28T05:40:33.476758+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced shot_type from scene_cinematography checkpoint (legacy)"} {"timestamp": "2026-05-28T05:40:33.489880+00:00", "level": "WARNING", "logger": "app.core.name_matcher", "message": "name_index collision: key='경찰수사점퍼' kept existing entry, skipped new from raw='경찰수사점퍼'"} {"timestamp": "2026-05-28T05:40:33.491418+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.outlook_sync_service", "message": "Synced 12 outlooks + 13 character-outlook links (Δ +0 / -0)"} {"timestamp": "2026-05-28T05:40:33.500710+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.episode_projection_service", "message": "T2I appearance counts: 0 entities updated, 29 total short_ids found"} {"timestamp": "2026-05-28T05:40:33.501444+00:00", "level": "WARNING", "logger": "app.core.applicability", "message": "_if_planning_doc fallback to False: '_StubRunner' object has no attribute 'db'"} {"timestamp": "2026-05-28T05:40:33.503136+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.orchestrator", "message": "orchestrate_full_sync: all changes committed atomically (episode dc70c0b3, step=-, repaired=0)"} {"timestamp": "2026-05-28T05:40:33.544266+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.entity_sync_service", "message": "Synced 41 entities to DB from checkpoint (upsert); removed 0 stale links"} {"timestamp": "2026-05-28T05:40:33.579431+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced 152 scene_stills (shot-based) to DB"} {"timestamp": "2026-05-28T05:40:33.594010+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced scene_summary from checkpoint"} {"timestamp": "2026-05-28T05:40:33.607143+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced shot_type from scene_cinematography checkpoint (legacy)"} {"timestamp": "2026-05-28T05:40:33.617130+00:00", "level": "WARNING", "logger": "app.core.name_matcher", "message": "name_index collision: key='경찰수사점퍼' kept existing entry, skipped new from raw='경찰수사점퍼'"} {"timestamp": "2026-05-28T05:40:33.618306+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.outlook_sync_service", "message": "Synced 12 outlooks + 13 character-outlook links (Δ +0 / -0)"} {"timestamp": "2026-05-28T05:40:33.625492+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.episode_projection_service", "message": "T2I appearance counts: 0 entities updated, 29 total short_ids found"} {"timestamp": "2026-05-28T05:40:33.626116+00:00", "level": "WARNING", "logger": "app.core.applicability", "message": "_if_planning_doc fallback to False: '_StubRunner' object has no attribute 'db'"} {"timestamp": "2026-05-28T05:40:33.627841+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.orchestrator", "message": "orchestrate_full_sync: all changes committed atomically (episode dc70c0b3, step=-, repaired=0)"} {"timestamp": "2026-05-28T05:40:33.652843+00:00", "level": "INFO", "logger": "app.core.asset_readiness", "message": "AssetReadiness OK: AssetReadiness episode=dc70c0b3: expected=30 registered=30 disk=30 missing=0"} 14:40:33 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:40:33.666767+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:41:28 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:41:28.117506+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:41:28 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:41:28.121429+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:41:28.140135+00:00", "level": "INFO", "logger": "app.modules.provenance", "message": "Operation logged: type=image_generation, module=world_guide_generator, status=success, duration=54471ms"} {"timestamp": "2026-05-28T05:41:28.196972+00:00", "level": "INFO", "logger": "app.services.scene_reference_service", "message": "Loaded 25 existing reference images for 53 entities"} {"timestamp": "2026-05-28T05:41:28.197102+00:00", "level": "INFO", "logger": "app.services.scene_validation_service", "message": "Skipping legacy scene image validation — scene_lvm_validation_mode=off (LVM 2 disabled by cost policy; only mode='full' enables it)."} {"timestamp": "2026-05-28T05:41:28.239547+00:00", "level": "INFO", "logger": "app.services.scene_reference_service", "message": "Loaded outfit + composite + state_variant refs into scene_ref_image_map"} {"timestamp": "2026-05-28T05:41:28.318317+00:00", "level": "ERROR", "logger": "asyncio", "message": "Task was destroyed but it is pending!\ntask: wait_for=>"} {"timestamp": "2026-05-28T05:41:28.318430+00:00", "level": "ERROR", "logger": "asyncio", "message": "Task was destroyed but it is pending!\ntask: wait_for=>"} {"timestamp": "2026-05-28T05:41:28.318475+00:00", "level": "ERROR", "logger": "asyncio", "message": "Task was destroyed but it is pending!\ntask: wait_for=>"} {"timestamp": "2026-05-28T05:41:28.333875+00:00", "level": "INFO", "logger": "app.services.scene_checkpoint_loaders", "message": "background_render: loaded 22 shot background mappings"} {"timestamp": "2026-05-28T05:41:28.334230+00:00", "level": "INFO", "logger": "app.services.scene_image_service", "message": "Scene generation: 50 scenes in 9 batches (max_concurrent=15)"} {"timestamp": "2026-05-28T05:41:28.342423+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 1 Shot 1: state_variant=['C06']"} {"timestamp": "2026-05-28T05:41:28.366974+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 0: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:41:28.390399+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 4: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:41:28.406795+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 5: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:41:28.415609+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 2: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:41:28.424190+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 8: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:41:28.432365+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 8 Shot 2: background_chain ref injected"} {"timestamp": "2026-05-28T05:41:28.440751+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 5 Shot 1: background_chain ref injected"} {"timestamp": "2026-05-28T05:41:28.456391+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 9: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:41:28.458324+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 16 Shot 3: background_chain ref injected"} {"timestamp": "2026-05-28T05:41:28.458588+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 24: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:41:28.466495+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 32: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:41:28.466857+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 11: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:41:28.467258+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 35: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:41:28.467473+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 6: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:41:28.467682+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 43: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:41:28.467874+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 36: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:41:28.468025+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: Code Alpha at the Crime Scene"} {"timestamp": "2026-05-28T05:41:28.472359+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 불안감이 감도는 인천 외곽 옥탑방 전경"} {"timestamp": "2026-05-28T05:41:28.472484+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 해안도로를 달리는 수리영"} {"timestamp": "2026-05-28T05:41:28.474106+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 26: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:41:28.474306+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 상처 입고 숲을 도망치는 남자"} {"timestamp": "2026-05-28T05:41:28.480476+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 가로등 불빛 아래의 끔찍한 갈증"} {"timestamp": "2026-05-28T05:41:28.487517+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 40: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:41:28.487927+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 위협적인 맹견"} {"timestamp": "2026-05-28T05:41:28.488138+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 바다를 보며 멍하니 앉아있는 수리영"} {"timestamp": "2026-05-28T05:41:28.489732+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 어두운 화면을 보며 깊어지는 수리영의 불안"} {"timestamp": "2026-05-28T05:41:28.491350+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 엇갈린 만남"} {"timestamp": "2026-05-28T05:41:28.503943+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 다급하게 자전거를 타고 달리는 수리영"} {"timestamp": "2026-05-28T05:41:28.505802+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: TV 뉴스를 보며 긴장하는 민숙"} {"timestamp": "2026-05-28T05:41:28.519096+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 적막한 망망대해의 작은 어선"} {"timestamp": "2026-05-28T05:41:28.519376+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 위치 추적을 압박하는 스마트폰 화면"} {"timestamp": "2026-05-28T05:41:28.531681+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 수리영이 인우의 배에 탑승을 요청함"} 14:41:28 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:41:28.538877+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:41:40 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:41:40.036927+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:41:40 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:41:40.040521+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:41:40.041660+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 좌표 확인 후 지도 챙기기"} {"timestamp": "2026-05-28T05:41:44.201921+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=20 shot=3"} {"timestamp": "2026-05-28T05:41:44.211238+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 29 Shot 1: background_chain ref injected"} {"timestamp": "2026-05-28T05:41:44.211331+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 45: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:41:44.211732+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 조타기 위에서 멈춘 저지"} {"timestamp": "2026-05-28T05:41:45.264472+00:00", "level": "WARNING", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene T2I blocked (attempt 1): SAFETY"} 14:41:45 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:41:45.270954+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} {"timestamp": "2026-05-28T05:41:47.904497+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=22 shot=2"} {"timestamp": "2026-05-28T05:41:48.291543+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=8 shot=2"} {"timestamp": "2026-05-28T05:41:53.167148+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=1 shot=1"} {"timestamp": "2026-05-28T05:41:53.518828+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=6 shot=1"} {"timestamp": "2026-05-28T05:41:53.845966+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=28 shot=1"} {"timestamp": "2026-05-28T05:41:55.670392+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=16 shot=3"} {"timestamp": "2026-05-28T05:41:55.891822+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=7 shot=1"} {"timestamp": "2026-05-28T05:41:56.168199+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=26 shot=5"} {"timestamp": "2026-05-28T05:41:59.832659+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=3 shot=2"} {"timestamp": "2026-05-28T05:41:59.993703+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=5 shot=1"} {"timestamp": "2026-05-28T05:42:00.451138+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=15 shot=1"} {"timestamp": "2026-05-28T05:42:01.311353+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=29 shot=1"} {"timestamp": "2026-05-28T05:42:01.497075+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=4 shot=1"} 14:42:11 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:42:11.674567+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:42:11 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:42:11.676510+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:42:11.679413+00:00", "level": "INFO", "logger": "app.modules.prompt_sanitizer", "message": "Prompt sanitized: attempt=1, strategy=film_previs, semantic_mode=pose_locked, changes=거절 원인이 될 수 있는 직접적인 목 물기, 턱이 살을 문 상태, 피부/살 묘사, 신체적 immobilization 및 비동의적 폭력 표현을 제거했습니다. 두 인물의 위치와 저시점"} {"timestamp": "2026-05-28T05:42:11.679588+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Sanitized scene prompt (strategy: film_previs)"} {"timestamp": "2026-05-28T05:42:12.797438+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=23 shot=3"} {"timestamp": "2026-05-28T05:42:50.473036+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=2 shot=1"} {"timestamp": "2026-05-28T05:42:51.914924+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 2 Shot 3: state_variant=['C07']"} {"timestamp": "2026-05-28T05:42:51.923686+00:00", "level": "INFO", "logger": "app.services.scene_reference_service", "message": "Scene 1 Shot 3: prev-shot background ref injected (remove: ['한국인 남자'], loc_id: L01, role: previous_shot_same_room)"} {"timestamp": "2026-05-28T05:42:51.945352+00:00", "level": "INFO", "logger": "app.services.scene_reference_service", "message": "Scene 7 Shot 5: prev-shot background ref injected (remove: ['로트와일러'], loc_id: L07, role: previous_shot_continuity)"} {"timestamp": "2026-05-28T05:42:51.945459+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 1 Shot 3: prev_shot_ref injected (no chain bg for this shot, role=previous_shot_same_room)"} {"timestamp": "2026-05-28T05:42:51.968921+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 7 Shot 5: prev_shot_ref injected (no chain bg for this shot, role=previous_shot_continuity)"} {"timestamp": "2026-05-28T05:42:51.969320+00:00", "level": "INFO", "logger": "app.services.scene_reference_service", "message": "Scene 2 Shot 3: prev-shot background ref injected (remove: none, loc_id: L02, role: previous_shot_same_frame_zoomed)"} {"timestamp": "2026-05-28T05:42:51.977372+00:00", "level": "INFO", "logger": "app.services.scene_reference_service", "message": "Scene 9 Shot 1: prev-shot background ref injected (remove: none, loc_id: L06, role: previous_shot_continuity)"} {"timestamp": "2026-05-28T05:42:51.984866+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 1: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:42:52.007466+00:00", "level": "INFO", "logger": "app.services.scene_reference_service", "message": "Scene 10 Shot 1: prev-shot background ref injected (remove: none, loc_id: L04, role: previous_shot_continuity)"} {"timestamp": "2026-05-28T05:42:52.015203+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 8 Shot 4: chain_bg ref SKIPPED — close framing detected (framing_scale='close')"} {"timestamp": "2026-05-28T05:42:52.023063+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 5 Shot 7: background_chain ref injected"} {"timestamp": "2026-05-28T05:42:52.023142+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 10: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:42:52.023224+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 2 Shot 3: prev_shot_ref injected (no chain bg for this shot, role=previous_shot_same_frame_zoomed)"} {"timestamp": "2026-05-28T05:42:52.023500+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 12 Shot 5: background_chain ref injected"} {"timestamp": "2026-05-28T05:42:52.023547+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 9 Shot 1: prev_shot_ref injected (no chain bg for this shot, role=previous_shot_continuity)"} {"timestamp": "2026-05-28T05:42:52.023614+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 29 Shot 8: state_variant=['C01']"} {"timestamp": "2026-05-28T05:42:52.023666+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 21 Shot 6: chain_bg ref SKIPPED — close framing detected (framing_scale='close')"} {"timestamp": "2026-05-28T05:42:52.023770+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 검은 인영의 습격"} {"timestamp": "2026-05-28T05:42:52.040088+00:00", "level": "INFO", "logger": "app.services.scene_reference_service", "message": "Scene 30 Shot 1: prev-shot background ref injected (remove: none, loc_id: 4d400ea3-8a5c-43f3-b519-0e53d068ee58, role: previous_shot_continuity)"} {"timestamp": "2026-05-28T05:42:52.040505+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 29 Shot 4: chain_bg ref SKIPPED — close framing detected (framing_scale='close')"} {"timestamp": "2026-05-28T05:42:52.040567+00:00", "level": "INFO", "logger": "app.services.scene_reference_service", "message": "Scene 15 Shot 4: prev-shot background ref injected (remove: none, loc_id: L11, role: previous_shot_continuity)"} {"timestamp": "2026-05-28T05:42:52.040597+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 10 Shot 1: prev_shot_ref injected (no chain bg for this shot, role=previous_shot_continuity)"} {"timestamp": "2026-05-28T05:42:52.040717+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 41: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:42:52.040927+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 12: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:42:52.040997+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 44: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:42:52.041045+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 7: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:42:52.041203+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 3: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:42:52.041397+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 연락이 닿지 않는 엄마를 걱정하는 수리영"} {"timestamp": "2026-05-28T05:42:52.049843+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 17: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:42:52.050240+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 13: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:42:52.050481+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 33: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:42:52.050723+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 29 Shot 8: chain_bg ref SKIPPED — close framing detected (framing_scale='close')"} {"timestamp": "2026-05-28T05:42:52.051056+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 30 Shot 1: prev_shot_ref injected (no chain bg for this shot, role=previous_shot_continuity)"} {"timestamp": "2026-05-28T05:42:52.051158+00:00", "level": "INFO", "logger": "app.services.scene_reference_service", "message": "Scene 29 Shot 4: prev-shot background ref injected (remove: ['인우'], loc_id: L20, role: previous_shot_same_frame_zoomed)"} {"timestamp": "2026-05-28T05:42:52.051197+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 15 Shot 4: prev_shot_ref injected (no chain bg for this shot, role=previous_shot_continuity)"} {"timestamp": "2026-05-28T05:42:52.051309+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 14: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:42:52.051501+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 일방적인 이별과 알 수 없는 바다로의 발걸음"} {"timestamp": "2026-05-28T05:42:52.053012+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 연락 닿지 않는 엄마에 대한 불안감"} {"timestamp": "2026-05-28T05:42:52.054607+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 사진을 확인하고 굳어버린 인우의 부정"} {"timestamp": "2026-05-28T05:42:52.058442+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 가로등 불빛 아래 드러난 잔혹한 흡혈"} {"timestamp": "2026-05-28T05:42:52.076361+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 방바닥의 핏자국과 시신이 숨겨진 커튼"} {"timestamp": "2026-05-28T05:42:52.084396+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 급박한 야간 해안도로 질주"} {"timestamp": "2026-05-28T05:42:52.091408+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 47: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:42:52.091851+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 살인사건 사진을 확인하며 경악하는 수리영"} 14:42:52 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:42:52.093982+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 48: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:42:52.094179+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 29 Shot 4: prev_shot_ref injected (no chain bg for this shot, role=previous_shot_same_frame_zoomed)"} {"timestamp": "2026-05-28T05:42:52.094355+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 25: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:42:52.094534+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 낯선 남자의 은밀한 옥탑방 침입"} {"timestamp": "2026-05-28T05:42:52.105457+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 수리영의 실신"} {"timestamp": "2026-05-28T05:42:52.113871+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} {"timestamp": "2026-05-28T05:42:52.114863+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 46: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:42:52.115084+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 적막한 황혼의 바다 풍경"} {"timestamp": "2026-05-28T05:42:52.120965+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 혜수를 남겨두고 안개 낀 어두운 도로를 향해 달려가는 수리영"} 14:42:52 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:42:52.129114+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:43:00 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:43:00.864859+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:43:00 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:43:00.869219+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:43:00.870522+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 수리영의 시선에 잡힌 민숙 손목의 선명한 붉은 표식"} 14:43:02 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:43:02.110595+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:43:02 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:43:02.112901+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:43:02.115798+00:00", "level": "WARNING", "logger": "app.modules.llm.llm_client", "message": "call_text[prompt_translation] Tier 1 returned empty, trying sanitized input"} 14:43:02 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:43:02.121991+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} {"timestamp": "2026-05-28T05:43:08.283218+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=15 shot=4"} 14:43:08 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:43:08.736477+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:43:08 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:43:08.737256+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:43:08.737587+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 사진 속 소녀가 엄마임을 밝힘"} {"timestamp": "2026-05-28T05:43:08.767397+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=26 shot=6"} {"timestamp": "2026-05-28T05:43:09.267343+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=30 shot=1"} {"timestamp": "2026-05-28T05:43:10.290265+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=7 shot=5"} {"timestamp": "2026-05-28T05:43:11.117956+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=12 shot=5"} {"timestamp": "2026-05-28T05:43:14.776213+00:00", "level": "WARNING", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene T2I blocked (attempt 1): SAFETY"} 14:43:14 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:43:14.782039+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} {"timestamp": "2026-05-28T05:43:17.260500+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=9 shot=1"} {"timestamp": "2026-05-28T05:43:17.701427+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=8 shot=4"} {"timestamp": "2026-05-28T05:43:20.516734+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=10 shot=1"} {"timestamp": "2026-05-28T05:43:20.547665+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=29 shot=8"} {"timestamp": "2026-05-28T05:43:20.991302+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=21 shot=6"} {"timestamp": "2026-05-28T05:43:23.660831+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=28 shot=5"} {"timestamp": "2026-05-28T05:43:26.856607+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=1 shot=3"} {"timestamp": "2026-05-28T05:43:28.143431+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=5 shot=7"} 14:43:38 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:43:38.546196+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:43:38 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:43:38.549054+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:43:38.553232+00:00", "level": "INFO", "logger": "app.modules.prompt_sanitizer", "message": "Prompt sanitized: attempt=1, strategy=film_previs, semantic_mode=immobilized, changes=명시적 목 물기, 턱이 살을 물고 있는 지속 동작, 선명한 피, 중상/신체적 수동성 등 거절 가능성이 높은 직접 폭력·고어 요소를 제거했습니다. 동일한 근접 구도와 어두운 골목, "} {"timestamp": "2026-05-28T05:43:38.553471+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Sanitized scene prompt (strategy: film_previs)"} {"timestamp": "2026-05-28T05:43:39.213814+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=29 shot=4"} {"timestamp": "2026-05-28T05:44:06.902906+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=2 shot=3"} {"timestamp": "2026-05-28T05:44:08.276242+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 12 Shot 7: state_variant=['C05']"} {"timestamp": "2026-05-28T05:44:08.291667+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 12 Shot 7: background_chain ref injected"} {"timestamp": "2026-05-28T05:44:08.299686+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 15: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:44:08.299961+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 18: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:44:08.324443+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 37: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:44:08.324923+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 창문에 투사된 잔혹한 그림자"} {"timestamp": "2026-05-28T05:44:08.325144+00:00", "level": "INFO", "logger": "app.services.scene_reference_service", "message": "Scene 30 Shot 3: prev-shot background ref injected (remove: none, loc_id: L18, role: previous_shot_continuity)"} {"timestamp": "2026-05-28T05:44:08.325196+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 19 Shot 3: background_chain ref injected"} {"timestamp": "2026-05-28T05:44:08.325293+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 21 Shot 8: background_chain ref injected"} {"timestamp": "2026-05-28T05:44:08.325363+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 어머니 민숙의 참혹한 죽음을 발견함"} {"timestamp": "2026-05-28T05:44:08.338190+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 폭우 속의 질주"} {"timestamp": "2026-05-28T05:44:08.340503+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 30 Shot 3: prev_shot_ref injected (no chain bg for this shot, role=previous_shot_continuity)"} {"timestamp": "2026-05-28T05:44:08.340674+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 30: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:44:08.340932+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 34: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:44:08.341075+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 49: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:44:08.341299+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: CCTV 카메라 확인"} {"timestamp": "2026-05-28T05:44:08.353122+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 안개 속으로 진입하는 뱃머리"} 14:44:08 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:44:08.360787+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} {"timestamp": "2026-05-28T05:44:08.364046+00:00", "level": "ERROR", "logger": "app.services.scene_generation_coordinator", "message": "Variation generation thread error: NameError(\"name 'AppError' is not defined\")\nTraceback (most recent call last):\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1663, in _generate_variation_in_loop\n pipe_result = generate_and_validate_scene(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/pipeline/scene_image_pipeline.py\", line 254, in generate_and_validate_scene\n img_1, _ = gemini_client.generate_image(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/llm/gemini_image_client.py\", line 184, in generate_image\n reserve_current_call(source=\"gemini_image_client.urlopen\")\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 125, in reserve_current_call\n budget.reserve(source=source)\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 66, in reserve\n raise ImageCallBudgetExceeded(\napp.core.image_call_budget.ImageCallBudgetExceeded: image_call_budget exceeded — cap=60, used=60, denied source='gemini_image_client.urlopen'\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1036, in _await_variation_results\n result = future.result()\n ^^^^^^^^^^^^^^^\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py\", line 449, in result\n return self.__get_result()\n ^^^^^^^^^^^^^^^^^^^\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py\", line 401, in __get_result\n raise self._exception\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/thread.py\", line 59, in run\n result = self.fn(*self.args, **self.kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 183, in _wrapped\n return run_with_budget(captured, fn, *args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 158, in run_with_budget\n return fn(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1742, in _generate_variation_in_loop\n except AppError:\n ^^^^^^^^\nNameError: name 'AppError' is not defined. Did you mean: 'EOFError'?\n"} {"timestamp": "2026-05-28T05:44:08.364318+00:00", "level": "ERROR", "logger": "app.services.scene_generation_coordinator", "message": "Variation generation thread error: NameError(\"name 'AppError' is not defined\")\nTraceback (most recent call last):\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1663, in _generate_variation_in_loop\n pipe_result = generate_and_validate_scene(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/pipeline/scene_image_pipeline.py\", line 254, in generate_and_validate_scene\n img_1, _ = gemini_client.generate_image(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/llm/gemini_image_client.py\", line 184, in generate_image\n reserve_current_call(source=\"gemini_image_client.urlopen\")\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 125, in reserve_current_call\n budget.reserve(source=source)\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 66, in reserve\n raise ImageCallBudgetExceeded(\napp.core.image_call_budget.ImageCallBudgetExceeded: image_call_budget exceeded — cap=60, used=60, denied source='gemini_image_client.urlopen'\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1036, in _await_variation_results\n result = future.result()\n ^^^^^^^^^^^^^^^\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py\", line 449, in result\n return self.__get_result()\n ^^^^^^^^^^^^^^^^^^^\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py\", line 401, in __get_result\n raise self._exception\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/thread.py\", line 59, in run\n result = self.fn(*self.args, **self.kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 183, in _wrapped\n return run_with_budget(captured, fn, *args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 158, in run_with_budget\n return fn(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1742, in _generate_variation_in_loop\n except AppError:\n ^^^^^^^^\nNameError: name 'AppError' is not defined. Did you mean: 'EOFError'?\n"} 14:44:18 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:44:18.750370+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:44:18 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:44:18.752891+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:44:18.755586+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 충격적인 엄마의 마지막 GPS 좌표 확인"} {"timestamp": "2026-05-28T05:44:18.800378+00:00", "level": "ERROR", "logger": "app.services.scene_generation_coordinator", "message": "Variation generation thread error: NameError(\"name 'AppError' is not defined\")\nTraceback (most recent call last):\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1663, in _generate_variation_in_loop\n pipe_result = generate_and_validate_scene(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/pipeline/scene_image_pipeline.py\", line 254, in generate_and_validate_scene\n img_1, _ = gemini_client.generate_image(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/llm/gemini_image_client.py\", line 184, in generate_image\n reserve_current_call(source=\"gemini_image_client.urlopen\")\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 125, in reserve_current_call\n budget.reserve(source=source)\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 66, in reserve\n raise ImageCallBudgetExceeded(\napp.core.image_call_budget.ImageCallBudgetExceeded: image_call_budget exceeded — cap=60, used=60, denied source='gemini_image_client.urlopen'\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1036, in _await_variation_results\n result = future.result()\n ^^^^^^^^^^^^^^^\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py\", line 449, in result\n return self.__get_result()\n ^^^^^^^^^^^^^^^^^^^\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py\", line 401, in __get_result\n raise self._exception\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/thread.py\", line 59, in run\n result = self.fn(*self.args, **self.kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 183, in _wrapped\n return run_with_budget(captured, fn, *args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 158, in run_with_budget\n return fn(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1742, in _generate_variation_in_loop\n except AppError:\n ^^^^^^^^\nNameError: name 'AppError' is not defined. Did you mean: 'EOFError'?\n"} {"timestamp": "2026-05-28T05:44:26.467615+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=24 shot=2"} {"timestamp": "2026-05-28T05:44:36.545816+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene LVM skipped: reason=off mode=off scene=10 shot=4"} {"timestamp": "2026-05-28T05:44:37.818482+00:00", "level": "WARNING", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Scene T2I blocked (attempt 1): SAFETY"} 14:44:37 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gpt-5.5; provider = openai {"timestamp": "2026-05-28T05:44:37.824712+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gpt-5.5; provider = openai"} 14:45:00 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:45:00.794610+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:45:00 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=openai/gpt-5.5) 200 OK {"timestamp": "2026-05-28T05:45:00.795761+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=openai/gpt-5.5)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:45:00.798720+00:00", "level": "INFO", "logger": "app.modules.prompt_sanitizer", "message": "Prompt sanitized: attempt=1, strategy=film_previs, semantic_mode=immobilized, changes=안전 거절 가능성이 높은 요소인 ‘dead / lifeless’, 명시적 사망 상태, ‘blood / black-red blood’ 및 시신처럼 보이는 묘사를 제거했습니다. 시각적"} {"timestamp": "2026-05-28T05:45:00.798869+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Sanitized scene prompt (strategy: film_previs)"} {"timestamp": "2026-05-28T05:45:00.825624+00:00", "level": "ERROR", "logger": "app.services.scene_generation_coordinator", "message": "Variation generation thread error: NameError(\"name 'AppError' is not defined\")\nTraceback (most recent call last):\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1663, in _generate_variation_in_loop\n pipe_result = generate_and_validate_scene(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/pipeline/scene_image_pipeline.py\", line 254, in generate_and_validate_scene\n img_1, _ = gemini_client.generate_image(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/llm/gemini_image_client.py\", line 184, in generate_image\n reserve_current_call(source=\"gemini_image_client.urlopen\")\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 125, in reserve_current_call\n budget.reserve(source=source)\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 66, in reserve\n raise ImageCallBudgetExceeded(\napp.core.image_call_budget.ImageCallBudgetExceeded: image_call_budget exceeded — cap=60, used=60, denied source='gemini_image_client.urlopen'\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1036, in _await_variation_results\n result = future.result()\n ^^^^^^^^^^^^^^^\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py\", line 449, in result\n return self.__get_result()\n ^^^^^^^^^^^^^^^^^^^\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py\", line 401, in __get_result\n raise self._exception\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/thread.py\", line 59, in run\n result = self.fn(*self.args, **self.kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 183, in _wrapped\n return run_with_budget(captured, fn, *args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 158, in run_with_budget\n return fn(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1742, in _generate_variation_in_loop\n except AppError:\n ^^^^^^^^\nNameError: name 'AppError' is not defined. Did you mean: 'EOFError'?\n"} {"timestamp": "2026-05-28T05:45:00.928698+00:00", "level": "ERROR", "logger": "app.services.scene_image_service", "message": "Scene 18 still 241a40e3: all variations failed (scene_index=18); GENERIC_EXCEPTION: NameError: name 'AppError' is not defined"} {"timestamp": "2026-05-28T05:45:00.929086+00:00", "level": "ERROR", "logger": "app.services.scene_image_service", "message": "Scene 30 still 3819f6fa: all variations failed (scene_index=30); GENERIC_EXCEPTION: NameError: name 'AppError' is not defined"} {"timestamp": "2026-05-28T05:45:00.929433+00:00", "level": "ERROR", "logger": "app.services.scene_image_service", "message": "Scene 34 still da5ac2fd: all variations failed (scene_index=34); GENERIC_EXCEPTION: NameError: name 'AppError' is not defined"} {"timestamp": "2026-05-28T05:45:01.025359+00:00", "level": "ERROR", "logger": "app.services.scene_image_service", "message": "Scene 49 still 4963afca: all variations failed (scene_index=49); GENERIC_EXCEPTION: NameError: name 'AppError' is not defined"} {"timestamp": "2026-05-28T05:45:01.027972+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 12 Shot 11: state_variant=['C05']"} {"timestamp": "2026-05-28T05:45:01.043128+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 19 Shot 4: chain_bg ref SKIPPED — close framing detected (framing_scale='close')"} {"timestamp": "2026-05-28T05:45:01.043900+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 12 Shot 11: background_chain ref injected"} {"timestamp": "2026-05-28T05:45:01.044005+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 31: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:45:01.044103+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 19: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:45:01.044320+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: CCTV 위치 확인 후 다급한 도움 요청"} {"timestamp": "2026-05-28T05:45:01.053920+00:00", "level": "INFO", "logger": "app.services.scene_reference_service", "message": "Scene 11 Shot 1: prev-shot background ref injected (remove: none, loc_id: L04, role: previous_shot_continuity)"} {"timestamp": "2026-05-28T05:45:01.053978+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 11 Shot 1: prev_shot_ref injected (no chain bg for this shot, role=previous_shot_continuity)"} {"timestamp": "2026-05-28T05:45:01.054044+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 16: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:45:01.062483+00:00", "level": "INFO", "logger": "app.services.scene_reference_service", "message": "Scene 13 Shot 5: prev-shot background ref injected (remove: none, loc_id: L04, role: previous_shot_same_frame_zoomed)"} {"timestamp": "2026-05-28T05:45:01.062825+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 불길한 악취와 마주한 옥탑 계단"} {"timestamp": "2026-05-28T05:45:01.070262+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 13 Shot 5: prev_shot_ref injected (no chain bg for this shot, role=previous_shot_same_frame_zoomed)"} {"timestamp": "2026-05-28T05:45:01.070498+00:00", "level": "ERROR", "logger": "app.services.scene_generation_coordinator", "message": "Variation generation thread error: NameError(\"name 'AppError' is not defined\")\nTraceback (most recent call last):\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1663, in _generate_variation_in_loop\n pipe_result = generate_and_validate_scene(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/pipeline/scene_image_pipeline.py\", line 254, in generate_and_validate_scene\n img_1, _ = gemini_client.generate_image(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/llm/gemini_image_client.py\", line 184, in generate_image\n reserve_current_call(source=\"gemini_image_client.urlopen\")\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 125, in reserve_current_call\n budget.reserve(source=source)\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 66, in reserve\n raise ImageCallBudgetExceeded(\napp.core.image_call_budget.ImageCallBudgetExceeded: image_call_budget exceeded — cap=60, used=60, denied source='gemini_image_client.urlopen'\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1036, in _await_variation_results\n result = future.result()\n ^^^^^^^^^^^^^^^\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py\", line 449, in result\n return self.__get_result()\n ^^^^^^^^^^^^^^^^^^^\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py\", line 401, in __get_result\n raise self._exception\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/thread.py\", line 59, in run\n result = self.fn(*self.args, **self.kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 183, in _wrapped\n return run_with_budget(captured, fn, *args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 158, in run_with_budget\n return fn(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1742, in _generate_variation_in_loop\n except AppError:\n ^^^^^^^^\nNameError: name 'AppError' is not defined. Did you mean: 'EOFError'?\n"} {"timestamp": "2026-05-28T05:45:01.070798+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 21: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:45:01.071027+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 경악하는 혜수"} {"timestamp": "2026-05-28T05:45:01.082893+00:00", "level": "ERROR", "logger": "app.services.scene_generation_coordinator", "message": "Variation generation thread error: NameError(\"name 'AppError' is not defined\")\nTraceback (most recent call last):\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1663, in _generate_variation_in_loop\n pipe_result = generate_and_validate_scene(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/pipeline/scene_image_pipeline.py\", line 254, in generate_and_validate_scene\n img_1, _ = gemini_client.generate_image(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/llm/gemini_image_client.py\", line 184, in generate_image\n reserve_current_call(source=\"gemini_image_client.urlopen\")\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 125, in reserve_current_call\n budget.reserve(source=source)\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 66, in reserve\n raise ImageCallBudgetExceeded(\napp.core.image_call_budget.ImageCallBudgetExceeded: image_call_budget exceeded — cap=60, used=60, denied source='gemini_image_client.urlopen'\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1036, in _await_variation_results\n result = future.result()\n ^^^^^^^^^^^^^^^\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py\", line 449, in result\n return self.__get_result()\n ^^^^^^^^^^^^^^^^^^^\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py\", line 401, in __get_result\n raise self._exception\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/thread.py\", line 59, in run\n result = self.fn(*self.args, **self.kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 183, in _wrapped\n return run_with_budget(captured, fn, *args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 158, in run_with_budget\n return fn(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1742, in _generate_variation_in_loop\n except AppError:\n ^^^^^^^^\nNameError: name 'AppError' is not defined. Did you mean: 'EOFError'?\n"} 14:45:01 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:45:01.083489+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} {"timestamp": "2026-05-28T05:45:01.083969+00:00", "level": "ERROR", "logger": "app.services.scene_generation_coordinator", "message": "Variation generation thread error: NameError(\"name 'AppError' is not defined\")\nTraceback (most recent call last):\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1663, in _generate_variation_in_loop\n pipe_result = generate_and_validate_scene(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/pipeline/scene_image_pipeline.py\", line 254, in generate_and_validate_scene\n img_1, _ = gemini_client.generate_image(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/llm/gemini_image_client.py\", line 184, in generate_image\n reserve_current_call(source=\"gemini_image_client.urlopen\")\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 125, in reserve_current_call\n budget.reserve(source=source)\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 66, in reserve\n raise ImageCallBudgetExceeded(\napp.core.image_call_budget.ImageCallBudgetExceeded: image_call_budget exceeded — cap=60, used=60, denied source='gemini_image_client.urlopen'\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1036, in _await_variation_results\n result = future.result()\n ^^^^^^^^^^^^^^^\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py\", line 449, in result\n return self.__get_result()\n ^^^^^^^^^^^^^^^^^^^\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py\", line 401, in __get_result\n raise self._exception\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/thread.py\", line 59, in run\n result = self.fn(*self.args, **self.kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 183, in _wrapped\n return run_with_budget(captured, fn, *args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 158, in run_with_budget\n return fn(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1742, in _generate_variation_in_loop\n except AppError:\n ^^^^^^^^\nNameError: name 'AppError' is not defined. Did you mean: 'EOFError'?\n"} 14:45:09 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:45:09.314150+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:45:09 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:45:09.315976+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:45:09.318039+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 기이한 환영과 공포"} {"timestamp": "2026-05-28T05:45:09.347718+00:00", "level": "ERROR", "logger": "app.services.scene_generation_coordinator", "message": "Variation generation thread error: NameError(\"name 'AppError' is not defined\")\nTraceback (most recent call last):\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1663, in _generate_variation_in_loop\n pipe_result = generate_and_validate_scene(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/pipeline/scene_image_pipeline.py\", line 254, in generate_and_validate_scene\n img_1, _ = gemini_client.generate_image(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/llm/gemini_image_client.py\", line 184, in generate_image\n reserve_current_call(source=\"gemini_image_client.urlopen\")\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 125, in reserve_current_call\n budget.reserve(source=source)\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 66, in reserve\n raise ImageCallBudgetExceeded(\napp.core.image_call_budget.ImageCallBudgetExceeded: image_call_budget exceeded — cap=60, used=60, denied source='gemini_image_client.urlopen'\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1036, in _await_variation_results\n result = future.result()\n ^^^^^^^^^^^^^^^\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py\", line 449, in result\n return self.__get_result()\n ^^^^^^^^^^^^^^^^^^^\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py\", line 401, in __get_result\n raise self._exception\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/thread.py\", line 59, in run\n result = self.fn(*self.args, **self.kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 183, in _wrapped\n return run_with_budget(captured, fn, *args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 158, in run_with_budget\n return fn(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1742, in _generate_variation_in_loop\n except AppError:\n ^^^^^^^^\nNameError: name 'AppError' is not defined. Did you mean: 'EOFError'?\n"} {"timestamp": "2026-05-28T05:45:09.348757+00:00", "level": "ERROR", "logger": "app.services.scene_image_service", "message": "Scene 16 still 2807b6de: all variations failed (scene_index=16); GENERIC_EXCEPTION: NameError: name 'AppError' is not defined"} {"timestamp": "2026-05-28T05:45:09.349236+00:00", "level": "ERROR", "logger": "app.services.scene_image_service", "message": "Scene 19 still 511c2148: all variations failed (scene_index=19); GENERIC_EXCEPTION: NameError: name 'AppError' is not defined"} {"timestamp": "2026-05-28T05:45:09.349665+00:00", "level": "ERROR", "logger": "app.services.scene_image_service", "message": "Scene 21 still e5b2b39a: all variations failed (scene_index=21); GENERIC_EXCEPTION: NameError: name 'AppError' is not defined"} {"timestamp": "2026-05-28T05:45:09.350105+00:00", "level": "ERROR", "logger": "app.services.scene_image_service", "message": "Scene 31 still 6438c531: all variations failed (scene_index=31); GENERIC_EXCEPTION: NameError: name 'AppError' is not defined"} {"timestamp": "2026-05-28T05:45:09.372451+00:00", "level": "INFO", "logger": "app.services.scene_reference_service", "message": "Scene 13 Shot 4: prev-shot background ref injected (remove: none, loc_id: 137e1376-2f00-4bf0-a7b4-be77fa1ef87e, role: previous_shot_continuity)"} {"timestamp": "2026-05-28T05:45:09.372551+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 13 Shot 4: prev_shot_ref injected (no chain bg for this shot, role=previous_shot_continuity)"} {"timestamp": "2026-05-28T05:45:09.372743+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 20: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:45:09.384571+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 14 Shot 3: background_chain ref injected"} {"timestamp": "2026-05-28T05:45:09.384682+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 넋 나간 수리영을 붙잡는 혜수"} {"timestamp": "2026-05-28T05:45:09.399491+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 22: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:45:09.400365+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 시신이 감쪽같이 치워진 방"} {"timestamp": "2026-05-28T05:45:09.410748+00:00", "level": "ERROR", "logger": "app.services.scene_generation_coordinator", "message": "Variation generation thread error: NameError(\"name 'AppError' is not defined\")\nTraceback (most recent call last):\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1663, in _generate_variation_in_loop\n pipe_result = generate_and_validate_scene(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/pipeline/scene_image_pipeline.py\", line 254, in generate_and_validate_scene\n img_1, _ = gemini_client.generate_image(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/llm/gemini_image_client.py\", line 184, in generate_image\n reserve_current_call(source=\"gemini_image_client.urlopen\")\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 125, in reserve_current_call\n budget.reserve(source=source)\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 66, in reserve\n raise ImageCallBudgetExceeded(\napp.core.image_call_budget.ImageCallBudgetExceeded: image_call_budget exceeded — cap=60, used=60, denied source='gemini_image_client.urlopen'\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1036, in _await_variation_results\n result = future.result()\n ^^^^^^^^^^^^^^^\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py\", line 449, in result\n return self.__get_result()\n ^^^^^^^^^^^^^^^^^^^\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py\", line 401, in __get_result\n raise self._exception\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/thread.py\", line 59, in run\n result = self.fn(*self.args, **self.kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 183, in _wrapped\n return run_with_budget(captured, fn, *args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 158, in run_with_budget\n return fn(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1742, in _generate_variation_in_loop\n except AppError:\n ^^^^^^^^\nNameError: name 'AppError' is not defined. Did you mean: 'EOFError'?\n"} {"timestamp": "2026-05-28T05:45:09.410974+00:00", "level": "ERROR", "logger": "app.services.scene_generation_coordinator", "message": "Variation generation thread error: NameError(\"name 'AppError' is not defined\")\nTraceback (most recent call last):\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1663, in _generate_variation_in_loop\n pipe_result = generate_and_validate_scene(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/pipeline/scene_image_pipeline.py\", line 254, in generate_and_validate_scene\n img_1, _ = gemini_client.generate_image(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/llm/gemini_image_client.py\", line 184, in generate_image\n reserve_current_call(source=\"gemini_image_client.urlopen\")\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 125, in reserve_current_call\n budget.reserve(source=source)\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 66, in reserve\n raise ImageCallBudgetExceeded(\napp.core.image_call_budget.ImageCallBudgetExceeded: image_call_budget exceeded — cap=60, used=60, denied source='gemini_image_client.urlopen'\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1036, in _await_variation_results\n result = future.result()\n ^^^^^^^^^^^^^^^\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py\", line 449, in result\n return self.__get_result()\n ^^^^^^^^^^^^^^^^^^^\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py\", line 401, in __get_result\n raise self._exception\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/thread.py\", line 59, in run\n result = self.fn(*self.args, **self.kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 183, in _wrapped\n return run_with_budget(captured, fn, *args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 158, in run_with_budget\n return fn(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1742, in _generate_variation_in_loop\n except AppError:\n ^^^^^^^^\nNameError: name 'AppError' is not defined. Did you mean: 'EOFError'?\n"} {"timestamp": "2026-05-28T05:45:09.411684+00:00", "level": "ERROR", "logger": "app.services.scene_image_service", "message": "Scene 20 still e45b3bce: all variations failed (scene_index=20); GENERIC_EXCEPTION: NameError: name 'AppError' is not defined"} {"timestamp": "2026-05-28T05:45:09.412080+00:00", "level": "ERROR", "logger": "app.services.scene_image_service", "message": "Scene 22 still 28e5aa77: all variations failed (scene_index=22); GENERIC_EXCEPTION: NameError: name 'AppError' is not defined"} {"timestamp": "2026-05-28T05:45:09.427450+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 14 Shot 7: background_chain ref injected"} {"timestamp": "2026-05-28T05:45:09.427568+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 23: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:45:09.442785+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 18 Shot 8: background_chain ref injected"} {"timestamp": "2026-05-28T05:45:09.443244+00:00", "level": "INFO", "logger": "app.services.scene_reference_service", "message": "Scene 17 Shot 1: prev-shot background ref injected (remove: none, loc_id: L04, role: previous_shot_continuity)"} {"timestamp": "2026-05-28T05:45:09.443284+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 수리영의 말을 믿고 수사하려 함"} {"timestamp": "2026-05-28T05:45:09.455785+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 28: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:45:09.456657+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 17 Shot 1: prev_shot_ref injected (no chain bg for this shot, role=previous_shot_continuity)"} {"timestamp": "2026-05-28T05:45:09.456753+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 27: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:45:09.458013+00:00", "level": "ERROR", "logger": "app.services.scene_generation_coordinator", "message": "Variation generation thread error: NameError(\"name 'AppError' is not defined\")\nTraceback (most recent call last):\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1663, in _generate_variation_in_loop\n pipe_result = generate_and_validate_scene(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/pipeline/scene_image_pipeline.py\", line 254, in generate_and_validate_scene\n img_1, _ = gemini_client.generate_image(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/llm/gemini_image_client.py\", line 184, in generate_image\n reserve_current_call(source=\"gemini_image_client.urlopen\")\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 125, in reserve_current_call\n budget.reserve(source=source)\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 66, in reserve\n raise ImageCallBudgetExceeded(\napp.core.image_call_budget.ImageCallBudgetExceeded: image_call_budget exceeded — cap=60, used=60, denied source='gemini_image_client.urlopen'\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1036, in _await_variation_results\n result = future.result()\n ^^^^^^^^^^^^^^^\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py\", line 449, in result\n return self.__get_result()\n ^^^^^^^^^^^^^^^^^^^\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py\", line 401, in __get_result\n raise self._exception\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/thread.py\", line 59, in run\n result = self.fn(*self.args, **self.kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 183, in _wrapped\n return run_with_budget(captured, fn, *args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 158, in run_with_budget\n return fn(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1742, in _generate_variation_in_loop\n except AppError:\n ^^^^^^^^\nNameError: name 'AppError' is not defined. Did you mean: 'EOFError'?\n"} {"timestamp": "2026-05-28T05:45:09.458124+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 새벽 담벼락의 검은 고양이"} {"timestamp": "2026-05-28T05:45:09.465173+00:00", "level": "ERROR", "logger": "app.services.scene_generation_coordinator", "message": "Variation generation thread error: NameError(\"name 'AppError' is not defined\")\nTraceback (most recent call last):\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1663, in _generate_variation_in_loop\n pipe_result = generate_and_validate_scene(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/pipeline/scene_image_pipeline.py\", line 254, in generate_and_validate_scene\n img_1, _ = gemini_client.generate_image(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/llm/gemini_image_client.py\", line 184, in generate_image\n reserve_current_call(source=\"gemini_image_client.urlopen\")\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 125, in reserve_current_call\n budget.reserve(source=source)\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 66, in reserve\n raise ImageCallBudgetExceeded(\napp.core.image_call_budget.ImageCallBudgetExceeded: image_call_budget exceeded — cap=60, used=60, denied source='gemini_image_client.urlopen'\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1036, in _await_variation_results\n result = future.result()\n ^^^^^^^^^^^^^^^\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py\", line 449, in result\n return self.__get_result()\n ^^^^^^^^^^^^^^^^^^^\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py\", line 401, in __get_result\n raise self._exception\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/thread.py\", line 59, in run\n result = self.fn(*self.args, **self.kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 183, in _wrapped\n return run_with_budget(captured, fn, *args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 158, in run_with_budget\n return fn(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1742, in _generate_variation_in_loop\n except AppError:\n ^^^^^^^^\nNameError: name 'AppError' is not defined. Did you mean: 'EOFError'?\n"} 14:45:09 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:45:09.465948+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:45:20 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:45:20.987376+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:45:20 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:45:20.991575+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:45:20.993009+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 거울 속 환영과 경악"} {"timestamp": "2026-05-28T05:45:21.025377+00:00", "level": "ERROR", "logger": "app.services.scene_generation_coordinator", "message": "Variation generation thread error: NameError(\"name 'AppError' is not defined\")\nTraceback (most recent call last):\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1663, in _generate_variation_in_loop\n pipe_result = generate_and_validate_scene(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/pipeline/scene_image_pipeline.py\", line 254, in generate_and_validate_scene\n img_1, _ = gemini_client.generate_image(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/llm/gemini_image_client.py\", line 184, in generate_image\n reserve_current_call(source=\"gemini_image_client.urlopen\")\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 125, in reserve_current_call\n budget.reserve(source=source)\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 66, in reserve\n raise ImageCallBudgetExceeded(\napp.core.image_call_budget.ImageCallBudgetExceeded: image_call_budget exceeded — cap=60, used=60, denied source='gemini_image_client.urlopen'\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1036, in _await_variation_results\n result = future.result()\n ^^^^^^^^^^^^^^^\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py\", line 449, in result\n return self.__get_result()\n ^^^^^^^^^^^^^^^^^^^\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py\", line 401, in __get_result\n raise self._exception\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/thread.py\", line 59, in run\n result = self.fn(*self.args, **self.kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 183, in _wrapped\n return run_with_budget(captured, fn, *args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 158, in run_with_budget\n return fn(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1742, in _generate_variation_in_loop\n except AppError:\n ^^^^^^^^\nNameError: name 'AppError' is not defined. Did you mean: 'EOFError'?\n"} {"timestamp": "2026-05-28T05:45:21.027159+00:00", "level": "ERROR", "logger": "app.services.scene_image_service", "message": "Scene 23 still 42e79d51: all variations failed (scene_index=23); GENERIC_EXCEPTION: NameError: name 'AppError' is not defined"} {"timestamp": "2026-05-28T05:45:21.027951+00:00", "level": "ERROR", "logger": "app.services.scene_image_service", "message": "Scene 27 still f9f0ede6: all variations failed (scene_index=27); GENERIC_EXCEPTION: NameError: name 'AppError' is not defined"} {"timestamp": "2026-05-28T05:45:21.028659+00:00", "level": "ERROR", "logger": "app.services.scene_image_service", "message": "Scene 28 still 6242129f: all variations failed (scene_index=28); GENERIC_EXCEPTION: NameError: name 'AppError' is not defined"} {"timestamp": "2026-05-28T05:45:21.058818+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 18 Shot 11: chain_bg ref SKIPPED — close framing detected (framing_scale='close')"} {"timestamp": "2026-05-28T05:45:21.065272+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 25 Shot 3: chain_bg ref SKIPPED — close framing detected (framing_scale='close')"} {"timestamp": "2026-05-28T05:45:21.065344+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 29: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:45:21.065507+00:00", "level": "ERROR", "logger": "app.services.scene_image_service", "message": "Scene generation failed: scene_index=38, error=zoom_in_detail_source_violation: ref_usage='zoom_in_detail' requires bytes from dep_scene, got source='location_history' (S25_Shot3, dep_scene_id='28e5aa77-ffa1-4a0e-95f7-21f089620db5')"} {"timestamp": "2026-05-28T05:45:21.065736+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 식탁 위 사진의 환각"} {"timestamp": "2026-05-28T05:45:21.067724+00:00", "level": "ERROR", "logger": "app.services.scene_generation_coordinator", "message": "Variation generation thread error: NameError(\"name 'AppError' is not defined\")\nTraceback (most recent call last):\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1663, in _generate_variation_in_loop\n pipe_result = generate_and_validate_scene(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/pipeline/scene_image_pipeline.py\", line 254, in generate_and_validate_scene\n img_1, _ = gemini_client.generate_image(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/llm/gemini_image_client.py\", line 184, in generate_image\n reserve_current_call(source=\"gemini_image_client.urlopen\")\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 125, in reserve_current_call\n budget.reserve(source=source)\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 66, in reserve\n raise ImageCallBudgetExceeded(\napp.core.image_call_budget.ImageCallBudgetExceeded: image_call_budget exceeded — cap=60, used=60, denied source='gemini_image_client.urlopen'\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1036, in _await_variation_results\n result = future.result()\n ^^^^^^^^^^^^^^^\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py\", line 449, in result\n return self.__get_result()\n ^^^^^^^^^^^^^^^^^^^\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py\", line 401, in __get_result\n raise self._exception\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/thread.py\", line 59, in run\n result = self.fn(*self.args, **self.kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 183, in _wrapped\n return run_with_budget(captured, fn, *args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 158, in run_with_budget\n return fn(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1742, in _generate_variation_in_loop\n except AppError:\n ^^^^^^^^\nNameError: name 'AppError' is not defined. Did you mean: 'EOFError'?\n"} {"timestamp": "2026-05-28T05:45:21.068536+00:00", "level": "ERROR", "logger": "app.services.scene_image_service", "message": "Scene 29 still 85c09a54: all variations failed (scene_index=29); GENERIC_EXCEPTION: NameError: name 'AppError' is not defined"} {"timestamp": "2026-05-28T05:45:21.081947+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 25 Shot 7: background_chain ref injected"} {"timestamp": "2026-05-28T05:45:21.082072+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 39: 1 prompts total, generating last 1 T2I + 1 angle"} 14:45:21 - LiteLLM:INFO: utils.py:3995 - LiteLLM completion() model= gemini-3.5-flash; provider = gemini {"timestamp": "2026-05-28T05:45:21.083456+00:00", "level": "INFO", "logger": "LiteLLM", "message": "\nLiteLLM completion() model= gemini-3.5-flash; provider = gemini"} 14:45:33 - LiteLLM:INFO: utils.py:1656 - Wrapper: Completed Call, calling success_handler {"timestamp": "2026-05-28T05:45:33.803540+00:00", "level": "INFO", "logger": "LiteLLM", "message": "Wrapper: Completed Call, calling success_handler"} 14:45:33 - LiteLLM Router:INFO: router.py:1515 - litellm.completion(model=gemini/gemini-3.5-flash) 200 OK {"timestamp": "2026-05-28T05:45:33.804692+00:00", "level": "INFO", "logger": "LiteLLM Router", "message": "litellm.completion(model=gemini/gemini-3.5-flash)\u001b[32m 200 OK\u001b[0m"} {"timestamp": "2026-05-28T05:45:33.806217+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 사진을 쥔 채 집을 나서는 수리영"} {"timestamp": "2026-05-28T05:45:33.838831+00:00", "level": "ERROR", "logger": "app.services.scene_generation_coordinator", "message": "Variation generation thread error: NameError(\"name 'AppError' is not defined\")\nTraceback (most recent call last):\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1663, in _generate_variation_in_loop\n pipe_result = generate_and_validate_scene(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/pipeline/scene_image_pipeline.py\", line 254, in generate_and_validate_scene\n img_1, _ = gemini_client.generate_image(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/llm/gemini_image_client.py\", line 184, in generate_image\n reserve_current_call(source=\"gemini_image_client.urlopen\")\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 125, in reserve_current_call\n budget.reserve(source=source)\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 66, in reserve\n raise ImageCallBudgetExceeded(\napp.core.image_call_budget.ImageCallBudgetExceeded: image_call_budget exceeded — cap=60, used=60, denied source='gemini_image_client.urlopen'\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1036, in _await_variation_results\n result = future.result()\n ^^^^^^^^^^^^^^^\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py\", line 449, in result\n return self.__get_result()\n ^^^^^^^^^^^^^^^^^^^\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py\", line 401, in __get_result\n raise self._exception\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/thread.py\", line 59, in run\n result = self.fn(*self.args, **self.kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 183, in _wrapped\n return run_with_budget(captured, fn, *args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 158, in run_with_budget\n return fn(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1742, in _generate_variation_in_loop\n except AppError:\n ^^^^^^^^\nNameError: name 'AppError' is not defined. Did you mean: 'EOFError'?\n"} {"timestamp": "2026-05-28T05:45:33.840231+00:00", "level": "ERROR", "logger": "app.services.scene_image_service", "message": "Scene 39 still 9525cd87: all variations failed (scene_index=39); GENERIC_EXCEPTION: NameError: name 'AppError' is not defined"} {"timestamp": "2026-05-28T05:45:33.862744+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 27 Shot 1: background_chain ref injected"} {"timestamp": "2026-05-28T05:45:33.862846+00:00", "level": "INFO", "logger": "app.services.scene_generation_coordinator", "message": "Scene 42: 1 prompts total, generating last 1 T2I + 1 angle"} {"timestamp": "2026-05-28T05:45:33.863142+00:00", "level": "INFO", "logger": "app.modules.pipeline.scene_image_pipeline", "message": "Generating scene image: 충격적인 좌표 확인"} {"timestamp": "2026-05-28T05:45:33.879268+00:00", "level": "ERROR", "logger": "app.services.scene_generation_coordinator", "message": "Variation generation thread error: NameError(\"name 'AppError' is not defined\")\nTraceback (most recent call last):\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1663, in _generate_variation_in_loop\n pipe_result = generate_and_validate_scene(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/pipeline/scene_image_pipeline.py\", line 254, in generate_and_validate_scene\n img_1, _ = gemini_client.generate_image(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/llm/gemini_image_client.py\", line 184, in generate_image\n reserve_current_call(source=\"gemini_image_client.urlopen\")\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 125, in reserve_current_call\n budget.reserve(source=source)\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 66, in reserve\n raise ImageCallBudgetExceeded(\napp.core.image_call_budget.ImageCallBudgetExceeded: image_call_budget exceeded — cap=60, used=60, denied source='gemini_image_client.urlopen'\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1036, in _await_variation_results\n result = future.result()\n ^^^^^^^^^^^^^^^\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py\", line 449, in result\n return self.__get_result()\n ^^^^^^^^^^^^^^^^^^^\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/_base.py\", line 401, in __get_result\n raise self._exception\n File \"/opt/homebrew/Cellar/python@3.12/3.12.13/Frameworks/Python.framework/Versions/3.12/lib/python3.12/concurrent/futures/thread.py\", line 59, in run\n result = self.fn(*self.args, **self.kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 183, in _wrapped\n return run_with_budget(captured, fn, *args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/core/image_call_budget.py\", line 158, in run_with_budget\n return fn(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^\n File \"/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/scene_generation_coordinator.py\", line 1742, in _generate_variation_in_loop\n except AppError:\n ^^^^^^^^\nNameError: name 'AppError' is not defined. Did you mean: 'EOFError'?\n"} {"timestamp": "2026-05-28T05:45:33.879932+00:00", "level": "ERROR", "logger": "app.services.scene_image_service", "message": "Scene 42 still 3e11cf47: all variations failed (scene_index=42); GENERIC_EXCEPTION: NameError: name 'AppError' is not defined"} {"timestamp": "2026-05-28T05:45:33.896314+00:00", "level": "INFO", "logger": "app.core.step_runner", "message": "Step scene_image_pipeline partial (completed=33/50, failed=17)"} {"timestamp": "2026-05-28T05:45:33.896346+00:00", "level": "INFO", "logger": "app.services.analysis_dispatch_service", "message": "Step scene_image_pipeline: partial"} {"timestamp": "2026-05-28T05:45:33.896368+00:00", "level": "WARNING", "logger": "app.services.analysis_dispatch_service", "message": "Step scene_image_pipeline partial — continuing (downstream may use partial results)"} {"timestamp": "2026-05-28T05:45:33.928453+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.entity_sync_service", "message": "Synced 41 entities to DB from checkpoint (upsert); removed 0 stale links"} {"timestamp": "2026-05-28T05:45:33.960701+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced 152 scene_stills (shot-based) to DB"} {"timestamp": "2026-05-28T05:45:33.972583+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced scene_summary from checkpoint"} {"timestamp": "2026-05-28T05:45:33.985040+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.scene_still_writer", "message": "Synced shot_type from scene_cinematography checkpoint (legacy)"} {"timestamp": "2026-05-28T05:45:33.995421+00:00", "level": "WARNING", "logger": "app.core.name_matcher", "message": "name_index collision: key='경찰수사점퍼' kept existing entry, skipped new from raw='경찰수사점퍼'"} {"timestamp": "2026-05-28T05:45:33.996726+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.outlook_sync_service", "message": "Synced 12 outlooks + 13 character-outlook links (Δ +0 / -0)"} {"timestamp": "2026-05-28T05:45:34.005338+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.episode_projection_service", "message": "T2I appearance counts: 0 entities updated, 29 total short_ids found"} {"timestamp": "2026-05-28T05:45:34.006042+00:00", "level": "WARNING", "logger": "app.core.applicability", "message": "_if_planning_doc fallback to False: '_StubRunner' object has no attribute 'db'"} {"timestamp": "2026-05-28T05:45:34.007651+00:00", "level": "INFO", "logger": "app.services.checkpoint_sync.orchestrator", "message": "orchestrate_full_sync: all changes committed atomically (episode dc70c0b3, step=-, repaired=0)"} INFO: Shutting down INFO: Waiting for application shutdown. INFO: Application shutdown complete. INFO: Finished server process [23998]