* chore: bump content-core to support html to markdown * feat: detect HTML content in clipboard for text sources - Add paste handler to detect text/html format in clipboard - Use HTML content instead of plain text when available - Display info message when HTML is detected - Add translations for all supported languages (en-US, pt-BR, ja-JP, zh-CN, zh-TW) * fix: reset HTML detection banner on plain text paste Clear the hasHtmlContent flag when pasting plain text (no HTML in clipboard) so the banner doesn't persist incorrectly after replacing HTML content with plain text.
98 lines
2.4 KiB
TOML
98 lines
2.4 KiB
TOML
[project]
|
|
name = "open-notebook"
|
|
version = "1.6.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",
|
|
"langchain-google-vertexai>=3.2.0",
|
|
"tomli>=2.0.2",
|
|
"python-dotenv>=1.0.1",
|
|
"httpx[socks]>=0.27.0",
|
|
"content-core>=1.13,<2",
|
|
"ai-prompter>=0.3,<1",
|
|
"esperanto>=2.17.2,<3",
|
|
"surrealdb>=1.0.4",
|
|
"podcast-creator>=0.7.0,<1",
|
|
"surreal-commands>=1.3.0,<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",
|
|
"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
|