|string> */ public function rules(): array { $availableServices = ['openai', 'azure_openai', 'anthropic', 'aliyun_qwen', 'local']; $modelRules = [ 'openai' => ['gpt-4', 'gpt-4-turbo', 'gpt-3.5-turbo', 'gpt-3.5-turbo-instruct'], 'azure_openai' => ['gpt-4', 'gpt-35-turbo'], 'anthropic' => ['claude-3-opus-20240229', 'claude-3-sonnet-20240229', 'claude-3-haiku-20240307'], 'aliyun_qwen' => ['qwen-max', 'qwen-plus', 'qwen-turbo', 'qwen-7b-chat', 'qwen-14b-chat'], 'local' => ['local-model'], ]; $service = $this->input('service'); $allowedModels = $modelRules[$service] ?? []; return [ 'service' => 'required|string|in:' . implode(',', $availableServices), 'model' => 'required|string|in:' . implode(',', $allowedModels), ]; } /** * Get custom messages for validator errors. */ public function messages(): array { return [ 'service.required' => '服务类型不能为空', 'service.in' => '不支持的服务类型', 'model.required' => '模型名称不能为空', 'model.in' => '不支持该服务的模型', ]; } /** * Prepare the data for validation. */ protected function prepareForValidation() { // 确保服务名称小写 if ($this->has('service')) { $this->merge([ 'service' => strtolower($this->service), ]); } // 确保模型名称小写 if ($this->has('model')) { $this->merge([ 'model' => strtolower($this->model), ]); } } /** * Get validated data with defaults. */ public function validatedData(): array { $validated = parent::validated(); // 添加服务显示名称 $serviceNames = [ 'openai' => 'OpenAI', 'azure_openai' => 'Azure OpenAI', 'anthropic' => 'Anthropic Claude', 'aliyun_qwen' => '阿里云通义千问', 'local' => '本地模型', ]; $validated['service_display_name'] = $serviceNames[$validated['service']] ?? $validated['service']; // 添加模型显示名称 $modelNames = [ 'gpt-4' => 'GPT-4', 'gpt-4-turbo' => 'GPT-4 Turbo', 'gpt-3.5-turbo' => 'GPT-3.5 Turbo', 'gpt-3.5-turbo-instruct' => 'GPT-3.5 Instruct', 'gpt-35-turbo' => 'GPT-3.5 Turbo (Azure)', 'claude-3-opus-20240229' => 'Claude 3 Opus', 'claude-3-sonnet-20240229' => 'Claude 3 Sonnet', 'claude-3-haiku-20240307' => 'Claude 3 Haiku', 'qwen-max' => '通义千问 Max', 'qwen-plus' => '通义千问 Plus', 'qwen-turbo' => '通义千问 Turbo', 'qwen-7b-chat' => '通义千问 7B', 'qwen-14b-chat' => '通义千问 14B', 'local-model' => '本地模型', ]; $validated['model_display_name'] = $modelNames[$validated['model']] ?? $validated['model']; return $validated; } }