# Issue with llm.bind\_tools()

**URL:** <https://community.sambanova.ai/t/issue-with-llm-bind-tools/665>\
**Category:** Discussion\
**Tags:** dev\
**Created:** [November 23, 2024, 8:19am UTC](https://community.sambanova.ai/t/issue-with-llm-bind-tools/665 "2024-11-23T08:19:39Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![maybinmichael91](https://sea1.discourse-cdn.com/sambanova/user_avatar/community.sambanova.ai/maybinmichael91/32/1195_2.png) [@maybinmichael91](https://community.sambanova.ai/u/maybinmichael91)\
**Post date:** [November 23, 2024, 8:19am UTC](https://community.sambanova.ai/t/issue-with-llm-bind-tools/665/1 "2024-11-23T08:19:39Z")

</div>

I am facing two errors with **llm.bind\_tools()** in two scenarios. Please guide what is the issue with my code.

**My code:**

from langchain\_openai import ChatOpenAI  
import os  
from langchain\_community.tools import ArxivQueryRun  
from langchain\_community.tools.tavily\_search import TavilySearchResults  
from langchain\_community.utilities import ArxivAPIWrapper  
from langchain\_community.tools import ArxivQueryRun  
from langchain import hub  
from langchain\_core.messages import HumanMessage, SystemMessage  
from langchain\_community.chat\_models.sambanova import ChatSambaNovaCloud

os.environ[“SAMBANOVA\_API\_KEY”] = ‘66ea09\*\*\*\*’  
os.environ[“TAVILY\_API\_KEY”] = ‘tvly-B\*\*\*\*’  
os.environ[“LANGCHAIN\_API\_KEY”] = ‘lsv2\_pt\_22\*\*\*\*\*’

llm1 = ChatOpenAI(  
base\_url=“[https://api.sambanova.ai/v1/](https://api.sambanova.ai/v1/)”,  
api\_key=os.environ[“SAMBANOVA\_API\_KEY”],  
streaming=False,  
model=“Meta-Llama-3.1-70B-Instruct”,  
temperature=0.1,  
)

llm2 = ChatSambaNovaCloud(  
sambanova\_url = “[https://api.sambanova.ai/v1/chat/completions](https://api.sambanova.ai/v1/chat/completions)”,  
sambanova\_api\_key = os.environ[“SAMBANOVA\_API\_KEY”],  
model = “Meta-Llama-3.1-70B-Instruct”,  
max\_tokens = 1000,  
temperature = 0,  
)

arxiv\_wrapper = ArxivAPIWrapper(top\_k\_results=1, doc\_content\_chars\_max=200)  
arxiv\_tool = ArxivQueryRun(arxiv\_wrapper=arxiv\_wrapper)  
tavily\_tool =TavilySearchResults(max\_results=5, )  
tools = [  
tavily\_tool,  
arxiv\_tool  
]

llm1\_with\_tools = llm1.bind\_tools(tools)  
llm1\_with\_tools.invoke([HumanMessage(content=“what is the current weather in california?”)]) # Error 1 is with this line

llm2\_with\_tools = llm2.bind\_tools(tools) # Error 2 is with this line

**Error 1:**

## D:\OneDrive\mydirectory\venv\Lib\site-packages\pydantic\main.py:426: UserWarning: Pydantic serializer warnings: **Expected `str` but got `dict` with value `{'query': 'Current weather in California'}` - serialized value may not be as expected** return self. **pydantic\_serializer**.to\_python(

ValidationError Traceback (most recent call last)  
Cell In[71], line 1  
----\> 1 llm1\_with\_tools.invoke([HumanMessage(content=“what is the current weather in california?”)])

File D:\OneDrive\mydirectoryvenv\Lib\site-packages\langchain\_core\runnables\base.py:5354, in RunnableBindingBase.invoke(self, input, config, \*\*kwargs)  
5348 def invoke(  
5349 self,  
5350 input: Input,  
5351 config: Optional[RunnableConfig] = None,  
5352 \*\*kwargs: Optional[Any],  
5353 ) → Output:  
 → 5354 return self.bound.invoke(  
5355 input,  
5356 self.\_merge\_configs(config),  
5357 \*\*{\*\*self.kwargs, \*\*kwargs},  
5358 )

File D:\OneDrive\Learning Room\GenAI Projects\Sambanova\iChat\venv\Lib\site-packages\langchain\_core\language\_models\chat\_models.py:286, in BaseChatModel.invoke(self, input, config, stop, \*\*kwargs)  
275 def invoke(  
276 self,  
277 input: LanguageModelInput,  
(…)  
281 \*\*kwargs: Any,  
282 ) → BaseMessage:  
283 config = ensure\_config(config)  
284 return cast(  
285 ChatGeneration,  
 → 286 self.generate\_prompt(  
287 [self.\_convert\_input(input)],  
288 stop=stop,  
289 callbacks=config.get(“callbacks”),  
290 tags=config.get(“tags”),  
291 metadata=config.get(“metadata”),  
292 run\_name=config.get(“run\_name”),  
293 run\_id=config.pop(“run\_id”, None),  
294 \*\*kwargs,  
295 ).generations[0][0],  
296 ).message

File D:\OneDrive\mydirectory\venv\Lib\site-packages\langchain\_core\language\_models\chat\_models.py:786, in BaseChatModel.generate\_prompt(self, prompts, stop, callbacks, \*\*kwargs)  
778 def generate\_prompt(  
779 self,  
780 prompts: list[PromptValue],  
(…)  
783 \*\*kwargs: Any,  
784 ) → LLMResult:  
785 prompt\_messages = [p.to\_messages() for p in prompts]  
 → 786 return self.generate(prompt\_messages, stop=stop, callbacks=callbacks, \*\*kwargs)

File D:\OneDrive\mydirectory\venv\Lib\site-packages\langchain\_core\language\_models\chat\_models.py:643, in BaseChatModel.generate(self, messages, stop, callbacks, tags, metadata, run\_name, run\_id, \*\*kwargs)  
641 if run\_managers:  
642 run\_managers[i].on\_llm\_error(e, response=LLMResult(generations=))  
 → 643 raise e  
644 flattened\_outputs = [  
645 LLMResult(generations=[res.generations], llm\_output=res.llm\_output) # type: ignore[list-item]  
646 for res in results  
647 ]  
648 llm\_output = self.\_combine\_llm\_outputs([res.llm\_output for res in results])

File D:\OneDrive\mydirectory\iChat\venv\Lib\site-packages\langchain\_core\language\_models\chat\_models.py:633, in BaseChatModel.generate(self, messages, stop, callbacks, tags, metadata, run\_name, run\_id, \*\*kwargs)  
630 for i, m in enumerate(messages):  
631 try:  
632 results.append(  
 → 633 self.\_generate\_with\_cache(  
634 m,  
635 stop=stop,  
636 run\_manager=run\_managers[i] if run\_managers else None,  
637 \*\*kwargs,  
638 )  
639 )  
640 except BaseException as e:  
641 if run\_managers:

File D:\OneDrive\Learning Room\GenAI Projects\Sambanova\iChat\venv\Lib\site-packages\langchain\_core\language\_models\chat\_models.py:851, in BaseChatModel.\_generate\_with\_cache(self, messages, stop, run\_manager, \*\*kwargs)  
849 else:  
850 if inspect.signature(self.\_generate).parameters.get(“run\_manager”):  
 → 851 result = self.\_generate(  
852 messages, stop=stop, run\_manager=run\_manager, \*\*kwargs  
853 )  
854 else:  
855 result = self.\_generate(messages, stop=stop, \*\*kwargs)

File D:\OneDrive\Learning Room\GenAI Projects\Sambanova\iChat\venv\Lib\site-packages\langchain\_openai\chat\_models\base.py:690, in BaseChatOpenAI.\_generate(self, messages, stop, run\_manager, \*\*kwargs)  
688 else:  
689 response = self.client.create(\*\*payload)  
 → 690 return self.\_create\_chat\_result(response, generation\_info)

File D:\OneDrive\mydirectory\venv\Lib\site-packages\langchain\_openai\chat\_models\base.py:727, in BaseChatOpenAI.\_create\_chat\_result(self, response, generation\_info)  
725 token\_usage = response\_dict.get(“usage”)  
726 for res in response\_dict[“choices”]:  
 → 727 message = \_convert\_dict\_to\_message(res[“message”])  
728 if token\_usage and isinstance(message, AIMessage):  
729 message.usage\_metadata = \_create\_usage\_metadata(token\_usage)

File D:\OneDrive\mydirectory\venv\Lib\site-packages\langchain\_openai\chat\_models\base.py:134, in \_convert\_dict\_to\_message(\_dict)  
132 if audio := _dict.get(“audio”):  
133 additional\_kwargs[“audio”] = audio  
 → 134 return AIMessage(  
135 content=content,  
136 additional\_kwargs=additional\_kwargs,  
137 name=name,  
138 id=id_,  
139 tool\_calls=tool\_calls,  
140 invalid\_tool\_calls=invalid\_tool\_calls,  
141 )  
142 elif role == “system”:  
143 return SystemMessage(content=_dict.get(“content”, “”), name=name, id=id_)

File D:\OneDrive\mydirectory\venv\Lib\site-packages\langchain\_core\messages\ai.py:179, in AIMessage. **init** (self, content, \*\*kwargs)  
170 def **init** (  
171 self, content: Union[str, list[Union[str, dict]]], \*\*kwargs: Any  
172 ) → None:  
173 “”“Pass in content as positional arg.  
174  
175 Args:  
176 content: The content of the message.  
177 kwargs: Additional arguments to pass to the parent class.  
178 “””  
 → 179 super(). **init** (content=content, \*\*kwargs)

File D:\OneDrive\mydirectory\venv\Lib\site-packages\langchain\_core\messages\base.py:76, in BaseMessage. **init** (self, content, \*\*kwargs)  
67 def **init** (  
68 self, content: Union[str, list[Union[str, dict]]], \*\*kwargs: Any  
69 ) → None:  
70 “”“Pass in content as positional arg.  
71  
72 Args:  
73 content: The string contents of the message.  
74 kwargs: Additional fields to pass to the  
75 “””  
—\> 76 super(). **init** (content=content, \*\*kwargs)

File D:\OneDrive\mydirectory\venv\Lib\site-packages\langchain\_core\load\serializable.py:125, in Serializable. **init** (self, \*args, \*\*kwargs)  
123 def **init** (self, \*args: Any, \*\*kwargs: Any) → None:  
124 “”“”“”  
 → 125 super(). **init** (\*args, \*\*kwargs)

File D:\OneDrive\mydirectory\venv\Lib\site-packages\pydantic\main.py:214, in BaseModel. **init** (self, \*\*data)  
212 # ` __tracebackhide__ ` tells pytest and some other tools to omit this function from tracebacks  
213 **tracebackhide** = True  
 → 214 validated\_self = self. **pydantic\_validator**.validate\_python(data, self\_instance=self)  
215 if self is not validated\_self:  
216 warnings.warn(  
217 ‘A custom validator is returning a value other than `self`.\n’  
218 “Returning anything other than `self` from a top level model validator isn’t supported when validating via ` __init__ `.\n”  
219 ‘See the `model_validator` docs ([Validators - Pydantic Validation](https://docs.pydantic.dev/latest/concepts/validators/#model-validators)) for more details.’,  
220 stacklevel=2,  
221 )

ValidationError: 1 validation error for AIMessage  
invalid\_tool\_calls.0.args  
Input should be a valid string [type=string\_type, input\_value={‘query’: ‘Current weather in California’}, input\_type=dict]  
For further information visit [Redirecting...](https://errors.pydantic.dev/2.10/v/string_type)

**Error 2:**

NotImplementedError Traceback (most recent call last)  
Cell In[74], line 1  
----\> 1 llm2\_with\_tools = llm2.bind\_tools(tools)  
2 llm2\_with\_tools

File D:\OneDrive\mydiretcory\venv\Lib\site-packages\langchain\_core\language\_models\chat\_models.py:1115, in BaseChatModel.bind\_tools(self, tools, \*\*kwargs)  
1108 def bind\_tools(  
1109 self,  
1110 tools: Sequence[  
(…)  
1113 \*\*kwargs: Any,  
1114 ) → Runnable[LanguageModelInput, BaseMessage]:  
 → 1115 raise NotImplementedError

NotImplementedError:

---

<div class="post-metadata">

**Author:** ![hello1](https://sea1.discourse-cdn.com/sambanova/user_avatar/community.sambanova.ai/hello1/32/2812_2.png) [@hello1](https://community.sambanova.ai/u/hello1)\
**Post date:** [November 24, 2024, 4:44pm UTC](https://community.sambanova.ai/t/issue-with-llm-bind-tools/665/2 "2024-11-24T16:44:23Z")

</div>

In most cases, tools in wrappers like Langchain are not fully compatible.

I recommend channeling these tools using the Sambanova tool call example. It might look more difficult to implement, but it is less framework-dependent.

You can see the example on the following link:  
[https://community.sambanova.ai/t/function-calling-and-json-mode-in-sambanova-cloud/540](https://community.sambanova.ai/t/function-calling-and-json-mode-in-sambanova-cloud/540)

---

<div class="post-metadata">

**Author:** ![Coby](https://sea1.discourse-cdn.com/sambanova/user_avatar/community.sambanova.ai/coby/32/17_2.png) [@Coby](https://community.sambanova.ai/u/Coby)\
**Post date:** [November 24, 2024, 10:05pm UTC](https://community.sambanova.ai/t/issue-with-llm-bind-tools/665/3 "2024-11-24T22:05:52Z")

</div>

@maybinmichael91 welcome to the community and I am sorry you are having issues. Did the thread suggested by @hello1 help?

---

<div class="post-metadata">

**Author:** ![Coby](https://sea1.discourse-cdn.com/sambanova/user_avatar/community.sambanova.ai/coby/32/17_2.png) [@Coby](https://community.sambanova.ai/u/Coby)\
**Post date:** [November 24, 2024, 10:06pm UTC](https://community.sambanova.ai/t/issue-with-llm-bind-tools/665/4 "2024-11-24T22:06:23Z")

</div>

@hello1 Thank you for lending a hand.

---

<div class="post-metadata">

**Author:** ![maybinmichael91](https://sea1.discourse-cdn.com/sambanova/user_avatar/community.sambanova.ai/maybinmichael91/32/1195_2.png) [@maybinmichael91](https://community.sambanova.ai/u/maybinmichael91)\
**Post date:** [November 28, 2024, 1:34pm UTC](https://community.sambanova.ai/t/issue-with-llm-bind-tools/665/5 "2024-11-28T13:34:46Z")

</div>

Thank you @hello1 . I willtry the recommended approach.

---

<div class="post-metadata">

**Author:** ![maybinmichael91](https://sea1.discourse-cdn.com/sambanova/user_avatar/community.sambanova.ai/maybinmichael91/32/1195_2.png) [@maybinmichael91](https://community.sambanova.ai/u/maybinmichael91)\
**Post date:** [November 28, 2024, 1:36pm UTC](https://community.sambanova.ai/t/issue-with-llm-bind-tools/665/6 "2024-11-28T13:36:14Z")

</div>

Hi @Coby thank you, I am yet to try the approach.
