diff options
author | Nate Sesti <sestinj@gmail.com> | 2023-08-01 00:37:24 -0700 |
---|---|---|
committer | Nate Sesti <sestinj@gmail.com> | 2023-08-01 00:37:24 -0700 |
commit | 70eb274f51c703c352865b8af39557b271fae6dd (patch) | |
tree | 021eda9b05fac39b3f046eb41ab3fc5c0df7ede5 | |
parent | 1295cc00950c9c6b711fc82ef5492448a1be8caf (diff) | |
download | sncontinue-70eb274f51c703c352865b8af39557b271fae6dd.tar.gz sncontinue-70eb274f51c703c352865b8af39557b271fae6dd.tar.bz2 sncontinue-70eb274f51c703c352865b8af39557b271fae6dd.zip |
try cx_freeze, smaller pyinstaller
-rw-r--r-- | .github/workflows/main.yaml | 2 | ||||
-rw-r--r-- | continuedev/pyapp/pyoxidizer.bzl | 353 | ||||
-rw-r--r-- | continuedev/pyproject.toml | 2 | ||||
-rw-r--r-- | continuedev/requirements.txt | 88 | ||||
-rw-r--r-- | continuedev/src/continuedev/libs/util/calculate_diff.py | 35 | ||||
-rw-r--r-- | cxf.py | 14 |
6 files changed, 31 insertions, 463 deletions
diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index 26d0d768..41fd174d 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -36,7 +36,7 @@ jobs: run: | pip install -r continuedev/requirements.txt pyinstaller - - run: pyinstaller run.py + - run: pyinstaller run.py --exclude-module numpy --exclude-module jedi -F - name: Upload Artifacts uses: actions/upload-artifact@v3 diff --git a/continuedev/pyapp/pyoxidizer.bzl b/continuedev/pyapp/pyoxidizer.bzl deleted file mode 100644 index 943007ff..00000000 --- a/continuedev/pyapp/pyoxidizer.bzl +++ /dev/null @@ -1,353 +0,0 @@ -# This file defines how PyOxidizer application building and packaging is -# performed. See PyOxidizer's documentation at -# https://gregoryszorc.com/docs/pyoxidizer/stable/pyoxidizer.html for details -# of this configuration file format. - -# Configuration files consist of functions which define build "targets." -# This function creates a Python executable and installs it in a destination -# directory. -def make_exe(): - # Obtain the default PythonDistribution for our build target. We link - # this distribution into our produced executable and extract the Python - # standard library from it. - dist = default_python_distribution() - - # This function creates a `PythonPackagingPolicy` instance, which - # influences how executables are built and how resources are added to - # the executable. You can customize the default behavior by assigning - # to attributes and calling functions. - policy = dist.make_python_packaging_policy() - - # Enable support for non-classified "file" resources to be added to - # resource collections. - # policy.allow_files = True - - # Control support for loading Python extensions and other shared libraries - # from memory. This is only supported on Windows and is ignored on other - # platforms. - # policy.allow_in_memory_shared_library_loading = True - - # Control whether to generate Python bytecode at various optimization - # levels. The default optimization level used by Python is 0. - # policy.bytecode_optimize_level_zero = True - # policy.bytecode_optimize_level_one = True - # policy.bytecode_optimize_level_two = True - - # Package all available Python extensions in the distribution. - # policy.extension_module_filter = "all" - - # Package the minimum set of Python extensions in the distribution needed - # to run a Python interpreter. Various functionality from the Python - # standard library won't work with this setting! But it can be used to - # reduce the size of generated executables by omitting unused extensions. - # policy.extension_module_filter = "minimal" - - # Package Python extensions in the distribution not having additional - # library dependencies. This will exclude working support for SSL, - # compression formats, and other functionality. - # policy.extension_module_filter = "no-libraries" - - # Package Python extensions in the distribution not having a dependency on - # copyleft licensed software like GPL. - # policy.extension_module_filter = "no-copyleft" - - # Controls whether the file scanner attempts to classify files and emit - # resource-specific values. - # policy.file_scanner_classify_files = True - - # Controls whether `File` instances are emitted by the file scanner. - # policy.file_scanner_emit_files = False - - # Controls the `add_include` attribute of "classified" resources - # (`PythonModuleSource`, `PythonPackageResource`, etc). - # policy.include_classified_resources = True - - # Toggle whether Python module source code for modules in the Python - # distribution's standard library are included. - # policy.include_distribution_sources = False - - # Toggle whether Python package resource files for the Python standard - # library are included. - # policy.include_distribution_resources = False - - # Controls the `add_include` attribute of `File` resources. - # policy.include_file_resources = False - - # Controls the `add_include` attribute of `PythonModuleSource` not in - # the standard library. - # policy.include_non_distribution_sources = True - - # Toggle whether files associated with tests are included. - # policy.include_test = False - - # Resources are loaded from "in-memory" or "filesystem-relative" paths. - # The locations to attempt to add resources to are defined by the - # `resources_location` and `resources_location_fallback` attributes. - # The former is the first/primary location to try and the latter is - # an optional fallback. - - # Use in-memory location for adding resources by default. - # policy.resources_location = "in-memory" - - # Use filesystem-relative location for adding resources by default. - # policy.resources_location = "filesystem-relative:prefix" - - # Attempt to add resources relative to the built binary when - # `resources_location` fails. - # policy.resources_location_fallback = "filesystem-relative:prefix" - - # Clear out a fallback resource location. - # policy.resources_location_fallback = None - - # Define a preferred Python extension module variant in the Python distribution - # to use. - # policy.set_preferred_extension_module_variant("foo", "bar") - - # Configure policy values to classify files as typed resources. - # (This is the default.) - # policy.set_resource_handling_mode("classify") - - # Configure policy values to handle files as files and not attempt - # to classify files as specific types. - # policy.set_resource_handling_mode("files") - - # This variable defines the configuration of the embedded Python - # interpreter. By default, the interpreter will run a Python REPL - # using settings that are appropriate for an "isolated" run-time - # environment. - # - # The configuration of the embedded Python interpreter can be modified - # by setting attributes on the instance. Some of these are - # documented below. - python_config = dist.make_python_interpreter_config() - - # Make the embedded interpreter behave like a `python` process. - # python_config.config_profile = "python" - - # Set initial value for `sys.path`. If the string `$ORIGIN` exists in - # a value, it will be expanded to the directory of the built executable. - # python_config.module_search_paths = ["$ORIGIN/lib"] - - # Use jemalloc as Python's memory allocator. - # python_config.allocator_backend = "jemalloc" - - # Use mimalloc as Python's memory allocator. - # python_config.allocator_backend = "mimalloc" - - # Use snmalloc as Python's memory allocator. - # python_config.allocator_backend = "snmalloc" - - # Let Python choose which memory allocator to use. (This will likely - # use the malloc()/free() linked into the program. - # python_config.allocator_backend = "default" - - # Enable the use of a custom allocator backend with the "raw" memory domain. - # python_config.allocator_raw = True - - # Enable the use of a custom allocator backend with the "mem" memory domain. - # python_config.allocator_mem = True - - # Enable the use of a custom allocator backend with the "obj" memory domain. - # python_config.allocator_obj = True - - # Enable the use of a custom allocator backend with pymalloc's arena - # allocator. - # python_config.allocator_pymalloc_arena = True - - # Enable Python memory allocator debug hooks. - # python_config.allocator_debug = True - - # Automatically calls `multiprocessing.set_start_method()` with an - # appropriate value when OxidizedFinder imports the `multiprocessing` - # module. - # python_config.multiprocessing_start_method = 'auto' - - # Do not call `multiprocessing.set_start_method()` automatically. (This - # is the default behavior of Python applications.) - # python_config.multiprocessing_start_method = 'none' - - # Call `multiprocessing.set_start_method()` with explicit values. - # python_config.multiprocessing_start_method = 'fork' - # python_config.multiprocessing_start_method = 'forkserver' - # python_config.multiprocessing_start_method = 'spawn' - - # Control whether `oxidized_importer` is the first importer on - # `sys.meta_path`. - # python_config.oxidized_importer = False - - # Enable the standard path-based importer which attempts to load - # modules from the filesystem. - # python_config.filesystem_importer = True - - # Set `sys.frozen = False` - # python_config.sys_frozen = False - - # Set `sys.meipass` - # python_config.sys_meipass = True - - # Write files containing loaded modules to the directory specified - # by the given environment variable. - # python_config.write_modules_directory_env = "/tmp/oxidized/loaded_modules" - - # Evaluate a string as Python code when the interpreter starts. - python_config.run_command = "from continuedev.server.main import run_server; run_server()" - policy.resources_location_fallback = "filesystem-relative:prefix" - - # Run a Python module as __main__ when the interpreter starts. - # python_config.run_module = "<module>" - - # Run a Python file when the interpreter starts. - # python_config.run_filename = "/path/to/file" - - # Produce a PythonExecutable from a Python distribution, embedded - # resources, and other options. The returned object represents the - # standalone executable that will be built. - exe = dist.to_python_executable( - name="pyapp", - - # If no argument passed, the default `PythonPackagingPolicy` for the - # distribution is used. - packaging_policy=policy, - - # If no argument passed, the default `PythonInterpreterConfig` is used. - config=python_config, - ) - - for resource in exe.pip_install(["../dist/continuedev-0.1.2-py3-none-any.whl"]): - resource.add_location = "in-memory" - exe.add_python_resource(resource) - - - - # Install tcl/tk support files to a specified directory so the `tkinter` Python - # module works. - # exe.tcl_files_path = "lib" - - # Never attempt to copy Windows runtime DLLs next to the built executable. - # exe.windows_runtime_dlls_mode = "never" - - # Copy Windows runtime DLLs next to the built executable when they can be - # located. - # exe.windows_runtime_dlls_mode = "when-present" - - # Copy Windows runtime DLLs next to the build executable and error if this - # cannot be done. - # exe.windows_runtime_dlls_mode = "always" - - # Make the executable a console application on Windows. - # exe.windows_subsystem = "console" - - # Make the executable a non-console application on Windows. - # exe.windows_subsystem = "windows" - - # Invoke `pip download` to install a single package using wheel archives - # obtained via `pip download`. `pip_download()` returns objects representing - # collected files inside Python wheels. `add_python_resources()` adds these - # objects to the binary, with a load location as defined by the packaging - # policy's resource location attributes. - #exe.add_python_resources(exe.pip_download(["pyflakes==2.2.0"])) - - # Invoke `pip install` with our Python distribution to install a single package. - # `pip_install()` returns objects representing installed files. - # `add_python_resources()` adds these objects to the binary, with a load - # location as defined by the packaging policy's resource location - # attributes. - #exe.add_python_resources(exe.pip_install(["appdirs"])) - - # Invoke `pip install` using a requirements file and add the collected resources - # to our binary. - #exe.add_python_resources(exe.pip_install(["-r", "requirements.txt"])) - - - # Read Python files from a local directory and add them to our embedded - # context, taking just the resources belonging to the `foo` and `bar` - # Python packages. - #exe.add_python_resources(exe.read_package_root( - # path="/src/mypackage", - # packages=["foo", "bar"], - #)) - - # Discover Python files from a virtualenv and add them to our embedded - # context. - #exe.add_python_resources(exe.read_virtualenv(path="/path/to/venv")) - - # Filter all resources collected so far through a filter of names - # in a file. - #exe.filter_resources_from_files(files=["/path/to/filter-file"]) - - # Return our `PythonExecutable` instance so it can be built and - # referenced by other consumers of this target. - return exe - -def make_embedded_resources(exe): - return exe.to_embedded_resources() - -def make_install(exe): - # Create an object that represents our installed application file layout. - files = FileManifest() - - # Add the generated executable to our install layout in the root directory. - files.add_python_resource(".", exe) - - return files - -def make_msi(exe): - # See the full docs for more. But this will convert your Python executable - # into a `WiXMSIBuilder` Starlark type, which will be converted to a Windows - # .msi installer when it is built. - return exe.to_wix_msi_builder( - # Simple identifier of your app. - "myapp", - # The name of your application. - "My Application", - # The version of your application. - "1.0", - # The author/manufacturer of your application. - "Alice Jones" - ) - - -# Dynamically enable automatic code signing. -def register_code_signers(): - # You will need to run with `pyoxidizer build --var ENABLE_CODE_SIGNING 1` for - # this if block to be evaluated. - if not VARS.get("ENABLE_CODE_SIGNING"): - return - - # Use a code signing certificate in a .pfx/.p12 file, prompting the - # user for its path and password to open. - # pfx_path = prompt_input("path to code signing certificate file") - # pfx_password = prompt_password( - # "password for code signing certificate file", - # confirm = True - # ) - # signer = code_signer_from_pfx_file(pfx_path, pfx_password) - - # Use a code signing certificate in the Windows certificate store, specified - # by its SHA-1 thumbprint. (This allows you to use YubiKeys and other - # hardware tokens if they speak to the Windows certificate APIs.) - # sha1_thumbprint = prompt_input( - # "SHA-1 thumbprint of code signing certificate in Windows store" - # ) - # signer = code_signer_from_windows_store_sha1_thumbprint(sha1_thumbprint) - - # Choose a code signing certificate automatically from the Windows - # certificate store. - # signer = code_signer_from_windows_store_auto() - - # Activate your signer so it gets called automatically. - # signer.activate() - - -# Call our function to set up automatic code signers. -register_code_signers() - -# Tell PyOxidizer about the build targets defined above. -register_target("exe", make_exe) -register_target("resources", make_embedded_resources, depends=["exe"], default_build_script=True) -register_target("install", make_install, depends=["exe"], default=True) -register_target("msi_installer", make_msi, depends=["exe"]) - -# Resolve whatever targets the invoker of this configuration file is requesting -# be resolved. -resolve_targets() diff --git a/continuedev/pyproject.toml b/continuedev/pyproject.toml index d7505e2b..7355beb0 100644 --- a/continuedev/pyproject.toml +++ b/continuedev/pyproject.toml @@ -7,7 +7,6 @@ readme = "README.md" [tool.poetry.dependencies] python = "^3.8.1" -diff-match-patch = "^20230430" fastapi = "^0.95.1" typer = "^0.7.0" openai = "^0.27.5" @@ -18,7 +17,6 @@ python-dotenv = "^1.0.0" nest-asyncio = "^1.5.6" websockets = "^11.0.2" urllib3 = "1.26.15" -gpt-index = "^0.6.8" posthog = "^3.0.1" tiktoken = "^0.4.0" jsonref = "^1.1.0" diff --git a/continuedev/requirements.txt b/continuedev/requirements.txt index 970681f9..6a776a62 100644 --- a/continuedev/requirements.txt +++ b/continuedev/requirements.txt @@ -1,76 +1,20 @@ -aiofiles==23.1.0 -aiohttp==3.8.4 -aiosignal==1.3.1 -anthropic==0.3.4 -anyio==3.6.2 -async-timeout==4.0.2 -attrs==23.1.0 -backoff==2.2.1 -boltons==23.0.0 -camel-converter==3.0.2 -certifi==2022.12.7 -cffi==1.15.1 -charset-normalizer==3.1.0 -chevron==0.14.0 -click==8.1.3 --e git+https://github.com/continuedev/continue.git@78ada9b463a41260ccf53bbdc08b396ab9783ee2#egg=continuedev&subdirectory=continuedev -cryptography==41.0.2 -dataclasses-json==0.5.7 -Deprecated==1.2.14 -diff-match-patch==20230430 -directory-tree==0.0.3.1 -distro==1.8.0 fastapi==0.95.1 -frozenlist==1.3.3 -gpt-index==0.6.8 -h11==0.14.0 -httpcore==0.17.3 -httpx==0.24.1 -idna==3.4 -jsonref==1.1.0 -jsonschema==4.17.3 -langchain==0.0.171 -marshmallow==3.19.0 -marshmallow-enum==1.5.1 -meilisearch-python-async==1.4.8 -monotonic==1.6 -multidict==6.0.4 -mypy-extensions==1.0.0 -nest-asyncio==1.5.6 -numexpr==2.8.4 -numpy==1.24.3 -openai==0.27.6 -openapi-schema-pydantic==1.2.4 -packaging==23.1 -pandas==2.0.1 -posthog==3.0.1 -psutil==5.9.5 -pycparser==2.21 -pydantic==1.10.7 -PyGithub==1.59.0 -PyJWT==2.8.0 -PyNaCl==1.5.0 -pyrsistent==0.19.3 -python-dateutil==2.8.2 -python-dotenv==1.0.0 -pytz==2023.3 -PyYAML==6.0 -regex==2023.5.5 -requests==2.29.0 -six==1.16.0 -sniffio==1.3.0 -SQLAlchemy==2.0.13 -starlette==0.26.1 -tenacity==8.2.2 -tiktoken==0.4.0 -tokenizers==0.13.3 -tqdm==4.65.0 typer==0.7.0 -typing-inspect==0.8.0 -typing_extensions==4.5.0 -tzdata==2023.3 -urllib3==1.26.15 +openai==0.27.5 +boltons==23.0.0 +pydantic==1.10.7 uvicorn==0.21.1 +python-dotenv==1.0.0 +nest-asyncio==1.5.6 websockets==11.0.2 -wrapt==1.15.0 -yarl==1.9.2 +urllib3==1.26.15 +posthog==3.0.1 +tiktoken==0.4.0 +jsonref==1.1.0 +jsonschema==4.17.3 +directory-tree==0.0.3.1 +anthropic==0.3.4 +chevron==0.14.0 +psutil==5.9.5 +pygithub==1.59.0 +meilisearch-python-async==1.4.8 diff --git a/continuedev/src/continuedev/libs/util/calculate_diff.py b/continuedev/src/continuedev/libs/util/calculate_diff.py index 3e82bab3..e8e48839 100644 --- a/continuedev/src/continuedev/libs/util/calculate_diff.py +++ b/continuedev/src/continuedev/libs/util/calculate_diff.py @@ -2,41 +2,6 @@ import difflib from typing import List from ...models.main import Position, Range from ...models.filesystem import FileEdit -from diff_match_patch import diff_match_patch - - -def calculate_diff_match_patch(filepath: str, original: str, updated: str) -> List[FileEdit]: - dmp = diff_match_patch() - diffs = dmp.diff_main(original, updated) - dmp.diff_cleanupSemantic(diffs) - - replacements = [] - - current_index = 0 - deleted_length = 0 - - for diff in diffs: - if diff[0] == diff_match_patch.DIFF_EQUAL: - current_index += len(diff[1]) - deleted_length = 0 - elif diff[0] == diff_match_patch.DIFF_INSERT: - current_index += deleted_length - replacements.append((current_index, current_index, diff[1])) - current_index += len(diff[1]) - deleted_length = 0 - elif diff[0] == diff_match_patch.DIFF_DELETE: - replacements.append( - (current_index, current_index + len(diff[1]), '')) - deleted_length += len(diff[1]) - elif diff[0] == diff_match_patch.DIFF_REPLACE: - replacements.append( - (current_index, current_index + len(diff[1]), '')) - current_index += deleted_length - replacements.append((current_index, current_index, diff[2])) - current_index += len(diff[2]) - deleted_length = 0 - - return [FileEdit(filepath=filepath, range=Range.from_indices(original, r[0], r[1]), replacement=r[2]) for r in replacements] def calculate_diff(filepath: str, original: str, updated: str) -> List[FileEdit]: @@ -0,0 +1,14 @@ +from cx_Freeze import setup, Executable + +setup( + name="Continue", + version="0.1", + description="Continue Server", + executables=[Executable("run.py")], + + options={ + "build_exe": { + "excludes": ["unnecessary_module"], + }, + }, +) |