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
55 lines
2.0 KiB
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)}")
|