[project] name = "open-notebook" version = "1.1.1" 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>=0.3.3", "langgraph>=0.2.38", "tiktoken>=0.8.0", "langgraph-checkpoint-sqlite>=2.0.0", "langchain-community>=0.3.3", "langchain-openai>=0.2.3", "langchain-anthropic>=0.2.3", "langchain-ollama>=0.2.0", "langchain-google-genai>=2.1.10", "langchain-groq>=0.2.1", "langchain_mistralai>=0.2.1", "langchain_deepseek>=0.1.3", "tomli>=2.0.2", "groq>=0.12.0", "python-dotenv>=1.0.1", "httpx[socks]>=0.27.0", "content-core>=1.0.2", "ai-prompter>=0.3", "esperanto>=2.4.1", "langchain-google-vertexai>=2.0.28", "surrealdb>=1.0.4", "surreal-commands>=1.0.13", "podcast-creator>=0.7.0", ] [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", "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