Add base_url to ModelConfig and EmbeddingModelConfig. Deprecate vllm and lm_studio configs, now through open ai
This commit is contained in:
parent
271c50e225
commit
3141c91023
2 changed files with 17 additions and 50 deletions
|
|
@ -12,6 +12,7 @@ class ModelConfig(BaseModel):
|
||||||
Attributes:
|
Attributes:
|
||||||
provider: Model provider (ollama, openai, anthropic, etc.)
|
provider: Model provider (ollama, openai, anthropic, etc.)
|
||||||
name: Model name/identifier
|
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)
|
enable_thinking: Control reasoning behavior (true/false/None for default)
|
||||||
temperature: Sampling temperature (0.0 to 1.0+)
|
temperature: Sampling temperature (0.0 to 1.0+)
|
||||||
max_tokens: Maximum tokens to generate
|
max_tokens: Maximum tokens to generate
|
||||||
|
|
@ -19,6 +20,7 @@ class ModelConfig(BaseModel):
|
||||||
|
|
||||||
provider: str = "ollama"
|
provider: str = "ollama"
|
||||||
name: str = "gpt-oss"
|
name: str = "gpt-oss"
|
||||||
|
base_url: str | None = None
|
||||||
|
|
||||||
enable_thinking: bool | None = None
|
enable_thinking: bool | None = None
|
||||||
temperature: float | None = None
|
temperature: float | None = None
|
||||||
|
|
@ -29,14 +31,16 @@ class EmbeddingModelConfig(BaseModel):
|
||||||
"""Configuration for an embedding model.
|
"""Configuration for an embedding model.
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
provider: Model provider (ollama, openai, voyageai, vllm, lm_studio)
|
provider: Model provider (ollama, openai, voyageai, cohere, sentence-transformers)
|
||||||
name: Model name/identifier
|
name: Model name/identifier
|
||||||
vector_dim: Vector dimensions produced by the model
|
vector_dim: Vector dimensions produced by the model
|
||||||
|
base_url: Optional base URL for OpenAI-compatible servers (vLLM, LM Studio, etc.)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
provider: str = "ollama"
|
provider: str = "ollama"
|
||||||
name: str = "qwen3-embedding:4b"
|
name: str = "qwen3-embedding:4b"
|
||||||
vector_dim: int = 2560
|
vector_dim: int = 2560
|
||||||
|
base_url: str | None = None
|
||||||
|
|
||||||
|
|
||||||
class StorageConfig(BaseModel):
|
class StorageConfig(BaseModel):
|
||||||
|
|
|
||||||
|
|
@ -135,11 +135,12 @@ def get_model(
|
||||||
model_settings, OpenAIChatModelSettings, model_config
|
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(
|
return OpenAIChatModel(
|
||||||
model_name=model,
|
model_name=model,
|
||||||
provider=OllamaProvider(
|
provider=OllamaProvider(base_url=base_url),
|
||||||
base_url=f"{app_config.providers.ollama.base_url}/v1"
|
|
||||||
),
|
|
||||||
settings=model_settings,
|
settings=model_settings,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -159,6 +160,14 @@ def get_model(
|
||||||
openai_settings, OpenAIChatModelSettings, model_config
|
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)
|
return OpenAIChatModel(model_name=model, settings=openai_settings)
|
||||||
|
|
||||||
elif provider == "anthropic":
|
elif provider == "anthropic":
|
||||||
|
|
@ -264,52 +273,6 @@ def get_model(
|
||||||
|
|
||||||
return BedrockConverseModel(model_name=model, settings=bedrock_settings)
|
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:
|
else:
|
||||||
# For any other provider, use string format and let Pydantic AI handle it
|
# For any other provider, use string format and let Pydantic AI handle it
|
||||||
return f"{provider}:{model}"
|
return f"{provider}:{model}"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue