Skip to content

Commit

Permalink
make image inputs compatible with langchain_ollama (langchain-ai#24619)
Browse files Browse the repository at this point in the history
  • Loading branch information
isahers1 authored Jul 27, 2024
1 parent 0535d72 commit 152427e
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 7 deletions.
17 changes: 10 additions & 7 deletions libs/partners/ollama/langchain_ollama/chat_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -346,7 +346,7 @@ def _convert_messages_to_ollama_messages(
) -> Sequence[Message]:
ollama_messages: List = []
for message in messages:
role = ""
role: Literal["user", "assistant", "system", "tool"]
tool_call_id: Optional[str] = None
tool_calls: Optional[List[Dict[str, Any]]] = None
if isinstance(message, HumanMessage):
Expand Down Expand Up @@ -383,11 +383,13 @@ def _convert_messages_to_ollama_messages(
image_url = None
temp_image_url = content_part.get("image_url")
if isinstance(temp_image_url, str):
image_url = content_part["image_url"]
image_url = temp_image_url
elif (
isinstance(temp_image_url, dict) and "url" in temp_image_url
isinstance(temp_image_url, dict)
and "url" in temp_image_url
and isinstance(temp_image_url["url"], str)
):
image_url = temp_image_url
image_url = temp_image_url["url"]
else:
raise ValueError(
"Only string image_url or dict with string 'url' "
Expand All @@ -408,15 +410,16 @@ def _convert_messages_to_ollama_messages(
"Must either have type 'text' or type 'image_url' "
"with a string 'image_url' field."
)
msg = {
# Should convert to ollama.Message once role includes tool, and tool_call_id is in Message # noqa: E501
msg: dict = {
"role": role,
"content": content,
"images": images,
}
if tool_calls:
msg["tool_calls"] = tool_calls # type: ignore
if tool_call_id:
msg["tool_call_id"] = tool_call_id
if tool_calls:
msg["tool_calls"] = tool_calls
ollama_messages.append(msg)

return ollama_messages
Expand Down
22 changes: 22 additions & 0 deletions libs/partners/ollama/tests/integration_tests/test_chat_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

from typing import Type

import pytest
from langchain_core.language_models import BaseChatModel
from langchain_standard_tests.integration_tests import ChatModelIntegrationTests

from langchain_ollama.chat_models import ChatOllama
Expand All @@ -15,3 +17,23 @@ def chat_model_class(self) -> Type[ChatOllama]:
@property
def chat_model_params(self) -> dict:
return {"model": "llama3-groq-tool-use"}

@property
def supports_image_inputs(self) -> bool:
return True

@pytest.mark.xfail(
reason=(
"Fails with 'AssertionError'. Ollama does not support 'tool_choice' yet."
)
)
def test_structured_output(self, model: BaseChatModel) -> None:
super().test_structured_output(model)

@pytest.mark.xfail(
reason=(
"Fails with 'AssertionError'. Ollama does not support 'tool_choice' yet."
)
)
def test_structured_output_pydantic_2_v1(self, model: BaseChatModel) -> None:
super().test_structured_output_pydantic_2_v1(model)

0 comments on commit 152427e

Please sign in to comment.