diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index e9105edd056771eb02c4eeb052bbcc9836c02065..a69425a5e2da521dad6048bc25bec45be6516fe9 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -14,9 +14,9 @@ jobs:
     strategy:
       matrix:
         python-version:
-          - "3.11"
+          - "3.13"
     env:
-      POETRY_VERSION: "1.8.3"
+      POETRY_VERSION: "1.8.4"
     steps:
       - uses: actions/checkout@v4
       - name: Cache Poetry
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index 424c9036240a76e4c73edc07e5480fabc72059bb..ca5a94e9058cedcab1e00554fea84c296a53d9f8 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -6,7 +6,7 @@ on:
   pull_request:
 
 env:
-  POETRY_VERSION: "1.5.1"
+  POETRY_VERSION: "1.8.4"
 
 jobs:
   build:
@@ -14,7 +14,7 @@ jobs:
     strategy:
       matrix:
         python-version:
-          - "3.11"
+          - "3.13"
     steps:
       - uses: actions/checkout@v3
       - name: Cache Poetry
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 57b3eb0bd6a7e86231d6bcc81d402a7e02f5a021..25fcef711ee7b1234783c9ce9fb4e2b50b441ffe 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -13,7 +13,7 @@ jobs:
     - name: Set up Python
       uses: actions/setup-python@v2
       with:
-        python-version: '3.11'
+        python-version: '3.13'
     - name: Install Poetry
       run: |
         curl -sSL https://install.python-poetry.org | python - -y --version 1.5.1
@@ -30,10 +30,10 @@ jobs:
     - name: Set up Python
       uses: actions/setup-python@v2
       with:
-        python-version: '3.11'
+        python-version: '3.13'
     - name: Install Poetry
       run: |
-        curl -sSL https://install.python-poetry.org | python - -y --version 1.5.1
+        curl -sSL https://install.python-poetry.org | python - -y --version 1.8.4
     - name: Publish to PyPI
       run: |
         poetry config repositories.remote https://upload.pypi.org/legacy/
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 99d8ed78afda14f15afa9e7e6598dfa6a55e6089..944cd476f17e6d6221ec623d3a0d21b8c3326ae7 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -4,7 +4,7 @@ on:
   pull_request:
 
 env:
-  POETRY_VERSION: "1.5.1"
+  POETRY_VERSION: "1.8.4"
 
 jobs:
   build:
@@ -15,6 +15,7 @@ jobs:
           - "3.10"
           - "3.11"
           - "3.12"
+          - "3.13"
     steps:
       - uses: actions/checkout@v4
       - name: Cache Poetry
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index b24594f35ab4a09c525946915f027ed267ac78c5..1dfe6d342f478deceb8a02ab83e1cad0569b040d 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,5 +1,5 @@
 default_language_version:
-  python: python3.9
+  python: python3.13
 repos:
   - repo: meta
     hooks:
diff --git a/.python-version b/.python-version
index 2c0733315e415bfb5e5b353f9996ecd964d395b2..24ee5b1be9961e38a503c8e764b7385dbb6ba124 100644
--- a/.python-version
+++ b/.python-version
@@ -1 +1 @@
-3.11
+3.13
diff --git a/.readthedocs.yaml b/.readthedocs.yaml
index 6ad1571dae762366510051c85a744313e8e63184..34e88daf03d6e13aa88604372127a32e213f5b04 100644
--- a/.readthedocs.yaml
+++ b/.readthedocs.yaml
@@ -9,7 +9,7 @@ version: 2
 build:
   os: ubuntu-22.04
   tools:
-    python: "3.12"
+    python: "3.13"
     # You can also specify other tool versions:
     # nodejs: "19"
     # rust: "1.64"
diff --git a/LICENSE b/LICENSE
index 3fa741bbaa7903b52deccb2358ad3b0ac6b24759..06edeb37df222cc1accb948a0353addcc8cfdec5 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
 MIT License
 
-Copyright (c) 2023 Aurelio AI
+Copyright (c) 2024 Aurelio AI
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/Makefile b/Makefile
index 979a97e522253154794c78688035ab5128dd6dba..30e1f6ad0d44a349017eb3b39aa569226bb03f3c 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
 format:
-	poetry run black --target-version py39 -l 88 .
+	poetry run black --target-version py313 -l 88 .
 	poetry run ruff --select I --fix .
 
 PYTHON_FILES=.
@@ -7,7 +7,7 @@ lint: PYTHON_FILES=.
 lint_diff: PYTHON_FILES=$(shell git diff --name-only --diff-filter=d main | grep -E '\.py$$')
 
 lint lint_diff:
-	poetry run black --target-version py311 -l 88 $(PYTHON_FILES) --check
+	poetry run black --target-version py313 -l 88 $(PYTHON_FILES) --check
 	poetry run ruff check .
 	poetry run mypy $(PYTHON_FILES)
 
diff --git a/poetry.lock b/poetry.lock
index 19288adbc6b52ed524059c8bcceaf8cbb9156d9a..d6c0340d0dddce5a9e23e48709dacafda2a18ecd 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -191,21 +191,18 @@ files = [
 
 [[package]]
 name = "asttokens"
-version = "2.4.1"
+version = "3.0.0"
 description = "Annotate AST trees with source code positions"
 optional = false
-python-versions = "*"
+python-versions = ">=3.8"
 files = [
-    {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"},
-    {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"},
+    {file = "asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2"},
+    {file = "asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7"},
 ]
 
-[package.dependencies]
-six = ">=1.12.0"
-
 [package.extras]
-astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"]
-test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"]
+astroid = ["astroid (>=2,<4)"]
+test = ["astroid (>=2,<4)", "pytest", "pytest-cov", "pytest-xdist"]
 
 [[package]]
 name = "async-timeout"
@@ -612,13 +609,13 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""}
 
 [[package]]
 name = "cohere"
-version = "5.11.4"
+version = "5.12.0"
 description = ""
 optional = true
 python-versions = "<4.0,>=3.8"
 files = [
-    {file = "cohere-5.11.4-py3-none-any.whl", hash = "sha256:59fb427e5426e0ee1c25b9deec83f0418a1c082240c57007f41384b34cd41552"},
-    {file = "cohere-5.11.4.tar.gz", hash = "sha256:5586335a20de3bf6816f34151f9d9f2928880cdf776c57aae793b5cca58d1826"},
+    {file = "cohere-5.12.0-py3-none-any.whl", hash = "sha256:47f61c6db274f61fb06781da3808d717b4ac4d46b1ee487c2f727450038c14cb"},
+    {file = "cohere-5.12.0.tar.gz", hash = "sha256:52a30edd4f7253b551045eb624df6c14e840c350306c8a69ae322e1f59743969"},
 ]
 
 [package.dependencies]
@@ -1170,7 +1167,10 @@ grpcio-status = [
     {version = ">=1.33.2,<2.0.dev0", optional = true, markers = "python_version < \"3.11\" and extra == \"grpc\""},
     {version = ">=1.49.1,<2.0.dev0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""},
 ]
-proto-plus = ">=1.22.3,<2.0.0dev"
+proto-plus = [
+    {version = ">=1.22.3,<2.0.0dev", markers = "python_version < \"3.13\""},
+    {version = ">=1.25.0,<2.0.0dev", markers = "python_version >= \"3.13\""},
+]
 protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<6.0.0.dev0"
 requests = ">=2.18.0,<3.0.0.dev0"
 
@@ -1314,7 +1314,10 @@ files = [
 google-api-core = {version = ">=1.34.1,<2.0.dev0 || >=2.11.dev0,<3.0.0dev", extras = ["grpc"]}
 google-auth = ">=2.14.1,<2.24.0 || >2.24.0,<2.25.0 || >2.25.0,<3.0.0dev"
 grpc-google-iam-v1 = ">=0.12.4,<1.0.0dev"
-proto-plus = ">=1.22.3,<2.0.0dev"
+proto-plus = [
+    {version = ">=1.22.3,<2.0.0dev", markers = "python_version < \"3.13\""},
+    {version = ">=1.25.0,<2.0.0dev", markers = "python_version >= \"3.13\""},
+]
 protobuf = ">=3.20.2,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<6.0.0dev"
 
 [[package]]
@@ -2790,13 +2793,13 @@ sympy = "*"
 
 [[package]]
 name = "openai"
-version = "1.55.2"
+version = "1.55.3"
 description = "The official Python library for the openai API"
 optional = false
 python-versions = ">=3.8"
 files = [
-    {file = "openai-1.55.2-py3-none-any.whl", hash = "sha256:3027c7fa4a33ed759f4a3d076093fcfa1c55658660c889bec33f651e2dc77922"},
-    {file = "openai-1.55.2.tar.gz", hash = "sha256:5cc0b1162b65dcdf670b4b41448f18dd470d2724ca04821ab1e86b6b4e88650b"},
+    {file = "openai-1.55.3-py3-none-any.whl", hash = "sha256:2a235d0e1e312cd982f561b18c27692e253852f4e5fb6ccf08cb13540a9bdaa1"},
+    {file = "openai-1.55.3.tar.gz", hash = "sha256:547e85b94535469f137a779d8770c8c5adebd507c2cc6340ca401a7c4d5d16f0"},
 ]
 
 [package.dependencies]
@@ -5558,5 +5561,5 @@ vision = ["pillow", "torch", "torchvision", "transformers"]
 
 [metadata]
 lock-version = "2.0"
-python-versions = ">=3.9,<3.13"
-content-hash = "d649e614d9c7122c642ed351abf8886cc008960f0fd7664483cfb5dde7865808"
+python-versions = ">=3.9,<3.14"
+content-hash = "e88cbb248e65005bf3265b1ef31c768baf6f979d08e829458163cb567e09ffa3"
diff --git a/pyproject.toml b/pyproject.toml
index e1eff0c7657e89c66fc3dfe35fab7b9a88406f68..5a52b7745bc089fd270c3c6a77197322604a36b3 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -8,7 +8,7 @@ packages = [{include = "semantic_router"}]
 license = "MIT"
 
 [tool.poetry.dependencies]
-python = ">=3.9,<3.13"
+python = ">=3.9,<3.14"
 pydantic = "^2.5.3"
 openai = ">=1.10.0,<2.0.0"
 cohere = {version = ">=5.9.4,<6.00", optional = true}
@@ -34,7 +34,7 @@ requests-mock = "^1.12.1"
 boto3 = { version = "^1.34.98", optional = true }
 botocore = {version = "^1.34.110", optional = true}
 aiohttp = "^3.10.11"
-fastembed = {version = "^0.3.0", optional = true}
+fastembed = {version = "^0.3.0", optional = true, python = "<3.13" }
 psycopg2-binary = {version = "^2.9.9", optional = true}
 sphinx = {version = "^7.0.0", optional = true}
 sphinxawesome-theme = {version = "^5.2.0", optional = true}