File size: 2,521 Bytes
95f8c4b | 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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | """Structured HTTP response models."""
from __future__ import annotations
from typing import Literal
from pydantic import BaseModel
class ErrorDetail(BaseModel):
message: str
type: str = "server_error"
class ErrorResponse(BaseModel):
error: ErrorDetail
class GeminiUsageMetadata(BaseModel):
promptTokenCount: int = 0
candidatesTokenCount: int = 0
thoughtsTokenCount: int = 0
totalTokenCount: int = 0
class GeminiFunctionCallPayload(BaseModel):
name: str
args: object | None = None
class GeminiFunctionResponsePayload(BaseModel):
name: str
response: object | None = None
class GeminiInlineDataResponse(BaseModel):
mimeType: str
data: str
class GeminiPartResponse(BaseModel):
text: str | None = None
thought: bool | None = None
inlineData: GeminiInlineDataResponse | None = None
thoughtSignature: str | None = None
functionCall: GeminiFunctionCallPayload | None = None
functionResponse: GeminiFunctionResponsePayload | None = None
class GeminiContentResponse(BaseModel):
role: Literal["model"] = "model"
parts: list[GeminiPartResponse]
class GeminiCandidateResponse(BaseModel):
content: GeminiContentResponse
finishReason: str | None = None
class GeminiGenerateContentResponse(BaseModel):
candidates: list[GeminiCandidateResponse]
usageMetadata: GeminiUsageMetadata | None = None
class HealthResponse(BaseModel):
status: str
busy: bool
class ModelStatsResponse(BaseModel):
requests: int
success: int
rate_limited: int
errors: int
prompt_tokens: int
completion_tokens: int
total_tokens: int
last_used: str | None = None
class StatsTotalsResponse(BaseModel):
requests: int
success: int
rate_limited: int
errors: int
prompt_tokens: int
completion_tokens: int
total_tokens: int
class StatsResponse(BaseModel):
models: dict[str, ModelStatsResponse]
totals: StatsTotalsResponse
class GeminiModelResponse(BaseModel):
name: str
version: str | None = "001"
displayName: str | None = None
description: str | None = None
inputTokenLimit: int | None = None
outputTokenLimit: int | None = None
supportedGenerationMethods: list[str] = [
"generateContent",
"countTokens",
"createCachedContent",
]
temperature: float | None = None
topP: float | None = None
topK: int | None = None
class GeminiModelListResponse(BaseModel):
models: list[GeminiModelResponse]
|