diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..6f19076 --- /dev/null +++ b/LICENSE @@ -0,0 +1,163 @@ +GNU LESSER GENERAL PUBLIC LICENSE + +Version 3, 29 June 2007 + +Copyright (C) 2007 Free Software Foundation, Inc. + +Everyone is permitted to copy and distribute verbatim copies of this license +document, but changing it is not allowed. + +This version of the GNU Lesser General Public License incorporates the terms +and conditions of version 3 of the GNU General Public License, supplemented +by the additional permissions listed below. + + 0. Additional Definitions. + + + +As used herein, "this License" refers to version 3 of the GNU Lesser General +Public License, and the "GNU GPL" refers to version 3 of the GNU General Public +License. + + + +"The Library" refers to a covered work governed by this License, other than +an Application or a Combined Work as defined below. + + + +An "Application" is any work that makes use of an interface provided by the +Library, but which is not otherwise based on the Library. Defining a subclass +of a class defined by the Library is deemed a mode of using an interface provided +by the Library. + + + +A "Combined Work" is a work produced by combining or linking an Application +with the Library. The particular version of the Library with which the Combined +Work was made is also called the "Linked Version". + + + +The "Minimal Corresponding Source" for a Combined Work means the Corresponding +Source for the Combined Work, excluding any source code for portions of the +Combined Work that, considered in isolation, are based on the Application, +and not on the Linked Version. + + + +The "Corresponding Application Code" for a Combined Work means the object +code and/or source code for the Application, including any data and utility +programs needed for reproducing the Combined Work from the Application, but +excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + +You may convey a covered work under sections 3 and 4 of this License without +being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + +If you modify a copy of the Library, and, in your modifications, a facility +refers to a function or data to be supplied by an Application that uses the +facility (other than as an argument passed when the facility is invoked), +then you may convey a copy of the modified version: + +a) under this License, provided that you make a good faith effort to ensure +that, in the event an Application does not supply the function or data, the +facility still operates, and performs whatever part of its purpose remains +meaningful, or + +b) under the GNU GPL, with none of the additional permissions of this License +applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + +The object code form of an Application may incorporate material from a header +file that is part of the Library. You may convey such object code under terms +of your choice, provided that, if the incorporated material is not limited +to numerical parameters, data structure layouts and accessors, or small macros, +inline functions and templates (ten or fewer lines in length), you do both +of the following: + +a) Give prominent notice with each copy of the object code that the Library +is used in it and that the Library and its use are covered by this License. + +b) Accompany the object code with a copy of the GNU GPL and this license document. + + 4. Combined Works. + +You may convey a Combined Work under terms of your choice that, taken together, +effectively do not restrict modification of the portions of the Library contained +in the Combined Work and reverse engineering for debugging such modifications, +if you also do each of the following: + +a) Give prominent notice with each copy of the Combined Work that the Library +is used in it and that the Library and its use are covered by this License. + +b) Accompany the Combined Work with a copy of the GNU GPL and this license +document. + +c) For a Combined Work that displays copyright notices during execution, include +the copyright notice for the Library among these notices, as well as a reference +directing the user to the copies of the GNU GPL and this license document. + + d) Do one of the following: + +0) Convey the Minimal Corresponding Source under the terms of this License, +and the Corresponding Application Code in a form suitable for, and under terms +that permit, the user to recombine or relink the Application with a modified +version of the Linked Version to produce a modified Combined Work, in the +manner specified by section 6 of the GNU GPL for conveying Corresponding Source. + +1) Use a suitable shared library mechanism for linking with the Library. A +suitable mechanism is one that (a) uses at run time a copy of the Library +already present on the user's computer system, and (b) will operate properly +with a modified version of the Library that is interface-compatible with the +Linked Version. + +e) Provide Installation Information, but only if you would otherwise be required +to provide such information under section 6 of the GNU GPL, and only to the +extent that such information is necessary to install and execute a modified +version of the Combined Work produced by recombining or relinking the Application +with a modified version of the Linked Version. (If you use option 4d0, the +Installation Information must accompany the Minimal Corresponding Source and +Corresponding Application Code. If you use option 4d1, you must provide the +Installation Information in the manner specified by section 6 of the GNU GPL +for conveying Corresponding Source.) + + 5. Combined Libraries. + +You may place library facilities that are a work based on the Library side +by side in a single library together with other library facilities that are +not Applications and are not covered by this License, and convey such a combined +library under terms of your choice, if you do both of the following: + +a) Accompany the combined library with a copy of the same work based on the +Library, uncombined with any other library facilities, conveyed under the +terms of this License. + +b) Give prominent notice with the combined library that part of it is a work +based on the Library, and explaining where to find the accompanying uncombined +form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + +The Free Software Foundation may publish revised and/or new versions of the +GNU Lesser General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to address +new problems or concerns. + +Each version is given a distinguishing version number. If the Library as you +received it specifies that a certain numbered version of the GNU Lesser General +Public License "or any later version" applies to it, you have the option of +following the terms and conditions either of that published version or of +any later version published by the Free Software Foundation. If the Library +as you received it does not specify a version number of the GNU Lesser General +Public License, you may choose any version of the GNU Lesser General Public +License ever published by the Free Software Foundation. + +If the Library as you received it specifies that a proxy can decide whether +future versions of the GNU Lesser General Public License shall apply, that +proxy's public statement of acceptance of any version is permanent authorization +for you to choose that version for the Library. diff --git a/README.md b/README.md index f0c68db..8cc42b2 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ # LocalWhisper -OpenAPI's Open whisper available via ReST API. \ No newline at end of file +Making OpenAPI's Open Whisper available via ReST API locally. \ No newline at end of file diff --git a/dev_requirements.in b/dev_requirements.in new file mode 100644 index 0000000..ce250ab --- /dev/null +++ b/dev_requirements.in @@ -0,0 +1,9 @@ +black +build +invoke +isort +pip-tools +pre-commit +pytest +shellcheck-py==0.9.0.2 +ruff diff --git a/dev_requirements.txt b/dev_requirements.txt new file mode 100644 index 0000000..601fbdf --- /dev/null +++ b/dev_requirements.txt @@ -0,0 +1,69 @@ +# +# This file is autogenerated by pip-compile with Python 3.11 +# by the following command: +# +# pip-compile dev_requirements.in +# +black==23.3.0 + # via -r dev_requirements.in +build==0.10.0 + # via + # -r dev_requirements.in + # pip-tools +cfgv==3.3.1 + # via pre-commit +click==8.1.3 + # via + # black + # pip-tools +distlib==0.3.6 + # via virtualenv +filelock==3.12.0 + # via virtualenv +identify==2.5.23 + # via pre-commit +iniconfig==2.0.0 + # via pytest +invoke==2.1.0 + # via -r dev_requirements.in +isort==5.12.0 + # via -r dev_requirements.in +mypy-extensions==1.0.0 + # via black +nodeenv==1.7.0 + # via pre-commit +packaging==23.1 + # via + # black + # build + # pytest +pathspec==0.11.1 + # via black +pip-tools==6.13.0 + # via -r dev_requirements.in +platformdirs==3.5.0 + # via + # black + # virtualenv +pluggy==1.0.0 + # via pytest +pre-commit==3.2.2 + # via -r dev_requirements.in +pyproject-hooks==1.0.0 + # via build +pytest==7.3.1 + # via -r dev_requirements.in +pyyaml==6.0 + # via pre-commit +ruff==0.0.263 + # via -r dev_requirements.in +shellcheck-py==0.9.0.2 + # via -r dev_requirements.in +virtualenv==20.23.0 + # via pre-commit +wheel==0.40.0 + # via pip-tools + +# The following packages are considered to be unsafe in a requirements file: +# pip +# setuptools diff --git a/local_whisper/__init__.py b/local_whisper/__init__.py new file mode 100644 index 0000000..3dc1f76 --- /dev/null +++ b/local_whisper/__init__.py @@ -0,0 +1 @@ +__version__ = "0.1.0" diff --git a/local_whisper/cli.py b/local_whisper/cli.py new file mode 100644 index 0000000..f1ed496 --- /dev/null +++ b/local_whisper/cli.py @@ -0,0 +1,6 @@ +def main(): + print("Hey this is the cli application") + + +if __name__ == "__main__": + main() diff --git a/pyinvoke/__init__.py b/pyinvoke/__init__.py new file mode 100644 index 0000000..4484a6f --- /dev/null +++ b/pyinvoke/__init__.py @@ -0,0 +1,5 @@ +from invoke import Collection + +from pyinvoke import dev + +namespace = Collection(dev) diff --git a/pyinvoke/autocomplete.sh b/pyinvoke/autocomplete.sh new file mode 100644 index 0000000..6279afd --- /dev/null +++ b/pyinvoke/autocomplete.sh @@ -0,0 +1,33 @@ +# Invoke tab-completion script to be sourced with Bash shell. +# Known to work on Bash 3.x, untested on 4.x. + +_complete_invoke() { + local candidates + + # COMP_WORDS contains the entire command string up til now (including + # program name). + # We hand it to Invoke so it can figure out the current context: spit back + # core options, task names, the current task's options, or some combo. + candidates=`invoke --complete -- ${COMP_WORDS[*]}` + + # `compgen -W` takes list of valid options & a partial word & spits back + # possible matches. Necessary for any partial word completions (vs + # completions performed when no partial words are present). + # + # $2 is the current word or token being tabbed on, either empty string or a + # partial word, and thus wants to be compgen'd to arrive at some subset of + # our candidate list which actually matches. + # + # COMPREPLY is the list of valid completions handed back to `complete`. + COMPREPLY=( $(compgen -W "${candidates}" -- $2) ) +} + + +# Tell shell builtin to use the above for completing our invocations. +# * -F: use given function name to generate completions. +# * -o default: when function generates no results, use filenames. +# * positional args: program names to complete for. +complete -F _complete_invoke -o default invoke inv + +# vim: set ft=sh : + diff --git a/pyinvoke/dev.py b/pyinvoke/dev.py new file mode 100644 index 0000000..8487330 --- /dev/null +++ b/pyinvoke/dev.py @@ -0,0 +1,25 @@ +from invoke import task + + +@task +def update_deps(c): + """https://hynek.me/til/pip-tools-and-pyproject-toml/""" + pass + + +@task +def sync_env(c): + """Synchronize dependencies.""" + c.run("pip-sync dev_requirements.txt requirements.txt") + + +@task +def install_pre_commit(c): + """Installs pre-commit hooks into your environment.""" + c.run("pre-commit install --install-hooks") + + +@task +def build(c): + """Builds wheel and source distributions of project.""" + pass diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..97ee943 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,31 @@ +[build-system] +requires = ["setuptools>=61.0"] +build-backend = "setuptools.build_meta" + +[project] +name = "local_whisper" +authors = [ + { name="Drew Bednar", email="drew@runcible.io" }, +] +description = "A virtual assistant for automating a variety of tasks." +readme = "README.md" +requires-python = ">=3.8" +classifiers = [ + "Programming Language :: Python :: 3", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", +] +dynamic = ["version", "dependencies"] + +[project.scripts] +savant-cli = "local_whisper.cli:main" + +[project.optional-dependencies] +whisper = ["openai-whisper"] + +[tool.setuptools] +packages = ["local_whisper"] + +[tool.setuptools.dynamic] +version = {attr = "local_whisper.__version__"} +dependencies = {file = ["requirements.txt"]} diff --git a/requirements.in b/requirements.in new file mode 100644 index 0000000..5855832 --- /dev/null +++ b/requirements.in @@ -0,0 +1,2 @@ +fastapi +openai-whisper \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..46d14c4 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,116 @@ +# +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: +# +# pip-compile requirements.in +# +anyio==3.6.2 + # via starlette +certifi==2023.5.7 + # via requests +charset-normalizer==3.1.0 + # via requests +cmake==3.26.3 + # via triton +fastapi==0.95.2 + # via -r requirements.in +ffmpeg-python==0.2.0 + # via openai-whisper +filelock==3.12.0 + # via + # torch + # triton +future==0.18.3 + # via ffmpeg-python +idna==3.4 + # via + # anyio + # requests +jinja2==3.1.2 + # via torch +lit==16.0.5 + # via triton +llvmlite==0.40.0 + # via numba +markupsafe==2.1.2 + # via jinja2 +more-itertools==9.1.0 + # via openai-whisper +mpmath==1.3.0 + # via sympy +networkx==3.1 + # via torch +numba==0.57.0 + # via openai-whisper +numpy==1.24.3 + # via + # numba + # openai-whisper +nvidia-cublas-cu11==11.10.3.66 + # via + # nvidia-cudnn-cu11 + # nvidia-cusolver-cu11 + # torch +nvidia-cuda-cupti-cu11==11.7.101 + # via torch +nvidia-cuda-nvrtc-cu11==11.7.99 + # via torch +nvidia-cuda-runtime-cu11==11.7.99 + # via torch +nvidia-cudnn-cu11==8.5.0.96 + # via torch +nvidia-cufft-cu11==10.9.0.58 + # via torch +nvidia-curand-cu11==10.2.10.91 + # via torch +nvidia-cusolver-cu11==11.4.0.1 + # via torch +nvidia-cusparse-cu11==11.7.4.91 + # via torch +nvidia-nccl-cu11==2.14.3 + # via torch +nvidia-nvtx-cu11==11.7.91 + # via torch +openai-whisper==20230314 + # via -r requirements.in +pydantic==1.10.7 + # via fastapi +regex==2023.5.5 + # via tiktoken +requests==2.31.0 + # via tiktoken +sniffio==1.3.0 + # via anyio +starlette==0.27.0 + # via fastapi +sympy==1.12 + # via torch +tiktoken==0.3.1 + # via openai-whisper +torch==2.0.1 + # via + # openai-whisper + # triton +tqdm==4.65.0 + # via openai-whisper +triton==2.0.0 + # via + # openai-whisper + # torch +typing-extensions==4.5.0 + # via + # pydantic + # torch +urllib3==2.0.2 + # via requests +wheel==0.40.0 + # via + # nvidia-cublas-cu11 + # nvidia-cuda-cupti-cu11 + # nvidia-cuda-runtime-cu11 + # nvidia-curand-cu11 + # nvidia-cusparse-cu11 + # nvidia-nvtx-cu11 + +# The following packages are considered to be unsafe in a requirements file: +# setuptools diff --git a/tasks.py b/tasks.py new file mode 100644 index 0000000..4484a6f --- /dev/null +++ b/tasks.py @@ -0,0 +1,5 @@ +from invoke import Collection + +from pyinvoke import dev + +namespace = Collection(dev) diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/unit/__init__.py b/tests/unit/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/unit/test_example.py b/tests/unit/test_example.py new file mode 100644 index 0000000..813df60 --- /dev/null +++ b/tests/unit/test_example.py @@ -0,0 +1,2 @@ +def test_example(): + assert True