Add base_url to ModelConfig and EmbeddingModelConfig. Deprecate vllm and lm_studio configs, now through open ai

This commit is contained in:
Yiorgis Gozadinos 2025-12-24 12:33:44 +02:00
parent 271c50e225
commit 3141c91023
No known key found for this signature in database
2 changed files with 17 additions and 50 deletions

View file

@ -12,6 +12,7 @@ class ModelConfig(BaseModel):
Attributes:
provider: Model provider (ollama, openai, anthropic, etc.)
name: Model name/identifier
base_url: Optional base URL for OpenAI-compatible servers (vLLM, LM Studio, etc.)
enable_thinking: Control reasoning behavior (true/false/None for default)
temperature: Sampling temperature (0.0 to 1.0+)
max_tokens: Maximum tokens to generate
@ -19,6 +20,7 @@ class ModelConfig(BaseModel):
provider: str = "ollama"
name: str = "gpt-oss"
base_url: str | None = None
enable_thinking: bool | None = None
temperature: float | None = None
@ -29,14 +31,16 @@ class EmbeddingModelConfig(BaseModel):
"""Configuration for an embedding model.
Attributes:
provider: Model provider (ollama, openai, voyageai, vllm, lm_studio)
provider: Model provider (ollama, openai, voyageai, cohere, sentence-transformers)
name: Model name/identifier
vector_dim: Vector dimensions produced by the model
base_url: Optional base URL for OpenAI-compatible servers (vLLM, LM Studio, etc.)
"""
provider: str = "ollama"
name: str = "qwen3-embedding:4b"
vector_dim: int = 2560
base_url: str | None = None
class StorageConfig(BaseModel):

View file

@ -135,11 +135,12 @@ def get_model(
model_settings, OpenAIChatModelSettings, model_config
)
# Use model-level base_url if set, otherwise fall back to providers config
base_url = model_config.base_url or f"{app_config.providers.ollama.base_url}/v1"
return OpenAIChatModel(
model_name=model,
provider=OllamaProvider(
base_url=f"{app_config.providers.ollama.base_url}/v1"
),
provider=OllamaProvider(base_url=base_url),
settings=model_settings,
)
@ -159,6 +160,14 @@ def get_model(
openai_settings, OpenAIChatModelSettings, model_config
)
# Use model-level base_url if set (for vLLM, LM Studio, etc.)
if model_config.base_url:
return OpenAIChatModel(
model_name=model,
provider=OpenAIProvider(base_url=model_config.base_url),
settings=openai_settings,
)
return OpenAIChatModel(model_name=model, settings=openai_settings)
elif provider == "anthropic":
@ -264,52 +273,6 @@ def get_model(
return BedrockConverseModel(model_name=model, settings=bedrock_settings)
elif provider == "vllm":
vllm_settings = None
# Apply thinking control for gpt-oss
if model == "gpt-oss" and model_config.enable_thinking is not None:
if model_config.enable_thinking is False:
vllm_settings = OpenAIChatModelSettings(openai_reasoning_effort="low")
else:
vllm_settings = OpenAIChatModelSettings(openai_reasoning_effort="high")
vllm_settings = apply_common_settings(
vllm_settings, OpenAIChatModelSettings, model_config
)
return OpenAIChatModel(
model_name=model,
provider=OpenAIProvider(
base_url=f"{app_config.providers.vllm.research_base_url or app_config.providers.vllm.qa_base_url}/v1",
api_key="none",
),
settings=vllm_settings,
)
elif provider == "lm_studio":
model_settings = None
# Apply thinking control for gpt-oss
if model == "gpt-oss" and model_config.enable_thinking is not None:
if model_config.enable_thinking is False:
model_settings = OpenAIChatModelSettings(openai_reasoning_effort="low")
else:
model_settings = OpenAIChatModelSettings(openai_reasoning_effort="high")
model_settings = apply_common_settings(
model_settings, OpenAIChatModelSettings, model_config
)
return OpenAIChatModel(
model_name=model,
provider=OpenAIProvider(
base_url=f"{app_config.providers.lm_studio.base_url}/v1",
api_key="dummy",
),
settings=model_settings,
)
else:
# For any other provider, use string format and let Pydantic AI handle it
return f"{provider}:{model}"