Skip to main content
Glama
settings.py9.27 kB
"""配置设置""" from pathlib import Path from typing import Optional from dotenv import load_dotenv from pydantic import Field from pydantic_settings import BaseSettings, SettingsConfigDict import image_video_mcp _project_root = Path(image_video_mcp.__file__).parent.parent.parent _env_path = _project_root / ".env" load_dotenv(dotenv_path=_env_path) class WanT2IConfig(BaseSettings): """通义万相 T2I 模型配置""" model_config = SettingsConfigDict( env_file=str(_env_path), env_file_encoding="utf-8", case_sensitive=False, extra="ignore", ) # API 配置 api_key: str = Field(..., description="DashScope API Key") endpoint: str = Field( default="https://dashscope.aliyuncs.com/api/v1/services/aigc/text2image/image-synthesis", description="API 端点(北京地域)", ) model: str = Field( default="wan2.5-t2i-preview", description="模型名称", ) timeout: int = Field( default=120, description="请求超时时间(秒)", ) max_retries: int = Field( default=3, description="最大重试次数", ) # 默认参数 default_size: str = Field( default="1280*1280", description="默认图像尺寸", ) default_n: int = Field( default=1, description="默认生成图像数量", ) class GoogleGenAIConfig(BaseSettings): """Google GenAI 配置""" model_config = SettingsConfigDict( env_file=str(_env_path), env_file_encoding="utf-8", case_sensitive=False, extra="ignore", ) # API 配置 api_key: str = Field(..., description="Google GenAI API Key") base_url: Optional[str] = Field( default=None, description="自定义 API 端点(可选)", ) model: str = Field( default="gemini-3-pro-image-preview", description="模型名称", ) temperature: float = Field( default=1.0, description="温度参数", ) default_aspect_ratio: str = Field( default="3:4", description="默认宽高比", ) class ZImageConfig(BaseSettings): """Z-Image 配置""" model_config = SettingsConfigDict( env_file=str(_env_path), env_file_encoding="utf-8", case_sensitive=False, extra="ignore", ) # API 配置 base_url: str = Field( default="http://127.0.0.1:8000", description="Z-Image API 基础 URL", ) timeout: int = Field( default=600, description="请求超时时间(秒)", ) max_retries: int = Field( default=3, description="最大重试次数", ) # 默认参数 default_height: int = Field( default=1024, description="默认图像高度", ) default_width: int = Field( default=1024, description="默认图像宽度", ) default_num_inference_steps: int = Field( default=9, description="默认推理步数", ) default_guidance_scale: float = Field( default=0.0, description="默认引导强度(Turbo 模型应为 0)", ) class Settings(BaseSettings): """全局设置""" model_config = SettingsConfigDict( env_file=str(_env_path), env_file_encoding="utf-8", case_sensitive=False, extra="ignore", env_nested_delimiter="__", ) # 通义万相 T2I 配置 wan_t2i__api_key: Optional[str] = Field(default=None, alias="DASHSCOPE_API_KEY") wan_t2i__endpoint: Optional[str] = Field( default=None, alias="WAN_T2I_ENDPOINT" ) wan_t2i__model: Optional[str] = Field(default=None, alias="WAN_T2I_MODEL") wan_t2i__timeout: Optional[int] = Field(default=None, alias="WAN_T2I_TIMEOUT") wan_t2i__max_retries: Optional[int] = Field( default=None, alias="WAN_T2I_MAX_RETRIES" ) wan_t2i__default_size: Optional[str] = Field( default=None, alias="WAN_T2I_DEFAULT_SIZE" ) wan_t2i__default_n: Optional[int] = Field(default=None, alias="WAN_T2I_DEFAULT_N") # Google GenAI 配置 google_genai__api_key: Optional[str] = Field(default=None, alias="GOOGLE_GENAI_API_KEY") google_genai__base_url: Optional[str] = Field(default=None, alias="GOOGLE_GENAI_BASE_URL") google_genai__model: Optional[str] = Field(default=None, alias="GOOGLE_GENAI_MODEL") google_genai__temperature: Optional[float] = Field(default=None, alias="GOOGLE_GENAI_TEMPERATURE") google_genai__default_aspect_ratio: Optional[str] = Field( default=None, alias="GOOGLE_GENAI_DEFAULT_ASPECT_RATIO" ) # Z-Image 配置 z_image__base_url: Optional[str] = Field(default=None, alias="Z_IMAGE_BASE_URL") z_image__timeout: Optional[int] = Field(default=None, alias="Z_IMAGE_TIMEOUT") z_image__max_retries: Optional[int] = Field(default=None, alias="Z_IMAGE_MAX_RETRIES") z_image__default_height: Optional[int] = Field(default=None, alias="Z_IMAGE_DEFAULT_HEIGHT") z_image__default_width: Optional[int] = Field(default=None, alias="Z_IMAGE_DEFAULT_WIDTH") z_image__default_num_inference_steps: Optional[int] = Field( default=None, alias="Z_IMAGE_DEFAULT_NUM_INFERENCE_STEPS" ) z_image__default_guidance_scale: Optional[float] = Field( default=None, alias="Z_IMAGE_DEFAULT_GUIDANCE_SCALE" ) # 通义千问 LLM 配置 qwen__api_key: Optional[str] = Field(default=None, alias="QWEN_API_KEY") qwen__provider_name: Optional[str] = Field(default=None, alias="QWEN_PROVIDER_NAME") qwen__model: Optional[str] = Field(default=None, alias="QWEN_MODEL") qwen__base_url: Optional[str] = Field(default=None, alias="QWEN_BASE_URL") qwen__endpoint_type: Optional[str] = Field(default=None, alias="QWEN_ENDPOINT_TYPE") qwen__temperature: Optional[float] = Field(default=None, alias="QWEN_TEMPERATURE") qwen__max_output_tokens: Optional[int] = Field(default=None, alias="QWEN_MAX_OUTPUT_TOKENS") # Mock 模式配置 use_mock: bool = Field( default=False, description="是否使用 Mock 模式(直接返回固定的图片文件,用于测试)", alias="USE_MOCK" ) mock_image_path: Optional[str] = Field( default=None, description="Mock 模式使用的图片文件路径(绝对路径或相对于项目根目录的路径)", alias="MOCK_IMAGE_PATH" ) def get_wan_t2i_config(self) -> WanT2IConfig: """获取通义万相 T2I 配置""" if not self.wan_t2i__api_key: raise ValueError("通义万相 T2I API Key 必须配置(DASHSCOPE_API_KEY)") return WanT2IConfig( api_key=self.wan_t2i__api_key, endpoint=self.wan_t2i__endpoint or "https://dashscope.aliyuncs.com/api/v1/services/aigc/text2image/image-synthesis", model=self.wan_t2i__model or "wan2.5-t2i-preview", timeout=self.wan_t2i__timeout or 120, max_retries=self.wan_t2i__max_retries or 3, default_size=self.wan_t2i__default_size or "1280*1280", default_n=self.wan_t2i__default_n or 1, ) def get_google_genai_config(self) -> GoogleGenAIConfig: """获取 Google GenAI 配置""" if not self.google_genai__api_key: raise ValueError("Google GenAI API Key 必须配置(GOOGLE_GENAI_API_KEY)") return GoogleGenAIConfig( api_key=self.google_genai__api_key, base_url=self.google_genai__base_url, model=self.google_genai__model or "gemini-3-pro-image-preview", temperature=self.google_genai__temperature or 1.0, default_aspect_ratio=self.google_genai__default_aspect_ratio or "3:4", ) def get_z_image_config(self) -> ZImageConfig: """获取 Z-Image 配置""" return ZImageConfig( base_url=self.z_image__base_url or "http://127.0.0.1:8000", timeout=self.z_image__timeout or 600, max_retries=self.z_image__max_retries or 3, default_height=self.z_image__default_height or 1024, default_width=self.z_image__default_width or 1024, default_num_inference_steps=self.z_image__default_num_inference_steps or 9, default_guidance_scale=self.z_image__default_guidance_scale if self.z_image__default_guidance_scale is not None else 0.0, ) def get_qwen_config(self) -> dict: """获取通义千问配置字典(使用 DASHSCOPE_API_KEY)""" # 直接使用 DASHSCOPE_API_KEY(通义千问和通义万相共用 DashScope API) if not self.wan_t2i__api_key: raise ValueError("通义千问 API Key 必须配置(DASHSCOPE_API_KEY)") return { "provider_name": self.qwen__provider_name or "qwen-plus", "api_key": self.wan_t2i__api_key, "model": self.qwen__model, "base_url": self.qwen__base_url, "endpoint_type": self.qwen__endpoint_type, "temperature": self.qwen__temperature or 1.0, "max_output_tokens": self.qwen__max_output_tokens or 8000, } # 全局设置实例 settings = Settings()

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/luyike221/xiaohongshu-mcp-python'

If you have feedback or need assistance with the MCP directory API, please join our Discord server