{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "e8b237f4-f735-4177-a3fb-1520d525fe32", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Collecting smolagents[litellm]\n", " Using cached smolagents-1.24.0-py3-none-any.whl.metadata (17 kB)\n", "Collecting huggingface-hub<1.0.0,>=0.31.2 (from smolagents[litellm])\n", " Using cached huggingface_hub-0.36.2-py3-none-any.whl.metadata (15 kB)\n", "Requirement already satisfied: requests>=2.32.3 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from smolagents[litellm]) (2.32.3)\n", "Collecting rich>=13.9.4 (from smolagents[litellm])\n", " Using cached rich-14.3.2-py3-none-any.whl.metadata (18 kB)\n", "Requirement already satisfied: jinja2>=3.1.4 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from smolagents[litellm]) (3.1.4)\n", "Collecting pillow>=10.0.1 (from smolagents[litellm])\n", " Downloading pillow-12.1.0-cp312-cp312-macosx_11_0_arm64.whl.metadata (8.8 kB)\n", "Collecting python-dotenv (from smolagents[litellm])\n", " Using cached python_dotenv-1.2.1-py3-none-any.whl.metadata (25 kB)\n", "Collecting litellm>=1.60.2 (from smolagents[litellm])\n", " Using cached litellm-1.81.9-py3-none-any.whl.metadata (30 kB)\n", "Collecting filelock (from huggingface-hub<1.0.0,>=0.31.2->smolagents[litellm])\n", " Using cached filelock-3.20.3-py3-none-any.whl.metadata (2.1 kB)\n", "Collecting fsspec>=2023.5.0 (from huggingface-hub<1.0.0,>=0.31.2->smolagents[litellm])\n", " Using cached fsspec-2026.2.0-py3-none-any.whl.metadata (10 kB)\n", "Collecting hf-xet<2.0.0,>=1.1.3 (from huggingface-hub<1.0.0,>=0.31.2->smolagents[litellm])\n", " Using cached hf_xet-1.2.0-cp37-abi3-macosx_11_0_arm64.whl.metadata (4.9 kB)\n", "Requirement already satisfied: packaging>=20.9 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from huggingface-hub<1.0.0,>=0.31.2->smolagents[litellm]) (24.2)\n", "Requirement already satisfied: pyyaml>=5.1 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from huggingface-hub<1.0.0,>=0.31.2->smolagents[litellm]) (6.0.2)\n", "Collecting tqdm>=4.42.1 (from huggingface-hub<1.0.0,>=0.31.2->smolagents[litellm])\n", " Downloading tqdm-4.67.3-py3-none-any.whl.metadata (57 kB)\n", "Requirement already satisfied: typing-extensions>=3.7.4.3 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from huggingface-hub<1.0.0,>=0.31.2->smolagents[litellm]) (4.12.2)\n", "Requirement already satisfied: MarkupSafe>=2.0 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jinja2>=3.1.4->smolagents[litellm]) (2.1.3)\n", "Collecting aiohttp>=3.10 (from litellm>=1.60.2->smolagents[litellm])\n", " Downloading aiohttp-3.13.3-cp312-cp312-macosx_11_0_arm64.whl.metadata (8.1 kB)\n", "Collecting click (from litellm>=1.60.2->smolagents[litellm])\n", " Using cached click-8.3.1-py3-none-any.whl.metadata (2.6 kB)\n", "Collecting fastuuid>=0.13.0 (from litellm>=1.60.2->smolagents[litellm])\n", " Downloading fastuuid-0.14.0-cp312-cp312-macosx_11_0_arm64.whl.metadata (1.1 kB)\n", "Requirement already satisfied: httpx>=0.23.0 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from litellm>=1.60.2->smolagents[litellm]) (0.27.0)\n", "Collecting importlib-metadata>=6.8.0 (from litellm>=1.60.2->smolagents[litellm])\n", " Downloading importlib_metadata-8.7.1-py3-none-any.whl.metadata (4.7 kB)\n", "Requirement already satisfied: jsonschema<5.0.0,>=4.23.0 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from litellm>=1.60.2->smolagents[litellm]) (4.23.0)\n", "Collecting openai>=2.8.0 (from litellm>=1.60.2->smolagents[litellm])\n", " Using cached openai-2.17.0-py3-none-any.whl.metadata (29 kB)\n", "Collecting pydantic<3.0.0,>=2.5.0 (from litellm>=1.60.2->smolagents[litellm])\n", " Using cached pydantic-2.12.5-py3-none-any.whl.metadata (90 kB)\n", "Collecting tiktoken>=0.7.0 (from litellm>=1.60.2->smolagents[litellm])\n", " Downloading tiktoken-0.12.0-cp312-cp312-macosx_11_0_arm64.whl.metadata (6.7 kB)\n", "Collecting tokenizers (from litellm>=1.60.2->smolagents[litellm])\n", " Using cached tokenizers-0.22.2-cp39-abi3-macosx_11_0_arm64.whl.metadata (7.3 kB)\n", "Requirement already satisfied: charset-normalizer<4,>=2 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from requests>=2.32.3->smolagents[litellm]) (3.3.2)\n", "Requirement already satisfied: idna<4,>=2.5 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from requests>=2.32.3->smolagents[litellm]) (3.7)\n", "Requirement already satisfied: urllib3<3,>=1.21.1 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from requests>=2.32.3->smolagents[litellm]) (2.2.3)\n", "Requirement already satisfied: certifi>=2017.4.17 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from requests>=2.32.3->smolagents[litellm]) (2024.12.14)\n", "Collecting markdown-it-py>=2.2.0 (from rich>=13.9.4->smolagents[litellm])\n", " Downloading markdown_it_py-4.0.0-py3-none-any.whl.metadata (7.3 kB)\n", "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from rich>=13.9.4->smolagents[litellm]) (2.15.1)\n", "Collecting aiohappyeyeballs>=2.5.0 (from aiohttp>=3.10->litellm>=1.60.2->smolagents[litellm])\n", " Using cached aiohappyeyeballs-2.6.1-py3-none-any.whl.metadata (5.9 kB)\n", "Collecting aiosignal>=1.4.0 (from aiohttp>=3.10->litellm>=1.60.2->smolagents[litellm])\n", " Using cached aiosignal-1.4.0-py3-none-any.whl.metadata (3.7 kB)\n", "Requirement already satisfied: attrs>=17.3.0 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from aiohttp>=3.10->litellm>=1.60.2->smolagents[litellm]) (24.3.0)\n", "Collecting frozenlist>=1.1.1 (from aiohttp>=3.10->litellm>=1.60.2->smolagents[litellm])\n", " Downloading frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl.metadata (20 kB)\n", "Collecting multidict<7.0,>=4.5 (from aiohttp>=3.10->litellm>=1.60.2->smolagents[litellm])\n", " Downloading multidict-6.7.1-cp312-cp312-macosx_11_0_arm64.whl.metadata (5.3 kB)\n", "Collecting propcache>=0.2.0 (from aiohttp>=3.10->litellm>=1.60.2->smolagents[litellm])\n", " Downloading propcache-0.4.1-cp312-cp312-macosx_11_0_arm64.whl.metadata (13 kB)\n", "Collecting yarl<2.0,>=1.17.0 (from aiohttp>=3.10->litellm>=1.60.2->smolagents[litellm])\n", " Downloading yarl-1.22.0-cp312-cp312-macosx_11_0_arm64.whl.metadata (75 kB)\n", "Requirement already satisfied: anyio in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from httpx>=0.23.0->litellm>=1.60.2->smolagents[litellm]) (4.6.2)\n", "Requirement already satisfied: httpcore==1.* in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from httpx>=0.23.0->litellm>=1.60.2->smolagents[litellm]) (1.0.2)\n", "Requirement already satisfied: sniffio in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from httpx>=0.23.0->litellm>=1.60.2->smolagents[litellm]) (1.3.0)\n", "Requirement already satisfied: h11<0.15,>=0.13 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from httpcore==1.*->httpx>=0.23.0->litellm>=1.60.2->smolagents[litellm]) (0.14.0)\n", "Collecting zipp>=3.20 (from importlib-metadata>=6.8.0->litellm>=1.60.2->smolagents[litellm])\n", " Using cached zipp-3.23.0-py3-none-any.whl.metadata (3.6 kB)\n", "Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jsonschema<5.0.0,>=4.23.0->litellm>=1.60.2->smolagents[litellm]) (2023.7.1)\n", "Requirement already satisfied: referencing>=0.28.4 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jsonschema<5.0.0,>=4.23.0->litellm>=1.60.2->smolagents[litellm]) (0.30.2)\n", "Requirement already satisfied: rpds-py>=0.7.1 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jsonschema<5.0.0,>=4.23.0->litellm>=1.60.2->smolagents[litellm]) (0.10.6)\n", "Collecting mdurl~=0.1 (from markdown-it-py>=2.2.0->rich>=13.9.4->smolagents[litellm])\n", " Downloading mdurl-0.1.2-py3-none-any.whl.metadata (1.6 kB)\n", "Collecting distro<2,>=1.7.0 (from openai>=2.8.0->litellm>=1.60.2->smolagents[litellm])\n", " Using cached distro-1.9.0-py3-none-any.whl.metadata (6.8 kB)\n", "Collecting jiter<1,>=0.10.0 (from openai>=2.8.0->litellm>=1.60.2->smolagents[litellm])\n", " Downloading jiter-0.13.0-cp312-cp312-macosx_11_0_arm64.whl.metadata (5.2 kB)\n", "Collecting annotated-types>=0.6.0 (from pydantic<3.0.0,>=2.5.0->litellm>=1.60.2->smolagents[litellm])\n", " Using cached annotated_types-0.7.0-py3-none-any.whl.metadata (15 kB)\n", "Collecting pydantic-core==2.41.5 (from pydantic<3.0.0,>=2.5.0->litellm>=1.60.2->smolagents[litellm])\n", " Downloading pydantic_core-2.41.5-cp312-cp312-macosx_11_0_arm64.whl.metadata (7.3 kB)\n", "Collecting typing-extensions>=3.7.4.3 (from huggingface-hub<1.0.0,>=0.31.2->smolagents[litellm])\n", " Using cached typing_extensions-4.15.0-py3-none-any.whl.metadata (3.3 kB)\n", "Collecting typing-inspection>=0.4.2 (from pydantic<3.0.0,>=2.5.0->litellm>=1.60.2->smolagents[litellm])\n", " Using cached typing_inspection-0.4.2-py3-none-any.whl.metadata (2.6 kB)\n", "Collecting regex>=2022.1.18 (from tiktoken>=0.7.0->litellm>=1.60.2->smolagents[litellm])\n", " Downloading regex-2026.1.15-cp312-cp312-macosx_11_0_arm64.whl.metadata (40 kB)\n", "Using cached huggingface_hub-0.36.2-py3-none-any.whl (566 kB)\n", "Using cached litellm-1.81.9-py3-none-any.whl (14.4 MB)\n", "Downloading pillow-12.1.0-cp312-cp312-macosx_11_0_arm64.whl (4.7 MB)\n", "\u001b[2K \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.7/4.7 MB\u001b[0m \u001b[31m4.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m MB/s\u001b[0m eta \u001b[36m0:00:01\u001b[0m:01\u001b[0m\n", "\u001b[?25hUsing cached python_dotenv-1.2.1-py3-none-any.whl (21 kB)\n", "Using cached rich-14.3.2-py3-none-any.whl (309 kB)\n", "Using cached smolagents-1.24.0-py3-none-any.whl (155 kB)\n", "Downloading aiohttp-3.13.3-cp312-cp312-macosx_11_0_arm64.whl (493 kB)\n", "Downloading fastuuid-0.14.0-cp312-cp312-macosx_11_0_arm64.whl (251 kB)\n", "Using cached fsspec-2026.2.0-py3-none-any.whl (202 kB)\n", "Using cached hf_xet-1.2.0-cp37-abi3-macosx_11_0_arm64.whl (2.7 MB)\n", "Downloading importlib_metadata-8.7.1-py3-none-any.whl (27 kB)\n", "Downloading markdown_it_py-4.0.0-py3-none-any.whl (87 kB)\n", "Using cached openai-2.17.0-py3-none-any.whl (1.1 MB)\n", "Using cached pydantic-2.12.5-py3-none-any.whl (463 kB)\n", "Downloading pydantic_core-2.41.5-cp312-cp312-macosx_11_0_arm64.whl (1.9 MB)\n", "\u001b[2K \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.9/1.9 MB\u001b[0m \u001b[31m5.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m[31m5.4 MB/s\u001b[0m eta \u001b[36m0:00:01\u001b[0m\n", "\u001b[?25hDownloading tiktoken-0.12.0-cp312-cp312-macosx_11_0_arm64.whl (994 kB)\n", "\u001b[2K \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m994.0/994.0 kB\u001b[0m \u001b[31m3.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m MB/s\u001b[0m eta \u001b[36m0:00:01\u001b[0m\n", "\u001b[?25hDownloading tqdm-4.67.3-py3-none-any.whl (78 kB)\n", "Using cached typing_extensions-4.15.0-py3-none-any.whl (44 kB)\n", "Using cached click-8.3.1-py3-none-any.whl (108 kB)\n", "Using cached filelock-3.20.3-py3-none-any.whl (16 kB)\n", "Using cached tokenizers-0.22.2-cp39-abi3-macosx_11_0_arm64.whl (3.0 MB)\n", "Using cached aiohappyeyeballs-2.6.1-py3-none-any.whl (15 kB)\n", "Using cached aiosignal-1.4.0-py3-none-any.whl (7.5 kB)\n", "Using cached annotated_types-0.7.0-py3-none-any.whl (13 kB)\n", "Using cached distro-1.9.0-py3-none-any.whl (20 kB)\n", "Downloading frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl (50 kB)\n", "Downloading jiter-0.13.0-cp312-cp312-macosx_11_0_arm64.whl (318 kB)\n", "Downloading mdurl-0.1.2-py3-none-any.whl (10.0 kB)\n", "Downloading multidict-6.7.1-cp312-cp312-macosx_11_0_arm64.whl (43 kB)\n", "Downloading propcache-0.4.1-cp312-cp312-macosx_11_0_arm64.whl (47 kB)\n", "Downloading regex-2026.1.15-cp312-cp312-macosx_11_0_arm64.whl (289 kB)\n", "Using cached typing_inspection-0.4.2-py3-none-any.whl (14 kB)\n", "Downloading yarl-1.22.0-cp312-cp312-macosx_11_0_arm64.whl (94 kB)\n", "Using cached zipp-3.23.0-py3-none-any.whl (10 kB)\n", "Installing collected packages: zipp, typing-extensions, tqdm, regex, python-dotenv, propcache, pillow, multidict, mdurl, jiter, hf-xet, fsspec, frozenlist, filelock, fastuuid, distro, click, annotated-types, aiohappyeyeballs, yarl, typing-inspection, tiktoken, pydantic-core, markdown-it-py, importlib-metadata, huggingface-hub, aiosignal, tokenizers, rich, pydantic, aiohttp, smolagents, openai, litellm\n", " Attempting uninstall: typing-extensions\n", " Found existing installation: typing_extensions 4.12.2\n", " Uninstalling typing_extensions-4.12.2:\n", " Successfully uninstalled typing_extensions-4.12.2\n", "Successfully installed aiohappyeyeballs-2.6.1 aiohttp-3.13.3 aiosignal-1.4.0 annotated-types-0.7.0 click-8.3.1 distro-1.9.0 fastuuid-0.14.0 filelock-3.20.3 frozenlist-1.8.0 fsspec-2026.2.0 hf-xet-1.2.0 huggingface-hub-0.36.2 importlib-metadata-8.7.1 jiter-0.13.0 litellm-1.81.9 markdown-it-py-4.0.0 mdurl-0.1.2 multidict-6.7.1 openai-2.17.0 pillow-12.1.0 propcache-0.4.1 pydantic-2.12.5 pydantic-core-2.41.5 python-dotenv-1.2.1 regex-2026.1.15 rich-14.3.2 smolagents-1.24.0 tiktoken-0.12.0 tokenizers-0.22.2 tqdm-4.67.3 typing-extensions-4.15.0 typing-inspection-0.4.2 yarl-1.22.0 zipp-3.23.0\n", "Note: you may need to restart the kernel to use updated packages.\n" ] } ], "source": [ "%pip install 'smolagents[litellm]'" ] }, { "cell_type": "code", "execution_count": 6, "id": "37481a07-178b-4a5e-a1c1-98b60cd93880", "metadata": {}, "outputs": [], "source": [ "from smolagents import LiteLLMModel\n", "\n", "model = LiteLLMModel(\n", " model_id=\"ollama_chat/qwen2.5:14b\", # Or try other Ollama-supported models\n", " api_base=\"http://127.0.0.1:11434\", # Default Ollama local server\n", " num_ctx=8192,\n", ")" ] }, { "cell_type": "code", "execution_count": 2, "id": "76710757-5c71-4aaf-83cc-01e5ca1202ca", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Collecting jupyter\n", " Downloading jupyter-1.1.1-py2.py3-none-any.whl.metadata (2.0 kB)\n", "Collecting ipywidgets\n", " Downloading ipywidgets-8.1.8-py3-none-any.whl.metadata (2.4 kB)\n", "Requirement already satisfied: notebook in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jupyter) (7.2.2)\n", "Collecting jupyter-console (from jupyter)\n", " Downloading jupyter_console-6.6.3-py3-none-any.whl.metadata (5.8 kB)\n", "Requirement already satisfied: nbconvert in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jupyter) (7.16.4)\n", "Requirement already satisfied: ipykernel in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jupyter) (6.29.5)\n", "Requirement already satisfied: jupyterlab in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jupyter) (4.2.5)\n", "Requirement already satisfied: comm>=0.1.3 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from ipywidgets) (0.2.1)\n", "Requirement already satisfied: ipython>=6.1.0 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from ipywidgets) (8.30.0)\n", "Requirement already satisfied: traitlets>=4.3.1 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from ipywidgets) (5.14.3)\n", "Collecting widgetsnbextension~=4.0.14 (from ipywidgets)\n", " Downloading widgetsnbextension-4.0.15-py3-none-any.whl.metadata (1.6 kB)\n", "Collecting jupyterlab_widgets~=3.0.15 (from ipywidgets)\n", " Downloading jupyterlab_widgets-3.0.16-py3-none-any.whl.metadata (20 kB)\n", "Requirement already satisfied: decorator in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets) (5.1.1)\n", "Requirement already satisfied: jedi>=0.16 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets) (0.19.2)\n", "Requirement already satisfied: matplotlib-inline in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets) (0.1.6)\n", "Requirement already satisfied: prompt-toolkit<3.1.0,>=3.0.41 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets) (3.0.43)\n", "Requirement already satisfied: pygments>=2.4.0 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets) (2.15.1)\n", "Requirement already satisfied: stack-data in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets) (0.2.0)\n", "Requirement already satisfied: pexpect>4.3 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets) (4.8.0)\n", "Requirement already satisfied: appnope in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from ipykernel->jupyter) (0.1.3)\n", "Requirement already satisfied: debugpy>=1.6.5 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from ipykernel->jupyter) (1.6.7)\n", "Requirement already satisfied: jupyter-client>=6.1.12 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from ipykernel->jupyter) (8.6.0)\n", "Requirement already satisfied: jupyter-core!=5.0.*,>=4.12 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from ipykernel->jupyter) (5.7.2)\n", "Requirement already satisfied: nest-asyncio in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from ipykernel->jupyter) (1.6.0)\n", "Requirement already satisfied: packaging in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from ipykernel->jupyter) (24.2)\n", "Requirement already satisfied: psutil in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from ipykernel->jupyter) (5.9.0)\n", "Requirement already satisfied: pyzmq>=24 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from ipykernel->jupyter) (26.2.0)\n", "Requirement already satisfied: tornado>=6.1 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from ipykernel->jupyter) (6.4.2)\n", "Requirement already satisfied: async-lru>=1.0.0 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jupyterlab->jupyter) (2.0.4)\n", "Requirement already satisfied: httpx>=0.25.0 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jupyterlab->jupyter) (0.27.0)\n", "Requirement already satisfied: jinja2>=3.0.3 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jupyterlab->jupyter) (3.1.4)\n", "Requirement already satisfied: jupyter-lsp>=2.0.0 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jupyterlab->jupyter) (2.2.0)\n", "Requirement already satisfied: jupyter-server<3,>=2.4.0 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jupyterlab->jupyter) (2.14.1)\n", "Requirement already satisfied: jupyterlab-server<3,>=2.27.1 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jupyterlab->jupyter) (2.27.3)\n", "Requirement already satisfied: notebook-shim>=0.2 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jupyterlab->jupyter) (0.2.3)\n", "Requirement already satisfied: setuptools>=40.1.0 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jupyterlab->jupyter) (72.1.0)\n", "Requirement already satisfied: beautifulsoup4 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from nbconvert->jupyter) (4.12.3)\n", "Requirement already satisfied: bleach!=5.0.0 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from nbconvert->jupyter) (6.2.0)\n", "Requirement already satisfied: defusedxml in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from nbconvert->jupyter) (0.7.1)\n", "Requirement already satisfied: jupyterlab-pygments in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from nbconvert->jupyter) (0.1.2)\n", "Requirement already satisfied: markupsafe>=2.0 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from nbconvert->jupyter) (2.1.3)\n", "Requirement already satisfied: mistune<4,>=2.0.3 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from nbconvert->jupyter) (2.0.4)\n", "Requirement already satisfied: nbclient>=0.5.0 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from nbconvert->jupyter) (0.8.0)\n", "Requirement already satisfied: nbformat>=5.7 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from nbconvert->jupyter) (5.10.4)\n", "Requirement already satisfied: pandocfilters>=1.4.1 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from nbconvert->jupyter) (1.5.0)\n", "Requirement already satisfied: tinycss2 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from nbconvert->jupyter) (1.2.1)\n", "Requirement already satisfied: webencodings in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from bleach!=5.0.0->nbconvert->jupyter) (0.5.1)\n", "Requirement already satisfied: anyio in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from httpx>=0.25.0->jupyterlab->jupyter) (4.6.2)\n", "Requirement already satisfied: certifi in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from httpx>=0.25.0->jupyterlab->jupyter) (2024.12.14)\n", "Requirement already satisfied: httpcore==1.* in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from httpx>=0.25.0->jupyterlab->jupyter) (1.0.2)\n", "Requirement already satisfied: idna in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from httpx>=0.25.0->jupyterlab->jupyter) (3.7)\n", "Requirement already satisfied: sniffio in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from httpx>=0.25.0->jupyterlab->jupyter) (1.3.0)\n", "Requirement already satisfied: h11<0.15,>=0.13 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from httpcore==1.*->httpx>=0.25.0->jupyterlab->jupyter) (0.14.0)\n", "Requirement already satisfied: parso<0.9.0,>=0.8.4 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jedi>=0.16->ipython>=6.1.0->ipywidgets) (0.8.4)\n", "Requirement already satisfied: python-dateutil>=2.8.2 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jupyter-client>=6.1.12->ipykernel->jupyter) (2.9.0.post0)\n", "Requirement already satisfied: platformdirs>=2.5 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jupyter-core!=5.0.*,>=4.12->ipykernel->jupyter) (3.10.0)\n", "Requirement already satisfied: argon2-cffi>=21.1 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (21.3.0)\n", "Requirement already satisfied: jupyter-events>=0.9.0 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (0.10.0)\n", "Requirement already satisfied: jupyter-server-terminals>=0.4.4 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (0.4.4)\n", "Requirement already satisfied: overrides>=5.0 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (7.4.0)\n", "Requirement already satisfied: prometheus-client>=0.9 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (0.21.0)\n", "Requirement already satisfied: send2trash>=1.8.2 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (1.8.2)\n", "Requirement already satisfied: terminado>=0.8.3 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (0.17.1)\n", "Requirement already satisfied: websocket-client>=1.7 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (1.8.0)\n", "Requirement already satisfied: babel>=2.10 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jupyterlab-server<3,>=2.27.1->jupyterlab->jupyter) (2.11.0)\n", "Requirement already satisfied: json5>=0.9.0 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jupyterlab-server<3,>=2.27.1->jupyterlab->jupyter) (0.9.25)\n", "Requirement already satisfied: jsonschema>=4.18.0 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jupyterlab-server<3,>=2.27.1->jupyterlab->jupyter) (4.23.0)\n", "Requirement already satisfied: requests>=2.31 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jupyterlab-server<3,>=2.27.1->jupyterlab->jupyter) (2.32.3)\n", "Requirement already satisfied: fastjsonschema>=2.15 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from nbformat>=5.7->nbconvert->jupyter) (2.20.0)\n", "Requirement already satisfied: ptyprocess>=0.5 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from pexpect>4.3->ipython>=6.1.0->ipywidgets) (0.7.0)\n", "Requirement already satisfied: wcwidth in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from prompt-toolkit<3.1.0,>=3.0.41->ipython>=6.1.0->ipywidgets) (0.2.5)\n", "Requirement already satisfied: soupsieve>1.2 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from beautifulsoup4->nbconvert->jupyter) (2.5)\n", "Requirement already satisfied: executing in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from stack-data->ipython>=6.1.0->ipywidgets) (0.8.3)\n", "Requirement already satisfied: asttokens in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from stack-data->ipython>=6.1.0->ipywidgets) (2.0.5)\n", "Requirement already satisfied: pure-eval in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from stack-data->ipython>=6.1.0->ipywidgets) (0.2.2)\n", "Requirement already satisfied: argon2-cffi-bindings in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from argon2-cffi>=21.1->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (21.2.0)\n", "Requirement already satisfied: pytz>=2015.7 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from babel>=2.10->jupyterlab-server<3,>=2.27.1->jupyterlab->jupyter) (2024.1)\n", "Requirement already satisfied: attrs>=22.2.0 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.27.1->jupyterlab->jupyter) (24.3.0)\n", "Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.27.1->jupyterlab->jupyter) (2023.7.1)\n", "Requirement already satisfied: referencing>=0.28.4 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.27.1->jupyterlab->jupyter) (0.30.2)\n", "Requirement already satisfied: rpds-py>=0.7.1 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jsonschema>=4.18.0->jupyterlab-server<3,>=2.27.1->jupyterlab->jupyter) (0.10.6)\n", "Requirement already satisfied: python-json-logger>=2.0.4 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jupyter-events>=0.9.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (3.2.1)\n", "Requirement already satisfied: pyyaml>=5.3 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jupyter-events>=0.9.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (6.0.2)\n", "Requirement already satisfied: rfc3339-validator in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jupyter-events>=0.9.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (0.1.4)\n", "Requirement already satisfied: rfc3986-validator>=0.1.1 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from jupyter-events>=0.9.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (0.1.1)\n", "Requirement already satisfied: six>=1.5 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from python-dateutil>=2.8.2->jupyter-client>=6.1.12->ipykernel->jupyter) (1.16.0)\n", "Requirement already satisfied: charset-normalizer<4,>=2 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from requests>=2.31->jupyterlab-server<3,>=2.27.1->jupyterlab->jupyter) (3.3.2)\n", "Requirement already satisfied: urllib3<3,>=1.21.1 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from requests>=2.31->jupyterlab-server<3,>=2.27.1->jupyterlab->jupyter) (2.2.3)\n", "Collecting fqdn (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.9.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter)\n", " Downloading fqdn-1.5.1-py3-none-any.whl.metadata (1.4 kB)\n", "Collecting isoduration (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.9.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter)\n", " Downloading isoduration-20.11.0-py3-none-any.whl.metadata (5.7 kB)\n", "Collecting jsonpointer>1.13 (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.9.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter)\n", " Downloading jsonpointer-3.0.0-py2.py3-none-any.whl.metadata (2.3 kB)\n", "Collecting uri-template (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.9.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter)\n", " Downloading uri_template-1.3.0-py3-none-any.whl.metadata (8.8 kB)\n", "Collecting webcolors>=24.6.0 (from jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.9.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter)\n", " Downloading webcolors-25.10.0-py3-none-any.whl.metadata (2.2 kB)\n", "Requirement already satisfied: cffi>=1.0.1 in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from argon2-cffi-bindings->argon2-cffi>=21.1->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (1.17.1)\n", "Requirement already satisfied: pycparser in /opt/anaconda3/envs/nlp/lib/python3.12/site-packages (from cffi>=1.0.1->argon2-cffi-bindings->argon2-cffi>=21.1->jupyter-server<3,>=2.4.0->jupyterlab->jupyter) (2.21)\n", "Collecting arrow>=0.15.0 (from isoduration->jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.9.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter)\n", " Downloading arrow-1.4.0-py3-none-any.whl.metadata (7.7 kB)\n", "Collecting tzdata (from arrow>=0.15.0->isoduration->jsonschema[format-nongpl]>=4.18.0->jupyter-events>=0.9.0->jupyter-server<3,>=2.4.0->jupyterlab->jupyter)\n", " Downloading tzdata-2025.3-py2.py3-none-any.whl.metadata (1.4 kB)\n", "Downloading jupyter-1.1.1-py2.py3-none-any.whl (2.7 kB)\n", "Downloading ipywidgets-8.1.8-py3-none-any.whl (139 kB)\n", "Downloading jupyterlab_widgets-3.0.16-py3-none-any.whl (914 kB)\n", "\u001b[2K \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m914.9/914.9 kB\u001b[0m \u001b[31m2.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m0m eta \u001b[36m-:--:--\u001b[0m\n", "\u001b[?25hDownloading widgetsnbextension-4.0.15-py3-none-any.whl (2.2 MB)\n", "\u001b[2K \u001b[38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.2/2.2 MB\u001b[0m \u001b[31m3.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m MB/s\u001b[0m eta \u001b[36m0:00:01\u001b[0m:01\u001b[0m\n", "\u001b[?25hDownloading jupyter_console-6.6.3-py3-none-any.whl (24 kB)\n", "Downloading jsonpointer-3.0.0-py2.py3-none-any.whl (7.6 kB)\n", "Downloading webcolors-25.10.0-py3-none-any.whl (14 kB)\n", "Downloading fqdn-1.5.1-py3-none-any.whl (9.1 kB)\n", "Downloading isoduration-20.11.0-py3-none-any.whl (11 kB)\n", "Downloading uri_template-1.3.0-py3-none-any.whl (11 kB)\n", "Downloading arrow-1.4.0-py3-none-any.whl (68 kB)\n", "Downloading tzdata-2025.3-py2.py3-none-any.whl (348 kB)\n", "Installing collected packages: widgetsnbextension, webcolors, uri-template, tzdata, jupyterlab_widgets, jsonpointer, fqdn, arrow, isoduration, ipywidgets, jupyter-console, jupyter\n", "Successfully installed arrow-1.4.0 fqdn-1.5.1 ipywidgets-8.1.8 isoduration-20.11.0 jsonpointer-3.0.0 jupyter-1.1.1 jupyter-console-6.6.3 jupyterlab_widgets-3.0.16 tzdata-2025.3 uri-template-1.3.0 webcolors-25.10.0 widgetsnbextension-4.0.15\n", "Note: you may need to restart the kernel to use updated packages.\n" ] } ], "source": [ "%pip install --upgrade jupyter ipywidgets" ] }, { "cell_type": "code", "execution_count": 11, "id": "a92ccba0-7efe-4d87-9b69-19ab94668149", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The most common chess opening for White is the e4 (King's Pawn) Opening. When White plays 1.e4, they are controlling the center of the board early in the game and creating opportunities to develop their pieces effectively. This move leads into a wide variety of openings such as the Ruy Lopez, Sicilian Defense, Italian Game, and many others depending on Black's response.\n" ] } ], "source": [ "import litellm\n", "response = litellm.completion(\n", " model=\"ollama_chat/qwen2.5:14b\",\n", " api_base=\"http://127.0.0.1:11434\",\n", " messages=[{\"role\": \"user\", \"content\": \"What is the most frequent Chess Opening for White?\"}]\n", ")\n", "print(response.choices[0].message.content)\n" ] }, { "cell_type": "code", "execution_count": 12, "id": "f9226b46-6e12-44f9-89af-013d66ab0304", "metadata": {}, "outputs": [], "source": [ "from typing import Callable\n", "\n", "\n", "class Tool:\n", " \"\"\"\n", " A class representing a reusable piece of code (Tool).\n", "\n", " Attributes:\n", " name (str): Name of the tool.\n", " description (str): A textual description of what the tool does.\n", " func (callable): The function this tool wraps.\n", " arguments (list): A list of arguments.\n", " outputs (str or list): The return type(s) of the wrapped function.\n", " \"\"\"\n", " def __init__(self,\n", " name: str,\n", " description: str,\n", " func: Callable,\n", " arguments: list,\n", " outputs: str):\n", " self.name = name\n", " self.description = description\n", " self.func = func\n", " self.arguments = arguments\n", " self.outputs = outputs\n", "\n", " def to_string(self) -> str:\n", " \"\"\"\n", " Return a string representation of the tool,\n", " including its name, description, arguments, and outputs.\n", " \"\"\"\n", " args_str = \", \".join([\n", " f\"{arg_name}: {arg_type}\" for arg_name, arg_type in self.arguments\n", " ])\n", "\n", " return (\n", " f\"Tool Name: {self.name},\"\n", " f\" Description: {self.description},\"\n", " f\" Arguments: {args_str},\"\n", " f\" Outputs: {self.outputs}\"\n", " )\n", "\n", " def __call__(self, *args, **kwargs):\n", " \"\"\"\n", " Invoke the underlying function (callable) with provided arguments.\n", " \"\"\"\n", " return self.func(*args, **kwargs)" ] }, { "cell_type": "code", "execution_count": 17, "id": "6506c020-ebf3-4b4d-ab83-ccdccfa4c74f", "metadata": {}, "outputs": [], "source": [ "calculator_tool = Tool(\n", " \"calculator\", # name\n", " \"Multiply two integers.\", # description\n", " calculator, # function to call\n", " [(\"a\", \"int\"), (\"b\", \"int\")], # inputs (names and types)\n", " \"int\", # output\n", ")" ] }, { "cell_type": "code", "execution_count": 16, "id": "05a5fc71-16cd-4a64-9a4b-7b2200806c8b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Tool Name: calculator, Description: Multiply two integers., Arguments: a: int, b: int, Outputs: int\n" ] } ], "source": [ "@tool\n", "def calculator(a: int, b: int) -> int:\n", " \"\"\"Multiply two integers.\"\"\"\n", " return a * b\n", "\n", "print(calculator.to_string())" ] }, { "cell_type": "code", "execution_count": 15, "id": "844f520b-126f-4062-a0b5-1f99b44f69b9", "metadata": {}, "outputs": [], "source": [ "import inspect\n", "\n", "def tool(func):\n", " \"\"\"\n", " A decorator that creates a Tool instance from the given function.\n", " \"\"\"\n", " # Get the function signature\n", " signature = inspect.signature(func)\n", "\n", " # Extract (param_name, param_annotation) pairs for inputs\n", " arguments = []\n", " for param in signature.parameters.values():\n", " annotation_name = (\n", " param.annotation.__name__\n", " if hasattr(param.annotation, '__name__')\n", " else str(param.annotation)\n", " )\n", " arguments.append((param.name, annotation_name))\n", "\n", " # Determine the return annotation\n", " return_annotation = signature.return_annotation\n", " if return_annotation is inspect._empty:\n", " outputs = \"No return annotation\"\n", " else:\n", " outputs = (\n", " return_annotation.__name__\n", " if hasattr(return_annotation, '__name__')\n", " else str(return_annotation)\n", " )\n", "\n", " # Use the function's docstring as the description (default if None)\n", " description = func.__doc__ or \"No description provided.\"\n", "\n", " # The function name becomes the Tool name\n", " name = func.__name__\n", "\n", " # Return a new Tool instance\n", " return Tool(\n", " name=name,\n", " description=description,\n", " func=func,\n", " arguments=arguments,\n", " outputs=outputs\n", " )" ] }, { "cell_type": "code", "execution_count": null, "id": "430a0109-dbf9-4152-929e-16482c5d4873", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.8" } }, "nbformat": 4, "nbformat_minor": 5 }