Spaces:
Sleeping
Sleeping
File size: 1,886 Bytes
ce673e5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | """
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
|