Files
wehub-resource-sync 6b7e6b44f1
Python Build and Type Check / python-ci (ubuntu-latest, 3.11) (push) Has been cancelled
Python Build and Type Check / python-ci (ubuntu-latest, 3.13) (push) Has been cancelled
Python Build and Type Check / python-ci (windows-latest, 3.11) (push) Has been cancelled
Python Build and Type Check / python-ci (windows-latest, 3.13) (push) Has been cancelled
Python Integration Tests / python-ci (ubuntu-latest, 3.13) (push) Has been cancelled
Python Integration Tests / python-ci (windows-latest, 3.13) (push) Has been cancelled
Python Notebook Tests / python-ci (ubuntu-latest, 3.13) (push) Has been cancelled
Python Notebook Tests / python-ci (windows-latest, 3.13) (push) Has been cancelled
Python Smoke Tests / python-ci (ubuntu-latest, 3.13) (push) Has been cancelled
Python Smoke Tests / python-ci (windows-latest, 3.13) (push) Has been cancelled
Python Unit Tests / python-ci (ubuntu-latest, 3.13) (push) Has been cancelled
Python Unit Tests / python-ci (windows-latest, 3.13) (push) Has been cancelled
gh-pages / build (push) Has been cancelled
Python Publish (pypi) / Upload release to PyPI (push) Has been cancelled
Spellcheck / spellcheck (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:37:31 +08:00

112 lines
3.6 KiB
Python

# Copyright (c) 2024 Microsoft Corporation.
# Licensed under the MIT License
"""Language model configuration."""
import logging
from typing import Any
from pydantic import BaseModel, ConfigDict, Field, model_validator
from graphrag_llm.config.metrics_config import MetricsConfig
from graphrag_llm.config.rate_limit_config import RateLimitConfig
from graphrag_llm.config.retry_config import RetryConfig
from graphrag_llm.config.types import AuthMethod, LLMProviderType
logger = logging.getLogger(__name__)
class ModelConfig(BaseModel):
"""Configuration for a language model."""
model_config = ConfigDict(extra="allow")
"""Allow extra fields to support custom LLM provider implementations."""
type: str = Field(
default=LLMProviderType.LiteLLM,
description="The type of LLM provider to use. (default: litellm)",
)
model_provider: str = Field(
description="The provider of the model, e.g., 'openai', 'azure', etc.",
)
model: str = Field(
description="The specific model to use, e.g., 'gpt-4o', 'gpt-3.5-turbo', etc.",
)
call_args: dict[str, Any] = Field(
default_factory=dict,
description="Base keyword arguments to pass to the model provider's API.",
)
api_base: str | None = Field(
default=None,
description="The base URL for the API, required for some providers like Azure.",
)
api_version: str | None = Field(
default=None,
description="The version of the API to use.",
)
api_key: str | None = Field(
default=None,
description="API key for authentication with the model provider.",
)
auth_method: AuthMethod = Field(
default=AuthMethod.ApiKey,
description="The authentication method to use. (default: api_key)",
)
azure_deployment_name: str | None = Field(
default=None,
description="The deployment name for Azure models.",
)
retry: RetryConfig | None = Field(
default=None,
description="Configuration for the retry strategy.",
)
rate_limit: RateLimitConfig | None = Field(
default=None,
description="Configuration for the rate limit behavior.",
)
metrics: MetricsConfig | None = Field(
default_factory=MetricsConfig,
description="Specify and configure the metric services.",
)
mock_responses: list[str] | list[float] = Field(
default_factory=list,
description="List of mock responses for testing.",
)
def _validate_lite_llm_config(self) -> None:
"""Validate LiteLLM specific configuration."""
if self.model_provider == "azure" and not self.api_base:
msg = "api_base must be specified with the 'azure' model provider."
raise ValueError(msg)
if self.model_provider != "azure" and self.azure_deployment_name is not None:
msg = "azure_deployment_name should not be specified for non-Azure model providers."
raise ValueError(msg)
if self.auth_method == AuthMethod.AzureManagedIdentity:
if self.api_key is not None:
msg = "api_key should not be set when using Azure Managed Identity."
raise ValueError(msg)
elif not self.api_key:
msg = "api_key must be set when auth_method=api_key."
raise ValueError(msg)
@model_validator(mode="after")
def _validate_model(self):
"""Validate model configuration after initialization."""
if self.type == LLMProviderType.LiteLLM:
self._validate_lite_llm_config()
return self