from datetime import datetime
from typing import Any, Optional
from uuid import UUID
from pydantic import BaseModel
from shared.abstractions.document import DocumentResponse
from shared.abstractions.llm import Message
from shared.abstractions.user import Token, User
from shared.api.models.base import PaginatedR2RResult, R2RResults
class PromptResponse(BaseModel):
id: UUID
name: str
template: str
created_at: datetime
updated_at: datetime
input_types: dict[str, str]
class ServerStats(BaseModel):
start_time: datetime
uptime_seconds: float
cpu_usage: float
memory_usage: float
class SettingsResponse(BaseModel):
config: dict[str, Any]
prompts: dict[str, Any]
r2r_project_name: str
# r2r_version: str
class ChunkResponse(BaseModel):
id: UUID
document_id: UUID
owner_id: UUID
collection_ids: list[UUID]
text: str
metadata: dict[str, Any]
vector: Optional[list[float]] = None
class CollectionResponse(BaseModel):
id: UUID
owner_id: Optional[UUID]
name: str
description: Optional[str]
graph_cluster_status: str
graph_sync_status: str
created_at: datetime
updated_at: datetime
user_count: int
document_count: int
class ConversationResponse(BaseModel):
id: UUID
created_at: datetime
user_id: Optional[UUID] = None
name: Optional[str] = None
class MessageResponse(BaseModel):
id: UUID
message: Message
metadata: dict[str, Any] = {}
class ApiKey(BaseModel):
public_key: str
api_key: str
key_id: str
name: Optional[str] = None
class ApiKeyNoPriv(BaseModel):
public_key: str
key_id: str
name: Optional[str] = None
updated_at: datetime
description: Optional[str] = None
class LoginResponse(BaseModel):
access_token: Token
refresh_token: Token
class UsageLimit(BaseModel):
used: int
limit: int
remaining: int
class StorageTypeLimit(BaseModel):
limit: int
used: int
remaining: int
class StorageLimits(BaseModel):
chunks: StorageTypeLimit
documents: StorageTypeLimit
collections: StorageTypeLimit
class RouteUsage(BaseModel):
route_per_min: UsageLimit
monthly_limit: UsageLimit
class Usage(BaseModel):
global_per_min: UsageLimit
monthly_limit: UsageLimit
routes: dict[str, RouteUsage]
class SystemDefaults(BaseModel):
global_per_min: int
route_per_min: Optional[int]
monthly_limit: int
class LimitsResponse(BaseModel):
storage_limits: StorageLimits
system_defaults: SystemDefaults
user_overrides: dict
effective_limits: SystemDefaults
usage: Usage
# Chunk Responses
WrappedChunkResponse = R2RResults[ChunkResponse]
WrappedChunksResponse = PaginatedR2RResult[list[ChunkResponse]]
# Collection Responses
WrappedCollectionResponse = R2RResults[CollectionResponse]
WrappedCollectionsResponse = PaginatedR2RResult[list[CollectionResponse]]
# Conversation Responses
WrappedConversationMessagesResponse = R2RResults[list[MessageResponse]]
WrappedConversationResponse = R2RResults[ConversationResponse]
WrappedConversationsResponse = PaginatedR2RResult[list[ConversationResponse]]
WrappedMessageResponse = R2RResults[MessageResponse]
WrappedMessagesResponse = PaginatedR2RResult[list[MessageResponse]]
# Document Responses
WrappedDocumentResponse = R2RResults[DocumentResponse]
WrappedDocumentsResponse = PaginatedR2RResult[list[DocumentResponse]]
# Prompt Responses
WrappedPromptResponse = R2RResults[PromptResponse]
WrappedPromptsResponse = PaginatedR2RResult[list[PromptResponse]]
# System Responses
WrappedSettingsResponse = R2RResults[SettingsResponse]
WrappedServerStatsResponse = R2RResults[ServerStats]
# User Responses
WrappedUserResponse = R2RResults[User]
WrappedUsersResponse = PaginatedR2RResult[list[User]]
WrappedAPIKeyResponse = R2RResults[ApiKey]
WrappedAPIKeysResponse = PaginatedR2RResult[list[ApiKeyNoPriv]]
WrappedLoginResponse = R2RResults[LoginResponse]
WrappedLimitsResponse = R2RResults[LimitsResponse]