fix(llms,embeddings): honor TOGETHER_API_BASE for Together LLM and embedder
The Python Together LLM and embedder ignored TOGETHER_API_BASE, unlike their TypeScript siblings, so users behind a gateway or proxy could not redirect Together traffic. Add together_base_url to a new TogetherConfig (LLM side) and to BaseEmbedderConfig (embedder side, matching the existing openai_base_url/huggingface_base_url pattern), and resolve base_url with explicit config value > TOGETHER_API_BASE env var > hardcoded default in both mem0/llms/together.py and mem0/embeddings/together.py. Also register TogetherConfig in LlmFactory.provider_to_class so config dicts routed through Memory pick it up. Closes #6587
This commit is contained in:
@@ -85,3 +85,29 @@ def test_explicit_config_overrides_defaults(mock_together_client):
|
||||
mock_together_client.embeddings.create.return_value = Mock(data=[Mock(embedding=[0.0] * 768)])
|
||||
embedder.embed("hello")
|
||||
mock_together_client.embeddings.create.assert_called_once_with(model="BAAI/bge-base-en-v1.5", input="hello")
|
||||
|
||||
|
||||
def test_together_embedding_base_url(monkeypatch):
|
||||
# case1: default config uses Together's official base url
|
||||
monkeypatch.delenv("TOGETHER_API_BASE", raising=False)
|
||||
config = BaseEmbedderConfig(model=DEFAULT_MODEL, embedding_dims=DEFAULT_EMBEDDING_DIMS, api_key="api_key")
|
||||
embedder = TogetherEmbedding(config)
|
||||
assert str(embedder.client.base_url) == "https://api.together.ai/v1/"
|
||||
|
||||
# case2: with env variable TOGETHER_API_BASE
|
||||
provider_base_url = "https://api.provider.com/v1/"
|
||||
monkeypatch.setenv("TOGETHER_API_BASE", provider_base_url)
|
||||
config = BaseEmbedderConfig(model=DEFAULT_MODEL, embedding_dims=DEFAULT_EMBEDDING_DIMS, api_key="api_key")
|
||||
embedder = TogetherEmbedding(config)
|
||||
assert str(embedder.client.base_url) == provider_base_url
|
||||
|
||||
# case3: with config.together_base_url (explicit config beats env var)
|
||||
config_base_url = "https://api.config.com/v1/"
|
||||
config = BaseEmbedderConfig(
|
||||
model=DEFAULT_MODEL,
|
||||
embedding_dims=DEFAULT_EMBEDDING_DIMS,
|
||||
api_key="api_key",
|
||||
together_base_url=config_base_url,
|
||||
)
|
||||
embedder = TogetherEmbedding(config)
|
||||
assert str(embedder.client.base_url) == config_base_url
|
||||
|
||||
@@ -3,6 +3,7 @@ from unittest.mock import Mock, patch
|
||||
import pytest
|
||||
|
||||
from mem0.configs.llms.base import BaseLlmConfig
|
||||
from mem0.configs.llms.together import TogetherConfig
|
||||
from mem0.llms.together import TogetherLLM
|
||||
|
||||
|
||||
@@ -14,6 +15,38 @@ def mock_together_client():
|
||||
yield mock_client
|
||||
|
||||
|
||||
def test_together_llm_base_url(monkeypatch):
|
||||
# case1: default config uses Together's official base url
|
||||
monkeypatch.delenv("TOGETHER_API_BASE", raising=False)
|
||||
config = BaseLlmConfig(
|
||||
model="mistralai/Mixtral-8x7B-Instruct-v0.1", temperature=0.7, max_tokens=100, top_p=1.0, api_key="api_key"
|
||||
)
|
||||
llm = TogetherLLM(config)
|
||||
assert str(llm.client.base_url) == "https://api.together.ai/v1/"
|
||||
|
||||
# case2: with env variable TOGETHER_API_BASE
|
||||
provider_base_url = "https://api.provider.com/v1/"
|
||||
monkeypatch.setenv("TOGETHER_API_BASE", provider_base_url)
|
||||
config = TogetherConfig(
|
||||
model="mistralai/Mixtral-8x7B-Instruct-v0.1", temperature=0.7, max_tokens=100, top_p=1.0, api_key="api_key"
|
||||
)
|
||||
llm = TogetherLLM(config)
|
||||
assert str(llm.client.base_url) == provider_base_url
|
||||
|
||||
# case3: with config.together_base_url (explicit config beats env var)
|
||||
config_base_url = "https://api.config.com/v1/"
|
||||
config = TogetherConfig(
|
||||
model="mistralai/Mixtral-8x7B-Instruct-v0.1",
|
||||
temperature=0.7,
|
||||
max_tokens=100,
|
||||
top_p=1.0,
|
||||
api_key="api_key",
|
||||
together_base_url=config_base_url,
|
||||
)
|
||||
llm = TogetherLLM(config)
|
||||
assert str(llm.client.base_url) == config_base_url
|
||||
|
||||
|
||||
def test_generate_response_without_tools(mock_together_client):
|
||||
config = BaseLlmConfig(model="mistralai/Mixtral-8x7B-Instruct-v0.1", temperature=0.7, max_tokens=100, top_p=1.0)
|
||||
llm = TogetherLLM(config)
|
||||
|
||||
Reference in New Issue
Block a user