Implement optional single-image intake, Signal ingestion, and multimodal vision analysis
- Add image intake service with format validation (JPEG, PNG, WebP) and EXIF/GPS stripping - Enforce strict single-image rule across Web and Signal attachment channels - Implement token-optimized vision downscaling and JPEG compression - Add IMAGE_CONTEXT pipeline stage with OmniRoute vision routing and resilient failover - Seed and manage versioned idea-image-interpreter prompt in catalog - Update Web UI with responsive image picker, preview chip, and Visual Context tab - Add comprehensive automated test suite in test_image_intake.py - Update README and Labyricorn devlog
This commit is contained in:
+27
-1
@@ -110,6 +110,32 @@ class Idea:
|
||||
updated_at: str = ""
|
||||
urls: List[IdeaURL] = field(default_factory=list)
|
||||
relationships: List[Dict[str, Any]] = field(default_factory=list)
|
||||
submission_image: Optional[Dict[str, Any]] = None
|
||||
source_channel: str = "web"
|
||||
source_sender_uuid: Optional[str] = None
|
||||
source_group_id: Optional[str] = None
|
||||
source_event_id: Optional[str] = None
|
||||
|
||||
@dataclass
|
||||
class SubmittedImage:
|
||||
raw_bytes: bytes
|
||||
filename: str
|
||||
content_type: str
|
||||
source: str = "web" # "web" | "signal"
|
||||
|
||||
@dataclass
|
||||
class IdeaSubmission:
|
||||
text: str
|
||||
source: str = "web" # "web" | "signal"
|
||||
image: Optional[SubmittedImage] = None
|
||||
sender_uuid: Optional[str] = None
|
||||
sender_number: Optional[str] = None
|
||||
sender_name: Optional[str] = None
|
||||
group_id: Optional[str] = None
|
||||
message_id: Optional[str] = None
|
||||
event_id: Optional[str] = None
|
||||
reply_to: Optional[str] = None
|
||||
received_at: Optional[str] = None
|
||||
|
||||
@dataclass
|
||||
class WorkTrackOutput:
|
||||
@@ -129,7 +155,7 @@ class WorkTrackOutput:
|
||||
class WorkTrack:
|
||||
id: str # e.g. WT-0001
|
||||
idea_id: str
|
||||
work_type_id: str # ARTICLE, BLOG_ENTRY, CODING_PROJECT
|
||||
work_type_id: str # ARTICLE, BLOG_ENTRY, CODING_PROJECT, YOUTUBE_VIDEO
|
||||
name: str
|
||||
state: WorkTrackState = WorkTrackState.PLANNED
|
||||
workflow_id: str = ""
|
||||
|
||||
Reference in New Issue
Block a user