add models.py
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
import os
|
||||
from typing import List, Optional
|
||||
from pydantic import BaseModel, Field, validator
|
||||
|
||||
class TaskCard(BaseModel):
|
||||
"""Pydantic model representing a structured task card.
|
||||
|
||||
Attributes
|
||||
----------
|
||||
title: str
|
||||
Short title of the task (max 10 words).
|
||||
subject: str
|
||||
Subject or topic of the task.
|
||||
deadline: Optional[str]
|
||||
Deadline string if mentioned, otherwise None.
|
||||
deliverable: str
|
||||
What needs to be submitted.
|
||||
requirements: List[str]
|
||||
List of concrete requirements extracted from the raw text.
|
||||
difficulty: str
|
||||
Difficulty level: "легко", "средне" or "сложно".
|
||||
grading_criteria: Optional[str]
|
||||
Grading criteria if present.
|
||||
tags: List[str]
|
||||
Tags describing the task.
|
||||
"""
|
||||
|
||||
title: str = Field(..., description="Short title of the task (max 10 words)")
|
||||
subject: str = Field(..., description="Subject or topic of the task")
|
||||
deadline: Optional[str] = Field(None, description="Deadline if mentioned")
|
||||
deliverable: str = Field(..., description="What needs to be submitted")
|
||||
requirements: List[str] = Field(default_factory=list, description="Concrete requirements")
|
||||
difficulty: str = Field(..., description="Difficulty level: легко, средне, сложно")
|
||||
grading_criteria: Optional[str] = Field(None, description="Grading criteria if present")
|
||||
tags: List[str] = Field(default_factory=list, description="Tags describing the task")
|
||||
|
||||
@validator("title")
|
||||
def title_word_limit(cls, v: str) -> str:
|
||||
if len(v.split()) > 10:
|
||||
raise ValueError("Title must be at most 10 words")
|
||||
return v
|
||||
|
||||
def to_markdown(self) -> str:
|
||||
"""Return a nicely formatted Markdown representation of the card."""
|
||||
md = [f"## {self.title}"]
|
||||
md.append(f"**Предмет:** {self.subject}")
|
||||
if self.deadline:
|
||||
md.append(f"**Дедлайн:** {self.deadline}")
|
||||
md.append(f"**Сдать:** {self.deliverable}")
|
||||
if self.requirements:
|
||||
md.append("**Требования:**")
|
||||
for req in self.requirements:
|
||||
md.append(f"- {req}")
|
||||
md.append(f"**Сложность:** {self.difficulty}")
|
||||
if self.grading_criteria:
|
||||
md.append(f"**Критерии оценки:** {self.grading_criteria}")
|
||||
if self.tags:
|
||||
md.append("**Теги:** " + ", ".join(self.tags))
|
||||
return "\n".join(md)
|
||||
|
||||
# End of models.py
|
||||
Reference in New Issue
Block a user