OpenAIModel rejects unknown catalog ids; LocalModel base_url is the Chat Completions path
Working config (LocalModel, not OpenAIModel)
deepeval already has a Chat Completions escape hatch. A host whose public catalog is GET https://api.pzero.studio/v1/models (no key) worked with LocalModel.
Do not use OpenAIModel(model="deepseek-v4-flash", base_url="https://api.pzero.studio/v1", ...). OpenAIModel looks up OPENAI_MODELS_DATA. Catalog ids that are not OpenAI names leave model_data as None, then __init__ reads model_data.supports_temperature.
from deepeval.models import LocalModel
model = LocalModel(
model="deepseek-v4-flash",
api_key="pzero_…",
base_url="https://api.pzero.studio/v1",
)base_url is the /v1 root. The OpenAI SDK appends /chat/completions. Do not pass the chat path. Do not prefix openai/ on model.
Do not point OpenAIEmbeddingModel, STT, or TTS at this host. Chat only.
LocalModel.supports_multimodal() is true and will send image parts. Only do that with a catalog id that has supports_vision. Default eval prompts are text.
Not asking for a first-party provider class. LocalModel is enough.
Source: confident-ai/deepeval