[build-system] requires = ["setuptools>=61.0", "wheel"] build-backend = "setuptools.build_meta" [project] name = "llm_topic_modelling" version = "0.14.0" description = "Generate thematic summaries from open text in tabular data files with a large language model." requires-python = ">=3.10" readme = "README.md" authors = [ { name = "Sean Pedrick-Case", email = "spedrickcase@lambeth.gov.uk" }, ] maintainers = [ { name = "Sean Pedrick-Case", email = "spedrickcase@lambeth.gov.uk" }, ] license = "MIT" keywords = [ "topic-modelling", "topic-modeling", "llm", "large-language-models", "thematic-analysis", "text-analysis", "nlp", "natural-language-processing", "text-summarization", "text-summarisation", "thematic-summaries", "gradio", "data-analysis", "tabular-data", "excel", "csv", "open-text", "text-mining" ] classifiers = [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "Intended Audience :: Information Technology", "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Text Processing :: Linguistic", "Topic :: Text Processing :: Markup", "Topic :: Scientific/Engineering :: Information Analysis", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", ] dependencies = [ "gradio<=6.20.0", "transformers<=5.12.0", "spaces", "boto3<=1.43.35", "pandas<=2.3.3", "pyarrow<=23.0.1", "openpyxl<=3.1.5", "markdown<=3.10.2", "tabulate<=0.9.0", "lxml<=6.1.1", "google-genai<=1.73.0", "openai<=2.31.0", "html5lib<=1.1", "beautifulsoup4<=4.14.3", "rapidfuzz<=3.14.5", "python-dotenv<=1.2.2", "pyexcel<=0.7.4" ] [project.optional-dependencies] dev = ["pytest"] test = ["pytest", "pytest-cov"] # Extra dependencies for VLM models # For torch you should use --index-url https://download.pytorch.org/whl/cu129. Additionally installs the unsloth package torch = [ "torch<=2.9.1", "torchvision", "accelerate", "bitsandbytes", "unsloth<=2026.6.9", "unsloth_zoo<=2026.6.9", "timm", "xformers" ] # Support for llama-cpp-python is experimental - I have not directly tested the latest versions of llamacpp against the app llamacpp = [ "llama-cpp-python>=0.3.31", ] # Run Gradio as an mcp server mcp = [ "gradio[mcp]<=6.20.0" ] [project.urls] Homepage = "https://github.com/seanpedrick-case/llm_topic_modelling" repository = "https://github.com/seanpedrick-case/llm_topic_modelling" [tool.setuptools] packages = ["tools"] py-modules = ["app"] # Configuration for Ruff linter: [tool.ruff] line-length = 88 [tool.ruff.lint] select = ["E", "F", "I"] ignore = [ "E501", # line-too-long (handled with Black) "E402", # module-import-not-at-top-of-file (sometimes needed for conditional imports) ] [tool.ruff.lint.per-file-ignores] "__init__.py" = ["F401"] # Allow unused imports in __init__.py # Configuration for a Black formatter: [tool.black] line-length = 88 target-version = ['py310'] # Configuration for pytest: [tool.pytest.ini_options] filterwarnings = [ "ignore::DeprecationWarning:click.parser", "ignore::DeprecationWarning:weasel.util.config", "ignore::DeprecationWarning:builtin type", "ignore::DeprecationWarning:websockets.legacy", "ignore::DeprecationWarning:websockets.server", "ignore::DeprecationWarning:spacy.cli._util", "ignore::DeprecationWarning:weasel.util.config", "ignore::DeprecationWarning:importlib._bootstrap", ] testpaths = ["test"] python_files = ["test_*.py", "*_test.py"] python_classes = ["Test*"] python_functions = ["test_*"] addopts = [ "-v", "--tb=short", "--strict-markers", "--disable-warnings", ]