diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
 # Changelog for langchain-hs-ollama
 
+## 0.0.6.1 - 2026-10-25
+
+- Upgrade to `ollama-haskell >= 0.4.2.0`.
+- Update `ToolCall`, `Message`, and `ChatRequest` constructors and accessors for `ollama-haskell-0.4.2.0` compatibility.
+
 ## 0.0.6.0 - 2026-10-02
 
 - Initial release. Split from the monolithic `langchain-hs` package.
diff --git a/langchain-hs-ollama.cabal b/langchain-hs-ollama.cabal
--- a/langchain-hs-ollama.cabal
+++ b/langchain-hs-ollama.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           langchain-hs-ollama
-version:        0.0.6.0
+version:        0.0.6.1
 synopsis:       Ollama provider and embeddings for langchain-hs
 description:    Ollama ChatModel provider and text embeddings integration for langchain-hs. Depends only on ollama-haskell; does not pull in OpenAI or Gemini dependencies.
 category:       AI
@@ -45,7 +45,7 @@
     , conduit ==1.3.*
     , langchain-hs-core ==0.0.6.*
     , mtl >=2.2 && <2.4
-    , ollama-haskell >=0.4.0.0 && <0.5
+    , ollama-haskell >=0.4.2.0 && <0.5
     , text >=1.2 && <3
   default-language: Haskell2010
 
diff --git a/src/Langchain/Provider/Ollama.hs b/src/Langchain/Provider/Ollama.hs
--- a/src/Langchain/Provider/Ollama.hs
+++ b/src/Langchain/Provider/Ollama.hs
@@ -233,13 +233,10 @@
         Nothing -> Nothing
         Just tcs ->
           Just
-            [ OTool.ToolCall
-                { OTool.tcFunction =
-                    OTool.ToolCallFunction
-                      { OTool.tcfName = toolCallName tc
-                      , OTool.tcfArguments = parseArgs (toolCallArguments tc)
-                      }
-                }
+            [ OTool.mkToolCall
+                (OTool.mkToolCallFunction
+                   (toolCallName tc)
+                   (parseArgs (toolCallArguments tc)))
             | tc <- tcs
             ]
       parseArgs v = case v of
@@ -250,20 +247,28 @@
         _ -> case fromJSON v of
           Success m -> m
           _ -> mempty
-   in O.Message r txt imgs tools (messageName msg) Nothing
+   in O.Message
+        { O.messageRole = r
+        , O.messageContent = txt
+        , O.messageImages = imgs
+        , O.messageToolCalls = tools
+        , O.messageToolName = messageName msg
+        , O.messageThinking = Nothing
+        , O.messageToolCallId = Nothing
+        }
 
 -- | Convert Ollama 'O.Message' to core 'Message'.
 fromOllamaMessage :: O.Message -> Message
-fromOllamaMessage (O.Message r txt _imgs tools name _think) =
-  let cRole = fromOllamaRole r
-      cMsg = (textMessage cRole txt) {messageName = name}
-      cTools = case tools of
+fromOllamaMessage oMsg =
+  let cRole = fromOllamaRole (O.messageRole oMsg)
+      cMsg = (textMessage cRole (O.messageContent oMsg)) {messageName = O.messageToolName oMsg}
+      cTools = case O.messageToolCalls oMsg of
         Nothing -> Nothing
         Just tcs ->
           Just
             [ ToolCall
-                { toolCallId = ""
-                , toolCallType = "function"
+                { toolCallId = fromMaybe "" (OTool.tcId tc)
+                , toolCallType = fromMaybe "function" (OTool.tcType tc)
                 , toolCallName = OTool.tcfName (OTool.tcFunction tc)
                 , toolCallArguments = toJSON (OTool.tcfArguments (OTool.tcFunction tc))
                 }
@@ -297,6 +302,8 @@
         , OllamaChat.chStream = Just False
         , OllamaChat.chatKeepAlive = ollamaKeepAlive cfg
         , OllamaChat.chatThink = ollamaThink cfg
+        , OllamaChat.chatLogprobs = Nothing
+        , OllamaChat.chatTopLogprobs = Nothing
         }
 
 instance ChatModel Ollama where
diff --git a/test/Test/Langchain/Provider/OllamaConversionSpec.hs b/test/Test/Langchain/Provider/OllamaConversionSpec.hs
--- a/test/Test/Langchain/Provider/OllamaConversionSpec.hs
+++ b/test/Test/Langchain/Provider/OllamaConversionSpec.hs
@@ -41,13 +41,13 @@
         "Message Conversion Tests"
         [ testCase "toOllamaMessage extracts base64 image data" $ do
             let msg = imageMessage User "image/png" "iVBORw0KGgoAAAANSUhEUg=="
-                (O.Message r _ imgs _ _ _) = toOllamaMessage msg
-            r @?= O.User
-            case imgs of
+                oMsg = toOllamaMessage msg
+            O.messageRole oMsg @?= O.User
+            case O.messageImages oMsg of
               Just [Base64Image b64] -> b64 @?= "iVBORw0KGgoAAAANSUhEUg=="
               _ -> assertFailure "Expected single base64 image in Ollama message"
         , testCase "fromOllamaMessage parses role and text content" $ do
-            let oMsg = O.Message O.Assistant "Response content" Nothing Nothing Nothing Nothing
+            let oMsg = O.assistantMessage "Response content"
                 msg = fromOllamaMessage oMsg
             messageRole msg @?= Assistant
             extractMessageText msg @?= "Response content"
@@ -62,9 +62,9 @@
                     Nothing
                     Nothing
                     Map.empty
-                (O.Message _ txt imgs _ _ _) = toOllamaMessage msg
-            txt @?= "Analyze this:"
-            case imgs of
+                oMsg = toOllamaMessage msg
+            O.messageContent oMsg @?= "Analyze this:"
+            case O.messageImages oMsg of
               Just [Base64Image b64] -> b64 @?= "dGVzdA=="
               _ -> assertFailure "Expected image block conversion"
         ]
