* fix: add missing overflow wrapper to notebooks list page
Adds flex-1 overflow-y-auto wrapper to enable proper scrolling
when notebook list exceeds viewport height. Matches the layout
pattern used by all other dashboard pages.
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: reorder transformation routes to prevent dynamic route interception
Moved static routes (/transformations/execute and /transformations/default-prompt)
before dynamic routes (/transformations/{transformation_id}) to ensure FastAPI
matches them correctly. Previously, requests to static routes were incorrectly
captured by the dynamic route handler.
Fixes #250
Co-Authored-By: Claude <noreply@anthropic.com>
* chore: bump to 1.2.1
* hide source and notes panel - fixes #193
* feat: improve layout for mobile views
* bump version to 1.2.2
* fix: address PR review feedback for collapsible columns
- Remove unused CollapseButton component from CollapsibleColumn.tsx
- Rename useCollapseButton to createCollapseButton (not a React hook)
- Move dialogs outside Card in SourcesColumn.tsx for consistency
- Add useMemo for collapseButton in both columns to prevent re-renders
* feat: support multiple sources
* fix: prevent ChatColumn double mounting on desktop
Add useIsDesktop hook to conditionally render mobile view only on
mobile screens. Previously, the mobile ChatColumn was hidden via CSS
on desktop but still mounted, causing duplicate hooks initialization
and redundant network requests.
---------
Co-authored-by: Claude <noreply@anthropic.com>
98 lines
2.4 KiB
TOML
98 lines
2.4 KiB
TOML
[project]
|
|
name = "open-notebook"
|
|
version = "1.2.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>=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.8.3",
|
|
"langchain-google-vertexai>=2.0.28",
|
|
"surrealdb>=1.0.4",
|
|
"podcast-creator>=0.7.0",
|
|
"surreal-commands>=1.2.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
|