Spaces:
Running
Running
| """ | |
| Resource Vault Models for OpenTriage. | |
| """ | |
| from pydantic import BaseModel, Field | |
| from typing import Optional, List | |
| from datetime import datetime, timezone | |
| from enum import Enum | |
| import uuid | |
| class ResourceType(str, Enum): | |
| LINK = "link" | |
| CODE_SNIPPET = "code_snippet" | |
| DOCUMENTATION = "documentation" | |
| TUTORIAL = "tutorial" | |
| TOOL = "tool" | |
| EXAMPLE = "example" | |
| ANSWER = "answer" | |
| class Resource(BaseModel): | |
| """A saved resource from chat or discussions.""" | |
| id: str = Field(default_factory=lambda: str(uuid.uuid4())) | |
| # Source | |
| repo_name: str | |
| source_type: str = "chat" # chat, comment, issue, pr | |
| source_id: Optional[str] = None # ID of the source message/comment | |
| # Content | |
| resource_type: ResourceType | |
| title: str | |
| content: str # The actual content (URL, code, etc.) | |
| description: Optional[str] = None | |
| # Metadata | |
| tags: List[str] = [] | |
| language: Optional[str] = None # For code snippets | |
| # Attribution | |
| shared_by: str # Username who shared it | |
| shared_by_id: str | |
| # Stats | |
| save_count: int = 0 # How many users saved this | |
| helpful_count: int = 0 # Upvotes | |
| # Timestamps | |
| created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc)) | |
| updated_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc)) | |
| class UserSavedResource(BaseModel): | |
| """A resource saved by a specific user.""" | |
| id: str = Field(default_factory=lambda: str(uuid.uuid4())) | |
| user_id: str | |
| resource_id: str | |
| notes: Optional[str] = None # Personal notes | |
| saved_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc)) | |
| class ResourceExtraction(BaseModel): | |
| """Result of extracting resources from a message.""" | |
| message_id: str | |
| extracted_resources: List[Resource] = [] | |
| extraction_confidence: float = 0.0 | |