teteffd / apps /api /app /models /models.py
Developer
WormGPT - production-grade AI chat platform
276ef31
Raw History Blame Contribute Delete
3.38 kB
"""Model management and system prompt schemas."""
from __future__ import annotations
from datetime import datetime
from typing import Literal
from pydantic import BaseModel, Field, field_validator
Provider = Literal[
"groq", "openai", "anthropic", "gemini", "deepseek", "qwen", "ollama", "custom"
]
class ModelCreate(BaseModel):
name: str = Field(min_length=1, max_length=128)
provider: Provider
endpoint: str | None = None
apiKey: str | None = None
temperature: float = Field(default=0.7, ge=0.0, le=2.0)
maxTokens: int = Field(default=4096, ge=1, le=200_000)
topP: float = Field(default=1.0, ge=0.0, le=1.0)
systemPromptId: str | None = None
enabled: bool = True
description: str | None = None
displayName: str | None = None
avatar: str | None = None
tags: list[str] = Field(default_factory=list)
class ModelUpdate(BaseModel):
name: str | None = None
endpoint: str | None = None
apiKey: str | None = None
temperature: float | None = Field(default=None, ge=0.0, le=2.0)
maxTokens: int | None = Field(default=None, ge=1, le=200_000)
topP: float | None = Field(default=None, ge=0.0, le=1.0)
systemPromptId: str | None = None
enabled: bool | None = None
description: str | None = None
displayName: str | None = None
avatar: str | None = None
tags: list[str] | None = None
class ModelOut(BaseModel):
"""Public-facing model representation. NEVER includes apiKey."""
id: str
name: str
provider: Provider
endpoint: str | None = None
temperature: float
maxTokens: int
topP: float
systemPromptId: str | None = None
systemPromptName: str | None = None
enabled: bool
description: str | None = None
displayName: str | None = None
avatar: str | None = None
tags: list[str]
createdAt: datetime
updatedAt: datetime
hasApiKey: bool = False
class SystemPromptCreate(BaseModel):
name: str = Field(min_length=1, max_length=128)
content: str = Field(min_length=1, max_length=200_000)
description: str | None = None
tags: list[str] = Field(default_factory=list)
active: bool = True
class SystemPromptUpdate(BaseModel):
name: str | None = None
content: str | None = None
description: str | None = None
tags: list[str] | None = None
active: bool | None = None
changelog: str | None = None
class SystemPromptVersion(BaseModel):
version: int
content: str
changelog: str | None = None
createdAt: datetime
class SystemPromptOut(BaseModel):
id: str
name: str
description: str | None = None
tags: list[str]
active: bool
currentVersion: int
versions: list[SystemPromptVersion] = Field(default_factory=list)
createdAt: datetime
updatedAt: datetime
class SystemPromptSummary(BaseModel):
"""Minimal info for non-admin users (content is NEVER sent)."""
id: str
name: str
description: str | None = None
class ProviderKeyCreate(BaseModel):
provider: Provider
apiKey: str = Field(min_length=1)
endpoint: str | None = None
class ProviderKeyOut(BaseModel):
id: str
provider: Provider
endpoint: str | None = None
status: str = "pending"
hasApiKey: bool = True
lastSyncAt: datetime | None = None
modelsImported: int = 0
createdAt: datetime
updatedAt: datetime