From 69a4b675b2ebc82e4ad92023dc38784c71853dbd Mon Sep 17 00:00:00 2001 From: Madhuri Pednekar Date: Thu, 24 Apr 2025 17:17:20 +0530 Subject: [PATCH 1/2] Added IBM watsonx model support --- .env.example | 4 ++++ docker-compose.yml | 3 +++ requirements.txt | 1 + src/utils/utils.py | 22 +++++++++++++++++++++- tests/test_llm_api.py | 8 +++++++- 5 files changed, 36 insertions(+), 2 deletions(-) diff --git a/.env.example b/.env.example index d99f358..ad0bc6a 100644 --- a/.env.example +++ b/.env.example @@ -30,6 +30,10 @@ UNBOUND_API_KEY= SiliconFLOW_ENDPOINT=https://api.siliconflow.cn/v1/ SiliconFLOW_API_KEY= +IBM_ENDPOINT=https://us-south.ml.cloud.ibm.com +IBM_API_KEY= +IBM_PROJECT_ID= + # Set to false to disable anonymized telemetry ANONYMIZED_TELEMETRY=false diff --git a/docker-compose.yml b/docker-compose.yml index 9c907e6..75b0fd0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -28,6 +28,9 @@ services: - ALIBABA_API_KEY=${ALIBABA_API_KEY:-} - MOONSHOT_ENDPOINT=${MOONSHOT_ENDPOINT:-https://api.moonshot.cn/v1} - MOONSHOT_API_KEY=${MOONSHOT_API_KEY:-} + - IBM_API_KEY=${IBM_API_KEY:-} + - IBM_ENDPOINT=${IBM_ENDPOINT:-https://us-south.ml.cloud.ibm.com} + - IBM_PROJECT_ID=${IBM_PROJECT_ID:-} - BROWSER_USE_LOGGING_LEVEL=${BROWSER_USE_LOGGING_LEVEL:-info} - ANONYMIZED_TELEMETRY=${ANONYMIZED_TELEMETRY:-false} - CHROME_PATH=/usr/bin/google-chrome diff --git a/requirements.txt b/requirements.txt index 7f2d12c..14f1a6a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,3 +5,4 @@ json-repair langchain-mistralai==0.2.4 langchain-google-genai==2.0.8 MainContentExtractor==0.0.4 +langchain-ibm==0.3.10 \ No newline at end of file diff --git a/src/utils/utils.py b/src/utils/utils.py index 62fc8a8..f39dda0 100644 --- a/src/utils/utils.py +++ b/src/utils/utils.py @@ -13,6 +13,7 @@ from langchain_mistralai import ChatMistralAI from langchain_google_genai import ChatGoogleGenerativeAI from langchain_ollama import ChatOllama from langchain_openai import AzureChatOpenAI, ChatOpenAI +from langchain_ibm import ChatWatsonx from .llm import DeepSeekR1ChatOpenAI, DeepSeekR1ChatOllama @@ -24,7 +25,8 @@ PROVIDER_DISPLAY_NAMES = { "google": "Google", "alibaba": "Alibaba", "moonshot": "MoonShot", - "unbound": "Unbound AI" + "unbound": "Unbound AI", + "ibm": "IBM" } @@ -154,6 +156,23 @@ def get_llm_model(provider: str, **kwargs): base_url=base_url, api_key=api_key, ) + elif provider == "ibm": + parameters = { + "temperature": kwargs.get("temperature", 0.0), + "max_tokens": kwargs.get("num_ctx", 32000) + } + if not kwargs.get("base_url", ""): + base_url = os.getenv("IBM_ENDPOINT", "https://us-south.ml.cloud.ibm.com") + else: + base_url = kwargs.get("base_url") + + return ChatWatsonx( + model_id=kwargs.get("model_name", "ibm/granite-vision-3.1-2b-preview"), + url=base_url, + project_id=os.getenv("IBM_PROJECT_ID"), + apikey=os.getenv("IBM_API_KEY"), + params=parameters + ) elif provider == "moonshot": return ChatOpenAI( model=kwargs.get("model_name", "moonshot-v1-32k-vision-preview"), @@ -234,6 +253,7 @@ model_names = { "Pro/THUDM/chatglm3-6b", "Pro/THUDM/glm-4-9b-chat", ], + "ibm": ["meta-llama/llama-4-maverick-17b-128e-instruct-fp8","meta-llama/llama-3-2-90b-vision-instruct"] } diff --git a/tests/test_llm_api.py b/tests/test_llm_api.py index 1eb45f4..05bc06e 100644 --- a/tests/test_llm_api.py +++ b/tests/test_llm_api.py @@ -41,6 +41,7 @@ def get_env_value(key, provider): "mistral": {"api_key": "MISTRAL_API_KEY", "base_url": "MISTRAL_ENDPOINT"}, "alibaba": {"api_key": "ALIBABA_API_KEY", "base_url": "ALIBABA_ENDPOINT"}, "moonshot":{"api_key": "MOONSHOT_API_KEY", "base_url": "MOONSHOT_ENDPOINT"}, + "ibm": {"api_key": "IBM_API_KEY", "base_url": "IBM_ENDPOINT"} } if provider in env_mappings and key in env_mappings[provider]: @@ -126,12 +127,17 @@ def test_moonshot_model(): config = LLMConfig(provider="moonshot", model_name="moonshot-v1-32k-vision-preview") test_llm(config, "Describe this image", "assets/examples/test.png") +def test_ibm_model(): + config = LLMConfig(provider="ibm", model_name="meta-llama/llama-4-maverick-17b-128e-instruct-fp8") + test_llm(config, "Describe this image", "assets/examples/test.png") + if __name__ == "__main__": # test_openai_model() # test_google_model() # test_azure_openai_model() #test_deepseek_model() # test_ollama_model() - test_deepseek_r1_model() + # test_deepseek_r1_model() # test_deepseek_r1_ollama_model() # test_mistral_model() + test_ibm_model() From e2083af25537b08b252cc7ae6a9405582072afb2 Mon Sep 17 00:00:00 2001 From: Madhuri Pednekar Date: Thu, 24 Apr 2025 17:30:55 +0530 Subject: [PATCH 2/2] Added ibm/granite-vision-3.1-2b-preview in the list of supported models --- src/utils/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/utils.py b/src/utils/utils.py index f39dda0..10ebf7a 100644 --- a/src/utils/utils.py +++ b/src/utils/utils.py @@ -253,7 +253,7 @@ model_names = { "Pro/THUDM/chatglm3-6b", "Pro/THUDM/glm-4-9b-chat", ], - "ibm": ["meta-llama/llama-4-maverick-17b-128e-instruct-fp8","meta-llama/llama-3-2-90b-vision-instruct"] + "ibm": ["ibm/granite-vision-3.1-2b-preview", "meta-llama/llama-4-maverick-17b-128e-instruct-fp8","meta-llama/llama-3-2-90b-vision-instruct"] }