| 166 | |
| 167 | |
| 168 | class ResearchMemoryRecord(BaseModel): |
| 169 | memory_id: str |
| 170 | memory_kind: ResearchMemoryKind |
| 171 | content: str |
| 172 | task_family: str = "" |
| 173 | proposal_ref: str = "" |
| 174 | direction_ref: str = "" |
| 175 | conditions: dict[str, str] = Field(default_factory=dict) |
| 176 | evidence_summary: str = "" |
| 177 | trajectory_summary: list[str] = Field(default_factory=list) |
| 178 | uncertainty_note: str = "" |
| 179 | confidence: float = Field(default=0.6, ge=0.0, le=1.0) |
| 180 | support_count: int = Field(default=1, ge=1) |
| 181 | contradiction_count: int = Field(default=0, ge=0) |
| 182 | source: str = "" |
| 183 | source_stage: str = "" |
| 184 | timestamp: datetime = Field(default_factory=lambda: datetime.now(timezone.utc)) |
| 185 | importance: float = Field(default=0.7, ge=0.0, le=1.0) |
| 186 | recency_weight: float = Field(default=1.0, ge=0.0, le=1.5) |
| 187 | tags: list[str] = Field(default_factory=list) |
| 188 | project_key: str = "" |
| 189 | workspace_id: str = "" |
| 190 | |
| 191 | |
| 192 | _TASK_TYPE_WEIGHTS: dict[str, dict[MemoryType, float]] = { |