You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

55 lines
2.0 KiB

1 month ago
from pydantic import BaseModel, Field, validator
from typing import Optional
import os
class OllamaConfig(BaseModel):
"""Ollama配置验证"""
base_url: str = Field(default="http://localhost:11434")
model_name: str = Field(default="qwen2.5:latest")
temperature: float = Field(default=0.7, ge=0.0, le=1.0)
max_tokens: int = Field(default=2048, gt=0)
class FlaskConfig(BaseModel):
"""Flask配置验证"""
host: str = Field(default="0.0.0.0")
port: int = Field(default=5000, gt=0, lt=65536)
debug: bool = Field(default=False)
api_prefix: str = Field(default="/api/v1")
class Config(BaseModel):
"""应用配置验证"""
ollama: OllamaConfig = Field(default_factory=OllamaConfig)
flask: FlaskConfig = Field(default_factory=FlaskConfig)
@validator('ollama.base_url')
def validate_base_url(cls, v):
if not v.startswith(('http://', 'https://')):
raise ValueError('base_url must start with http:// or https://')
return v
@validator('flask.api_prefix')
def validate_api_prefix(cls, v):
if not v.startswith('/'):
raise ValueError('api_prefix must start with /')
return v
def validate_config() -> Config:
"""验证并返回配置"""
try:
config = Config(
ollama=OllamaConfig(
base_url=os.getenv("OLLAMA_BASE_URL", "http://localhost:11434"),
model_name=os.getenv("DEFAULT_MODEL", "qwen2.5:latest"),
temperature=float(os.getenv("TEMPERATURE", "0.7")),
max_tokens=int(os.getenv("MAX_TOKENS", "2048"))
),
flask=FlaskConfig(
host=os.getenv("FLASK_HOST", "0.0.0.0"),
port=int(os.getenv("FLASK_PORT", "5000")),
debug=os.getenv("FLASK_DEBUG", "False").lower() == "true",
api_prefix=os.getenv("API_PREFIX", "/api/v1")
)
)
return config
except Exception as e:
raise ValueError(f"配置验证失败: {str(e)}")