open-notebook/pyproject.toml
Luis Novo 20e18fdd0d feat: improve error clarity for LLM provider failures (#506)
Replace generic "An unexpected error occurred" messages with descriptive,
user-friendly error messages when LLM operations fail. Errors like invalid
API keys, wrong model names, and rate limits now surface clearly in the UI.

Adds error classification utility, global FastAPI exception handlers, and
frontend getApiErrorMessage() helper. Bumps version to 1.7.2.
2026-02-16 16:15:46 -03:00

98 lines
2.4 KiB
TOML

[project]
name = "open-notebook"
version = "1.7.2"
description = "An open source implementation of a research assistant, inspired by Google Notebook LM"
authors = [
{name = "Luis Novo", email = "lfnovo@gmail.com"}
]
readme = "README.md"
classifiers = [
"License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
]
requires-python = ">=3.11,<3.13"
dependencies = [
"fastapi>=0.104.0",
"uvicorn>=0.24.0",
"pydantic>=2.9.2",
"loguru>=0.7.2",
"langchain>=1.2.0",
"langgraph>=1.0.5",
"tiktoken>=0.12.0",
"langgraph-checkpoint-sqlite>=3.0.1",
"langchain-community>=0.4.1",
"langchain-openai>=1.1.6",
"langchain-anthropic>=1.3.0",
"langchain-ollama>=1.0.1",
"langchain-google-genai>=4.1.2",
"langchain-groq>=1.1.1",
"langchain_mistralai>=1.1.1",
"langchain_deepseek>=1.0.0",
"tomli>=2.0.2",
"python-dotenv>=1.0.1",
"httpx[socks]>=0.27.0",
"content-core>=1.14.1,<2",
"ai-prompter>=0.3,<1",
"esperanto>=2.19.3,<3",
"surrealdb>=1.0.4",
"podcast-creator>=0.9.1,<1",
"surreal-commands>=1.3.1,<2",
"numpy>=2.4.1",
]
[tool.setuptools]
package-dir = {"open_notebook" = "open_notebook"}
[project.optional-dependencies]
dev = [
"ipykernel>=6.29.5",
"ruff>=0.5.5",
"mypy>=1.11.1",
"types-requests>=2.32.0.20241016",
"ipywidgets>=8.1.5",
"pre-commit>=4.0.1",
"pytest>=8.0.0",
]
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"
[dependency-groups]
dev = [
"pre-commit>=4.1.0",
"pytest-asyncio>=1.2.0",
"ruff>=0.14.13",
"types-requests>=2.32.4.20250913",
]
[tool.isort]
profile = "black"
line_length = 88
[tool.ruff]
line-length = 88
[tool.ruff.lint]
select = ["E", "F", "I"]
ignore = [
"E501", # line too long
"E402", # module level import not at top of file (Streamlit requires this pattern)
"E722", # do not use bare except (legacy code pattern)
"F401", # imported but unused (may be used in type hints or re-exports)
"F541", # f-string without placeholders
"F841", # local variable assigned but never used
]
[tool.ruff.lint.per-file-ignores]
# Streamlit files need nest_asyncio.apply() before imports
"app_home.py" = ["E402"]
"pages/**/*.py" = ["E402"]
[tool.mypy]
# Exclude Streamlit UI pages from type checking
[[tool.mypy.overrides]]
module = "pages.*"
ignore_errors = true