diff --git a/.github/workflows/ci_templates.yaml b/.github/workflows/ci_templates.yaml new file mode 100644 index 000000000..289119dc7 --- /dev/null +++ b/.github/workflows/ci_templates.yaml @@ -0,0 +1,134 @@ +name: Template Testing + +on: + pull_request: + branches: + - main + - '[0-9]+.[0-9]+' + paths: # Paths that may affect code quality + +concurrency: + group: ${{ github.ref }}-template + cancel-in-progress: true + +jobs: + template_update_check: + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.final_output.outputs.matrix }} + + steps: + - uses: actions/checkout@v3 + + - name: Setup conditions based on branch + id: setup + run: | + if [[ "${{ github.base_ref }}" == "main" ]]; then + echo "mode=changed" >> $GITHUB_ENV + else + echo "mode=all" >> $GITHUB_ENV + fi + + - name: Get changed templates + if: env.mode == 'changed' + id: changed-files-specific + uses: tj-actions/changed-files@v44 + + - name: Filter changed templates and set output + if: env.mode == 'changed' + id: set-matrix-1 + run: | + IFS=$'\n' + changed_files=(${{ steps.changed-files-specific.outputs.all_changed_files }}) + declare -A template_set + for file in "${changed_files[@]}"; do + if [[ "$file" =~ ^templates/ ]]; then + template_name=$(echo "$file" | cut -d '/' -f 2) + template_set[$template_name]=1 + fi + done + templates=("${!template_set[@]}") + matrix_json=$(printf '%s\n' "${templates[@]}" | jq -R -s -c '{template: split("\n")[:-1]}') + echo "matrix_json=$matrix_json" + echo "Changed templates: ${templates[*]}" + echo "matrix_json: $matrix_json" + echo "matrix_json=$matrix_json" >> $GITHUB_ENV + + - name: Get all templates to test + if: env.mode == 'all' + id: set-matrix-2 + run: | + IFS=$'\n' + # List directories only under 'templates/' and create an array + changed_templates=($(find templates/ -maxdepth 1 -mindepth 1 -type d -exec basename {} \;)) + echo "Here are the changed templates:" + echo "${changed_templates[@]}" + declare -A template_set + + # Loop through the array to populate another associative array to ensure uniqueness + for file in "${changed_templates[@]}"; do + template_set[$file]=1 + done + + # Create an array from the associative array's keys + templates=("${!template_set[@]}") + echo "All templates: ${templates[*]}" + + # Create JSON array from the list of templates + matrix_json=$(printf '%s\n' "${templates[@]}" | jq -R -s -c '{template: split("\n")[:-1]}') + echo "matrix_json=$matrix_json" + + echo "matrix_json: $matrix_json" + echo "matrix_json=$matrix_json" >> $GITHUB_ENV + + + - name: Set job output + id: final_output + run: | + echo "::set-output name=matrix::$matrix_json" + + test_template: + needs: template_update_check + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: ${{fromJson(needs.template_update_check.outputs.matrix)}} + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Cache Pip Packages + id: setup-python + uses: actions/setup-python@v4 + with: + python-version: '3.10' + cache: 'pip' + + - name: Cache Python Installation + uses: actions/cache@v4 + with: + path: ${{ env.pythonLocation }} + key: ${{ matrix.template }}_${{ hashFiles('pyproject.toml', 'templates/${{ matrix.template }}/requirements.txt') }} + + - name: Install Superduper Project + run: | + # Install core and testsuite dependencies on the cached python environment. + python -m pip install '.[test]' + python -m pip install -e plugins/mongodb + + - name: Install template requirements + run: | + echo "Installing local template dependencies..." + python -m pip install -r "templates/${{ matrix.template }}/requirements.txt" + if [ -e "templates/${{ matrix.template }}/install.sh" ]; then + bash templates/${{ matrix.template }}/install.sh + fi + + - name: Template testing + run: | + export SUPERDUPER_TEMPLATE=${{ matrix.template }} + export SUPERDUPER_DATA_BACKEND='mongomock://test_db' + pytest test/integration/template/test_template.py -s + env: + OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} + ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 6318e63fa..49c47b1e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -76,6 +76,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add pdf rag template - Updated llm_finetuning template - Add sql table length exceed limit and uuid truncation. +- Add ci workflow to test templates #### Bug Fixes diff --git a/Makefile b/Makefile index 37fcafac6..382ba05f1 100644 --- a/Makefile +++ b/Makefile @@ -34,6 +34,23 @@ new_release: ## Release a new version of superduper.io git push origin release-$(RELEASE_VERSION) git push origin $(RELEASE_VERSION) +TEMPLATES ?= '*' + +build_templates: # build the templates with APPLY=False TEMPLATES='*' + if [ "$(TEMPLATES)" = "*" ]; then \ + templates_to_build=$$(ls -d templates/*/); \ + else \ + templates_to_build=$$(echo $(TEMPLATES) | tr ',' ' '); \ + fi; \ + for template in $$templates_to_build; do \ + echo $$template; \ + rm -rf templates/$$template/blobs; \ + rm -rf templates/$$template/files; \ + rm -rf templates/$$template/.ipynb_checkpoints; \ + (cd templates/$$template && papermill build.ipynb /tmp/papermill_output.ipynb -p APPLY False); \ + jupyter nbconvert templates/$$template/build.ipynb --clear-output; \ + done; + ##@ Code Quality gen_docs: ## Generate Docs and API diff --git a/superduper/components/dataset.py b/superduper/components/dataset.py index 33028a4a2..59a4259cc 100644 --- a/superduper/components/dataset.py +++ b/superduper/components/dataset.py @@ -94,3 +94,24 @@ def __str__(self): return f'Dataset(identifier={self.identifier}, select={self.select})' __repr__ = __str__ + + +class RemoteData(Component): + """Class to fetch dataset from remote. + + :param getter: Function to fetch data. + """ + + type_id: t.ClassVar[str] = 'dataset' + getter: t.Callable + + def __post_init__(self, db, artifacts): + self._data = None + return super().__post_init__(db, artifacts) + + @property + def data(self): + """Get the data.""" + if self._data is None: + self._data = self.getter() + return self._data diff --git a/superduper/components/table.py b/superduper/components/table.py index 2741bb7f8..ea2f6fe3d 100644 --- a/superduper/components/table.py +++ b/superduper/components/table.py @@ -8,6 +8,7 @@ if t.TYPE_CHECKING: from superduper.base.datalayer import Datalayer + from superduper.components.dataset import Dataset, RemoteData DEFAULT_PRIMARY_ID = 'id' @@ -27,7 +28,7 @@ class Table(Component): schema: Schema primary_id: str = DEFAULT_PRIMARY_ID - data: t.List[t.Dict] | None = None + data: t.List[t.Dict] | 'Dataset' | 'RemoteData' | None = None def __post_init__(self, db, artifacts): super().__post_init__(db, artifacts) @@ -64,4 +65,8 @@ def on_create(self, db: 'Datalayer'): @trigger('apply', requires='data') def add_data(self): - self.db[self.identifier].insert(self.data).execute() + if isinstance(self.data, Component): + data = self.data.data + else: + data = self.data + self.db[self.identifier].insert(data).execute() diff --git a/superduper/components/template.py b/superduper/components/template.py index ce80ffecd..9751511d3 100644 --- a/superduper/components/template.py +++ b/superduper/components/template.py @@ -52,12 +52,14 @@ def __post_init__(self, db, artifacts, substitutions): def __call__(self, **kwargs): """Method to create component from the given template and `kwargs`.""" kwargs.update({k: v for k, v in self.default_values.items() if k not in kwargs}) - assert set(kwargs.keys()) == set(self.template_variables) + + assert set(kwargs.keys()) == (set(self.template_variables) - {'output_prefix'}) if 'output_prefix' in kwargs: assert kwargs['output_prefix'] == CFG.output_prefix else: kwargs["output_prefix"] = CFG.output_prefix + component = _replace_variables(self.template, **kwargs) return Document.decode(component, db=self.db).unpack() diff --git a/templates/llm_finetuning/blobs/913bc7838286b1f1fa6f4f90969bd9acf4dc205f b/templates/llm_finetuning/blobs/913bc7838286b1f1fa6f4f90969bd9acf4dc205f new file mode 100644 index 000000000..b67e3f6bc Binary files /dev/null and b/templates/llm_finetuning/blobs/913bc7838286b1f1fa6f4f90969bd9acf4dc205f differ diff --git a/templates/llm_finetuning/build.ipynb b/templates/llm_finetuning/build.ipynb index 12170468c..365c581f7 100644 --- a/templates/llm_finetuning/build.ipynb +++ b/templates/llm_finetuning/build.ipynb @@ -28,6 +28,25 @@ ":::" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "6b39819c-2bc3-49a3-b285-d13b6ccc1242", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [ + "parameters" + ] + }, + "outputs": [], + "source": [ + "APPLY = True\n", + "TABLE_NAME = 'sample_llm_finetuning'" + ] + }, { "cell_type": "code", "execution_count": null, @@ -37,7 +56,7 @@ "source": [ "from superduper import superduper\n", "\n", - "db = superduper('mongomock:///test_db', force_apply=True)" + "db = superduper('mongomock://test_db', force_apply=True)" ] }, { @@ -66,16 +85,32 @@ "source": [ "from datasets import load_dataset\n", "from superduper.base.document import Document\n", - "dataset_name = \"timdettmers/openassistant-guanaco\"\n", - "dataset = load_dataset(dataset_name)\n", "\n", - "train_dataset = dataset[\"train\"]\n", - "eval_dataset = dataset[\"test\"]\n", + "def getter():\n", "\n", - "train_documents = [{**example, \"_fold\": \"train\"} for example in train_dataset][:50]\n", - "eval_documents = [{**example, \"_fold\": \"valid\"} for example in eval_dataset][:10]\n", + " dataset_name = \"timdettmers/openassistant-guanaco\"\n", + " dataset = load_dataset(dataset_name)\n", + " \n", + " train_dataset = dataset[\"train\"]\n", + " eval_dataset = dataset[\"test\"]\n", + " \n", + " train_documents = [{**example, \"_fold\": \"train\"} for example in train_dataset][:10]\n", + " eval_documents = [{**example, \"_fold\": \"valid\"} for example in eval_dataset][:5]\n", + " \n", + " data = train_documents + eval_documents\n", "\n", - "data = train_documents + eval_documents" + " return data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cef3a6a1-732c-4896-b00b-8624876533a4", + "metadata": {}, + "outputs": [], + "source": [ + "if APPLY:\n", + " data = getter()" ] }, { @@ -113,14 +148,15 @@ "metadata": {}, "outputs": [], "source": [ - "d = data[0]\n", - "input_text, output_text = d[\"text\"].rsplit(\"### Assistant: \", maxsplit=1)\n", - "input_text += \"### Assistant: \"\n", - "output_text = output_text.rsplit(\"### Human:\")[0]\n", - "print(\"Input: --------------\")\n", - "print(input_text)\n", - "print(\"Response: --------------\")\n", - "print(output_text)" + "if APPLY:\n", + " d = data[0]\n", + " input_text, output_text = d[\"text\"].rsplit(\"### Assistant: \", maxsplit=1)\n", + " input_text += \"### Assistant: \"\n", + " output_text = output_text.rsplit(\"### Human:\")[0]\n", + " print(\"Input: --------------\")\n", + " print(input_text)\n", + " print(\"Response: --------------\")\n", + " print(output_text)" ] }, { @@ -141,10 +177,11 @@ "metadata": {}, "outputs": [], "source": [ - "from superduper import Document\n", + "table_or_collection = db[TABLE_NAME]\n", + "\n", + "if APPLY:\n", + " table_or_collection.insert(data).execute()\n", "\n", - "table_or_collection = db[\"dataset\"]\n", - "table_or_collection.insert(data).execute()\n", "select = table_or_collection.select()" ] }, @@ -239,9 +276,18 @@ " trainer=trainer,\n", " model_kwargs=model_kwargs,\n", " tokenizer_kwargs=tokenizer_kwargs,\n", - ")\n", - "\n", - "db.apply(llm)" + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4cb0dd6a-2bc8-4288-9b99-49e1ab214965", + "metadata": {}, + "outputs": [], + "source": [ + "if APPLY:\n", + " db.apply(llm, force=True)" ] }, { @@ -251,7 +297,8 @@ "metadata": {}, "outputs": [], "source": [ - "from superduper import Template, Application\n", + "from superduper import Template, Table, Schema\n", + "from superduper.components.dataset import RemoteData\n", "\n", "llm.trainer.use_lora = \"\"\n", "llm.trainer.num_train_epochs = \"\"\n", @@ -260,10 +307,21 @@ " 'llm-finetune',\n", " template=llm,\n", " substitutions={\n", - " 'dataset': 'collection',\n", + " TABLE_NAME: 'table_name',\n", " model_name: 'model_name',\n", " },\n", - " template_variables=['collection', 'model_name', 'use_lora', 'num_train_epochs'],\n", + " default_table=Table(\n", + " 'sample_llm_finetuning',\n", + " schema=Schema(\n", + " 'sample_llm_finetuning/schema',\n", + " fields={'x': 'str', 'y': 'int'},\n", + " ),\n", + " data=RemoteData(\n", + " 'llm_finetuning',\n", + " getter=getter,\n", + " ),\n", + " ),\n", + " template_variables=['table_name', 'model_name', 'use_lora', 'num_train_epochs'],\n", " types={\n", " 'collection': {\n", " 'type': 'str',\n", @@ -281,6 +339,10 @@ " 'type': 'int',\n", " 'default': 3\n", " },\n", + " 'table_name': {\n", + " 'type': 'str',\n", + " 'default': 'sample_llm_finetuning',\n", + " }\n", " }\n", ")\n", "\n", @@ -306,7 +368,8 @@ "metadata": {}, "outputs": [], "source": [ - "llm = db.load(\"model\", \"llm\")" + "if APPLY:\n", + " llm = db.load(\"model\", \"llm\")" ] }, { @@ -316,16 +379,9 @@ "metadata": {}, "outputs": [], "source": [ - "llm.predict(input_text, max_new_tokens=200)" + "if APPLY:\n", + " llm.predict(input_text, max_new_tokens=200)" ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e0ecc8e3-70f2-4676-883b-a41fb82ff8ca", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { @@ -344,7 +400,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.5" + "version": "3.10.13" } }, "nbformat": 4, diff --git a/templates/llm_finetuning/component.json b/templates/llm_finetuning/component.json index 22ee3f55a..84f07680b 100644 --- a/templates/llm_finetuning/component.json +++ b/templates/llm_finetuning/component.json @@ -1,6 +1,53 @@ { "_base": "?llm-finetune", "_builds": { + "str": { + "_path": "superduper.components.schema.FieldType" + }, + "int": { + "_path": "superduper.components.schema.FieldType" + }, + "schema:sample_llm_finetuning/schema": { + "_path": "superduper.components.schema.Schema", + "upstream": null, + "plugins": null, + "cache": true, + "status": null, + "fields": { + "x": "?str", + "y": "?int", + "_fold": "?str" + } + }, + "datatype:dill": { + "_path": "superduper.components.datatype.get_serializer", + "method": "dill", + "encodable": "artifact" + }, + "913bc7838286b1f1fa6f4f90969bd9acf4dc205f": { + "_path": "superduper.components.datatype.Artifact", + "datatype": "?datatype:dill", + "uri": null, + "blob": "&:blob:913bc7838286b1f1fa6f4f90969bd9acf4dc205f" + }, + "dataset:llm_finetuning": { + "_path": "superduper.components.dataset.RemoteData", + "upstream": null, + "plugins": null, + "cache": true, + "status": null, + "getter": "?913bc7838286b1f1fa6f4f90969bd9acf4dc205f" + }, + "table:sample_llm_finetuning": { + "_path": "superduper.components.table.Table", + "upstream": null, + "plugins": null, + "cache": true, + "status": null, + "schema": "?schema:sample_llm_finetuning/schema", + "primary_id": "id", + "data": "?dataset:llm_finetuning" + }, "llm-finetune": { "_path": "superduper.components.template.Template", "upstream": null, @@ -10,19 +57,19 @@ "template": { "_base": "?llm", "_builds": { - "-select": { + "sample-llm-finetuning-select": { "_path": "superduper_mongodb.query.parse_query", "documents": [], - "query": ".select()" + "query": ".select()" }, "trainer:llm-finetune-trainer": { "_path": "superduper_transformers.training.LLMTrainer", "upstream": null, "plugins": null, "cache": true, - "status": "Status.ready", + "status": null, "key": "text", - "select": "?-select", + "select": "?sample-llm-finetuning-select", "transform": null, "metric_values": {}, "signature": "*args", @@ -173,7 +220,7 @@ "setup_chat_format": false, "log_to_db": true, "training_kwargs": { - "_text_field": "text" + "dataset_text_field": "text" }, "num_gpus": null, "ray_configs": null @@ -194,7 +241,7 @@ "upstream": null, "plugins": null, "cache": true, - "status": "Status.initializing", + "status": null, "signature": "singleton", "datatype": null, "output_schema": null, @@ -218,10 +265,11 @@ } }, "template_variables": [ - "collection", + "table_name", "model_name", "use_lora", - "num_train_epochs" + "num_train_epochs", + "output_prefix" ], "types": { "collection": { @@ -239,17 +287,21 @@ "num_train_epochs": { "type": "int", "default": 3 + }, + "table_name": { + "type": "str", + "default": "sample_llm_finetuning" } }, "blobs": null, "files": null, - "data": null, "requirements": null, + "default_table": "?table:sample_llm_finetuning", + "queries": null, "_literals": [ "template" ] } }, - "_blobs": {}, "_files": {} } \ No newline at end of file diff --git a/templates/llm_finetuning/requirements.txt b/templates/llm_finetuning/requirements.txt index 7999307f5..80b1cebd1 100644 --- a/templates/llm_finetuning/requirements.txt +++ b/templates/llm_finetuning/requirements.txt @@ -1,6 +1 @@ -superduper==0.3.0 -transformers>=4.29.1 -datasets>=2.18.0 -torch -peft>=0.10.0 -trl>=0.8.0 \ No newline at end of file +-e ./plugins/transformers \ No newline at end of file diff --git a/templates/multimodal_image_search/blobs/aea6ff98a7ef32cea8f004f3d6c70dc168fe8a7c b/templates/multimodal_image_search/blobs/0d075429858cd4d08c3bd9e2be789d9f88fe649f similarity index 76% rename from templates/multimodal_image_search/blobs/aea6ff98a7ef32cea8f004f3d6c70dc168fe8a7c rename to templates/multimodal_image_search/blobs/0d075429858cd4d08c3bd9e2be789d9f88fe649f index c34c7f814..137c5a341 100644 Binary files a/templates/multimodal_image_search/blobs/aea6ff98a7ef32cea8f004f3d6c70dc168fe8a7c and b/templates/multimodal_image_search/blobs/0d075429858cd4d08c3bd9e2be789d9f88fe649f differ diff --git a/templates/rag/blobs/877552c9dc895dc69c5ee7ccf173357514138d94 b/templates/multimodal_image_search/blobs/3516efb5fedb59553124bdcc463af15e0a1ecb69 similarity index 76% rename from templates/rag/blobs/877552c9dc895dc69c5ee7ccf173357514138d94 rename to templates/multimodal_image_search/blobs/3516efb5fedb59553124bdcc463af15e0a1ecb69 index 759d203db..a55f40c2d 100644 Binary files a/templates/rag/blobs/877552c9dc895dc69c5ee7ccf173357514138d94 and b/templates/multimodal_image_search/blobs/3516efb5fedb59553124bdcc463af15e0a1ecb69 differ diff --git a/templates/multimodal_image_search/blobs/bf18c4fa88c06100aff919e8ce27d51ec6301a13 b/templates/multimodal_image_search/blobs/74abfc56aa344c2bb09ace700790c133a5b83948 similarity index 80% rename from templates/multimodal_image_search/blobs/bf18c4fa88c06100aff919e8ce27d51ec6301a13 rename to templates/multimodal_image_search/blobs/74abfc56aa344c2bb09ace700790c133a5b83948 index c32c71b27..fff2375c1 100644 Binary files a/templates/multimodal_image_search/blobs/bf18c4fa88c06100aff919e8ce27d51ec6301a13 and b/templates/multimodal_image_search/blobs/74abfc56aa344c2bb09ace700790c133a5b83948 differ diff --git a/templates/multimodal_image_search/blobs/8bd61247ed6689d62771ddc3bc3a012f0c6ca087 b/templates/multimodal_image_search/blobs/8bd61247ed6689d62771ddc3bc3a012f0c6ca087 new file mode 100644 index 000000000..01c92076c Binary files /dev/null and b/templates/multimodal_image_search/blobs/8bd61247ed6689d62771ddc3bc3a012f0c6ca087 differ diff --git a/templates/multimodal_image_search/blobs/d42588f7e71fe28a4a864ce0c7c2dafdd0dff09b b/templates/multimodal_image_search/blobs/d42588f7e71fe28a4a864ce0c7c2dafdd0dff09b deleted file mode 100644 index ec7639810..000000000 Binary files a/templates/multimodal_image_search/blobs/d42588f7e71fe28a4a864ce0c7c2dafdd0dff09b and /dev/null differ diff --git a/templates/multimodal_image_search/blobs/f79d2cedb218e815edcc2c38787ea44413e988e6 b/templates/multimodal_image_search/blobs/f79d2cedb218e815edcc2c38787ea44413e988e6 deleted file mode 100644 index cd1074cdc..000000000 Binary files a/templates/multimodal_image_search/blobs/f79d2cedb218e815edcc2c38787ea44413e988e6 and /dev/null differ diff --git a/templates/multimodal_image_search/build.ipynb b/templates/multimodal_image_search/build.ipynb index d66151420..dab8d939e 100644 --- a/templates/multimodal_image_search/build.ipynb +++ b/templates/multimodal_image_search/build.ipynb @@ -28,6 +28,24 @@ ":::" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "6614595a-49e4-41ae-abe7-97e6251c79bf", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [ + "parameters" + ] + }, + "outputs": [], + "source": [ + "APPLY = False" + ] + }, { "cell_type": "code", "execution_count": null, @@ -56,10 +74,35 @@ "metadata": {}, "outputs": [], "source": [ - "import pickle\n", - "\n", - "with open('data.pkl', 'rb') as f:\n", - " data = pickle.load(f)" + "def getter():\n", + " import subprocess\n", + " subprocess.run([\n", + " 'curl', '-O', 'https://superduperdb-public-demo.s3.amazonaws.com/images_classification.zip',\n", + " ])\n", + " subprocess.run(['rm', '-rf', 'images'])\n", + " subprocess.run(['rm', '-rf', '__MACOSX'])\n", + " subprocess.run(['unzip', 'images_classification.zip'])\n", + " subprocess.run(['rm', 'images_classification.zip'])\n", + " import json\n", + " from PIL import Image\n", + " with open('images/images.json', 'r') as f:\n", + " data = json.load(f)\n", + " data = data[:100]\n", + " data = [{'img': Image.open(r['image_path'])} for r in data]\n", + " subprocess.run(['rm', '-rf', '__MACOSX'])\n", + " subprocess.run(['rm', '-rf', 'images'])\n", + " return data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0e1d2a2e-dea4-4908-a479-0be6bc10f0a6", + "metadata": {}, + "outputs": [], + "source": [ + "if APPLY:\n", + " data = getter()" ] }, { @@ -144,7 +187,7 @@ "metadata": {}, "outputs": [], "source": [ - "indexing_key = 'img' \n", + "indexing_key = 'img'\n", "compatible_key = 'text'" ] }, @@ -178,14 +221,14 @@ "vector_index = VectorIndex(\n", " vector_index_name,\n", " indexing_listener=Listener(\n", - " key=indexing_key, # the `Document` key `model` should ingest to create embedding\n", - " select=db['docs'].select(), # a `Select` query telling which data to search over\n", - " model=embedding_model, # a `_Predictor` how to convert data to embeddings\n", + " key=indexing_key,\n", + " select=db['docs'].select(),\n", + " model=embedding_model,\n", " identifier='indexing-listener',\n", " ),\n", " compatible_listener=Listener(\n", - " key=compatible_key, # the `Document` key `model` should ingest to create embedding\n", - " model=compatible_model, # a `_Predictor` how to convert data to embeddings\n", + " key=compatible_key,\n", + " model=compatible_model,\n", " select=None,\n", " identifier='compatible-listener',\n", " )\n", @@ -204,7 +247,10 @@ "application = Application(\n", " 'image-vector-search',\n", " components=[vector_index],\n", - ")" + ")\n", + "\n", + "if APPLY:\n", + " db.apply(application, force=True)" ] }, { @@ -224,11 +270,12 @@ "metadata": {}, "outputs": [], "source": [ - "from superduper import Document\n", - "\n", - "table_or_collection = db['docs']\n", - "\n", - "ids = db.execute(table_or_collection.insert([Document(r) for r in data]))" + "if APPLY:\n", + " from superduper import Document\n", + " \n", + " table_or_collection = db['docs']\n", + " \n", + " ids = db.execute(table_or_collection.insert([Document(r) for r in data]))" ] }, { @@ -251,7 +298,8 @@ "metadata": {}, "outputs": [], "source": [ - "item = Document({compatible_key: \"Find a black cat\"})" + "if APPLY:\n", + " item = Document({compatible_key: \"Find a black dog.\"})" ] }, { @@ -261,10 +309,11 @@ "metadata": {}, "outputs": [], "source": [ - "from IPython.display import display\n", - "search_image = data[0]\n", - "display(search_image)\n", - "item = Document(search_image)" + "if APPLY:\n", + " from IPython.display import display\n", + " search_image = data[0]\n", + " display(search_image)\n", + " item = Document(search_image)" ] }, { @@ -282,28 +331,14 @@ "metadata": {}, "outputs": [], "source": [ - "select = db['docs'].like(item, vector_index=vector_index_name, n=5).select()\n", - "results = list(db.execute(select))" - ] - }, - { - "cell_type": "markdown", - "id": "9b6d9af9-a012-42bd-aad4-31b92d089caa", - "metadata": {}, - "source": [ - "## Visualize Results" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9e2ecea5-3a58-457c-ac50-ddc742484f2d", - "metadata": {}, - "outputs": [], - "source": [ - "from IPython.display import display\n", - "for result in results:\n", - " display(result[indexing_key])" + "if APPLY:\n", + " select = db['docs'].like(item, vector_index=vector_index_name, n=5).select()\n", + "\n", + " results = list(db.execute(select))\n", + "\n", + " from IPython.display import display\n", + " for result in results:\n", + " display(result[indexing_key])" ] }, { @@ -317,41 +352,60 @@ { "cell_type": "code", "execution_count": null, - "id": "ca5cde1f-8d51-40c6-8d82-c2a38f0d0158", + "id": "118bc2d4-5313-4584-8607-1eacfff09660", "metadata": {}, "outputs": [], "source": [ - "t = db.load('table', 'docs')" + "from superduper import Template, Table, Schema\n", + "from superduper.components.dataset import RemoteData\n", + "from superduper_pillow import pil_image\n", + "\n", + "\n", + "template = Template(\n", + " 'multimodal_image_search',\n", + " template=application,\n", + " default_table=Table(\n", + " 'sample_multimodal_image_search', \n", + " schema=Schema(\n", + " 'sample_multimodal_image_search/schema',\n", + " fields={'img': pil_image},\n", + " ),\n", + " data=RemoteData('sample_images', getter=getter),\n", + " ),\n", + " substitutions={'docs': 'table_name', 'cpu': 'device'},\n", + " types={\n", + " 'device': {\n", + " 'type': 'str',\n", + " 'default': 'cpu',\n", + " },\n", + " 'table_name': {\n", + " 'type': 'str',\n", + " 'default': 'sample_multimodal_image_search',\n", + " },\n", + " }\n", + ")\n", + "\n", + "template.export('.')" ] }, { "cell_type": "code", "execution_count": null, - "id": "d9a5f232-0ac6-4b72-a988-69099bfb4a3c", + "id": "9576b349-6297-4b9b-9a1f-f86f9e5a2a06", "metadata": {}, "outputs": [], "source": [ - "t.data = data\n", - "t.identifier = '_sample_multimodal_image_search'" + "template.template" ] }, { "cell_type": "code", "execution_count": null, - "id": "118bc2d4-5313-4584-8607-1eacfff09660", + "id": "51323cca-9e69-4452-9b54-2a307eb5b5b7", "metadata": {}, "outputs": [], "source": [ - "from superduper import Template\n", - "\n", - "template = Template(\n", - " 'image-vector-search',\n", - " template=application,\n", - " default_table=t,\n", - " substitutions={'docs': 'table', 'cpu': 'device'},\n", - ")\n", - "\n", - "template.export('.')" + "vector_index.indexing_listener.select" ] } ], diff --git a/templates/multimodal_image_search/component.json b/templates/multimodal_image_search/component.json index 8e746f4b1..0a79286b3 100644 --- a/templates/multimodal_image_search/component.json +++ b/templates/multimodal_image_search/component.json @@ -1,5 +1,5 @@ { - "_base": "?image-vector-search", + "_base": "?multimodal_image_search", "_builds": { "datatype:pil_image": { "_path": "superduper_pillow.encoder.image_type", @@ -8,7 +8,7 @@ "str": { "_path": "superduper.components.schema.FieldType" }, - "schema:AUTO-_fold=&img=pil_image": { + "schema:sample_multimodal_image_search/schema": { "_path": "superduper.components.schema.Schema", "upstream": null, "plugins": null, @@ -19,28 +19,36 @@ "_fold": "?str" } }, - "datatype:pickle": { + "datatype:dill": { "_path": "superduper.components.datatype.get_serializer", - "method": "pickle", + "method": "dill", "encodable": "artifact" }, - "d42588f7e71fe28a4a864ce0c7c2dafdd0dff09b": { + "8bd61247ed6689d62771ddc3bc3a012f0c6ca087": { "_path": "superduper.components.datatype.Artifact", - "datatype": "?datatype:pickle", + "datatype": "?datatype:dill", "uri": null, - "blob": "&:blob:d42588f7e71fe28a4a864ce0c7c2dafdd0dff09b" + "blob": "&:blob:8bd61247ed6689d62771ddc3bc3a012f0c6ca087" }, - "table:_sample_multimodal_image_search": { + "dataset:sample_images": { + "_path": "superduper.components.dataset.RemoteData", + "upstream": null, + "plugins": null, + "cache": true, + "status": null, + "getter": "?8bd61247ed6689d62771ddc3bc3a012f0c6ca087" + }, + "table:sample_multimodal_image_search": { "_path": "superduper.components.table.Table", "upstream": null, "plugins": null, "cache": true, - "status": "Status.ready", - "schema": "?schema:AUTO-_fold=&img=pil_image", + "status": null, + "schema": "?schema:sample_multimodal_image_search/schema", "primary_id": "id", - "data": "?d42588f7e71fe28a4a864ce0c7c2dafdd0dff09b" + "data": "?dataset:sample_images" }, - "image-vector-search": { + "multimodal_image_search": { "_path": "superduper.components.template.Template", "upstream": null, "plugins": null, @@ -85,11 +93,11 @@ "method": "dill", "encodable": "artifact" }, - "f79d2cedb218e815edcc2c38787ea44413e988e6": { + "0d075429858cd4d08c3bd9e2be789d9f88fe649f": { "_path": "superduper.components.datatype.Artifact", "datatype": "?datatype:dill", "uri": null, - "blob": "&:blob:f79d2cedb218e815edcc2c38787ea44413e988e6" + "blob": "&:blob:0d075429858cd4d08c3bd9e2be789d9f88fe649f" }, "model:clip_image": { "_path": "superduper_torch.model.TorchModel", @@ -102,7 +110,7 @@ "upstream": null, "plugins": null, "cache": true, - "status": "Status.ready", + "status": null, "signature": "singleton", "datatype": "?datatype:sqlvector[1024]", "output_schema": null, @@ -117,7 +125,7 @@ "object": "?load[0]/visual", "preprocess": "?load[1]", "preprocess_signature": "singleton", - "postprocess": "?f79d2cedb218e815edcc2c38787ea44413e988e6", + "postprocess": "?0d075429858cd4d08c3bd9e2be789d9f88fe649f", "postprocess_signature": "singleton", "forward_method": "__call__", "forward_signature": "singleton", @@ -129,10 +137,10 @@ "optimizer_state": null, "loader_kwargs": {} }, - "-select": { + "-select": { "_path": "superduper_mongodb.query.parse_query", "documents": [], - "query": ".select()" + "query": ".select()" }, "listener:indexing-listener": { "_path": "superduper.components.listener.Listener", @@ -140,24 +148,24 @@ "plugins": null, "cache": true, "status": null, - "cdc_table": "", + "cdc_table": "", "key": "img", "model": "?model:clip_image", "predict_kwargs": {}, - "select": "?-select", + "select": "?-select", "flatten": false }, - "bf18c4fa88c06100aff919e8ce27d51ec6301a13": { + "74abfc56aa344c2bb09ace700790c133a5b83948": { "_path": "superduper.components.datatype.Artifact", "datatype": "?datatype:dill", "uri": null, - "blob": "&:blob:bf18c4fa88c06100aff919e8ce27d51ec6301a13" + "blob": "&:blob:74abfc56aa344c2bb09ace700790c133a5b83948" }, - "aea6ff98a7ef32cea8f004f3d6c70dc168fe8a7c": { + "3516efb5fedb59553124bdcc463af15e0a1ecb69": { "_path": "superduper.components.datatype.Artifact", "datatype": "?datatype:dill", "uri": null, - "blob": "&:blob:aea6ff98a7ef32cea8f004f3d6c70dc168fe8a7c" + "blob": "&:blob:3516efb5fedb59553124bdcc463af15e0a1ecb69" }, "model:clip_text": { "_path": "superduper_torch.model.TorchModel", @@ -170,7 +178,7 @@ "upstream": null, "plugins": null, "cache": true, - "status": "Status.ready", + "status": null, "signature": "singleton", "datatype": "?datatype:sqlvector[1024]", "output_schema": null, @@ -183,9 +191,9 @@ "serve": false, "trainer": null, "object": "?load[0]", - "preprocess": "?bf18c4fa88c06100aff919e8ce27d51ec6301a13", + "preprocess": "?74abfc56aa344c2bb09ace700790c133a5b83948", "preprocess_signature": "singleton", - "postprocess": "?aea6ff98a7ef32cea8f004f3d6c70dc168fe8a7c", + "postprocess": "?3516efb5fedb59553124bdcc463af15e0a1ecb69", "postprocess_signature": "singleton", "forward_method": "encode_text", "forward_signature": "singleton", @@ -202,7 +210,7 @@ "upstream": null, "plugins": null, "cache": true, - "status": "Status.ready", + "status": null, "cdc_table": "", "key": "text", "model": "?model:clip_text", @@ -216,7 +224,7 @@ "plugins": null, "cache": true, "status": null, - "cdc_table": "outputs__indexing-listener__?(listener:indexing-listener.uuid)", + "cdc_table": "indexing-listener__?(listener:indexing-listener.uuid)", "indexing_listener": "?listener:indexing-listener", "compatible_listener": "?listener:compatible-listener", "measure": "cosine", @@ -227,16 +235,11 @@ "upstream": null, "plugins": null, "cache": true, - "status": "Status.ready", + "status": null, "components": [ "?vector_index:my-vector-index" ], - "namespace": [ - { - "type_id": "vector_index", - "identifier": "my-vector-index" - } - ], + "namespace": null, "link": null, "_literals": [ "template" @@ -246,14 +249,24 @@ }, "template_variables": [ "device", - "table" + "output_prefix", + "table_name" ], - "types": {}, + "types": { + "device": { + "type": "str", + "default": "cpu" + }, + "table_name": { + "type": "str", + "default": "sample_multimodal_image_search" + } + }, "blobs": null, "files": null, - "data": null, "requirements": null, - "default_table": "?table:_sample_multimodal_image_search", + "default_table": "?table:sample_multimodal_image_search", + "queries": null, "_literals": [ "template" ] diff --git a/templates/multimodal_image_search/data.pkl b/templates/multimodal_image_search/data.pkl deleted file mode 100644 index ec7639810..000000000 Binary files a/templates/multimodal_image_search/data.pkl and /dev/null differ diff --git a/templates/multimodal_image_search/requirements.txt b/templates/multimodal_image_search/requirements.txt index 56a5422e4..00df887f4 100644 --- a/templates/multimodal_image_search/requirements.txt +++ b/templates/multimodal_image_search/requirements.txt @@ -1,2 +1,3 @@ -pip install git+https://github.com/openai/CLIP.git --e ./plugins/torch \ No newline at end of file +git+https://github.com/openai/CLIP.git +-e ./plugins/torch +-e ./plugins/pillow \ No newline at end of file diff --git a/templates/multimodal_video_search/blobs/00abe9a310df94423b51fb2729ace466e6936260 b/templates/multimodal_video_search/blobs/00abe9a310df94423b51fb2729ace466e6936260 deleted file mode 100644 index 081e9ac54..000000000 Binary files a/templates/multimodal_video_search/blobs/00abe9a310df94423b51fb2729ace466e6936260 and /dev/null differ diff --git a/templates/multimodal_video_search/blobs/02607b0df50fdc0b78a27207a2ddbd2ef03b29ce b/templates/multimodal_video_search/blobs/02607b0df50fdc0b78a27207a2ddbd2ef03b29ce new file mode 100644 index 000000000..ac77840b5 Binary files /dev/null and b/templates/multimodal_video_search/blobs/02607b0df50fdc0b78a27207a2ddbd2ef03b29ce differ diff --git a/templates/multimodal_video_search/blobs/17b3617714b7e1b62952750cc68b9358e823e94d b/templates/multimodal_video_search/blobs/17b3617714b7e1b62952750cc68b9358e823e94d deleted file mode 100644 index a95869bdd..000000000 Binary files a/templates/multimodal_video_search/blobs/17b3617714b7e1b62952750cc68b9358e823e94d and /dev/null differ diff --git a/templates/multimodal_video_search/blobs/758203c39aedeeb5c44179d3b85dc858fc2e1285 b/templates/multimodal_video_search/blobs/439607949f74e0d723e28b7a5a02df219ffc40f3 similarity index 54% rename from templates/multimodal_video_search/blobs/758203c39aedeeb5c44179d3b85dc858fc2e1285 rename to templates/multimodal_video_search/blobs/439607949f74e0d723e28b7a5a02df219ffc40f3 index 9b2b1cc94..5b090665a 100644 Binary files a/templates/multimodal_video_search/blobs/758203c39aedeeb5c44179d3b85dc858fc2e1285 and b/templates/multimodal_video_search/blobs/439607949f74e0d723e28b7a5a02df219ffc40f3 differ diff --git a/templates/multimodal_video_search/blobs/4b17933c2863f672b4c2d6bdfb9f300b4c70d18e b/templates/multimodal_video_search/blobs/71cab8e3b21eab1499f896ec7cf63059eb7394f6 similarity index 54% rename from templates/multimodal_video_search/blobs/4b17933c2863f672b4c2d6bdfb9f300b4c70d18e rename to templates/multimodal_video_search/blobs/71cab8e3b21eab1499f896ec7cf63059eb7394f6 index afe9e0c67..0b84fdebd 100644 Binary files a/templates/multimodal_video_search/blobs/4b17933c2863f672b4c2d6bdfb9f300b4c70d18e and b/templates/multimodal_video_search/blobs/71cab8e3b21eab1499f896ec7cf63059eb7394f6 differ diff --git a/templates/multimodal_video_search/blobs/8d32a23cfa2654df2f6e7a693824b9f793adc735 b/templates/multimodal_video_search/blobs/8d32a23cfa2654df2f6e7a693824b9f793adc735 new file mode 100644 index 000000000..04c013187 Binary files /dev/null and b/templates/multimodal_video_search/blobs/8d32a23cfa2654df2f6e7a693824b9f793adc735 differ diff --git a/templates/multimodal_video_search/blobs/9300666af603a1da8a23f02814d5883ce9a15f04 b/templates/multimodal_video_search/blobs/9300666af603a1da8a23f02814d5883ce9a15f04 deleted file mode 100644 index e0d82d0a3..000000000 Binary files a/templates/multimodal_video_search/blobs/9300666af603a1da8a23f02814d5883ce9a15f04 and /dev/null differ diff --git a/templates/multimodal_video_search/blobs/987dbd3724ee3bde8706161a21dde8708ed04a7f b/templates/multimodal_video_search/blobs/987dbd3724ee3bde8706161a21dde8708ed04a7f deleted file mode 100644 index f81174978..000000000 Binary files a/templates/multimodal_video_search/blobs/987dbd3724ee3bde8706161a21dde8708ed04a7f and /dev/null differ diff --git a/templates/multimodal_video_search/blobs/c54dab6c3472eebdd2f8371bb97de9543532a885 b/templates/multimodal_video_search/blobs/c54dab6c3472eebdd2f8371bb97de9543532a885 deleted file mode 100644 index fd319db6d..000000000 Binary files a/templates/multimodal_video_search/blobs/c54dab6c3472eebdd2f8371bb97de9543532a885 and /dev/null differ diff --git a/templates/multimodal_video_search/blobs/4c4521346d9f13d2b68fbb6591d3846b8b90b7f7 b/templates/multimodal_video_search/blobs/e4e97659fbf4f75130d02572695d4b4300d2bce4 similarity index 59% rename from templates/multimodal_video_search/blobs/4c4521346d9f13d2b68fbb6591d3846b8b90b7f7 rename to templates/multimodal_video_search/blobs/e4e97659fbf4f75130d02572695d4b4300d2bce4 index f2b296542..9334ed0f8 100644 Binary files a/templates/multimodal_video_search/blobs/4c4521346d9f13d2b68fbb6591d3846b8b90b7f7 and b/templates/multimodal_video_search/blobs/e4e97659fbf4f75130d02572695d4b4300d2bce4 differ diff --git a/templates/multimodal_video_search/build.ipynb b/templates/multimodal_video_search/build.ipynb index ba0e4e839..029cf4974 100644 --- a/templates/multimodal_video_search/build.ipynb +++ b/templates/multimodal_video_search/build.ipynb @@ -12,10 +12,18 @@ "cell_type": "code", "execution_count": null, "id": "d985fe16-1b82-4f50-bfd6-380909e5ecc0", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [ + "parameters" + ] + }, "outputs": [], "source": [ - "APPLY = False\n", + "APPLY = True\n", "TABLE_NAME = 'docs'" ] }, @@ -49,6 +57,25 @@ "## Get useful sample data" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "7b360009-0426-4ec4-993e-40908c23b797", + "metadata": {}, + "outputs": [], + "source": [ + "def getter():\n", + " import os\n", + " import subprocess\n", + " subprocess.run(['rm', 'videos.zip'])\n", + " subprocess.run(['rm', '-rf', 'videos'])\n", + " subprocess.run(['curl', '-O', 'https://superduperdb-public-demo.s3.amazonaws.com/videos.zip'])\n", + " subprocess.run(['unzip', 'videos.zip'])\n", + " subprocess.run(['rm', 'videos.zip'])\n", + " data = [{'x': f'videos/{x}'} for x in os.listdir('./videos')]\n", + " return data[:2]" + ] + }, { "cell_type": "code", "execution_count": null, @@ -56,15 +83,8 @@ "metadata": {}, "outputs": [], "source": [ - "import os\n", - "from superduper.ext.pillow import pil_image\n", - "\n", - "data = [f'videos/{x}' for x in os.listdir('./videos')]\n", - "sample_datapoint = data[-1]\n", - "\n", - "chunked_model_datatype = pil_image\n", - "\n", - "datas = [{'x': d} for d in data[:2]]" + "if APPLY:\n", + " data = getter()" ] }, { @@ -86,21 +106,6 @@ "It also supports custom data conversion methods for transforming data, such as defining the following Datatype." ] }, - { - "cell_type": "code", - "execution_count": null, - "id": "e844c762-3391-401d-9047-ed8617a9c946", - "metadata": {}, - "outputs": [], - "source": [ - "from superduper import DataType\n", - "\n", - "datatype = DataType(\n", - " identifier='video_on_file',\n", - " encodable='file',\n", - ")" - ] - }, { "cell_type": "markdown", "id": "9026acd8", @@ -119,11 +124,13 @@ "source": [ "from superduper.components.table import Table\n", "from superduper import Schema\n", + "from superduper.components.datatype import file_lazy\n", "\n", - "schema = Schema(identifier=\"schema\", fields={\"x\": datatype})\n", + "schema = Schema(identifier=\"schema\", fields={\"x\": file_lazy})\n", "table = Table(TABLE_NAME, schema=schema)\n", "\n", - "db.apply(table, force=True)" + "if APPLY:\n", + " db.apply(table, force=True)" ] }, { @@ -176,7 +183,7 @@ "@model\n", "def chunker(video_file):\n", " # Set the sampling frequency for frames\n", - " sample_freq = 10\n", + " sample_freq = 100\n", " \n", " # Open the video file using OpenCV\n", " cap = cv2.VideoCapture(video_file)\n", @@ -236,7 +243,8 @@ " key='x',\n", " identifier='chunker',\n", " flatten=True,\n", - " upstream=[table]\n", + " upstream=[table],\n", + " predict_kwargs={'max_chunk_size': 1},\n", ")" ] }, @@ -299,7 +307,6 @@ "\n", "vit = imported(clip.load)(\"ViT-B/32\", device='cpu')\n", "\n", - "# Create a TorchModel for text encoding\n", "compatible_model = TorchModel(\n", " identifier='clip_text',\n", " object=vit[0],\n", @@ -309,7 +316,6 @@ " forward_method='encode_text',\n", ")\n", "\n", - "# Create a TorchModel for visual encoding\n", "model = TorchModel(\n", " identifier='clip_image', \n", " object=vit[0].visual,\n", @@ -388,8 +394,7 @@ " upstream_listener,\n", " vector_index,\n", " ]\n", - ")\n", - "\n" + ")" ] }, { @@ -461,7 +466,7 @@ "if APPLY:\n", " from IPython.display import display\n", " select = db[upstream_listener.outputs].like(item, vector_index='my-vector-index', n=5).select()\n", - " \n", + "\n", " for result in select.execute():\n", " display(Document(result.unpack())[upstream_listener.outputs + '.image'])" ] @@ -473,9 +478,31 @@ "metadata": {}, "outputs": [], "source": [ - "from superduper import Template\n", + "from superduper import Template, Table, Schema\n", + "from superduper.components.dataset import RemoteData\n", "\n", - "t = Template('video-search-template', template=app, substitutions={'docs': 'content_table'})" + "t = Template(\n", + " 'multimodal_video_search', \n", + " template=app,\n", + " substitutions={'docs': 'table_name'},\n", + " default_table=Table(\n", + " 'sample_multimodal_video_search',\n", + " schema=Schema(\n", + " 'sample_multimodal_video_search/schema',\n", + " fields={'x': file_lazy},\n", + " ),\n", + " data=RemoteData(\n", + " 'sample_videos',\n", + " getter=getter,\n", + " )\n", + " ),\n", + " types={\n", + " 'table_name': {\n", + " 'type': 'str',\n", + " 'default': 'sample_multimodal_video_search',\n", + " }\n", + " }\n", + ")" ] }, { diff --git a/templates/multimodal_video_search/component.json b/templates/multimodal_video_search/component.json index 30c92f966..0a2bc644f 100644 --- a/templates/multimodal_video_search/component.json +++ b/templates/multimodal_video_search/component.json @@ -1,7 +1,55 @@ { - "_base": "?video-search-template", + "_base": "?multimodal_video_search", "_builds": { - "video-search-template": { + "datatype:file_lazy": { + "_path": "superduper.components.datatype.get_serializer", + "method": "file", + "encodable": "lazy_file" + }, + "str": { + "_path": "superduper.components.schema.FieldType" + }, + "schema:sample_multimodal_video_search/schema": { + "_path": "superduper.components.schema.Schema", + "upstream": null, + "plugins": null, + "cache": true, + "status": null, + "fields": { + "x": "?datatype:file_lazy", + "_fold": "?str" + } + }, + "datatype:dill": { + "_path": "superduper.components.datatype.get_serializer", + "method": "dill", + "encodable": "artifact" + }, + "02607b0df50fdc0b78a27207a2ddbd2ef03b29ce": { + "_path": "superduper.components.datatype.Artifact", + "datatype": "?datatype:dill", + "uri": null, + "blob": "&:blob:02607b0df50fdc0b78a27207a2ddbd2ef03b29ce" + }, + "dataset:sample_videos": { + "_path": "superduper.components.dataset.RemoteData", + "upstream": null, + "plugins": null, + "cache": true, + "status": null, + "getter": "?02607b0df50fdc0b78a27207a2ddbd2ef03b29ce" + }, + "table:sample_multimodal_video_search": { + "_path": "superduper.components.table.Table", + "upstream": null, + "plugins": null, + "cache": true, + "status": null, + "schema": "?schema:sample_multimodal_video_search/schema", + "primary_id": "id", + "data": "?dataset:sample_videos" + }, + "multimodal_video_search": { "_path": "superduper.components.template.Template", "upstream": null, "plugins": null, @@ -10,21 +58,10 @@ "template": { "_base": "?video-search", "_builds": { - "datatype:video_on_file": { - "_path": "superduper.components.datatype.DataType", - "upstream": null, - "plugins": null, - "cache": true, - "status": "Status.ready", - "encoder": null, - "decoder": null, - "info": null, - "shape": null, - "directory": null, - "encodable": "file", - "bytes_encoding": "bytes", - "intermediate_type": "bytes", - "media_type": null + "datatype:file_lazy": { + "_path": "superduper.components.datatype.get_serializer", + "method": "file", + "encodable": "lazy_file" }, "str": { "_path": "superduper.components.schema.FieldType" @@ -34,18 +71,18 @@ "upstream": null, "plugins": null, "cache": true, - "status": "Status.ready", + "status": null, "fields": { - "x": "?datatype:video_on_file", + "x": "?datatype:file_lazy", "_fold": "?str" } }, - "table:": { + "table:": { "_path": "superduper.components.table.Table", "upstream": null, "plugins": null, "cache": true, - "status": "Status.ready", + "status": null, "schema": "?schema:schema", "primary_id": "id", "data": null @@ -55,11 +92,11 @@ "method": "dill", "encodable": "lazy_artifact" }, - "987dbd3724ee3bde8706161a21dde8708ed04a7f": { + "e4e97659fbf4f75130d02572695d4b4300d2bce4": { "_path": "superduper.components.datatype.LazyArtifact", "datatype": "?datatype:dill_lazy", "uri": null, - "blob": "&:blob:987dbd3724ee3bde8706161a21dde8708ed04a7f" + "blob": "&:blob:e4e97659fbf4f75130d02572695d4b4300d2bce4" }, "model:chunker": { "_path": "superduper.components.model.ObjectModel", @@ -78,27 +115,29 @@ "num_workers": 0, "serve": false, "trainer": null, - "object": "?987dbd3724ee3bde8706161a21dde8708ed04a7f", + "object": "?e4e97659fbf4f75130d02572695d4b4300d2bce4", "method": null }, - "-select": { + "-select": { "_path": "superduper_mongodb.query.parse_query", "documents": [], - "query": ".select()" + "query": ".select()" }, "listener:chunker": { "_path": "superduper.components.listener.Listener", "upstream": [ - "?table:" + "?table:" ], "plugins": null, "cache": true, "status": null, - "cdc_table": "", + "cdc_table": "", "key": "x", "model": "?model:chunker", - "predict_kwargs": {}, - "select": "?-select", + "predict_kwargs": { + "max_chunk_size": 1 + }, + "select": "?-select", "flatten": true }, "datatype:sqlvector[1024]": { @@ -137,11 +176,11 @@ "method": "dill", "encodable": "artifact" }, - "4b17933c2863f672b4c2d6bdfb9f300b4c70d18e": { + "71cab8e3b21eab1499f896ec7cf63059eb7394f6": { "_path": "superduper.components.datatype.Artifact", "datatype": "?datatype:dill", "uri": null, - "blob": "&:blob:4b17933c2863f672b4c2d6bdfb9f300b4c70d18e" + "blob": "&:blob:71cab8e3b21eab1499f896ec7cf63059eb7394f6" }, "model:clip_image": { "_path": "superduper_torch.model.TorchModel", @@ -169,7 +208,7 @@ "object": "?load[0]/visual", "preprocess": "?load[1]", "preprocess_signature": "singleton", - "postprocess": "?4b17933c2863f672b4c2d6bdfb9f300b4c70d18e", + "postprocess": "?71cab8e3b21eab1499f896ec7cf63059eb7394f6", "postprocess_signature": "singleton", "forward_method": "__call__", "forward_signature": "singleton", @@ -184,7 +223,7 @@ "outputs-chunker-?(listener:chunker.uuid)-select": { "_path": "superduper_mongodb.query.parse_query", "documents": [], - "query": "outputs__chunker__?(listener:chunker.uuid).select()" + "query": "chunker__?(listener:chunker.uuid).select()" }, "listener:clip_image-listener": { "_path": "superduper.components.listener.Listener", @@ -194,24 +233,24 @@ "plugins": null, "cache": true, "status": null, - "cdc_table": "outputs__chunker__?(listener:chunker.uuid)", - "key": "outputs__chunker__?(listener:chunker.uuid).image", + "cdc_table": "chunker__?(listener:chunker.uuid)", + "key": "chunker__?(listener:chunker.uuid).image", "model": "?model:clip_image", "predict_kwargs": {}, "select": "?outputs-chunker-?(listener:chunker.uuid)-select", "flatten": false }, - "c54dab6c3472eebdd2f8371bb97de9543532a885": { + "8d32a23cfa2654df2f6e7a693824b9f793adc735": { "_path": "superduper.components.datatype.Artifact", "datatype": "?datatype:dill", "uri": null, - "blob": "&:blob:c54dab6c3472eebdd2f8371bb97de9543532a885" + "blob": "&:blob:8d32a23cfa2654df2f6e7a693824b9f793adc735" }, - "9300666af603a1da8a23f02814d5883ce9a15f04": { + "439607949f74e0d723e28b7a5a02df219ffc40f3": { "_path": "superduper.components.datatype.Artifact", "datatype": "?datatype:dill", "uri": null, - "blob": "&:blob:9300666af603a1da8a23f02814d5883ce9a15f04" + "blob": "&:blob:439607949f74e0d723e28b7a5a02df219ffc40f3" }, "model:clip_text": { "_path": "superduper_torch.model.TorchModel", @@ -237,9 +276,9 @@ "serve": false, "trainer": null, "object": "?load[0]", - "preprocess": "?c54dab6c3472eebdd2f8371bb97de9543532a885", + "preprocess": "?8d32a23cfa2654df2f6e7a693824b9f793adc735", "preprocess_signature": "singleton", - "postprocess": "?9300666af603a1da8a23f02814d5883ce9a15f04", + "postprocess": "?439607949f74e0d723e28b7a5a02df219ffc40f3", "postprocess_signature": "singleton", "forward_method": "encode_text", "forward_signature": "singleton", @@ -272,7 +311,7 @@ "plugins": null, "cache": true, "status": null, - "cdc_table": "outputs__clip_image-listener__?(listener:clip_image-listener.uuid)", + "cdc_table": "clip_image-listener__?(listener:clip_image-listener.uuid)", "indexing_listener": "?listener:clip_image-listener", "compatible_listener": "?listener:compatible-listener", "measure": "cosine", @@ -297,19 +336,24 @@ } }, "template_variables": [ - "content_table" + "output_prefix", + "table_name" ], - "types": {}, + "types": { + "table_name": { + "type": "str", + "default": "sample_multimodal_video_search" + } + }, "blobs": null, "files": null, - "data": null, "requirements": null, - "default_table": null, + "default_table": "?table:sample_multimodal_video_search", + "queries": null, "_literals": [ "template" ] } }, - "_blobs": {}, "_files": {} } \ No newline at end of file diff --git a/templates/multimodal_video_search/requirements.txt b/templates/multimodal_video_search/requirements.txt index 83a15b008..07e57918f 100644 --- a/templates/multimodal_video_search/requirements.txt +++ b/templates/multimodal_video_search/requirements.txt @@ -1,4 +1,4 @@ -pillow>=10.2.0 git+https://github.com/openai/CLIP.git -torch>=2.0.0 +-e ./plugins/pillow +-e ./plugins/torch opencv-python \ No newline at end of file diff --git a/templates/multimodal_video_search/videos/1.mp4 b/templates/multimodal_video_search/videos/1.mp4 deleted file mode 100644 index 478954931..000000000 Binary files a/templates/multimodal_video_search/videos/1.mp4 and /dev/null differ diff --git a/templates/multimodal_video_search/videos/2.mp4 b/templates/multimodal_video_search/videos/2.mp4 deleted file mode 100644 index d346d4693..000000000 Binary files a/templates/multimodal_video_search/videos/2.mp4 and /dev/null differ diff --git a/templates/pdf_rag/blobs/1db2546427804ee7161c5c5eedeb8521e6831413 b/templates/pdf_rag/blobs/1db2546427804ee7161c5c5eedeb8521e6831413 new file mode 100644 index 000000000..a1c93c97c Binary files /dev/null and b/templates/pdf_rag/blobs/1db2546427804ee7161c5c5eedeb8521e6831413 differ diff --git a/templates/pdf_rag/blobs/35b17d0b4e3e2d04f9eed13f8ed2ab25bdee48f9 b/templates/pdf_rag/blobs/35b17d0b4e3e2d04f9eed13f8ed2ab25bdee48f9 deleted file mode 100644 index 2c03a96c4..000000000 Binary files a/templates/pdf_rag/blobs/35b17d0b4e3e2d04f9eed13f8ed2ab25bdee48f9 and /dev/null differ diff --git a/templates/pdf_rag/blobs/3d13bcd47e6a8a3f467070290a1b7300a10394ce b/templates/pdf_rag/blobs/3d13bcd47e6a8a3f467070290a1b7300a10394ce new file mode 100644 index 000000000..e79247ab5 Binary files /dev/null and b/templates/pdf_rag/blobs/3d13bcd47e6a8a3f467070290a1b7300a10394ce differ diff --git a/templates/pdf_rag/blobs/44db6ffe33f83e1174ff6ce4541538e136fcfdf0 b/templates/pdf_rag/blobs/44db6ffe33f83e1174ff6ce4541538e136fcfdf0 new file mode 100644 index 000000000..5a2eebb53 Binary files /dev/null and b/templates/pdf_rag/blobs/44db6ffe33f83e1174ff6ce4541538e136fcfdf0 differ diff --git a/templates/pdf_rag/blobs/546e1d0fcf7d48581ed26bd3dff69c4172d3a155 b/templates/pdf_rag/blobs/546e1d0fcf7d48581ed26bd3dff69c4172d3a155 deleted file mode 100644 index 652ca5d0a..000000000 Binary files a/templates/pdf_rag/blobs/546e1d0fcf7d48581ed26bd3dff69c4172d3a155 and /dev/null differ diff --git a/templates/pdf_rag/blobs/64d43173d7759053e2e6cb20f6ec85de85a451b4 b/templates/pdf_rag/blobs/64d43173d7759053e2e6cb20f6ec85de85a451b4 deleted file mode 100644 index 55338a045..000000000 Binary files a/templates/pdf_rag/blobs/64d43173d7759053e2e6cb20f6ec85de85a451b4 and /dev/null differ diff --git a/templates/pdf_rag/blobs/d3583f01e9b6265ee55da8cbc49f771b7df88a1a b/templates/pdf_rag/blobs/d3583f01e9b6265ee55da8cbc49f771b7df88a1a new file mode 100644 index 000000000..dfc75674c Binary files /dev/null and b/templates/pdf_rag/blobs/d3583f01e9b6265ee55da8cbc49f771b7df88a1a differ diff --git a/templates/pdf_rag/blobs/f4469712866fa1bac3e026fe3c3c43c09e118167 b/templates/pdf_rag/blobs/f4469712866fa1bac3e026fe3c3c43c09e118167 deleted file mode 100644 index 24f37080d..000000000 Binary files a/templates/pdf_rag/blobs/f4469712866fa1bac3e026fe3c3c43c09e118167 and /dev/null differ diff --git a/templates/rag/blobs/39b0e7958c57819a723a5c0790229871c9b8749b b/templates/pdf_rag/blobs/f9cdb1b37f64778b6d3e49c812bf0ca382161ac0 similarity index 77% rename from templates/rag/blobs/39b0e7958c57819a723a5c0790229871c9b8749b rename to templates/pdf_rag/blobs/f9cdb1b37f64778b6d3e49c812bf0ca382161ac0 index 5d3ffc94a..af78fb4bc 100644 Binary files a/templates/rag/blobs/39b0e7958c57819a723a5c0790229871c9b8749b and b/templates/pdf_rag/blobs/f9cdb1b37f64778b6d3e49c812bf0ca382161ac0 differ diff --git a/templates/pdf_rag/build.ipynb b/templates/pdf_rag/build.ipynb index c14d03e90..af3d7b0e8 100644 --- a/templates/pdf_rag/build.ipynb +++ b/templates/pdf_rag/build.ipynb @@ -12,18 +12,26 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "d77615ed-ca3f-4e91-b953-c4fead5ac436", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [ + "parameters" + ] + }, "outputs": [], "source": [ "APPLY = False\n", - "COLLECTION_NAME = '' if not APPLY else '_pdf_rag'" + "COLLECTION_NAME = '' if not APPLY else 'sample_pdf_rag'" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "95e55ddd-45db-493f-8cc0-26ba2959160e", "metadata": {}, "outputs": [], @@ -35,39 +43,42 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "b52e7cb0-a612-4c9d-85ec-9e95dd8ce8fa", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[32m2024-Oct-24 22:10:02.60\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mzhouhaha-2.local\u001b[0m| \u001b[36msuperduper.misc.plugins\u001b[0m:\u001b[36m13 \u001b[0m | \u001b[1mLoading plugin: mongodb\u001b[0m\n", - "\u001b[32m2024-Oct-24 22:10:02.69\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mzhouhaha-2.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m73 \u001b[0m | \u001b[1mBuilding Data Layer\u001b[0m\n", - "\u001b[32m2024-Oct-24 22:10:02.69\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mzhouhaha-2.local\u001b[0m| \u001b[36msuperduper.base.build\u001b[0m:\u001b[36m184 \u001b[0m | \u001b[1mConfiguration: \n", - " +---------------+--------------+\n", - "| Configuration | Value |\n", - "+---------------+--------------+\n", - "| Data Backend | mongomock:// |\n", - "+---------------+--------------+\u001b[0m\n", - "\u001b[32m2024-Oct-24 22:10:02.69\u001b[0m| \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mzhouhaha-2.local\u001b[0m| \u001b[36msuperduper.backends.local.artifacts\u001b[0m:\u001b[36m71 \u001b[0m | \u001b[33m\u001b[1mFailed to drop artifact store\u001b[0m\n" - ] - } - ], - "source": [ - "db = superduper(\"mongomock://\")\n", - "db.drop(True, True)" + "outputs": [], + "source": [ + "db = superduper(\"mongomock://\")" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, + "id": "76fdda75-70f6-4907-becd-6bcf916fac9f", + "metadata": {}, + "outputs": [], + "source": [ + "def getter():\n", + " import subprocess\n", + " subprocess.run(['curl', '-O', 'https://superduperdb-public-demo.s3.amazonaws.com/pdfs.zip'])\n", + " subprocess.run(['unzip', '-o', 'pdfs.zip'])\n", + " subprocess.run(['rm', 'pdfs.zip'])\n", + " pdf_folder = \"pdfs\"\n", + " pdf_names = [pdf for pdf in os.listdir(pdf_folder) if pdf.endswith(\".pdf\")]\n", + " pdf_paths = [os.path.join(pdf_folder, pdf) for pdf in pdf_names]\n", + " data = [{\"url\": pdf_path, \"file\": pdf_path} for pdf_path in pdf_paths]\n", + " return data" + ] + }, + { + "cell_type": "code", + "execution_count": null, "id": "e7f452d7-017d-4fea-a87d-2ccdb6276b79", "metadata": {}, "outputs": [], "source": [ - "# !curl -O https://superduperdb-public-demo.s3.amazonaws.com/pdfs.zip && unzip -o pdfs.zip" + "if APPLY:\n", + " data = getter()" ] }, { @@ -80,7 +91,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "c0eb6c25-f091-4099-b84c-5bafe55f0eb3", "metadata": {}, "outputs": [], @@ -89,19 +100,11 @@ "from superduper import Schema, Table\n", "from superduper.components.datatype import file_lazy\n", "\n", - "schema = Schema(identifier=\"myschema\", fields={\"url\": \"str\", \"file\": file_lazy})\n", - "table = Table(identifier=\"pdfs\", schema=schema)\n", - "\n", - "\n", + "schema = Schema(identifier=\"myschema\", fields={'url': 'str', 'file': file_lazy})\n", + "table = Table(identifier=COLLECTION_NAME, schema=schema)\n", "\n", "if APPLY:\n", " db.apply(table, force=True)\n", - " pdf_folder = \"pdfs\"\n", - " pdf_names = [pdf for pdf in os.listdir(pdf_folder) if pdf.endswith(\".pdf\")]\n", - " pdf_paths = [os.path.join(pdf_folder, pdf) for pdf in pdf_names]\n", - " \n", - " data = [{\"url\": pdf_path, \"file\": pdf_path} for pdf_path in pdf_paths]\n", - " \n", " db[COLLECTION_NAME].insert(data).execute()" ] }, @@ -115,24 +118,18 @@ }, { "cell_type": "code", - "execution_count": 6, - "id": "06c78875-14dd-473f-8ec7-0a56b94bd916", - "metadata": {}, - "outputs": [], - "source": [ - "# !pip install pdf2image 'unstructured[pdf]'" - ] - }, - { - "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "83e64072-920c-4e0d-bfa2-424fd0c5c1b1", "metadata": {}, "outputs": [], "source": [ + "from superduper import ObjectModel, logging\n", + "from pdf2image import convert_from_path\n", + "import os\n", + "\n", + "\n", "def split_image(pdf_path):\n", " logging.info(f\"Splitting images from {pdf_path}\")\n", - " from pdf2image import convert_from_path\n", "\n", " image_folders = \"data/pdf-images\"\n", " pdf_name = os.path.basename(pdf_path)\n", @@ -150,7 +147,6 @@ " data.append(path)\n", " return data\n", "\n", - "from superduper import ObjectModel\n", "\n", "model_split_image = ObjectModel(\n", " identifier=\"split_image\",\n", @@ -178,7 +174,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "75857086-8c8f-4109-a427-2c2f510cfa17", "metadata": {}, "outputs": [], @@ -289,17 +285,18 @@ " ],\n", " [],\n", " )\n", - " return all_chunks_and_links\n" + " return all_chunks_and_links" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "8b6e62e1-f94f-4363-b534-8b6f52bf509e", "metadata": {}, "outputs": [], "source": [ "from superduper.components.schema import FieldType\n", + "\n", "model_chunk = ObjectModel(\n", " identifier=\"chunk\",\n", " object=get_chunks,\n", @@ -334,18 +331,10 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "39c90813-08f2-4629-b6fb-e8340e55a041", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[2024-10-24 22:10:04] httpx INFO HTTP Request: GET https://api.openai.com/v1/models \"HTTP/1.1 200 OK\"\n" - ] - } - ], + "outputs": [], "source": [ "import os\n", "from superduper.components.vector_index import sqlvector\n", @@ -365,21 +354,10 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "b2cc3a47-6bf9-4534-a6ef-f1c9e6aa4840", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/zhouhaha/workspace/SuperDuperDB/superduper/env/lib/python3.11/site-packages/sentence_transformers/cross_encoder/CrossEncoder.py:13: TqdmExperimentalWarning: Using `tqdm.autonotebook.tqdm` in notebook mode. Use `tqdm.tqdm` instead to force console mode (e.g. in jupyter console)\n", - " from tqdm.autonotebook import tqdm, trange\n", - "[2024-10-24 22:10:07] datasets INFO PyTorch version 2.4.0 available.\n", - "[2024-10-24 22:10:07] sentence_transformers.SentenceTransformer INFO Load pretrained SentenceTransformer: BAAI/bge-small-en\n" - ] - } - ], + "outputs": [], "source": [ "import sentence_transformers\n", "from superduper_sentence_transformers import SentenceTransformer\n", @@ -395,7 +373,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "89b9f956-6e6e-42bf-b9a1-86d685e759f8", "metadata": {}, "outputs": [], @@ -413,7 +391,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "id": "918d0092-b01f-4881-9870-70ca49bef61c", "metadata": {}, "outputs": [], @@ -449,15 +427,15 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "id": "6c21a46e-3110-4ca9-b250-f4f87c8b144c", "metadata": {}, "outputs": [], "source": [ "from superduper import Plugin\n", - "from utils import Processer\n", - "# processor = Processer(identifier=\"processor\", db=db, plugins=[Plugin(path=\"./utils.py\")])\n", - "processor = Processer(\n", + "from utils import Processor\n", + "\n", + "processor = Processor(\n", " identifier=\"processor\",\n", " db=db,\n", " chunk_key=listener_chunk.outputs,\n", @@ -478,7 +456,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "id": "95d45bb3-c400-478f-9c03-1ef9f9364a5c", "metadata": {}, "outputs": [], @@ -492,7 +470,6 @@ " prompt_template: str\n", " processor: None | Model = None\n", "\n", - "\n", " def __post_init__(self, *args, **kwargs):\n", " assert \"{context}\" in self.prompt_template, 'The prompt_template must include \"{context}\"'\n", " assert \"{query}\" in self.prompt_template, 'The prompt_template must include \"{query}\"'\n", @@ -537,7 +514,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "id": "114f89ce-7d3e-42be-831a-85c77b9379de", "metadata": {}, "outputs": [], @@ -549,7 +526,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "id": "2ec90c63-a64a-42cd-ba14-8fa5de06b7ca", "metadata": {}, "outputs": [], @@ -566,18 +543,10 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "id": "04230ea7-0432-483e-831d-21681c4d443f", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[32m2024-Oct-24 22:10:13.45\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mzhouhaha-2.local\u001b[0m| \u001b[36msuperduper_vllm.model\u001b[0m:\u001b[36m31 \u001b[0m | \u001b[1mSetting num_gpus to 1\u001b[0m\n" - ] - } - ], + "outputs": [], "source": [ "from superduper_vllm import VllmCompletion\n", "\n", @@ -600,7 +569,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "id": "7be8576d-2363-46a6-b326-b1e5f6cf0e20", "metadata": {}, "outputs": [], @@ -618,7 +587,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "id": "6697652b-550b-4e48-b456-8c1b28554139", "metadata": {}, "outputs": [], @@ -634,17 +603,18 @@ " \"answer:\"\n", ")\n", "\n", - "rag = Rag(identifier=\"rag\", llm_model=llm, vector_index_name=vector_index.identifier, prompt_template=prompt_template, db=db, processor=processor)\n" + "rag = Rag(identifier=\"rag\", llm_model=llm, vector_index_name=vector_index.identifier, prompt_template=prompt_template, db=db, processor=processor)" ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "id": "ecb81f74-1036-4a1f-87ec-023ce8dd2a0f", "metadata": {}, "outputs": [], "source": [ "from IPython.display import Image, Markdown, display\n", + "\n", "if APPLY:\n", " db.apply(rag, force=True)\n", " result = rag.predict(\"How to perform Query Optimization?\", format_result=True)\n", @@ -666,8 +636,8 @@ }, { "cell_type": "code", - "execution_count": 22, - "id": "03959e5c-f34d-4ad9-971f-5640fd7aed69", + "execution_count": null, + "id": "e81c270f-8be9-4050-a7df-07b62c17330c", "metadata": {}, "outputs": [], "source": [ @@ -687,39 +657,33 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "id": "81346b3c-9c2d-4f40-a78d-b830ee74597d", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[32m2024-Oct-24 22:10:13.64\u001b[0m| \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mzhouhaha-2.local\u001b[0m| \u001b[36msuperduper.base.document\u001b[0m:\u001b[36m473 \u001b[0m | \u001b[33m\u001b[1mLeaf str already exists\u001b[0m\n", - "\u001b[32m2024-Oct-24 22:10:13.64\u001b[0m| \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mzhouhaha-2.local\u001b[0m| \u001b[36msuperduper.base.document\u001b[0m:\u001b[36m473 \u001b[0m | \u001b[33m\u001b[1mLeaf datatype:file_lazy already exists\u001b[0m\n", - "\u001b[32m2024-Oct-24 22:10:13.65\u001b[0m| \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mzhouhaha-2.local\u001b[0m| \u001b[36msuperduper.base.document\u001b[0m:\u001b[36m473 \u001b[0m | \u001b[33m\u001b[1mLeaf datatype:dill_lazy already exists\u001b[0m\n", - "\u001b[32m2024-Oct-24 22:10:13.66\u001b[0m| \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mzhouhaha-2.local\u001b[0m| \u001b[36msuperduper.base.document\u001b[0m:\u001b[36m473 \u001b[0m | \u001b[33m\u001b[1mLeaf datatype:dill already exists\u001b[0m\n", - "\u001b[32m2024-Oct-24 22:10:13.66\u001b[0m| \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mzhouhaha-2.local\u001b[0m| \u001b[36msuperduper.base.document\u001b[0m:\u001b[36m473 \u001b[0m | \u001b[33m\u001b[1mLeaf datatype:file_lazy already exists\u001b[0m\n", - "\u001b[32m2024-Oct-24 22:10:13.67\u001b[0m| \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mzhouhaha-2.local\u001b[0m| \u001b[36msuperduper.base.document\u001b[0m:\u001b[36m473 \u001b[0m | \u001b[33m\u001b[1mLeaf str already exists\u001b[0m\n", - "\u001b[32m2024-Oct-24 22:10:13.67\u001b[0m| \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mzhouhaha-2.local\u001b[0m| \u001b[36msuperduper.base.document\u001b[0m:\u001b[36m473 \u001b[0m | \u001b[33m\u001b[1mLeaf datatype:file_lazy already exists\u001b[0m\n", - "\u001b[32m2024-Oct-24 22:10:13.68\u001b[0m| \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mzhouhaha-2.local\u001b[0m| \u001b[36msuperduper.base.document\u001b[0m:\u001b[36m473 \u001b[0m | \u001b[33m\u001b[1mLeaf datatype:dill_lazy already exists\u001b[0m\n", - "\u001b[32m2024-Oct-24 22:10:13.69\u001b[0m| \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mzhouhaha-2.local\u001b[0m| \u001b[36msuperduper.base.document\u001b[0m:\u001b[36m473 \u001b[0m | \u001b[33m\u001b[1mLeaf datatype:dill already exists\u001b[0m\n", - "\u001b[32m2024-Oct-24 22:10:13.69\u001b[0m| \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mzhouhaha-2.local\u001b[0m| \u001b[36msuperduper.base.document\u001b[0m:\u001b[36m473 \u001b[0m | \u001b[33m\u001b[1mLeaf datatype:file_lazy already exists\u001b[0m\n" - ] - } - ], - "source": [ - "from superduper import Template, CFG\n", - "\n", - "template = Template('pdf-rag', template=app, substitutions={prompt_template: 'prompt_template'})\n", - "\n", - "from superduper import Template\n", + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "from superduper import Template, CFG, Table\n", + "from superduper.components.dataset import RemoteData\n", "\n", "template = Template(\n", " 'pdf-rag',\n", " template=app,\n", " substitutions={prompt_template: 'prompt_template', COLLECTION_NAME: 'table_name'},\n", " template_variables=['table_name', 'prompt_template', 'llm_model', 'embedding_model'],\n", + " default_table=Table(\n", + " 'sample_pdf_rag',\n", + " schema=Schema(\n", + " 'sample_pdf_rag/schema',\n", + " fields={\"url\": \"str\", \"file\": file_lazy}\n", + " ),\n", + " data=RemoteData('sample_pdfs', getter=getter),\n", + " ),\n", " types={\n", " 'prompt_template':{\n", " 'type': 'str',\n", @@ -727,7 +691,7 @@ " },\n", " 'table_name': {\n", " 'type': 'str',\n", - " 'default': '_pdfs'\n", + " 'default': 'sample_pdf_rag'\n", " },\n", " 'llm_model': {\n", " 'type': 'str',\n", @@ -745,42 +709,13 @@ }, { "cell_type": "code", - "execution_count": 24, - "id": "0ecfca6d-880a-4081-be95-1f282b1d2c9b", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['table_name', 'prompt_template', 'llm_model', 'embedding_model']" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "template.template_variables" - ] - }, - { - "cell_type": "code", - "execution_count": 25, + "execution_count": null, "id": "e82d71e0-ab21-48a2-849a-57e494ae3a2a", "metadata": {}, "outputs": [], "source": [ "template.export(\".\")" ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9529b970-b986-484d-b05f-dfcd135dcea5", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { @@ -799,7 +734,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.5" + "version": "3.10.13" } }, "nbformat": 4, diff --git a/templates/pdf_rag/component.json b/templates/pdf_rag/component.json index 620896474..98c50b390 100644 --- a/templates/pdf_rag/component.json +++ b/templates/pdf_rag/component.json @@ -1,6 +1,55 @@ { "_base": "?pdf-rag", "_builds": { + "str": { + "_path": "superduper.components.schema.FieldType" + }, + "datatype:file_lazy": { + "_path": "superduper.components.datatype.get_serializer", + "method": "file", + "encodable": "lazy_file" + }, + "schema:sample_pdf_rag/schema": { + "_path": "superduper.components.schema.Schema", + "upstream": null, + "plugins": null, + "cache": true, + "status": null, + "fields": { + "url": "?str", + "file": "?datatype:file_lazy", + "_fold": "?str" + } + }, + "datatype:dill": { + "_path": "superduper.components.datatype.get_serializer", + "method": "dill", + "encodable": "artifact" + }, + "1db2546427804ee7161c5c5eedeb8521e6831413": { + "_path": "superduper.components.datatype.Artifact", + "datatype": "?datatype:dill", + "uri": null, + "blob": "&:blob:1db2546427804ee7161c5c5eedeb8521e6831413" + }, + "dataset:sample_pdfs": { + "_path": "superduper.components.dataset.RemoteData", + "upstream": null, + "plugins": null, + "cache": true, + "status": null, + "getter": "?1db2546427804ee7161c5c5eedeb8521e6831413" + }, + "table:sample_pdf_rag": { + "_path": "superduper.components.table.Table", + "upstream": null, + "plugins": null, + "cache": true, + "status": null, + "schema": "?schema:sample_pdf_rag/schema", + "primary_id": "id", + "data": "?dataset:sample_pdfs" + }, "pdf-rag": { "_path": "superduper.components.template.Template", "upstream": null, @@ -30,7 +79,7 @@ "_fold": "?str" } }, - "table:pdfs": { + "table:": { "_path": "superduper.components.table.Table", "upstream": null, "plugins": null, @@ -45,11 +94,11 @@ "method": "dill", "encodable": "lazy_artifact" }, - "546e1d0fcf7d48581ed26bd3dff69c4172d3a155": { + "44db6ffe33f83e1174ff6ce4541538e136fcfdf0": { "_path": "superduper.components.datatype.LazyArtifact", "datatype": "?datatype:dill_lazy", "uri": null, - "blob": "&:blob:546e1d0fcf7d48581ed26bd3dff69c4172d3a155" + "blob": "&:blob:44db6ffe33f83e1174ff6ce4541538e136fcfdf0" }, "model:split_image": { "_path": "superduper.components.model.ObjectModel", @@ -68,7 +117,7 @@ "num_workers": 0, "serve": false, "trainer": null, - "object": "?546e1d0fcf7d48581ed26bd3dff69c4172d3a155", + "object": "?44db6ffe33f83e1174ff6ce4541538e136fcfdf0", "method": null }, "var-table-name-find": { @@ -92,11 +141,11 @@ "json": { "_path": "superduper.components.schema.FieldType" }, - "64d43173d7759053e2e6cb20f6ec85de85a451b4": { + "d3583f01e9b6265ee55da8cbc49f771b7df88a1a": { "_path": "superduper.components.datatype.LazyArtifact", "datatype": "?datatype:dill_lazy", "uri": null, - "blob": "&:blob:64d43173d7759053e2e6cb20f6ec85de85a451b4" + "blob": "&:blob:d3583f01e9b6265ee55da8cbc49f771b7df88a1a" }, "model:chunk": { "_path": "superduper.components.model.ObjectModel", @@ -115,7 +164,7 @@ "num_workers": 0, "serve": false, "trainer": null, - "object": "?64d43173d7759053e2e6cb20f6ec85de85a451b4", + "object": "?d3583f01e9b6265ee55da8cbc49f771b7df88a1a", "method": null }, "var-table-name-select": { @@ -180,11 +229,11 @@ "method": "dill", "encodable": "artifact" }, - "f4469712866fa1bac3e026fe3c3c43c09e118167": { + "f9cdb1b37f64778b6d3e49c812bf0ca382161ac0": { "_path": "superduper.components.datatype.Artifact", "datatype": "?datatype:dill", "uri": null, - "blob": "&:blob:f4469712866fa1bac3e026fe3c3c43c09e118167" + "blob": "&:blob:f9cdb1b37f64778b6d3e49c812bf0ca382161ac0" }, "model:sentence-transformers-embedding": { "_path": "superduper_sentence_transformers.model.SentenceTransformer", @@ -213,7 +262,7 @@ "trainer": null, "model": "BAAI/bge-small-en", "preprocess": null, - "postprocess": "?f4469712866fa1bac3e026fe3c3c43c09e118167" + "postprocess": "?f9cdb1b37f64778b6d3e49c812bf0ca382161ac0" }, "model:embedding": { "_path": "superduper.components.model.ModelRouter", @@ -238,7 +287,7 @@ }, "model": "" }, - "OUT-chunk-?(listener:chunk.uuid)-select": { + "outputs-chunk-?(listener:chunk.uuid)-select": { "_path": "superduper_mongodb.query.parse_query", "documents": [], "query": "chunk__?(listener:chunk.uuid).select()" @@ -255,7 +304,7 @@ "key": "chunk__?(listener:chunk.uuid).txt", "model": "?model:embedding", "predict_kwargs": {}, - "select": "?OUT-chunk-?(listener:chunk.uuid)-select", + "select": "?outputs-chunk-?(listener:chunk.uuid)-select", "flatten": false }, "vector_index:vector-index": { @@ -270,11 +319,11 @@ "measure": "cosine", "metric_values": {} }, - "35b17d0b4e3e2d04f9eed13f8ed2ab25bdee48f9": { + "3d13bcd47e6a8a3f467070290a1b7300a10394ce": { "_path": "superduper.components.datatype.Artifact", "datatype": "?datatype:dill", "uri": null, - "blob": "&:blob:35b17d0b4e3e2d04f9eed13f8ed2ab25bdee48f9" + "blob": "&:blob:3d13bcd47e6a8a3f467070290a1b7300a10394ce" }, "model:llm-openai": { "_path": "superduper_openai.model.OpenAIChatCompletion", @@ -379,11 +428,11 @@ }, "model": "" }, - "a90fb30c4b6cd9fb7f29ddcae3bed4d5": { + "9498b7a11ec9428e68b04e01475a2d85": { "_path": "superduper.components.datatype.LazyFile", "datatype": "?datatype:file_lazy", "uri": null, - "x": "&:file:a90fb30c4b6cd9fb7f29ddcae3bed4d5" + "x": "&:file:9498b7a11ec9428e68b04e01475a2d85" }, "plugin:plugin-utils_py": { "_path": "superduper.components.plugin.Plugin", @@ -391,11 +440,11 @@ "plugins": null, "cache": true, "status": null, - "path": "?a90fb30c4b6cd9fb7f29ddcae3bed4d5", + "path": "?9498b7a11ec9428e68b04e01475a2d85", "cache_path": "~/.superduper/plugins" }, "model:processor": { - "_path": "utils.Processer", + "_path": "utils.Processor", "upstream": null, "plugins": [ "?plugin:plugin-utils_py" @@ -417,7 +466,7 @@ "split_image_key": "split_image__?(listener:split_image.uuid)" }, "model:rag": { - "_object": "?35b17d0b4e3e2d04f9eed13f8ed2ab25bdee48f9", + "_object": "?3d13bcd47e6a8a3f467070290a1b7300a10394ce", "upstream": null, "plugins": null, "cache": true, @@ -445,7 +494,7 @@ "cache": true, "status": null, "components": [ - "?table:pdfs", + "?table:", "?listener:split_image", "?listener:chunk", "?vector_index:vector-index", @@ -472,7 +521,7 @@ }, "table_name": { "type": "str", - "default": "_pdfs" + "default": "sample_pdf_rag" }, "llm_model": { "type": "str", @@ -494,14 +543,13 @@ }, "blobs": null, "files": null, - "data": null, "requirements": null, - "default_table": null, + "default_table": "?table:sample_pdf_rag", + "queries": null, "_literals": [ "template" ] } }, - "_blobs": {}, "_files": {} } \ No newline at end of file diff --git a/templates/pdf_rag/files/a90fb30c4b6cd9fb7f29ddcae3bed4d5/utils.py b/templates/pdf_rag/files/9498b7a11ec9428e68b04e01475a2d85/utils.py similarity index 99% rename from templates/pdf_rag/files/a90fb30c4b6cd9fb7f29ddcae3bed4d5/utils.py rename to templates/pdf_rag/files/9498b7a11ec9428e68b04e01475a2d85/utils.py index 05ae267a0..73489a416 100644 --- a/templates/pdf_rag/files/a90fb30c4b6cd9fb7f29ddcae3bed4d5/utils.py +++ b/templates/pdf_rag/files/9498b7a11ec9428e68b04e01475a2d85/utils.py @@ -218,7 +218,7 @@ def draw_rectangle_and_display(image_path, relative_coordinates, expand=0.005): return img -class Processer(Model): +class Processor(Model): chunk_key: str split_image_key: str diff --git a/templates/pdf_rag/install.sh b/templates/pdf_rag/install.sh new file mode 100644 index 000000000..38612a878 --- /dev/null +++ b/templates/pdf_rag/install.sh @@ -0,0 +1,5 @@ +sudo apt update +sudo apt install -y libgl1-mesa-glx +sudo apt install -y poppler-utils +sudo apt install -y tesseract-ocr +python3 -c 'import nltk; nltk.download("punkt"); nltk.download("averaged_perceptron_tagger")' diff --git a/templates/pdf_rag/requirements.txt b/templates/pdf_rag/requirements.txt index b999ab765..790518a37 100644 --- a/templates/pdf_rag/requirements.txt +++ b/templates/pdf_rag/requirements.txt @@ -1,3 +1,6 @@ -superduper==0.0.4.dev -openai>=1.1.2 -httpx \ No newline at end of file +pdf2image +unstructured[pdf] +-e ./plugins/openai +-e ./plugins/anthropic +-e ./plugins/sentence_transformers +-e ./plugins/vllm diff --git a/templates/pdf_rag/utils.py b/templates/pdf_rag/utils.py index 05ae267a0..73489a416 100644 --- a/templates/pdf_rag/utils.py +++ b/templates/pdf_rag/utils.py @@ -218,7 +218,7 @@ def draw_rectangle_and_display(image_path, relative_coordinates, expand=0.005): return img -class Processer(Model): +class Processor(Model): chunk_key: str split_image_key: str diff --git a/templates/rag/blobs/3c8e9180cebd28842c55e90a67bc597585c5d11c b/templates/rag/blobs/0b56594dbbc66ce17a94374db7039775b4708b1c similarity index 95% rename from templates/rag/blobs/3c8e9180cebd28842c55e90a67bc597585c5d11c rename to templates/rag/blobs/0b56594dbbc66ce17a94374db7039775b4708b1c index 16b16127e..44fd8355a 100644 Binary files a/templates/rag/blobs/3c8e9180cebd28842c55e90a67bc597585c5d11c and b/templates/rag/blobs/0b56594dbbc66ce17a94374db7039775b4708b1c differ diff --git a/templates/rag/blobs/2abbced0b779db61865b869a5a707c1114193b11 b/templates/rag/blobs/2abbced0b779db61865b869a5a707c1114193b11 deleted file mode 100644 index 30542043e..000000000 Binary files a/templates/rag/blobs/2abbced0b779db61865b869a5a707c1114193b11 and /dev/null differ diff --git a/templates/rag/blobs/6fe724d5828fab83ecf874150018a459a06f0ce4 b/templates/rag/blobs/4437ddb05518fdd4004785ad91d65242c0a127f9 similarity index 77% rename from templates/rag/blobs/6fe724d5828fab83ecf874150018a459a06f0ce4 rename to templates/rag/blobs/4437ddb05518fdd4004785ad91d65242c0a127f9 index ab6ddc8e2..792526b45 100644 Binary files a/templates/rag/blobs/6fe724d5828fab83ecf874150018a459a06f0ce4 and b/templates/rag/blobs/4437ddb05518fdd4004785ad91d65242c0a127f9 differ diff --git a/templates/rag/blobs/678e006ae753e24437af717e3f645fbfee9f54c9 b/templates/rag/blobs/678e006ae753e24437af717e3f645fbfee9f54c9 deleted file mode 100644 index 44463ea83..000000000 Binary files a/templates/rag/blobs/678e006ae753e24437af717e3f645fbfee9f54c9 and /dev/null differ diff --git a/templates/rag/blobs/9a6fd18ac97d76ea1f2a04140182a6139f61d7e3 b/templates/rag/blobs/9a6fd18ac97d76ea1f2a04140182a6139f61d7e3 deleted file mode 100644 index 6af0586ff..000000000 Binary files a/templates/rag/blobs/9a6fd18ac97d76ea1f2a04140182a6139f61d7e3 and /dev/null differ diff --git a/templates/rag/blobs/9ec2ed0154ffee28e0e37e0dd0beda21f976d337 b/templates/rag/blobs/9ec2ed0154ffee28e0e37e0dd0beda21f976d337 deleted file mode 100644 index ed4b39bfa..000000000 Binary files a/templates/rag/blobs/9ec2ed0154ffee28e0e37e0dd0beda21f976d337 and /dev/null differ diff --git a/templates/rag/blobs/a10c50aef32e291aeadde1af7b4c5f32ef3db804 b/templates/rag/blobs/a10c50aef32e291aeadde1af7b4c5f32ef3db804 deleted file mode 100644 index b6b2ec917..000000000 Binary files a/templates/rag/blobs/a10c50aef32e291aeadde1af7b4c5f32ef3db804 and /dev/null differ diff --git a/templates/rag/blobs/a3083074dfbc27e2d3fa07a132522089c03fa1de b/templates/rag/blobs/a3083074dfbc27e2d3fa07a132522089c03fa1de deleted file mode 100644 index e6d4ad4f1..000000000 Binary files a/templates/rag/blobs/a3083074dfbc27e2d3fa07a132522089c03fa1de and /dev/null differ diff --git a/templates/rag/blobs/a5172d875df9da1cb35647723110884aa39218e0 b/templates/rag/blobs/a5172d875df9da1cb35647723110884aa39218e0 deleted file mode 100644 index 5d23aa4f2..000000000 Binary files a/templates/rag/blobs/a5172d875df9da1cb35647723110884aa39218e0 and /dev/null differ diff --git a/templates/rag/blobs/aa845a452372b54c3e79a5803208419c011fd003 b/templates/rag/blobs/aa845a452372b54c3e79a5803208419c011fd003 deleted file mode 100644 index 9b83b2845..000000000 Binary files a/templates/rag/blobs/aa845a452372b54c3e79a5803208419c011fd003 and /dev/null differ diff --git a/templates/rag/blobs/e7650b0163ba2fa90b2c5d419cafafedecc66628 b/templates/rag/blobs/e7650b0163ba2fa90b2c5d419cafafedecc66628 deleted file mode 100644 index 5ef2cdc12..000000000 Binary files a/templates/rag/blobs/e7650b0163ba2fa90b2c5d419cafafedecc66628 and /dev/null differ diff --git a/templates/rag/blobs/e8f8096744f84888cf17483a0e29769062256c1d b/templates/rag/blobs/e8f8096744f84888cf17483a0e29769062256c1d new file mode 100644 index 000000000..ffed950ce Binary files /dev/null and b/templates/rag/blobs/e8f8096744f84888cf17483a0e29769062256c1d differ diff --git a/templates/rag/build.ipynb b/templates/rag/build.ipynb index 17702e9b0..9b9f98744 100644 --- a/templates/rag/build.ipynb +++ b/templates/rag/build.ipynb @@ -32,13 +32,20 @@ "cell_type": "code", "execution_count": null, "id": "3ef70f6d-a189-460a-8864-241a689624e2", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [ + "parameters" + ] + }, "outputs": [], "source": [ "APPLY = False\n", - "COLLECTION_NAME = '' if not APPLY else '_sample_rag'\n", - "ID_FIELD = '' if not APPLY else 'id'\n", - "OUTPUT_PREFIX = 'outputs__'" + "COLLECTION_NAME = '' if not APPLY else 'sample_rag'\n", + "ID_FIELD = '' if not APPLY else 'id'" ] }, { @@ -50,35 +57,38 @@ "source": [ "from superduper import superduper, CFG\n", "\n", - "CFG.output_prefix = OUTPUT_PREFIX\n", "CFG.bytes_encoding = 'str'\n", "CFG.json_native = False\n", "\n", - "db = superduper()" + "db = superduper('mongomock://test_db')" ] }, { "cell_type": "code", "execution_count": null, - "id": "ecf75387-9525-4370-aa3f-f4a5e1e0d71d", + "id": "ceccbac5-3ad5-4083-8e46-17d9ddaa1747", "metadata": {}, "outputs": [], "source": [ - "db.drop(force=True, data=True)" + "import json\n", + "import requests\n", + "import io\n", + "\n", + "def getter():\n", + " response = requests.get('https://superduperdb-public-demo.s3.amazonaws.com/text.json')\n", + " data = json.loads(response.content.decode('utf-8'))\n", + " return [{'x': r} for r in data]" ] }, { "cell_type": "code", "execution_count": null, - "id": "4e7902bd", + "id": "7130214e-2d7e-4fd8-9057-5b417a4503c5", "metadata": {}, "outputs": [], "source": [ - "import json\n", - "\n", - "with open('data.json', 'r') as f:\n", - " data = json.load(f)\n", - "data = [{'x': r} for r in data]" + "if APPLY:\n", + " data = getter()" ] }, { @@ -535,14 +545,26 @@ "metadata": {}, "outputs": [], "source": [ - "from superduper import Template\n", + "from superduper import Template, Table, Schema\n", + "from superduper.components.dataset import RemoteData\n", + "\n", "\n", "template = Template(\n", " 'rag',\n", " template=app,\n", - " data=data,\n", - " substitutions={'_sample_rag': 'table_name', OUTPUT_PREFIX: 'output_prefix'},\n", - " template_variables=['llm_model', 'embedding_model', 'table_name', 'id_field', 'output_prefix'],\n", + " default_table=Table(\n", + " 'sample_rag',\n", + " schema=Schema(\n", + " 'sample_rag/schema',\n", + " fields={'txt': 'str'},\n", + " ),\n", + " data=RemoteData(\n", + " 'superduper-docs',\n", + " getter=getter,\n", + " )\n", + " ),\n", + " substitutions={COLLECTION_NAME: 'table_name'},\n", + " template_variables=['llm_model', 'embedding_model', 'table_name', 'id_field'],\n", " types={\n", " 'id_field': {\n", " 'type': 'str',\n", @@ -560,12 +582,8 @@ " },\n", " 'table_name': {\n", " 'type': 'str',\n", - " 'default': '_sample_rag'\n", + " 'default': 'sample_rag'\n", " },\n", - " 'output_prefix': {\n", - " 'type': 'str',\n", - " 'default': OUTPUT_PREFIX,\n", - " }\n", " }\n", ")" ] diff --git a/templates/rag/component.json b/templates/rag/component.json index 93b44859c..aedde03b7 100644 --- a/templates/rag/component.json +++ b/templates/rag/component.json @@ -1,16 +1,48 @@ { "_base": "?rag", "_builds": { - "datatype:pickle": { + "str": { + "_path": "superduper.components.schema.FieldType" + }, + "schema:sample_rag/schema": { + "_path": "superduper.components.schema.Schema", + "upstream": null, + "plugins": null, + "cache": true, + "status": null, + "fields": { + "txt": "?str", + "_fold": "?str" + } + }, + "datatype:dill": { "_path": "superduper.components.datatype.get_serializer", - "method": "pickle", + "method": "dill", "encodable": "artifact" }, - "2abbced0b779db61865b869a5a707c1114193b11": { + "e8f8096744f84888cf17483a0e29769062256c1d": { "_path": "superduper.components.datatype.Artifact", - "datatype": "?datatype:pickle", + "datatype": "?datatype:dill", "uri": null, - "blob": "&:blob:2abbced0b779db61865b869a5a707c1114193b11" + "blob": "&:blob:e8f8096744f84888cf17483a0e29769062256c1d" + }, + "dataset:superduper-docs": { + "_path": "superduper.components.dataset.RemoteData", + "upstream": null, + "plugins": null, + "cache": true, + "status": null, + "getter": "?e8f8096744f84888cf17483a0e29769062256c1d" + }, + "table:sample_rag": { + "_path": "superduper.components.table.Table", + "upstream": null, + "plugins": null, + "cache": true, + "status": null, + "schema": "?schema:sample_rag/schema", + "primary_id": "id", + "data": "?dataset:superduper-docs" }, "rag": { "_path": "superduper.components.template.Template", @@ -26,14 +58,14 @@ "method": "dill", "encodable": "artifact" }, - "a10c50aef32e291aeadde1af7b4c5f32ef3db804": { + "0b56594dbbc66ce17a94374db7039775b4708b1c": { "_path": "superduper.components.datatype.Artifact", "datatype": "?datatype:dill", "uri": null, - "blob": "&:blob:a10c50aef32e291aeadde1af7b4c5f32ef3db804" + "blob": "&:blob:0b56594dbbc66ce17a94374db7039775b4708b1c" }, "model:chunker": { - "_object": "?a10c50aef32e291aeadde1af7b4c5f32ef3db804", + "_object": "?0b56594dbbc66ce17a94374db7039775b4708b1c", "upstream": null, "plugins": null, "cache": true, @@ -108,11 +140,11 @@ 1024 ] }, - "6fe724d5828fab83ecf874150018a459a06f0ce4": { + "4437ddb05518fdd4004785ad91d65242c0a127f9": { "_path": "superduper.components.datatype.Artifact", "datatype": "?datatype:dill", "uri": null, - "blob": "&:blob:6fe724d5828fab83ecf874150018a459a06f0ce4" + "blob": "&:blob:4437ddb05518fdd4004785ad91d65242c0a127f9" }, "model:sentence-transformers-embedding": { "_path": "superduper_sentence_transformers.model.SentenceTransformer", @@ -141,7 +173,7 @@ "trainer": null, "model": "BAAI/bge-small-en", "preprocess": null, - "postprocess": "?6fe724d5828fab83ecf874150018a459a06f0ce4" + "postprocess": "?4437ddb05518fdd4004785ad91d65242c0a127f9" }, "model:embedding": { "_path": "superduper.components.model.ModelRouter", @@ -331,8 +363,7 @@ "llm_model", "embedding_model", "table_name", - "id_field", - "output_prefix" + "id_field" ], "types": { "id_field": { @@ -359,17 +390,14 @@ }, "table_name": { "type": "str", - "default": "_sample_rag" - }, - "output_prefix": { - "type": "str", - "default": "outputs__" + "default": "sample_rag" } }, "blobs": null, "files": null, - "data": "?2abbced0b779db61865b869a5a707c1114193b11", "requirements": null, + "default_table": "?table:sample_rag", + "queries": null, "_literals": [ "template" ] diff --git a/templates/rag/data.json b/templates/rag/data.json deleted file mode 100644 index 01c0da2c6..000000000 --- a/templates/rag/data.json +++ /dev/null @@ -1,211 +0,0 @@ -[ - "---\nsidebar_position: 5\n---\n\n# Encoding data\n\nIn AI, typical types of data are:\n\n- **Numbers** (integers, floats, etc.)\n- **Text**\n- **Images**\n- **Audio**\n- **Videos**\n- **...bespoke in house data**\n\nMost databases don't support any data other than numbers and text.\nSuperduper enables the use of these more interesting data-types using the `Document` wrapper.\n\n### `Document`\n\nThe `Document` wrapper, wraps dictionaries, and is the container which is used whenever \ndata is exchanged with your database. That means inputs, and queries, wrap dictionaries \nused with `Document` and also results are returned wrapped with `Document`.\n\nWhenever the `Document` contains data which is in need of specialized serialization,\nthen the `Document` instance contains calls to `DataType` instances.\n\n### `DataType`\n\nThe [`DataType` class](../apply_api/datatype), allows users to create and encoder custom datatypes, by providing \ntheir own encoder/decoder pairs.\n\nHere is an example of applying an `DataType` to add an image to a `Document`:\n\n```python\nimport pickle\nimport PIL.Image\nfrom superduper import DataType, Document\n\nimage = PIL.Image.open('my_image.jpg')\n\nmy_image_encoder = DataType(\n identifier='my-pil',\n encoder=lambda x, info: pickle.dumps(x),\n decoder=lambda x, info: pickle.loads(x),\n)\n```\n\nWhen all data is inserted into the database, each piece of data is encoded using the corresponding datatype. \n```\n>> encoded_data = my_image_encoder.encode_data(image)\n>> encoded_data\nb'\\x80\\x04\\x95[\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x8c\\x12PIL.PngImagePlugin\\x94\\x8c\\x0cPngImageFile\\x94\\x93\\x94)\\x81\\x94]\\x94(}\\x94\\x8c\\x0ctransparency\\x94K\\x00s\\x8c\\x01P\\x94K\\x01K\\x01\\x86\\x94]\\x94(K\\x00K\\x00K\\x00eC\\x01\\x00\\x94eb.'\n```\n\nWhen the data is retrieved from the database, it is decoded accordingly.\n```python\n>>> my_image_encoder.decode_data(encoded_data)\n\n```\n\nBy default, data encoded with `DataType` is saved in the database, but developers \nmay alternatively save data in the `db.artifact_store` instead. \n\nThis may be achiever by specifying the `encodable=...` parameter:\n\n```python\nmy_image_encoder = DataType(\n identifier='my-pil',\n encoder=lambda x, info: pickle.dumps(x),\n decoder=lambda x, info: pickle.loads(x),\n encodable='artifact', # saves to disk/ db.artifact_store\n # encodable='lazy_artifact', # Just in time loading\n)\n```\n\n### `Schema`\n\nA `Schema` allows developers to connect named fields of dictionaries \nor columns of `pandas.DataFrame` objects with `DataType` instances.\n\nA `Schema` is used, in particular, for SQL databases/ tables, and for \nmodels that return multiple outputs.\n\nHere is an example `Schema`, which is used together with text and image \nfields:\n\n```python\nschema = Schema('my-schema', fields={'my-text': 'str', 'my-img': my_image_encoder})\n```\n\nAll data is encoded using the schema when saved, and decoded using the schema when queried.\n\n```python\n>>> saved_data = Document({'my-img': image}).encode(schema)\n>>> saved_data\n{'my-img': b'\\x80\\x04\\x95[\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x8c\\x12PIL.PngImagePlugin\\x94\\x8c\\x0cPngImageFile\\x94\\x93\\x94)\\x81\\x94]\\x94(}\\x94\\x8c\\x0ctransparency\\x94K\\x00s\\x8c\\x01P\\x94K\\x01K\\x01\\x86\\x94]\\x94(K\\x00K\\x00K\\x00eC\\x01\\x00\\x94eb.',\n '_schema': 'my-schema',\n '_builds': {},\n '_files': {},\n '_blobs': {}}\n```\n\n```python\n>>> Document.decode(saved_data, schema=schema).unpack()\n{'my-img': }\n```\n\n\n", - "# `Document` wrapper\n\n...", - "# Fundamentals\n\nIn this section, we try and guide developers through the principles and algorithms underlying Superduper.\n\nFor a more \"how-to\" approach refer first to the [tutorials](../tutorials/intro.md), [use-cases](../../use_cases), [reusable snippets](../reusable_snippets/), and to [core api](../core_api/) usage.", - "---\nsidebar_position: 3\n---\n\n# Datalayer\n\nThe `Datalayer` is the principle point of entry in Superduper for:\n\n- Communicating with the database\n- Instructing models and other components to work together with the database\n- Accessing and storing meta-data about your Superduper models and data\n\nTechnically, the `Datalayer` \"wires together\" several important backends involved in the AI workflow:\n\n- Querying the database via the **databackend**\n- Storing and retrieving serialized model-weights and other artifacts from the **artifact store**\n- Storing and retrieval important meta-data, from the **meta-data store** and information about models and other components which are to be installed with Superduper\n- Performing computations over the data in the **databackend** using the models saved in the **artifact store**\n\n```python\nfrom superduper import superduper\n\ndb = superduper()\n\ndb.databackend\n# \n\ndb.artifact_store\n# \n\ndb.metadata\n# \n\ndb.compute\n# \n```\n\nOur aim is to make it easy to set-up each aspect of the `Datalayer` with your preferred\nconnections/ engines.\n\n### Data-backend\n\nThe databackend typically connects to your database (although `superduper` also supports other databackends such as a directory of `pandas` dataframes), \nand dispatches queries written in an query API which is compatible with that databackend, but which also includes additional aspects\nspecific to `superduper`.\n\nRead more [here](../data_integrations/supported_query_APIs.md).\n\nThe databackend is configured by setting the URI `CFG.databackend` in the [configuration system](../get_started/configuration.md).\n\nWe support the same databackends as supported by the [`ibis` project](https://ibis-project.org/):\n\n- [**MongoDB**](https://www.mongodb.com/)\n- [**PostgreSQL**](https://www.postgresql.org/)\n- [**SQLite**](https://www.sqlite.org/index.html)\n- [**DuckDB**](https://duckdb.org/)\n- [**BigQuery**](https://cloud.google.com/bigquery)\n- [**ClickHouse**](https://clickhouse.com/)\n- [**DataFusion**](https://arrow.apache.org/datafusion/)\n- [**Druid**](https://druid.apache.org/)\n- [**Impala**](https://impala.apache.org/)\n- [**MSSQL**](https://www.microsoft.com/en-us/sql-server/)\n- [**MySQL**](https://www.mysql.com/)\n- [**Oracle**](https://www.oracle.com/database/)\n- [**pandas**](https://pandas.pydata.org/)\n- [**Polars**](https://www.pola.rs/)\n- [**PySpark**](https://spark.apache.org/docs/3.3.1/api/python/index.html)\n- [**Snowflake**](https://www.snowflake.com/en/)\n- [**Trino**](https://trino.io/)\n\n### Artifact Store\n\nThe artifact-store is the place where large pieces of data associated with your AI models are saved.\nUsers have the possibility to configure either a local filesystem, or an artifact store on MongoDB `gridfs`:\n\nFor example:\n\n```python\nCFG.artifact_store = 'mongodb://localhost:27017/documents'\n```\n\nOr:\n\n```python\nCFG.artifact_store = 'filesystem://./data'\n```\n\n### Metadata Store\n\nThe meta-data store is the place where important information associated with models and \nrelated components are kept:\n\n- Where are the data artifacts saved for a component?\n- Important parameters necessary for using a component\n- Important parameters which were used to create a component (e.g. in training or otherwise)\n\nSimilarly to the databackend and artifact store, the metadata store is configurable:\n\n```python\nCFG.metadata = 'mongodb://localhost:27017/documents'\n```\n\nWe support metadata store via:\n\n1. [MongoDB](https://www.mongodb.com/)\n1. All databases supported by [SQLAlchemy](https://www.sqlalchemy.org/).\n For example, these databases supported by the databackend are also supported by the metadata store.\n - [PostgreSQL](https://www.postgresql.org/)\n - [MySQL](https://www.mysql.com/)\n - [SQLite](https://www.sqlite.org/)\n - [MSSQL](https://www.microsoft.com/en-us/sql-server/sql-server-downloads)\n\n\n### Compute backend\n\nThe compute-backend is designed to be a configurable engine for performing computations with models.\nWe support 2 backends:\n\n- Local (default: run compute in process on the local machine)\n- `dask` (run compute on a configured `dask` cluster)\n\n## Default settings\n\nIn such cases, the default configuration is to use the same configuration as used in the \ndatabackend.\n\nI.e., for MongoDB the following are equivalent:\n\n```python\ndb = superduper('mongodb://localhost:27018/documents')\n```\n\n...and\n\n```python\ndb = superduper(\n 'mongodb://localhost:27018/documents',\n metadata_store='mongodb://localhost:27018/documents',\n artifact_store='mongodb://localhost:27018/documents',\n)\n```\n\nWhenever a database is supported by the artifact store and metadata store, \nthe same behaviour holds. However, since there is no general pattern\nfor storing large files in SQL databases, the fallback artifact store\nis on the local filesystem. So the following are equivalent:\n\n```python\ndb = superduper('sqlite://.db')\n```\n\n...and\n\n```python\nfrom superduper.backends.local.compute import LocalComputeBackend\n\ndb = superduper(\n 'sqlite://.db',\n metadata_store='sqlite://.db',\n artifact_store='filesystem://.superduper/artifacts/',\n compute=LocalComputeBackend(),\n)\n```\n\n## Key methods\n\nHere are the key methods which you'll use again and again:\n\n### `db.execute`\n\nThis method executes a query. For an overview of how this works see [here](../data_integrations/supported_query_APIs.md).\n\n### `db.add`\n\nThis method adds `Component` instances to the `db.artifact_store` connection, and registers meta-data\nabout those instances in the `db.metadata_store`.\n\nIn addition, each sub-class of `Component` has certain \"set-up\" tasks, such as inference, additional configurations, \nor training, and these are scheduled by `db.add`.\n\n\n\n### `db.show`\n\nThis methods displays which `Component` instances are registered with the system.\n\n### `db.remove`\n\nThis method removes a `Component` instance from the system.\n\n## Additional methods\n\n### `db.validate`\n\nValidate your components (mostly models)\n\n### `db.predict`\n\nInfer predictions from models hosted by Superduper. Read more about this and about models [here](../apply_api/model.md).\n", - "---\nsidebar_position: 5\n---\n\n# Predictors and Models\n\n## Predictors\n\nThe base class which enables predictions in `superduper` is the `Predictor` mixin class.\n\nA `Predictor` is a class which implements the `.predict` method; this mimics `.predict` from \n[Scikit-Learn](https://scikit-learn.org/stable/) and related frameworks, but has support\nfor prediction directly via the `Datalayer`.\n\nA typical call to `.predict` looks like this:\n\n```python\npredictor.predict(\n X='' # key of documents or column of table to take as input\n db=db # `Datalayer` instance, built via `db = superduper()`\n select=my_select # database query over which to compute outputs\n **predict_kwargs # additional parameters for `.predict`\n)\n```\n\nExamples of `Predictor` classes are the AI-API classes in\n\n- `superduper.ext.openai.OpenAI*`\n- `superduper.ext.anthropic.Anthropic*`\n- `superduper.ext.cohere.Cohere*`\n\n## Models\n\nA model is a particular type of `Predictor` which carries large chunks of data around\nin order to implement predictions. These blobs can be, for example, the weights \nof a deep learning architecture or similar important data.\n\nExamples of `Model` are:\n\n- `superduper.ext.torch.TorchModel`\n- `superduper.ext.sklearn.Estimator`\n- `superdueprdb.ext.transformers.Pipeline`\n\nEach of these inheriting classes also implements the `.fit` method, which re-parametrizes the class in question, \ntypicall via a machine learning task and objective function.\n\nA typical call to `.fit` looks like this:\n\n```python\nmodel.fit(\n X='', # key of documents or column of table to take as input\n y='', # key of documents or column of table to take as target of fitting\n db=db, # `Datalayer` instance, built via `db = superduper()`\n select=my_select, # database query for training and validation data\n **fit_kwargs, # additional parameters for .fit\n)\n```\n", - "---\nsidebar_position: 7\n---\n\n# Vector-search\n\nSuperduper allows users to implement vector-search in their database by either \nusing in-database functionality, or via a sidecar implementation with `lance` and `FastAPI`.\n\n## Philosophy\n\nIn Superduper, from a user point-of-view vector-search isn't a completely different beast than other ways of \nusing the system:\n\n- The vector-preparation is exactly the same as preparing outputs with any model, \n with the special difference that the outputs are vectors, arrays or tensors.\n- Vector-searches are just another type of database query which happen to use \n the stored vectors.\n\n## Algorithm\n\nHere is a schematic of how vector-search works:\n\n![](/img/vector-search.png)\n\n## Explanation\n\nA vector-search query has the schematic form:\n\n```python\ntable_or_collection\n .like(Document()) # the operand is vectorized using registered models\n .filter_results(*args, **kwargs) # the results of vector-search are filtered\n```\n\n```python\ntable_or_collection\n .filter_results(*args, **kwargs) # the results of vector-search are filtered\n .like(Document()) # the operand is vectorized using registered models\n```\n\n...or\n\nThe type of such a query is a `CompoundSelect`. It's 2 parts are the vector-search part (`like`) and the \nfiltering part (`select`).\n\nIn the first case, the operand of `like` is dispatched to a **model**, which converts this into a **vector**.\nThe **vector** is compared to previously saved outputs of the same or a paired **model** (multi-modal).\nThe most similar `ids` are retrieved. The `select` part of the query is then transformed to \na similar query which searches within the retrieved `ids`. The full set of results are returned\nto the client.\n\nRead [here](../tutorials/vector_search.md) about setting up and detailed usage of vector-search.\n", - "# Architecture\n\nHere is a schematic of the Superduper design.\n\n![](/img/light.png)\n\n### Explanation\n\n1. Superduper expects data and components to be added/ updated from a range of client-side mechanisms: **scripts**, **apps**, **notebooks** or **third-party database clients** (possibly non-python).\n\n1. Users and programs can add **components** (**models**, data **encoders**, **vector-indexes** and more) from the client-side. These large items are stored in the **artifact-store** and are tracked via the **meta-data** store.\n\n1. If data is inserted to the **databackend** the **change-data-capture (CDC)** component captures these changes as they stream in.\n\n1. **(CDC)** triggers **work** to be performed in response to these changes, depending on which **components** are present in the system.\n\n1. The **work** is submitted to the **workers** via the **scheduler**. Together the **scheduler** and **workers** make up the **compute** layer.\n\n1. **workers** write their outputs back to the **databackend** and trained models to the **artifact-store**\n\n1. The **compute**, **databackend**, **metadata-store**, **artifact-store** collectively make up the **datalayer**\n\n1. The **datalayer** may be queried from client-side, including hybrid-queries or **compound-select** queries, which synthesizes classical **selects** with **vector-searches**", - "# Class hierarchy of user-facing classes\n\n![](/img/class-hierarchy.png)\n\n## `superduper`\n\n`superduper` is the entry point to connect and \nbe able to use key functionality. It returns a built `Datalayer`.\n\n## `Datalayer`\n\nThe `Datalayer` class, an instance of which we refer to throughout this \ndocumentation as `db`, is the key entrypoint via which developers\nmay connect to their data-infrastructure and additional connect\nAI functionality to their data-infrastructure:\n\nThe `Datalayer` connects to data, with the [`superduper` function](../core_api/connect).\n\n***`.apply`***\n\nAI `Component` instances may be applied to the built `Datalayer` [with `.apply`](../core_api/apply).\n\n***`.execute`***\n\nThe data and AI outputs are accessible with queries and AI models \nusing the `.execute` method. This can include standard database queries,\nvector-search queries (which include model inference) and pure model computations.\nSee [here](../core_api/execute).\n\n## `Component`\n\nAI functionality is packaged as a `Component`. Key implementations \nare `Model`, `Listener` and `VectorIndex`.\n\n## `Document`\n\n`Document` is a wrapper around standard Python `dict` instances, \nbut which can encode their contained fields as a mixture of JSON\nand pure `bytes`. This mechanism can in principle handle any information \nwhich Python can handle.\n\nSince most databases can handle this type of information, this makes\n`Document` a crucial piece in connecting AI (which operates over a range of information)\nand the database.\n\n## `_BaseEncodable`\n\nThis is the base class, which allows `superduper` to decide how to save \"special\" data.\n\n## `Serializable`\n\nAn extension of Python `dataclasses`, but easier to get the original class back \nfrom the serialized dictionary form. This is the base class underlying \nall `superduper` queries and predictions as well as mixing into `Component`.\n\n## `Job`\n\n`Component` instances applied with `Datalayer.apply` create compute-jobs \nin response to incoming data, and on initialization via the `Job` class.\n\nThe interface on `Component` is `Component.schedule_jobs`.", - "# Snowflake\n\n## Installation\n\n```bash\npip install superduper_ibis\npip install snowflake-sqlalchemy\n```\n\n## API\n\n```python\nfrom superduper import superduper\n\ndb = superduper('snowflake://')\n```", - "---\nsidebar_position: 1\n---\n\n# Community support\n\nIn order to specify the action of models on the data, we provide an interface to pythonic ecosystem query APIs.\nIn particular, we provide wrappers to these projects to create database queries:\n\n- [`pymongo`](https://pymongo.readthedocs.io/en/stable/) for MongoDB\n- [`ibis`](https://ibis-project.org/) for SQL databases\n\n`ibis` also allows users to use raw SQL in their workflows.\n\nQueries in these two-worlds can be built by importing the table/collection class from \neach data backend. With `pymongo`, one can write:\n\n```python\nquery = db['products'].find({'brand': 'Nike'}, {'_id': 1}).limit(10)\n```\n\nIn `ibis`, one would write:\n\n```python\nquery = db['products'].filter(products.brand == 'Nike').select('id').limit(10)\n```\n\n## Hybrid API\n\nOn top of the native features of `pymongo` and `ibis`, `superduper` builds several novel features:\n\n- Additional ways to query the database with the outputs of machine learning models\n - Query model-outputs directly\n - Vector-search\n- Ways to encode and query more sophisticated data-types using the `Document`-`Encoder` pattern.", - "# MySQL\n\n## Installation\n\n```bash\npip install superduper_ibis\n```\n\n## API\n\n```python\nfrom superduper import superduper\n\ndb = superduper('mysql://')\n```", - "# Data integrations\n\nSuperduper integrates with 3 types of data-backend:\n\n- NoSQL\n - [MongoDB Community Edition](https://www.mongodb.com/try/download/community)\n - [MongoDB Atlas](https://www.mongodb.com/products/platform/atlas-database)\n- SQL\n - [MySQL](https://www.mysql.com/)\n - [PostgreSQL](https://www.postgresql.org/)\n - [Oracle](https://www.oracle.com/database/)\n - [SQLite](https://www.sqlite.org/)\n - [Snowflake](https://www.snowflake.com/en/)\n - [DuckDB](https://duckdb.org/)\n - [Clickhouse](https://clickhouse.com/)\n- In-memory tabular formats\n - [Pandas](https://pandas.pydata.org/docs/)\n\nAlthough these data-backends provide very different functionality, \nwith Superduper they are accessible via a uniform API.\n\nHowever, developers should bear in mind that there are a few \ndifferences between MongoDB and SQL data-backends.\n\n\n", - "---\nsidebar_position: 3\n---\n\n# SQL\n\n`superduper` supports SQL databases via the [`ibis` project](https://ibis-project.org/).\nWith `superduper`, queries may be built which conform to the `ibis` API, with additional \nsupport for complex data-types and vector-searches.\n\n## Installation\n\n```bash\npip install superduper_ibis\n```\n\n## Inserting data\n\nTable data must correspond to the `Schema` for that table.\nEither [create a `Schema` and `Table`](../execute_api/data_encodings_and_schemas.md#create-a-table-with-a-schema)\nor use [an auto-detected `Schema`](../execute_api/auto_data_types.md). Once you've \ngot a `Schema`, all data inserted must conform to that `Schema`:\n\n```python\nimport pandas\n\npandas.DataFrame([\n PIL.Image.open('image.jpg'), 'some text', 4,\n PIL.Image.open('other_image.jpg'), 'some other text', 3,\n])\n\nt.insert(dataframe.to_dict(orient='records'))\n```\n\n## Selecting data\n\n`superduper` supports selecting data via the `ibis` query API.\nFor example:\n\n```python\ndb['my_table'].filter(t.rating > 3).limit(5).select(t.image).execute()\n```\n\n### Vector-search\n\nVector-searches are supported via the `like` operator:\n\n```python\n(\n db['my_table']\n .like({'text': 'something like this'}, vector_index='my-index')\n .filter(t.rating > 3)\n .limit(5)\n .select(t.image, t.id)\n).execute()\n```\n\nVector-searches are either first or last in a chain of operations:\n\n```python\n(\n db['my_table']\n t.filter(t.rating > 3)\n .limit(5)\n .select(t.image, t.id)\n .like({'text': 'something like this'}, vector_index='my-index')\n).execute()\n```\n\n## Updating data\n\nUpdates are not covered for `superduper` SQL integrations.\n\n## Deleting data\n\n```python\ndb.databackend.drop_table('my-table')\n```\n", - "# DuckDB\n\n## Installation\n\n```bash\npip install superduper_ibis\n```\n\n## API\n\n```python\nfrom superduper import superduper\n\ndb = superduper('duckdb://.dbb')\n```", - "# Pandas\n\n## Installation\n\n```bash\npip install superduper_ibis\n```\n\n## API\n\nAlthough `pandas` is not a database, it came come in very handy for testing.\nTo connect, one specifies a list of `.csv` files:\n\n```python\nimport glob\nfrom superduper import superduper\n\ndb = superduper(glob.glob('*.csv'))\n```", - "# PostgreSQL\n\n## Installation\n\n```bash\npip install ibis-framework[postgres]\npip install superduper_ibis\n```\n\n## API\n\n```python\nfrom superduper import superduper\n\ndb = superduper('postgres://')\n```", - "# SQLite\n\n## Installation\n\n```bash\npip install superduper_ibis\n```\n\n## API\n\n```python\nfrom superduper import superduper\n\ndb = superduper('sqlite://.db')\n```", - "---\nsidebar_position: 2\n---\n\n# MongoDB \n\n## Installation\n\n```bash\npip install superduper_mongodb\n```\n\n## API\n\nIn general the MongoDB query API works exactly as per `pymongo`, with the exception that:\n\n- inputs are wrapped in `Document`\n- additional support for vector-search is provided\n- queries are executed lazily\n\n### Inserts\n\n```python\ndb['my-collection'].insert_many([{'my-field': ..., ...}\n for _ in range(20)\n]).execute()\n```\n\n### Updates\n\n```python\ndb['my-collection'].update_many(\n {'': ''},\n {'$set': ...},\n).execute()\n```\n\n### Selects\n\n```python\ndb['my-collection'].find({}, {'_id': 1}).limit(10).execute()\n```\n\n### Vector-search\n\nVector-searches may be integrated with `.find`.\n\n```python\ndb['my-collection'].like({'img': }, vector_index='my-index-name').find({}, {'img': 1}).execute()\n```\n\nRead more about vector-search [here](../fundamentals/vector_search_algorithm.md).\n\n### Deletes\n\n```python\ndb['my-collection'].delete_many({}).execute()\n```", - "---\nsidebar_label: Build text embedding model\nfilename: build_text_embedding_model.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Build text embedding model\n\n\n\n \n ```python\n !pip install openai\n from superduper_openai import OpenAIEmbedding\n \n embedding_model = OpenAIEmbedding(identifier='text-embedding-ada-002') \n ```\n \n \n ```python\n import os\n from superduper_jina import JinaEmbedding\n \n os.environ[\"JINA_API_KEY\"] = \"jina_xxxx\"\n \n # define the model\n embedding_model = JinaEmbedding(identifier='jina-embeddings-v2-base-en') \n ```\n \n \n ```python\n !pip install sentence-transformers\n from superduper import vector\n import sentence_transformers\n from superduper_sentence_transformers import SentenceTransformer\n \n embedding_model = SentenceTransformer(\n identifier=\"embedding\",\n object=sentence_transformers.SentenceTransformer(\"BAAI/bge-small-en\"),\n datatype=vector(shape=(1024,)),\n postprocess=lambda x: x.tolist(),\n predict_kwargs={\"show_progress_bar\": True},\n ) \n ```\n \n \n ```python\n from superduper import vector\n from superduper.components.model import Model, ensure_initialized, Signature\n from transformers import AutoTokenizer, AutoModel\n import torch\n \n class TransformerEmbedding(Model):\n signature: Signature = 'singleton'\n pretrained_model_name_or_path : str\n \n def init(self):\n self.tokenizer = AutoTokenizer.from_pretrained(self.pretrained_model_name_or_path)\n self.model = AutoModel.from_pretrained(self.pretrained_model_name_or_path)\n self.model.eval()\n \n @ensure_initialized\n def predict(self, x):\n return self.predict([x])[0]\n \n @ensure_initialized\n def predict(self, dataset):\n encoded_input = self.tokenizer(dataset, padding=True, truncation=True, return_tensors='pt')\n # Compute token embeddings\n with torch.no_grad():\n model_output = self.model(**encoded_input)\n # Perform pooling. In this case, cls pooling.\n sentence_embeddings = model_output[0][:, 0]\n # normalize embeddings\n sentence_embeddings = torch.nn.functional.normalize(sentence_embeddings, p=2, dim=1)\n return sentence_embeddings.tolist()\n \n \n embedding_model = TransformerEmbedding(identifier=\"embedding\", pretrained_model_name_or_path=\"BAAI/bge-small-en\", datatype=vector(shape=(384, ))) \n ```\n \n\n```python\nprint(len(embedding_model.predict(\"What is superduper\")))\n```\n\n", - "---\nsidebar_label: Create Listener\nfilename: create_listener.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Create Listener\n\n## Two ways to define listener\n\n\n\n \n ```python\n from superduper import Listener\n db.apply(\n Listener(\n key='key_name',\n model=model,\n select=select,\n )\n ) \n ```\n \n \n ```python\n db.apply(model.to_listener(key='key_name', select=select)) \n ```\n \n\n## Data passed into the model\n\n\n\n \n ```python\n # Model predict function definition: model.predict(x)\n # Data example in database: {\"key_name\": 10}\n # Then the listener will call model.predict(10)\n from superduper import Listener\n db.apply(\n Listener(\n key='key_name',\n model=model,\n select=select,\n )\n ) \n ```\n \n \n ```python\n # Model predict function definition: model.predict(x1, x2)\n # Data example in database: {\"key_name_1\": 10, \"key_name_2\": 100}\n # Then the listener will call model.predict(10, 100)\n from superduper import Listener\n db.apply(\n Listener(\n key=['key_name_1', 'key_name_2'],\n model=model,\n select=select,\n )\n ) \n ```\n \n \n ```python\n # Model predict function definition: model.predict(x1, x2)\n # Data example in database: {\"key_name_1\": 10, \"key_name_2\": 100}\n # Then the listener will call model.predict(x1=10, x2=100)\n from superduper import Listener\n db.apply(\n Listener(\n key={\"key_name_1\": \"x1\", \"key_name_2\": \"x2\"},\n model=model,\n select=select,\n )\n ) \n ```\n \n\n", - "---\nsidebar_label: Setup tables or collections\nfilename: setup_tables_or_collections.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Setup tables or collections\n\n```python\nfrom superduper.components.table import Table\nfrom superduper import Schema\n\nschema = Schema(identifier=\"schema\", fields={\"x\": datatype})\ntable_or_collection = Table(\"documents\", schema=schema)\ndb.apply(table_or_collection)\n```\n\n", - "---\nsidebar_label: Build LLM\nfilename: build_llm.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Build LLM\n\n\n\n \n ```python\n !pip install openai\n from superduper_openai import OpenAIChatCompletion\n \n llm = OpenAIChatCompletion(identifier='llm', model='gpt-3.5-turbo') \n ```\n \n \n ```python\n !pip install anthropic\n from superduper_anthropic import AnthropicCompletions\n import os\n \n os.environ[\"ANTHROPIC_API_KEY\"] = \"sk-xxx\"\n \n predict_kwargs = {\n \"max_tokens\": 1024,\n \"temperature\": 0.8,\n }\n \n llm = AnthropicCompletions(identifier='llm', model='claude-2.1', predict_kwargs=predict_kwargs) \n ```\n \n \n ```python\n !pip install vllm\n from superduper_vllm import VllmModel\n \n predict_kwargs = {\n \"max_tokens\": 1024,\n \"temperature\": 0.8,\n }\n \n \n llm = VllmModel(\n identifier=\"llm\",\n model_name=\"TheBloke/Mistral-7B-Instruct-v0.2-AWQ\",\n vllm_kwargs={\n \"gpu_memory_utilization\": 0.7,\n \"max_model_len\": 1024,\n \"quantization\": \"awq\",\n },\n predict_kwargs=predict_kwargs,\n ) \n ```\n \n \n ```python\n !pip install transformers datasets bitsandbytes accelerate\n from superduper_transformers import LLM\n \n llm = LLM.from_pretrained(\"mistralai/Mistral-7B-Instruct-v0.2\", load_in_8bit=True, device_map=\"cuda\", identifier=\"llm\", predict_kwargs=dict(max_new_tokens=128)) \n ```\n \n \n ```python\n !pip install llama_cpp_python\n # !huggingface-cli download TheBloke/Mistral-7B-Instruct-v0.2-GGUF mistral-7b-instruct-v0.2.Q4_K_M.gguf --local-dir . --local-dir-use-symlinks False\n \n from superduper_llama_cpp.model import LlamaCpp\n llm = LlamaCpp(identifier=\"llm\", model_name_or_path=\"mistral-7b-instruct-v0.2.Q4_K_M.gguf\") \n ```\n \n\n```python\n# test the llm model\nllm.predict(\"Tell me about the superduper\")\n```\n\n", - "---\nsidebar_label: Compute features\nfilename: compute_features.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Compute features\n\n\n\n \n ```python\n key = 'txt'\n import sentence_transformers\n from superduper import vector, Listener\n from superduper_sentence_transformers import SentenceTransformer\n \n superdupermodel = SentenceTransformer(\n identifier=\"embedding\",\n object=sentence_transformers.SentenceTransformer(\"sentence-transformers/all-MiniLM-L6-v2\"),\n postprocess=lambda x: x.tolist(),\n )\n \n jobs, listener = db.apply(\n Listener(\n model=superdupermodel,\n select=select,\n key=key,\n identifier=\"features\"\n )\n ) \n ```\n \n \n ```python\n key = 'image'\n import torchvision.models as models\n from torchvision import transforms\n from superduper_torch import TorchModel\n from superduper import Listener\n from PIL import Image\n \n class TorchVisionEmbedding:\n def __init__(self):\n # Load the pre-trained ResNet-18 model\n self.resnet = models.resnet18(pretrained=True)\n \n # Set the model to evaluation mode\n self.resnet.eval()\n \n def preprocess(self, image):\n # Preprocess the image\n preprocess = preprocess = transforms.Compose([\n transforms.Resize(256),\n transforms.CenterCrop(224),\n transforms.ToTensor(),\n transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),\n ])\n tensor_image = preprocess(image)\n return tensor_image\n \n model = TorchVisionEmbedding()\n superdupermodel = TorchModel(identifier='my-vision-model-torch', object=model.resnet, preprocess=model.preprocess, postprocess=lambda x: x.numpy().tolist())\n \n jobs, listener = db.apply(\n Listener(\n model=superdupermodel,\n select=select,\n key=key,\n identifier=\"features\"\n )\n ) \n ```\n \n \n ```python\n import torch\n import clip\n from torchvision import transforms\n from superduper import ObjectModel\n from superduper import Listener\n \n import torch\n import clip\n from PIL import Image\n \n key={'txt': 'txt', 'image': 'image'}\n \n class CLIPModel:\n def __init__(self):\n # Load the CLIP model\n self.device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n self.model, self.preprocess = clip.load(\"RN50\", device=self.device)\n \n def __call__(self, text, image):\n with torch.no_grad():\n text = clip.tokenize([text]).to(self.device)\n image = self.preprocess(Image.fromarray(image.astype(np.uint8))).unsqueeze(0).to(self.device)\n image_features = self.model.encode_image(image)[0].numpy().tolist()\n text_features = self.model.encode_text(text)[0].numpy().tolist()\n return [image_features, text_features]\n \n model = CLIPModel()\n \n superdupermodel = ObjectModel(identifier=\"clip\", object=model, signature=\"**kwargs\", flatten=True, model_update_kwargs={\"document_embedded\": False})\n \n jobs, listener = db.apply(\n Listener(\n model=superdupermodel,\n select=select,\n key=key\n identifier=\"features\"\n )\n )\n \n ```\n \n \n ```python\n \n key = 'random'\n \n import numpy as np\n from superduper import superduper, ObjectModel, Listener\n \n def random(*args, **kwargs):\n return np.random.random(1024).tolist()\n \n superdupermodel = ObjectModel(identifier=\"random\", object=random)\n \n jobs, listener = db.apply(\n Listener(\n model=superdupermodel,\n select=select,\n key=key,\n identifier=\"features\"\n )\n ) \n ```\n \n \n ```python\n import numpy as np\n from superduper import superduper, ObjectModel, Listener\n \n key = 'custom'\n \n # Define any feature calculation function\n def calc_fake_feature(input_data):\n fake_feature = list(range(10))\n return fake_feature\n \n superdupermodel = ObjectModel(identifier=\"fake_feature\", object=calc_fake_feature)\n \n jobs, listener = db.apply(\n Listener(\n model=superdupermodel,\n select=select,\n # key of input_data\n key=key,\n identifier=\"features\"\n )\n ) \n ```\n \n\n", - "---\nsidebar_label: Get useful sample data\nfilename: get_useful_sample_data.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Get useful sample data\n\n\n\n \n ```python\n !curl -O https://superduper-public-demo.s3.amazonaws.com/text.json\n import json\n \n with open('text.json', 'r') as f:\n data = json.load(f) \n ```\n \n \n ```python\n !curl -O https://superduper-public-demo.s3.amazonaws.com/text_classification.json\n import json\n \n with open(\"text_classification.json\", \"r\") as f:\n data = json.load(f)\n num_classes = 2 \n ```\n \n \n ```python\n !curl -O https://superduper-public-demo.s3.amazonaws.com/pdfs.zip && unzip -o pdfs.zip\n import os\n \n data = [f'pdfs/{x}' for x in os.listdir('./pdfs') if x.endswith('.pdf')] \n ```\n \n \n ```python\n !curl -O https://superduper-public-demo.s3.amazonaws.com/images.zip && unzip images.zip\n import os\n from PIL import Image\n \n data = [f'images/{x}' for x in os.listdir('./images') if x.endswith(\".png\")][:200]\n data = [ Image.open(path) for path in data] \n ```\n \n \n ```python\n !curl -O https://superduper-public-demo.s3.amazonaws.com/images_classification.zip && unzip images_classification.zip\n import json\n from PIL import Image\n \n with open('images/images.json', 'r') as f:\n data = json.load(f)\n \n data = [{'x': Image.open(d['image_path']), 'y': d['label']} for d in data]\n num_classes = 2 \n ```\n \n \n ```python\n !curl -O https://superduper-public-demo.s3.amazonaws.com/videos.zip && unzip videos.zip\n import os\n \n data = [f'videos/{x}' for x in os.listdir('./videos')]\n sample_datapoint = data[-1]\n \n from superduper.ext.pillow import pil_image\n chunked_model_datatype = pil_image \n ```\n \n \n ```python\n # !curl -O https://superduper-public-demo.s3.amazonaws.com/audio.zip && unzip audio.zip\n import os\n \n data = [f'audios/{x}' for x in os.listdir('./audio')]\n sample_datapoint = data[-1] \n ```\n \n\n", - "---\nsidebar_label: Create datatype\nfilename: create_datatype.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Create datatype\n\nSuperduperDB supports automatic data conversion, so users don’t need to worry about the compatibility of different data formats (`PIL.Image`, `numpy.array`, `pandas.DataFrame`, etc.) with the database.\n\nIt also supports custom data conversion methods for transforming data, such as defining the following Datatype.\n\n\n\n \n ```python\n from superduper import vector\n \n datatype = vector(shape=(3, )) \n ```\n \n \n ```python\n from superduper_torch import tensor\n import torch\n \n datatype = tensor(torch.float, shape=(32, 32, 3)) \n ```\n \n \n ```python\n from superduper.ext.numpy import array\n import numpy as np\n \n datatype = array(dtype=\"float64\", shape=(32, 32, 3)) \n ```\n \n \n ```python\n datatype = 'str' \n ```\n \n \n ```python\n from superduper import DataType\n \n # By creating a datatype and setting its encodable attribute to “file” for saving PDF files, \n # all datatypes encoded as “file” will have their corresponding files uploaded to the artifact store. \n # References will be recorded in the database, and the files will be downloaded locally when needed. \n \n datatype = DataType('pdf', encodable='file') \n ```\n \n \n ```python\n from superduper.ext.pillow import pil_image\n import PIL.Image\n \n datatype = pil_image \n ```\n \n \n ```python\n \n datatype = None \n ```\n \n \n ```python\n from superduper.ext.numpy import array\n from superduper import DataType\n import scipy.io.wavfile\n import io\n \n \n def encoder(data):\n buffer = io.BytesIO()\n fs = data[0]\n content = data[1]\n scipy.io.wavfile.write(buffer, fs, content)\n return buffer.getvalue()\n \n \n def decoder(data):\n buffer = io.BytesIO(data)\n content = scipy.io.wavfile.read(buffer)\n return content\n \n \n datatype = DataType(\n 'wav',\n encoder=encoder,\n decoder=decoder,\n encodable='artifact',\n ) \n ```\n \n \n ```python\n from superduper import DataType\n \n # Create an instance of the Encoder with the identifier 'video_on_file' and load_hybrid set to False\n datatype = DataType(\n identifier='video_on_file',\n encodable='file',\n ) \n ```\n \n \n ```python\n from superduper import DataType\n import pandas as pd\n \n def encoder(x, info=None):\n return x.to_json()\n \n def decoder(x, info):\n return pd.read_json(x)\n \n datatype = DataType(\n identifier=\"pandas\",\n encoder=encoder,\n decoder=decoder\n ) \n ```\n \n \n ```python\n from superduper import DataType\n import numpy as np\n import pickle\n \n \n def pickle_encode(object, info=None):\n return pickle.dumps(object)\n \n def pickle_decode(b, info=None):\n return pickle.loads(b)\n \n \n datatype = DataType(\n identifier=\"VectorSearchMatrix\",\n encoder=pickle_encode,\n decoder=pickle_decode,\n encodable='artifact',\n ) \n ```\n \n\n", - "# Create vector-index\n\n\n```python\nvector_index_name = 'my-vector-index'\n```\n\n\n```python\n# \nfrom superduper import VectorIndex, Listener\n\njobs, _ = db.apply(\n VectorIndex(\n vector_index_name,\n indexing_listener=Listener(\n key=indexing_key, # the `Document` key `model` should ingest to create embedding\n select=select, # a `Select` query telling which data to search over\n model=embedding_model, # a `_Predictor` how to convert data to embeddings\n )\n )\n)\n```\n\n\n```python\n# \nfrom superduper import VectorIndex, Listener\n\njobs, _ = db.apply(\n VectorIndex(\n vector_index_name,\n indexing_listener=Listener(\n key=indexing_key, # the `Document` key `model` should ingest to create embedding\n select=select, # a `Select` query telling which data to search over\n model=embedding_model, # a `_Predictor` how to convert data to embeddings\n ),\n compatible_listener=Listener(\n key=compatible_key, # the `Document` key `model` should ingest to create embedding\n model=compatible_model, # a `_Predictor` how to convert data to embeddings\n active=False,\n select=None,\n )\n )\n)\n```\n\n\n```python\nquery_table_or_collection = select.table_or_collection\n```\n", - "---\nsidebar_label: Build multimodal embedding models\nfilename: build_multimodal_embedding_models.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Build multimodal embedding models\n\nSome embedding models such as [CLIP](https://github.com/openai/CLIP) come in pairs of `model` and `compatible_model`.\nOtherwise:\n\n\n\n \n ```python\n from superduper_sentence_transformers import SentenceTransformer\n \n # Load the pre-trained sentence transformer model\n model = SentenceTransformer(\n identifier='all-MiniLM-L6-v2',\n postprocess=lambda x: x.tolist(),\n ) \n ```\n \n \n ```python\n from torchvision import transforms\n import torch\n import torch.nn as nn\n import torchvision.models as models\n \n import warnings\n \n # Import custom modules\n from superduper_torch import TorchModel, tensor\n \n # Define a series of image transformations using torchvision.transforms.Compose\n t = transforms.Compose([\n transforms.Resize((224, 224)), # Resize the input image to 224x224 pixels (must same as here)\n transforms.CenterCrop((224, 224)), # Perform a center crop on the resized image\n transforms.ToTensor(), # Convert the image to a PyTorch tensor\n transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) # Normalize the tensor with specified mean and standard deviation\n ])\n \n # Define a preprocess function that applies the defined transformations to an input image\n def preprocess(x):\n try:\n return t(x)\n except Exception as e:\n # If an exception occurs during preprocessing, issue a warning and return a tensor of zeros\n warnings.warn(str(e))\n return torch.zeros(3, 224, 224)\n \n # Load the pre-trained ResNet-50 model from torchvision\n resnet50 = models.resnet50(pretrained=True)\n \n # Extract all layers of the ResNet-50 model except the last one\n modules = list(resnet50.children())[:-1]\n resnet50 = nn.Sequential(*modules)\n \n # Create a TorchModel instance with the ResNet-50 model, preprocessing function, and postprocessing lambda\n model = TorchModel(\n identifier='resnet50',\n preprocess=preprocess,\n object=resnet50,\n postprocess=lambda x: x[:, 0, 0], # Postprocess by extracting the top-left element of the output tensor\n datatype=tensor(dtype='float', shape=(2048,)) # Specify the encoder configuration\n ) \n ```\n \n \n ```python\n !pip install git+https://github.com/openai/CLIP.git\n import clip\n from superduper import vector\n from superduper_torch import TorchModel\n \n # Load the CLIP model and obtain the preprocessing function\n model, preprocess = clip.load(\"ViT-B/32\", device='cpu')\n \n # Define a vector with shape (1024,)\n \n output_datatpye = vector(shape=(1024,))\n \n # Create a TorchModel for text encoding\n compatible_model = TorchModel(\n identifier='clip_text', # Unique identifier for the model\n object=model, # CLIP model\n preprocess=lambda x: clip.tokenize(x)[0], # Model input preprocessing using CLIP \n postprocess=lambda x: x.tolist(), # Convert the model output to a list\n datatype=output_datatpye, # Vector encoder with shape (1024,)\n forward_method='encode_text', # Use the 'encode_text' method for forward pass \n )\n \n # Create a TorchModel for visual encoding\n model = TorchModel(\n identifier='clip_image', # Unique identifier for the model\n object=model.visual, # Visual part of the CLIP model \n preprocess=preprocess, # Visual preprocessing using CLIP\n postprocess=lambda x: x.tolist(), # Convert the output to a list \n datatype=output_datatpye, # Vector encoder with shape (1024,)\n ) \n ```\n \n \n ```python\n !pip install librosa\n import librosa\n import numpy as np\n from superduper import ObjectModel\n from superduper import vector\n \n def audio_embedding(audio_file):\n # Load the audio file\n MAX_SIZE= 10000\n y, sr = librosa.load(audio_file)\n y = y[:MAX_SIZE]\n mfccs = librosa.feature.mfcc(y=y, sr=44000, n_mfcc=1)\n mfccs = mfccs.squeeze().tolist()\n return mfccs\n \n if not get_chunking_datatype:\n e = vector(shape=(1000,))\n else:\n e = get_chunking_datatype(1000)\n \n model= ObjectModel(identifier='my-model-audio', object=audio_embedding, datatype=e) \n ```\n \n\n", - "---\nsidebar_label: Setup simple tables or collections\nfilename: setup_simple_tables_or_collections.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Setup simple tables or collections\n\n\n\n \n ```python\n # If data is in a format natively supported by MongoDB, we don't need to do anything.\n # However to manually specify datatypes, do as below\n from superduper import Schema, Document\n from superduper_pillow import pil_image\n from superduper.components.datatype import pickle_serializer\n \n fields = {\n 'serialized_content': pickle_serializer,\n 'img_content': pil_image,\n }\n \n schema = Schema(identifier=\"my-schema\", fields=fields)\n \n # Add schema to system\n db.apply(schema)\n \n # Now assert `Document` instances, specifying this schema\n db['documents'].insert_many([\n Document({\n 'serialized_content': item,\n 'img_content': img,\n }, schema='my-schema')\n for item, img in data\n ]) \n ```\n \n \n ```python\n # If data is in a format natively supported by MongoDB, we don't need to do anything.\n # However to manually specify datatypes, do as below\n from superduper import Schema\n from superduper_pillow import pil_image_hybrid\n from superduper.components.datatype import pickle_serializer\n \n fields = {\n 'serialized_content': pickle_serializer,\n 'img_content': pil_image_hybrid,\n }\n \n schema = Schema(identifier=\"my-schema\", fields=fields)\n db.apply(schema)\n \n # Now assert `Document` instances, specifying this schema\n db['documents'].insert_many([\n Document({\n 'serialized_content': item,\n 'img_content': img,\n }, schema='my-schema')\n for item, img in data\n ]) \n ```\n \n\n", - "---\nsidebar_label: Get LLM Finetuning Data\nfilename: get_llm_finetuning_data.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Get LLM Finetuning Data\n\nThe following are examples of training data in different formats.\n\n\n\n \n ```python\n from datasets import load_dataset\n from superduper.base.document import Document\n dataset_name = \"timdettmers/openassistant-guanaco\"\n dataset = load_dataset(dataset_name)\n \n train_dataset = dataset[\"train\"]\n eval_dataset = dataset[\"test\"]\n \n train_documents = [\n Document({**example, \"_fold\": \"train\"})\n for example in train_dataset\n ]\n eval_documents = [\n Document({**example, \"_fold\": \"valid\"})\n for example in eval_dataset\n ]\n \n datas = train_documents + eval_documents \n ```\n \n \n ```python\n from datasets import load_dataset\n from superduper.base.document import Document\n dataset_name = \"mosaicml/instruct-v3\"\n dataset = load_dataset(dataset_name)\n \n train_dataset = dataset[\"train\"]\n eval_dataset = dataset[\"test\"]\n \n train_documents = [\n Document({**example, \"_fold\": \"train\"})\n for example in train_dataset\n ]\n eval_documents = [\n Document({**example, \"_fold\": \"valid\"})\n for example in eval_dataset\n ]\n \n datas = train_documents + eval_documents \n ```\n \n \n ```python\n from datasets import load_dataset\n from superduper.base.document import Document\n dataset_name = \"philschmid/dolly-15k-oai-style\"\n dataset = load_dataset(dataset_name)['train'].train_test_split(0.9)\n \n train_dataset = dataset[\"train\"]\n eval_dataset = dataset[\"test\"]\n \n train_documents = [\n Document({**example, \"_fold\": \"train\"})\n for example in train_dataset\n ]\n eval_documents = [\n Document({**example, \"_fold\": \"valid\"})\n for example in eval_dataset\n ]\n \n datas = train_documents + eval_documents \n ```\n \n\nWe can define different training parameters to handle this type of data.\n\n\n\n \n ```python\n # Function for transformation after extracting data from the database\n transform = None\n key = ('text')\n training_kwargs=dict(dataset_text_field=\"text\") \n ```\n \n \n ```python\n # Function for transformation after extracting data from the database\n def transform(prompt, response):\n return {'text': prompt + response + \"\"}\n \n key = ('prompt', 'response')\n training_kwargs=dict(dataset_text_field=\"text\") \n ```\n \n \n ```python\n # Function for transformation after extracting data from the database\n transform = None\n \n key = ('messages')\n training_kwargs=None \n ```\n \n\nExample input_text and output_text\n\n\n\n \n ```python\n data = datas[0]\n input_text, output_text = data[\"text\"].rsplit(\"### Assistant: \", maxsplit=1)\n input_text += \"### Assistant: \"\n output_text = output_text.rsplit(\"### Human:\")[0]\n print(\"Input: --------------\")\n print(input_text)\n print(\"Response: --------------\")\n print(output_text) \n ```\n \n \n ```python\n data = datas[0]\n input_text = data[\"prompt\"]\n output_text = data[\"response\"]\n print(\"Input: --------------\")\n print(input_text)\n print(\"Response: --------------\")\n print(output_text) \n ```\n \n \n ```python\n data = datas[0]\n messages = data[\"messages\"]\n input_text = messages[:-1]\n output_text = messages[-1][\"content\"]\n print(\"Input: --------------\")\n print(input_text)\n print(\"Response: --------------\")\n print(output_text) \n ```\n \n\n", - "---\nsidebar_label: Create Vector Search Model\nfilename: create_vector_search_model.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Create Vector Search Model\n\n```python\nitem = {indexing_key: ''}\n```\n\n```python\nfrom superduper.components.model import QueryModel\n\nvector_search_model = QueryModel(\n identifier=\"VectorSearch\",\n select=query_table_or_collection.like(item, vector_index=vector_index_name, n=5).select(),\n # The _source is the identifier of the upstream data, which can be used to locate the data from upstream sources using `_source`.\n postprocess=lambda docs: [{\"text\": doc[indexing_key], \"_source\": doc[\"_source\"]} for doc in docs],\n db=db\n)\n```\n\n```python\nvector_search_model.predict(query=query)\n```\n\n", - "---\nsidebar_label: Build simple select queries\nfilename: build_simple_select_queries.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Build simple select queries\n\n\n\n \n ```python\n \n select = db[''].select() \n ```\n \n \n ```python\n \n select = db[''].select() \n ```\n \n\n", - "---\nsidebar_label: Insert data\nfilename: insert_data.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Insert data\n\nIn order to create data, we need to create a `Schema` for encoding our special `Datatype` column(s) in the databackend.\n\n\n\n \n ```python\n from superduper import Document, DataType\n \n def do_insert(data, schema = None):\n \n if schema is None and (datatype is None or isinstance(datatype, str)):\n data = [Document({'x': x['x'], 'y': x['y']}) if isinstance(x, dict) and 'x' in x and 'y' in x else Document({'x': x}) for x in data]\n db.execute(table_or_collection.insert_many(data))\n elif schema is None and datatype is not None and isinstance(datatype, DataType):\n data = [Document({'x': datatype(x['x']), 'y': x['y']}) if isinstance(x, dict) and 'x' in x and 'y' in x else Document({'x': datatype(x)}) for x in data]\n db.execute(table_or_collection.insert_many(data))\n else:\n data = [Document({'x': x['x'], 'y': x['y']}) if isinstance(x, dict) and 'x' in x and 'y' in x else Document({'x': x}) for x in data]\n db.execute(table_or_collection.insert_many(data, schema=schema))\n \n ```\n \n \n ```python\n from superduper import Document\n \n def do_insert(data):\n db.execute(table_or_collection.insert([Document({'id': str(idx), 'x': x['x'], 'y': x['y']}) if isinstance(x, dict) and 'x' in x and 'y' in x else Document({'id': str(idx), 'x': x}) for idx, x in enumerate(data)]))\n \n ```\n \n\n", - "---\nsidebar_label: Build and train classifier\nfilename: build_and_train_classifier.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Build and train classifier\n\n\n\n \n ```python\n from superduper_sklearn import Estimator, SklearnTrainer\n from sklearn.svm import SVC\n \n model = Estimator(\n identifier=\"my-model\",\n object=SVC(),\n trainer=SklearnTrainer(\n \"my-trainer\",\n key=(input_key, \"label\"),\n select=training_select,\n ),\n ) \n ```\n \n \n ```python\n import torch\n from torch import nn\n from superduper_torch.model import TorchModel\n from superduper_torch.training import TorchTrainer\n from torch.nn.functional import cross_entropy\n \n \n class SimpleModel(nn.Module):\n def __init__(self, input_size=16, hidden_size=32, num_classes=3):\n super(SimpleModel, self).__init__()\n self.fc1 = nn.Linear(input_size, hidden_size)\n self.relu = nn.ReLU()\n self.fc2 = nn.Linear(hidden_size, num_classes)\n \n def forward(self, x):\n out = self.fc1(x)\n out = self.relu(out)\n out = self.fc2(out)\n return out\n \n preprocess = lambda x: torch.tensor(x)\n \n # Postprocess function for the model output \n def postprocess(x):\n return int(x.topk(1)[1].item())\n \n def data_transform(features, label):\n return torch.tensor(features), label\n \n # Create a Logistic Regression model\n # feature_length is the input feature size\n model = SimpleModel(feature_size, num_classes=num_classes)\n model = TorchModel(\n identifier='my-model',\n object=model, \n preprocess=preprocess,\n postprocess=postprocess,\n trainer=TorchTrainer(\n key=(input_key, 'label'),\n identifier='my_trainer',\n objective=cross_entropy,\n loader_kwargs={'batch_size': 10},\n max_iterations=1000,\n validation_interval=100,\n select=select,\n transform=data_transform,\n ),\n ) \n ```\n \n\n", - "---\nsidebar_label: Apply a chunker for search\nfilename: apply_a_chunker_for_search.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Apply a chunker for search\n\n:::note\nNote that applying a chunker is ***not*** mandatory for search.\nIf your data is already chunked (e.g. short text snippets or audio) or if you\nare searching through something like images, which can't be chunked, then this\nwon't be necessary.\n:::\n\n\n\n \n ```python\n from superduper import model\n \n CHUNK_SIZE = 200\n \n @model(flatten=True, model_update_kwargs={'document_embedded': False})\n def chunker(text):\n text = text.split()\n chunks = [' '.join(text[i:i + CHUNK_SIZE]) for i in range(0, len(text), CHUNK_SIZE)]\n return chunks \n ```\n \n \n ```python\n !pip install -q \"unstructured[pdf]\"\n from superduper import model\n from unstructured.partition.pdf import partition_pdf\n \n CHUNK_SIZE = 500\n \n @model(flatten=True)\n def chunker(pdf_file):\n elements = partition_pdf(pdf_file)\n text = '\\n'.join([e.text for e in elements])\n chunks = [text[i:i + CHUNK_SIZE] for i in range(0, len(text), CHUNK_SIZE)]\n return chunks \n ```\n \n \n ```python\n !pip install opencv-python\n import cv2\n import tqdm\n from PIL import Image\n from superduper.ext.pillow import pil_image\n from superduper import model, Schema\n \n \n @model(\n flatten=True,\n model_update_kwargs={'document_embedded': False},\n )\n def chunker(video_file):\n # Set the sampling frequency for frames\n sample_freq = 10\n \n # Open the video file using OpenCV\n cap = cv2.VideoCapture(video_file)\n \n # Initialize variables\n frame_count = 0\n fps = cap.get(cv2.CAP_PROP_FPS)\n extracted_frames = []\n progress = tqdm.tqdm()\n \n # Iterate through video frames\n while True:\n ret, frame = cap.read()\n if not ret:\n break\n \n # Get the current timestamp based on frame count and FPS\n current_timestamp = frame_count // fps\n \n # Sample frames based on the specified frequency\n if frame_count % sample_freq == 0:\n extracted_frames.append({\n 'image': Image.fromarray(frame[:,:,::-1]), # Convert BGR to RGB\n 'current_timestamp': current_timestamp,\n })\n frame_count += 1\n progress.update(1)\n \n # Release resources\n cap.release()\n cv2.destroyAllWindows()\n \n # Return the list of extracted frames\n return extracted_frames \n ```\n \n \n ```python\n from superduper import model, Schema\n \n CHUNK_SIZE = 10 # in seconds\n \n @model(\n flatten=True,\n model_update_kwargs={'document_embedded': False},\n output_schema=Schema(identifier='output-schema', fields={'audio': datatype}),\n )\n def chunker(audio):\n chunks = []\n for i in range(0, len(audio), CHUNK_SIZE):\n chunks.append(audio[1][i: i + CHUNK_SIZE])\n return [(audio[0], chunk) for chunk in chunks] \n ```\n \n\nNow we apply this chunker to the data by wrapping the chunker in `Listener`:\n\n```python\nfrom superduper import Listener\n\nupstream_listener = Listener(\n model=chunker,\n select=select,\n key='x',\n uuid=\"chunk\",\n)\n\ndb.apply(upstream_listener)\n```\n\n", - "---\nsidebar_label: Visualize Results\nfilename: visualize_results.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Visualize Results\n\n\n\n \n ```python\n from IPython.display import Markdown, display\n \n def visualize(item, source):\n display(Markdown(item))\n \n def show(results, output_key, get_original_callable=None):\n for result in results:\n source = None\n if '_source' in result:\n \n source = get_original_callable(result['_source'])\n visualize(result[output_key], source) \n ```\n \n \n ```python\n from IPython.display import display\n \n def visualize(item, source):\n display(item) # item is a PIL.Image\n \n def show(results, output_key, get_original_callable=None):\n for result in results:\n source = None\n if '_source' in result:\n source = get_original_callable(result['_source'])\n visualize(result[output_key].x, source) \n ```\n \n \n ```python\n from IPython.display import Audio, display\n \n def visualize(item, source):\n display(Audio(item[1], fs=item[0]))\n \n def show(results, output_key, get_original_callable=None):\n for result in results:\n source = None\n if '_source' in result:\n \n source = get_original_callable(result['_source'])\n visualize(result[output_key], source) \n ```\n \n \n ```python\n from IPython.display import IFrame, display\n \n def visualize(item, source):\n display(item)\n \n \n def show(results, output_key, get_original_callable=None):\n for result in results:\n source = None\n if '_source' in result:\n \n source = get_original_callable(result['_source'])\n visualize(result[output_key], source) \n ```\n \n \n ```python\n from IPython.display import display, HTML\n \n def visualize(uri, source):\n timestamp = source # increment to the frame you want to start at\n \n # Create HTML code for the video player with a specified source and controls\n video_html = f\"\"\"\n \n \n \"\"\"\n \n display(HTML(video_html))\n \n \n def show(results, output_key, get_original_callable=None):\n # show only the first video\n for result in results:\n source = result['_source']\n result = result[output_key]\n timestamp = result['current_timestamp']\n uri = get_original_callable(source)['x']\n print(uri, timestamp)\n visualize(uri, timestamp)\n break \n ```\n \n\n", - "```python\n# \nfrom PyPDF2 import PdfReader\n\nfrom superduper import model\n\n\n@model(flatten=True, model_update_kwargs={'document_embedded': False})\ndef text_extraction(file_path):\n reader = PdfReader(file_path)\n \n texts = []\n for i, page in tqdm(enumerate(reader.pages)):\n text = page.extract_text() \n texts.append(text)\n return texts\n```\n", - "---\nsidebar_label: Perform a vector search\nfilename: perform_a_vector_search.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Perform a vector search\n\n```python\nfrom superduper import Document\n\ndef get_sample_item(key, sample_datapoint, datatype=None):\n if not isinstance(datatype, DataType):\n item = Document({key: sample_datapoint})\n else:\n item = Document({key: datatype(sample_datapoint)})\n\n return item\n\nif compatible_key:\n item = get_sample_item(compatible_key, sample_datapoint, None)\nelse:\n item = get_sample_item(indexing_key, sample_datapoint, datatype=datatype)\n```\n\nOnce we have this search target, we can execute a search as follows:\n\n\n\n \n ```python\n select = query_table_or_collection.like(item, vector_index=vector_index_name, n=10).find() \n ```\n \n \n ```python\n select = query_table_or_collection.like(item, vector_index=vector_index_name, n=10).limit(10) \n ```\n \n\n```python\nresults = db.execute(select)\n```\n\n", - "---\nsidebar_label: Build image embedding model\nfilename: build_image_embedding_model.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Build image embedding model\nConstruct a neural network architecture to project high-dimensional image data into a lower-dimensional, dense vector representation\n(embedding) that preserves relevant semantic and visual information within a learned latent space.\n\n```python\n!wget https://raw.githubusercontent.com/openai/CLIP/main/CLIP.png\n```\n\n```python\nimage_path = \"CLIP.png\"\n```\n\n\n\n \n ```python\n \n import torchvision.models as models\n from torchvision import transforms\n from superduper_torch import TorchModel\n \n class TorchVisionEmbedding:\n def __init__(self):\n # Load the pre-trained ResNet-18 model\n self.resnet = models.resnet18(pretrained=True)\n \n # Set the model to evaluation mode\n self.resnet.eval()\n \n def preprocess(self, image):\n # Preprocess the image\n preprocess = preprocess = transforms.Compose([\n transforms.Resize(256),\n transforms.CenterCrop(224),\n transforms.ToTensor(),\n transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),\n ])\n tensor_image = preprocess(image)\n return tensor_image\n \n embedding_model = TorchVisionEmbedding()\n superdupermodel = TorchModel(identifier='my-vision-model-torch', object=embedding_model.resnet, preprocess=embedding_model.preprocess) \n ```\n \n \n ```python\n import torch\n import clip\n from torchvision import transforms\n from superduper_torch import TorchModel\n \n class CLIPVisionEmbedding:\n def __init__(self):\n # Load the CLIP model\n self.device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n self.model, self.preprocess = clip.load(\"RN50\", device=self.device)\n \n def preprocess(self, image):\n # Load and preprocess the image\n image = self.preprocess(image).unsqueeze(0).to(self.device)\n return image\n \n embedding_model = CLIPVisionEmbedding()\n superdupermodel = TorchModel(identifier='my-vision-model-clip', object=model.model, preprocess=model.preprocess, forward_method='encode_image') \n ```\n \n \n ```python\n import torch\n from transformers import AutoImageProcessor, AutoModel, AutoFeatureExtractor\n import torchvision.transforms as T\n from superduper_torch import TorchModel\n \n \n class HuggingFaceEmbeddings(torch.nn.Module):\n def __init__(self):\n super().__init__()\n model_ckpt = \"nateraw/vit-base-beans\"\n processor = AutoImageProcessor.from_pretrained(model_ckpt)\n self.extractor = AutoFeatureExtractor.from_pretrained(model_ckpt)\n self.model = AutoModel.from_pretrained(model_ckpt)\n \n def forward(self, x):\n return self.model(pixel_values=x).last_hidden_state[:, 0].cpu()\n \n \n class Preprocessor:\n def __init__(self, extractor):\n self.device = 'cpu'\n # Data transformation chain.\n self.transformation_chain = T.Compose(\n [\n # We first resize the input image to 256x256 and then we take center crop.\n T.Resize(int((256 / 224) * extractor.size[\"height\"])),\n T.CenterCrop(extractor.size[\"height\"]),\n T.ToTensor(),\n T.Normalize(mean=extractor.image_mean, std=extractor.image_std),\n ]\n )\n def __call__(self, image):\n return self.transformation_chain(image).to(self.device)\n \n \n embedding_model = HuggingFaceEmbeddings()\n superdupermodel = TorchModel(identifier='my-vision-model-huggingface', object=embedding_model, preprocess=Preprocessor(embedding_model.extractor)) \n ```\n \n\n```python\nembedding_model.predict(Image.open(image_path))\n```\n\n", - "# Select outputs of upstream listener\n\n:::note\nThis is useful if you have performed a first step, such as pre-computing \nfeatures, or chunking your data. You can use this query to \noperate on those outputs.\n:::\n\n\n```python\nindexing_key = upstream_listener.outputs_key\nselect = upstream_listener.outputs_select\n```\n", - "---\nsidebar_label: Connecting listeners\nfilename: connecting_listeners.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Connecting listeners\n\n", - "---\nsidebar_label: Create Model Output Type\nfilename: create_model_output_type.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Create Model Output Type\n\n\n\n \n ```python\n chunked_model_datatype = None \n ```\n \n \n ```python\n from superduper_ibis.field_types import dtype\n chunked_model_datatype = dtype('str') \n ```\n \n\n", - "---\nsidebar_label: Connect to superduper\nfilename: connect_to_superduper.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Connect to superduper\n\n:::note\nNote that this is only relevant if you are running superduper in development mode.\nOtherwise refer to \"Configuring your production system\".\n:::\n\n\n\n \n ```python\n from superduper import superduper\n \n db = superduper('mongodb://localhost:27017/documents') \n ```\n \n \n ```python\n from superduper import superduper\n db = superduper('sqlite://my_db.db') \n ```\n \n \n ```python\n from superduper import superduper\n \n user = 'superduper'\n password = 'superduper'\n port = 3306\n host = 'localhost'\n database = 'test_db'\n \n db = superduper(f\"mysql://{user}:{password}@{host}:{port}/{database}\") \n ```\n \n \n ```python\n from superduper import superduper\n \n user = 'sa'\n password = 'Superduper#1'\n port = 1433\n host = 'localhost'\n \n db = superduper(f\"mssql://{user}:{password}@{host}:{port}\") \n ```\n \n \n ```python\n !pip install psycopg2\n from superduper import superduper\n \n user = 'postgres'\n password = 'postgres'\n port = 5432\n host = 'localhost'\n database = 'test_db'\n db_uri = f\"postgres://{user}:{password}@{host}:{port}/{database}\"\n \n db = superduper(db_uri, metadata_store=db_uri.replace('postgres://', 'postgresql://')) \n ```\n \n \n ```python\n from superduper import superduper\n \n user = \"superduperuser\"\n password = \"superduperpassword\"\n account = \"XXXX-XXXX\" # ORGANIZATIONID-USERID\n database = \"FREE_COMPANY_DATASET/PUBLIC\"\n \n snowflake_uri = f\"snowflake://{user}:{password}@{account}/{database}\"\n \n db = superduper(\n snowflake_uri, \n metadata_store='sqlite:///your_database_name.db',\n ) \n ```\n \n \n ```python\n from superduper import superduper\n \n user = 'default'\n password = ''\n port = 8123\n host = 'localhost'\n \n db = superduper(f\"clickhouse://{user}:{password}@{host}:{port}\", metadata_store=f'mongomock://meta') \n ```\n \n \n ```python\n from superduper import superduper\n \n db = superduper('duckdb://mydb.duckdb') \n ```\n \n \n ```python\n from superduper import superduper\n \n db = superduper(['my.csv'], metadata_store=f'mongomock://meta') \n ```\n \n \n ```python\n from superduper import superduper\n \n db = superduper('mongomock:///test_db') \n ```\n \n\n", - "---\nsidebar_label: Build A Trainable LLM\nfilename: build_a_trainable_llm.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Build A Trainable LLM\n\n**Create an LLM Trainer for training**\n\nThe parameters of this LLM Trainer are basically the same as `transformers.TrainingArguments`, but some additional parameters have been added for easier training setup.\n\n```python\nfrom superduper_transformers import LLM, LLMTrainer\n\ntrainer = LLMTrainer(\n identifier=\"llm-finetune-trainer\",\n output_dir=\"output/finetune\",\n overwrite_output_dir=True,\n num_train_epochs=3,\n save_total_limit=3,\n logging_steps=10,\n evaluation_strategy=\"steps\",\n save_steps=100,\n eval_steps=100,\n per_device_train_batch_size=1,\n per_device_eval_batch_size=1,\n gradient_accumulation_steps=2,\n max_seq_length=512,\n key=key,\n select=select,\n transform=transform,\n training_kwargs=training_kwargs,\n)\n```\n\n\n\n \n ```python\n trainer.use_lora = True \n ```\n \n \n ```python\n trainer.use_lora = True\n trainer.bits = 4 \n ```\n \n \n ```python\n !pip install deepspeed\n deepspeed = {\n \"train_batch_size\": \"auto\",\n \"train_micro_batch_size_per_gpu\": \"auto\",\n \"gradient_accumulation_steps\": \"auto\",\n \"zero_optimization\": {\n \"stage\": 2,\n },\n }\n trainer.use_lora = True\n trainer.bits = 4\n trainer.deepspeed = deepspeed \n ```\n \n \n ```python\n trainer.use_lora = True\n trainer.bits = 4\n trainer.num_gpus = 2 \n ```\n \n\nCreate a trainable LLM model and add it to the database, then the training task will run automatically.\n\n```python\nllm = LLM(\n identifier=\"llm\",\n model_name_or_path=model_name,\n trainer=trainer,\n model_kwargs=model_kwargs,\n tokenizer_kwargs=tokenizer_kwargs,\n)\n\ndb.apply(llm)\n```\n\n# Load the trained model\nThere are two methods to load a trained model:\n\n- **Load the model directly**: This will load the model with the best metrics (if the transformers' best model save strategy is set) or the last version of the model.\n- **Use a specified checkpoint**: This method downloads the specified checkpoint, then initializes the base model, and finally merges the checkpoint with the base model. This approach supports custom operations such as resetting flash_attentions, model quantization, etc., during initialization.\n\n\n\n \n ```python\n llm = db.load(\"model\", \"llm\") \n ```\n \n \n ```python\n from superduper_transformers import LLM\n experiment_id = db.show(\"checkpoint\")[-1]\n version = None # None means the last checkpoint\n checkpoint = db.load(\"checkpoint\", experiment_id, version=version)\n llm = LLM(\n identifier=\"llm\",\n model_name_or_path=model_name,\n adapter_id=checkpoint,\n model_kwargs=dict(load_in_4bit=True)\n ) \n ```\n \n\n", - "---\nsidebar_label: Answer question with LLM\nfilename: answer_question_with_llm.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Answer question with LLM\n\n\n\n \n ```python\n \n llm.predict(query) \n ```\n \n \n ```python\n from superduper import model\n from superduper.components.graph import Graph, input_node\n \n @model\n def build_prompt(query):\n return f\"Translate the sentence into German: {query}\"\n \n in_ = input_node('query')\n prompt = build_prompt(query=in_)\n answer = llm(prompt)\n prompt_llm = answer.to_graph(\"prompt_llm\")\n prompt_llm.predict(query)[0] \n ```\n \n \n ```python\n from superduper import model\n from superduper.components.graph import Graph, input_node\n \n prompt_template = (\n \"Use the following context snippets, these snippets are not ordered!, Answer the question based on this context.\\n\"\n \"{context}\\n\\n\"\n \"Here's the question: {query}\"\n )\n \n \n @model\n def build_prompt(query, docs):\n chunks = [doc[\"text\"] for doc in docs]\n context = \"\\n\\n\".join(chunks)\n prompt = prompt_template.format(context=context, query=query)\n return prompt\n \n \n in_ = input_node('query')\n vector_search_results = vector_search_model(query=in_)\n prompt = build_prompt(query=in_, docs=vector_search_results)\n answer = llm(prompt)\n context_llm = answer.to_graph(\"context_llm\")\n context_llm.predict(query) \n ```\n \n\n", - "---\nsidebar_label: Insert simple data\nfilename: insert_simple_data.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Insert simple data\n\nAfter turning on auto_schema, we can directly insert data, and superduper will automatically analyze the data type, and match the construction of the table and datatype.\n\n```python\nfrom superduper import Document\n\ntable_or_collection = db['documents']\n\nids = db.execute(table_or_collection.insert([Document(data) for data in datas]))\nselect = table_or_collection.select()\n```\n\n", - "---\ndescription: Find detailed technical documentation for Superduper's AI and database integration solutions. Access comprehensive guides, API references, and tutorials to effectively implement and utilize SuperDuper technologies in your projects. (Formerly SuperDuperDB)\n---\n\n\n Docs - Superduper\n\n\n# Welcome to Superduper!\n\nHi 👋 and welcome to the open-source Superduper project! \n\nSuperduper is a framework for building **AI-data** applications which are highly flexible, compositional and declarative, and deployable directly on major databases.\n\n:::info\nAn **AI-data** application is a new generation of application involving cross talk between AI models and data, which is updated \ndynamically in response to changing data, and supports a range of data queries, including queries involving AI model inferences.\n\nBasic examples include:\n\n- *Retrieval augmented generation*\n- *Data dependent retraining protocols*\n- *Semantic multimodal product search with text, image and product JSON formats.*\n\nThere is a whole world of AI-data applications out there waiting to be built.\nSuperduper is the perfect framework with which to get started!\n:::\n\n## What problem does Superduper solve?\n\nAI-data applications are highly complex. They require:\n\n- Maintaining a highly intricate state\n- Integrating with production data in databases\n- Deploying and maintaining many endpoints\n- Taking care of the life-cycle of AI models:\n - Feature computations\n - Training and re-training\n - Computation and caching of outputs\n- A range of infrastructual work, from deploying custom hardware, triggering auto-scaling,\n to deploying specialized solutions such as vector-search engines, model repositories and more\n\nThe fact that all of this is necessary explains the existence of the MLOPs, AIOps, LLMOps fields of engineering.\n\nWhat if none of this was necessary? What if AI engineers, data-scientist and decision makers, \ncould simply \"apply\" AI to the data in their data deployments? For example, the framework required would allow this type of command:\n\n```python\n apply ./path_to_app.zip your://database-uri\n```\n\nThat \"framework\" is `superduper`:\n\n```python\nsuperduper apply ./path_to_app.zip your://database-uri\n```\n\n## How does Superduper work?\n\nSuperduper is an AI-data application builder which is:\n\n- declarative \n- composable\n\n## Declarative paradigm\n\nSuperduper's main building block is class called a `Component`, which allows developers\nto build applications which \"declare\" the state they want the system to reach:\n\n- Which outputs should be kept up-to-date with which database input queries?\n- Which models should be deployed as endpoints?\n- Which models should be fine-tuned on which data prior to use?\n- Which outputs should be synchronized as vector-indexes?\n- Which computations should be run on a schedule?\n- Much, much more...\n\nThis aspect of the system is referred to as a declarative programming paradigm.\n\n## Compositionality\n\nSuperduper includes a range of `Component` types which may be easily subclassed and interchanged.\nFor example, if a developer has prototyped his model using an OpenAI LLM implementation, the LLM may be trivially exchanged for an on-premise, self-hosted Llama-3 implementation with a simple and predictable toggle in the codebase.\n\nFrom version 0.0.4 onwards, Superduper includes a range of plugins which developers may pick and choose from in open source, as well as a clear path for developers to build their own plugins. This plugin\narchitecture plays well with the compositional nature of the project.\n\n## Datalayer\n\nApplications are deployed on databases using a virtual AI-datalayer, referred to everywhere in this documentation as `db`.\n\nThis layer is composed of several important components, encompassing primary data, meta-data, artifacts and computation, which can be configured independently by the developer.\n\n## Superduper is open-sourced in Python under the Apache 2.0 license\n\nWe want to make Superduper the most inclusive and flexible AI-data framework around.\n\n:::note\nSuperduper pledges to retain the Apache 2.0 license as a key cornerstone \nof its philosophy and community ethos.\n:::\n\n### Superduper can handle classical AI/ machine learning paradigms...\n\n- classification\n- regression\n- forecasting\n- clustering\n- *and much, more more...*\n\n### As well as the most update to date techniques...\n\n- generative AI\n- LLMs\n- retrieval augmented generation (RAG)\n- computer vision\n- multimodal AI\n- *and much, more more...*\n\n![](/img/superduper.gif)\n\n## How can developers use Superduper?\n\nSuperduper boils down to 3 key patterns:\n\n#### 1. Connect to your data\n\n```python\nfrom superduper import superduper\n\ndb = superduper('')\n```\n\n#### 2. Apply AI to your data\n\n```python\n\ncomponent = ... # build your AI with anything from the \n # python ecosystem\n\ndb.apply(component)\n```\n\nEquivalently from the command line:\n\n```bash\nsuperduper apply .zip \n```\n\n#### 3. Query your data to obtain predictions, select data or perform vector-searches\n\n```python\nquery = db[''].select()\nquery.execute()\n```\n\n### What does apply AI to data mean?\n\n\"Applying AI\" to data can mean numerous things, which developers \nare able to determine themselves. Any of these things is possible:\n\n- Compute outputs on incoming data\n- Train a model on database data\n- Configure vector-search on database\n- Measure the performance of models\n- Configure models to work together\n\n### Why is the \"DB\" so important in AI?\n\nSuperduper uses the fact that AI development always starts with data, ends with data, and interfaces \nwith data from conception, to productionized deployment. Any environment which has a chance of uniting \nthe diverse tools and stakeholders involved in AI development, needs a single way \nfor AI models and algorithms to be connected to data. ***That way is Superduper***.\n\n:::important\nBy integrating AI directly at data's source, Superduper enables developers to avoid implementing MLops.\n:::\n\n### What integrations does Superduper include?\n\n#### Data\n\n- MongoDB\n- PostgreSQL\n- SQLite\n- Snowflake\n- MySQL\n- Oracle\n- MSSQL\n- Clickhouse\n- Pandas\n\n#### AI frameworks\n\n- OpenAI\n- Cohere\n- Anthropic\n- PyTorch\n- Sklearn\n- Transformers\n- Sentence-Transformers\n\n### What important additional aspects does Superduper include?\n\nDevelopers may:\n\n- Choose whether to deploy Superduper in single blocking process or in scalable, non-blocking mode via `ray`\n- Choose whether to use their own self-programmed home grown models, or integrate AI APIs and open-source frameworks\n- Choose which type of data they use, including images, videos, audio, or custom datatypes\n- Automatically version and track all functionality they use\n- Keep control over which data is exposed to API services (if any) by leveraging model self-hosting\n\n### Key Features:\n\n- **[Integration of AI with your existing data infrastructure](https://docs.superduper.io/docs/docs/walkthrough/apply_models):** Integrate any AI models and APIs with your databases in a single scalable deployment without the need for additional pre-processing steps, ETL, or boilerplate code.\n- **[Streaming Inference](https://docs.superduper.io/docs/docs/walkthrough/daemonizing_models_with_listeners):** Have your models compute outputs automatically and immediately as new data arrives, keeping your deployment always up-to-date.\n- **[Scalable Model Training](https://docs.superduper.io/docs/docs/walkthrough/training_models):** Train AI models on large, diverse datasets simply by querying your training data. Ensured optimal performance via in-build computational optimizations.\n- **[Model Chaining](https://docs.superduper.io/docs/docs/walkthrough/linking_interdependent_models/)**: Easily set up complex workflows by connecting models and APIs to work together in an interdependent and sequential manner.\n- **[Simple, but Extendable Interface](https://docs.superduper.io/docs/docs/fundamentals/procedural_vs_declarative_api)**: Add and leverage any function, program, script, or algorithm from the Python ecosystem to enhance your workflows and applications. Drill down to any layer of implementation, including the inner workings of your models, while operating Superduper with simple Python commands.\n- **[Difficult Data Types](https://docs.superduper.io/docs/docs/walkthrough/encoding_special_data_types/)**: Work directly in your database with images, video, audio, and any type that can be encoded as `bytes` in Python.\n- **[Feature Storing](https://docs.superduper.io/docs/docs/walkthrough/encoding_special_data_types):** Turn your database into a centralized repository for storing and managing inputs and outputs of AI models of arbitrary data types, making them available in a structured format and known environment.\n- **[Vector Search](https://docs.superduper.io/docs/docs/walkthrough/vector_search):** No need to duplicate and migrate your data to additional specialized vector databases - turn your existing battle-tested database into a fully-fledged multi-modal vector-search database, including easy generation of vector embeddings and vector indexes of your data with preferred models and APIs.", - "# `Plugin`\n\n- Supports a plugin system that dynamically loads Python modules and packages at runtime.\n- Supports functioning as subcomponents, providing dependency support for custom models and other local code.\n- Capable of applying to a database and storing in the artifact_store, exporting as a `superduper` format package for sharing with others.\n- Supports automatic installation of dependencies listed in the requirements.txt file under the plugin.\n\n***Usage pattern***\n\nCreate plugin\n\n```python\nfrom superduper.components.plugin import Plugin\nplugin_path = 'path/to/my_module.py'\nmy_plugin = Plugin(path=plugin_path)\n```\n\nPip install without python code\n\n```python\nfrom superduper.components.plugin import Plugin\n# If there is only one requirements file, the path must be a file that ends with requirements.txt.\nplugin = Plugin(path=\"deploy/installations/testenv_requirements.txt\")\n```\n\nPython package with requirements\n```python\nfrom superduper.components.plugin import Plugin\nplugin_path = 'path/to/my_package'\n# |_my_package\n# |_requirements.txt\n# |_file1.py\n# |_file2.py\n# |_sub_module\n# |_file_a.py\nmy_plugin = Plugin(path=plugin_path)\n```\n\nPython module with requirements\n\n> If you want to add requirements to a Python file, you can create a requirement_plugin as a submodule of this module. \n> Then, the requirement_plugin will be loaded prior to the Python code.\n```python\nfrom superduper.components.plugin import Plugin\nrequirements_path = 'path/to/my_requirements.txt'\nrequirement_plugin = Plugin(path=requirements_path)\n\nplugin_path = 'path/to/my_module.py'\nmy_plugin = Plugin(path=plugin_path, plugins=[requirement_plugin])\n```\n\nExport plugin\n\n```python\nfrom superduper.components.plugin import Plugin\nplugin_path = 'plugin_path'\nmy_plugin = Plugin(path=plugin_path)\n\nmy_plugin.export(\"exports/plugin\")\n```\n\nLoad plugin\n\n```python\nfrom superduper.components.plugin import Plugin\nmy_plugin = Plugin.read(\"exports/plugin\")\n```\n\nAs a sub-component\n\n```python\nfrom utils import function\nclass Model:\n def predict(self, X):\n return function(X)\n\nfrom superduper.components.plugin import Plugin\nplugin = Plugin(path=\"./utils.py\")\nmodel = Model(identifier=\"test\", plugins=[plugin])\ndb.apply(model)\n\n# Then we can execute db.load(\"model\", \"test\") from any location.\n```\n\n***Explanation***\n\nInitialization and installation\n\n- During plugin initialization, `superduper` loads the component’s Python module or package into `sys.modules`, allowing subsequent use of native import statements for plugin utilization.\n- If the plugin package includes a `requirements.txt`, dependencies are installed prior to loading the Python code.\n- The plugin is installed only once per process; if it detects that the same plugin has already been installed in the current runtime, the installation is skipped.\n\nUsage\n\n- When exported locally, the plugin component saves all necessary dependency files for the plugins into the `superduper` package, allowing for sharing to different locations.\n- When executing `db.apply(plugin)`, the necessary Python dependency environment files for the plugin are saved in the artifact_store. During `db.load(\"plugin\", \"plugin_identifier\")`, these files are downloaded to the local `~/.superduper/plugin/` directory, followed by the initialization and installation of the plugin.\n- As a sub-component, Superduper’s encode and decode logic ensures that the plugin is loaded prior to the parent component to maintain dependency integrity.\n\n\n***See also***\n\n- [superduper.components.plugin](../api/components/plugin.md)", - "# `Template`\n\n- A `Component` containing placeholders flagged with ``\n- A `Template` may be used as the basis for applying multiple `Component` instances\n- `Template` is leveraged by `Application`.\n- Snapshot allows users to know that their validation comparisons are apples-to-apples\n- A `Template` is useful for sharing, migrating and distributing AI components\n- A `Template` may be applied to any Superduper deployment\n\n***Usage pattern***\n\n```python\nfrom superduper import *\n\nm = Listener(\n model=ObjectModel(\n object=lambda x: x + 2,\n identifier='',\n ),\n select=db['=collection'].find(),\n key='',\n)\n\n# optional \"info\" parameter provides details about usage (depends on developer use-case)\nt = Template('my-template', template=m.encode())\n\n# doesn't trigger work/ computations\n# just \"saves\" the template and its artifacts\ndb.apply(t) \n\nlistener = t(key='my_key', collection='my_collection', model_id='my_id')\n\n# this now triggers standard functionality\ndb.apply(listener)\n```\n\n***See also***\n\n- [Application](./application.md)\n", - "# `Metric`\n\n- Wrapper around a function intended to validate model outputs\n- Function returns scalar value\n- Used in `Validation`, `Model` and `Trainer` to measure `Model` performance\n\n***Usage pattern***\n\n```python\nfrom superduper import Metric\n\ndef example_comparison(x, y):\n return sum([xx == yy for xx, yy in zip(x, y)]) / len(x)\n\nm = Metric(\n 'accuracy',\n object=example_comparison,\n)\n\ndb.apply(m)\n```\n\n***See also***\n\n- [Change-data capture](../cluster_mode/change_data_capture)\n- [Validation](./validation.md)", - "# `Application`\n\n- An `Application` ships a pre-configured functionality in a compact and easy to understand way\n\n***Dependencies***\n\n- [`Template`](./template.md)\n\n***Usage pattern***\n\n(Learn how to build a model [here](model))\n\n```python\nfrom superduper import Application\n\ntemplate = db.load('template', 'my_template')\n\napplication = template(my_variable_1='my_value_1',\n my_variable_2='my_value_2')\n\ndb.apply(application.copy())\n```\n", - "# `Dataset`\n\n- An immutable snapshot of a query saved to `db.artifact_store`\n- Used (currently) for validating model performance\n- Snapshot allows users to know that their validation comparisons are apples-to-apples\n\n***Usage pattern***\n\n(Learn how to build a model [here](model))\n\n```python\nfrom superduper import Listener\n\nds = Dataset(\n 'my-valid-data',\n select=db['my_table'].select(), # `.select()` selects whole table\n)\n\ndb.apply(ds)\n```\n\n***Explanation***\n\n- On creation `superduper` queries the data from the `db.databackend` based on the `select` parameter.\n- The data queries like this is saved as a persistent blob in the `db.artifact_store`.\n- When the dataset is reloaded, the `select` query is not executed again, instead the \n data is reloaded from the `db.artifact_store`. This ensures the `Dataset` is always \"the same\".\n- `Dataset` is handy for making sure model validations are comparable.", - "# `Model`\n\n- Wrap a standard AI model with functionality necessary for `superduper`\n- Configure validation and training of a model on database data\n\n***Dependencies***\n\n- [`Datatype`](./datatype.md)\n\n***(Optional dependencies)***\n\n- [`Validation`](./validation.md)\n- [`Trainer`](./trainer.md)\n\n***Usage pattern***\n\n:::note\nNote that `Model` is an abstract base class which cannot be called directly.\nTo use `Model` you should call any of its downstream implementations, \nsuch as [`ObjectModel`](../api/components/model.md#model-1) or models in the [AI-integrations](/docs/category/ai-integrations).\n:::\n\n***Important notes***\n\n`Model` instances can output data not-usually supported by your database.\nThis data will be encoded by default by `pickle`, but more control may be added\nby adding the parameters `datatype=...` or `output_schema=...`.\n\n## Implementations\n\nHere are a few `superduper` native implementations:\n\n**`ObjectModel`**\n\nUse a self-built model (`object`) or function with the system:\n\n```python\nfrom superduper import ObjectModel\n\nm = ObjectModel(\n 'my-model',\n object=lambda x: x + 2,\n)\n\ndb.apply(m)\n```\n\n**`QueryModel`**\n\nUse a `superduper` query to extract data from `db`\n\n```python\nfrom superduper.components.model import QueryModel\n\nquery = ... # build a select query\nm = QueryModel('my-query', select=query, key='')\n\ndb.apply(m)\n```\n\n**`APIModel`**\n\nRequest model outputs hosted behind an API:\n\n```python\nfrom superduper.components.model import APIModel\n\nm = APIModel('my-api', url='http://localhost:6666?token={MY_DEV_TOKEN}&model={model}&text={text}')\n\ndb.apply(m)\n```\n\n**`SequentialModel`**\n\nMake predictions on the basis of a sequence of models:\n\n```python\nfrom superduper.components.model import SequentialModel\n\nm = SequentialModel(\n 'my-sequence',\n models=[\n model1,\n model2,\n model3,\n ]\n)\n\ndb.apply(m)\n```\n\n***See also***\n\n- [Scikit-learn extension](../ai_integrations/sklearn)\n- [Pytorch extension](../ai_integrations/pytorch)\n- [Transformers extension](../ai_integrations/transformers)\n- [Llama.cpp extension](../ai_integrations/llama_cpp)\n- [Vllm extension](../ai_integrations/vllm)\n- [OpenAI extension](../ai_integrations/openai)\n- [Anthropic extension](../ai_integrations/anthropic)\n- [Cohere extension](../ai_integrations/cohere)\n- [Jina extension](../ai_integrations/jina)\n", - "# `Validation`\n\n- Validate a `Model` by attaching a `Validation` component\n\n***Dependencies***\n\n- [`Metric`](metric.md)\n- [`Dataset`](./dataset.md)\n\n***Usage pattern***\n\n```python\nfrom superduper import Validation\n\nvalidation = Validation(\n datasets=[dataset_1, ...],\n metrics=[metric_1, ...],\n key=('X', 'y') # key to use for the comparison\n)\n\nmodel = Model(\n ... # standard arguments\n validation=validation,\n)\n\n# Applying model recognizes `.validation` attribute\n# and validates model on the `.datasets` with `.metrics`\ndb.apply(model)\n```", - "# Trigger\n\n- Listen for update, inserts and deletes\n- Take a specific action contigent on these changes\n- Can be deployed on Superduper Enterprise\n\n***Usage pattern***\n\n```python\nfrom superduper.components.trigger import Trigger\n\nclass MyTrigger(Trigger):\n def if_change(self, ids):\n data = db[self.table].select_ids(ids).execute()\n for r in data:\n if 'urgent' in r['title']:\n db['notifications'].insert_one({\n 'status': 'urgent',\n 'msg': r['msg'],\n }).execute()\n\nmy_trigger = MyTrigger('urgent', on='insert')\n```", - "# `Listener`\n\n- apply a `model` to compute outputs on a query\n- outputs are refreshed every-time new data are added\n- outputs are saved to the `db.databackend`\n\n***dependencies***\n\n- [`Model`](./model.md)\n\n***usage pattern***\n\n(learn how to build a model [here](model))\n\n```python\nfrom superduper import Listener\nm = ... # build a model\nq = ... # build a select query\n\n# either...\nlistener = Listener(\n mode=m,\n select=q,\n key='x',\n)\n\n# or...\nlistener = m.to_listener(select=q, key='x')\n\ndb.apply(listener)\n```\n\n:::info\n*how do i choose the `key` parameter?*\n`key` refers to the field, or fields which \nwill be fed into the `model` as `*args` and `**kwargs`\n\nthe following forms are possible:\n- `key='x'`, \n- `key=('x','y')`, \n- `key={'x': 'x', 'y': 'y'}`, \n- `key=(('x',), {'y': 'y'})`,\n:::\n\n***see also***\n\n- [change-data capture](../cluster_mode/change_data_capture)", - "# `Schema`\n\n- Apply a dictionary of `FieldType` and `DataType` to encode columnar data\n- Mostly relevant to SQL databases, but can also be used with MongoDB\n- `Schema` leverages encoding functionality of contained `DataType` instances\n\n***Dependencies***\n\n- [`DataType`](./datatype.md)\n\n***Usage pattern***\n\n(Learn how to build a `DataType` [here](datatype))\n\n*Vanilla usage*\n\nTable can potentially include\nmore columns which don't need encoding:\n\n```python\nfrom superduper import Schema\n\nschema = Schema(\n 'my-schema',\n fields={\n 'img': dt_1, # A `DataType`\n 'video': dt_2, # Another `DataType`\n }\n)\n\ndb.apply(schema)\n```\n\n*Usage with SQL*\n\nAll columns should be flagged with either `DataType` or `dtype`:\n\n```python\nfrom superduper.backends.ibis import dtype\n\nschema = Schema(\n 'my-schema',\n fields={\n 'img': dt_1, # A `DataType`\n 'video': dt_2, # Another `DataType`\n 'txt', dtype('str'),\n 'numer', dtype('int'),\n }\n)\n\ndb.apply(schema)\n```\n\n*Usage with MongoDB*\n\nIn MongoDB, the non-`DataType` columns/ fields can be omitted:\n\n```python\nschema = Schema(\n 'my-schema',\n fields={\n 'img': dt_1, # A `DataType`\n 'video': dt_2, # Another `DataType`\n }\n)\n\ndb.apply(schema)\n```\n\n*Usage with `Model` descendants (MongoDB only)*\n\nIf used together with `Model`, the model is assumed to emit `tuple` outputs, and these \nneed differential encoding. The `Schema` is applied to the columns of output, \nto get something which can be saved in the `db.databackend`.\n\n```python\nfrom superduper import ObjectModel\n\nm = Model(\n 'my-model',\n object=my_object,\n output_schema=schema\n)\n\ndb.apply(m) # adds model and schema\n```\n\n***See also***\n\n- [Change-data capture](../cluster_mode/change_data_capture)", - "# `DataType`\n\n- Convert objects which should be added to the database or model outputs to encoded `bytes`\n- `DataType` encodings and decodings are fully configurable and can be written as functions\n- Users may choose to encode `bytes` to strings with `base64` encoding\n\n***Usage pattern***\n\nDefault `DataTypes`, called \"serializers\":\n\n```python\nfrom superduper.components.datatype import serializers\n\npickle_serializer = serializers['pickle']\n```\n\nBuild your own `DataType` which saves data directly in the database:\n\n```python\nfrom superduper import DataType\n\ndt = DataType(\n 'my-datatype',\n encoder=function_from_object_to_bytes,\n decoder=function_from_bytes_to_object,\n encodable='encodable',\n)\n\ndb.apply(dt)\n```\n\n:::info\n*How do I choose the `encodable` parameter?*\n\n\n| Value | Usage | \n| --- | --- |\n| `\"encodable\"` | `dt` adds object encoded as `bytes` directly to the `db.databackend` |\n| `\"artifact\"` | `dt` saves object encoded as `bytes` to the `db.artifact_store` and a reference to `db.databackend` |\n| `\"lazy_artifact\"` | as per `\"artifact\"` but `bytes` must be actively loaded when needed |\n| `\"file\"` | `dt` simply saves a reference to a file in `db.artifact_store`; user handles loading |\n:::\n\n***See also***\n\n- [Encoding-difficult data](../advanced_usage/encoding_difficult_data)", - "# `Trainer`\n\n- Train a `Model` by attaching a `Trainer` component\n\n***Usage pattern***\n\n(Learn how to build a `Model` [here](model))\n\n```python\nfrom superduper.ext. import \n\ntrainer = (\n 'my-trainer',\n select=train_query, # data to use for training\n key=('X', 'y'), # the columns/keys to use for training\n **training_params, # can vary greatly from framework to framework\n)\n\nmodel = Model(\n ... # standard arguments\n validation=validation, # validation will be executed after training\n trainer=trainer,\n)\n\n# Applying model recognizes `.trainer` attribute\n# and trains model on the `.trainer.select` attribute\ndb.apply(model)\n```", - "# `Table`\n\n- Use a table in your databackend database, which optionally has a `Schema` attached\n- Table can be a `MongoDB` collection or an SQL table.\n\n***Dependencies***\n\n- [`Schema`](./schema.md)\n\n***Usage pattern***\n\n(Learn how to build a `Schema` [here](schema))\n\n```python\nfrom superduper.backends.ibis import Table\n\ntable = Table(\n 'my-table',\n schema=my_schema\n)\n\ndb.apply(table)\n```\n\nIn MongoDB, the attached `schema` will be used as the default `Schema` for that `Table` (collection).", - "# Apply API\n\n:::info\nIn this section we re-use the datalayer variable `db` without further explanation.\nRead more about how to build it [here](../core_api/connect) and what it is [here](../fundamentals/datalayer_overview).\n:::\n\nAI functionality in superduper revolves around creating AI models, \nand configuring them to interact with data via the datalayer.\n\nThere are many decisions to be made and configured; for this superduper\nprovides the `Component` abstraction.\n\nThe typical process is:\n\n### 1. Create a component\n\nBuild your components, potentially including other subcomponents.\n\n```python\nfrom superduper import \n\ncomponent = (\n 'identifier',\n **kwargs # can include other components\n)\n```\n\n### 2. Apply the component to the datalayer\n\n\"Applying\" the component the `db` datalayer, also\napplies all sub-components. So only 1 call is needed.\n\n```python\ndb.apply(component)\n```\n\n### 3. Reload the component (if necessary)\n\nThe `.apply` command saves everything necessary to reload the component\nin the superduper system.\n\n```python\nreloaded = db.load('type_id', 'identifier') # `type_id`\n```\n\n### 4. Export the component (to share/ migrate)\n\nThe `.export` command saves the entirety of the component's parameters, \ninline code and artifacts in a directory:\n\n```python\ncomponent.export('my_component')\n```\n\nThe directory structure looks like this.\nIt contains the meta-data of the component as\nwell as a \"mini-artifact-store\". Together\nthese items make the export completely portable.\n\n```\nmy_component\n|_component.json // meta-data and imports of component\n|_blobs // directory of blobs used in the component\n| |_234374364783643764\n| |_574759874238947320\n|_files // directory of files used in the component\n |_182372983721897389\n |_982378978978978798\n```\n\nYou can read about the serialization mechanism [here](../production/superduper_protocol.md).\n\n## Read more\n\n```mdx-code-block\nimport DocCardList from '@theme/DocCardList';\n\n\n```\n", - "# `DataInit`\n\n- Used to automatically insert initialization data during application build.\n\n***Usage pattern***\n\n```python\nfrom superduper.components.dataset import DataInit\ndata = [{\"x\": i, \"y\": [1, 2, 3]} for i in range(10)]\ndata_init = DataInit(data=data, table=\"documents\", identifier=\"test_data_init\")\n\ndb.apply(data_init)\n```\n\n***Explanation***\n\n- When db.apply(data_init) is executed, DataInit inserts data into the specified table.", - "# `Checkpoint`\n\n- Save intermediate results of training via `superduper`\n- Load a different point of the training process by specifying `Checkpoint` explicitly\n- Particularly useful with deep-learning models\n\n***Usage pattern***\n\n```python\nfrom superduper import Model\nfrom superduper.components.training import Checkpoint\n\nclass MyModel(Model):\n checkpoints: t.List[Checkpoint]\n best_checkpoint: t.Optional[int] = None\n\n def __post_init__(self, db, artifacts):\n super().__post_init__(db, artifacts)\n\n if self.best_checkpoint is not None:\n self.load_weights(self.checkpoints[self.best_checkpoint])\n\n def load_weights(self):\n ... # custom load logic\n\nmy_model = MyModel('my-model')\n\nmy_model.checkpoints.append('path/to/model/weights-0.pt')\nmy_model.checkpoints.append('path/to/model/weights-1.pt')\nmy_model.best_checkpoint = 1\n\n# saves model as well as checkpoints to db.artifact_store\ndb.apply(my_model) \n\n# loads `self.checkpoints[1]`\nm = db.load('model', 'my-model')\n```", - "# `Cron Job`\n\n- Iterate computations, queries and actions on a crontab\n- Can be deployed on Superduper Enterprise\n\n***Usage pattern***\n\nCron-job can take any actions relating to `db`\nwhich is loaded as an attribute of the `Component`.\n\n```python\nimport datetime\nfrom superduper.components.cron_job import CronJob\n\nclass MyCronJob(CronJob):\n table: str\n\n # overwriting this function defines actions to be \n # taken on a schedule\n def run(self):\n results = list(self.db[self.table].select())\n\n date = str(datetime.now())\n\n with open(f'{date}.bak', 'wb') as f:\n json.dump(results)\n \n # for example, backing up a collection every day\n os.system(f'aws s3 cp {date}.bak s3://my-bucket/{date}.bak')\n\ncron_job = MyCronJob(table='documents', schedule='0 0 * * * *')\n\ndb.apply(cron_job)\n```", - "# `VectorIndex`\n\n- Wrap a `Listener` so that outputs are searchable\n- Can optionally take a second `Listener` for multimodal search\n- Applies to `Listener` instances containing `Model` instances which output vectors, arrays or tensors\n- Maybe leveraged in superduper queries with the `.like` operator\n\n***Dependencies***\n\n- [`Listener`](./listener.md)\n\n***Usage pattern***\n\n```python\nfrom superduper import VectorIndex\n\nvi = VectorIndex(\n 'my-index',\n indexing_listener=listener_1 # defined earlier calculates searchable vectors\n)\n\n# or directly from a model\nvi = model_1.to_vector_index(select=q, key='x')\n\n# or may use multiple listeners\nvi = VectorIndex(\n 'my-index',\n indexing_listener=listener_1\n compatible_listener=listener_2 # this listener can have `listener_2.active = False`\n)\n\ndb.apply(vi)\n```\n\n***See also***\n\n- [vector-search queries](../query_api/vector_search)\n- [vector-search service](../cluster_mode/vector_comparison_service)", - "---\nsidebar_position: 18\n---\n\n# Applying `Model` instances to `db`\n\nThere are 4 key AI `Model` sub classes, see [here](../apply_api/model) for detailed usage:\n\n| Path | Description |\n| --- | ---\n| `superduper.components.model.ObjectModel` | Wraps a Python object to compute outputs |\n| `superduper.components.model.APIModel` | Wraps a model hosted behind an API to compute outputs |\n| `superduper.components.model.QueryModel` | Maps a Database select query with a free variable over inputs |\n| `superduper.components.model.SequentialModel` | Computes outputs sequentially for a sequence of `Model` instances |\n\nAs well as these key sub-classes, we have classes in the `superduper.ext.*` subpackages:\nSee [here](../ai_integrations/) for more information.\n\nWhenever one of these `Model` descendants is instantiated, and `db.apply(model)` is called, \nseveral things can (do) happen:\n\n1. The `Model`'s metadata is saved in the `db.metadata_store`.\n2. It's associated data (e.g.) model is saved in the `db.artifact_store`.\n3. (Optional) if the `Model` has a `Trainer` attached, then the `Model` is trained/ fit on the specified data.\n4. (Optional) if the `Model` has an `Evaluation` method attached, then the `Model` is evaluated on the specified data.\n\n", - "# LLMs\n\nSuperduper allows users to work with LLM services and models\n\nHere is a table of LLMs supported in Superduper:\n\n| Class | Description |\n| --- | --- |\n| `superduper.ext.transformers.LLM` | Useful for trying and fine-tuning a range of open-source LLMs |\n| `superduper.ext.vllm.vLLM` | Useful for fast self-hosting of LLM models with CUDA |\n| `superduper.ext.llamacpp.LlamaCpp` | Useful for fast self-hosting of LLM models without requiring CUDA |\n| `superduper.ext.openai.OpenAIChatCompletion` | Useful for getting started quickly |\n| `superduper.ext.anthropic.AnthropicCompletion` | Useful alternative for getting started quickly |\n\nYou can find the snippets [here](../reusable_snippets/build_llm)\n\n:::tip\nConnect your LLM to data and vector-search using `SequentialModel` or `GraphModel`.\n:::\n", - "# Training models directly on your datastore\n\n`Model` instances may be trained if a `trainer` is set on the `Model` when `db.apply` is called.\nWhen models are trained, if `CFG.cluster.compute` has been configured with a `ray` scheduler, then `superduper` deploys [a job on the connected `ray` cluster](../production_features/non_blocking_ray_jobs).\n\n## Basic pattern\n\n```python\nfrom superduper.ext. import Trainer\nfrom superduper.ext. import \n\ndb.apply(\n (\n *args, \n trainer=Trainer(**trainer_kwargs),\n **kwargs,\n )\n)\n```\n\n## Fitting/ training models by framework\n\nNot all `Model` types are trainable. We support training for the following frameworks:\n\n| Framework | Training Link |\n| --- | --- |\n| Scikit-Learn | [link](../ai_integrations/sklearn#training) |\n| PyTorch | [link](../ai_integrations/pytorch#training) |\n| Transformers | [link](../ai_integrations/transformers#training) |\n\n", - "# Models\n\nA key `Component` type in Superduper is `Model` and its descendants.\nThe intended usage is that `Model` wraps classical AI and machine learning models, \nAI APIs, as well as important processing steps involved in building such models, \nsuch as feature-computation.\n\nSee [here](../apply_api/model) for basic usage. This section gives detailed\nusage information as well as information about building your own model types.\n\n## Read more\n\n```mdx-code-block\nimport DocCardList from '@theme/DocCardList';\n\n\n```\n", - "# Configuring models to ingest features from other models\n\nThere are two ways to connect models in Superduper:\n\n- via interdependent `Listeners`\n- via the `Graph` component\n\nIn both cases, the first step is define the computation graph using \na simple formalism.\n\n## Building a computation graph\n\nHere is an example of building a graph with 3 members:\n\n```python\nfrom superduper.components.graph import document_node\nfrom superduper import ObjectModel\n\nm1 = ObjectModel('m1', object=lambda x: x + 1)\nm2 = ObjectModel('m2', object=lambda x: x + 2)\nm3 = ObjectModel('m3', object=lambda x, y: x * y)\n\ninput = document_node('x1', 'x2')\n\n# `outputs` specifies in which field the outputs will be cached/ saved\nout1 = m1(x=input['x1'], outputs='o1')\nout2 = m2(x=input['x2'], outputs='o2')\nout3 = m3(x=out1, y=out2, outputs='o3')\n```\n\nThe variable `out3` now contains the computation graph in `out3.parent_graph`.\n\nIn order to use this graph, developers may choose between creating a `Model`\ninstance which passes inputs recursively through the graph:\n\n```python\n>>> graph_model = out3.to_graph('my_graph_model')\n>>> graph_model.predict({'x1': 1, 'x2': 2})\n6\n```\n\nand creating a `Stack` of `Listener` instances which can be applied with `db.apply`\nwhere intermediate outputs are cached in `db.databackend`.\nThe order in which these listeners are applied respects \nthe graph topology.\n\n```python\nq = db['my_documents'].find()\nstack = out3.to_listeners(q, 'my_stack')\ndb.apply(stack)\n```\n", - "# Creating embeddings\n\nSuperduper supports a number of embedding models which may be used to create\nvectors ready for downstream tasks, including vector-search\n\nHere is an overview of pre-packaged embedding models:\n\n| Class | \n| --- | \n| `superduper.ext.sentence_transformers.SentenceTransformer` |\n| `superduper.ext.openai.OpenAIEmbeddings` | \n| `superduper.ext.cohere.CohereEmbeddings` |", - "# Key methods of `Model`\n\nAll usage in `superduper` proceeds by changing or setting the attributes of a `Component`\nand then calling `db.apply`. \n\nHowever it may be useful to know that the following methods specific to `Model` play a key role.\nSee [here](../apply_api/overview#key-methods) for an overview of key-methods specific to `Component`.\n\n| Method | Description | Optional |\n| --- | --- | --- |\n| `Model.predict` | Predict on a single data-point | `FALSE` | \n| `Model.predict_batches` | Predict on batches of data-points | `FALSE` |\n| `Model.predict_in_db` | Predict and save predictions in `db` | `FALSE` |\n| `Model.predict_in_db_job` | `predict_in_db` as compute job | `FALSE` |\n| `Model.validate` | Validate on datasets with metrics | `FALSE` |\n| `Model.validate_in_db` | Validate on datasets with metrics and save in `db` | `FALSE` |\n| `Model.validate_in_db_job` | `validate_in_db` as job | `FALSE` |\n| `Model.fit` | Fit on datasets | `TRUE` |\n| `Model.fit_in_db` | Fit on data in `db` | `TRUE` |\n| `Model.fit_in_db_job` | `.fit_in_db` as job | `TRUE` |\n", - "# Computing model outputs with listeners\n\n## Usage\n\n```python\ndb.apply(\n Listener(\n model=my_model,\n key='my-key',\n select=,\n predict_kwargs={**},\n )\n)\n```\n\n## Outcome\n\nIf a `Listener` has been created, whenever new data is added to `db`, \nthe `Model` instance is loaded and outputs as computed with `Model.predict` are evaluated on the inserted data.\n\n:::info\nIf [change-data-capture (CDC)](../production/change_data_capture.md) has been configured, \ndata may even be inserted from third-party clients such as `pymongo`, and is nonetheless still processed\nby configured `Listeners` via the CDC service.\n:::", - "# Evaluating models\n\nSee [here](../apply_api/validation.md).", - "# Bring your own models\n\nThere are two ways to bring your own computations\nand models to Superduper.\n\n1. Wrap your own Python functions\n2. Write your own `Model` sub-classes\n\n## Wrap your own Python functions\n\nThis serializes a Python object or class:\n\n```python\nfrom superduper import model\n\n@model\ndef my_model(x, y):\n return x + y\n```\n\nAdditional arguments may be provided to the decorator from `superduper.components.model.ObjectModel`:\n\n```python\n@model(num_workers=4)\ndef my_model(x, y):\n return x + y\n```\n\nSimilarly the following snippet saves the source code of a python object instead of serializing the object:\n\n```python\nfrom superduper import code\n\n@code\ndef my_other_model(x, y):\n return x * y\n```\n\nThese decorators may also be applied to `callable` classes.\nIf your class has important state which should be serialized with the class, \nthen use `model` otherwise you can use `codemodel`:\n\n```python\nfrom superduper import ObjectModel, model\n\n@model\nclass MyClass:\n def __call__(self, x):\n return x + 2\n\nm = MyClass()\n\nassert isinstance(m, ObjectModel)\nassert m.predict(2) == 4\n```\n\nAs before, additional arguments can be supplied to the decorator:\n\n```python\nfrom superduper import vector, DataType, model\n\n@model(datatype=vector(shape=(32, )))\nclass MyClass:\n def __call__(self, x):\n return [x + 2] * 32\n\nm = MyClass()\n\nassert isinstance(m.datatype, DataType)\n```\n\n## Import classes and functions directly\n\nThis may be more intuitive to some developers, \nand allows functionality to be invoked \"directly\" \nfrom third-party packages:\n\n```python\nfrom superduper.ext.auto.sklearn.svm import SVC\n```\n\n## Create your own `Model` subclasses\n\nDevelopers may create their own `Model` sub-classes, and deploy these directly to `superduper`.\nThe key methods the developers need to create are:\n\n- `predict`\n- Optionally `predict_batches`, to speed up batching\n- Optionally `fit`\n\n### Minimal example with `prediction`\n\nHere is a simple sub-class of `Model`:\n\n```python\nfrom superduper.components.model import Model\nimport typing as t\n\nclass CustomModel(Model):\n signature: t.ClassVar[str] = '**kwargs'\n my_argument: int = 1\n\n def predict(self, x, y):\n return x + y + self.my_argument\n```\n\nThe addition of `signature = **kwargs` controls how the individual datapoints in the dataset \nare emitted, for consumption by the internal workings of the model\n\n### Including datablobs which can't be converted to JSON\n\nIf your model contains large data-artifacts or non-JSON-able content, then \nthese items should be labelled with [a `DataType`](../apply_api/datatype).\n\nOn saving, this will allow Superduper to encode their values and save the result\nin `db.artifact_store`.\n\nHere is an example which includes a `numpy.array`:\n\n```python\nimport numpy as np\nfrom superduper.ext.numpy import array\n\n\nclass AnotherModel(Model):\n _artifacts: t.ClassVar[t.Any] = [\n ('my_array', array)\n ]\n signature: t.ClassVar[str] = '**kwargs'\n my_argument: int = 1\n my_array: np.ndarray\n\n def predict(self, x, y):\n return x + y + self.my_argument + self.my_array\n\nmy_array = numpy.random.randn(100000, 20)\nmy_array_type = array('my_array', shape=my_array.shape, encodable='lazy_artifact')\ndb.apply(my_array_type)\n\nm = AnotherModel(\n my_argument=2,\n my_array=my_array,\n artifacts={'my_array': my_array_type},\n)\n```\n\nWhen `db.apply` is called, `m.my_array` will be converted to `bytes` with `numpy` functionality\nand a reference to these `bytes` will be saved in the `db.metadata`.\nIn principle any `DataType` can be used to encode such an object.\n", - "# Deleting data\n\n:::note\nThis functionality is only supported for MongoDB `db.databackend` implementations.\nFor SQL databases, users should drop unwanted tables or use native clients\nto delete data.\n:::\n\nDelete queries follow exactly the same [pattern as insert queries](./basic_insertion). For example:\n\n```python\ndeleted_ids, jobs = db.execute(my_collection.delete_many({}))\n```", - "# Setting up vector-search\n\nSetting up vector-search involves \"applying\" a `VectorIndex` component to the datalayer `db`.\nRead [here](../apply_api/vector_index.md) for information about how to do this.", - "# Execute API\n\nSuperduper implements 2 main classes of `db.databackend`:\n\n- [MongoDB](../data_integrations/mongodb)\n- [SQL backends](../data_integrations/sql)\n\nCorrespondingly, Superduper currently has 2 flavours of query API:\n\n- [`pymongo`](https://pymongo.readthedocs.io/en/stable/)\n- [`ibis`](https://ibis-project.org/)\n\n## Base\n\nA few commands are shared in common by all supported databackends:\n\n- `db[\"table_name\"].insert(data)`\n- `db[\"table_name\"].select()`\n\nFor more specific commands, one should use one of the two following APIs.\n\n## PyMongo\n\n`pymongo` is the official MongoDB client for Python. It supports \ncompositional queries, leveraging the BSON format for encoding \nand retrieving data.\n\n## Ibis\n\n`ibis` is a Python library with a uniform compositional approach to building\nSQL queries.", - "# Vector-search\n\nSuperduper aims to provide first-class support for \nvector-search, including embedding computation in preparation\nand run-time, as well as executing the fast vector-comparison \nand returning results in a way compatible with standard database\nqueries.\n\n## Read more\n\n```mdx-code-block\nimport DocCardList from '@theme/DocCardList';\n\n\n```\n", - "# Selecting data\n\nSelecting data involves building a compositional query \nstaring with a table of collection, and repeatingly calling\nmethods to build a complex query:\n\n```python\nq = db['table_name'].method_1(*args_1, **kwargs_1).method_2(*args_2, **kwargs_2)....\n```\n\nAs usual, the query is executed with:\n\n```\nq.execute()\n```\n\n## Read more\n\n```mdx-code-block\nimport DocCardList from '@theme/DocCardList';\n\n\n```", - "# Updating data\n\n:::note\nThis functionality is only supported for MongoDB `db.databackend` implementations\n:::\n\nUpdate queries follow exactly the same [pattern as insert queries](./basic_insertion). For example:\n\n```python\nupdated_ids, jobs = db.execute(my_collection.update_many({}, {'$set': {'brand': 'Adidas'}}))\n```", - "# Vector search queries\n\nVector search queries are built with the `.like` operator.\nThis allows developers to combine standard database with vector-search queries.\nThe philosophy is that developers do not need to convert their inputs \ninto vector's themselves. Rather, this is taken care by the specified \n[`VectorIndex` component](../apply_api/vector_index).\n\nThe basic schematic for vector-search queries is:\n\n```python\ntable_or_collection\n .like(Document(), vector_index='') # the operand is vectorized using registered models\n .filter_results(*args, **kwargs) # the results of vector-search are filtered\n```\n\n***or...***\n\n```python\ntable_or_collection\n .filter_results(*args, **kwargs) # the results of vector-search are filtered\n .like(Document(),\n vector_index='') # the operand is vectorized using registered models\n```\n\n## MongoDB\n\n```python\nfrom superduper.ext.pillow import pil_image\nfrom superduper import Document\n\nmy_image = PIL.Image.open('test/material/data/test_image.png')\n\nq = db['my_collection'].find({'brand': 'Nike'}).like(Document({'img': pil_image(my_image)}), \n vector_index='')\n\nresults = q.execute()\n```\n\n## SQL\n\n```python\nt = db['my_table']\nt.filter(t.brand == 'Nike').like(Document({'img': pil_image(my_image)}))\n\nresults = db.execute(q)\n```\n\n", - "# Basic insertion\n\nSuperduper supports inserting data wrapped as dictionaries in Python.\nThese dictionaries may contain basic JSON-compatible data, but also \nother data-types to be handled with `DataType` components. All data inserts are wrapped with the `Document` wrapper:\n\n```python\ndata = ... # an iterable of dictionaries\n```\n\nFor example, first get some [sample data](../reusable_snippets/get_useful_sample_data.md):\n\n```bash\n!curl -O https://superduper-public-demo.s3.amazonaws.com/text.json\n```\n\nThen load the data:\n\n```python\nwith open('./text.json') as f:\n data = json.load(f)\n```\n\n## Usage pattern\n\n```python\nids, jobs = db['collection-name'].insert(data).execute()\n```\n\n## MongoDB\n\n```python\nids, jobs = db['collection-name'].insert_many(data).execute()\n```\n\nA `Schema` which differs from the standard `Schema` used by `\"collection-name\"` may \nbe used with:\n\n```python\nids, jobs = db['collection-name'].insert_many(data).execute(schema=schema_component)\n```\n\nRead about this here `Schema` [here](../apply_api/schema.md).\n\n## SQL\n\n```python\nids, jobs = db['table-name'].insert(data)\n```\nIf no `Schema` has been set-up for `table-name\"` a `Schema` is auto-inferred.\nData not handled by the `db.databackend` is encoded by default with `pickle`.\n\n## Monitoring jobs\n\nThe second output of this command gives a reference to the job computations \nwhich are triggered by the `Component` instances already applied with `db.apply(...)`.\n\nIf users have configured a `ray` cluster, the jobs may be monitored at the \nfollowing uri:\n\n```python\nfrom superduper import CFG\n\nprint(CFG.cluster.compute.uri)\n```", - "# MongoDB select queries\n\nSuperduper supports the `pymongo` query API to build select queries.\nThere is one slight difference however, since queries built with `pymongo`'s formalism\nare executed lazily:\n\nWhereas in `pymongo` one might write:\n\n```python\nclient.my_db.my_collection.find_one()\n```\n\nwith `superduper` one would write:\n\n```python\nresult = db['my_collection'].find_one().execute()\n```\n", - "# Data inserts\n\nSuperduper allows developers to insert data from a variety of sources, \nencoding and decoding objects, such as images and videos, not usually handled \nexplicitly by the `db.databackend`.\n\n## Read more\n\n```mdx-code-block\nimport DocCardList from '@theme/DocCardList';\n\n\n```", - "---\nsidebar_position: 15\n---\n\n# Working with external data sources\n\nSuperduper supports data added from external data-sources.\nWhen doing this, Superduper supports:\n\n- web URLs\n- URIs of objects in `s3` buckets\n\nThe trick is to pass the `uri` parameter to an encoder, instead of the raw-data.\nHere is an example where we add a `.pdf` file directly from a location \non the public internet.\n\n```python\nimport io\nfrom PyPDF2 import PdfReader\n\ndef load_pdf(bytes):\n text = []\n for page in PdfReader(io.BytesIO(bytes)).pages:\n text.append(page.extract_text())\n return '\\n----NEW-PAGE----\\n'.join(text)\n\n# no `encoder=...` parameter required since text is not converted to `.pdf` format\npdf_enc = Encoder('my-pdf-encoder', decoder=load_pdf)\n\nPDF_URI = (\n 'https://papers.nips.cc/paper_files/paper/2012/file/'\n 'c399862d3b9d6b76c8436e924a68c45b-Paper.pdf'\n)\n\n# This command inserts a record which refers to this URI\n# and also downloads the content from the URI and saves\n# it in the record\ndb['pdf-files'].insert_one(Document({'txt': pdf_enc(uri=PDF_URI)})).execute()\n```\n\nNow when the data is loaded from the database, it is loaded as text:\n\n```python\n>>> r = collection.find_one().execute()\n>>> print(r['txt'])\n```", - "# Using a database's native vector search\n\nDatabases increasingly include their own vector-comparison and search operations \n(comparing one vector with others). In order to use this, include \nthis configuration in your configuration setup:\n\n```yaml\ncluster:\n vector_search:\n type: native\n```\n\n***or***\n\n```bash\nexport SUPERDUPER_CLUSTER_VECTOR_SEARCH_TYPE=native\n```\n\nIf `superduper` detects this configuration, it uses the inbuilt mechanism \nof your `db.databackend` to perform the vector-comparison.\n\nCurrently Superduper supports the native implementation of these databases:\n\n- MongoDB Atlas\n\nMore integrations are on the way.", - "# (Optional) Setting up tables and encodings\n\nSuperduper has flexible support for data-types. In both MongoDB and SQL databases,\none can uses `superduper.DataType` to define one's own data-types.\n\nIf no-datatypes are provided, `superduper` [uses fallbacks](./auto_data_types.md) to encode and decode data.\nTo gain more-control, developers may use the `DataType` and `Schema` components.\n\n## `DataType` abstraction\n\nThe `DataType` class requires two functions which allow the user to go to-and-from `bytes`.\nHere is an `DataType` which encodes `numpy.ndarray` instances to `bytes`:\n\n```python\nimport numpy\nfrom superduper import DataType\n\nmy_array = DataType(\n 'my-array',\n encoder=lambda x: memoryview(x).tobytes(),\n decode=lambda x: numpy.frombuffer(x),\n)\n```\n\nHere's a more interesting `DataType` which encoders audio from `numpy.array` format to `.wav` file `bytes`:\n\n```python\nimport librosa\nimport io\nimport soundfile\n\ndef decoder(x):\n buffer = io.BytesIO(x)\n return librosa.load(buffer)\n\ndef encoder(x):\n buffer = io.BytesIO()\n soundfile.write(buffer)\n return buffer.getvalue()\n\naudio = DataType('audio', encoder=encoder, decoder=decoder)\n```\n\nIt's completely open to the user how exactly the `encoder` and `decoder` arguments are set.\n\nYou may include these `DataType` instances in models, data-inserts and more. You can also directly \nregister the `DataType` instances in the system, using:\n\n```python\ndb.apply(my_array)\ndb.apply(audio)\n```\n\nTo reload (for instance in another session) do:\n\n```python\nmy_array_reloaded = db.load('datatype', 'my_array')\naudio_reloaded = db.load('datatype', 'audio')\n```\n\n:::tip\nMany of the `superduper` extensions come with their own pre-built `DataType` instances.\nFor example:\n\n- `superduper.ext.pillow.pil_image`\n- `superduper.ext.numpy.array`\n- `superduper.ext.torch.tensor`\n:::\n\nRead more about `DataType` [here](../apply_api/datatype).\n\n## Create a `Schema`\n\nThe `Schema` component wraps several columns of standard data or `DataType` encoded data; it \nmay be used with MongoDB and SQL databases, but is only necessary for SQL.\n\nHere is a `Schema` with three columns, one of the columns is a standard data-type \"str\".\nThe other 2 are given by the `DataType` instances defined above.\n\n```python\nfrom superduper import Schema\nfrom superduper.ext.pillow import pil_image\n\nmy_schema = Schema(\n 'my-schema',\n fields={'txt': 'str', 'audio': audio, 'img': pil_image}\n)\n\n# save this for later use\ndb.apply(my_schema)\n```\n\n### Create a table with a `Schema`\n\nIf a `Table` is created with a `Schema`, all data inserted to this \ntable will use that `Schema`.\n\n```python\nfrom superduper import Table\n\ndb.apply(Table('my-table', schema=my_schema))\n```\n\nIn MongoDB this `Table` refers to a MongoDB collection, otherwise\nto an SQL table.\n\nThen when data is inserted, it will use this `my_schema` object:\n\n```python\ndb['my-table'].insert[_many](data).execute()\n```", - "# Predictions\n\nModel predictions may be deployed by calling `Model.predict_batches` or `Model.predict` directly.\n\n```python\nm = db.load('model', 'my-model')\n\n# *args, **kwargs depend on model implementation\nresults = m.predict(*args, **kwargs)\n```\n\nAn alternative is to construct a prediction \"query\" as follows:\n\n```python\n# *args, **kwargs depend on model implementation\ndb['my-model'].predict(*args, **kwargs).execute()\n```\n\nThe results should be the same for both versions.\n", - "# Automatic data-types\n\nA major challenge in uniting classical databases with AI, \nis that the types of data used in AI are often not supported by your database.\n\nTo solve this problem, `superduper` has the abstractions [`DataType`](../apply_api/datatype.md) and [`Schema`](../apply_api/schema.md).\n\nTo save developers time, by default, `superduper` recognizes the type of data and constructs a `Schema` based on this inference.\nTo learn more about setting these up manually read [the following page](./data_encodings_and_schemas.md).\n\n## Basic usage\n\nTo learn about this feature, try these lines of code, based on sample image data we've prepared.\n\n```bash\ncurl -O https://superduper-public-demo.s3.amazonaws.com/images.zip && unzip images.zip\n```\n\n```python\nimport os\nimport PIL.Image\n\nfrom superduper import superduper\n\ndb = superduper('mongomock://test')\n\nimages = [PIL.Image.open(f'images/{x}') for x in os.listdir('images') if x.endswith('.png')]\n\n# inserts the images into `db` recognizing datatypes automatically\ndb['images'].insert_many([{'img': img} for img in images]).execute()\n```\n\nNow if you inspect which components are available, you will see that 2 components have been added to \nthe system:\n\n```python\ndb.show()\n```\n\n
\n Outputs\n
\n        ```\n        [{'identifier': 'pil_image', 'type_id': 'datatype'},\n         {'identifier': 'AUTO:img=pil_image', 'type_id': 'schema'}]\n        ```\n    
\n
\n\nTo verify that the data types were correctly inferred, we can retrieve a single record.\nThe record is a `Document` which wraps a dictionary with important information:\n\n```python\nr = db['images'].find_one().execute()\nr\n```\n\n
\n Outputs\n
\n        ```\n        Document({'img': , '_fold': 'train', '_schema': 'AUTO:img=pil_image', '_id': ObjectId('6658610912e50a99219ba587')})\n        ```\n    
\n
\n\n\nBy calling the `.unpack()` method, the original data is decoded and unwrapped from the `Document`.\nThe result in this case is a Python `pillow` image, which may be used as direct input \nto functions from, for instance, `torchvision` or `transformers`.\n\n```python\nr.unpack()['img']\n```\n\n
\n Outputs\n
\n ![](/listening/31_0.png)\n
\n
", - "---\nsidebar_position: 16\n---\n\n# Working with and inserting large pieces of data\n\nSome applications require large data-blobs and objects, which are either larger than the objects which are supported by the underlying database, or which will degrade performance of the database if stored directly. For example:\n\n- large images\n- large audio\n- videos\n\nIn order to handle such data, Superduper provides a few options when \ncreating a `DataType` via the `encodable` parameter.\n\n## Artifact store reference with `encodable='artifact'`\n\nWhen creating a `DataType` with `encodable='artifact'`, \nthe data encoded by the `DataType` is saved to the `db.artifact_store` \nand a reference in saved in the `db.databackend`\n\nFor example, if you try the following snippet:\n\n```python\nimport pickle\nimport uuid\nfrom superduper import DataType, Document, superduper, Table, Schema\n\ndb = superduper('mongomock://test', artifact_store='filesystem://./artifacts')\n\ndt = DataType(\n 'my-artifact',\n encoder=lambda x, info: pickle.dumps(x),\n decoder=lambda x, info: pickle.loads(x),\n encodable='artifact',\n)\n\nschema = Schema(identifier='schema', fields={'x': dt})\ntable = Table('my_collection', schema=schema)\n\ndb.apply(table)\n\nmy_id = str(uuid.uuid4())\n\ndb['my_collection'].insert_one(Document({'id': my_id, 'x': 'This is a test'})).execute()\n```\n\nIf you now reload the data with this query:\n\n```python\n>>> r = db.execute(db['my_collection'].find_one({'id': my_id}))\n>>> r\nDocument({'id': 'a9a01284-f391-4aaa-9391-318fc38303bb', 'x': 'This is a test', '_fold': 'train', '_id': ObjectId('669fae8ccdaeae826dec4784')})\n```\n\nYou will see that `r['x']` is exactly `'This is a test'`, however, \nwith a native MongoDB query, you will find the data for `'x'` missing:\n\n```python\n>>> db.databackend.conn.test.my_collection.find_one() \n{'id': 'a9a01284-f391-4aaa-9391-318fc38303bb',\n 'x': '&:blob:866cf8526595d3620d6045172fb16d1efefac4b1',\n '_fold': 'train',\n '_schema': 'schema',\n '_builds': {},\n '_files': {},\n '_blobs': {},\n '_id': ObjectId('669fae8ccdaeae826dec4784')}\n```\n\nThis is because the data is stored in the filesystem/ artifact store `./artifacts`.\nYou may verify that with this command:\n\n```bash\niconv -f ISO-8859-1 -t UTF-8 artifacts/866cf8526595d3620d6045172fb16d1efefac4b1\n```\n\nThe Superduper query reloads the data and passes it to the query result, \nwithout any user intervention.\n\n## Just-in-time loading with `encodable='lazy_artifact'`:\n\nIf you specify `encodable='lazy_artifact'`, then the data \nis only loaded when a user calls the `.unpack()` method.\nThis can be useful if the datapoints are very large, \nand should only be loaded when absolutely necessary.\n\nTry replacing the creation of `dt` with this command:\n\n```python\ndt = DataType(\n 'my-artifact',\n encoder=lambda x, info: pickle.dumps(x),\n decoder=lambda x, info: pickle.loads(x),\n encodable='lazy_artifact',\n)\n```\n\nand then execute the same lines as before.\nYou will find that:\n\n```python\n>>> r = db.execute(my_collection.find_one({'id': my_id}))\n>>> r\nDocument({'id': 'b2a248c7-e023-4cba-9ac9-fdc92fa77ae3', 'x': LazyArtifact(identifier='', uuid='c0db12ad-2684-4e39-a2ba-2748bd20b193', datatype=DataType(identifier='my-artifact', uuid='6d72b346-b5ec-4d8b-8cba-cddec86937a3', upstream=None, plugins=None, encoder= at 0x125e33760>, decoder= at 0x125c4e320>, info=None, shape=None, directory=None, encodable='lazy_artifact', bytes_encoding='Bytes', intermediate_type='bytes', media_type=None), uri=None, x=), '_fold': 'train', '_id': ObjectId('669faf9dcdaeae826dec4789')})\n>>> r['x'].x\n\n```\n\nHowever, after calling `.unpack(db)`:\n\n```python\n>>> r = r.unpack()\n>>> r['x']\n'This is a test'\n```\n\nThis allows `superduper` to build efficient data-loaders and model loading mechanisms.\nFor example, when saving model data to the artifact-store, the default `encodable` is `'lazy_artifact'`.\n\n## Saving files and directories to the artifact store\n\nThere is an additional mechanism for working with large files. This works \nbetter in certain contexts, such as flexibly saving the results of model training.\nThe following lines copy the file to the `db.artifact_store`.\nWhen data is loaded, the data is copied back over from the artifact-store to \nthe local file-system:\n\n```bash\ncp -r test test_copy\n```\n\n```python\nschema = Schema(identifier='schema', fields={'x': dt})\ntable = Table('my_collection', schema=schema)\n\ndb.apply(table)\nmy_id = str(uuid.uuid4())\ndb.execute(db['my_collection'].insert_one(Document({'id': my_id, 'x': './test_copy'})))\n```\n\nWhen reloading data, you will see that only a reference to the data in the artifact-store\nis loaded:\n\n```python\n>>> db.execute(db['my_collection'].find_one({'id': my_id})).unpack()\n{'id': '93eaae04-a48b-4632-94cf-123cdb2c9517',\n 'x': './artifacts/d537309c8e5be28f91b90b97bbb229984935ba4a/test_copy',\n '_fold': 'train',\n '_id': ObjectId('669fb091cdaeae826dec4797')}\n\n```\n\nDownstream `Model` instances may then explicitly handle the local file from the file \nreference.", - "# Sidecar vector-comparison integration\n\nFor databases which don't have their own vector-search implementation, Superduper offers \n2 integrations:\n\n- In memory vector-search\n- Lance vector-search\n\nTo configure these, add one of the following options to your configuration:\n\n```yaml\ncluster:\n vector_search:\n type: in_memory|lance\n```\n\n***or***\n\n```bash\nexport SUPERDUPER_CLUSTER_VECTOR_SEARCH_TYPE='in_memory|lance'\n```\n\nIn this case, whenever a developer executes a vector-search query including `.like`, \nexecution of the similarity and sorting computations of vectors is outsourced to \na sidecar implementation which is managed by `superduper`.", - "# SQL select queries\n\nIn order to support as many data-backends as possible, Superduper supports the `ibis` query API to build SQL queries.\n\nWith Superduper one would write:\n\n```python\nt = db['my_table']\nresult = t.filter(t.brand == 'Nike').execute()\n```\n", - "---\nsidebar_position: 1\n---\n\n# First steps\n\nFollow these steps to get started with Superduper:\n\n1. **Get setup**\n \n 1. [Install Superduper](./installation.md)\n 2. [Configure Superduper](./configuration.md)\n 3. [Try some of the basic tutorials](../tutorials/intro.md)\n\n2. **Try some of our code-snippets and use-cases**\n\n 1. The [code-snippets](../code_snippets) section provides building blocks to create functionality with Superduper\n 2. The [use-cases](../use_cases) section gives selective examples of how to build complex functionality with Superduper.\n\n3. **Read more about usage-patterns and key functionality of Superduper**\n\n The API reference ([overview](../core_api/), [connect](../connect_api/), [apply](../apply_api/), [execute](../execute_api/)) gives\n the central usage patterns and their purpose.\n\n4. **Read about production features**\n\n Superduper was designed with production specifically in mind. Read more about this [here](../production/).\n\n5. **Build understanding**\n\n To understand more about how Superduper works, read through the [`Fundamentals`](../fundamentals/glossary) and refer to the [`API References`](https://docs.superduper.io/apidocs/source/superduper.html) for detailed information on API usage.\n\n6. **Create your own Superduper components**\n\n Superduper makes it easy to write your own models and functionality, with its `Model` base class. Learn how to write\n a custom `Model` [here](../create_functionality).\n\n7. **Engage with the Community**\n\n If you encounter challenges, join our [Slack Channels](https://join.slack.com/t/superduper/shared_invite/zt-1zuojj0k0-RjAYBs1TDsvEa7yaFGa6QA) for assistance. Report bugs and share feature requests [by raising an issue]((https://github.com/superduper/superduper/issues).). Our community is here to support you.\n\n You are welcome to join the conversation on our [discussions forum](https://github.com/superduper/superduper/discussions) and follow our open-source roadmap [here](https://github.com/orgs/superduper/projects/1/views/10).\n\n8. **Contribute and Share**\n\n Contribute to the Superduper community by sharing your solutions and experiences. \n Help us grow by promoting Superduper to your peers and the wider world. Your involvement is valuable to us! Don't forget to give us a star ⭐!\n\n Superduper is a community effort and licensed under Apache 2.0. We encourage enthusiastic developers to contribute to the project. Read more [here](../setup/contributing) and [on GitHub](https://github.com/superduper/superduper/) about getting setup and ways you can contribute.\n\n\nimport DocCardList from '@theme/DocCardList';\n\n", - "---\nsidebar_position: 3\ntags:\n - quickstart\n---\n\n# Configure\n\nSuperduper provides a range of configurable options for setting\nup your environment:\n\nConfigurations can either be injected:\n\n- in a YAML file specified by the `SUPERDUPER_CONFIG_FILE` environment variable or\n- through environment variables starting with `SUPERDUPER_`:\n- as `**kwargs` when calling the [`superduper.superduper`](../core_api/connect.md) function (note this is only for development purposes).\n\nHere are the configurable settings and their project defaults \n(remaining configurations can be viewed in [`superduper.base.config`](https://github.com/superduper/superduper/blob/main/superduper/base/config.py)). Note that as much or as little of this configuration can be specified. The remaining \nconfigurations will then take on their default values.\n\n\n```yaml\n# Where large data blobs/ files are saved\nartifact_store: filesystem://\n\n# How to encode binary data\nbytes_encoding: Bytes\n# bytes_encoding: Base64\n\n# The base database you would like to connect to\ndata_backend: \n\n# Settings for randomly assigning train/valid folds\nfold_probability: 0.05\n\n# Where lance indexes will be saved\nlance_home: .superduper/vector_indices\n\n# Log level to be shown to stdout\nlog_level: INFO\nlogging_type: SYSTEM\n\n# Database to save meta-data in (defaults to `data_backend`)\nmetadata_store: null\n\n# Settings for failed API requests\nretries:\n stop_after_attempt: 2\n wait_max: 10.0\n wait_min: 4.0\n wait_multiplier: 1.0\n```\n\nAs an example, to reconfigure the URI of the data_backend we have two options:\n\nAn environment variable set with:\n\n```bash\n$ export SUPERDUPER_CONFIG=./config.yaml\n```\nAnd a configuration file in `./config.yaml` with this content only:\n\n```yaml\ndata_backend: mongodb://localhost:27018/documents\n```\n\n... or simply set environment variables directly:\n\n```bash\n$ export SUPERDUPER_DATA_BACKEND='mongodb://localhost:27018/documents'\n```\n\nYou may view the configuration used by the system with:\n\n```bash\npython -m superduper config\n```\n", - "---\nsidebar_position: 2\n---\n\n# Installation\n\nThere are two ways to get started:\n\n- [A local `pip` installation on your system](#pip).\n- [Running the `superduper` docker image](#docker-image).\n\n## Pip\n\n`superduper` is available on [PyPi.org](https://pypi.org/project/superduper-framework/).\n\n### Prerequisites\n\nBefore you begin the installation process, please make sure you have the following prerequisites in place:\n\n#### Operating System\n\n`superduper` is compatible with several Linux distributions, including:\n\n- MacOS\n- Ubuntu\n- Debian\n\n#### Python Ecosystem\n\nIf you plan to install superduper from source, you'll need the following:\n\n- `python3.10` or `python3.11`\n- `pip` 22.0.4 or later\n\nYour experience with `superduper` on Linux may vary depending on your system and compute requirements.\n\n### Installation\n\nTo install `superduper` on your system using `pip`, open your terminal and run the following command:\n\n```bash\npip install superduper-framework\n```\n\nThis command will install `superduper` along with a minimal set of common dependencies required for running the framework.\nIf you would like to use the `superduper.ext` subpackages (e.g. `superduper.ext.openai`), you may build a requirements file\nwith this command:\n\n```bash\npython3 -m superduper requirements > requirements.txt\n```\n\nFor example, this builds a `requirements.txt` file for `openai` and `torch`:\n\n```bash\npython3 -m superduper requirements openai torch > requirements.txt\n```\n\n## Docker Image\n\n#### Using Pre-built Images\n\nIf you prefer using Docker, you can pull a pre-built Docker image from Docker Hub and run it with Docker version 19.03 or later:\n\n```bash\ndocker run -p 8888:8888 superduperio/superduper:latest\n```\n\nThis command installs the base `superduper` image. If you want to run the ready-to-use examples, you'll need to download the required dependencies at runtime. \n\n\n#### Building the image yourself\n\nFor more control, you can build the Docker images yourself from the latest GitHub version as follows:\n\nClone the code:\n\n```bash\ngit clone --branch main --single-branch --depth 1 https://github.com/superduper/superduper.git\nmake build_superduper\n```\n\n#### Developer's docker image and environment\n\nIf you wish to use your local copy of code with a docker build, execute the following command:\n\n```bash\nmake build_sandbox\n```\n\nYou will see something like these lines in `docker images`:\n\n```bash\nREPOSITORY TAG IMAGE ID CREATED SIZE\nsuperduperio/sandbox latest 88ddab334d17 5 days ago 2.69GB\n```", - "# Production features in Superduper\n\nSuperduper was made with productionization in mind. These means several things:\n\n## Modifiable, configurable, flexible\n\nA production ready solution should not come up short, as soon as developers \nencounted a use-case or scenario outside of the norm, or the documented \napplications. In this respect, modifiablility, configurability and flexibility are key.\n\nSuperduper contains fully open-source (Apache 2.0, MIT, BSD 3-part) components for all aspects of the setup.\nThis goes from the AI-models integrated, the databases and client libraries supported, as well as \nthe cluster and compute management. This means that developers are never left hung out \nto dry with regard to taking action in altering and interrogating the source doe, as well \nas adding their own functionality.\n\nIn addition, Superduper may be used and configured in a wide variety of ways.\nIt can be used \"in-process\", with computations blocking (\"developer mode\") and \nit can be operated in a cluster-like architecture, with compute, vector-search,\nchange-data capture and a REST-ful server separated into separate services.\nThis is ideal for teams of developers looking to productionize their AI-data setups.\n\n## Scalability\n\nA production ready solution should scale with the amount of traffic, data\nand computation to the system. Superduper includes a `ray` integration\nwhich allows developers to scale the compute as the amount of data and requests\nto the system grod. Read more [here](./non_blocking_ray_jobs).\n\nIn addition Superduper has the option to separate the vector-comparison and sorting component\ninto a separate service, so this doesn't block or slow down the main program running.\n\n## Interoperability\n\nDue to the [change-data-capture component](./change_data_capture), developers \nare not required to operate their database through Superduper. Third-party \ndatabase clients, and even other programming languages other than Python \nmay be used to add data to the database. Nonetheless, Superduper \nwill still process this data.\n\nIn addition the [REST API](./rest_api) may be easily used to access Superduper\nfrom the web, or from other programming environments.\n\n## Live serving\n\nThe [REST API](./rest_api) service may be used to access Superduper using pure JSON, \nplus references to saved/ uploaded binaries. This gives great flexibility to application\ndevelopers looking to build on top of Superduper from Javascript etc..\n\n## SuperDuper protocol\n\nAll Superduper components may be built using Python, or directly in a YAML/ JSON formalism\nusng the [\"superduper-protocol\"](./superduper_protocol.md).\nThis provides a convenient set of choices for AI engineers, infrastructure engineers \nand beyond to share and communicate their AI-data setups in Superduper", - "# SuperDuper Protocol\n\nSuperduper includes a protocol allowed developers to switch back and forth from Python and YAML/ JSON formats.\nThe mapping is fairly self-explanatory after reading the examples below.\n\n## Writing in Superduper-protocol directly\n\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n \n\n ```yaml\n _base: \"?my_vector_index\"\n _leaves:\n postprocess:\n _path: superduper/base/code/Code\n code: '\n from superduper import code\n\n @code\n def postprocess(x):\n return x.tolist()\n '\n my_vector:\n _path: superduper.components/vector_index/vector\n shape: 384\n sentence_transformer:\n _path: superduper/ext/sentence_transformers/model/SentenceTransformer\n datatype: \"?my_vector\"\n model: \"all-MiniLM-L6-v2\"\n postprocess: \"?postprocess\"\n my_query:\n _path: superduper/backends/mongodb/query/parse_query\n query: \"documents.find()\"\n my_listener:\n _path: superduper.components/listener/Listener\n model: \"?sentence_transformer\"\n select: \"?my_query\"\n key: \"X\"\n my_vector_index:\n _path: superduper.components/vector_index/VectorIndex\n indexing_listener: \"?my_listener\"\n measure: cosine\n ```\n\n Then from the commmand line:\n\n ```bash\n superduper apply --manifest='.yaml'\n ```\n\n \n \n\n ```json\n {\n \"_base\": \"?my_vector_index\",\n \"_leaves\": {\n \"postprocess\": {\n \"_path\": \"superduper/base/code/Code\",\n \"code\": \"from superduper import code\\n\\n@code\\ndef postprocess(x):\\n return x.tolist()\"\n },\n \"my_vector\": {\n \"_path\": \"superduper.components/vector_index/vector\",\n \"shape\": 384\n },\n \"sentence_transformer\": {\n \"_path\": \"superduper/ext/sentence_transformers/model/SentenceTransformer\",\n \"datatype\": \"?my_vector\",\n \"model\": \"all-MiniLM-L6-v2\",\n \"postprocess\": \"?postprocess\"\n },\n \"my_query\": {\n \"_path\": \"superduper/backends/mongodb/query/parse_query\",\n \"query\": \"documents.find()\"\n },\n \"my_listener\": {\n \"_path\": \"superduper.components/listener/Listener\",\n \"model\": \"?sentence_transformer\",\n \"select\": \"?my_query\"\n },\n \"my_vector_index\": {\n \"_path\": \"superduper.components/vector_index/VectorIndex\",\n \"indexing_listener\": \"?my_listener\",\n \"measure\": \"cosine\"\n }\n }\n }\n ```\n\n Then from the command line:\n\n ```bash\n superduper apply --manifest='.json'\n ```\n\n \n \n\n ```python\n from superduper import superduper\n from superduper.components.vector_index import vector\n from superduper.ext.sentence_transformers.model import SentenceTransformer\n from superduper.components.listener import Listener\n from superduper.components.vector_index import VectorIndex\n from superduper.base.code import Code\n from superduper import Stack\n\n\n db = superduper('mongomock://')\n\n datatype = vector(shape=384, identifier=\"my-vec\")\n\n\n def postprocess(x):\n return x.tolist()\n\n\n postprocess = Code.from_object(postprocess)\n\n\n model = SentenceTransformer(\n identifier=\"test\",\n datatype=datatype,\n predict_kwargs={\"show_progress_bar\": True},\n signature=\"*args,**kwargs\",\n model=\"all-MiniLM-L6-v2\",\n device=\"cpu\",\n postprocess=postprocess,\n )\n\n listener = Listener(\n identifier=\"my-listener\",\n key=\"txt\",\n model=model,\n select=db['documents'].find(),\n active=True,\n predict_kwargs={}\n )\n\n vector_index = VectorIndex(\n identifier=\"my-index\",\n indexing_listener=listener,\n measure=\"cosine\"\n )\n\n db.apply(vector_index)\n ```\n \n \n\n\n## Converting a `Component` to Superduper-protocol\n\nAll components may be converted to *Superduper-protocol* using the `Component.encode` method:\n\n```python\nencoding = vector_index.encode()\n```\n\nThis encoding may be written directly to disk with:\n\n```python\nvector_index.export(zip=True) # outputs to \"./my-index.zip\"\n```\n\nDevelopers may reload components from disk with `Component.read`\n\n```python\nreloaded = Component.read('./my-index.zip')\n```", - "**`superduper.misc.special_dicts`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/misc/special_dicts.py)\n\n## `diff` \n\n```python\ndiff(r1,\n r2)\n```\n| Parameter | Description |\n|-----------|-------------|\n| r1 | Dict |\n| r2 | Dict |\n\nGet the difference between two dictionaries.\n\n```python\n_diff({'a': 1, 'b': 2}, {'a': 2, 'b': 2})\n# {'a': (1, 2)}\n_diff({'a': {'c': 3}, 'b': 2}, {'a': 2, 'b': 2})\n# {'a': ({'c': 3}, 2)}\n```\n\n## `SuperDuperFlatEncode` \n\n```python\nSuperDuperFlatEncode(self,\n /,\n *args,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | *args for `dict` |\n| kwargs | **kwargs for `dict` |\n\nDictionary for representing flattened encoding data.\n\n## `MongoStyleDict` \n\n```python\nMongoStyleDict(self,\n /,\n *args,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | *args for `dict` |\n| kwargs | **kwargs for `dict` |\n\nDictionary object mirroring how MongoDB handles fields.\n\n## `IndexableDict` \n\n```python\nIndexableDict(self,\n ordered_dict)\n```\n| Parameter | Description |\n|-----------|-------------|\n| ordered_dict | OrderedDict |\n\nIndexableDict.\n\n```python\n# Example:\n# -------\nd = IndexableDict({'a': 1, 'b': 2})\nd[0]\n# 1\n```\n\n```python\nd[1]\n# 2\n```\n\n", - "**`superduper.misc.hash`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/misc/hash.py)\n\n## `hash_string` \n\n```python\nhash_string(string: str)\n```\n| Parameter | Description |\n|-----------|-------------|\n| string | string to hash |\n\nHash a string.\n\n## `random_sha1` \n\n```python\nrandom_sha1()\n```\nGenerate random sha1 values.\n\n", - "**`superduper.misc.serialization`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/misc/serialization.py)\n\n## `asdict` \n\n```python\nasdict(obj,\n *,\n copy_method=) -> Dict[str,\n Any]\n```\n| Parameter | Description |\n|-----------|-------------|\n| obj | The dataclass instance to |\n| copy_method | The copy method to use for non atomic objects |\n\nConvert the dataclass instance to a dict.\n\nCustom ``asdict`` function which exports a dataclass object into a dict,\nwith a option to choose for nested non atomic objects copy strategy.\n\n", - "**`superduper.misc.auto_schema`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/misc/auto_schema.py)\n\n## `infer_datatype` \n\n```python\ninfer_datatype(data: Any) -> Union[superduper.components.datatype.DataType,\n type,\n NoneType]\n```\n| Parameter | Description |\n|-----------|-------------|\n| data | The data object |\n\nInfer the datatype of a given data object.\n\nIf the data object is a base type, return None,\nOtherwise, return the inferred datatype\n\n## `infer_schema` \n\n```python\ninfer_schema(data: Mapping[str,\n Any],\n identifier: Optional[str] = None,\n ibis=False) -> superduper.components.schema.Schema\n```\n| Parameter | Description |\n|-----------|-------------|\n| data | The data object |\n| identifier | The identifier for the schema, if None, it will be generated |\n| ibis | If True, the schema will be updated for the Ibis backend, otherwise for MongoDB |\n\nInfer a schema from a given data object.\n\n## `register_module` \n\n```python\nregister_module(module_name)\n```\n| Parameter | Description |\n|-----------|-------------|\n| module_name | The module name, e.g. \"superduper.ext.numpy.encoder\" |\n\nRegister a module for datatype inference.\n\nOnly modules with a check and create function will be registered\n\n## `updated_schema_data_for_ibis` \n\n```python\nupdated_schema_data_for_ibis(schema_data) -> Dict[str,\n superduper.components.datatype.DataType]\n```\n| Parameter | Description |\n|-----------|-------------|\n| schema_data | The schema data |\n\nUpdate the schema data for Ibis backend.\n\nConvert the basic data types to Ibis data types.\n\n## `updated_schema_data_for_mongodb` \n\n```python\nupdated_schema_data_for_mongodb(schema_data) -> Dict[str,\n superduper.components.datatype.DataType]\n```\n| Parameter | Description |\n|-----------|-------------|\n| schema_data | The schema data |\n\nUpdate the schema data for MongoDB backend.\n\nOnly keep the data types that can be stored directly in MongoDB.\n\n", - "**`superduper.misc.data`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/misc/data.py)\n\n## `ibatch` \n\n```python\nibatch(iterable: Iterable[~T],\n batch_size: int) -> Iterator[List[~T]]\n```\n| Parameter | Description |\n|-----------|-------------|\n| iterable | the iterable to batch |\n| batch_size | the number of groups to write |\n\nBatch an iterable into chunks of size `batch_size`.\n\n", - "**`superduper.misc.runnable.runnable`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/misc/runnable/runnable.py)\n\n## `Event` \n\n```python\nEvent(self,\n *on_set: Callable[[],\n NoneType])\n```\n| Parameter | Description |\n|-----------|-------------|\n| on_set | Callbacks to call when the event is set |\n\nAn Event that calls a list of callbacks when set or cleared.\n\nA threading.Event that also calls back to zero or more functions when its state\nis set or reset, and has a __bool__ method.\n\nNote that the callback might happen on some completely different thread,\nso these functions cannot block\n\n## `Runnable` \n\n```python\nRunnable(self)\n```\nA base class for things that start, run, finish, stop and join.\n\nStopping is requesting immediate termination: finishing is saying that\nthere is no more work to be done, finish what you are doing.\n\nA Runnable has two `Event`s, `running` and `stopped`, and you can either\n`wait` on either of these conditions to be true, or add a callback function\n(which must be non-blocking) to either of them.\n\n`running` is not set until the setup for a `Runnable` has finished;\n`stopped` is not set until all the computations in a thread have ceased.\n\nAn Runnable can be used as a context manager:\n\nwith runnable:\n# The runnable is running by this point\ndo_stuff()\n# By the time you get to here, the runnable has completely stopped\n\nThe above means roughly the same as\n\nrunnable.start()\ntry:\ndo_stuff()\nrunnable.finish()\nrunnable.join()\nfinally:\nrunnable.stop()\n\n", - "**`superduper.misc.runnable.queue_chunker`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/misc/runnable/queue_chunker.py)\n\n## `QueueChunker` \n\n```python\nQueueChunker(self,\n chunk_size: int,\n timeout: float,\n accumulate_timeouts: bool = False) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| chunk_size | Maximum number of entries in a chunk |\n| timeout | Maximum amount of time to block |\n| accumulate_timeouts | If accumulate timeouts is True, then `timeout` is the total timeout allowed over the whole chunk, otherwise the timeout is applied to each item. |\n\nChunk a queue into lists of length at most `chunk_size` within time `timeout`.\n\n", - "**`superduper.misc.annotations`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/misc/annotations.py)\n\n## `merge_docstrings` \n\n```python\nmerge_docstrings(cls)\n```\n| Parameter | Description |\n|-----------|-------------|\n| cls | Class to merge docstrings for. |\n\nDecorator that merges Sphinx-styled class docstrings.\n\nDecorator merges doc-strings from parent to child classes,\nensuring no duplicate parameters and correct indentation.\n\n## `deprecated` \n\n```python\ndeprecated(f)\n```\n| Parameter | Description |\n|-----------|-------------|\n| f | function to deprecate |\n\nDecorator to mark a function as deprecated.\n\nThis will result in a warning being emitted when the function is used.\n\n## `component` \n\n```python\ncomponent(*schema: Dict)\n```\n| Parameter | Description |\n|-----------|-------------|\n| schema | schema for the component |\n\nDecorator for creating a component.\n\n## `requires_packages` \n\n```python\nrequires_packages(*packages,\n warn=False)\n```\n| Parameter | Description |\n|-----------|-------------|\n| packages | list of tuples of packages each tuple of the form (import_name, lower_bound/None, upper_bound/None, install_name/None) |\n| warn | if True, warn instead of raising an exception |\n\nRequire the packages to be installed.\n\nE.g. ('sklearn', '0.1.0', '0.2.0', 'scikit-learn')\n\n## `extract_parameters` \n\n```python\nextract_parameters(doc)\n```\n| Parameter | Description |\n|-----------|-------------|\n| doc | Sphinx-styled docstring. Docstring may have multiple lines |\n\nExtracts and organizes parameter descriptions from a Sphinx-styled docstring.\n\n## `replace_parameters` \n\n```python\nreplace_parameters(doc,\n placeholder: str = '!!!')\n```\n| Parameter | Description |\n|-----------|-------------|\n| doc | Sphinx-styled docstring. |\n| placeholder | Placeholder to replace parameters with. |\n\nReplace parameters in a doc-string with a placeholder.\n\n## `superduperDeprecationWarning` \n\n```python\nsuperduperDeprecationWarning(self,\n /,\n *args,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | *args of `DeprecationWarning` |\n| kwargs | **kwargs of `DeprecationWarning` |\n\nSpecialized Deprecation Warning for fine grained filtering control.\n\n", - "**`superduper.misc.server`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/misc/server.py)\n\n## `request_server` \n\n```python\nrequest_server(service: str = 'vector_search',\n data=None,\n endpoint='add',\n args={},\n type='post')\n```\n| Parameter | Description |\n|-----------|-------------|\n| service | Service name |\n| data | Data to send |\n| endpoint | Endpoint to hit |\n| args | Arguments to pass |\n| type | Type of request |\n\nRequest server with data.\n\n## `server_request_decoder` \n\n```python\nserver_request_decoder(x)\n```\n| Parameter | Description |\n|-----------|-------------|\n| x | Object to decode. |\n\nDecodes a request to `SuperDuperApp` service.\n\n", - "**`superduper.misc.download`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/misc/download.py)\n\n## `download_content` \n\n```python\ndownload_content(db,\n query: Union[superduper.backends.base.query.Query,\n Dict],\n ids: Optional[Sequence[str]] = None,\n documents: Optional[List[superduper.base.document.Document]] = None,\n raises: bool = True,\n n_workers: Optional[int] = None) -> Optional[Sequence[superduper.base.document.Document]]\n```\n| Parameter | Description |\n|-----------|-------------|\n| db | database instance |\n| query | query to be executed |\n| ids | ids to be downloaded |\n| documents | documents to be downloaded |\n| raises | whether to raise errors |\n| n_workers | number of download workers |\n\nDownload content contained in uploaded data.\n\nItems to be downloaded are identifier\nvia the subdocuments in the form exemplified below. By default items are downloaded\nto the database, unless a ``download_update`` function is provided.\n\n```python\nd = {\"_content\": {\"uri\": \"\", \"encoder\": \"\"}}\ndef update(key, id, bytes):\n... with open(f'/tmp/{key}+{id}', 'wb') as f:\n... f.write(bytes)\ndownload_content(None, None, ids=[\"0\"], documents=[d]))\n \n```\n\n## `download_from_one` \n\n```python\ndownload_from_one(r: superduper.base.document.Document)\n```\n| Parameter | Description |\n|-----------|-------------|\n| r | document to download from |\n\nDownload content from a single document.\n\nThis function will find all URIs in the document and download them.\n\n## `gather_uris` \n\n```python\ngather_uris(documents: Sequence[superduper.base.document.Document],\n gather_ids: bool = True) -> Tuple[List[str],\n List[str],\n List[Any],\n List[str]]\n```\n| Parameter | Description |\n|-----------|-------------|\n| documents | list of dictionaries |\n| gather_ids | if ``True`` then gather ids of documents |\n\nGet the uris out of all documents as denoted by ``{\"_content\": ...}``.\n\n## `timeout` \n\n```python\ntimeout(seconds)\n```\n| Parameter | Description |\n|-----------|-------------|\n| seconds | seconds until timeout |\n\nContext manager to set a timeout.\n\n## `timeout_handler` \n\n```python\ntimeout_handler(signum,\n frame)\n```\n| Parameter | Description |\n|-----------|-------------|\n| signum | signal number |\n| frame | frame |\n\nTimeout handler to raise an TimeoutException.\n\n## `BaseDownloader` \n\n```python\nBaseDownloader(self,\n uris: List[str],\n n_workers: int = 0,\n timeout: Optional[int] = None,\n headers: Optional[Dict] = None,\n raises: bool = True)\n```\n| Parameter | Description |\n|-----------|-------------|\n| uris | list of uris/ file names to fetch |\n| n_workers | number of multiprocessing workers |\n| timeout | set seconds until request times out |\n| headers | dictionary of request headers passed to``requests`` package |\n| raises | raises error ``True``/``False`` |\n\nBase class for downloading files.\n\n## `Downloader` \n\n```python\nDownloader(self,\n uris,\n update_one: Optional[Callable] = None,\n ids: Union[List[str],\n List[int],\n NoneType] = None,\n keys: Optional[List[str]] = None,\n datatypes: Optional[List[str]] = None,\n n_workers: int = 20,\n headers: Optional[Dict] = None,\n skip_existing: bool = True,\n timeout: Optional[int] = None,\n raises: bool = True)\n```\n| Parameter | Description |\n|-----------|-------------|\n| uris | list of uris/ file names to fetch |\n| update_one | function to call to insert data into table |\n| ids | list of ids of rows/ documents to update |\n| keys | list of keys in rows/ documents to insert to |\n| datatypes | list of datatypes of rows/ documents to insert to |\n| n_workers | number of multiprocessing workers |\n| headers | dictionary of request headers passed to``requests`` package |\n| skip_existing | if ``True`` then don't bother getting already present data |\n| timeout | set seconds until request times out |\n| raises | raises error ``True``/``False`` |\n\nDownload files from a list of URIs.\n\n## `Fetcher` \n\n```python\nFetcher(self,\n headers: Optional[Dict] = None,\n n_workers: int = 0)\n```\n| Parameter | Description |\n|-----------|-------------|\n| headers | headers to be used for download |\n| n_workers | number of download workers |\n\nFetches data from a URI.\n\n## `TimeoutException` \n\n```python\nTimeoutException(self,\n /,\n *args,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | *args of `Exception` |\n| kwargs | **kwargs of `Exception` |\n\nTimeout exception.\n\n## `Updater` \n\n```python\nUpdater(self,\n db,\n query)\n```\n| Parameter | Description |\n|-----------|-------------|\n| db | Datalayer instance |\n| query | query to be executed |\n\nUpdater class to update the artifact.\n\n", - "**`superduper.cdc.cdc`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/cdc/cdc.py)\n\n## `DatabaseChangeDataCapture` \n\n```python\nDatabaseChangeDataCapture(self,\n db: 'Datalayer')\n```\n| Parameter | Description |\n|-----------|-------------|\n| db | A superduper datalayer instance. |\n\nDatabaseChangeDataCapture (CDC).\n\nDatabaseChangeDataCapture is a Python class that provides a flexible and\nextensible framework for capturing and managing data changes\nin a database.\n\nThis class is repsonsible for cdc service on the provided `db` instance\nThis class is designed to simplify the process of tracking changes\nto database records,allowing you to monitor and respond to\ndata modifications efficiently.\n\n## `BaseDatabaseListener` \n\n```python\nBaseDatabaseListener(self,\n db: 'Datalayer',\n on: Union[ForwardRef('IbisQuery'),\n ForwardRef('TableOrCollection')],\n stop_event: superduper.misc.runnable.runnable.Event,\n identifier: 'str' = '',\n timeout: Optional[float] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| db | A superduper instance. |\n| on | A table or collection on which the listener is invoked. |\n| stop_event | A threading event flag to notify for stoppage. |\n| identifier | A identity given to the listener service. |\n| timeout | A timeout for the listener. |\n\nA Base class which defines basic functions to implement.\n\nThis class is responsible for defining the basic functions\nthat needs to be implemented by the database listener.\n\n## `CDCHandler` \n\n```python\nCDCHandler(self,\n db: 'Datalayer',\n stop_event: superduper.misc.runnable.runnable.Event,\n queue)\n```\n| Parameter | Description |\n|-----------|-------------|\n| db | A superduper instance. |\n| stop_event | A threading event flag to notify for stoppage. |\n| queue | A queue to hold the cdc packets. |\n\nCDCHandler for handling CDC changes.\n\nThis class is responsible for handling the change by executing the taskflow.\nThis class also extends the task graph by adding funcation job node which\ndoes post model executiong jobs, i.e `copy_vectors`.\n\n## `DatabaseListenerFactory` \n\n```python\nDatabaseListenerFactory(self,\n db_type: str = 'mongodb')\n```\n| Parameter | Description |\n|-----------|-------------|\n| db_type | Database type. |\n\nDatabaseListenerFactory to create listeners for different databases.\n\nThis class is responsible for creating a DatabaseListener instance\nbased on the database type.\n\n## `DatabaseListenerThreadScheduler` \n\n```python\nDatabaseListenerThreadScheduler(self,\n listener: superduper.cdc.cdc.BaseDatabaseListener,\n stop_event: superduper.misc.runnable.runnable.Event,\n start_event: superduper.misc.runnable.runnable.Event) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| listener | A BaseDatabaseListener instance. |\n| stop_event | A threading event flag to notify for stoppage. |\n| start_event | A threading event flag to notify for start. |\n\nDatabaseListenerThreadScheduler to listen to the cdc changes.\n\nThis class is responsible for listening to the cdc changes and\nexecuting the following job.\n\n## `Packet` \n\n```python\nPacket(self,\n ids: Any,\n query: Optional[Any] = None,\n event_type: superduper.cdc.cdc.DBEvent = ) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| ids | Document ids. |\n| query | Query to fetch the document. |\n| event_type | CDC event type. |\n\nPacket to hold the cdc event data.\n\n", - "**`superduper.backends.sqlalchemy.metadata`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/sqlalchemy/metadata.py)\n\n## `SQLAlchemyMetadata` \n\n```python\nSQLAlchemyMetadata(self,\n conn: Any,\n name: Optional[str] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| conn | connection to the meta-data store |\n| name | Name to identify DB using the connection |\n\nAbstraction for storing meta-data separately from primary data.\n\n", - "**`superduper.backends.sqlalchemy.db_helper`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/sqlalchemy/db_helper.py)\n\n## `create_clickhouse_config` \n\n```python\ncreate_clickhouse_config()\n```\nCreate configuration for ClickHouse database.\n\n## `get_db_config` \n\n```python\nget_db_config(dialect)\n```\n| Parameter | Description |\n|-----------|-------------|\n| dialect | The dialect of the database. |\n\nGet the configuration class for the specified dialect.\n\n", - "**`superduper.backends.mongodb.artifacts`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/mongodb/artifacts.py)\n\n## `upload_folder` \n\n```python\nupload_folder(path,\n file_id,\n fs,\n parent_path='')\n```\n| Parameter | Description |\n|-----------|-------------|\n| path | The path to the folder to upload |\n| file_id | The file_id of the folder |\n| fs | The GridFS object |\n| parent_path | The parent path of the folder |\n\nUpload folder to GridFS.\n\n## `MongoArtifactStore` \n\n```python\nMongoArtifactStore(self,\n conn,\n name: str)\n```\n| Parameter | Description |\n|-----------|-------------|\n| conn | MongoDB client connection |\n| name | Name of database to host filesystem |\n\nArtifact store for MongoDB.\n\n", - "**`superduper.backends.mongodb.metadata`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/mongodb/metadata.py)\n\n## `MongoMetaDataStore` \n\n```python\nMongoMetaDataStore(self,\n conn: Any,\n name: Optional[str] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| conn | MongoDB client connection |\n| name | Name of database to host filesystem |\n\nMetadata store for MongoDB.\n\n", - "**`superduper.backends.mongodb.query`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/mongodb/query.py)\n\n## `DeleteOne` \n\n```python\nDeleteOne(**kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| kwargs | The arguments to pass to the operation. |\n\nDeleteOne operation for MongoDB.\n\n## `InsertOne` \n\n```python\nInsertOne(**kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| kwargs | The arguments to pass to the operation. |\n\nInsertOne operation for MongoDB.\n\n## `ReplaceOne` \n\n```python\nReplaceOne(**kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| kwargs | The arguments to pass to the operation. |\n\nReplaceOne operation for MongoDB.\n\n## `UpdateOne` \n\n```python\nUpdateOne(**kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| kwargs | The arguments to pass to the operation. |\n\nUpdateOne operation for MongoDB.\n\n## `parse_query` \n\n```python\nparse_query(query,\n documents: Sequence[Dict] = (),\n db: Optional[ForwardRef('Datalayer')] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| query | The query to parse. |\n| documents | The documents to query. |\n| db | The datalayer to use to execute the query. |\n\nParse a string query into a query object.\n\n## `MongoQuery` \n\n```python\nMongoQuery(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n parts: Sequence[Union[Tuple,\n str]] = ()) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| parts | The parts of the query. |\n\nA query class for MongoDB.\n\nThis class is used to build and execute queries on a MongoDB database.\n\n## `BulkOp` \n\n```python\nBulkOp(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n kwargs: Dict = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| kwargs | The arguments to pass to the operation. |\n\nA bulk operation for MongoDB.\n\n## `ChangeStream` \n\n```python\nChangeStream(self,\n collection: str,\n args: Sequence = None,\n kwargs: Dict = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| collection | The collection to perform the query on |\n| args | Positional query arguments to ``pymongo.Collection.watch`` |\n| kwargs | Named query arguments to ``pymongo.Collection.watch`` |\n\nChange stream class to watch for changes in specified collection.\n\n", - "**`superduper.backends.mongodb.data_backend`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/mongodb/data_backend.py)\n\n## `MongoDataBackend` \n\n```python\nMongoDataBackend(self,\n conn: pymongo.mongo_client.MongoClient,\n name: str)\n```\n| Parameter | Description |\n|-----------|-------------|\n| conn | MongoDB client connection |\n| name | Name of database to host filesystem |\n\nData backend for MongoDB.\n\n", - "**`superduper.backends.query_dataset`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/query_dataset.py)\n\n## `query_dataset_factory` \n\n```python\nquery_dataset_factory(**kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| kwargs | Keyword arguments to be passed to the query dataset object. |\n\nCreate a query dataset object.\n\nIf ``data_prefetch`` is set to ``True``, then a ``CachedQueryDataset`` object is\ncreated, otherwise a ``QueryDataset`` object is created.\n\n## `CachedQueryDataset` \n\n```python\nCachedQueryDataset(self,\n select: superduper.backends.base.query.Query,\n mapping: Optional[ForwardRef('Mapping')] = None,\n ids: Optional[List[str]] = None,\n fold: Optional[str] = 'train',\n transform: Optional[Callable] = None,\n db=None,\n in_memory: bool = True,\n prefetch_size: int = 100)\n```\n| Parameter | Description |\n|-----------|-------------|\n| select | A select query object which defines the query to be executed. |\n| mapping | A mapping object to be used for the dataset. |\n| ids | A list of ids to be used for the dataset. |\n| fold | The fold to be used for the dataset. |\n| transform | A callable which can be used to transform the dataset. |\n| db | A datalayer instance to be used for the dataset. |\n| in_memory | A boolean flag to indicate if the dataset should be loaded |\n| prefetch_size | The number of documents to prefetch from the database. |\n\nCached Query Dataset for fetching documents from database.\n\nThis class which fetch the document corresponding to the given ``index``.\nThis class prefetches documents from database and stores in the memory.\n\nThis can drastically reduce database read operations and hence reduce the overall\nload on the database.\n\n## `ExpiryCache` \n\n```python\nExpiryCache(self,\n /,\n *args,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | *args for `list` |\n| kwargs | **kwargs for `list` |\n\nExpiry Cache for storing documents.\n\nThe document will be removed from the cache after fetching it from the cache.\n\n## `QueryDataset` \n\n```python\nQueryDataset(self,\n select: superduper.backends.base.query.Query,\n mapping: Optional[ForwardRef('Mapping')] = None,\n ids: Optional[List[str]] = None,\n fold: Optional[str] = 'train',\n transform: Optional[Callable] = None,\n db: Optional[ForwardRef('Datalayer')] = None,\n in_memory: bool = True)\n```\n| Parameter | Description |\n|-----------|-------------|\n| select | A select query object which defines the query to be executed. |\n| mapping | A mapping object to be used for the dataset. |\n| ids | A list of ids to be used for the dataset. |\n| fold | The fold to be used for the dataset. |\n| transform | A callable which can be used to transform the dataset. |\n| db | A datalayer instance to be used for the dataset. |\n| in_memory | A boolean flag to indicate if the dataset should be loaded in memory. |\n\nQuery Dataset for fetching documents from database.\n\n", - "**`superduper.backends.local.compute`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/local/compute.py)\n\n## `LocalComputeBackend` \n\n```python\nLocalComputeBackend(self)\n```\nA mockup backend for running jobs locally.\n\n", - "**`superduper.backends.local.artifacts`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/local/artifacts.py)\n\n## `FileSystemArtifactStore` \n\n```python\nFileSystemArtifactStore(self,\n conn: Any,\n name: Optional[str] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| conn | root directory of the artifact store |\n| name | subdirectory to use for this artifact store |\n\nAbstraction for storing large artifacts separately from primary data.\n\n", - "**`superduper.backends.ibis.db_helper`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/ibis/db_helper.py)\n\n## `get_db_helper` \n\n```python\nget_db_helper(dialect) -> superduper.backends.ibis.db_helper.DBHelper\n```\n| Parameter | Description |\n|-----------|-------------|\n| dialect | The dialect of the database. |\n\nGet the insert processor for the given dialect.\n\n## `ClickHouseHelper` \n\n```python\nClickHouseHelper(self,\n dialect)\n```\n| Parameter | Description |\n|-----------|-------------|\n| dialect | The dialect of the database. |\n\nHelper class for ClickHouse database.\n\nThis class is used to convert byte data to base64 format for storage in the\ndatabase.\n\n## `DBHelper` \n\n```python\nDBHelper(self,\n dialect)\n```\n| Parameter | Description |\n|-----------|-------------|\n| dialect | The dialect of the database. |\n\nGeneric helper class for database.\n\n", - "**`superduper.backends.ibis.query`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/ibis/query.py)\n\n## `parse_query` \n\n```python\nparse_query(query,\n documents: Sequence[Dict] = (),\n db: Optional[ForwardRef('Datalayer')] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| query | The query to parse. |\n| documents | The documents to query. |\n| db | The datalayer to use to execute the query. |\n\nParse a string query into a query object.\n\n## `IbisQuery` \n\n```python\nIbisQuery(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n parts: Sequence[Union[Tuple,\n str]] = ()) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| parts | The parts of the query. |\n\nA query that can be executed on an Ibis database.\n\n## `RawSQL` \n\n```python\nRawSQL(self,\n query: str,\n id_field: str = 'id') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| query | The raw SQL query |\n| id_field | The field to use as the primary id |\n\nRaw SQL query.\n\n", - "**`superduper.backends.ibis.data_backend`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/ibis/data_backend.py)\n\n## `IbisDataBackend` \n\n```python\nIbisDataBackend(self,\n conn: ibis.backends.base.BaseBackend,\n name: str,\n in_memory: bool = False)\n```\n| Parameter | Description |\n|-----------|-------------|\n| conn | The connection to the database. |\n| name | The name of the database. |\n| in_memory | Whether to store the data in memory. |\n\nIbis data backend for the database.\n\n", - "**`superduper.backends.ibis.field_types`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/ibis/field_types.py)\n\n## `dtype` \n\n```python\ndtype(x)\n```\n| Parameter | Description |\n|-----------|-------------|\n| x | The data type e.g int, str, etc. |\n\nIbis dtype to represent basic data types in ibis.\n\n## `FieldType` \n\n```python\nFieldType(self,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n identifier: Union[str,\n ibis.expr.datatypes.core.DataType]) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | The name of the data type. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n\nField type to represent the type of a field in a table.\n\nThis is a wrapper around ibis.expr.datatypes.DataType to make it\nserializable.\n\n", - "**`superduper.backends.base.compute`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/base/compute.py)\n\n## `ComputeBackend` \n\n```python\nComputeBackend(self,\n /,\n *args,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | *args for `ABC` |\n| kwargs | *kwargs for `ABC` |\n\nAbstraction for sending jobs to a distributed compute platform.\n\n", - "**`superduper.backends.base.artifacts`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/base/artifacts.py)\n\n## `ArtifactSavingError` \n\n```python\nArtifactSavingError(self,\n /,\n *args,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | *args for `Exception` |\n| kwargs | **kwargs for `Exception` |\n\nError when saving artifact in artifact store fails.\n\n## `ArtifactStore` \n\n```python\nArtifactStore(self,\n conn: Any,\n name: Optional[str] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| conn | connection to the meta-data store |\n| name | Name to identify DB using the connection |\n\nAbstraction for storing large artifacts separately from primary data.\n\n", - "**`superduper.backends.base.metadata`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/base/metadata.py)\n\n## `MetaDataStore` \n\n```python\nMetaDataStore(self,\n conn: Any,\n name: Optional[str] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| conn | connection to the meta-data store |\n| name | Name to identify DB using the connection |\n\nAbstraction for storing meta-data separately from primary data.\n\n## `NonExistentMetadataError` \n\n```python\nNonExistentMetadataError(self,\n /,\n *args,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | *args for `Exception` |\n| kwargs | **kwargs for `Exception` |\n\nNonExistentMetadataError.\n\n", - "**`superduper.backends.base.query`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/base/query.py)\n\n## `applies_to` \n\n```python\napplies_to(*flavours)\n```\n| Parameter | Description |\n|-----------|-------------|\n| flavours | The flavours to check against. |\n\nDecorator to check if the query matches the accepted flavours.\n\n## `parse_query` \n\n```python\nparse_query(query: Union[str,\n list],\n builder_cls: Optional[Type[superduper.backends.base.query.Query]] = None,\n documents: Sequence[Any] = (),\n db: Optional[ForwardRef('Datalayer')] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| query | The query to parse. |\n| builder_cls | The class to use to build the query. |\n| documents | The documents to query. |\n| db | The datalayer to use to execute the query. |\n\nParse a string query into a query object.\n\n## `Model` \n\n```python\nModel(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n parts: Sequence[Union[Tuple,\n str]] = ()) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| parts | The parts of the query. |\n\nA model helper class for create a query to predict.\n\n## `Query` \n\n```python\nQuery(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n parts: Sequence[Union[Tuple,\n str]] = ()) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| parts | The parts of the query. |\n\nA query object.\n\nThis base class is used to create a query object that can be executed\nin the datalayer.\n\n## `TraceMixin` \n\n```python\nTraceMixin(self,\n /,\n *args,\n **kwargs)\n```\nMixin to add trace functionality to a query.\n\n", - "**`superduper.backends.base.data_backend`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/base/data_backend.py)\n\n## `BaseDataBackend` \n\n```python\nBaseDataBackend(self,\n conn: Any,\n name: str)\n```\n| Parameter | Description |\n|-----------|-------------|\n| conn | The connection to the databackend database. |\n| name | The name of the databackend. |\n\nBase data backend for the database.\n\n", - "**`superduper.ext.sentence_transformers.model`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/sentence_transformers/model.py)\n\n## `SentenceTransformer` \n\n```python\nSentenceTransformer(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n preferred_devices: 't.Sequence[str]' = ('cuda',\n 'mps',\n 'cpu'),\n device: str = 'cpu',\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: Literal['*args',\n '**kwargs',\n '*args,\n **kwargs',\n 'singleton'] = 'singleton',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n object: Optional[sentence_transformers.SentenceTransformer.SentenceTransformer] = None,\n model: Optional[str] = None,\n preprocess: Optional[Callable] = None,\n postprocess: Optional[Callable] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | The signature of the model. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| object | The SentenceTransformer object to use. |\n| model | The model name, e.g. 'all-MiniLM-L6-v2'. |\n| device | The device to use, e.g. 'cpu' or 'cuda'. |\n| preprocess | The preprocessing function to apply to the input. |\n| postprocess | The postprocessing function to apply to the output. |\n| preferred_devices | A list of devices to prefer, in that order. |\n\nA model for sentence embeddings using `sentence-transformers`.\n\n", - "**`superduper.ext.cohere.model`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/cohere/model.py)\n\n## `CohereEmbed` \n\n```python\nCohereEmbed(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: str = 'singleton',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n model: 't.Optional[str]' = None,\n max_batch_size: 'int' = 8,\n client_kwargs: Dict[str,\n Any] = None,\n shape: Optional[Sequence[int]] = None,\n batch_size: int = 100) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| model | The Model to use, e.g. ``'text-embedding-ada-002'`` |\n| max_batch_size | Maximum batch size. |\n| client_kwargs | The keyword arguments to pass to the client. |\n| shape | The shape as ``tuple`` of the embedding. |\n| batch_size | The batch size to use for the predictor. |\n\nCohere embedding predictor.\n\n## `CohereGenerate` \n\n```python\nCohereGenerate(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: str = '*args,\n **kwargs',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n model: 't.Optional[str]' = None,\n max_batch_size: 'int' = 8,\n client_kwargs: Dict[str,\n Any] = None,\n takes_context: bool = True,\n prompt: str = '') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| model | The Model to use, e.g. ``'text-embedding-ada-002'`` |\n| max_batch_size | Maximum batch size. |\n| client_kwargs | The keyword arguments to pass to the client. |\n| takes_context | Whether the model takes context into account. |\n| prompt | The prompt to use to seed the response. |\n\nCohere realistic text generator (chat predictor).\n\n## `Cohere` \n\n```python\nCohere(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: 'Signature' = '*args,\n **kwargs',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n model: 't.Optional[str]' = None,\n max_batch_size: 'int' = 8,\n client_kwargs: Dict[str,\n Any] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| model | The Model to use, e.g. ``'text-embedding-ada-002'`` |\n| max_batch_size | Maximum batch size. |\n| client_kwargs | The keyword arguments to pass to the client. |\n\nCohere predictor.\n\n", - "**`superduper.ext.utils`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/utils.py)\n\n## `str_shape` \n\n```python\nstr_shape(shape: Sequence[int]) -> str\n```\n| Parameter | Description |\n|-----------|-------------|\n| shape | The shape to convert. |\n\nConvert a shape to a string.\n\n## `format_prompt` \n\n```python\nformat_prompt(X: str,\n prompt: str,\n context: Optional[List[str]] = None) -> str\n```\n| Parameter | Description |\n|-----------|-------------|\n| X | The input to format the prompt with. |\n| prompt | The prompt to format. |\n| context | The context to format the prompt with. |\n\nFormat a prompt with the given input and context.\n\n## `get_key` \n\n```python\nget_key(key_name: str) -> str\n```\n| Parameter | Description |\n|-----------|-------------|\n| key_name | The name of the environment variable to get. |\n\nGet an environment variable.\n\n", - "**`superduper.ext.llamacpp.model`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/llamacpp/model.py)\n\n## `download_uri` \n\n```python\ndownload_uri(uri,\n save_path)\n```\n| Parameter | Description |\n|-----------|-------------|\n| uri | URI to download |\n| save_path | place to save |\n\nDownload file.\n\n## `LlamaCpp` \n\n```python\nLlamaCpp(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: str = 'singleton',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n prompt: str = '{input}',\n prompt_func: Optional[Callable] = None,\n max_batch_size: Optional[int] = 4,\n model_name_or_path: str = 'facebook/opt-125m',\n model_kwargs: Dict = None,\n download_dir: str = '.llama_cpp') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| prompt | The template to use for the prompt. |\n| prompt_func | The function to use for the prompt. |\n| max_batch_size | The maximum batch size to use for batch generation. |\n| model_name_or_path | path or name of model |\n| model_kwargs | dictionary of init-kwargs |\n| download_dir | local caching directory |\n\nLlama.cpp connector.\n\n## `LlamaCppEmbedding` \n\n```python\nLlamaCppEmbedding(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: str = 'singleton',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n prompt: str = '{input}',\n prompt_func: Optional[Callable] = None,\n max_batch_size: Optional[int] = 4,\n model_name_or_path: str = 'facebook/opt-125m',\n model_kwargs: Dict = None,\n download_dir: str = '.llama_cpp') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| prompt | The template to use for the prompt. |\n| prompt_func | The function to use for the prompt. |\n| max_batch_size | The maximum batch size to use for batch generation. |\n| model_name_or_path | path or name of model |\n| model_kwargs | dictionary of init-kwargs |\n| download_dir | local caching directory |\n\nLlama.cpp connector for embeddings.\n\n", - "**`superduper.ext.torch.model`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/torch/model.py)\n\n## `create_batch` \n\n```python\ncreate_batch(args)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | single data point for batching |\n\nCreate a singleton batch in a manner similar to the PyTorch dataloader.\n\n```python\ncreate_batch(3.).shape\n# torch.Size([1])\nx, y = create_batch([torch.randn(5), torch.randn(3, 7)])\nx.shape\n# torch.Size([1, 5])\ny.shape\n# torch.Size([1, 3, 7])\nd = create_batch(({'a': torch.randn(4)}))\nd['a'].shape\n# torch.Size([1, 4])\n```\n\n## `torchmodel` \n\n```python\ntorchmodel(class_obj)\n```\n| Parameter | Description |\n|-----------|-------------|\n| class_obj | Class to decorate |\n\nA decorator to convert a `torch.nn.Module` into a `TorchModel`.\n\nDecorate a `torch.nn.Module` so that when it is invoked,\nthe result is a `TorchModel`.\n\n## `unpack_batch` \n\n```python\nunpack_batch(args)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | a batch of model outputs |\n\nUnpack a batch into lines of tensor output.\n\n```python\nunpack_batch(torch.randn(1, 10))[0].shape\n# torch.Size([10])\nout = unpack_batch([torch.randn(2, 10), torch.randn(2, 3, 5)])\ntype(out)\n# \nlen(out)\n# 2\nout = unpack_batch({'a': torch.randn(2, 10), 'b': torch.randn(2, 3, 5)})\n[type(x) for x in out]\n# [, ]\nout[0]['a'].shape\n# torch.Size([10])\nout[0]['b'].shape\n# torch.Size([3, 5])\nout = unpack_batch({'a': {'b': torch.randn(2, 10)}})\nout[0]['a']['b'].shape\n# torch.Size([10])\nout[1]['a']['b'].shape\n# torch.Size([10])\n```\n\n## `TorchModel` \n\n```python\nTorchModel(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n preferred_devices: 't.Sequence[str]' = ('cuda',\n 'mps',\n 'cpu'),\n device: 't.Optional[str]' = None,\n trainer: 't.Optional[Trainer]' = None,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: 'Signature' = '*args,\n **kwargs',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n object: 'torch.nn.Module',\n preprocess: 't.Optional[t.Callable]' = None,\n preprocess_signature: 'Signature' = 'singleton',\n postprocess: 't.Optional[t.Callable]' = None,\n postprocess_signature: 'Signature' = 'singleton',\n forward_method: 'str' = '__call__',\n forward_signature: 'Signature' = 'singleton',\n train_forward_method: 'str' = '__call__',\n train_forward_signature: 'Signature' = 'singleton',\n train_preprocess: 't.Optional[t.Callable]' = None,\n train_preprocess_signature: 'Signature' = 'singleton',\n collate_fn: 't.Optional[t.Callable]' = None,\n optimizer_state: 't.Optional[t.Any]' = None,\n loader_kwargs: 't.Dict' = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| object | Torch model, e.g. `torch.nn.Module` |\n| preprocess | Preprocess function, the function to apply to the input |\n| preprocess_signature | The signature of the preprocess function |\n| postprocess | The postprocess function, the function to apply to the output |\n| postprocess_signature | The signature of the postprocess function |\n| forward_method | The forward method, the method to call on the model |\n| forward_signature | The signature of the forward method |\n| train_forward_method | Train forward method, the method to call on the model |\n| train_forward_signature | The signature of the train forward method |\n| train_preprocess | Train preprocess function, the function to apply to the input |\n| train_preprocess_signature | The signature of the train preprocess function |\n| collate_fn | The collate function for the dataloader |\n| optimizer_state | The optimizer state |\n| loader_kwargs | The kwargs for the dataloader |\n| trainer | `Trainer` object to train the model |\n| preferred_devices | The order of devices to use |\n| device | The device to be used |\n\nTorch model. This class is a wrapper around a PyTorch model.\n\n## `BasicDataset` \n\n```python\nBasicDataset(self,\n items,\n transform,\n signature)\n```\n| Parameter | Description |\n|-----------|-------------|\n| items | items, typically documents |\n| transform | function, typically a preprocess function |\n| signature | signature of the transform function |\n\nBasic database iterating over a list of documents and applying a transformation.\n\n", - "**`superduper.ext.torch.utils`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/torch/utils.py)\n\n## `device_of` \n\n```python\ndevice_of(module: 'Module') -> 't.Union[_device,\n str]'\n```\n| Parameter | Description |\n|-----------|-------------|\n| module | PyTorch model |\n\nGet device of a model.\n\n## `eval` \n\n```python\neval(module: 'Module') -> 't.Iterator[None]'\n```\n| Parameter | Description |\n|-----------|-------------|\n| module | PyTorch module |\n\nTemporarily set a module to evaluation mode.\n\n## `to_device` \n\n```python\nto_device(item: 't.Any',\n device: 't.Union[str,\n _device]') -> 't.Any'\n```\n| Parameter | Description |\n|-----------|-------------|\n| item | torch.Tensor instance |\n| device | device to which one would like to send |\n\nSend tensor leaves of nested list/ dictionaries/ tensors to device.\n\n## `set_device` \n\n```python\nset_device(module: 'Module',\n device: '_device')\n```\n| Parameter | Description |\n|-----------|-------------|\n| module | PyTorch module |\n| device | Device to set |\n\nTemporarily set a device of a module.\n\n", - "**`superduper.ext.torch.training`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/torch/training.py)\n\n## `TorchTrainer` \n\n```python\nTorchTrainer(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n key: 'ModelInputType',\n select: 'Query',\n transform: 't.Optional[t.Callable]' = None,\n metric_values: Dict = None,\n signature: 'Signature' = '*args',\n data_prefetch: 'bool' = False,\n prefetch_size: 'int' = 1000,\n prefetch_factor: 'int' = 100,\n in_memory: 'bool' = True,\n compute_kwargs: 't.Dict' = None,\n objective: Callable,\n loader_kwargs: Dict = None,\n max_iterations: int = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,\n no_improve_then_stop: int = 5,\n download: bool = False,\n validation_interval: int = 100,\n listen: str = 'objective',\n optimizer_cls: str = 'Adam',\n optimizer_kwargs: Dict = None,\n optimizer_state: Optional[Dict] = None,\n collate_fn: Optional[Callable] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| key | Model input type key. |\n| select | Model select query for training. |\n| transform | (optional) transform callable. |\n| metric_values | Metric values |\n| signature | Model signature. |\n| data_prefetch | Boolean for prefetching data before forward pass. |\n| prefetch_size | Prefetch batch size. |\n| prefetch_factor | Prefetch factor for data prefetching. |\n| in_memory | If training in memory. |\n| compute_kwargs | Kwargs for compute backend. |\n| objective | Objective function |\n| loader_kwargs | Kwargs for the dataloader |\n| max_iterations | Maximum number of iterations |\n| no_improve_then_stop | Number of iterations to wait for improvement before stopping |\n| download | Whether to download the data |\n| validation_interval | How often to validate |\n| listen | Which metric to listen to for early stopping |\n| optimizer_cls | Optimizer class |\n| optimizer_kwargs | Kwargs for the optimizer |\n| optimizer_state | Latest state of the optimizer for contined training |\n| collate_fn | Collate function for the dataloader |\n\nConfiguration for the PyTorch trainer.\n\n", - "**`superduper.ext.torch.encoder`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/torch/encoder.py)\n\n## `tensor` \n\n```python\ntensor(dtype,\n shape: Sequence,\n bytes_encoding: Optional[str] = None,\n encodable: str = 'encodable',\n db: Optional[ForwardRef('Datalayer')] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| dtype | The dtype of the tensor. |\n| shape | The shape of the tensor. |\n| bytes_encoding | The bytes encoding to use. |\n| encodable | The encodable name [\"artifact\", \"encodable\", \"lazy_artifact\", \"file\"]. |\n| db | The datalayer instance. |\n\nCreate an encoder for a tensor of a given dtype and shape.\n\n## `DecodeTensor` \n\n```python\nDecodeTensor(self,\n dtype,\n shape)\n```\n| Parameter | Description |\n|-----------|-------------|\n| dtype | The dtype of the tensor, eg. torch.float32 |\n| shape | The shape of the tensor, eg. (3, 4) |\n\nDecode a tensor from bytes.\n\n## `EncodeTensor` \n\n```python\nEncodeTensor(self,\n dtype)\n```\n| Parameter | Description |\n|-----------|-------------|\n| dtype | The dtype of the tensor, eg. torch.float32 |\n\nEncode a tensor to bytes.\n\n", - "**`superduper.ext.vllm.model`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/vllm/model.py)\n\n## `VllmAPI` \n\n```python\nVllmAPI(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n api_url: str = '',\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: str = 'singleton',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n prompt: str = '{input}',\n prompt_func: Optional[Callable] = None,\n max_batch_size: Optional[int] = 4) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| prompt | The template to use for the prompt. |\n| prompt_func | The function to use for the prompt. |\n| max_batch_size | The maximum batch size to use for batch generation. |\n| api_url | The URL for the API. |\n\nWrapper for requesting the vLLM API service.\n\nAPI Server format, started by `vllm.entrypoints.api_server`.\n\n## `VllmModel` \n\n```python\nVllmModel(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: str = 'singleton',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n prompt: str = '{input}',\n prompt_func: Optional[Callable] = None,\n max_batch_size: Optional[int] = 4,\n model_name: str = '',\n tensor_parallel_size: int = 1,\n trust_remote_code: bool = True,\n vllm_kwargs: dict = None,\n on_ray: bool = False,\n ray_address: Optional[str] = None,\n ray_config: dict = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| prompt | The template to use for the prompt. |\n| prompt_func | The function to use for the prompt. |\n| max_batch_size | The maximum batch size to use for batch generation. |\n| model_name | The name of the model to use. |\n| tensor_parallel_size | The number of tensor parallelism. |\n| trust_remote_code | Whether to trust remote code. |\n| vllm_kwargs | Additional arguments to pass to the VLLM |\n| on_ray | Whether to use Ray for parallelism. |\n| ray_address | The address of the Ray cluster. |\n| ray_config | The configuration for Ray. |\n\nLoad a large language model from VLLM.\n\n", - "**`superduper.ext.numpy.encoder`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/numpy/encoder.py)\n\n## `array` \n\n```python\narray(dtype: str,\n shape: Sequence,\n bytes_encoding: Optional[str] = None,\n encodable: str = 'encodable')\n```\n| Parameter | Description |\n|-----------|-------------|\n| dtype | The dtype of the array. |\n| shape | The shape of the array. |\n| bytes_encoding | The bytes encoding to use. |\n| encodable | The encodable to use. |\n\nCreate an encoder of numpy arrays.\n\n## `DecodeArray` \n\n```python\nDecodeArray(self,\n dtype,\n shape)\n```\n| Parameter | Description |\n|-----------|-------------|\n| dtype | The dtype of the array. |\n| shape | The shape of the array. |\n\nDecode a numpy array from bytes.\n\n## `EncodeArray` \n\n```python\nEncodeArray(self,\n dtype)\n```\n| Parameter | Description |\n|-----------|-------------|\n| dtype | The dtype of the array. |\n\nEncode a numpy array to bytes.\n\n", - "**`superduper.ext.sklearn.model`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/sklearn/model.py)\n\n## `Estimator` \n\n```python\nEstimator(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n trainer: Optional[superduper.ext.sklearn.model.SklearnTrainer] = None,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: Literal['*args',\n '**kwargs',\n '*args,\n **kwargs',\n 'singleton'] = 'singleton',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n object: sklearn.base.BaseEstimator,\n preprocess: Optional[Callable] = None,\n postprocess: Optional[Callable] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| object | The estimator object from `sklearn`. |\n| trainer | The trainer to use. |\n| preprocess | The preprocessing function to use. |\n| postprocess | The postprocessing function to use. |\n\nEstimator model.\n\nThis is a model that can be trained and used for prediction.\n\n## `SklearnTrainer` \n\n```python\nSklearnTrainer(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n key: 'ModelInputType',\n select: 'Query',\n transform: 't.Optional[t.Callable]' = None,\n metric_values: 't.Dict' = None,\n signature: 'Signature' = '*args',\n data_prefetch: 'bool' = False,\n prefetch_size: 'int' = 1000,\n prefetch_factor: 'int' = 100,\n in_memory: 'bool' = True,\n compute_kwargs: 't.Dict' = None,\n fit_params: Dict = None,\n predict_params: Dict = None,\n y_preprocess: Optional[Callable] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| key | Model input type key. |\n| select | Model select query for training. |\n| transform | (optional) transform callable. |\n| metric_values | Dictionary for metric defaults. |\n| signature | Model signature. |\n| data_prefetch | Boolean for prefetching data before forward pass. |\n| prefetch_size | Prefetch batch size. |\n| prefetch_factor | Prefetch factor for data prefetching. |\n| in_memory | If training in memory. |\n| compute_kwargs | Kwargs for compute backend. |\n| fit_params | The parameters to pass to `fit`. |\n| predict_params | The parameters to pass to `predict |\n| y_preprocess | The preprocessing function to use for the target. |\n\nA trainer for `sklearn` models.\n\n", - "**`superduper.ext.pillow.encoder`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/pillow/encoder.py)\n\n## `encode_pil_image` \n\n```python\nencode_pil_image(x,\n info: Optional[Dict] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| x | The image to encode. |\n| info | Additional information. |\n\nEncode a `PIL.Image` to bytes.\n\n## `image_type` \n\n```python\nimage_type(identifier: str,\n encodable: str = 'lazy_artifact',\n media_type: str = 'image/png',\n db: Optional[ForwardRef('Datalayer')] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | The identifier for the data type. |\n| encodable | The encodable type. |\n| media_type | The media type. |\n| db | The datalayer instance. |\n\nCreate a `DataType` for an image.\n\n## `DecoderPILImage` \n\n```python\nDecoderPILImage(self,\n handle_exceptions: bool = True)\n```\n| Parameter | Description |\n|-----------|-------------|\n| handle_exceptions | return a blank image if failure |\n\nDecoder to convert `bytes` back into a `PIL.Image` class.\n\n", - "**`superduper.ext.transformers.model`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/transformers/model.py)\n\n## `LLM` \n\n```python\nLLM(self,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n trainer: 't.Optional[Trainer]' = None,\n identifier: str = '',\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n prompt: str = '{input}',\n prompt_func: Optional[Callable] = None,\n max_batch_size: Optional[int] = 4,\n model_name_or_path: Optional[str] = None,\n adapter_id: Union[str,\n superduper.ext.transformers.training.Checkpoint,\n NoneType] = None,\n model_kwargs: Dict = None,\n tokenizer_kwargs: Dict = None,\n prompt_template: str = '{input}') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | model identifier |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| prompt | The template to use for the prompt. |\n| prompt_func | prompt function, default is None |\n| max_batch_size | The maximum batch size to use for batch generation. |\n| model_name_or_path | model name or path |\n| adapter_id | adapter id, default is None Add a adapter to the base model for inference. |\n| model_kwargs | model kwargs, all the kwargs will pass to `transformers.AutoModelForCausalLM.from_pretrained` |\n| tokenizer_kwargs | tokenizer kwargs, all the kwargs will pass to `transformers.AutoTokenizer.from_pretrained` |\n| prompt_template | prompt template, default is `\"{input}\"` |\n\nLLM model based on `transformers` library.\n\nAll the `model_kwargs` will pass to\n`transformers.AutoModelForCausalLM.from_pretrained`.\nAll the `tokenize_kwargs` will pass to\n`transformers.AutoTokenizer.from_pretrained`.\nWhen `model_name_or_path`, `bits`, `model_kwargs`, `tokenizer_kwargs` are the same,\nwill share the same base model and tokenizer cache.\n\n## `TextClassificationPipeline` \n\n```python\nTextClassificationPipeline(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n preferred_devices: 't.Sequence[str]' = ('cuda',\n 'mps',\n 'cpu'),\n device: 't.Optional[str]' = None,\n trainer: 't.Optional[Trainer]' = None,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: Literal['*args',\n '**kwargs',\n '*args,\n **kwargs',\n 'singleton'] = 'singleton',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n tokenizer_name: Optional[str] = None,\n tokenizer_cls: object = ,\n tokenizer_kwargs: Dict = None,\n model_name: Optional[str] = None,\n model_cls: object = ,\n model_kwargs: Dict = None,\n pipeline: Optional[transformers.pipelines.base.Pipeline] = None,\n task: str = 'text-classification') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| tokenizer_name | tokenizer name |\n| tokenizer_cls | tokenizer class, e.g. ``transformers.AutoTokenizer`` |\n| tokenizer_kwargs | tokenizer kwargs, will pass to ``tokenizer_cls`` |\n| model_name | model name, will pass to ``model_cls`` |\n| model_cls | model class, e.g. ``AutoModelForSequenceClassification`` |\n| model_kwargs | model kwargs, will pass to ``model_cls`` |\n| pipeline | pipeline instance, default is None, will build when None |\n| task | task of the pipeline |\n| trainer | `TransformersTrainer` instance |\n| preferred_devices | preferred devices |\n| device | device to use |\n\nA wrapper for ``transformers.Pipeline``.\n\n```python\n# Example:\n# -------\nmodel = TextClassificationPipeline(...)\n```\n\n", - "**`superduper.ext.transformers.training`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/transformers/training.py)\n\n## `create_quantization_config` \n\n```python\ncreate_quantization_config(config: superduper.ext.transformers.training.LLMTrainer)\n```\n| Parameter | Description |\n|-----------|-------------|\n| config | The configuration to use. |\n\nCreate quantization config for LLM training.\n\n## `handle_ray_results` \n\n```python\nhandle_ray_results(db,\n llm,\n results)\n```\n| Parameter | Description |\n|-----------|-------------|\n| db | datalayer, used for saving the checkpoint |\n| llm | llm model, used for saving the checkpoint |\n| results | the ray training results, contains the checkpoint |\n\nHandle the ray results.\n\nWill save the checkpoint to db if db and llm provided.\n\n## `prepare_lora_training` \n\n```python\nprepare_lora_training(model,\n config: superduper.ext.transformers.training.LLMTrainer)\n```\n| Parameter | Description |\n|-----------|-------------|\n| model | The model to prepare for LoRA training. |\n| config | The configuration to use. |\n\nPrepare LoRA training for the model.\n\nGet the LoRA target modules and convert the model to peft model.\n\n## `train_func` \n\n```python\ntrain_func(training_args: superduper.ext.transformers.training.LLMTrainer,\n train_dataset: 'Dataset',\n eval_datasets: Union[ForwardRef('Dataset'),\n Dict[str,\n ForwardRef('Dataset')]],\n model_kwargs: dict,\n tokenizer_kwargs: dict,\n trainer_prepare_func: Optional[Callable] = None,\n callbacks=None,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| training_args | training Arguments, see LLMTrainingArguments |\n| train_dataset | training dataset, can be huggingface datasets.Dataset or ray.data.Dataset |\n| eval_datasets | evaluation dataset, can be a dict of datasets |\n| model_kwargs | model kwargs for AutoModelForCausalLM |\n| tokenizer_kwargs | tokenizer kwargs for AutoTokenizer |\n| trainer_prepare_func | function to prepare trainer This function will be called after the trainer is created, we can add some custom settings to the trainer |\n| callbacks | list of callbacks will be added to the trainer |\n| kwargs | other kwargs for Trainer All the kwargs will be passed to Trainer, make sure the Trainer support these kwargs |\n\nBase training function for LLM model.\n\n## `tokenize` \n\n```python\ntokenize(tokenizer,\n example,\n X,\n y)\n```\n| Parameter | Description |\n|-----------|-------------|\n| tokenizer | The tokenizer to use. |\n| example | The example to tokenize. |\n| X | The input key. |\n| y | The output key. |\n\nFunction to tokenize the example.\n\n## `train` \n\n```python\ntrain(training_args: superduper.ext.transformers.training.LLMTrainer,\n train_dataset: datasets.arrow_dataset.Dataset,\n eval_datasets: Union[datasets.arrow_dataset.Dataset,\n Dict[str,\n datasets.arrow_dataset.Dataset]],\n model_kwargs: dict,\n tokenizer_kwargs: dict,\n db: Optional[ForwardRef('Datalayer')] = None,\n llm: Optional[ForwardRef('LLM')] = None,\n ray_configs: Optional[dict] = None,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| training_args | training Arguments, see LLMTrainingArguments |\n| train_dataset | training dataset |\n| eval_datasets | evaluation dataset, can be a dict of datasets |\n| model_kwargs | model kwargs for AutoModelForCausalLM |\n| tokenizer_kwargs | tokenizer kwargs for AutoTokenizer |\n| db | datalayer, used for creating LLMCallback |\n| llm | llm model, used for creating LLMCallback |\n| ray_configs | ray configs, must provide if using ray |\n| kwargs | other kwargs for Trainer |\n\nTrain LLM model on specified dataset.\n\nThe training process can be run on these following modes:\n- Local node without ray, but only support single GPU\n- Local node with ray, support multi-nodes and multi-GPUs\n- Remote node with ray, support multi-nodes and multi-GPUs\n\nIf run locally, will use train_func to train the model.\nCan log the training process to db if db and llm provided.\nWill reuse the db and llm from the current process.\nIf run on ray, will use ray_train to train the model.\nCan log the training process to db if db and llm provided.\nWill rebuild the db and llm for the new process that can access to db.\nThe ray cluster must can access to db.\n\n## `Checkpoint` \n\n```python\nCheckpoint(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n path: Optional[str],\n step: int) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| path | The path to the checkpoint. |\n| step | The step of the checkpoint. |\n\nCheckpoint component for saving the model checkpoint.\n\n## `LLMCallback` \n\n```python\nLLMCallback(self,\n cfg: Optional[ForwardRef('Config')] = None,\n identifier: Optional[str] = None,\n db: Optional[ForwardRef('Datalayer')] = None,\n llm: Optional[ForwardRef('LLM')] = None,\n experiment_id: Optional[str] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| cfg | The configuration to use. |\n| identifier | The identifier to use. |\n| db | The datalayer to use. |\n| llm | The LLM model to use. |\n| experiment_id | The experiment id to use. |\n\nLLM Callback for logging training process to db.\n\nThis callback will save the checkpoint to db after each epoch.\nIf the save_total_limit is set, will remove the oldest checkpoint.\n\n", - "**`superduper.ext.anthropic.model`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/anthropic/model.py)\n\n## `AnthropicCompletions` \n\n```python\nAnthropicCompletions(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: 'Signature' = '*args,\n **kwargs',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n model: 't.Optional[str]' = None,\n max_batch_size: 'int' = 8,\n client_kwargs: Dict[str,\n Any] = None,\n prompt: str = '') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| model | The Model to use, e.g. ``'text-embedding-ada-002'`` |\n| max_batch_size | Maximum batch size. |\n| client_kwargs | The keyword arguments to pass to the client. |\n| prompt | The prompt to use to seed the response. |\n\nCohere completions (chat) predictor.\n\n## `Anthropic` \n\n```python\nAnthropic(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: 'Signature' = '*args,\n **kwargs',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n model: 't.Optional[str]' = None,\n max_batch_size: 'int' = 8,\n client_kwargs: Dict[str,\n Any] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| model | The Model to use, e.g. ``'text-embedding-ada-002'`` |\n| max_batch_size | Maximum batch size. |\n| client_kwargs | The keyword arguments to pass to the client. |\n\nAnthropic predictor.\n\n", - "**`superduper.ext.jina.model`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/jina/model.py)\n\n## `JinaEmbedding` \n\n```python\nJinaEmbedding(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: str = 'singleton',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n model: 't.Optional[str]' = None,\n max_batch_size: 'int' = 8,\n api_key: Optional[str] = None,\n batch_size: int = 100,\n shape: Optional[Sequence[int]] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| model | The Model to use, e.g. ``'text-embedding-ada-002'`` |\n| max_batch_size | Maximum batch size. |\n| api_key | The API key to use for the predicto |\n| batch_size | The batch size to use for the predictor. |\n| shape | The shape of the embedding as ``tuple``. If not provided, it will be obtained by sending a simple query to the API |\n\nJina embedding predictor.\n\n## `Jina` \n\n```python\nJina(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: 'Signature' = '*args,\n **kwargs',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n model: 't.Optional[str]' = None,\n max_batch_size: 'int' = 8,\n api_key: Optional[str] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| model | The Model to use, e.g. ``'text-embedding-ada-002'`` |\n| max_batch_size | Maximum batch size. |\n| api_key | The API key to use for the predicto |\n\nCohere predictor.\n\n", - "**`superduper.ext.jina.client`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/jina/client.py)\n\n## `JinaAPIClient` \n\n```python\nJinaAPIClient(self,\n api_key: Optional[str] = None,\n model_name: str = 'jina-embeddings-v2-base-en')\n```\n| Parameter | Description |\n|-----------|-------------|\n| api_key | The Jina API key. It can be explicitly provided or automatically read from the environment variable JINA_API_KEY (recommended). |\n| model_name | The name of the Jina model to use. Check the list of available models on `https://jina.ai/embeddings/` |\n\nA client for the Jina Embedding platform.\n\nCreate a JinaAPIClient to provide an interface to encode using\nJina Embedding platform sync and async.\n\n", - "**`superduper.ext.openai.model`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/openai/model.py)\n\n## `OpenAIChatCompletion` \n\n```python\nOpenAIChatCompletion(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: str = 'singleton',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n model: 't.Optional[str]' = None,\n max_batch_size: 'int' = 8,\n openai_api_key: Optional[str] = None,\n openai_api_base: Optional[str] = None,\n client_kwargs: Optional[dict] = None,\n batch_size: int = 1,\n prompt: str = '') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| model | The Model to use, e.g. ``'text-embedding-ada-002'`` |\n| max_batch_size | Maximum batch size. |\n| openai_api_key | The OpenAI API key. |\n| openai_api_base | The server to use for requests. |\n| client_kwargs | The kwargs to be passed to OpenAI |\n| batch_size | The batch size to use. |\n| prompt | The prompt to use to seed the response. |\n\nOpenAI chat completion predictor.\n\n## `OpenAIEmbedding` \n\n```python\nOpenAIEmbedding(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: str = 'singleton',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n model: 't.Optional[str]' = None,\n max_batch_size: 'int' = 8,\n openai_api_key: Optional[str] = None,\n openai_api_base: Optional[str] = None,\n client_kwargs: Optional[dict] = None,\n shape: Optional[Sequence[int]] = None,\n batch_size: int = 100) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| model | The Model to use, e.g. ``'text-embedding-ada-002'`` |\n| max_batch_size | Maximum batch size. |\n| openai_api_key | The OpenAI API key. |\n| openai_api_base | The server to use for requests. |\n| client_kwargs | The kwargs to be passed to OpenAI |\n| shape | The shape as ``tuple`` of the embedding. |\n| batch_size | The batch size to use. |\n\nOpenAI embedding predictor.\n\n## `OpenAIAudioTranscription` \n\n```python\nOpenAIAudioTranscription(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: 'Signature' = '*args,\n **kwargs',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n model: 't.Optional[str]' = None,\n max_batch_size: 'int' = 8,\n openai_api_key: Optional[str] = None,\n openai_api_base: Optional[str] = None,\n client_kwargs: Optional[dict] = None,\n takes_context: bool = True,\n prompt: str = '') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| model | The Model to use, e.g. ``'text-embedding-ada-002'`` |\n| max_batch_size | Maximum batch size. |\n| openai_api_key | The OpenAI API key. |\n| openai_api_base | The server to use for requests. |\n| client_kwargs | The kwargs to be passed to OpenAI |\n| takes_context | Whether the model takes context into account. |\n| prompt | The prompt to guide the model's style. |\n\nOpenAI audio transcription predictor.\n\nThe prompt should contain the `\"context\"` format variable.\n\n## `OpenAIAudioTranslation` \n\n```python\nOpenAIAudioTranslation(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: str = 'singleton',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n model: 't.Optional[str]' = None,\n max_batch_size: 'int' = 8,\n openai_api_key: Optional[str] = None,\n openai_api_base: Optional[str] = None,\n client_kwargs: Optional[dict] = None,\n takes_context: bool = True,\n prompt: str = '',\n batch_size: int = 1) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| model | The Model to use, e.g. ``'text-embedding-ada-002'`` |\n| max_batch_size | Maximum batch size. |\n| openai_api_key | The OpenAI API key. |\n| openai_api_base | The server to use for requests. |\n| client_kwargs | The kwargs to be passed to OpenAI |\n| takes_context | Whether the model takes context into account. |\n| prompt | The prompt to guide the model's style. |\n| batch_size | The batch size to use. |\n\nOpenAI audio translation predictor.\n\nThe prompt should contain the `\"context\"` format variable.\n\n## `OpenAIImageCreation` \n\n```python\nOpenAIImageCreation(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: str = 'singleton',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n model: 't.Optional[str]' = None,\n max_batch_size: 'int' = 8,\n openai_api_key: Optional[str] = None,\n openai_api_base: Optional[str] = None,\n client_kwargs: Optional[dict] = None,\n takes_context: bool = True,\n prompt: str = '',\n n: int = 1,\n response_format: str = 'b64_json') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| model | The Model to use, e.g. ``'text-embedding-ada-002'`` |\n| max_batch_size | Maximum batch size. |\n| openai_api_key | The OpenAI API key. |\n| openai_api_base | The server to use for requests. |\n| client_kwargs | The kwargs to be passed to OpenAI |\n| takes_context | Whether the model takes context into account. |\n| prompt | The prompt to use to seed the response. |\n| n | The number of images to generate. |\n| response_format | The response format to use. |\n\nOpenAI image creation predictor.\n\n## `OpenAIImageEdit` \n\n```python\nOpenAIImageEdit(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: 'Signature' = '*args,\n **kwargs',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n model: 't.Optional[str]' = None,\n max_batch_size: 'int' = 8,\n openai_api_key: Optional[str] = None,\n openai_api_base: Optional[str] = None,\n client_kwargs: Optional[dict] = None,\n takes_context: bool = True,\n prompt: str = '',\n response_format: str = 'b64_json',\n n: int = 1) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| model | The Model to use, e.g. ``'text-embedding-ada-002'`` |\n| max_batch_size | Maximum batch size. |\n| openai_api_key | The OpenAI API key. |\n| openai_api_base | The server to use for requests. |\n| client_kwargs | The kwargs to be passed to OpenAI |\n| takes_context | Whether the model takes context into account. |\n| prompt | The prompt to use to seed the response. |\n| response_format | The response format to use. |\n| n | The number of images to generate. |\n\nOpenAI image edit predictor.\n\n", - "**`superduper.components.stack`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper.components/stack.py)\n\n## `Stack` \n\n```python\nStack(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n components: Sequence[superduper.components.component.Component]) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| components | List of components to stack together and add to database. |\n\nA placeholder to hold list of components under a namespace.\n\n", - "**`superduper.components.plugin`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper.components/plugin.py)\n\n## `Plugin` \n\n```python\nPlugin(self,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: None = None,\n *,\n identifier: str = '',\n plugins: \"t.Optional[t.List['Plugin']]\" = None,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n path: str,\n cache_path: str = '.superduper/plugins') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Unique identifier for the plugin. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| plugins | A list of plugins to be used in the component. |\n| path | Path to the plugin package or module. |\n| cache_path | Path to the cache directory where the plugin will be stored. |\n\nPlugin component allows to install and use external python packages as plugins.\n\n", - "**`superduper.components.template`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper.components/template.py)\n\n## `Template` \n\n```python\nTemplate(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n component: Union[superduper.components.component.Component,\n Dict],\n info: Optional[Dict] = None,\n _component_blobs: Union[Dict,\n bytes,\n NoneType] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| component | Template component with variables. |\n| info | Info. |\n| _component_blobs | Blobs in `Template.component` NOTE: This is only for internal use. |\n\nApplication template component.\n\n", - "**`superduper.components.metric`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper.components/metric.py)\n\n## `Metric` \n\n```python\nMetric(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n object: Callable) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| object | Callable or an Artifact to be applied to the data. |\n\nMetric base object used to evaluate performance on a dataset.\n\nThese objects are callable and are applied row-wise to the data, and averaged.\n\n", - "**`superduper.components.application`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper.components/application.py)\n\n## `Application` \n\n```python\nApplication(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n template: Union[superduper.components.template.Template,\n str] = None,\n kwargs: Dict) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| template | Template. |\n| kwargs | Keyword arguments passed to `template`. |\n\nApplication built from template.\n\n", - "**`superduper.components.dataset`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper.components/dataset.py)\n\n## `Dataset` \n\n```python\nDataset(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: None = None,\n *,\n upstream: \"t.Optional[t.List['Component']]\" = None,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n select: 't.Optional[Query]' = None,\n sample_size: 't.Optional[int]' = None,\n random_seed: 't.Optional[int]' = None,\n creation_date: 't.Optional[str]' = None,\n raw_data: 't.Optional[t.Sequence[t.Any]]' = None,\n pin: 'bool' = False) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| select | A query to select the documents for the dataset. |\n| sample_size | The number of documents to sample from the query. |\n| random_seed | The random seed to use for sampling. |\n| creation_date | The date the dataset was created. |\n| raw_data | The raw data for the dataset. |\n| pin | Whether to pin the dataset. If True, the dataset will load the datas from the database every time. If False, the dataset will cache the datas after we apply to db. |\n\nA dataset is an immutable collection of documents.\n\n## `DataInit` \n\n```python\nDataInit(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: None = None,\n *,\n upstream: \"t.Optional[t.List['Component']]\" = None,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n data: 't.List[t.Dict]',\n table: 'str') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n\nDataInit(identifier: str, db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None, uuid: None = None, *, upstream: \"t.Optional[t.List['Component']]\" = None, artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None, data: 't.List[t.Dict]', table: 'str')\n\n", - "**`superduper.components.model`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper.components/model.py)\n\n## `codemodel` \n\n```python\ncodemodel(item: 't.Optional[t.Callable]' = None,\n identifier: 't.Optional[str]' = None,\n datatype=None,\n model_update_kwargs: 't.Optional[t.Dict]' = None,\n flatten: 'bool' = False,\n output_schema: 't.Optional[Schema]' = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| item | Callable to wrap with `CodeModel`. |\n| identifier | Identifier for the `CodeModel`. |\n| datatype | Datatype for the model outputs. |\n| model_update_kwargs | Dictionary to define update kwargs. |\n| flatten | If `True`, flatten the outputs and save. |\n| output_schema | Schema for the model outputs. |\n\nDecorator to wrap a function with `CodeModel`.\n\nWhen a function is wrapped with this decorator,\nthe function comes out as a `CodeModel`.\n\n## `model` \n\n```python\nmodel(item: 't.Optional[t.Callable]' = None,\n identifier: 't.Optional[str]' = None,\n datatype=None,\n model_update_kwargs: 't.Optional[t.Dict]' = None,\n flatten: 'bool' = False,\n output_schema: 't.Optional[Schema]' = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| item | Callable to wrap with `ObjectModel`. |\n| identifier | Identifier for the `ObjectModel`. |\n| datatype | Datatype for the model outputs. |\n| model_update_kwargs | Dictionary to define update kwargs. |\n| flatten | If `True`, flatten the outputs and save. |\n| output_schema | Schema for the model outputs. |\n\nDecorator to wrap a function with `ObjectModel`.\n\nWhen a function is wrapped with this decorator,\nthe function comes out as an `ObjectModel`.\n\n## `CodeModel` \n\n```python\nCodeModel(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: 'Signature' = '*args,\n **kwargs',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n num_workers: 'int' = 0,\n object: 'Code') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| num_workers | Number of workers to use for parallel processing |\n| object | Code object |\n\nModel component which stores a code object.\n\n## `Model` \n\n```python\nModel(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: 'Signature' = '*args,\n **kwargs',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n\nBase class for components which can predict.\n\n## `ObjectModel` \n\n```python\nObjectModel(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: 'Signature' = '*args,\n **kwargs',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n num_workers: 'int' = 0,\n object: 't.Any') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| num_workers | Number of workers to use for parallel processing |\n| object | Model/ computation object |\n\nModel component which wraps a Model to become serializable.\n\n```python\n# Example:\n# -------\nm = ObjectModel('test', lambda x: x + 2)\nm.predict(2)\n# 4\n```\n\n## `QueryModel` \n\n```python\nQueryModel(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: 'Signature' = '**kwargs',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n preprocess: 't.Optional[t.Callable]' = None,\n postprocess: 't.Optional[t.Union[t.Callable]]' = None,\n select: 'Query') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| preprocess | Preprocess callable |\n| postprocess | Postprocess callable |\n| select | query used to find data (can include `like`) |\n\nQueryModel component.\n\nModel which can be used to query data and return those\nprecomputed queries as Results.\n\n## `Validation` \n\n```python\nValidation(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n metrics: 't.Sequence[Metric]' = (),\n key: 't.Optional[ModelInputType]' = None,\n datasets: 't.Sequence[Dataset]' = ()) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| metrics | List of metrics for validation |\n| key | Model input type key |\n| datasets | Sequence of dataset. |\n\ncomponent which represents Validation definition.\n\n## `Mapping` \n\n```python\nMapping(self,\n mapping: 'ModelInputType',\n signature: 'Signature')\n```\n| Parameter | Description |\n|-----------|-------------|\n| mapping | Mapping that represents a collection or table map. |\n| signature | Signature for the model. |\n\nClass to represent model inputs for mapping database collections or tables.\n\n## `APIBaseModel` \n\n```python\nAPIBaseModel(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: 'Signature' = '*args,\n **kwargs',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n model: 't.Optional[str]' = None,\n max_batch_size: 'int' = 8) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| model | The Model to use, e.g. ``'text-embedding-ada-002'`` |\n| max_batch_size | Maximum batch size. |\n\nAPIBaseModel component which is used to make the type of API request.\n\n## `APIModel` \n\n```python\nAPIModel(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: 'Signature' = '*args,\n **kwargs',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n model: 't.Optional[str]' = None,\n max_batch_size: 'int' = 8,\n url: 'str',\n postprocess: 't.Optional[t.Callable]' = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| model | The Model to use, e.g. ``'text-embedding-ada-002'`` |\n| max_batch_size | Maximum batch size. |\n| url | The url to use for the API request |\n| postprocess | Postprocess function to use on the output of the API request |\n\nAPIModel component which is used to make the type of API request.\n\n## `CallableInputs` \n\n```python\nCallableInputs(self,\n fn,\n predict_kwargs: 't.Dict' = {})\n```\n| Parameter | Description |\n|-----------|-------------|\n| fn | Callable function |\n| predict_kwargs | (optional) predict_kwargs if provided in Model initiation |\n\nClass represents the model callable args and kwargs.\n\n## `IndexableNode` \n\n```python\nIndexableNode(self,\n types: 't.Sequence[t.Type]') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| types | Sequence of types |\n\nBase indexable node for `ObjectModel`.\n\n## `Inputs` \n\n```python\nInputs(self,\n params)\n```\n| Parameter | Description |\n|-----------|-------------|\n| params | List of parameters of the Model object |\n\nBase class to represent the model args and kwargs.\n\n## `SequentialModel` \n\n```python\nSequentialModel(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: 'Signature' = '*args,\n **kwargs',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n models: 't.List[Model]') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| models | A list of models to use |\n\nSequential model component which wraps a model to become serializable.\n\n## `Trainer` \n\n```python\nTrainer(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n key: 'ModelInputType',\n select: 'Query',\n transform: 't.Optional[t.Callable]' = None,\n metric_values: 't.Dict' = None,\n signature: 'Signature' = '*args',\n data_prefetch: 'bool' = False,\n prefetch_size: 'int' = 1000,\n prefetch_factor: 'int' = 100,\n in_memory: 'bool' = True,\n compute_kwargs: 't.Dict' = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| key | Model input type key. |\n| select | Model select query for training. |\n| transform | (optional) transform callable. |\n| metric_values | Dictionary for metric defaults. |\n| signature | Model signature. |\n| data_prefetch | Boolean for prefetching data before forward pass. |\n| prefetch_size | Prefetch batch size. |\n| prefetch_factor | Prefetch factor for data prefetching. |\n| in_memory | If training in memory. |\n| compute_kwargs | Kwargs for compute backend. |\n\nTrainer component to train a model.\n\nTraining configuration object, containing all settings necessary for a particular\nlearning task use-case to be serialized and initiated. The object is ``callable``\nand returns a class which may be invoked to apply training.\n\n", - "**`superduper.components.listener`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper.components/listener.py)\n\n## `Listener` \n\n```python\nListener(self,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n identifier: str = '',\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n key: Union[str,\n List[str],\n Tuple[List[str],\n Dict[str,\n str]]],\n model: superduper.components.model.Model,\n select: superduper.backends.base.query.Query,\n active: bool = True,\n predict_kwargs: Optional[Dict] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | A string used to identify the model. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| key | Key to be bound to the model. |\n| model | Model for processing data. |\n| select | Object for selecting which data is processed. |\n| active | Toggle to ``False`` to deactivate change data triggering. |\n| predict_kwargs | Keyword arguments to self.model.predict(). |\n\nListener component.\n\nListener object which is used to process a column/key of a collection or table,\nand store the outputs.\n\n", - "**`superduper.components.schema`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper.components/schema.py)\n\n## `get_schema` \n\n```python\nget_schema(db,\n schema: Union[superduper.components.schema.Schema,\n str]) -> Optional[superduper.components.schema.Schema]\n```\n| Parameter | Description |\n|-----------|-------------|\n| db | Datalayer instance. |\n| schema | Schema to get. If a string, it will be loaded from the database. |\n\nHandle schema caching and loading.\n\n## `Schema` \n\n```python\nSchema(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n fields: Mapping[str,\n superduper.components.datatype.DataType]) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| fields | A mapping of field names to types or `Encoders` |\n\nA component carrying the `DataType` of columns.\n\n", - "**`superduper.components.datatype`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper.components/datatype.py)\n\n## `pickle_decode` \n\n```python\npickle_decode(b: bytes,\n info: Optional[Dict] = None) -> Any\n```\n| Parameter | Description |\n|-----------|-------------|\n| b | The bytes to decode. |\n| info | Optional information. |\n\nDecodes bytes using pickle.\n\n## `pickle_encode` \n\n```python\npickle_encode(object: Any,\n info: Optional[Dict] = None) -> bytes\n```\n| Parameter | Description |\n|-----------|-------------|\n| object | The object to encode. |\n| info | Optional information. |\n\nEncodes an object using pickle.\n\n## `base64_to_bytes` \n\n```python\nbase64_to_bytes(encoded)\n```\n| Parameter | Description |\n|-----------|-------------|\n| encoded | The base64 encoded string. |\n\nDecodes a base64 encoded string.\n\n## `bytes_to_base64` \n\n```python\nbytes_to_base64(bytes)\n```\n| Parameter | Description |\n|-----------|-------------|\n| bytes | The bytes to convert. |\n\nConverts bytes to base64.\n\n## `dill_decode` \n\n```python\ndill_decode(b: bytes,\n info: Optional[Dict] = None) -> Any\n```\n| Parameter | Description |\n|-----------|-------------|\n| b | The bytes to decode. |\n| info | Optional information. |\n\nDecodes bytes using dill.\n\n## `dill_encode` \n\n```python\ndill_encode(object: Any,\n info: Optional[Dict] = None) -> bytes\n```\n| Parameter | Description |\n|-----------|-------------|\n| object | The object to encode. |\n| info | Optional information. |\n\nEncodes an object using dill.\n\n## `encode_torch_state_dict` \n\n```python\nencode_torch_state_dict(module,\n info)\n```\n| Parameter | Description |\n|-----------|-------------|\n| module | Module. |\n| info | Information. |\n\nEncode torch state dictionary.\n\n## `file_check` \n\n```python\nfile_check(path: Any,\n info: Optional[Dict] = None) -> str\n```\n| Parameter | Description |\n|-----------|-------------|\n| path | The file path to check. |\n| info | Optional information. |\n\nChecks if a file path exists.\n\n## `get_serializer` \n\n```python\nget_serializer(identifier: str,\n method: str,\n encodable: str,\n db: Optional[ForwardRef('Datalayer')] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | The identifier of the serializer. |\n| method | The method of the serializer. |\n| encodable | The type of encodable object. |\n| db | The Datalayer instance. |\n\nGet a serializer.\n\n## `json_decode` \n\n```python\njson_decode(b: str,\n info: Optional[Dict] = None) -> Any\n```\n| Parameter | Description |\n|-----------|-------------|\n| b | The JSON string to decode |\n| info | Optional information |\n\nDecode the JSON string to an dict.\n\n## `json_encode` \n\n```python\njson_encode(object: Any,\n info: Optional[Dict] = None) -> str\n```\n| Parameter | Description |\n|-----------|-------------|\n| object | The object to encode |\n| info | Optional information |\n\nEncode the dict to a JSON string.\n\n## `torch_decode` \n\n```python\ntorch_decode(b: bytes,\n info: Optional[Dict] = None) -> Any\n```\n| Parameter | Description |\n|-----------|-------------|\n| b | The bytes to decode. |\n| info | Optional information. |\n\nDecodes bytes to a torch model.\n\n## `torch_encode` \n\n```python\ntorch_encode(object: Any,\n info: Optional[Dict] = None) -> bytes\n```\n| Parameter | Description |\n|-----------|-------------|\n| object | The object to encode. |\n| info | Optional information. |\n\nSaves an object in torch format.\n\n## `Encoder` \n\n```python\nEncoder(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n encoder: Optional[Callable] = None,\n decoder: Optional[Callable] = None,\n info: Optional[Dict] = None,\n shape: Optional[Sequence] = None,\n directory: Optional[str] = None,\n encodable: str = 'encodable',\n bytes_encoding: Optional[str] = ,\n intermediate_type: Optional[str] = 'bytes',\n media_type: Optional[str] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| encoder | A callable that converts an encodable object of this encoder to bytes. |\n| decoder | A callable that converts bytes to an encodable object of this encoder. |\n| info | An optional information dictionary. |\n| shape | The shape of the data. |\n| directory | The directory to store file types. |\n| encodable | The type of encodable object ('encodable', 'lazy_artifact', or 'file'). |\n| bytes_encoding | The encoding type for bytes ('base64' or 'bytes'). |\n| intermediate_type | Type of the intermediate data [IntermediateType.BYTES, IntermediateType.STRING] |\n| media_type | The media type. |\n\nA data type component that defines how data is encoded and decoded.\n\n## `Artifact` \n\n```python\nArtifact(self,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n x: Any = ,\n *,\n identifier: str = '',\n file_id: Optional[str] = None,\n datatype: superduper.components.datatype.DataType,\n uri: Optional[str] = None,\n sha1: Optional[str] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| file_id | unique-id of the content |\n| datatype | The datatype of the content. |\n| uri | URI of the content, if any. |\n| sha1 | SHA1 hash of the content. |\n| x | The artifact object. |\n\nClass for representing data to be saved on disk or in the artifact-store.\n\n## `DecodeTorchStateDict` \n\n```python\nDecodeTorchStateDict(self,\n cls)\n```\n| Parameter | Description |\n|-----------|-------------|\n| cls | Torch state cls |\n\nTorch state dictionary decoder.\n\n## `Encodable` \n\n```python\nEncodable(self,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n x: Any = ,\n blob: dataclasses.InitVar[typing.Optional[bytearray]] = None,\n *,\n identifier: str = '',\n file_id: Optional[str] = None,\n datatype: superduper.components.datatype.DataType,\n uri: Optional[str] = None,\n sha1: Optional[str] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| file_id | unique-id of the content |\n| datatype | The datatype of the content. |\n| uri | URI of the content, if any. |\n| sha1 | SHA1 hash of the content. |\n| x | The encodable object. |\n| blob | The blob data. |\n\nClass for encoding non-Python datatypes to the database.\n\n## `File` \n\n```python\nFile(self,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n x: Any = ,\n file_name: Optional[str] = None,\n *,\n identifier: str = '',\n file_id: Optional[str] = None,\n datatype: superduper.components.datatype.DataType,\n uri: Optional[str] = None,\n sha1: Optional[str] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| file_id | unique-id of the content |\n| datatype | The datatype of the content. |\n| uri | URI of the content, if any. |\n| sha1 | SHA1 hash of the content. |\n| x | path to the file |\n| file_name | File name |\n\nData to be saved on disk and passed as a file reference.\n\n## `LazyArtifact` \n\n```python\nLazyArtifact(self,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n x: Any = ,\n *,\n identifier: str = '',\n file_id: Optional[str] = None,\n datatype: superduper.components.datatype.DataType,\n uri: Optional[str] = None,\n sha1: Optional[str] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| file_id | unique-id of the content |\n| datatype | The datatype of the content. |\n| uri | URI of the content, if any. |\n| sha1 | SHA1 hash of the content. |\n| x | The artifact object. |\n\nData to be saved and loaded only when needed.\n\n## `LazyFile` \n\n```python\nLazyFile(self,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n x: Any = ,\n file_name: Optional[str] = None,\n *,\n identifier: str = '',\n file_id: Optional[str] = None,\n datatype: superduper.components.datatype.DataType,\n uri: Optional[str] = None,\n sha1: Optional[str] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| file_id | unique-id of the content |\n| datatype | The datatype of the content. |\n| uri | URI of the content, if any. |\n| sha1 | SHA1 hash of the content. |\n| x | path to the file |\n| file_name | File name |\n\nClass is used to load a file only when needed.\n\n## `Native` \n\n```python\nNative(self,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n x: Optional[Any] = None,\n *,\n identifier: str = '',\n file_id: Optional[str] = None,\n datatype: superduper.components.datatype.DataType,\n uri: Optional[str] = None,\n sha1: Optional[str] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| file_id | unique-id of the content |\n| datatype | The datatype of the content. |\n| uri | URI of the content, if any. |\n| sha1 | SHA1 hash of the content. |\n| x | The encodable object. |\n\nClass for representing native data supported by the underlying database.\n\n", - "**`superduper.components.table`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper.components/table.py)\n\n## `Table` \n\n```python\nTable(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n schema: superduper.components.schema.Schema,\n primary_id: str = 'id') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| schema | The schema of the table |\n| primary_id | The primary id of the table |\n\nA component that represents a table in a database.\n\n", - "**`superduper.components.component`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper.components/component.py)\n\n## `ensure_initialized` \n\n```python\nensure_initialized(func)\n```\n| Parameter | Description |\n|-----------|-------------|\n| func | Decorator function. |\n\nDecorator to ensure that the model is initialized before calling the function.\n\n## `getdeepattr` \n\n```python\ngetdeepattr(obj,\n attr)\n```\n| Parameter | Description |\n|-----------|-------------|\n| obj | Object. |\n| attr | Attribute. |\n\nGet nested attribute with dot notation.\n\n## `import_` \n\n```python\nimport_(r=None,\n path=None,\n db=None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| r | Object to be imported. |\n| path | Components directory. |\n| db | Datalayer instance. |\n\nHelper function for importing component JSONs, YAMLs, etc.\n\n## `Component` \n\n```python\nComponent(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n\nBase class for all components in `superduper`.\n\nClass to represent `superduper` serializable entities\nthat can be saved into a database.\n\n", - "**`superduper.components.vector_index`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper.components/vector_index.py)\n\n## `sqlvector` \n\n```python\nsqlvector(shape)\n```\n| Parameter | Description |\n|-----------|-------------|\n| shape | The shape of the vector |\n\nCreate an encoder for a vector (list of ints/ floats) of a given shape.\n\nThis is used for compatibility with SQL databases, as the default vector\n\n## `vector` \n\n```python\nvector(shape,\n identifier: Optional[str] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| shape | The shape of the vector |\n| identifier | The identifier of the vector |\n\nCreate an encoder for a vector (list of ints/ floats) of a given shape.\n\n## `VectorIndex` \n\n```python\nVectorIndex(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n indexing_listener: superduper.components.listener.Listener,\n compatible_listener: Optional[superduper.components.listener.Listener] = None,\n measure: superduper.vector_search.base.VectorIndexMeasureType = ,\n metric_values: Optional[Dict] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| indexing_listener | Listener which is applied to created vectors |\n| compatible_listener | Listener which is applied to vectors to be compared |\n| measure | Measure to use for comparison |\n| metric_values | Metric values for this index |\n\nA component carrying the information to apply a vector index.\n\n## `DecodeArray` \n\n```python\nDecodeArray(self,\n dtype)\n```\n| Parameter | Description |\n|-----------|-------------|\n| dtype | Datatype of array |\n\nClass to decode an array.\n\n## `EncodeArray` \n\n```python\nEncodeArray(self,\n dtype)\n```\n| Parameter | Description |\n|-----------|-------------|\n| dtype | Datatype of array |\n\nClass to encode an array.\n\n", - "**`superduper.misc`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/misc.py)\n\n## `border_msg` \n\n```python\nborder_msg(msg,\n indent=1,\n width=None,\n title=None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| msg | Message to print |\n| indent | Indentation of the box |\n| width | Width of the box |\n| title | Title of the box |\n\nPrint message-box with optional title.\n\n", - "**`superduper.jobs.task_workflow`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/jobs/task_workflow.py)\n\n## `TaskWorkflow` \n\n```python\nTaskWorkflow(self,\n database: 'Datalayer',\n G: 'DiGraph' = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| database | ``DB`` instance to use |\n| G | ``networkx.DiGraph`` to use as the graph |\n\nTask workflow class.\n\nKeep a graph of jobs that need to be performed and their dependencies,\nand perform them when called.\n\n", - "**`superduper.jobs.tasks`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/jobs/tasks.py)\n\n## `callable_job` \n\n```python\ncallable_job(cfg,\n function_to_call,\n args,\n kwargs,\n job_id,\n dependencies=(),\n db: Optional[ForwardRef('Datalayer')] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| cfg | configuration |\n| function_to_call | function to call |\n| args | positional arguments to pass to the function |\n| kwargs | keyword arguments to pass to the function |\n| job_id | unique identifier for this job |\n| dependencies | other jobs that this job depends on |\n| db | datalayer to use |\n\nRun a function in the database.\n\n## `method_job` \n\n```python\nmethod_job(cfg,\n type_id,\n identifier,\n method_name,\n args,\n kwargs,\n job_id,\n dependencies=(),\n db: Optional[ForwardRef('Datalayer')] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| cfg | user config |\n| type_id | type of component |\n| identifier | identifier of component |\n| method_name | name of method to run |\n| args | positional arguments to pass to the method |\n| kwargs | keyword arguments to pass to the method |\n| job_id | unique identifier for this job |\n| dependencies | other jobs that this job depends on |\n| db | datalayer to use |\n\nRun a method on a component in the database.\n\n", - "**`superduper.jobs.job`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/jobs/job.py)\n\n## `job` \n\n```python\njob(f)\n```\n| Parameter | Description |\n|-----------|-------------|\n| f | function to be decorated |\n\nDecorator to create a job from a function.\n\n## `ComponentJob` \n\n```python\nComponentJob(self,\n component_identifier: str,\n type_id: str,\n method_name: str,\n args: Optional[Sequence] = None,\n kwargs: Optional[Dict] = None,\n compute_kwargs: Dict = {})\n```\n| Parameter | Description |\n|-----------|-------------|\n| component_identifier | unique identifier of the component |\n| type_id | type of the component |\n| method_name | name of the method to be called |\n| args | positional arguments to be passed to the method |\n| kwargs | keyword arguments to be passed to the method |\n| compute_kwargs | Arguments to use for model predict computation |\n\nJob for running a class method of a component.\n\n## `FunctionJob` \n\n```python\nFunctionJob(self,\n callable: Callable,\n args: Optional[Sequence] = None,\n kwargs: Optional[Dict] = None,\n compute_kwargs: Dict = {})\n```\n| Parameter | Description |\n|-----------|-------------|\n| callable | function to be called |\n| args | positional arguments to be passed to the function |\n| kwargs | keyword arguments to be passed to the function |\n| compute_kwargs | Arguments to use for model predict computation |\n\nJob for running a function.\n\n## `Job` \n\n```python\nJob(self,\n args: Optional[Sequence] = None,\n kwargs: Optional[Dict] = None,\n compute_kwargs: Dict = {})\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | positional arguments to be passed to the function or method |\n| kwargs | keyword arguments to be passed to the function or method |\n| compute_kwargs | Arguments to use for model predict computation |\n\nBase class for jobs. Jobs are used to run functions or methods on.\n\n", - "**`superduper.vector_search.in_memory`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/vector_search/in_memory.py)\n\n## `InMemoryVectorSearcher` \n\n```python\nInMemoryVectorSearcher(self,\n identifier: str,\n dimensions: int,\n h: Optional[numpy.ndarray] = None,\n index: Optional[List[str]] = None,\n measure: Union[str,\n Callable] = 'cosine')\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Unique string identifier of index |\n| dimensions | Dimension of the vector embeddings |\n| h | array/ tensor of vectors |\n| index | list of IDs |\n| measure | measure to assess similarity |\n\nSimple hash-set for looking up with vector similarity.\n\n", - "**`superduper.vector_search.base`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/vector_search/base.py)\n\n## `cosine` \n\n```python\ncosine(x,\n y)\n```\n| Parameter | Description |\n|-----------|-------------|\n| x | numpy.ndarray |\n| y | numpy.ndarray, y should be normalized! |\n\nCosine similarity function for vector search.\n\n## `dot` \n\n```python\ndot(x,\n y)\n```\n| Parameter | Description |\n|-----------|-------------|\n| x | numpy.ndarray |\n| y | numpy.ndarray |\n\nDot function for vector similarity search.\n\n## `l2` \n\n```python\nl2(x,\n y)\n```\n| Parameter | Description |\n|-----------|-------------|\n| x | numpy.ndarray |\n| y | numpy.ndarray |\n\nL2 function for vector similarity search.\n\n## `BaseVectorSearcher` \n\n```python\nBaseVectorSearcher(self,\n identifier: 'str',\n dimensions: 'int',\n h: 't.Optional[numpy.ndarray]' = None,\n index: 't.Optional[t.List[str]]' = None,\n measure: 't.Optional[str]' = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Unique string identifier of index |\n| dimensions | Dimension of the vector embeddings |\n| h | Seed vectors ``numpy.ndarray`` |\n| index | list of IDs |\n| measure | measure to assess similarity |\n\nBase class for vector searchers.\n\n## `VectorItem` \n\n```python\nVectorItem(self,\n id: 'str',\n vector: 'numpy.ndarray') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| id | ID of the vector |\n| vector | Vector of the item |\n\nClass for representing a vector in vector search with id and vector.\n\n", - "**`superduper.vector_search.atlas`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/vector_search/atlas.py)\n\n## `MongoAtlasVectorSearcher` \n\n```python\nMongoAtlasVectorSearcher(self,\n identifier: str,\n collection: str,\n dimensions: Optional[int] = None,\n measure: Optional[str] = None,\n output_path: Optional[str] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Unique string identifier of index |\n| collection | Collection name |\n| dimensions | Dimension of the vector embeddings |\n| measure | measure to assess similarity |\n| output_path | Path to the output |\n\nVector searcher implementation of atlas vector search.\n\n", - "**`superduper.vector_search.lance`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/vector_search/lance.py)\n\n## `LanceVectorSearcher` \n\n```python\nLanceVectorSearcher(self,\n identifier: str,\n dimensions: int,\n h: Optional[numpy.ndarray] = None,\n index: Optional[List[str]] = None,\n measure: Optional[str] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Unique string identifier of index |\n| dimensions | Dimension of the vector embeddings in the Lance dataset |\n| h | Seed vectors ``numpy.ndarray`` |\n| index | list of IDs |\n| measure | measure to assess similarity |\n\nImplementation of a vector index using the ``lance`` library.\n\n", - "**`superduper.vector_search.update_tasks`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/vector_search/update_tasks.py)\n\n## `copy_vectors` \n\n```python\ncopy_vectors(vector_index: str,\n query: Union[Dict,\n superduper.backends.base.query.Query],\n ids: Sequence[str],\n db=typing.Optional[ForwardRef('Datalayer')])\n```\n| Parameter | Description |\n|-----------|-------------|\n| vector_index | A identifier of the vector-index. |\n| query | A query which was used by `db._build_task_workflow` method |\n| ids | List of ids which were observed as added/updated documents. |\n| db | Datalayer instance. |\n\nCopy vectors of a ``VectorIndex`` component from the databackend to the fast_vector_search backend.\n\n## `delete_vectors` \n\n```python\ndelete_vectors(vector_index: str,\n ids: Sequence[str],\n db=typing.Optional[ForwardRef('Datalayer')])\n```\n| Parameter | Description |\n|-----------|-------------|\n| vector_index | A identifier of vector-index. |\n| ids | List of ids which were observed as deleted documents. |\n| db | Datalayer instance. |\n\nDelete vectors of a ``VectorIndex`` component in the fast_vector_search backend.\n\n", - "**`superduper.vector_search.interface`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/vector_search/interface.py)\n\n## `FastVectorSearcher` \n\n```python\nFastVectorSearcher(self,\n db: 'Datalayer',\n vector_searcher,\n vector_index: str)\n```\n| Parameter | Description |\n|-----------|-------------|\n| db | Datalayer instance |\n| vector_searcher | Vector searcher instance |\n| vector_index | Vector index name |\n\nFast vector searcher implementation using the server.\n\n", - "**`superduper.base.document`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/base/document.py)\n\n## `Document` \n\n```python\nDocument(self,\n *args,\n schema: Optional[ForwardRef('Schema')] = None,\n db: Optional[ForwardRef('Datalayer')] = None,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | *args for `dict` |\n| schema | The schema to use. |\n| db | The datalayer to use. |\n| kwargs | **kwargs for `dict` |\n\nA wrapper around an instance of dict or a Encodable.\n\nThe document data is used to dump that resource to\na mix of json-able content, ids and `bytes`\n\n## `QueryUpdateDocument` \n\n```python\nQueryUpdateDocument(self,\n *args,\n schema: Optional[ForwardRef('Schema')] = None,\n db: Optional[ForwardRef('Datalayer')] = None,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | *args for `dict` |\n| schema | The schema to use. |\n| db | The datalayer to use. |\n| kwargs | **kwargs for `dict` |\n\nA document that is used to update a document in a database.\n\nThis document is used to update a document in a database.\nIt is a subclass of Document.\n\n", - "**`superduper.base.exceptions`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/base/exceptions.py)\n\n## `DatabackendException` \n\n```python\nDatabackendException(self,\n msg)\n```\n| Parameter | Description |\n|-----------|-------------|\n| msg | msg for BaseException |\n\nDatabackendException.\n\n## `BaseException` \n\n```python\nBaseException(self,\n msg)\n```\n| Parameter | Description |\n|-----------|-------------|\n| msg | msg for Exception |\n\nBaseException which logs a message after exception.\n\n## `ComponentException` \n\n```python\nComponentException(self,\n msg)\n```\n| Parameter | Description |\n|-----------|-------------|\n| msg | msg for BaseException |\n\nComponentException.\n\n## `ComponentInUseError` \n\n```python\nComponentInUseError(self,\n /,\n *args,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | *args for Exception |\n| kwargs | **kwargs for Exception |\n\nException raised when a component is already in use.\n\n## `ComponentInUseWarning` \n\n```python\nComponentInUseWarning(self,\n /,\n *args,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | *args for Exception |\n| kwargs | **kwargs for Exception |\n\nWarning raised when a component is already in use.\n\n## `MetadataException` \n\n```python\nMetadataException(self,\n msg)\n```\n| Parameter | Description |\n|-----------|-------------|\n| msg | msg for BaseException |\n\nMetadataException.\n\n## `QueryException` \n\n```python\nQueryException(self,\n msg)\n```\n| Parameter | Description |\n|-----------|-------------|\n| msg | msg for BaseException |\n\nQueryException.\n\n## `RequiredPackageVersionsNotFound` \n\n```python\nRequiredPackageVersionsNotFound(self,\n /,\n *args,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | *args for ImportError |\n| kwargs | **kwargs for ImportError |\n\nException raised when one or more required packages are not found.\n\n## `RequiredPackageVersionsWarning` \n\n```python\nRequiredPackageVersionsWarning(self,\n /,\n *args,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | *args for ImportWarning |\n| kwargs | **kwargs for ImportWarning |\n\nException raised when one or more required packages are not found.\n\n## `ServiceRequestException` \n\n```python\nServiceRequestException(self,\n msg)\n```\n| Parameter | Description |\n|-----------|-------------|\n| msg | msg for BaseException |\n\nServiceRequestException.\n\n## `UnsupportedDatatype` \n\n```python\nUnsupportedDatatype(self,\n msg)\n```\n| Parameter | Description |\n|-----------|-------------|\n| msg | msg for BaseException |\n\nUnsupportedDatatype.\n\n", - "**`superduper.base.config_dicts`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/base/config_dicts.py)\n\n## `combine_configs` \n\n```python\ncombine_configs(dicts: Sequence[Dict[str,\n object]]) -> Dict[str,\n object]\n```\n| Parameter | Description |\n|-----------|-------------|\n| dicts | The dictionaries to combine. |\n\nCombine a sequence of dictionaries into a single dictionary.\n\n## `environ_to_config_dict` \n\n```python\nenviron_to_config_dict(prefix: str,\n parent: Dict[str,\n str],\n environ: Optional[Dict[str,\n str]] = None,\n err: Optional[TextIO] = <_io.TextIOWrapper name='' mode='w' encoding='utf-8'>,\n fail: bool = False)\n```\n| Parameter | Description |\n|-----------|-------------|\n| prefix | The prefix to use for environment variables. |\n| parent | The parent dictionary to use as a basis. |\n| environ | The environment variables to read from. |\n| err | The file to write errors to. |\n| fail | Whether to raise an exception on error. |\n\nConvert environment variables to a configuration dictionary.\n\n", - "**`superduper.base.decorators`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/base/decorators.py)\n\n## `code` \n\n```python\ncode(my_callable)\n```\n| Parameter | Description |\n|-----------|-------------|\n| my_callable | The callable to mark as remote code. |\n\nDecorator to mark a function as remote code.\n\n", - "**`superduper.base.cursor`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/base/cursor.py)\n\n## `SelectResult` \n\n```python\nSelectResult(self,\n raw_cursor: Any,\n id_field: str,\n db: Optional[ForwardRef('Datalayer')] = None,\n scores: Optional[Dict[str,\n float]] = None,\n schema: Optional[ForwardRef('Schema')] = None,\n _it: int = 0) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| raw_cursor | the cursor to wrap |\n| id_field | the field to use as the document id |\n| db | the datalayer to use to decode the documents |\n| scores | a dict of scores to add to the documents |\n| schema | the schema to use to decode the documents |\n| _it | an iterator to keep track of the current position in the cursor, Default is 0. |\n\nA wrapper around a raw cursor that adds some extra functionality.\n\nA cursor that wraps a cursor and returns ``Document`` wrapping\na dict including ``Encodable`` objects.\n\n", - "**`superduper.base.config`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/base/config.py)\n\n## `BaseConfig` \n\n```python\nBaseConfig(self) -> None\n```\nA base class for configuration dataclasses.\n\nThis class allows for easy updating of configuration dataclasses\nwith a dictionary of parameters.\n\n## `CDCConfig` \n\n```python\nCDCConfig(self,\n uri: Optional[str] = None,\n strategy: Union[superduper.base.config.PollingStrategy,\n superduper.base.config.LogBasedStrategy,\n NoneType] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| uri | The URI for the CDC service |\n| strategy | The strategy to use for CDC |\n\nDescribes the configuration for change data capture.\n\n## `CDCStrategy` \n\n```python\nCDCStrategy(self,\n type: str) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| type | The type of CDC strategy |\n\nBase CDC strategy dataclass.\n\n## `Cluster` \n\n```python\nCluster(self,\n compute: superduper.base.config.Compute = None,\n vector_search: superduper.base.config.VectorSearch = None,\n rest: superduper.base.config.Rest = None,\n cdc: superduper.base.config.CDCConfig = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| compute | The URI for compute - None: run all jobs in local mode i.e. simple function call - \"ray://host:port\": Run all jobs on a remote ray cluster |\n| vector_search | The URI for the vector search service - None: Run vector search on local - `f\"http://{host}:{port}\"`: Connect a remote vector search service |\n| rest | The URI for the REST service - `f\"http://{host}:{port}\"`: Connect a remote vector search service |\n| cdc | The URI for the change data capture service (if \"None\" then no cdc assumed) None: Run cdc on local as a thread. - `f\"{http://{host}:{port}\"`: Connect a remote cdc service |\n\nDescribes a connection to distributed work via Ray.\n\n## `Compute` \n\n```python\nCompute(self,\n uri: Optional[str] = None,\n compute_kwargs: Dict = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| uri | The URI for the compute service |\n| compute_kwargs | The keyword arguments to pass to the compute service |\n\nDescribes the configuration for distributed computing.\n\n## `Config` \n\n```python\nConfig(self,\n envs: dataclasses.InitVar[typing.Optional[typing.Dict[str,\n str]]] = None,\n data_backend: str = 'mongodb://localhost:27017/test_db',\n lance_home: str = '.superduper/vector_indices',\n artifact_store: Optional[str] = None,\n metadata_store: Optional[str] = None,\n cluster: superduper.base.config.Cluster = None,\n retries: superduper.base.config.Retry = None,\n downloads: superduper.base.config.Downloads = None,\n fold_probability: float = 0.05,\n log_level: superduper.base.config.LogLevel = ,\n logging_type: superduper.base.config.LogType = ,\n bytes_encoding: superduper.base.config.BytesEncoding = ,\n auto_schema: bool = True) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| envs | The envs datas |\n| data_backend | The URI for the data backend |\n| lance_home | The home directory for the Lance vector indices, Default: .superduper/vector_indices |\n| artifact_store | The URI for the artifact store |\n| metadata_store | The URI for the metadata store |\n| cluster | Settings distributed computing and change data capture |\n| retries | Settings for retrying failed operations |\n| downloads | Settings for downloading files |\n| fold_probability | The probability of validation fold |\n| log_level | The severity level of the logs |\n| logging_type | The type of logging to use |\n| bytes_encoding | The encoding of bytes in the data backend |\n| auto_schema | Whether to automatically create the schema. If True, the schema will be created if it does not exist. |\n\nThe data class containing all configurable superduper values.\n\n## `Downloads` \n\n```python\nDownloads(self,\n folder: Optional[str] = None,\n n_workers: int = 0,\n headers: Dict = None,\n timeout: Optional[int] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| folder | The folder to download files to |\n| n_workers | The number of workers to use for downloading |\n| headers | The headers to use for downloading |\n| timeout | The timeout for downloading |\n\nDescribes the configuration for downloading files.\n\n## `LogBasedStrategy` \n\n```python\nLogBasedStrategy(self,\n type: str = 'logbased',\n resume_token: Optional[Dict[str,\n str]] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| resume_token | The resume token to use for log-based CDC |\n| type | The type of CDC strategy |\n\nDescribes a log-based strategy for change data capture.\n\n## `PollingStrategy` \n\n```python\nPollingStrategy(self,\n type: 'str' = 'incremental',\n auto_increment_field: Optional[str] = None,\n frequency: float = 3600) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| auto_increment_field | The field to use for auto-incrementing |\n| frequency | The frequency to poll for changes |\n| type | The type of CDC strategy |\n\nDescribes a polling strategy for change data capture.\n\n## `Rest` \n\n```python\nRest(self,\n uri: Optional[str] = None,\n config: Optional[str] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| uri | The URI for the REST service |\n| config | The path to the config yaml file for the REST service |\n\nDescribes the configuration for the REST service.\n\n## `Retry` \n\n```python\nRetry(self,\n stop_after_attempt: int = 2,\n wait_max: float = 10.0,\n wait_min: float = 4.0,\n wait_multiplier: float = 1.0) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| stop_after_attempt | The number of attempts to make |\n| wait_max | The maximum time to wait between attempts |\n| wait_min | The minimum time to wait between attempts |\n| wait_multiplier | The multiplier for the wait time between attempts |\n\nDescribes how to retry using the `tenacity` library.\n\n## `VectorSearch` \n\n```python\nVectorSearch(self,\n uri: Optional[str] = None,\n type: str = 'in_memory',\n backfill_batch_size: int = 100) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| uri | The URI for the vector search service |\n| type | The type of vector search service |\n| backfill_batch_size | The size of the backfill batch |\n\nDescribes the configuration for vector search.\n\n", - "**`superduper.base.configs`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/base/configs.py)\n\n## `ConfigError` \n\n```python\nConfigError(self,\n /,\n *args,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | *args for `Exception` |\n| kwargs | **kwargs for `Exception` |\n\nAn exception raised when there is an error in the configuration.\n\n## `ConfigSettings` \n\n```python\nConfigSettings(self,\n cls: Type,\n environ: Optional[Dict] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| cls | The Pydantic class to read. |\n| environ | The environment variables to read from. |\n\nHelper class to read a configuration from a dataclass.\n\nReads a dataclass class from a configuration file and environment variables.\n\n", - "**`superduper.base.code`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/base/code.py)\n\n## `Code` \n\n```python\nCode(self,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n identifier: str = '',\n code: str) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| code | The code to store. |\n\nA class to store remote code.\n\nThis class stores remote code that can be executed on a remote server.\n\n", - "**`superduper.base.variables`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/base/variables.py)\n\n## `Variable` \n\n```python\nVariable(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n\nMechanism for allowing \"free variables\" in a leaf object.\n\nThe idea is to allow a variable to be set at runtime, rather than\nat object creation time.\n\n## `VariableError` \n\n```python\nVariableError(self,\n /,\n *args,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | *args for `Exception`. |\n| kwargs | **kwargs for `Exception`. |\n\nVariable error.\n\n", - "**`superduper.base.leaf`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/base/leaf.py)\n\n## `find_leaf_cls` \n\n```python\nfind_leaf_cls(full_import_path) -> Type[superduper.base.leaf.Leaf]\n```\n| Parameter | Description |\n|-----------|-------------|\n| full_import_path | Full import path of the class. |\n\nFind leaf class by class full import path.\n\n## `Leaf` \n\n```python\nLeaf(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n\nBase class for all leaf classes.\n\n", - "**`superduper.base.superduper`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/base/superduper.py)\n\n## `superduper` \n\n```python\nsuperduper(item: Optional[Any] = None,\n **kwargs) -> Any\n```\n| Parameter | Description |\n|-----------|-------------|\n| item | A database or model |\n| kwargs | Additional keyword arguments to pass to the component |\n\n`superduper` API to automatically wrap an object to a db or a component.\n\nAttempts to automatically wrap an item in a superduper.ioponent by\nusing duck typing to recognize it.\n\n", - "**`superduper.base.datalayer`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/base/datalayer.py)\n\n## `Datalayer` \n\n```python\nDatalayer(self,\n databackend: superduper.backends.base.data_backend.BaseDataBackend,\n metadata: superduper.backends.base.metadata.MetaDataStore,\n artifact_store: superduper.backends.base.artifacts.ArtifactStore,\n compute: superduper.backends.base.compute.ComputeBackend = )\n```\n| Parameter | Description |\n|-----------|-------------|\n| databackend | Object containing connection to Datastore. |\n| metadata | Object containing connection to Metadatastore. |\n| artifact_store | Object containing connection to Artifactstore. |\n| compute | Object containing connection to ComputeBackend. |\n\nBase database connector for superduper.\n\n## `LoadDict` \n\n```python\nLoadDict(self,\n database: superduper.base.datalayer.Datalayer,\n field: Optional[str] = None,\n callable: Optional[Callable] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| database | Instance of Datalayer. |\n| field | (optional) Component type identifier. |\n| callable | (optional) Callable function on key. |\n\nHelper class to load component identifiers with on-demand loading from the database.\n\n", - "**`superduper.rest.utils`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/rest/utils.py)\n\n## `parse_query` \n\n```python\nparse_query(query,\n documents,\n db)\n```\n| Parameter | Description |\n|-----------|-------------|\n| query | query string to parse |\n| documents | documents to use in the query |\n| db | datalayer instance |\n\nParse a query string into a query object.\n\n## `strip_artifacts` \n\n```python\nstrip_artifacts(r: Any)\n```\n| Parameter | Description |\n|-----------|-------------|\n| r | the data to strip artifacts from |\n\nStrip artifacts for the data.\n\n", - "---\nsidebar_label: Multimodal vector search - Image\nfilename: build.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Multimodal vector search - Image\n\n\n## Connect to superduper\n\n:::note\nNote that this is only relevant if you are running superduper in development mode.\nOtherwise refer to \"Configuring your production system\".\n:::\n\n```python\nfrom superduper import superduper\n\ndb = superduper('mongomock:///test_db')\n```\n\n\n## Get useful sample data\n\n```python\n!curl -O https://superduperdb-public-demo.s3.amazonaws.com/images.zip && unzip images.zip\nimport os\nfrom PIL import Image\n\ndata = [f'images/{x}' for x in os.listdir('./images') if x.endswith(\".png\")][:200]\ndata = [ Image.open(path) for path in data]\n```\n\n```python\ndata = [{'img': d} for d in data[:100]]\n```\n\n## Build multimodal embedding models\n\nWe define the output data type of a model as a vector for vector transformation.\n\n\n\n \n ```python\n from superduper.components.vector_index import vector\n output_datatpye = vector(shape=(1024,)) \n ```\n \n \n ```python\n from superduper.components.vector_index import sqlvector\n output_datatpye = sqlvector(shape=(1024,)) \n ```\n \n\nThen define two models, one for text embedding and one for image embedding.\n\n```python\n!pip install git+https://github.com/openai/CLIP.git\n!pip install ../../plugins/torch\nimport clip\nfrom superduper import vector\nfrom superduper_torch import TorchModel\n\n# Load the CLIP model and obtain the preprocessing function\nmodel, preprocess = clip.load(\"RN50\", device='cpu')\n\n# Create a TorchModel for text encoding\ncompatible_model = TorchModel(\n identifier='clip_text', # Unique identifier for the model\n object=model, # CLIP model\n preprocess=lambda x: clip.tokenize(x)[0], # Model input preprocessing using CLIP \n postprocess=lambda x: x.tolist(), # Convert the model output to a list\n datatype=output_datatpye, # Vector encoder with shape (1024,)\n forward_method='encode_text', # Use the 'encode_text' method for forward pass \n)\n\n# Create a TorchModel for visual encoding\nembedding_model = TorchModel(\n identifier='clip_image', # Unique identifier for the model\n object=model.visual, # Visual part of the CLIP model \n preprocess=preprocess, # Visual preprocessing using CLIP\n postprocess=lambda x: x.tolist(), # Convert the output to a list \n datatype=output_datatpye, # Vector encoder with shape (1024,)\n)\n```\n\nBecause we use multimodal models, we define different keys to specify which model to use for embedding calculations in the vector_index.\n\n```python\nindexing_key = 'img' # we use img key for img embedding\ncompatible_key = 'text' # we use text key for text embedding\n```\n\n## Create vector-index\n\n```python\nvector_index_name = 'my-vector-index'\n```\n\n```python\nfrom superduper import VectorIndex, Listener\n\nvector_index = VectorIndex(\n vector_index_name,\n indexing_listener=Listener(\n key=indexing_key, # the `Document` key `model` should ingest to create embedding\n select=db['docs'].select(), # a `Select` query telling which data to search over\n model=embedding_model, # a `_Predictor` how to convert data to embeddings\n identifier='indexing-listener',\n ),\n compatible_listener=Listener(\n key=compatible_key, # the `Document` key `model` should ingest to create embedding\n model=compatible_model, # a `_Predictor` how to convert data to embeddings\n select=None,\n identifier='compatible-listener',\n )\n)\n```\n\n```python\nfrom superduper import Application\n\napplication = Application(\n 'image-vector-search',\n components=[vector_index],\n)\n\ndb.apply(application)\n```\n\n## Add the data\n\nThe order in which data is added is not important. *However* if your data requires a custom `Schema` in order to work, it's easier to add the `Application` first, and the data later. The advantage of this flexibility, is that once the `Application` is installed, it's waiting for incoming data, so that the `Application` is always up-to-date. This comes in particular handy with AI scenarios which need to respond to changing news.\n\n```python\nfrom superduper import Document\n\ntable_or_collection = db['docs']\n\nids = db.execute(table_or_collection.insert([Document(r) for r in data]))\n```\n\n## Perform a vector search\n\nWe can perform the vector searches using two types of data:\n\n- Text: By text description, we can find images similar to the text description.\n- Image: By using an image, we can find images similar to the provided image.\n\n\n\n \n ```python\n item = Document({compatible_key: \"Find a black dog\"}) \n ```\n \n \n ```python\n from IPython.display import display\n search_image = data[0]\n display(search_image)\n item = Document({indexing_key: search_image}) \n ```\n \n\nOnce we have this search target, we can execute a search as follows.\n\n```python\nselect = db['docs'].like(item, vector_index=vector_index_name, n=5).select()\nresults = list(db.execute(select))\n```\n\n## Visualize Results\n\n```python\nfrom IPython.display import display\nfor result in results:\n display(result[indexing_key])\n```\n\n## Create a `Template`\n\n```python\nfrom superduper import Template\n\ntemplate = Template(\n 'image-vector-search',\n template=application,\n substitutions={'docs': 'table'},\n)\n\ntemplate.export('.')\n```\n\n", - "---\nsidebar_label: Fine tune LLM on database\nfilename: build.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Fine tune LLM on database\n\n\n## Connect to superduper\n\n:::note\nNote that this is only relevant if you are running superduper in development mode.\nOtherwise refer to \"Configuring your production system\".\n:::\n\n```python\nfrom superduper import superduper\n\ndb = superduper('mongomock:///test_db')\n```\n\n\n## Get LLM Finetuning Data\n\nThe following are examples of training data in different formats.\n\n\n\n \n ```python\n from datasets import load_dataset\n from superduper.base.document import Document\n dataset_name = \"timdettmers/openassistant-guanaco\"\n dataset = load_dataset(dataset_name)\n \n train_dataset = dataset[\"train\"]\n eval_dataset = dataset[\"test\"]\n \n train_documents = [\n Document({**example, \"_fold\": \"train\"})\n for example in train_dataset\n ]\n eval_documents = [\n Document({**example, \"_fold\": \"valid\"})\n for example in eval_dataset\n ]\n \n datas = train_documents + eval_documents \n ```\n \n \n ```python\n from datasets import load_dataset\n \n from superduper.base.document import Document\n dataset_name = \"mosaicml/instruct-v3\"\n dataset = load_dataset(dataset_name)\n \n train_dataset = dataset[\"train\"]\n eval_dataset = dataset[\"test\"]\n \n train_documents = [\n Document({**example, \"_fold\": \"train\"})\n for example in train_dataset\n ]\n eval_documents = [\n Document({**example, \"_fold\": \"valid\"})\n for example in eval_dataset\n ]\n \n datas = train_documents + eval_documents \n ```\n \n \n ```python\n from datasets import load_dataset\n from superduper.base.document import Document\n dataset_name = \"philschmid/dolly-15k-oai-style\"\n dataset = load_dataset(dataset_name)['train'].train_test_split(0.9)\n \n train_dataset = dataset[\"train\"]\n eval_dataset = dataset[\"test\"]\n \n train_documents = [\n Document({**example, \"_fold\": \"train\"})\n for example in train_dataset\n ]\n eval_documents = [\n Document({**example, \"_fold\": \"valid\"})\n for example in eval_dataset\n ]\n \n datas = train_documents + eval_documents \n ```\n \n\nWe can define different training parameters to handle this type of data.\n\n\n\n \n ```python\n # Function for transformation after extracting data from the database\n transform = None\n key = ('text')\n training_kwargs=dict(dataset_text_field=\"text\") \n ```\n \n \n ```python\n # Function for transformation after extracting data from the database\n def transform(prompt, response):\n return {'text': prompt + response + \"\"}\n \n key = ('prompt', 'response')\n training_kwargs=dict(dataset_text_field=\"text\") \n ```\n \n \n ```python\n # Function for transformation after extracting data from the database\n transform = None\n \n key = ('messages')\n training_kwargs=None \n ```\n \n\nExample input_text and output_text\n\n\n\n \n ```python\n data = datas[0]\n input_text, output_text = data[\"text\"].rsplit(\"### Assistant: \", maxsplit=1)\n input_text += \"### Assistant: \"\n output_text = output_text.rsplit(\"### Human:\")[0]\n print(\"Input: --------------\")\n print(input_text)\n print(\"Response: --------------\")\n print(output_text) \n ```\n \n \n ```python\n data = datas[0]\n input_text = data[\"prompt\"]\n output_text = data[\"response\"]\n print(\"Input: --------------\")\n print(input_text)\n print(\"Response: --------------\")\n print(output_text) \n ```\n \n \n ```python\n data = datas[0]\n messages = data[\"messages\"]\n input_text = messages[:-1]\n output_text = messages[-1][\"content\"]\n print(\"Input: --------------\")\n print(input_text)\n print(\"Response: --------------\")\n print(output_text) \n ```\n \n\n\n## Insert simple data\n\nAfter turning on auto_schema, we can directly insert data, and superduper will automatically analyze the data type, and match the construction of the table and datatype.\n\n```python\nfrom superduper import Document\n\ntable_or_collection = db['docs']\n\nids = db.execute(table_or_collection.insert([Document(data) for data in datas]))\nselect = table_or_collection.select()\n```\n\n## Select a Model\n\n```python\nmodel_name = \"facebook/opt-125m\"\nmodel_kwargs = dict()\ntokenizer_kwargs = dict()\n\n# or \n# model_name = \"mistralai/Mistral-7B-Instruct-v0.2\"\n# token = \"hf_xxxx\"\n# model_kwargs = dict(token=token)\n# tokenizer_kwargs = dict(token=token)\n```\n\n\n## Build A Trainable LLM\n\n**Create an LLM Trainer for training**\n\nThe parameters of this LLM Trainer are basically the same as `transformers.TrainingArguments`, but some additional parameters have been added for easier training setup.\n\n```python\nfrom superduper_transformers import LLM, LLMTrainer\n\ntrainer = LLMTrainer(\n identifier=\"llm-finetune-trainer\",\n output_dir=\"output/finetune\",\n overwrite_output_dir=True,\n num_train_epochs=3,\n save_total_limit=3,\n logging_steps=10,\n evaluation_strategy=\"steps\",\n save_steps=100,\n eval_steps=100,\n per_device_train_batch_size=1,\n per_device_eval_batch_size=1,\n gradient_accumulation_steps=2,\n max_seq_length=512,\n key=key,\n select=select,\n transform=transform,\n training_kwargs=training_kwargs,\n)\n```\n\n\n\n \n ```python\n trainer.use_lora = True \n ```\n \n \n ```python\n trainer.use_lora = True\n trainer.bits = 4 \n ```\n \n \n ```python\n !pip install deepspeed\n deepspeed = {\n \"train_batch_size\": \"auto\",\n \"train_micro_batch_size_per_gpu\": \"auto\",\n \"gradient_accumulation_steps\": \"auto\",\n \"zero_optimization\": {\n \"stage\": 2,\n },\n }\n trainer.use_lora = True\n trainer.bits = 4\n trainer.deepspeed = deepspeed \n ```\n \n \n ```python\n trainer.use_lora = True\n trainer.bits = 4\n trainer.num_gpus = 2 \n ```\n \n\nCreate a trainable LLM model and add it to the database, then the training task will run automatically.\n\n```python\nllm = LLM(\n identifier=\"llm\",\n model_name_or_path=model_name,\n trainer=trainer,\n model_kwargs=model_kwargs,\n tokenizer_kwargs=tokenizer_kwargs,\n)\n\ndb.apply(llm)\n```\n\n## Load the trained model\nThere are two methods to load a trained model:\n\n- **Load the model directly**: This will load the model with the best metrics (if the transformers' best model save strategy is set) or the last version of the model.\n- **Use a specified checkpoint**: This method downloads the specified checkpoint, then initializes the base model, and finally merges the checkpoint with the base model. This approach supports custom operations such as resetting flash_attentions, model quantization, etc., during initialization.\n\n\n\n \n ```python\n llm = db.load(\"model\", \"llm\") \n ```\n \n \n ```python\n from superduper_transformers import LLM\n \n experiment_id = db.show(\"checkpoint\")[-1]\n version = None # None means the last checkpoint\n checkpoint = db.load(\"checkpoint\", experiment_id, version=version)\n llm = LLM(\n identifier=\"llm\",\n model_name_or_path=model_name,\n adapter_id=checkpoint,\n model_kwargs=dict(load_in_4bit=True)\n ) \n ```\n \n\n```python\nllm.predict(input_text, max_new_tokens=200)\n```\n\n```python\nfrom superduper import Template\n\nt = Template('llm-finetune', template=llm, substitutions={'docs': 'collection', model_name: 'model_name'})\n```\n\n```python\nt.export('.')\n```\n\n", - "---\nsidebar_label: Text Vector Search\nfilename: build.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Text Vector Search\n\nYou'll find this example as well as the saved template in the main repository of `superduper`.\nSee [here](https://github.com/superduper-io/superduper/tree/main/templates/text_vector_search).\n\nIf you'd like to modify the template, or practice building it yourself, then you can rerun the `build.ipynb` notebook\nin the template directory\n\n\n## Connect to superduper\n\n```python\nfrom superduper import superduper\n\ndb = superduper('mongomock://test_db')\n```\n\n\n## Get useful sample data\n\n\n\n \n ```python\n !curl -O https://superduperdb-public-demo.s3.amazonaws.com/text.json\n import json\n \n with open('text.json', 'r') as f:\n data = json.load(f) \n ```\n \n \n ```python\n !curl -O https://superduperdb-public-demo.s3.amazonaws.com/pdfs.zip && unzip -o pdfs.zip\n import os\n \n data = [f'pdfs/{x}' for x in os.listdir('./pdfs') if x.endswith('.pdf')] \n ```\n \n\n```python\ndatas = [{'x': d} for d in data]\n```\n\n\n## Create datatype\n\nSuperduperDB supports automatic data conversion, so users don’t need to worry about the compatibility of different data formats (`PIL.Image`, `numpy.array`, `pandas.DataFrame`, etc.) with the database.\n\nIt also supports custom data conversion methods for transforming data, such as defining the following Datatype.\n\n\n\n \n ```python\n datatype = 'str' \n ```\n \n \n ```python\n from superduper import DataType\n \n # By creating a datatype and setting its encodable attribute to “file” for saving PDF files, \n # all datatypes encoded as “file” will have their corresponding files uploaded to the artifact store. \n # References will be recorded in the database, and the files will be downloaded locally when needed. \n \n datatype = DataType('pdf', encodable='file') \n ```\n \n\n\n## Setup tables or collections\n\n```python\nfrom superduper.components.table import Table\nfrom superduper import Schema\n\nschema = Schema(identifier=\"schema\", fields={\"x\": datatype})\ntable = Table(\"docs\", schema=schema)\nselect = db['docs'].select()\n```\n\n\n## Apply a chunker for search\n\n:::note\nNote that applying a chunker is ***not*** mandatory for search.\nIf your data is already chunked (e.g. short text snippets or audio) or if you\nare searching through something like images, which can't be chunked, then this\nwon't be necessary.\n:::\n\n\n\n \n ```python\n from superduper import model\n \n CHUNK_SIZE = 200\n \n @model(flatten=True, model_update_kwargs={'document_embedded': False})\n def chunker(text):\n text = text.split()\n chunks = [' '.join(text[i:i + CHUNK_SIZE]) for i in range(0, len(text), CHUNK_SIZE)]\n return chunks \n ```\n \n \n ```python\n !pip install -q \"unstructured[pdf]\"\n from superduper import model\n from unstructured.partition.pdf import partition_pdf\n \n CHUNK_SIZE = 500\n \n @model(flatten=True)\n def chunker(pdf_file):\n elements = partition_pdf(pdf_file)\n text = '\\n'.join([e.text for e in elements])\n chunks = [text[i:i + CHUNK_SIZE] for i in range(0, len(text), CHUNK_SIZE)]\n return chunks \n ```\n \n\nNow we wrap this chunker as a `Listener`, so that it processes incoming data\n\n```python\nfrom superduper import Listener\n\nupstream_listener = Listener(\n model=chunker,\n select=db['docs'].select(),\n key='x',\n uuid=\"chunk\",\n identifier='chunker',\n)\n```\n\n## Select outputs of upstream listener\n\n:::note\nThis is useful if you have performed a first step, such as pre-computing \nfeatures, or chunking your data. You can use this query to \noperate on those outputs.\n:::\n\n```python\nindexing_key = upstream_listener.outputs\nindexing_key\n```\n\n\n## Build text embedding model\n\n\n\n \n ```python\n from superduper_openai import OpenAIEmbedding\n import os\n \n os.environ['OPENAI_API_KEY'] = 'sk-'\n \n embedding_model = OpenAIEmbedding(identifier='text-embedding-ada-002') \n ```\n \n \n ```python\n import os\n from superduper_jina import JinaEmbedding\n \n os.environ[\"JINA_API_KEY\"] = \"jina_xxxx\"\n \n # define the model\n embedding_model = JinaEmbedding(identifier='jina-embeddings-v2-base-en') \n ```\n \n \n ```python\n !pip install sentence-transformers\n from superduper import vector\n import sentence_transformers\n from superduper_sentence_transformers import SentenceTransformer\n \n embedding_model = SentenceTransformer(\n identifier=\"embedding\",\n object=sentence_transformers.SentenceTransformer(\"BAAI/bge-small-en\"),\n datatype=vector(shape=(1024,)),\n postprocess=lambda x: x.tolist(),\n predict_kwargs={\"show_progress_bar\": True},\n ) \n ```\n \n\n```python\nprint(len(embedding_model.predict(\"What is superduper\")))\n```\n\n## Create vector-index\n\n```python\nvector_index_name = 'my-vector-index'\n```\n\n```python\nfrom superduper import VectorIndex, Listener\n\nvector_index = VectorIndex(\n vector_index_name,\n indexing_listener=Listener(\n key=indexing_key, # the `Document` key `model` should ingest to create embedding\n select=db[indexing_key].select(), # a `Select` query telling which data to search over\n model=embedding_model, # a `_Predictor` how to convert data to embeddings\n identifier=f'{embedding_model.identifier}-listener',\n upstream=[table, upstream_listener], # this makes sure that the table is already set up when the other components are triggered\n )\n)\n```\n\n```python\nfrom superduper import Application\n\napplication = Application(\n 'text-vector-search', \n components=[\n table,\n upstream_listener,\n vector_index,\n ]\n)\n```\n\n```python\ndb.apply(application)\n```\n\n```python\napplication.info(verbosity=2)\n```\n\n```python\ndb['docs'].insert(datas).execute()\nselect = db['docs'].select()\n```\n\n```python\ndb.databackend.db.list_collection_names()\n```\n\n## Perform a vector search\n\n```python\nfrom superduper import Document\n# Perform the vector search based on the query\nitem = Document({indexing_key: \"Tell me about vector-search\"})\n```\n\n```python\nresults = db[indexing_key].like(item, vector_index=vector_index_name, n=10).select().execute()\n```\n\n```python\nfor result in results:\n print(\"\\n\", '-' * 20, '\\n')\n print(Document(result.unpack())[indexing_key])\n```\n\n```python\nfrom superduper import Template\n\nt = Template(\n 'vector-search',\n template=application,\n substitutions={'docs': 'table_name'},\n)\n```\n\n```python\nt.export('.')\n```\n\n```python\n!cat component.json | jq .\n```\n\n", - "---\nsidebar_label: Transfer learning\nfilename: build.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Transfer learning\n\n\n## Connect to superduper\n\n```python\nfrom superduper import superduper\n\ndb = superduper('mongomock:///test_db')\n```\n\n\n## Get useful sample data\n\n\n\n \n ```python\n !curl -O https://superduperdb-public-demo.s3.amazonaws.com/text_classification.json\n import json\n \n with open(\"text_classification.json\", \"r\") as f:\n data = json.load(f)\n num_classes = 2 \n ```\n \n \n ```python\n !curl -O https://superduperdb-public-demo.s3.amazonaws.com/images_classification.zip && unzip images_classification.zip\n import json\n from PIL import Image\n \n with open('images/images.json', 'r') as f:\n data = json.load(f)\n \n data = [{'x': Image.open(d['image_path']), 'y': d['label']} for d in data]\n num_classes = 2 \n ```\n \n\nAfter obtaining the data, we insert it into the database.\n\n\n\n \n ```python\n datas = [{'txt': d['x'], 'label': d['y']} for d in data] \n ```\n \n \n ```python\n datas = [{'image': d['x'], 'label': d['y']} for d in data] \n ```\n \n\n\n## Insert simple data\n\nAfter turning on auto_schema, we can directly insert data, and superduper will automatically analyze the data type, and match the construction of the table and datatype.\n\n```python\nfrom superduper import Document\n\ntable_or_collection = db['docs']\n\nids = db.execute(table_or_collection.insert([Document(data) for data in datas]))\nselect = table_or_collection.select()\n```\n\n\n## Compute features\n\n\n\n \n ```python\n key = 'txt'\n import sentence_transformers\n from superduper import vector, Listener\n from superduper_sentence_transformers import SentenceTransformer\n \n superdupermodel = SentenceTransformer(\n identifier=\"embedding\",\n object=sentence_transformers.SentenceTransformer(\"sentence-transformers/all-MiniLM-L6-v2\"),\n postprocess=lambda x: x.tolist(),\n )\n \n jobs, listener = db.apply(\n Listener(\n model=superdupermodel,\n select=select,\n key=key,\n identifier=\"features\"\n )\n ) \n ```\n \n \n ```python\n key = 'image'\n import torchvision.models as models\n from torchvision import transforms\n from superduper_torch import TorchModel\n from superduper import Listener\n from PIL import Image\n \n class TorchVisionEmbedding:\n def __init__(self):\n # Load the pre-trained ResNet-18 model\n self.resnet = models.resnet18(pretrained=True)\n \n # Set the model to evaluation mode\n self.resnet.eval()\n \n def preprocess(self, image):\n # Preprocess the image\n preprocess = preprocess = transforms.Compose([\n transforms.Resize(256),\n transforms.CenterCrop(224),\n transforms.ToTensor(),\n transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),\n ])\n tensor_image = preprocess(image)\n return tensor_image\n \n model = TorchVisionEmbedding()\n superdupermodel = TorchModel(identifier='my-vision-model-torch', object=model.resnet, preprocess=model.preprocess, postprocess=lambda x: x.numpy().tolist())\n \n jobs, listener = db.apply(\n Listener(\n model=superdupermodel,\n select=select,\n key=key,\n identifier=\"features\"\n )\n ) \n ```\n \n\n## Choose features key from feature listener\n\n```python\ninput_key = listener.outputs\ntraining_select = select.outputs(listener.predict_id)\n```\n\nWe can find the calculated feature data from the database.\n\n```python\nfeature = list(training_select.limit(1).execute())[0][input_key]\nfeature_size = len(feature)\n```\n\n\n## Build and train classifier\n\n\n\n \n ```python\n from superduper_sklearn import Estimator, SklearnTrainer\n from sklearn.svm import SVC\n \n model = Estimator(\n identifier=\"my-model\",\n object=SVC(),\n trainer=SklearnTrainer(\n \"my-trainer\",\n key=(input_key, \"label\"),\n select=training_select,\n ),\n ) \n ```\n \n \n ```python\n import torch\n from torch import nn\n from superduper_torch.model import TorchModel\n from superduper_torch.training import TorchTrainer\n from torch.nn.functional import cross_entropy\n \n \n class SimpleModel(nn.Module):\n def __init__(self, input_size=16, hidden_size=32, num_classes=3):\n super(SimpleModel, self).__init__()\n self.fc1 = nn.Linear(input_size, hidden_size)\n self.relu = nn.ReLU()\n self.fc2 = nn.Linear(hidden_size, num_classes)\n \n def forward(self, x):\n out = self.fc1(x)\n out = self.relu(out)\n out = self.fc2(out)\n return out\n \n preprocess = lambda x: torch.tensor(x)\n \n # Postprocess function for the model output \n def postprocess(x):\n return int(x.topk(1)[1].item())\n \n def data_transform(features, label):\n return torch.tensor(features), label\n \n # Create a Logistic Regression model\n # feature_length is the input feature size\n model = SimpleModel(feature_size, num_classes=num_classes)\n model = TorchModel(\n identifier='my-model',\n object=model, \n preprocess=preprocess,\n postprocess=postprocess,\n trainer=TorchTrainer(\n key=(input_key, 'label'),\n identifier='my_trainer',\n objective=cross_entropy,\n loader_kwargs={'batch_size': 10},\n max_iterations=1000,\n validation_interval=100,\n select=select,\n transform=data_transform,\n ),\n ) \n ```\n \n\nDefine a validation for evaluating the effect after training.\n\n```python\nfrom superduper import Dataset, Metric, Validation\n\n\ndef acc(x, y):\n return sum([xx == yy for xx, yy in zip(x, y)]) / len(x)\n\n\naccuracy = Metric(identifier=\"acc\", object=acc)\nvalidation = Validation(\n \"transfer_learning_performance\",\n key=(input_key, \"label\"),\n datasets=[\n Dataset(identifier=\"my-valid\", select=training_select.add_fold('valid'))\n ],\n metrics=[accuracy],\n)\nmodel.validation = validation\n```\n\nIf we execute the apply function, then the model will be added to the database, and because the model has a Trainer, it will perform training tasks.\n\n```python\ndb.apply(model)\n```\n\n```python\nmodel.encode()\n```\n\nGet the training metrics\n\n```python\nmodel = db.load('model', model.identifier)\nmodel.metric_values\n```\n\n```python\nfrom superduper import Template\n\nt = Template('transfer-learner', template=model, substitutions={'docs': 'table'})\n```\n\n```python\nt.export('.')\n```\n\n", - "---\nsidebar_label: Multimodal vector search - Video\nfilename: build.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Multimodal vector search - Video\n\n\n## Connect to superduper\n\n```python\nfrom superduper import superduper\n \ndb = superduper('mongomock://test_db')\n```\n\n\n## Get useful sample data\n\n```python\n!curl -O https://superduperdb-public-demo.s3.amazonaws.com/videos.zip && unzip videos.zip\nimport os\nfrom superduper.ext.pillow import pil_image\n\ndata = [f'videos/{x}' for x in os.listdir('./videos')]\nsample_datapoint = data[-1]\n\nchunked_model_datatype = pil_image\n\ndatas = [{'x': d} for d in data[:3]]\n```\n\n\n## Create datatype\n\nSuperduperDB supports automatic data conversion, so users don’t need to worry about the compatibility of different data formats (`PIL.Image`, `numpy.array`, `pandas.DataFrame`, etc.) with the database.\n\nIt also supports custom data conversion methods for transforming data, such as defining the following Datatype.\n\n```python\nfrom superduper import DataType\n\n# Create an instance of the Encoder with the identifier 'video_on_file' and load_hybrid set to False\ndatatype = DataType(\n identifier='video_on_file',\n encodable='file',\n)\n```\n\n\n## Setup tables or collections\n\n```python\nfrom superduper.components.table import Table\nfrom superduper import Schema\n\nschema = Schema(identifier=\"schema\", fields={\"x\": datatype})\ntable = Table(\"docs\", schema=schema)\n```\n\n```python\ndb.apply(table)\n```\n\n```python\ndb['docs'].insert(datas).execute()\n```\n\n\n## Apply a chunker for search\n\n:::note\nNote that applying a chunker is ***not*** mandatory for search.\nIf your data is already chunked (e.g. short text snippets or audio) or if you\nare searching through something like images, which can't be chunked, then this\nwon't be necessary.\n:::\n\n```python\n# !pip install opencv-python\nimport cv2\nimport tqdm\nfrom PIL import Image\nfrom superduper.ext.pillow import pil_image\nfrom superduper import model, Schema\n\n\n@model(\n flatten=True,\n model_update_kwargs={},\n)\ndef chunker(video_file):\n # Set the sampling frequency for frames\n sample_freq = 10\n \n # Open the video file using OpenCV\n cap = cv2.VideoCapture(video_file)\n \n # Initialize variables\n frame_count = 0\n fps = cap.get(cv2.CAP_PROP_FPS)\n extracted_frames = []\n progress = tqdm.tqdm()\n\n # Iterate through video frames\n while True:\n ret, frame = cap.read()\n if not ret:\n break\n \n # Get the current timestamp based on frame count and FPS\n current_timestamp = frame_count // fps\n \n # Sample frames based on the specified frequency\n if frame_count % sample_freq == 0:\n extracted_frames.append({\n 'image': Image.fromarray(frame[:,:,::-1]), # Convert BGR to RGB\n 'current_timestamp': current_timestamp,\n })\n frame_count += 1\n progress.update(1)\n \n # Release resources\n cap.release()\n cv2.destroyAllWindows()\n \n # Return the list of extracted frames\n return extracted_frames\n```\n\nNow we apply this chunker to the data by wrapping the chunker in `Listener`:\n\n```python\nfrom superduper import Listener\n\nupstream_listener = Listener(\n model=chunker,\n select=db['docs'].select(),\n key='x',\n uuid='chunker',\n identifier='chunker',\n upstream=[table]\n)\n```\n\n```python\ndb.apply(upstream_listener)\n```\n\n## Build multimodal embedding models\n\nWe define the output data type of a model as a vector for vector transformation.\n\n\n\n \n ```python\n from superduper.components.vector_index import vector\n output_datatype = vector(shape=(1024,)) \n ```\n \n \n ```python\n from superduper.components.vector_index import sqlvector\n output_datatype = sqlvector(shape=(1024,)) \n ```\n \n\nThen define two models, one for text embedding and one for image embedding.\n\n```python\n# !pip install git+https://github.com/openai/CLIP.git\nimport clip\nfrom superduper import vector\nfrom superduper_torch import TorchModel\n\n# Load the CLIP model and obtain the preprocessing function\nmodel, preprocess = clip.load(\"ViT-B/32\", device='cpu')\n\n# Create a TorchModel for text encoding\ncompatible_model = TorchModel(\n identifier='clip_text', # Unique identifier for the model\n object=model, # CLIP model\n preprocess=lambda x: clip.tokenize(x)[0], # Model input preprocessing using CLIP \n postprocess=lambda x: x.tolist(), # Convert the model output to a list\n datatype=output_datatype, # Vector encoder with shape (1024,)\n forward_method='encode_text', # Use the 'encode_text' method for forward pass \n)\n\n# Create a TorchModel for visual encoding\nmodel = TorchModel(\n identifier='clip_image', # Unique identifier for the model\n object=model.visual, # Visual part of the CLIP model \n preprocess=preprocess, # Visual preprocessing using CLIP\n postprocess=lambda x: x.tolist(), # Convert the output to a list \n datatype=output_datatype, # Vector encoder with shape (1024,)\n)\n```\n\nBecause we use multimodal models, we define different keys to specify which model to use for embedding calculations in the vector_index.\n\n## Create vector-index\n\n```python\nfrom superduper import VectorIndex, Listener\n\nvector_index = VectorIndex(\n 'my-vector-index',\n indexing_listener=Listener(\n key=upstream_listener.outputs + '.image', # the `Document` key `model` should ingest to create embedding\n select=db[upstream_listener.outputs].select(), # a `Select` query telling which data to search over\n model=model, # a `_Predictor` how to convert data to embeddings\n identifier=f'{model.identifier}-listener'\n ),\n compatible_listener=Listener(\n key='text', # the `Document` key `model` should ingest to create embedding\n model=compatible_model, # a `_Predictor` how to convert data to embeddings\n select=None,\n identifier='compatible-listener',\n ),\n upstream=[upstream_listener],\n)\n```\n\n```python\ndb.apply(vector_index)\n```\n\n```python\nfrom superduper import Application\n\napp = Application(\n 'video-search',\n components=[\n upstream_listener,\n vector_index,\n ]\n)\n```\n\n```python\ndb.apply(app)\n```\n\n## Perform a vector search\n\nWe can perform the vector searches using text description:\n\n```python\nfrom superduper import Document\nitem = Document({'text': \"A single red and a blue player battle for the ball\"})\n```\n\n```python\nfrom superduper import Document\nitem = Document({'text': \"Some monkeys playing\"})\n```\n\nOnce we have this search target, we can execute a search as follows.\n\n```python\nselect = db[upstream_listener.outputs].like(item, vector_index='my-vector-index', n=5).select()\nresults = list(db.execute(select))\n```\n\n## Visualize Results\n\n```python\nfrom IPython.display import display\nfor result in results:\n display(Document(result.unpack())[upstream_listener.outputs + '.image'])\n```\n\n## Check the system stays updated\n\nYou can add new data; once the data is added, all related models will perform calculations according to the underlying constructed model and listener, simultaneously updating the vector index to ensure that each query uses the latest data.\n\n```python\nnew_datas = [{'x': data[-1]}]\nids = db['docs'].insert(new_datas).execute()\n```\n\n```python\nfrom superduper import Template\n\nt = Template('video-search-template', template=app, substitutions={'docs': 'content_table'})\n```\n\n```python\nt.export('.')\n```\n\n", - "---\nsidebar_label: Retrieval augmented generation\nfilename: build.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Retrieval augmented generation\n\n\n## Connect to superduper\n\n:::note\nNote that this is only relevant if you are running superduper in development mode.\nOtherwise refer to \"Configuring your production system\".\n:::\n\n```python\nfrom superduper import superduper\n\ndb = superduper('mongomock:///test_db')\n```\n\n\n## Get useful sample data\n\n\n\n \n ```python\n # !curl -O https://superduperdb-public-demo.s3.amazonaws.com/text.json\n import json\n \n with open('text.json', 'r') as f:\n data = json.load(f) \n ```\n \n \n ```python\n !curl -O https://superduperdb-public-demo.s3.amazonaws.com/pdfs.zip && unzip -o pdfs.zip\n import os\n \n data = [f'pdfs/{x}' for x in os.listdir('./pdfs') if x.endswith('.pdf')] \n ```\n \n\n```python\ndatas = [{'x': d} for d in data]\n```\n\n\n## Insert simple data\n\nAfter turning on auto_schema, we can directly insert data, and superduper will automatically analyze the data type, and match the construction of the table and datatype.\n\n```python\nfrom superduper import Document\n\nids = db.execute(db['docs'].insert([Document(data) for data in datas]))\n```\n\n\n## Apply a chunker for search\n\n:::note\nNote that applying a chunker is ***not*** mandatory for search.\nIf your data is already chunked (e.g. short text snippets or audio) or if you\nare searching through something like images, which can't be chunked, then this\nwon't be necessary.\n:::\n\n\n\n \n ```python\n from superduper import model\n \n CHUNK_SIZE = 200\n \n @model(flatten=True, model_update_kwargs={})\n def chunker(text):\n text = text.split()\n chunks = [' '.join(text[i:i + CHUNK_SIZE]) for i in range(0, len(text), CHUNK_SIZE)]\n return chunks \n ```\n \n \n ```python\n !pip install -q \"unstructured[pdf]\"\n from superduper import model\n from unstructured.partition.pdf import partition_pdf\n \n CHUNK_SIZE = 500\n \n @model(flatten=True)\n def chunker(pdf_file):\n elements = partition_pdf(pdf_file)\n text = '\\n'.join([e.text for e in elements])\n chunks = [text[i:i + CHUNK_SIZE] for i in range(0, len(text), CHUNK_SIZE)]\n return chunks \n ```\n \n\nNow we apply this chunker to the data by wrapping the chunker in `Listener`:\n\n```python\nfrom superduper import Listener\n\nupstream_listener = Listener(\n model=chunker,\n select=db['docs'].select(),\n key='x',\n uuid=\"chunker\",\n identifier='chunker',\n)\n```\n\n## Select outputs of upstream listener\n\n:::note\nThis is useful if you have performed a first step, such as pre-computing \nfeatures, or chunking your data. You can use this query to \noperate on those outputs.\n:::\n\n\n## Build text embedding model\n\n\n\n \n ```python\n import os\n os.environ['OPENAI_API_KEY'] = 'sk-'\n from superduper_openai import OpenAIEmbedding\n \n embedding_model = OpenAIEmbedding(identifier='text-embedding-ada-002') \n ```\n \n \n ```python\n import os\n from superduper_jina import JinaEmbedding\n \n os.environ[\"JINA_API_KEY\"] = \"jina_xxxx\"\n \n # define the model\n embedding_model = JinaEmbedding(identifier='jina-embeddings-v2-base-en') \n ```\n \n \n ```python\n !pip install sentence-transformers\n from superduper import vector\n import sentence_transformers\n from superduper_sentence_transformers import SentenceTransformer\n \n embedding_model = SentenceTransformer(\n identifier=\"embedding\",\n object=sentence_transformers.SentenceTransformer(\"BAAI/bge-small-en\"),\n datatype=vector(shape=(1024,)),\n postprocess=lambda x: x.tolist(),\n predict_kwargs={\"show_progress_bar\": True},\n ) \n ```\n \n\n## Create vector-index\n\n```python\nfrom superduper import VectorIndex, Listener\n\nvector_index_name = 'vector-index'\n\nvector_index = \\\n VectorIndex(\n vector_index_name,\n indexing_listener=Listener(\n key=upstream_listener.outputs, # the `Document` key `model` should ingest to create embedding\n select=db[upstream_listener.outputs].select(), # a `Select` query telling which data to search over\n model=embedding_model, # a `_Predictor` how to convert data to embeddings\n uuid=\"embedding-listener\",\n identifier='embedding-listener',\n upstream=[upstream_listener],\n )\n )\n```\n\n\n## Create Vector Search Model\n\n```python\nitem = {'_outputs__chunker': ''}\n```\n\n```python\nfrom superduper.components.model import QueryModel\n\nvector_search_model = QueryModel(\n identifier=\"VectorSearch\",\n select=db[upstream_listener.outputs].like(item, vector_index=vector_index_name, n=5).select(),\n # The _source is the identifier of the upstream data, which can be used to locate the data from upstream sources using `_source`.\n postprocess=lambda docs: [{\"text\": doc['_outputs__chunker'], \"_source\": doc[\"_source\"]} for doc in docs],\n db=db\n)\n```\n\n\n## Build LLM\n\n\n\n \n ```python\n from superduper_openai import OpenAIChatCompletion\n \n llm = OpenAIChatCompletion(identifier='llm', model='gpt-3.5-turbo') \n ```\n \n \n ```python\n from superduper_anthropic import AnthropicCompletions\n import os\n \n os.environ[\"ANTHROPIC_API_KEY\"] = \"sk-xxx\"\n \n predict_kwargs = {\n \"max_tokens\": 1024,\n \"temperature\": 0.8,\n }\n \n llm = AnthropicCompletions(identifier='llm', model='claude-2.1', predict_kwargs=predict_kwargs) \n ```\n \n \n ```python\n from superduper_vllm import VllmModel\n \n predict_kwargs = {\n \"max_tokens\": 1024,\n \"temperature\": 0.8,\n }\n \n \n llm = VllmModel(\n identifier=\"llm\",\n model_name=\"TheBloke/Mistral-7B-Instruct-v0.2-AWQ\",\n vllm_kwargs={\n \"gpu_memory_utilization\": 0.7,\n \"max_model_len\": 1024,\n \"quantization\": \"awq\",\n },\n predict_kwargs=predict_kwargs,\n ) \n ```\n \n \n ```python\n from superduper_transformers import LLM\n \n llm = LLM.from_pretrained(\"mistralai/Mistral-7B-Instruct-v0.2\", load_in_8bit=True, device_map=\"cuda\", identifier=\"llm\", predict_kwargs=dict(max_new_tokens=128)) \n ```\n \n \n ```python\n !huggingface-cli download TheBloke/Mistral-7B-Instruct-v0.2-GGUF mistral-7b-instruct-v0.2.Q4_K_M.gguf --local-dir . --local-dir-use-symlinks False\n \n from superduper_llama_cpp.model import LlamaCpp\n llm = LlamaCpp(identifier=\"llm\", model_name_or_path=\"mistral-7b-instruct-v0.2.Q4_K_M.gguf\") \n ```\n \n\n## Answer question with LLM\n\n```python\nfrom superduper import model\nfrom superduper.components.graph import Graph, input_node\n\nprompt_template = (\n \"Use the following context snippets, these snippets are not ordered!, Answer the question based on this context.\\n\"\n \"{context}\\n\\n\"\n \"Here's the question: {query}\"\n)\n\n@model\ndef build_prompt(query, docs):\n chunks = [doc[\"text\"] for doc in docs]\n context = \"\\n\\n\".join(chunks)\n prompt = prompt_template.format(context=context, query=query)\n return prompt\n\n# We build a graph to handle the entire pipeline\n\n# create a input node, only have one input parameter `query`\nin_ = input_node('query')\n# pass the query to the vector search model\nvector_search_results = vector_search_model(query=in_)\n# pass the query and the search results to the prompt builder\nprompt = build_prompt(query=in_, docs=vector_search_results)\n# pass the prompt to the llm model\nanswer = llm(prompt)\n# create a graph, and the graph output is the answer\nrag = answer.to_graph(\"rag\")\n```\n\nBy applying the RAG model to the database, it will subsequently be accessible for use in other services.\n\n```python\nfrom superduper import Application\n\napp = Application(\n 'rag-app',\n components=[\n upstream_listener,\n vector_index,\n vector_search_model,\n rag,\n ]\n)\n\ndb.apply(app)\n```\n\nYou can now load the model elsewhere and make predictions using the following command.\n\n```python\nrag = db.load(\"model\", 'rag')\nprint(rag.predict(\"Tell me about superduper\")[0])\n```\n\n## Create template\n\n```python\nfrom superduper import Template\n\ntemplate = Template('rag-template', template=app, substitutions={'docs': 'collection'})\n```\n\n```python\ntemplate.export('.')\n```\n\n", - "# Basic RAG tutorial\n\n:::info\nIn this tutorial we show you how to do retrieval augmented generation (RAG) with Superduper.\nNote that this is just an example of the flexibility and power which Superduper gives \nto developers. Superduper is about much more than RAG and LLMs. \n:::\n\nAs in the vector-search tutorial we'll use Superduper documentation for the tutorial.\nWe'll add this to a testing database by downloading the data snapshot:\n\n\n```python\n!curl -O https://superduper-public-demo.s3.amazonaws.com/text.json\n```\n\n\n```python\nimport json\n\nfrom superduper import superduper, Document\n\ndb = superduper('mongomock://test')\n\nwith open('text.json') as f:\n data = json.load(f)\n\n_ = db['docu'].insert_many([{'txt': r} for r in data]).execute()\n```\n\nLet's verify the data in the `db` by querying one datapoint:\n\n\n```python\ndb['docu'].find_one().execute()\n```\n\nThe first step in a RAG application is to create a `VectorIndex`. The results of searching \nwith this index will be used as input to the LLM for answering questions.\n\nRead about `VectorIndex` [here](../apply_api/vector_index.md) and follow along the tutorial on \nvector-search [here](./vector_search.md).\n\n\n```python\nimport requests \n\nfrom superduper import Application, Document, VectorIndex, Listener, vector\nfrom superduper.ext.sentence_transformers.model import SentenceTransformer\nfrom superduper.base.code import Code\n\ndef postprocess(x):\n return x.tolist()\n\ndatatype = vector(shape=384, identifier=\"my-vec\")\n \nmodel = SentenceTransformer(\n identifier=\"my-embedding\",\n datatype=datatype,\n predict_kwargs={\"show_progress_bar\": True},\n signature=\"*args,**kwargs\",\n model=\"all-MiniLM-L6-v2\", \n device=\"cpu\",\n postprocess=Code.from_object(postprocess),\n)\n\nlistener = Listener(\n identifier=\"my-listener\",\n model=model,\n key='txt',\n select=db['docu'].find(),\n predict_kwargs={'max_chunk_size': 50},\n)\n\nvector_index = VectorIndex(\n identifier=\"my-index\",\n indexing_listener=listener,\n measure=\"cosine\"\n)\n\ndb.apply(vector_index)\n```\n\nNow that we've set up a `VectorIndex`, we can connect this index with an LLM in a number of ways.\nA simple way to do that is with the `SequentialModel`. The first part of the `SequentialModel`\nexecutes a query and provides the results to the LLM in the second part. \n\nThe `RetrievalPrompt` component takes a query with a \"free\" variable as input, signified with ``. \nThis gives users great flexibility with regard to how they fetch the context\nfor their downstream models.\n\nWe're using OpenAI, but you can use any type of LLM with Superduper. We have several \nnative integrations (see [here](../ai_integraitons/)) but you can also [bring your own model](../models/bring_your_own_model.md).\n\n\n```python\nfrom superduper.ext.llm.prompter import *\nfrom superduper import Document\nfrom superduper.components.model import SequentialModel\nfrom superduper.ext.openai import OpenAIChatCompletion\n\nq = db['docu'].like(Document({'txt': ''}), vector_index='my-index', n=5).find().limit(10)\n\ndef get_output(c):\n return [r['txt'] for r in c]\n\nprompt_template = RetrievalPrompt('my-prompt', select=q, postprocess=Code.from_object(get_output))\n\nllm = OpenAIChatCompletion('gpt-3.5-turbo')\nseq = SequentialModel('rag', models=[prompt_template, llm])\n\ndb.apply(seq)\n```\n\nNow we can test the `SequentialModel` with a sample question:\n\n\n```python\nseq.predict('Tell be about vector-indexes')\n```\n\n:::tip\nDid you know you can use any tools from the Python ecosystem with Superduper.\nThat includes `langchain` and `llamaindex` which can be very useful for RAG applications.\n:::\n\n\n```python\nfrom superduper import Application\n\napp = Application('rag-app', components=[vector_index, seq, plugin_1, plugin_2])\n```\n\n\n```python\napp.encode()\n```\n\n\n```python\napp.export('rag-app')\n```\n\n\n```python\n!cat rag-app/requirements.txt\n```\n\n\n```python\nfrom superduper import *\n\napp = Component.read('rag-app')\n```\n\n\n```python\napp.info()\n```\n", - "# Vector search\n\n:::note\nSince vector-search is all-the-rage right now, \nhere is the simplest possible iteration of semantic \ntext-search with a `sentence_transformers` model, \nas an entrypoint to `superduper`.\n\nNote that `superduper` is much-much more than vector-search\non text. Explore the docs to read about classical machine learning, \ncomputer vision, LLMs, fine-tuning and much much more!\n:::\n\n\nFirst let's get some data. These data are the markdown files \nof the very same documentation you are reading!\nYou can download other sample data-sets for testing `superduper`\nby following [these lines of code](../reusable_snippets/get_useful_sample_data).\n\n\n```python\nimport json\nimport requests \nr = requests.get('https://superduper-public-demo.s3.amazonaws.com/text.json')\n\nwith open('text.json', 'wb') as f:\n f.write(r.content)\n\nwith open('text.json', 'r') as f:\n data = json.load(f) \n\nprint(data[0])\n```\n\nNow we connect to superduper, using MongoMock as a databackend.\nRead more about connecting to superduper [here](../core_api/connect) and\na semi-exhaustive list of supported data-backends for connecting [here](../reusable_snippets/connect_to_superduper).\n\n\n```python\nfrom superduper import superduper, Document\n\ndb = superduper('mongomock://test')\n\n_ = db['documents'].insert_many([Document({'txt': txt}) for txt in data]).execute()\n```\n\n\n```python\ndb.show()\n```\n\nWe are going to make these data searchable by activating a [`Model`](../apply_api/model) instance \nto compute vectors for each item inserted to the `\"documents\"` collection.\nFor that we'll use the [sentence-transformers](https://sbert.net/) integration to `superduper`.\nRead more about the `sentence_transformers` integration [here](../ai_integrations/sentence_transformers)\nand [here](../../api/ext/sentence_transformers/).\n\n\n```python\nfrom superduper.ext.sentence_transformers import SentenceTransformer\n\nmodel = SentenceTransformer(\n identifier=\"test\",\n predict_kwargs={\"show_progress_bar\": True},\n model=\"all-MiniLM-L6-v2\",\n device=\"cpu\",\n postprocess=lambda x: x.tolist(),\n)\n```\n\nWe can check that this model gives us what we want by evaluating an output \non a single data-point. (Learn more about the various aspects of `Model` [here](../models/).)\n\n\n```python\nmodel.predict(data[0])\n```\n\nNow that we've verified that this model works, we can \"activate\" it for \nvector-search by creating a [`VectorIndex`](../apply_api/vector_index).\n\n\n```python\nimport pprint\n\nvector_index = model.to_vector_index(select=db['documents'].find(), key='txt')\n\npprint.pprint(vector_index)\n```\n\nYou will see that the `VectorIndex` contains a [`Listener`](../apply_api/listener) instance.\nThis instance wraps the model, and configures it to compute outputs \non data inserted to the `\"documents\"` collection with the key `\"txt\"`.\n\nTo activate this index, we now do:\n\n\n```python\ndb.apply(vector_index)\n```\n\nThe `db.apply` command is a universal command for activating AI components in superduper.\n\nYou will now see lots of output - the model-outputs/ vectors are computed \nand the various parts of the `VectorIndex` are registered in the system.\n\nYou can verify this with:\n\n\n```python\ndb.show()\n```\n\n\n```python\ndb['documents'].find_one().execute().unpack()\n```\n\nTo \"use\" the `VectorIndex` we can execute a vector-search query:\n\n\n```python\nquery = db['documents'].like({'txt': 'Tell me about vector-search'}, vector_index=vector_index.identifier, n=3).find()\ncursor = query.execute()\n```\n\nThis query will return a cursor of [`Document`](../fundamentals/document) instances.\nTo obtain the raw dictionaries, call the `.unpack()` command:\n\n\n```python\nfor r in cursor:\n print('=' * 100)\n print(r.unpack()['txt'])\n print('=' * 100)\n```\n\nYou should see that the documents returned are relevant to the `like` part of the \nquery.\n\nLearn more about building queries with `superduper` [here](../execute_api/overview.md).\n", - "# Custom serialization\n\nIn this tutorial, we demonstrate how developers can flexibily and portably define\ntheir own classes in Superduper. These may be exported with `Component.export` \nand transported to other Superduper deployments with `db.apply`.\n\nTo make our lives difficult, we'll include a data blob in the model, which should be serialized with the \nexported class:\n\n\n```python\n!curl -O https://superduper-public-demo.s3.amazonaws.com/text.json\nimport json\n\nwith open('text.json') as f:\n data = json.load(f)\n```\n\nWe'll define our own `Model` descendant, with a custom `.predict` method. \nWe are free to define any of our own parameters to this class with a simple annotation in the header, since `Model` \nis a `dataclasses.dataclass`:\n\n\n```python\nfrom superduper import *\n\n\nrequires_packages(['openai', None, None])\n\n\nclass NewModel(Model):\n a: int = 2\n b: list\n\n def predict(self, x):\n return x * self.a\n```\n\nIf we want `b` to be saved as a blob in the `db.artifact_store` we can simply\nannotate this in the `artifacts=...` parameter, supplying the serializer we would like to use:\n\n\n```python\nm = NewModel('test-hg', a=2, b=data, artifacts={'b': pickle_serializer})\n```\n\nNow we can export the model:\n\n\n```python\nm.export('test-hg')\n```\n\n\n```python\n!cat test-hg/component.json\n```\n\n\n```python\n!ls test-hg/blobs/\n```\n\nThe following cell works even after restarting the kernel.\nThat means the exported component is now completely portable!\n\n\n```python\nfrom superduper import *\n\nc = Component.read('test-hg')\n\nc.predict(2)\n```\n", - "# Training and Managing MNIST Predictions with superduper\n\n:::note\nThis tutorial guides you through the implementation of a classic machine learning task: MNIST handwritten digit recognition. The twist? We perform the task directly on data hosted in a database using superduper.\n:::\n\nThis example makes it easy to connect any of your image recognition models directly to your database in real-time. \n\n\n```python\n!pip install torch torchvision\n```\n\nFirst, we need to establish a connection to a MongoDB datastore via superduper. \n\n\n```python\nfrom superduper import superduper\n \ndb = superduper('mongomock://')\n```\n\nAfter establishing a connection to MongoDB, the next step is to load the MNIST dataset. superduper's strength lies in handling diverse data types, especially those that are not supported by standard databases. To achieve this, we use an `Encoder` in conjunction with `Document` wrappers. These components allow Python dictionaries containing non-JSONable or bytes objects to be seamlessly inserted into the underlying data infrastructure.\n\n\n```python\nimport torchvision\nfrom superduper import Document\n\nimport random\n\n# Load MNIST images as Python objects using the Python Imaging Library.\n# Each MNIST item is a tuple (image, label)\nmnist_data = list(torchvision.datasets.MNIST(root='./data', download=True))\n\ndocument_list = [Document({'img': x[0], 'class': x[1]}) for x in mnist_data]\n\n# Shuffle the data and select a subset of 1000 documents\nrandom.shuffle(document_list)\ndata = document_list[:1000]\n\n# Insert the selected data into the mnist_collection which we mentioned before like: mnist_collection = Collection('mnist')\ndb['mnist'].insert_many(data[:-100]).execute()\n```\n\nNow that the images and their classes are inserted into the database, we can query the data in its original format. Particularly, we can use the `PIL.Image` instances to inspect the data.\n\n\n```python\n# Get and display one of the images\nr = db['mnist'].find_one().execute()\nr.unpack()['img'].resize((300, 300))\n```\n\nFollowing that, we build our machine learning model. superduper conveniently supports various frameworks, and for this example, we opt for PyTorch, a suitable choice for computer vision tasks. In this instance, we combine `torch` with `torchvision`.\n\nTo facilitate communication with the superduper `Datalayer`, we design `postprocess` and `preprocess` functions. These functions are then wrapped with the `TorchModel` wrapper to create a native superduper object.\n\n\n```python\nfrom superduper.ext.torch import TorchModel\n\nimport torch\n\n# Define the LeNet-5 architecture for image classification\nclass LeNet5(torch.nn.Module):\n def __init__(self, num_classes):\n super().__init__()\n # Layer 1\n self.layer1 = torch.nn.Sequential(\n torch.nn.Conv2d(1, 6, kernel_size=5, stride=1, padding=0),\n torch.nn.BatchNorm2d(6),\n torch.nn.ReLU(),\n torch.nn.MaxPool2d(kernel_size=2, stride=2))\n # Layer 2\n self.layer2 = torch.nn.Sequential(\n torch.nn.Conv2d(6, 16, kernel_size=5, stride=1, padding=0),\n torch.nn.BatchNorm2d(16),\n torch.nn.ReLU(),\n torch.nn.MaxPool2d(kernel_size=2, stride=2))\n # Fully connected layers\n self.fc = torch.nn.Linear(400, 120)\n self.relu = torch.nn.ReLU()\n self.fc1 = torch.nn.Linear(120, 84)\n self.relu1 = torch.nn.ReLU()\n self.fc2 = torch.nn.Linear(84, num_classes)\n\n def forward(self, x):\n out = self.layer1(x)\n out = self.layer2(out)\n out = out.reshape(out.size(0), -1)\n out = self.fc(out)\n out = self.relu(out)\n out = self.fc1(out)\n out = self.relu1(out)\n out = self.fc2(out)\n return out\n\n# Postprocess function for the model output \ndef postprocess(x):\n return int(x.topk(1)[1].item())\n\n# Preprocess function for input data\ndef preprocess(x):\n return torchvision.transforms.Compose([\n torchvision.transforms.Resize((32, 32)),\n torchvision.transforms.ToTensor(),\n torchvision.transforms.Normalize(mean=(0.1307,), std=(0.3081,))]\n )(x)\n\n# Create an instance of the LeNet-5 model\nlenet_model = LeNet5(10)\n\n\nmodel = TorchModel(\n identifier='my-model',\n object=lenet_model,\n preprocess=preprocess,\n postprocess=postprocess, \n preferred_devices=('cpu',),\n)\n\n# Check that the model successfully creates predictions over single data-points\nmodel.predict(data[0]['img'])\n```\n\nNow we are ready to \"train\" or \"fit\" the model. Trainable models in superduper come with a sklearn-like `.fit` method,\nwhich developers may implement for their specific model class. `torch` models come with a pre-configured\n`TorchTrainer` class and `.fit` method. These may be invoked simply by \"applying\" the model to `db`:\n\n\n```python\nfrom torch.nn.functional import cross_entropy\n\nfrom superduper import Metric, Validation, Dataset\nfrom superduper.ext.torch import TorchTrainer\n\nacc = lambda x, y: (sum([xx == yy for xx, yy in zip(x, y)]) / len(x))\n\naccuracy = Metric(identifier='acc', object=acc)\n\nmodel.validation = Validation(\n 'mnist_performance',\n datasets=[\n Dataset(\n identifier='my-valid',\n select=db['mnist'].find({'_fold': 'valid'})\n )\n ],\n metrics=[accuracy],\n)\n\nmodel.trainer = TorchTrainer(\n identifier='my-trainer',\n objective=cross_entropy,\n loader_kwargs={'batch_size': 10},\n max_iterations=1000,\n validation_interval=5,\n select=db['mnist'].find(),\n key=('img', 'class'),\n transform=lambda x, y: (preprocess(x), y),\n)\n\n_ = db.apply(model)\n```\n\nThe trained model is now available via `db.load` - the `model.trainer` object contains the metric traces\nlogged during training.\n\n\n```python\nfrom matplotlib import pyplot as plt\n\n# Load the model from the database\nmodel = db.load('model', model.identifier)\n\n# Plot the accuracy values\nplt.plot(model.trainer.metric_values['my-valid/acc'])\nplt.show()\n```\n", - "# Tutorials\n\nIn this section we guide newcomers through the most \nbasic usage pattern in Superduper.\n\nFor more detailed, flexible and realistic use-cases, \nrefer to the [use-cases section](/use_cases).\n\n```mdx-code-block\nimport DocCardList from '@theme/DocCardList';\n\n\n```", - "# Eager Mode (Alpha) \n\nEager Mode is an interactive way to build superduper applications. \n\nUsers can input data as usual, continuously call models, and view results.\nOnce the interactive debugging and construction are complete, \nthe corresponding data pipeline can be built directly through `apply`, \neliminating the need for direct debugging between AI application models and databases.\n\n:::note\nThis feature is in alpha.\n:::\n\nConnect the database and insert data.\n\n\n```python\nfrom superduper import superduper\n\ndb = superduper('mongomock://test')\n```\n\n\n```python\nimport numpy as np\ndata = [\n {\"x\": 1, \"y\": \"2\", \"z\": np.array([1, 2, 3])},\n {\"x\": 2, \"y\": \"3\", \"z\": np.array([4, 5, 6])},\n {\"x\": 3, \"y\": \"4\", \"z\": np.array([7, 8, 9])},\n]\n\ndb[\"documents\"].insert(data).execute()\n```\n\nWhen using `select.execute(eager_mode=True)`, all returned data will enter eager mode, which can be used for interactive model pipeline construction.\n\n\n```python\ndata = list(db[\"documents\"].select().execute(eager_mode=True))[0]\ndata\n```\n\nDefine the first model and make predictions.\n\n\n```python\nfrom superduper import ObjectModel\ndef func_a(x):\n return {\"x\": x, \"model\": \"a\"}\n\nmodel_a = ObjectModel(identifier=\"a\", object=func_a)\noutput_a = model_a(data[\"x\"])\noutput_a\n```\n\nDefine the second model and make predictions.\n\n\n```python\ndef func_b(x, y, o_a):\n return {\n \"x\": x,\n \"y\": y,\n \"o_a\": o_a,\n \"model\": \"b\"\n }\n\nmodel_b = ObjectModel(identifier=\"b\", object=func_b)\noutput_b = model_b(data[\"x\"], data[\"y\"], output_a)\noutput_b\n```\n\nDefine the third model and make predictions.\n\n\n```python\ndef func_c(x, y, z, o_a, o_b):\n return {\n \"x\": x,\n \"y\": y,\n \"z\": z,\n \"o_a\": o_a,\n \"o_b\": o_b,\n \"model\": \"c\",\n }\n\nmodel_c = ObjectModel(identifier=\"c\", object=func_c)\noutput_c = model_c(data[\"x\"], data[\"y\"], data[\"z\"], output_a, output_b)\noutput_c\n```\n\nApply all models to the data to start monitoring the data and making predictions.\nWhen adding a model result, not only the current model but also the recursively dependent upstream models will be added.\n\n\n```python\noutput_c.apply()\n```\n\n\n```python\nlist(db[\"documents\"].select().outputs(\"a\", \"b\", \"c\").select().execute())\n```\n\nIf you want to modify the predict_id of a specific model, \nyou can use `output.predict_id = \"your_predict_id\"` to set it.\n\n\n```python\nmodel_predict_id = ObjectModel(identifier=\"c\", object=func_c)\noutput_predict_id = model_predict_id(data[\"x\"], data[\"y\"], data[\"z\"], output_a, output_b)\noutput_predict_id.predict_id = \"new_predict_id\"\noutput_predict_id.apply()\n```\n\nView the prediction results of all data in the database.\n\n\n```python\nlist(db[\"_outputs.new_predict_id\"].select().execute())\n```\n\nIf you want to perform if-like conditional operations to route data using different models, you can use `set_condition` to handle it. Currently, only equals and not equals conditions are supported.\n\n\n```python\nmodel_condition = ObjectModel(identifier=\"condition\", object=func_a)\noutput_condition = model_condition(data[\"x\"])\noutput_condition.set_condition(data[\"x\"] == 1)\noutput_condition.apply()\noutput_condition\n```\n\n\n```python\ndb['documents'].find({}, {'x': 1, '_builds': 1, '_files': 1, '_blobs': 1, '_schema': 1}).filter({'x': 1}).execute()\n```\n\n\n```python\nlist(db[\"_outputs.condition\"].select().execute())\n```\n", - "# Listening for new data\n\n:::note\nIn Superduper, AI models may be configured to listen for newly inserted data.\nOutputs will be computed over that data and saved back to the data-backend.\n:::\n\nIn this example we show how to configure 3 models to interact when new data is added.\n\n1. A featurizing computer vision model (images `->` vectors).\n1. 2 models evaluating image-2-text similarity to a set of key-words.\n\nWe use an open-source model \"CLIP\" which we install via `pip` directly from GitHub.\nYou can read more about installing requirements on our docs [here](../get_started/environment).\n\n\n```python\n!pip install git+https://github.com/openai/CLIP.git\n```\n\nWe apply our setup to images from the \n[cats and dogs dataset](https://www.kaggle.com/c/dogs-vs-cats). We've prepared a subset especially \nfor quick experimentation.\n\n\n```python\n!curl -O https://superduper-public-demo.s3.amazonaws.com/images.zip && unzip images.zip\nfrom PIL import Image\nimport os\n\ndata = [f'images/{x}' for x in os.listdir('./images') if x.endswith('png')]\ndata = [{'img': Image.open(path)} for path in data]\n```\n\nNow that we've prepared these records we can insert this data \"directly\" into the database with \na standard insert statement. (Notice however the difference from `pymongo` with the `.execute()` call.)\nThe same pattern may be applied to other database types.\n\n\n```python\nfrom superduper import superduper, Document\n\ndb = superduper('mongomock://')\n\ndb['images'].insert_many([Document(r) for r in data[:-1]]).execute()\n```\n\nWe can verify that the images are correctly saved by retrieved a single record:\n\n\n```python\nr = db['images'].find_one().execute()\nr\n```\n\nThe contents of the `Document` may be accessed by calling `.unpack()`. You can see that the images were saved and retrieved correctly.\n\n\n```python\nr.unpack()['img']\n```\n\nWe now build a `torch` model for text-2-image similarity using the `clip` library. In order to \nsave the outputs correctly in the system, we add the `tensor` datatype to the model:\n\n\n```python\nimport clip\nimport torch\nfrom superduper.ext.torch import TorchModel, tensor\n\n\nmodel, preprocess = clip.load(\"ViT-B/32\", \"cpu\")\n\nclass ImageModel(torch.nn.Module):\n def __init__(self):\n super().__init__()\n self.model = model\n\n def forward(self, image_tensors):\n return self.model.encode_image(image_tensors)\n\n\ndt = tensor(dtype='float', shape=(512,))\n\n\nimage_model = TorchModel(\n identifier='clip_image',\n object=ImageModel(),\n preprocess=preprocess,\n datatype=dt,\n loader_kwargs={'batch_size': 5},\n)\n```\n\nWe can verify that this model gives us the correct outputs on the added data with the `.predict` method:\n\n\n```python\nimage_model.predict(data[0]['img'])\n```\n\nNow we'd like to set up this model to compute outputs on the `'img'` key of each record. \nTo do that we create a `Listener` (see [here](../apply_api/listener) for more information) which \n\"listens\" for incoming and existing data, and computes outputs on that data.\n\nWhen new data is inserted, the model automatically will create outputs on that data. This is a very handy \nfeature for productionizing AI and ML, since a data deployment needs to be keep up-to-date as far as possible.\n\n\n```python\nlistener = image_model.to_listener(\n select=db['images'].find(),\n key='img',\n identifier='image_predictions',\n)\n\n_ = db.apply(listener)\n```\n\nWe can verify that the outputs are correctly inserted into the documents with this query. \nThe outputs are saved in the `listener.outputs` field:\n\n\n```python\nlist(listener.outputs_select.limit(1).execute())[0][listener.outputs].unpack()\n```\n\nDownstream of this first model, we now can add another smaller model, to classify images with configurable terms. \nSince the dataset is concerned with cats and dogs we create 2 downstream models classifying the images in 2 different ways.\n\n\n```python\nfrom superduper import ObjectModel\n\n\nclass Comparer:\n def __init__(self, words, text_features):\n self.targets = {w: text_features[i] for i, w in enumerate(words)}\n self.lookup = list(self.targets.keys())\n self.matrix = torch.stack(list(self.targets.values()))\n\n def __call__(self, vector):\n best = (self.matrix @ vector).topk(1)[1].item()\n return self.lookup[best]\n\n\ncats_vs_dogs = ObjectModel(\n 'cats_vs_dogs',\n object=Comparer(['cat', 'dog'], model.encode_text(clip.tokenize(['cat', 'dog']))),\n).to_listener(\n select=db['images'].find(),\n key=listener.outputs,\n)\n\n \nfelines_vs_canines = ObjectModel(\n 'felines_vs_canines',\n object=Comparer(['feline', 'canine'], model.encode_text(clip.tokenize(['feline', 'canine']))),\n).to_listener(\n select=db['images'].find(),\n key=listener.outputs,\n)\n\n\ndb.apply(cats_vs_dogs)\ndb.apply(felines_vs_canines)\n```\n\nWe can verify that both downstream models have written their outputs to the database by querying a document:\n\n\n```python\nr = db['images'].find_one().execute()\n\nprint(r[cats_vs_dogs.outputs])\nprint(r[felines_vs_canines.outputs])\n```\n\nLet's check that the predictions make sense for the inserted images:\n\n\n```python\ndb['images'].find_one({cats_vs_dogs.outputs: 'cat'}).execute()['img']\n```\n\n\n```python\ndb['images'].find_one({felines_vs_canines.outputs: 'feline'}).execute()['img']\n```\n\n\n```python\ndb['images'].find_one({cats_vs_dogs.outputs: 'dog'}).execute()['img']\n```\n\n\n```python\ndb['images'].find_one({felines_vs_canines.outputs: 'canine'}).execute()['img']\n```\n\nNow that we have installed the models using `Listener`, we can insert new data. This \ndata should be automatically processed by the installed models:\n\n\n```python\ndb['images'].insert_one(Document({**data[-1], 'new': True})).execute()\n```\n\nWe can verify this by querying the data again:\n\n\n```python\nr = db['images'].find_one({'new': True}).execute().unpack()\nr['img']\n```\n\nYou see here that the models have been called in the correct order on the newly added data and the outputs saved \nto the new record:\n\n\n```python\nr['_outputs']\n```\n", - "# Core superduper usage\n\nIn this section we walk through how to perform the key operations with superduper.\nThere are three key patterns C-A-E:\n\n***Connect***\n\n```python\nfrom superduper import superduper\ndb = superduper('')\n```\n\n***Apply***\n\n```python\ndb.apply()\n```\n\n***Execute***\n\n```python\nto_execute = \ndb.execute(to_execute)\n```\n", - "# Apply\n\nIn superduper there are three fundamental base components which you'll use for the majority of your functionality:\n\n- [`Model`](../apply_api/model)\n- [`Listener`](../apply_api/listener)\n- [`VectorIndex`](../apply_api/vector_index)\n\nIn addition there is an overarching component:\n\n- [`Application`](../apply_api/Application)\n\nwhich in some sense \"rules them all\"\n\nWhenever you wish to apply AI to your data, you will instantiate one of more of these, and \"apply\" these to \nyour connection:\n\n```python\ndb.apply(component)\n```\n\n## Base components\n\n### `Model`\n\nA `Model` is a wrapper around a standard ML/ AI model. It may contain additional functionality, such as \npre- and post-processing, and encoding/ decoding data into/ from the correct type required by the database.\n\n`db.apply(model)` tells `superduper` to store the model and its metadata in the system.\n\nIf additional configurations, such as training parameters, are added to the `Model` then the `db.apply` command\nwill also train the component on data in superduper.\n\nRead more about `Model` [here](../apply_api/model).\n\n### `Listener`\n\nA `Listener` wraps a `Model`. The `db.apply(listener)` tells `superduper` to \"listen\" for incoming data and to compute outputs on those data, saving them back in `superduper`.\n\nRead more about `Listener` [here](../apply_api/listener).\n\n### `VectorIndex`\n\nA `VectorIndex` wraps one or two `Listener` components, and tells `superduper` that the outputs computed, should\nbe made searchable via vector-search queries.\n\nRead more about `VectorIndex` [here](../apply_api/vector_index).\n\n## Connecting component: `Stack`\n\nA `Stack` of AI functionality is a combination of multiple `Model`, `Listener`, and `VectorIndex` components which may be \"applied\" in \none pass to your data via superduper. \n\nOn `db.add(stack)` superduper performs the heavy lifting of deciding which components need to be applied \nfirst, which need to be modified on incoming data, and which outputs need to be made searchable.\n\nRead more about `Stack` [here](../apply_api/stack).\n\n## View applied components\n\nUse `db.show` to view components.\n\nView all components:\n\n```python\n>>> db.show()\n[\n {'type_id': 'model', 'identifier': 'my-model'},\n {'type_id': 'model', 'identifier': 'my-other-model'}\n]\n```\n\nView all components of a certain type:\n\n```python\n>>> db.show('')\n['my-model', 'my-other-model']\n```\n\nView all versions of a particular component:\n\n```python\n>>> db.show('', '')\n[0, 1, 2, 3]\n```\n\n## Reloading applied components\n\nWhen components are applied with `db.apply(component)`, the component is provided with a version, which may be optionally used to reload the component.\nBy default the latest version is reloaded:\n\n```python\nreloaded = db.load('', '')\n```\n\n```python\nreloaded = db.load('', '', )\n```\n\nFor example to reload a model, identified by 'my-model', the first version added:\n\n```python\nreloaded_model = db.load('model', 'my-model', 0)\n```\n\n## Read more\n\nRead more about the \"apply\" API [here](../apply_api/component.md).", - "# Connect\n\nThe standard way to connect to Superduper is via the `superduper` decorator:\n\n## Development mode\n\nIn [development mode](../get_started/environment#development-mode), you may provide the URI/ connection details of your data deployment directly\n\n```python\ndb = superduper('')\n```\n\nFor example if you are running a (not secure) MongoDB deployment locally, and you want to connect to the `\"documents\"` database, you might write:\n\n```python\nfrom superduper import superduper\ndb = superduper('mongodb://localhost:27017/documents')\n```\n\n### Complete connection guide\n\nFor a semi-exhaustive list of possible connections see [here](../reusable_snippets/connect_to_superduper).\n\n### Fine grained configuration\n\n`superduper` chooses default `artifact_store` (file blob storage) and `metadata_store` (AI metadata) values for your connection. These defaults may be overridden directly:\n\n```python\ndb = superduper(\n '',\n artifact_store=',\n metadata_store=',\n)\n```\n\n## Cluster mode\n\nIn [cluster mode](../get_started/environment#cluster-mode), the connection string needs to be provided in a configuration \nfile or via environment variable so that all services can connect correctly:\n\nAdd these lines to your configuration:\n\n```yaml\ndata_backend: mongodb://localhost:27018/documents\n```\n\nRead more about configuration [here](../get_started/configuration).\n\nAfter doing this, you may connect directly with the `superduper` decorator:\n\n```python\ndb = superduper()\n```\n\n### Fine grained configuration\n\nFor more granular configuration add these lines:\n\n\n```yaml\ndata_backend: ,\nartifact_store: \nmetadata_store: \n```\n\n## Next steps\n\n`db` is now your connection to your data, models, and model meta-data.\nNow that you have established this connection you are ready to build, deploy and manage AI with Superduper.\n", - "# Execute\n\n`db.execute` is superduper's wrapper around standard database queries:\n\n- Inserts\n- Selects\n- Updates\n- Deletes\n\nAs well as model predictions:\n\n- Prediction on single data points (streaming)\n- Predictions on multiple data points (batch prediction)\n\nAnd also queries which consist of a combination of model computations and data operations:\n\n- Vector-search queries\n- Complex model predictions which include database queries (e.g. \"RAG\")\n\nStandard database queries are built using a compositional syntax similar to that found in Python database clients \nsuch as `pymongo` and `ibis`. The API also includes extensions of this paradigm to cover model predictions\nand vector-searches.\n\nRead more about the differences and approaches to document stores/ SQL data-backends [here](docs/data_integrations).\n\n## Building queries/ predictions\n\nAll queries consist of a \"chain\" of methods executed over a base object. The base object \ncan refer to a table/ collection or a model:\n\n```python\nq = base_object.method_1(*args_1, **kwargs_1).method_2(*args_2, **kwargs_2)....\n```\n\n### Selects\n\n***MongoDB***\n\nA MongoDB `find` query can be built like this:\n\n```python\nq = db['collection'].find().limit(5).skip(2)\n```\n\n***SQL***\n\nA query with on an SQL data-backend can be built with `ibis` syntax like this:\n\n```python\nq = db['documents'].filter(t.brand == 'Nike').limit(5)\n```\n\n### Inserts\n\n***MongoDB***\n\nTypically insert queries wrap `Document` instances and call the `insert` method on a table or collection:\n\n```python\nq = db['documents'].insert_many([Document(r) for r in data])\n```\n\n***SQL***\n\nThe `ibis` insert is slightly different:\n\n```python\nq = db['documents'].insert([Document(r) for r in data])\n```\n\n## Executing the query\n\n\n```python\nresults = q.execute()\n```\n\n***Multiple results***\n\nIterables of results are sent wrapped in a cursor\n\n***Indiviudal results***\n\nIndividual results are sent wrapped in a `Document`\n\nRead more about `.execute` [here](../execute_api/overview).", - "# Anthropic\n\n## Installation\n\n```bash\npip install superduper_anthropic\n```\n\n## API\n\n`superduper` allows users to work with `anthropic` API models. The key integration is the integration \nof high-quality API-hosted LLM services.\n\n| Class | Description | GitHub | API-docs |\n| --- | --- | --- | --- |\n| `superduper.ext.anthropic.AnthropicCompletions` | Completes a prompt with natural language (LLM) | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/anthropic/model.py) | [Docs](/docs/api/ext/anthropic/model#anthropiccompletions) |", - "# OpenAI\n\n## Installation\n\n```bash\npip install superduper_openai\n```\n\n## API\n\n`superduper` allows users to work with `openai` API models.\n\n| Class | Description | GitHub | API-docs |\n| --- | --- | --- | --- |\n| `superduper.ext.openai.OpenAIChatCompletion` | Completes a prompt with natural language (LLM) | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/openai/model.py) | [Docs](/docs/api/ext/openai/model#openaichatcompletion) |\n| `superduper.ext.openai.OpenAIEmbedding` | Embeds a piece of text | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/openai/model.py) | [Docs](/docs/api/ext/openai/model#openaiembedding) |\n| `superduper.ext.openai.OpenAIImageCreation` | Creates an image dependent on a prompt | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/openai/model.py) | [Docs](/docs/api/ext/openai/model#openaiimagecreation) |\n| `superduper.ext.openai.OpenAIAudioTranscription` | Transcribes audio to text | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/openai/model.py) | [Docs](/docs/api/ext/openai/model#openaiaudiotranscription) |\n| `superduper.ext.openai.OpenAIAudioTranslation` | Translates audio | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/openai/model.py) | [Docs](/docs/api/ext/openai/model#openaiaudiotranslation) |", - "---\nsidebar_position: 3\n---\n\n# PyTorch\n\n## Installation\n\n```bash\npip install superduper_torch\n```\n\n## API\n\n`superduper` allows users to work with arbitrary `torch` models, with custom pre-, post-processing and input/ output data-types,\nas well as offering training with `superduper`\n\n\n| Class | Description | GitHub | API-docs |\n| --- | --- | --- | --- |\n| `superduper.ext.torch.model.TorchModel` | Wraps a PyTorch model | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/torch/model.py) | [Docs](/docs/api/ext/torch/model#torchmodel-1) |\n| `superduper.ext.torch.model.TorchTrainer` | May be attached to a `TorchModel` for training | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/torch/training.py) | [Docs](/docs/api/ext/torch/training#torchtrainer)", - "# Cohere\n\n## Installation\n\n```bash\npip install superduper_cohere\n```\n\n## API\n\n`superduper` allows users to work with `cohere` API models.\n\n\n| Class | Description | GitHub | API-docs |\n| --- | --- | --- | --- |\n| `superduper.ext.cohere.CohereEmbed` | Embeds a piece of text as a vector | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/cohere/model.py) | [Docs](/docs/api/ext/cohere/model#cohereembed) |\n| `superduper.ext.cohere.CohereGenerate` | Completes a piece of text with most likely completion | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/cohere/model.py) | [Docs](/docs/api/ext/cohere/model#coheregenerate) |", - "---\nsidebar_position: 1\n---\n\n# Community Support\n\nThe primary way in which developers will integrate and implement functionality from popular AI frameworks, is via\nthe `Predictor` and `Model` abstractions.\n\nThe `Predictor` mixin class, interfaces with all AI frameworks and API providers, which provide `self.predict` functionality,\nand is subclassed by:\n\n| class | framework |\n| --- | --- |\n| `superduper.ext.sklearn.Estimator` | [Scikit-Learn](https://scikit-learn.org/stable/) |\n| `superduper.ext.transformers.Pipeline` | [Hugging Face's `transformers`](https://huggingface.co/docs/transformers/index) |\n| `superduper.ext.torch.TorchModel` | [PyTorch](https://pytorch.org/) |\n| `superduper.ext.openai.OpenAI` | [OpenAI](https://api.openai.com) |\n| `superduper.ext.cohere.Cohere` | [Cohere](https://cohere.com) |\n| `superduper.ext.anthropic.Anthropic` | [Anthropic](https://anthropic.com) |\n| `superduper.ext.jina.Jina` | [Jina](https://jina.ai/embeddings) |\n\nThe `Model` class is subclassed by:\n\n| class | framework |\n| --- | --- |\n| `superduper.ext.sklearn.Estimator` | [Scikit-Learn](https://scikit-learn.org/stable/) |\n| `superduper.ext.transformers.Pipeline` | [Hugging Face's `transformers`](https://huggingface.co/docs/transformers/index) |\n| `superduper.ext.torch.TorchModel` | [PyTorch](https://pytorch.org/) |\n\n`Model` instances implement `self.predict`, but also hold import data, such as model weights, parameters or hyperparameters.\nIn addition, `Model` may implement `self.fit` functionality - model training and calibration.", - "# Sentence-Transformers\n\n## Installation\n\n```bash\npip install superduper_sentence_transformers\n```\n\n## API\n\n`superduper` allows users to work with self-hosted embedding models via \"[Sentence-Transformers](https://sbert.net/)\".\n\n| Class | Description | GitHub | API-docs |\n| --- | --- | --- | --- |\n| `superduper.ext.sentence_transformers.model.SentenceTransformer` | Embeds a piece of text with a model hosted locally | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/sentence_transformers/model.py) | [Docs](/docs/api/ext/sentence_transformers/model#sentencetransformer) |", - "# Scikit-learn\n\n## Installation\n\n```bash\npip install superduper_sklearn\n```\n\n## API\n\n`superduper` allows users to work with arbitrary `sklearn` estimators, with additional support for pre-, post-processing and input/ output data-types.\n\nRead more about this [here](/docs/docs/walkthrough/ai_models#scikit-learn).\n\n| Class | Description | GitHub | API-docs |\n| --- | --- | --- | --- |\n| `superduper.ext.sklearn.model.Estimator` | Wraps a scikit-learn estimator | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/sklearn/model.py) | [Docs](/docs/api/ext/sklearn/model#estimator) |\n| `superduper.ext.sklearn.model.SklearnTrainer` | May be attached to an `Estimator` for training | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/sklearn/model.py) | [Docs](/docs/api/ext/sklearn/model#sklearntrainer) |", - "# vLLM\n\n## Installation\n\n```bash\npip install superduper_vllm\n```\n\n## API\n\n`superduper` allows users to work with self-hosted LLM models via \"[vLLM](https://github.com/vllm-project/vllm)\".\n\n| Class | Description | GitHub | API-docs |\n| --- | --- | --- | --- |\n| `superduper.ext.vllm.VllmModel` | Completes a prompt with natural language (LLM) based on a self hosted LLM | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/vllm/model.py) | [Docs](/docs/api/ext/vllm/model#vllmmodel) |\n| `superduper.ext.vllm.VllmAPI` | Completes a prompt with natural language (LLM) based on a self hosted LLM behind the vLLM API server | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/vllm/model.py) | [Docs](/docs/api/ext/vllm/model#vllmapi) |\n\n", - "# Transformers\n\n## Installation\n\n```bash\npip install superduper_transformers\n```\n\n## API\n\n[Transformers](https://huggingface.co/docs/transformers/index) is a popular AI framework, and we have incorporated native support for Transformers to provide essential Large Language Model (LLM) capabilities.\n`superduper` allows users to work with arbitrary `transformers` pipelines, with custom input/ output data-types.\n\n| Class | Description | GitHub | API-docs |\n| --- | --- | --- | --- |\n| `superduper.ext.transformers.model.TextClassification` | A pipeline for classifying text. | [Code](https://github.com/superduper/superduper/blob/main/superduper/transformers/model.py) | [Docs](/docs/api/ext/transformers/model#textclassificationpipeline) |\n| `superduper.ext.transformers.model.LLM` | Work locally with the `transformers` implementations of LLM. | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/transformers/model.py) | [Docs](/docs/api/ext/transformers/model#llm) |\n\n\n### `TextClassification`\n\nOne of the most commonly used pipelines in `transformers` is the `TextClassificationPipeline`.\nYou may apply and train these pipelines with `superduper`.\nRead more in the [API documentation](/docs/api/ext/transformers/model#textclassificationpipeline).\n\n\n### `LLM`\n\nYou can quickly utilize LLM capabilities using the following Python function:\n\n```python\nfrom superduper.ext.transformers import LLM\nllm = LLM(model_name_or_path=\"facebook/opt-350m\")\nllm.predict(\"What are we having for dinner?\")\n```\n\nOr use a method similar to transformers’ from_pretrained, just need to supplement the identifier parameter.\n\n```python\nfrom superduper.ext.transformers import LLM\nllm = LLM.from_pretrained(\n \"facebook/opt-350m\", \n load_in_8bit=True, \n device_map=\"cuda\", \n identifier=\"llm\",\n)\n```\n\nThe model can be configured with the following parameters:\n\n- adapter_id: Add an adapter to the base model for inference.\n- model_kwargs: a dictionary; all the model_kwargs will be passed to transformers.AutoModelForCausalLM.from_pretrained. You can provide parameters such as trust_remote_code=True.\n- tokenizer_kwargs: a dictionary; all the tokenizer_kwargs will be passed to transformers.AutoTokenizer.from_pretrained.\n\n## Training\n\nFor a fully worked out training/ fine-tuning use-case refer to the [use-cases section](../use_cases/fine_tune_llm_on_database.md).\n\n### LLM fine-tuning\n\n`superduper` provides a convenient fine-tuning method based on the [trl](https://huggingface.co/docs/trl/index) framework to help you train data in the database.\n\n### Supported Features\n\n**Training Methods**:\n\n- Full fine-tuning\n- LoRA fine-tuning\n\n**Parallel Training**:\n\nParallel training is supported using Ray, with data parallelism as the default strategy. You can also pass DeepSpeed parameters to configure parallelism through [DeepSpeed configuration](https://huggingface.co/docs/transformers/main_classes/deepspeed#zero).\n\n- Multi-GPUs fine-tuning\n- Multi-nodes fine-tuning\n\n**Training on Ray**:\n\nWe can use Ray to train models. When using Ray as the compute backend, tasks will automatically run in Ray and the program will no longer be blocked.\n", - "---\nsidebar_position: 2\n---\n\n# Custom Models\n\n`superduper` provides fully flexible support for AI models from across the \nopen-source ecosystem.\n\nCustom AI integrations may be achieved by building on to of the base `superduper.Model` class.\n\nRead more [here](../models/bring_your_own_models).", - "# Llama.cpp\n\n## Installation\n\n```bash\npip install superduper_llama_cpp\n```\n\n## API\n\n`superduper` allows users to work with self-hosted LLM models via \"[Llama.cpp](https://github.com/ggerganov/llama.cpp)\".\n\n| Class | Description | GitHub | API-docs |\n| --- | --- | --- | --- |\n| `superduper.ext.llamacpp.LlamaCpp` | Completes a prompt with natural language (LLM) | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/llamacpp/model.py) | [Docs](/docs/api/ext/llamacpp/model#llamacpp) |\n| `superduper.ext.llamacpp.LlamaCppEmbedding` | Embeds text | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/llamacpp/model.py) | [Docs](/docs/api/ext/llamacpp/model#llamacppembedding) |", - "# Jina\n\n## Installation\n\n```bash\npip install superduper_jina\n```\n\n## API\n\n`superduper` allows users to work with `Jina Embeddings models` through the Jina Embedding API.\n\nRead more about this [here](/docs/docs/walkthrough/ai_apis#jina).\n\n| Class | Description | GitHub | API-docs |\n| --- | --- | --- | --- |\n| `superduper.ext.jina.JinaEmbeddings` | Embeds a piece of text with a very long maximum context length | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/jina/model.py) | [Docs](/docs/api/ext/jina/model#jinaembedding) |" -] diff --git a/templates/simple_rag/blobs/2abbced0b779db61865b869a5a707c1114193b11 b/templates/simple_rag/blobs/2abbced0b779db61865b869a5a707c1114193b11 deleted file mode 100644 index 30542043e..000000000 Binary files a/templates/simple_rag/blobs/2abbced0b779db61865b869a5a707c1114193b11 and /dev/null differ diff --git a/templates/simple_rag/blobs/3cf26512c472a982bfddddd931f59a82c03f74e9 b/templates/simple_rag/blobs/3cf26512c472a982bfddddd931f59a82c03f74e9 new file mode 100644 index 000000000..41a9d6880 Binary files /dev/null and b/templates/simple_rag/blobs/3cf26512c472a982bfddddd931f59a82c03f74e9 differ diff --git a/templates/simple_rag/blobs/e46e054b9cee237abcea32cedfe8842e8be09b6b b/templates/simple_rag/blobs/adc059378de6bb27a2f6b02b8bf0e92f2c97e1e8 similarity index 95% rename from templates/simple_rag/blobs/e46e054b9cee237abcea32cedfe8842e8be09b6b rename to templates/simple_rag/blobs/adc059378de6bb27a2f6b02b8bf0e92f2c97e1e8 index cc3f7e4df..1f0e79be9 100644 Binary files a/templates/simple_rag/blobs/e46e054b9cee237abcea32cedfe8842e8be09b6b and b/templates/simple_rag/blobs/adc059378de6bb27a2f6b02b8bf0e92f2c97e1e8 differ diff --git a/templates/simple_rag/build.ipynb b/templates/simple_rag/build.ipynb index 891ea4c1b..31b8a1cfb 100644 --- a/templates/simple_rag/build.ipynb +++ b/templates/simple_rag/build.ipynb @@ -3,7 +3,13 @@ { "cell_type": "markdown", "id": "38c1a328-fd86-4c5f-bd54-b8664f433608", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, "source": [ "# Simple retrieval augmented generation with OpenAI" ] @@ -20,7 +26,13 @@ { "cell_type": "markdown", "id": "06d66021-ce62-4021-a2c5-158dee92b3bb", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, "source": [ ":::note\n", "Note that this is only relevant if you are running superduper in development mode.\n", @@ -32,21 +44,35 @@ "cell_type": "code", "execution_count": null, "id": "3ef70f6d-a189-460a-8864-241a689624e2", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [ + "parameters" + ] + }, "outputs": [], "source": [ - "APPLY = False\n", - "SAMPLE_COLLECTION_NAME = '_sample_simple_rag'\n", + "APPLY = True\n", + "SAMPLE_COLLECTION_NAME = 'sample_simple_rag'\n", "COLLECTION_NAME = '' if not APPLY else 'docs'\n", "ID_FIELD = '' if not APPLY else 'id'\n", - "OUTPUT_PREFIX = 'outputs__'" + "OUTPUT_PREFIX = '_outputs__'" ] }, { "cell_type": "code", "execution_count": null, "id": "cb029a5e-fedf-4f07-8a31-d220cfbfbb3d", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, "outputs": [], "source": [ "from superduper import superduper, CFG\n", @@ -62,14 +88,37 @@ "cell_type": "code", "execution_count": null, "id": "4e7902bd", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, "outputs": [], "source": [ "import json\n", + "import requests\n", + "import io\n", + "from superduper import logging\n", "\n", - "with open('../rag/data.json', 'r') as f:\n", - " data = json.load(f)\n", - "data = [{'x': r} for r in data]" + "def getter():\n", + " logging.info('Downloading data...')\n", + " response = requests.get('https://superduperdb-public-demo.s3.amazonaws.com/text.json')\n", + " logging.info('Downloading data... (Done)')\n", + " data = json.loads(response.content.decode('utf-8'))\n", + " return [{'x': r} for r in data]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1ef8dd07-1b47-4dce-84dd-a081d1f5ee9d", + "metadata": {}, + "outputs": [], + "source": [ + "if APPLY:\n", + " data = getter()" ] }, { @@ -287,7 +336,7 @@ "source": [ "from superduper_openai import OpenAIChatCompletion\n", "\n", - "llm_openai = OpenAIChatCompletion(identifier='llm-openai', model='gpt-3.5-turbo')" + "llm_openai = OpenAIChatCompletion(identifier='llm-openai-2', model='gpt-4-turbo')" ] }, { @@ -344,7 +393,7 @@ "outputs": [], "source": [ "if APPLY:\n", - " print(rag.predict('Tell me about vector-search'))" + " print(rag.predict('Tell me about the project'))" ] }, { @@ -393,18 +442,6 @@ "You can now load the model elsewhere and make predictions using the following command." ] }, - { - "cell_type": "code", - "execution_count": null, - "id": "344d7902-a8c1-4a78-839a-7b1ce6f6ee03", - "metadata": {}, - "outputs": [], - "source": [ - "db[SAMPLE_COLLECTION_NAME].insert(data).execute()\n", - "t = db.load('table', SAMPLE_COLLECTION_NAME)\n", - "t.data = data" - ] - }, { "cell_type": "markdown", "id": "f42119a4-6aef-46ec-a81d-cbe1167d8710", @@ -420,14 +457,22 @@ "metadata": {}, "outputs": [], "source": [ - "from superduper import Template\n", + "from superduper import Template, Table, Schema\n", + "from superduper.components.dataset import RemoteData\n", "\n", "template = Template(\n", " 'simple_rag',\n", " template=app,\n", - " default_table=t,\n", - " substitutions={COLLECTION_NAME: 'table_name', OUTPUT_PREFIX: 'output_prefix', 'mongodb': 'databackend'},\n", - " template_variables=['table_name', 'id_field', 'output_prefix', 'databackend'],\n", + " substitutions={COLLECTION_NAME: 'table_name', 'mongodb': 'databackend'},\n", + " template_variables=['table_name', 'id_field', 'databackend'],\n", + " default_table=Table(\n", + " 'sample_simple_rag',\n", + " schema=Schema('sample_simple_rag/schema', fields={'x': 'str'}),\n", + " data=RemoteData(\n", + " 'superduper-docs',\n", + " getter=getter,\n", + " )\n", + " ),\n", " types={\n", " 'id_field': {\n", " 'type': 'str',\n", @@ -447,10 +492,6 @@ " 'type': 'str',\n", " 'default': SAMPLE_COLLECTION_NAME,\n", " },\n", - " 'output_prefix': {\n", - " 'type': 'str',\n", - " 'default': OUTPUT_PREFIX,\n", - " },\n", " 'databackend': {\n", " 'type': 'str',\n", " 'default': 'mongodb',\n", diff --git a/templates/simple_rag/component.json b/templates/simple_rag/component.json index bbc21aa3f..4048a3336 100644 --- a/templates/simple_rag/component.json +++ b/templates/simple_rag/component.json @@ -4,7 +4,7 @@ "str": { "_path": "superduper.components.schema.FieldType" }, - "schema:AUTO-_fold=&x=": { + "schema:sample_simple_rag/schema": { "_path": "superduper.components.schema.Schema", "upstream": null, "plugins": null, @@ -15,26 +15,34 @@ "_fold": "?str" } }, - "datatype:pickle": { + "datatype:dill": { "_path": "superduper.components.datatype.get_serializer", - "method": "pickle", + "method": "dill", "encodable": "artifact" }, - "2abbced0b779db61865b869a5a707c1114193b11": { + "3cf26512c472a982bfddddd931f59a82c03f74e9": { "_path": "superduper.components.datatype.Artifact", - "datatype": "?datatype:pickle", + "datatype": "?datatype:dill", "uri": null, - "blob": "&:blob:2abbced0b779db61865b869a5a707c1114193b11" + "blob": "&:blob:3cf26512c472a982bfddddd931f59a82c03f74e9" }, - "table:_sample_simple_rag": { + "dataset:superduper-docs": { + "_path": "superduper.components.dataset.RemoteData", + "upstream": null, + "plugins": null, + "cache": true, + "status": null, + "getter": "?3cf26512c472a982bfddddd931f59a82c03f74e9" + }, + "table:sample_simple_rag": { "_path": "superduper.components.table.Table", "upstream": null, "plugins": null, "cache": true, - "status": "Status.ready", - "schema": "?schema:AUTO-_fold=&x=", + "status": null, + "schema": "?schema:sample_simple_rag/schema", "primary_id": "id", - "data": "?2abbced0b779db61865b869a5a707c1114193b11" + "data": "?dataset:superduper-docs" }, "simple_rag": { "_path": "superduper.components.template.Template", @@ -50,14 +58,14 @@ "method": "dill", "encodable": "artifact" }, - "e46e054b9cee237abcea32cedfe8842e8be09b6b": { + "adc059378de6bb27a2f6b02b8bf0e92f2c97e1e8": { "_path": "superduper.components.datatype.Artifact", "datatype": "?datatype:dill", "uri": null, - "blob": "&:blob:e46e054b9cee237abcea32cedfe8842e8be09b6b" + "blob": "&:blob:adc059378de6bb27a2f6b02b8bf0e92f2c97e1e8" }, "model:chunker": { - "_object": "?e46e054b9cee237abcea32cedfe8842e8be09b6b", + "_object": "?adc059378de6bb27a2f6b02b8bf0e92f2c97e1e8", "upstream": null, "plugins": null, "cache": true, @@ -75,10 +83,10 @@ "trainer": null, "chunk_size": 200 }, - "var-table-name-select-var-id-field-x": { + "-select-id-x": { "_path": "superduper_.query.parse_query", "documents": [], - "query": ".select(\"\", \"x\")" + "query": ".select(\"id\", \"x\")" }, "listener:chunker": { "_path": "superduper.components.listener.Listener", @@ -90,7 +98,7 @@ "key": "x", "model": "?model:chunker", "predict_kwargs": {}, - "select": "?var-table-name-select-var-id-field-x", + "select": "?-select-id-x", "flatten": true }, "datatype:sqlvector[1536]": { @@ -168,7 +176,7 @@ ], "query": "chunker__?(listener:chunker.uuid).select().like(documents[0], vector_index=\"vectorindex\", n=5)" }, - "model:llm-openai": { + "model:llm-openai-2": { "_path": "superduper_openai.model.OpenAIChatCompletion", "upstream": null, "plugins": null, @@ -185,7 +193,7 @@ "num_workers": 0, "serve": false, "trainer": null, - "model": "gpt-3.5-turbo", + "model": "gpt-4-turbo", "max_batch_size": 8, "openai_api_key": null, "openai_api_base": null, @@ -213,7 +221,7 @@ "prompt_template": "Use the following context snippets, these snippets are not ordered!, Answer the question based on this context.\nThese snippets are samples from our internal data-repositories, and should be used exclusively and as a matter of priority to answer the question\n\n{context}\n\nHere's the question: {query}", "select": "?outputs-chunker-?(listener:chunker.uuid)-select-like-outputs-chunker-?(listener:chunker.uuid)-var-query-vector-index-vectorindex-n-5", "key": "chunker__?(listener:chunker.uuid)", - "llm": "?model:llm-openai" + "llm": "?model:llm-openai-2" }, "simple-rag-app": { "_path": "superduper.components.application.Application", @@ -237,7 +245,6 @@ "template_variables": [ "table_name", "id_field", - "output_prefix", "databackend" ], "types": { @@ -265,11 +272,7 @@ }, "table_name": { "type": "str", - "default": "_sample_simple_rag" - }, - "output_prefix": { - "type": "str", - "default": "outputs__" + "default": "sample_simple_rag" }, "databackend": { "type": "str", @@ -278,9 +281,9 @@ }, "blobs": null, "files": null, - "data": null, "requirements": null, - "default_table": "?table:_sample_simple_rag", + "default_table": "?table:sample_simple_rag", + "queries": null, "_literals": [ "template" ] diff --git a/templates/simple_rag/data.json b/templates/simple_rag/data.json deleted file mode 100644 index 01c0da2c6..000000000 --- a/templates/simple_rag/data.json +++ /dev/null @@ -1,211 +0,0 @@ -[ - "---\nsidebar_position: 5\n---\n\n# Encoding data\n\nIn AI, typical types of data are:\n\n- **Numbers** (integers, floats, etc.)\n- **Text**\n- **Images**\n- **Audio**\n- **Videos**\n- **...bespoke in house data**\n\nMost databases don't support any data other than numbers and text.\nSuperduper enables the use of these more interesting data-types using the `Document` wrapper.\n\n### `Document`\n\nThe `Document` wrapper, wraps dictionaries, and is the container which is used whenever \ndata is exchanged with your database. That means inputs, and queries, wrap dictionaries \nused with `Document` and also results are returned wrapped with `Document`.\n\nWhenever the `Document` contains data which is in need of specialized serialization,\nthen the `Document` instance contains calls to `DataType` instances.\n\n### `DataType`\n\nThe [`DataType` class](../apply_api/datatype), allows users to create and encoder custom datatypes, by providing \ntheir own encoder/decoder pairs.\n\nHere is an example of applying an `DataType` to add an image to a `Document`:\n\n```python\nimport pickle\nimport PIL.Image\nfrom superduper import DataType, Document\n\nimage = PIL.Image.open('my_image.jpg')\n\nmy_image_encoder = DataType(\n identifier='my-pil',\n encoder=lambda x, info: pickle.dumps(x),\n decoder=lambda x, info: pickle.loads(x),\n)\n```\n\nWhen all data is inserted into the database, each piece of data is encoded using the corresponding datatype. \n```\n>> encoded_data = my_image_encoder.encode_data(image)\n>> encoded_data\nb'\\x80\\x04\\x95[\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x8c\\x12PIL.PngImagePlugin\\x94\\x8c\\x0cPngImageFile\\x94\\x93\\x94)\\x81\\x94]\\x94(}\\x94\\x8c\\x0ctransparency\\x94K\\x00s\\x8c\\x01P\\x94K\\x01K\\x01\\x86\\x94]\\x94(K\\x00K\\x00K\\x00eC\\x01\\x00\\x94eb.'\n```\n\nWhen the data is retrieved from the database, it is decoded accordingly.\n```python\n>>> my_image_encoder.decode_data(encoded_data)\n\n```\n\nBy default, data encoded with `DataType` is saved in the database, but developers \nmay alternatively save data in the `db.artifact_store` instead. \n\nThis may be achiever by specifying the `encodable=...` parameter:\n\n```python\nmy_image_encoder = DataType(\n identifier='my-pil',\n encoder=lambda x, info: pickle.dumps(x),\n decoder=lambda x, info: pickle.loads(x),\n encodable='artifact', # saves to disk/ db.artifact_store\n # encodable='lazy_artifact', # Just in time loading\n)\n```\n\n### `Schema`\n\nA `Schema` allows developers to connect named fields of dictionaries \nor columns of `pandas.DataFrame` objects with `DataType` instances.\n\nA `Schema` is used, in particular, for SQL databases/ tables, and for \nmodels that return multiple outputs.\n\nHere is an example `Schema`, which is used together with text and image \nfields:\n\n```python\nschema = Schema('my-schema', fields={'my-text': 'str', 'my-img': my_image_encoder})\n```\n\nAll data is encoded using the schema when saved, and decoded using the schema when queried.\n\n```python\n>>> saved_data = Document({'my-img': image}).encode(schema)\n>>> saved_data\n{'my-img': b'\\x80\\x04\\x95[\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x8c\\x12PIL.PngImagePlugin\\x94\\x8c\\x0cPngImageFile\\x94\\x93\\x94)\\x81\\x94]\\x94(}\\x94\\x8c\\x0ctransparency\\x94K\\x00s\\x8c\\x01P\\x94K\\x01K\\x01\\x86\\x94]\\x94(K\\x00K\\x00K\\x00eC\\x01\\x00\\x94eb.',\n '_schema': 'my-schema',\n '_builds': {},\n '_files': {},\n '_blobs': {}}\n```\n\n```python\n>>> Document.decode(saved_data, schema=schema).unpack()\n{'my-img': }\n```\n\n\n", - "# `Document` wrapper\n\n...", - "# Fundamentals\n\nIn this section, we try and guide developers through the principles and algorithms underlying Superduper.\n\nFor a more \"how-to\" approach refer first to the [tutorials](../tutorials/intro.md), [use-cases](../../use_cases), [reusable snippets](../reusable_snippets/), and to [core api](../core_api/) usage.", - "---\nsidebar_position: 3\n---\n\n# Datalayer\n\nThe `Datalayer` is the principle point of entry in Superduper for:\n\n- Communicating with the database\n- Instructing models and other components to work together with the database\n- Accessing and storing meta-data about your Superduper models and data\n\nTechnically, the `Datalayer` \"wires together\" several important backends involved in the AI workflow:\n\n- Querying the database via the **databackend**\n- Storing and retrieving serialized model-weights and other artifacts from the **artifact store**\n- Storing and retrieval important meta-data, from the **meta-data store** and information about models and other components which are to be installed with Superduper\n- Performing computations over the data in the **databackend** using the models saved in the **artifact store**\n\n```python\nfrom superduper import superduper\n\ndb = superduper()\n\ndb.databackend\n# \n\ndb.artifact_store\n# \n\ndb.metadata\n# \n\ndb.compute\n# \n```\n\nOur aim is to make it easy to set-up each aspect of the `Datalayer` with your preferred\nconnections/ engines.\n\n### Data-backend\n\nThe databackend typically connects to your database (although `superduper` also supports other databackends such as a directory of `pandas` dataframes), \nand dispatches queries written in an query API which is compatible with that databackend, but which also includes additional aspects\nspecific to `superduper`.\n\nRead more [here](../data_integrations/supported_query_APIs.md).\n\nThe databackend is configured by setting the URI `CFG.databackend` in the [configuration system](../get_started/configuration.md).\n\nWe support the same databackends as supported by the [`ibis` project](https://ibis-project.org/):\n\n- [**MongoDB**](https://www.mongodb.com/)\n- [**PostgreSQL**](https://www.postgresql.org/)\n- [**SQLite**](https://www.sqlite.org/index.html)\n- [**DuckDB**](https://duckdb.org/)\n- [**BigQuery**](https://cloud.google.com/bigquery)\n- [**ClickHouse**](https://clickhouse.com/)\n- [**DataFusion**](https://arrow.apache.org/datafusion/)\n- [**Druid**](https://druid.apache.org/)\n- [**Impala**](https://impala.apache.org/)\n- [**MSSQL**](https://www.microsoft.com/en-us/sql-server/)\n- [**MySQL**](https://www.mysql.com/)\n- [**Oracle**](https://www.oracle.com/database/)\n- [**pandas**](https://pandas.pydata.org/)\n- [**Polars**](https://www.pola.rs/)\n- [**PySpark**](https://spark.apache.org/docs/3.3.1/api/python/index.html)\n- [**Snowflake**](https://www.snowflake.com/en/)\n- [**Trino**](https://trino.io/)\n\n### Artifact Store\n\nThe artifact-store is the place where large pieces of data associated with your AI models are saved.\nUsers have the possibility to configure either a local filesystem, or an artifact store on MongoDB `gridfs`:\n\nFor example:\n\n```python\nCFG.artifact_store = 'mongodb://localhost:27017/documents'\n```\n\nOr:\n\n```python\nCFG.artifact_store = 'filesystem://./data'\n```\n\n### Metadata Store\n\nThe meta-data store is the place where important information associated with models and \nrelated components are kept:\n\n- Where are the data artifacts saved for a component?\n- Important parameters necessary for using a component\n- Important parameters which were used to create a component (e.g. in training or otherwise)\n\nSimilarly to the databackend and artifact store, the metadata store is configurable:\n\n```python\nCFG.metadata = 'mongodb://localhost:27017/documents'\n```\n\nWe support metadata store via:\n\n1. [MongoDB](https://www.mongodb.com/)\n1. All databases supported by [SQLAlchemy](https://www.sqlalchemy.org/).\n For example, these databases supported by the databackend are also supported by the metadata store.\n - [PostgreSQL](https://www.postgresql.org/)\n - [MySQL](https://www.mysql.com/)\n - [SQLite](https://www.sqlite.org/)\n - [MSSQL](https://www.microsoft.com/en-us/sql-server/sql-server-downloads)\n\n\n### Compute backend\n\nThe compute-backend is designed to be a configurable engine for performing computations with models.\nWe support 2 backends:\n\n- Local (default: run compute in process on the local machine)\n- `dask` (run compute on a configured `dask` cluster)\n\n## Default settings\n\nIn such cases, the default configuration is to use the same configuration as used in the \ndatabackend.\n\nI.e., for MongoDB the following are equivalent:\n\n```python\ndb = superduper('mongodb://localhost:27018/documents')\n```\n\n...and\n\n```python\ndb = superduper(\n 'mongodb://localhost:27018/documents',\n metadata_store='mongodb://localhost:27018/documents',\n artifact_store='mongodb://localhost:27018/documents',\n)\n```\n\nWhenever a database is supported by the artifact store and metadata store, \nthe same behaviour holds. However, since there is no general pattern\nfor storing large files in SQL databases, the fallback artifact store\nis on the local filesystem. So the following are equivalent:\n\n```python\ndb = superduper('sqlite://.db')\n```\n\n...and\n\n```python\nfrom superduper.backends.local.compute import LocalComputeBackend\n\ndb = superduper(\n 'sqlite://.db',\n metadata_store='sqlite://.db',\n artifact_store='filesystem://.superduper/artifacts/',\n compute=LocalComputeBackend(),\n)\n```\n\n## Key methods\n\nHere are the key methods which you'll use again and again:\n\n### `db.execute`\n\nThis method executes a query. For an overview of how this works see [here](../data_integrations/supported_query_APIs.md).\n\n### `db.add`\n\nThis method adds `Component` instances to the `db.artifact_store` connection, and registers meta-data\nabout those instances in the `db.metadata_store`.\n\nIn addition, each sub-class of `Component` has certain \"set-up\" tasks, such as inference, additional configurations, \nor training, and these are scheduled by `db.add`.\n\n\n\n### `db.show`\n\nThis methods displays which `Component` instances are registered with the system.\n\n### `db.remove`\n\nThis method removes a `Component` instance from the system.\n\n## Additional methods\n\n### `db.validate`\n\nValidate your components (mostly models)\n\n### `db.predict`\n\nInfer predictions from models hosted by Superduper. Read more about this and about models [here](../apply_api/model.md).\n", - "---\nsidebar_position: 5\n---\n\n# Predictors and Models\n\n## Predictors\n\nThe base class which enables predictions in `superduper` is the `Predictor` mixin class.\n\nA `Predictor` is a class which implements the `.predict` method; this mimics `.predict` from \n[Scikit-Learn](https://scikit-learn.org/stable/) and related frameworks, but has support\nfor prediction directly via the `Datalayer`.\n\nA typical call to `.predict` looks like this:\n\n```python\npredictor.predict(\n X='' # key of documents or column of table to take as input\n db=db # `Datalayer` instance, built via `db = superduper()`\n select=my_select # database query over which to compute outputs\n **predict_kwargs # additional parameters for `.predict`\n)\n```\n\nExamples of `Predictor` classes are the AI-API classes in\n\n- `superduper.ext.openai.OpenAI*`\n- `superduper.ext.anthropic.Anthropic*`\n- `superduper.ext.cohere.Cohere*`\n\n## Models\n\nA model is a particular type of `Predictor` which carries large chunks of data around\nin order to implement predictions. These blobs can be, for example, the weights \nof a deep learning architecture or similar important data.\n\nExamples of `Model` are:\n\n- `superduper.ext.torch.TorchModel`\n- `superduper.ext.sklearn.Estimator`\n- `superdueprdb.ext.transformers.Pipeline`\n\nEach of these inheriting classes also implements the `.fit` method, which re-parametrizes the class in question, \ntypicall via a machine learning task and objective function.\n\nA typical call to `.fit` looks like this:\n\n```python\nmodel.fit(\n X='', # key of documents or column of table to take as input\n y='', # key of documents or column of table to take as target of fitting\n db=db, # `Datalayer` instance, built via `db = superduper()`\n select=my_select, # database query for training and validation data\n **fit_kwargs, # additional parameters for .fit\n)\n```\n", - "---\nsidebar_position: 7\n---\n\n# Vector-search\n\nSuperduper allows users to implement vector-search in their database by either \nusing in-database functionality, or via a sidecar implementation with `lance` and `FastAPI`.\n\n## Philosophy\n\nIn Superduper, from a user point-of-view vector-search isn't a completely different beast than other ways of \nusing the system:\n\n- The vector-preparation is exactly the same as preparing outputs with any model, \n with the special difference that the outputs are vectors, arrays or tensors.\n- Vector-searches are just another type of database query which happen to use \n the stored vectors.\n\n## Algorithm\n\nHere is a schematic of how vector-search works:\n\n![](/img/vector-search.png)\n\n## Explanation\n\nA vector-search query has the schematic form:\n\n```python\ntable_or_collection\n .like(Document()) # the operand is vectorized using registered models\n .filter_results(*args, **kwargs) # the results of vector-search are filtered\n```\n\n```python\ntable_or_collection\n .filter_results(*args, **kwargs) # the results of vector-search are filtered\n .like(Document()) # the operand is vectorized using registered models\n```\n\n...or\n\nThe type of such a query is a `CompoundSelect`. It's 2 parts are the vector-search part (`like`) and the \nfiltering part (`select`).\n\nIn the first case, the operand of `like` is dispatched to a **model**, which converts this into a **vector**.\nThe **vector** is compared to previously saved outputs of the same or a paired **model** (multi-modal).\nThe most similar `ids` are retrieved. The `select` part of the query is then transformed to \na similar query which searches within the retrieved `ids`. The full set of results are returned\nto the client.\n\nRead [here](../tutorials/vector_search.md) about setting up and detailed usage of vector-search.\n", - "# Architecture\n\nHere is a schematic of the Superduper design.\n\n![](/img/light.png)\n\n### Explanation\n\n1. Superduper expects data and components to be added/ updated from a range of client-side mechanisms: **scripts**, **apps**, **notebooks** or **third-party database clients** (possibly non-python).\n\n1. Users and programs can add **components** (**models**, data **encoders**, **vector-indexes** and more) from the client-side. These large items are stored in the **artifact-store** and are tracked via the **meta-data** store.\n\n1. If data is inserted to the **databackend** the **change-data-capture (CDC)** component captures these changes as they stream in.\n\n1. **(CDC)** triggers **work** to be performed in response to these changes, depending on which **components** are present in the system.\n\n1. The **work** is submitted to the **workers** via the **scheduler**. Together the **scheduler** and **workers** make up the **compute** layer.\n\n1. **workers** write their outputs back to the **databackend** and trained models to the **artifact-store**\n\n1. The **compute**, **databackend**, **metadata-store**, **artifact-store** collectively make up the **datalayer**\n\n1. The **datalayer** may be queried from client-side, including hybrid-queries or **compound-select** queries, which synthesizes classical **selects** with **vector-searches**", - "# Class hierarchy of user-facing classes\n\n![](/img/class-hierarchy.png)\n\n## `superduper`\n\n`superduper` is the entry point to connect and \nbe able to use key functionality. It returns a built `Datalayer`.\n\n## `Datalayer`\n\nThe `Datalayer` class, an instance of which we refer to throughout this \ndocumentation as `db`, is the key entrypoint via which developers\nmay connect to their data-infrastructure and additional connect\nAI functionality to their data-infrastructure:\n\nThe `Datalayer` connects to data, with the [`superduper` function](../core_api/connect).\n\n***`.apply`***\n\nAI `Component` instances may be applied to the built `Datalayer` [with `.apply`](../core_api/apply).\n\n***`.execute`***\n\nThe data and AI outputs are accessible with queries and AI models \nusing the `.execute` method. This can include standard database queries,\nvector-search queries (which include model inference) and pure model computations.\nSee [here](../core_api/execute).\n\n## `Component`\n\nAI functionality is packaged as a `Component`. Key implementations \nare `Model`, `Listener` and `VectorIndex`.\n\n## `Document`\n\n`Document` is a wrapper around standard Python `dict` instances, \nbut which can encode their contained fields as a mixture of JSON\nand pure `bytes`. This mechanism can in principle handle any information \nwhich Python can handle.\n\nSince most databases can handle this type of information, this makes\n`Document` a crucial piece in connecting AI (which operates over a range of information)\nand the database.\n\n## `_BaseEncodable`\n\nThis is the base class, which allows `superduper` to decide how to save \"special\" data.\n\n## `Serializable`\n\nAn extension of Python `dataclasses`, but easier to get the original class back \nfrom the serialized dictionary form. This is the base class underlying \nall `superduper` queries and predictions as well as mixing into `Component`.\n\n## `Job`\n\n`Component` instances applied with `Datalayer.apply` create compute-jobs \nin response to incoming data, and on initialization via the `Job` class.\n\nThe interface on `Component` is `Component.schedule_jobs`.", - "# Snowflake\n\n## Installation\n\n```bash\npip install superduper_ibis\npip install snowflake-sqlalchemy\n```\n\n## API\n\n```python\nfrom superduper import superduper\n\ndb = superduper('snowflake://')\n```", - "---\nsidebar_position: 1\n---\n\n# Community support\n\nIn order to specify the action of models on the data, we provide an interface to pythonic ecosystem query APIs.\nIn particular, we provide wrappers to these projects to create database queries:\n\n- [`pymongo`](https://pymongo.readthedocs.io/en/stable/) for MongoDB\n- [`ibis`](https://ibis-project.org/) for SQL databases\n\n`ibis` also allows users to use raw SQL in their workflows.\n\nQueries in these two-worlds can be built by importing the table/collection class from \neach data backend. With `pymongo`, one can write:\n\n```python\nquery = db['products'].find({'brand': 'Nike'}, {'_id': 1}).limit(10)\n```\n\nIn `ibis`, one would write:\n\n```python\nquery = db['products'].filter(products.brand == 'Nike').select('id').limit(10)\n```\n\n## Hybrid API\n\nOn top of the native features of `pymongo` and `ibis`, `superduper` builds several novel features:\n\n- Additional ways to query the database with the outputs of machine learning models\n - Query model-outputs directly\n - Vector-search\n- Ways to encode and query more sophisticated data-types using the `Document`-`Encoder` pattern.", - "# MySQL\n\n## Installation\n\n```bash\npip install superduper_ibis\n```\n\n## API\n\n```python\nfrom superduper import superduper\n\ndb = superduper('mysql://')\n```", - "# Data integrations\n\nSuperduper integrates with 3 types of data-backend:\n\n- NoSQL\n - [MongoDB Community Edition](https://www.mongodb.com/try/download/community)\n - [MongoDB Atlas](https://www.mongodb.com/products/platform/atlas-database)\n- SQL\n - [MySQL](https://www.mysql.com/)\n - [PostgreSQL](https://www.postgresql.org/)\n - [Oracle](https://www.oracle.com/database/)\n - [SQLite](https://www.sqlite.org/)\n - [Snowflake](https://www.snowflake.com/en/)\n - [DuckDB](https://duckdb.org/)\n - [Clickhouse](https://clickhouse.com/)\n- In-memory tabular formats\n - [Pandas](https://pandas.pydata.org/docs/)\n\nAlthough these data-backends provide very different functionality, \nwith Superduper they are accessible via a uniform API.\n\nHowever, developers should bear in mind that there are a few \ndifferences between MongoDB and SQL data-backends.\n\n\n", - "---\nsidebar_position: 3\n---\n\n# SQL\n\n`superduper` supports SQL databases via the [`ibis` project](https://ibis-project.org/).\nWith `superduper`, queries may be built which conform to the `ibis` API, with additional \nsupport for complex data-types and vector-searches.\n\n## Installation\n\n```bash\npip install superduper_ibis\n```\n\n## Inserting data\n\nTable data must correspond to the `Schema` for that table.\nEither [create a `Schema` and `Table`](../execute_api/data_encodings_and_schemas.md#create-a-table-with-a-schema)\nor use [an auto-detected `Schema`](../execute_api/auto_data_types.md). Once you've \ngot a `Schema`, all data inserted must conform to that `Schema`:\n\n```python\nimport pandas\n\npandas.DataFrame([\n PIL.Image.open('image.jpg'), 'some text', 4,\n PIL.Image.open('other_image.jpg'), 'some other text', 3,\n])\n\nt.insert(dataframe.to_dict(orient='records'))\n```\n\n## Selecting data\n\n`superduper` supports selecting data via the `ibis` query API.\nFor example:\n\n```python\ndb['my_table'].filter(t.rating > 3).limit(5).select(t.image).execute()\n```\n\n### Vector-search\n\nVector-searches are supported via the `like` operator:\n\n```python\n(\n db['my_table']\n .like({'text': 'something like this'}, vector_index='my-index')\n .filter(t.rating > 3)\n .limit(5)\n .select(t.image, t.id)\n).execute()\n```\n\nVector-searches are either first or last in a chain of operations:\n\n```python\n(\n db['my_table']\n t.filter(t.rating > 3)\n .limit(5)\n .select(t.image, t.id)\n .like({'text': 'something like this'}, vector_index='my-index')\n).execute()\n```\n\n## Updating data\n\nUpdates are not covered for `superduper` SQL integrations.\n\n## Deleting data\n\n```python\ndb.databackend.drop_table('my-table')\n```\n", - "# DuckDB\n\n## Installation\n\n```bash\npip install superduper_ibis\n```\n\n## API\n\n```python\nfrom superduper import superduper\n\ndb = superduper('duckdb://.dbb')\n```", - "# Pandas\n\n## Installation\n\n```bash\npip install superduper_ibis\n```\n\n## API\n\nAlthough `pandas` is not a database, it came come in very handy for testing.\nTo connect, one specifies a list of `.csv` files:\n\n```python\nimport glob\nfrom superduper import superduper\n\ndb = superduper(glob.glob('*.csv'))\n```", - "# PostgreSQL\n\n## Installation\n\n```bash\npip install ibis-framework[postgres]\npip install superduper_ibis\n```\n\n## API\n\n```python\nfrom superduper import superduper\n\ndb = superduper('postgres://')\n```", - "# SQLite\n\n## Installation\n\n```bash\npip install superduper_ibis\n```\n\n## API\n\n```python\nfrom superduper import superduper\n\ndb = superduper('sqlite://.db')\n```", - "---\nsidebar_position: 2\n---\n\n# MongoDB \n\n## Installation\n\n```bash\npip install superduper_mongodb\n```\n\n## API\n\nIn general the MongoDB query API works exactly as per `pymongo`, with the exception that:\n\n- inputs are wrapped in `Document`\n- additional support for vector-search is provided\n- queries are executed lazily\n\n### Inserts\n\n```python\ndb['my-collection'].insert_many([{'my-field': ..., ...}\n for _ in range(20)\n]).execute()\n```\n\n### Updates\n\n```python\ndb['my-collection'].update_many(\n {'': ''},\n {'$set': ...},\n).execute()\n```\n\n### Selects\n\n```python\ndb['my-collection'].find({}, {'_id': 1}).limit(10).execute()\n```\n\n### Vector-search\n\nVector-searches may be integrated with `.find`.\n\n```python\ndb['my-collection'].like({'img': }, vector_index='my-index-name').find({}, {'img': 1}).execute()\n```\n\nRead more about vector-search [here](../fundamentals/vector_search_algorithm.md).\n\n### Deletes\n\n```python\ndb['my-collection'].delete_many({}).execute()\n```", - "---\nsidebar_label: Build text embedding model\nfilename: build_text_embedding_model.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Build text embedding model\n\n\n\n \n ```python\n !pip install openai\n from superduper_openai import OpenAIEmbedding\n \n embedding_model = OpenAIEmbedding(identifier='text-embedding-ada-002') \n ```\n \n \n ```python\n import os\n from superduper_jina import JinaEmbedding\n \n os.environ[\"JINA_API_KEY\"] = \"jina_xxxx\"\n \n # define the model\n embedding_model = JinaEmbedding(identifier='jina-embeddings-v2-base-en') \n ```\n \n \n ```python\n !pip install sentence-transformers\n from superduper import vector\n import sentence_transformers\n from superduper_sentence_transformers import SentenceTransformer\n \n embedding_model = SentenceTransformer(\n identifier=\"embedding\",\n object=sentence_transformers.SentenceTransformer(\"BAAI/bge-small-en\"),\n datatype=vector(shape=(1024,)),\n postprocess=lambda x: x.tolist(),\n predict_kwargs={\"show_progress_bar\": True},\n ) \n ```\n \n \n ```python\n from superduper import vector\n from superduper.components.model import Model, ensure_initialized, Signature\n from transformers import AutoTokenizer, AutoModel\n import torch\n \n class TransformerEmbedding(Model):\n signature: Signature = 'singleton'\n pretrained_model_name_or_path : str\n \n def init(self):\n self.tokenizer = AutoTokenizer.from_pretrained(self.pretrained_model_name_or_path)\n self.model = AutoModel.from_pretrained(self.pretrained_model_name_or_path)\n self.model.eval()\n \n @ensure_initialized\n def predict(self, x):\n return self.predict([x])[0]\n \n @ensure_initialized\n def predict(self, dataset):\n encoded_input = self.tokenizer(dataset, padding=True, truncation=True, return_tensors='pt')\n # Compute token embeddings\n with torch.no_grad():\n model_output = self.model(**encoded_input)\n # Perform pooling. In this case, cls pooling.\n sentence_embeddings = model_output[0][:, 0]\n # normalize embeddings\n sentence_embeddings = torch.nn.functional.normalize(sentence_embeddings, p=2, dim=1)\n return sentence_embeddings.tolist()\n \n \n embedding_model = TransformerEmbedding(identifier=\"embedding\", pretrained_model_name_or_path=\"BAAI/bge-small-en\", datatype=vector(shape=(384, ))) \n ```\n \n\n```python\nprint(len(embedding_model.predict(\"What is superduper\")))\n```\n\n", - "---\nsidebar_label: Create Listener\nfilename: create_listener.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Create Listener\n\n## Two ways to define listener\n\n\n\n \n ```python\n from superduper import Listener\n db.apply(\n Listener(\n key='key_name',\n model=model,\n select=select,\n )\n ) \n ```\n \n \n ```python\n db.apply(model.to_listener(key='key_name', select=select)) \n ```\n \n\n## Data passed into the model\n\n\n\n \n ```python\n # Model predict function definition: model.predict(x)\n # Data example in database: {\"key_name\": 10}\n # Then the listener will call model.predict(10)\n from superduper import Listener\n db.apply(\n Listener(\n key='key_name',\n model=model,\n select=select,\n )\n ) \n ```\n \n \n ```python\n # Model predict function definition: model.predict(x1, x2)\n # Data example in database: {\"key_name_1\": 10, \"key_name_2\": 100}\n # Then the listener will call model.predict(10, 100)\n from superduper import Listener\n db.apply(\n Listener(\n key=['key_name_1', 'key_name_2'],\n model=model,\n select=select,\n )\n ) \n ```\n \n \n ```python\n # Model predict function definition: model.predict(x1, x2)\n # Data example in database: {\"key_name_1\": 10, \"key_name_2\": 100}\n # Then the listener will call model.predict(x1=10, x2=100)\n from superduper import Listener\n db.apply(\n Listener(\n key={\"key_name_1\": \"x1\", \"key_name_2\": \"x2\"},\n model=model,\n select=select,\n )\n ) \n ```\n \n\n", - "---\nsidebar_label: Setup tables or collections\nfilename: setup_tables_or_collections.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Setup tables or collections\n\n```python\nfrom superduper.components.table import Table\nfrom superduper import Schema\n\nschema = Schema(identifier=\"schema\", fields={\"x\": datatype})\ntable_or_collection = Table(\"documents\", schema=schema)\ndb.apply(table_or_collection)\n```\n\n", - "---\nsidebar_label: Build LLM\nfilename: build_llm.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Build LLM\n\n\n\n \n ```python\n !pip install openai\n from superduper_openai import OpenAIChatCompletion\n \n llm = OpenAIChatCompletion(identifier='llm', model='gpt-3.5-turbo') \n ```\n \n \n ```python\n !pip install anthropic\n from superduper_anthropic import AnthropicCompletions\n import os\n \n os.environ[\"ANTHROPIC_API_KEY\"] = \"sk-xxx\"\n \n predict_kwargs = {\n \"max_tokens\": 1024,\n \"temperature\": 0.8,\n }\n \n llm = AnthropicCompletions(identifier='llm', model='claude-2.1', predict_kwargs=predict_kwargs) \n ```\n \n \n ```python\n !pip install vllm\n from superduper_vllm import VllmModel\n \n predict_kwargs = {\n \"max_tokens\": 1024,\n \"temperature\": 0.8,\n }\n \n \n llm = VllmModel(\n identifier=\"llm\",\n model_name=\"TheBloke/Mistral-7B-Instruct-v0.2-AWQ\",\n vllm_kwargs={\n \"gpu_memory_utilization\": 0.7,\n \"max_model_len\": 1024,\n \"quantization\": \"awq\",\n },\n predict_kwargs=predict_kwargs,\n ) \n ```\n \n \n ```python\n !pip install transformers datasets bitsandbytes accelerate\n from superduper_transformers import LLM\n \n llm = LLM.from_pretrained(\"mistralai/Mistral-7B-Instruct-v0.2\", load_in_8bit=True, device_map=\"cuda\", identifier=\"llm\", predict_kwargs=dict(max_new_tokens=128)) \n ```\n \n \n ```python\n !pip install llama_cpp_python\n # !huggingface-cli download TheBloke/Mistral-7B-Instruct-v0.2-GGUF mistral-7b-instruct-v0.2.Q4_K_M.gguf --local-dir . --local-dir-use-symlinks False\n \n from superduper_llama_cpp.model import LlamaCpp\n llm = LlamaCpp(identifier=\"llm\", model_name_or_path=\"mistral-7b-instruct-v0.2.Q4_K_M.gguf\") \n ```\n \n\n```python\n# test the llm model\nllm.predict(\"Tell me about the superduper\")\n```\n\n", - "---\nsidebar_label: Compute features\nfilename: compute_features.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Compute features\n\n\n\n \n ```python\n key = 'txt'\n import sentence_transformers\n from superduper import vector, Listener\n from superduper_sentence_transformers import SentenceTransformer\n \n superdupermodel = SentenceTransformer(\n identifier=\"embedding\",\n object=sentence_transformers.SentenceTransformer(\"sentence-transformers/all-MiniLM-L6-v2\"),\n postprocess=lambda x: x.tolist(),\n )\n \n jobs, listener = db.apply(\n Listener(\n model=superdupermodel,\n select=select,\n key=key,\n identifier=\"features\"\n )\n ) \n ```\n \n \n ```python\n key = 'image'\n import torchvision.models as models\n from torchvision import transforms\n from superduper_torch import TorchModel\n from superduper import Listener\n from PIL import Image\n \n class TorchVisionEmbedding:\n def __init__(self):\n # Load the pre-trained ResNet-18 model\n self.resnet = models.resnet18(pretrained=True)\n \n # Set the model to evaluation mode\n self.resnet.eval()\n \n def preprocess(self, image):\n # Preprocess the image\n preprocess = preprocess = transforms.Compose([\n transforms.Resize(256),\n transforms.CenterCrop(224),\n transforms.ToTensor(),\n transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),\n ])\n tensor_image = preprocess(image)\n return tensor_image\n \n model = TorchVisionEmbedding()\n superdupermodel = TorchModel(identifier='my-vision-model-torch', object=model.resnet, preprocess=model.preprocess, postprocess=lambda x: x.numpy().tolist())\n \n jobs, listener = db.apply(\n Listener(\n model=superdupermodel,\n select=select,\n key=key,\n identifier=\"features\"\n )\n ) \n ```\n \n \n ```python\n import torch\n import clip\n from torchvision import transforms\n from superduper import ObjectModel\n from superduper import Listener\n \n import torch\n import clip\n from PIL import Image\n \n key={'txt': 'txt', 'image': 'image'}\n \n class CLIPModel:\n def __init__(self):\n # Load the CLIP model\n self.device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n self.model, self.preprocess = clip.load(\"RN50\", device=self.device)\n \n def __call__(self, text, image):\n with torch.no_grad():\n text = clip.tokenize([text]).to(self.device)\n image = self.preprocess(Image.fromarray(image.astype(np.uint8))).unsqueeze(0).to(self.device)\n image_features = self.model.encode_image(image)[0].numpy().tolist()\n text_features = self.model.encode_text(text)[0].numpy().tolist()\n return [image_features, text_features]\n \n model = CLIPModel()\n \n superdupermodel = ObjectModel(identifier=\"clip\", object=model, signature=\"**kwargs\", flatten=True, model_update_kwargs={\"document_embedded\": False})\n \n jobs, listener = db.apply(\n Listener(\n model=superdupermodel,\n select=select,\n key=key\n identifier=\"features\"\n )\n )\n \n ```\n \n \n ```python\n \n key = 'random'\n \n import numpy as np\n from superduper import superduper, ObjectModel, Listener\n \n def random(*args, **kwargs):\n return np.random.random(1024).tolist()\n \n superdupermodel = ObjectModel(identifier=\"random\", object=random)\n \n jobs, listener = db.apply(\n Listener(\n model=superdupermodel,\n select=select,\n key=key,\n identifier=\"features\"\n )\n ) \n ```\n \n \n ```python\n import numpy as np\n from superduper import superduper, ObjectModel, Listener\n \n key = 'custom'\n \n # Define any feature calculation function\n def calc_fake_feature(input_data):\n fake_feature = list(range(10))\n return fake_feature\n \n superdupermodel = ObjectModel(identifier=\"fake_feature\", object=calc_fake_feature)\n \n jobs, listener = db.apply(\n Listener(\n model=superdupermodel,\n select=select,\n # key of input_data\n key=key,\n identifier=\"features\"\n )\n ) \n ```\n \n\n", - "---\nsidebar_label: Get useful sample data\nfilename: get_useful_sample_data.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Get useful sample data\n\n\n\n \n ```python\n !curl -O https://superduper-public-demo.s3.amazonaws.com/text.json\n import json\n \n with open('text.json', 'r') as f:\n data = json.load(f) \n ```\n \n \n ```python\n !curl -O https://superduper-public-demo.s3.amazonaws.com/text_classification.json\n import json\n \n with open(\"text_classification.json\", \"r\") as f:\n data = json.load(f)\n num_classes = 2 \n ```\n \n \n ```python\n !curl -O https://superduper-public-demo.s3.amazonaws.com/pdfs.zip && unzip -o pdfs.zip\n import os\n \n data = [f'pdfs/{x}' for x in os.listdir('./pdfs') if x.endswith('.pdf')] \n ```\n \n \n ```python\n !curl -O https://superduper-public-demo.s3.amazonaws.com/images.zip && unzip images.zip\n import os\n from PIL import Image\n \n data = [f'images/{x}' for x in os.listdir('./images') if x.endswith(\".png\")][:200]\n data = [ Image.open(path) for path in data] \n ```\n \n \n ```python\n !curl -O https://superduper-public-demo.s3.amazonaws.com/images_classification.zip && unzip images_classification.zip\n import json\n from PIL import Image\n \n with open('images/images.json', 'r') as f:\n data = json.load(f)\n \n data = [{'x': Image.open(d['image_path']), 'y': d['label']} for d in data]\n num_classes = 2 \n ```\n \n \n ```python\n !curl -O https://superduper-public-demo.s3.amazonaws.com/videos.zip && unzip videos.zip\n import os\n \n data = [f'videos/{x}' for x in os.listdir('./videos')]\n sample_datapoint = data[-1]\n \n from superduper.ext.pillow import pil_image\n chunked_model_datatype = pil_image \n ```\n \n \n ```python\n # !curl -O https://superduper-public-demo.s3.amazonaws.com/audio.zip && unzip audio.zip\n import os\n \n data = [f'audios/{x}' for x in os.listdir('./audio')]\n sample_datapoint = data[-1] \n ```\n \n\n", - "---\nsidebar_label: Create datatype\nfilename: create_datatype.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Create datatype\n\nSuperduperDB supports automatic data conversion, so users don’t need to worry about the compatibility of different data formats (`PIL.Image`, `numpy.array`, `pandas.DataFrame`, etc.) with the database.\n\nIt also supports custom data conversion methods for transforming data, such as defining the following Datatype.\n\n\n\n \n ```python\n from superduper import vector\n \n datatype = vector(shape=(3, )) \n ```\n \n \n ```python\n from superduper_torch import tensor\n import torch\n \n datatype = tensor(torch.float, shape=(32, 32, 3)) \n ```\n \n \n ```python\n from superduper.ext.numpy import array\n import numpy as np\n \n datatype = array(dtype=\"float64\", shape=(32, 32, 3)) \n ```\n \n \n ```python\n datatype = 'str' \n ```\n \n \n ```python\n from superduper import DataType\n \n # By creating a datatype and setting its encodable attribute to “file” for saving PDF files, \n # all datatypes encoded as “file” will have their corresponding files uploaded to the artifact store. \n # References will be recorded in the database, and the files will be downloaded locally when needed. \n \n datatype = DataType('pdf', encodable='file') \n ```\n \n \n ```python\n from superduper.ext.pillow import pil_image\n import PIL.Image\n \n datatype = pil_image \n ```\n \n \n ```python\n \n datatype = None \n ```\n \n \n ```python\n from superduper.ext.numpy import array\n from superduper import DataType\n import scipy.io.wavfile\n import io\n \n \n def encoder(data):\n buffer = io.BytesIO()\n fs = data[0]\n content = data[1]\n scipy.io.wavfile.write(buffer, fs, content)\n return buffer.getvalue()\n \n \n def decoder(data):\n buffer = io.BytesIO(data)\n content = scipy.io.wavfile.read(buffer)\n return content\n \n \n datatype = DataType(\n 'wav',\n encoder=encoder,\n decoder=decoder,\n encodable='artifact',\n ) \n ```\n \n \n ```python\n from superduper import DataType\n \n # Create an instance of the Encoder with the identifier 'video_on_file' and load_hybrid set to False\n datatype = DataType(\n identifier='video_on_file',\n encodable='file',\n ) \n ```\n \n \n ```python\n from superduper import DataType\n import pandas as pd\n \n def encoder(x, info=None):\n return x.to_json()\n \n def decoder(x, info):\n return pd.read_json(x)\n \n datatype = DataType(\n identifier=\"pandas\",\n encoder=encoder,\n decoder=decoder\n ) \n ```\n \n \n ```python\n from superduper import DataType\n import numpy as np\n import pickle\n \n \n def pickle_encode(object, info=None):\n return pickle.dumps(object)\n \n def pickle_decode(b, info=None):\n return pickle.loads(b)\n \n \n datatype = DataType(\n identifier=\"VectorSearchMatrix\",\n encoder=pickle_encode,\n decoder=pickle_decode,\n encodable='artifact',\n ) \n ```\n \n\n", - "# Create vector-index\n\n\n```python\nvector_index_name = 'my-vector-index'\n```\n\n\n```python\n# \nfrom superduper import VectorIndex, Listener\n\njobs, _ = db.apply(\n VectorIndex(\n vector_index_name,\n indexing_listener=Listener(\n key=indexing_key, # the `Document` key `model` should ingest to create embedding\n select=select, # a `Select` query telling which data to search over\n model=embedding_model, # a `_Predictor` how to convert data to embeddings\n )\n )\n)\n```\n\n\n```python\n# \nfrom superduper import VectorIndex, Listener\n\njobs, _ = db.apply(\n VectorIndex(\n vector_index_name,\n indexing_listener=Listener(\n key=indexing_key, # the `Document` key `model` should ingest to create embedding\n select=select, # a `Select` query telling which data to search over\n model=embedding_model, # a `_Predictor` how to convert data to embeddings\n ),\n compatible_listener=Listener(\n key=compatible_key, # the `Document` key `model` should ingest to create embedding\n model=compatible_model, # a `_Predictor` how to convert data to embeddings\n active=False,\n select=None,\n )\n )\n)\n```\n\n\n```python\nquery_table_or_collection = select.table_or_collection\n```\n", - "---\nsidebar_label: Build multimodal embedding models\nfilename: build_multimodal_embedding_models.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Build multimodal embedding models\n\nSome embedding models such as [CLIP](https://github.com/openai/CLIP) come in pairs of `model` and `compatible_model`.\nOtherwise:\n\n\n\n \n ```python\n from superduper_sentence_transformers import SentenceTransformer\n \n # Load the pre-trained sentence transformer model\n model = SentenceTransformer(\n identifier='all-MiniLM-L6-v2',\n postprocess=lambda x: x.tolist(),\n ) \n ```\n \n \n ```python\n from torchvision import transforms\n import torch\n import torch.nn as nn\n import torchvision.models as models\n \n import warnings\n \n # Import custom modules\n from superduper_torch import TorchModel, tensor\n \n # Define a series of image transformations using torchvision.transforms.Compose\n t = transforms.Compose([\n transforms.Resize((224, 224)), # Resize the input image to 224x224 pixels (must same as here)\n transforms.CenterCrop((224, 224)), # Perform a center crop on the resized image\n transforms.ToTensor(), # Convert the image to a PyTorch tensor\n transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) # Normalize the tensor with specified mean and standard deviation\n ])\n \n # Define a preprocess function that applies the defined transformations to an input image\n def preprocess(x):\n try:\n return t(x)\n except Exception as e:\n # If an exception occurs during preprocessing, issue a warning and return a tensor of zeros\n warnings.warn(str(e))\n return torch.zeros(3, 224, 224)\n \n # Load the pre-trained ResNet-50 model from torchvision\n resnet50 = models.resnet50(pretrained=True)\n \n # Extract all layers of the ResNet-50 model except the last one\n modules = list(resnet50.children())[:-1]\n resnet50 = nn.Sequential(*modules)\n \n # Create a TorchModel instance with the ResNet-50 model, preprocessing function, and postprocessing lambda\n model = TorchModel(\n identifier='resnet50',\n preprocess=preprocess,\n object=resnet50,\n postprocess=lambda x: x[:, 0, 0], # Postprocess by extracting the top-left element of the output tensor\n datatype=tensor(dtype='float', shape=(2048,)) # Specify the encoder configuration\n ) \n ```\n \n \n ```python\n !pip install git+https://github.com/openai/CLIP.git\n import clip\n from superduper import vector\n from superduper_torch import TorchModel\n \n # Load the CLIP model and obtain the preprocessing function\n model, preprocess = clip.load(\"ViT-B/32\", device='cpu')\n \n # Define a vector with shape (1024,)\n \n output_datatpye = vector(shape=(1024,))\n \n # Create a TorchModel for text encoding\n compatible_model = TorchModel(\n identifier='clip_text', # Unique identifier for the model\n object=model, # CLIP model\n preprocess=lambda x: clip.tokenize(x)[0], # Model input preprocessing using CLIP \n postprocess=lambda x: x.tolist(), # Convert the model output to a list\n datatype=output_datatpye, # Vector encoder with shape (1024,)\n forward_method='encode_text', # Use the 'encode_text' method for forward pass \n )\n \n # Create a TorchModel for visual encoding\n model = TorchModel(\n identifier='clip_image', # Unique identifier for the model\n object=model.visual, # Visual part of the CLIP model \n preprocess=preprocess, # Visual preprocessing using CLIP\n postprocess=lambda x: x.tolist(), # Convert the output to a list \n datatype=output_datatpye, # Vector encoder with shape (1024,)\n ) \n ```\n \n \n ```python\n !pip install librosa\n import librosa\n import numpy as np\n from superduper import ObjectModel\n from superduper import vector\n \n def audio_embedding(audio_file):\n # Load the audio file\n MAX_SIZE= 10000\n y, sr = librosa.load(audio_file)\n y = y[:MAX_SIZE]\n mfccs = librosa.feature.mfcc(y=y, sr=44000, n_mfcc=1)\n mfccs = mfccs.squeeze().tolist()\n return mfccs\n \n if not get_chunking_datatype:\n e = vector(shape=(1000,))\n else:\n e = get_chunking_datatype(1000)\n \n model= ObjectModel(identifier='my-model-audio', object=audio_embedding, datatype=e) \n ```\n \n\n", - "---\nsidebar_label: Setup simple tables or collections\nfilename: setup_simple_tables_or_collections.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Setup simple tables or collections\n\n\n\n \n ```python\n # If data is in a format natively supported by MongoDB, we don't need to do anything.\n # However to manually specify datatypes, do as below\n from superduper import Schema, Document\n from superduper_pillow import pil_image\n from superduper.components.datatype import pickle_serializer\n \n fields = {\n 'serialized_content': pickle_serializer,\n 'img_content': pil_image,\n }\n \n schema = Schema(identifier=\"my-schema\", fields=fields)\n \n # Add schema to system\n db.apply(schema)\n \n # Now assert `Document` instances, specifying this schema\n db['documents'].insert_many([\n Document({\n 'serialized_content': item,\n 'img_content': img,\n }, schema='my-schema')\n for item, img in data\n ]) \n ```\n \n \n ```python\n # If data is in a format natively supported by MongoDB, we don't need to do anything.\n # However to manually specify datatypes, do as below\n from superduper import Schema\n from superduper_pillow import pil_image_hybrid\n from superduper.components.datatype import pickle_serializer\n \n fields = {\n 'serialized_content': pickle_serializer,\n 'img_content': pil_image_hybrid,\n }\n \n schema = Schema(identifier=\"my-schema\", fields=fields)\n db.apply(schema)\n \n # Now assert `Document` instances, specifying this schema\n db['documents'].insert_many([\n Document({\n 'serialized_content': item,\n 'img_content': img,\n }, schema='my-schema')\n for item, img in data\n ]) \n ```\n \n\n", - "---\nsidebar_label: Get LLM Finetuning Data\nfilename: get_llm_finetuning_data.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Get LLM Finetuning Data\n\nThe following are examples of training data in different formats.\n\n\n\n \n ```python\n from datasets import load_dataset\n from superduper.base.document import Document\n dataset_name = \"timdettmers/openassistant-guanaco\"\n dataset = load_dataset(dataset_name)\n \n train_dataset = dataset[\"train\"]\n eval_dataset = dataset[\"test\"]\n \n train_documents = [\n Document({**example, \"_fold\": \"train\"})\n for example in train_dataset\n ]\n eval_documents = [\n Document({**example, \"_fold\": \"valid\"})\n for example in eval_dataset\n ]\n \n datas = train_documents + eval_documents \n ```\n \n \n ```python\n from datasets import load_dataset\n from superduper.base.document import Document\n dataset_name = \"mosaicml/instruct-v3\"\n dataset = load_dataset(dataset_name)\n \n train_dataset = dataset[\"train\"]\n eval_dataset = dataset[\"test\"]\n \n train_documents = [\n Document({**example, \"_fold\": \"train\"})\n for example in train_dataset\n ]\n eval_documents = [\n Document({**example, \"_fold\": \"valid\"})\n for example in eval_dataset\n ]\n \n datas = train_documents + eval_documents \n ```\n \n \n ```python\n from datasets import load_dataset\n from superduper.base.document import Document\n dataset_name = \"philschmid/dolly-15k-oai-style\"\n dataset = load_dataset(dataset_name)['train'].train_test_split(0.9)\n \n train_dataset = dataset[\"train\"]\n eval_dataset = dataset[\"test\"]\n \n train_documents = [\n Document({**example, \"_fold\": \"train\"})\n for example in train_dataset\n ]\n eval_documents = [\n Document({**example, \"_fold\": \"valid\"})\n for example in eval_dataset\n ]\n \n datas = train_documents + eval_documents \n ```\n \n\nWe can define different training parameters to handle this type of data.\n\n\n\n \n ```python\n # Function for transformation after extracting data from the database\n transform = None\n key = ('text')\n training_kwargs=dict(dataset_text_field=\"text\") \n ```\n \n \n ```python\n # Function for transformation after extracting data from the database\n def transform(prompt, response):\n return {'text': prompt + response + \"\"}\n \n key = ('prompt', 'response')\n training_kwargs=dict(dataset_text_field=\"text\") \n ```\n \n \n ```python\n # Function for transformation after extracting data from the database\n transform = None\n \n key = ('messages')\n training_kwargs=None \n ```\n \n\nExample input_text and output_text\n\n\n\n \n ```python\n data = datas[0]\n input_text, output_text = data[\"text\"].rsplit(\"### Assistant: \", maxsplit=1)\n input_text += \"### Assistant: \"\n output_text = output_text.rsplit(\"### Human:\")[0]\n print(\"Input: --------------\")\n print(input_text)\n print(\"Response: --------------\")\n print(output_text) \n ```\n \n \n ```python\n data = datas[0]\n input_text = data[\"prompt\"]\n output_text = data[\"response\"]\n print(\"Input: --------------\")\n print(input_text)\n print(\"Response: --------------\")\n print(output_text) \n ```\n \n \n ```python\n data = datas[0]\n messages = data[\"messages\"]\n input_text = messages[:-1]\n output_text = messages[-1][\"content\"]\n print(\"Input: --------------\")\n print(input_text)\n print(\"Response: --------------\")\n print(output_text) \n ```\n \n\n", - "---\nsidebar_label: Create Vector Search Model\nfilename: create_vector_search_model.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Create Vector Search Model\n\n```python\nitem = {indexing_key: ''}\n```\n\n```python\nfrom superduper.components.model import QueryModel\n\nvector_search_model = QueryModel(\n identifier=\"VectorSearch\",\n select=query_table_or_collection.like(item, vector_index=vector_index_name, n=5).select(),\n # The _source is the identifier of the upstream data, which can be used to locate the data from upstream sources using `_source`.\n postprocess=lambda docs: [{\"text\": doc[indexing_key], \"_source\": doc[\"_source\"]} for doc in docs],\n db=db\n)\n```\n\n```python\nvector_search_model.predict(query=query)\n```\n\n", - "---\nsidebar_label: Build simple select queries\nfilename: build_simple_select_queries.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Build simple select queries\n\n\n\n \n ```python\n \n select = db[''].select() \n ```\n \n \n ```python\n \n select = db[''].select() \n ```\n \n\n", - "---\nsidebar_label: Insert data\nfilename: insert_data.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Insert data\n\nIn order to create data, we need to create a `Schema` for encoding our special `Datatype` column(s) in the databackend.\n\n\n\n \n ```python\n from superduper import Document, DataType\n \n def do_insert(data, schema = None):\n \n if schema is None and (datatype is None or isinstance(datatype, str)):\n data = [Document({'x': x['x'], 'y': x['y']}) if isinstance(x, dict) and 'x' in x and 'y' in x else Document({'x': x}) for x in data]\n db.execute(table_or_collection.insert_many(data))\n elif schema is None and datatype is not None and isinstance(datatype, DataType):\n data = [Document({'x': datatype(x['x']), 'y': x['y']}) if isinstance(x, dict) and 'x' in x and 'y' in x else Document({'x': datatype(x)}) for x in data]\n db.execute(table_or_collection.insert_many(data))\n else:\n data = [Document({'x': x['x'], 'y': x['y']}) if isinstance(x, dict) and 'x' in x and 'y' in x else Document({'x': x}) for x in data]\n db.execute(table_or_collection.insert_many(data, schema=schema))\n \n ```\n \n \n ```python\n from superduper import Document\n \n def do_insert(data):\n db.execute(table_or_collection.insert([Document({'id': str(idx), 'x': x['x'], 'y': x['y']}) if isinstance(x, dict) and 'x' in x and 'y' in x else Document({'id': str(idx), 'x': x}) for idx, x in enumerate(data)]))\n \n ```\n \n\n", - "---\nsidebar_label: Build and train classifier\nfilename: build_and_train_classifier.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Build and train classifier\n\n\n\n \n ```python\n from superduper_sklearn import Estimator, SklearnTrainer\n from sklearn.svm import SVC\n \n model = Estimator(\n identifier=\"my-model\",\n object=SVC(),\n trainer=SklearnTrainer(\n \"my-trainer\",\n key=(input_key, \"label\"),\n select=training_select,\n ),\n ) \n ```\n \n \n ```python\n import torch\n from torch import nn\n from superduper_torch.model import TorchModel\n from superduper_torch.training import TorchTrainer\n from torch.nn.functional import cross_entropy\n \n \n class SimpleModel(nn.Module):\n def __init__(self, input_size=16, hidden_size=32, num_classes=3):\n super(SimpleModel, self).__init__()\n self.fc1 = nn.Linear(input_size, hidden_size)\n self.relu = nn.ReLU()\n self.fc2 = nn.Linear(hidden_size, num_classes)\n \n def forward(self, x):\n out = self.fc1(x)\n out = self.relu(out)\n out = self.fc2(out)\n return out\n \n preprocess = lambda x: torch.tensor(x)\n \n # Postprocess function for the model output \n def postprocess(x):\n return int(x.topk(1)[1].item())\n \n def data_transform(features, label):\n return torch.tensor(features), label\n \n # Create a Logistic Regression model\n # feature_length is the input feature size\n model = SimpleModel(feature_size, num_classes=num_classes)\n model = TorchModel(\n identifier='my-model',\n object=model, \n preprocess=preprocess,\n postprocess=postprocess,\n trainer=TorchTrainer(\n key=(input_key, 'label'),\n identifier='my_trainer',\n objective=cross_entropy,\n loader_kwargs={'batch_size': 10},\n max_iterations=1000,\n validation_interval=100,\n select=select,\n transform=data_transform,\n ),\n ) \n ```\n \n\n", - "---\nsidebar_label: Apply a chunker for search\nfilename: apply_a_chunker_for_search.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Apply a chunker for search\n\n:::note\nNote that applying a chunker is ***not*** mandatory for search.\nIf your data is already chunked (e.g. short text snippets or audio) or if you\nare searching through something like images, which can't be chunked, then this\nwon't be necessary.\n:::\n\n\n\n \n ```python\n from superduper import model\n \n CHUNK_SIZE = 200\n \n @model(flatten=True, model_update_kwargs={'document_embedded': False})\n def chunker(text):\n text = text.split()\n chunks = [' '.join(text[i:i + CHUNK_SIZE]) for i in range(0, len(text), CHUNK_SIZE)]\n return chunks \n ```\n \n \n ```python\n !pip install -q \"unstructured[pdf]\"\n from superduper import model\n from unstructured.partition.pdf import partition_pdf\n \n CHUNK_SIZE = 500\n \n @model(flatten=True)\n def chunker(pdf_file):\n elements = partition_pdf(pdf_file)\n text = '\\n'.join([e.text for e in elements])\n chunks = [text[i:i + CHUNK_SIZE] for i in range(0, len(text), CHUNK_SIZE)]\n return chunks \n ```\n \n \n ```python\n !pip install opencv-python\n import cv2\n import tqdm\n from PIL import Image\n from superduper.ext.pillow import pil_image\n from superduper import model, Schema\n \n \n @model(\n flatten=True,\n model_update_kwargs={'document_embedded': False},\n )\n def chunker(video_file):\n # Set the sampling frequency for frames\n sample_freq = 10\n \n # Open the video file using OpenCV\n cap = cv2.VideoCapture(video_file)\n \n # Initialize variables\n frame_count = 0\n fps = cap.get(cv2.CAP_PROP_FPS)\n extracted_frames = []\n progress = tqdm.tqdm()\n \n # Iterate through video frames\n while True:\n ret, frame = cap.read()\n if not ret:\n break\n \n # Get the current timestamp based on frame count and FPS\n current_timestamp = frame_count // fps\n \n # Sample frames based on the specified frequency\n if frame_count % sample_freq == 0:\n extracted_frames.append({\n 'image': Image.fromarray(frame[:,:,::-1]), # Convert BGR to RGB\n 'current_timestamp': current_timestamp,\n })\n frame_count += 1\n progress.update(1)\n \n # Release resources\n cap.release()\n cv2.destroyAllWindows()\n \n # Return the list of extracted frames\n return extracted_frames \n ```\n \n \n ```python\n from superduper import model, Schema\n \n CHUNK_SIZE = 10 # in seconds\n \n @model(\n flatten=True,\n model_update_kwargs={'document_embedded': False},\n output_schema=Schema(identifier='output-schema', fields={'audio': datatype}),\n )\n def chunker(audio):\n chunks = []\n for i in range(0, len(audio), CHUNK_SIZE):\n chunks.append(audio[1][i: i + CHUNK_SIZE])\n return [(audio[0], chunk) for chunk in chunks] \n ```\n \n\nNow we apply this chunker to the data by wrapping the chunker in `Listener`:\n\n```python\nfrom superduper import Listener\n\nupstream_listener = Listener(\n model=chunker,\n select=select,\n key='x',\n uuid=\"chunk\",\n)\n\ndb.apply(upstream_listener)\n```\n\n", - "---\nsidebar_label: Visualize Results\nfilename: visualize_results.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Visualize Results\n\n\n\n \n ```python\n from IPython.display import Markdown, display\n \n def visualize(item, source):\n display(Markdown(item))\n \n def show(results, output_key, get_original_callable=None):\n for result in results:\n source = None\n if '_source' in result:\n \n source = get_original_callable(result['_source'])\n visualize(result[output_key], source) \n ```\n \n \n ```python\n from IPython.display import display\n \n def visualize(item, source):\n display(item) # item is a PIL.Image\n \n def show(results, output_key, get_original_callable=None):\n for result in results:\n source = None\n if '_source' in result:\n source = get_original_callable(result['_source'])\n visualize(result[output_key].x, source) \n ```\n \n \n ```python\n from IPython.display import Audio, display\n \n def visualize(item, source):\n display(Audio(item[1], fs=item[0]))\n \n def show(results, output_key, get_original_callable=None):\n for result in results:\n source = None\n if '_source' in result:\n \n source = get_original_callable(result['_source'])\n visualize(result[output_key], source) \n ```\n \n \n ```python\n from IPython.display import IFrame, display\n \n def visualize(item, source):\n display(item)\n \n \n def show(results, output_key, get_original_callable=None):\n for result in results:\n source = None\n if '_source' in result:\n \n source = get_original_callable(result['_source'])\n visualize(result[output_key], source) \n ```\n \n \n ```python\n from IPython.display import display, HTML\n \n def visualize(uri, source):\n timestamp = source # increment to the frame you want to start at\n \n # Create HTML code for the video player with a specified source and controls\n video_html = f\"\"\"\n \n \n \"\"\"\n \n display(HTML(video_html))\n \n \n def show(results, output_key, get_original_callable=None):\n # show only the first video\n for result in results:\n source = result['_source']\n result = result[output_key]\n timestamp = result['current_timestamp']\n uri = get_original_callable(source)['x']\n print(uri, timestamp)\n visualize(uri, timestamp)\n break \n ```\n \n\n", - "```python\n# \nfrom PyPDF2 import PdfReader\n\nfrom superduper import model\n\n\n@model(flatten=True, model_update_kwargs={'document_embedded': False})\ndef text_extraction(file_path):\n reader = PdfReader(file_path)\n \n texts = []\n for i, page in tqdm(enumerate(reader.pages)):\n text = page.extract_text() \n texts.append(text)\n return texts\n```\n", - "---\nsidebar_label: Perform a vector search\nfilename: perform_a_vector_search.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Perform a vector search\n\n```python\nfrom superduper import Document\n\ndef get_sample_item(key, sample_datapoint, datatype=None):\n if not isinstance(datatype, DataType):\n item = Document({key: sample_datapoint})\n else:\n item = Document({key: datatype(sample_datapoint)})\n\n return item\n\nif compatible_key:\n item = get_sample_item(compatible_key, sample_datapoint, None)\nelse:\n item = get_sample_item(indexing_key, sample_datapoint, datatype=datatype)\n```\n\nOnce we have this search target, we can execute a search as follows:\n\n\n\n \n ```python\n select = query_table_or_collection.like(item, vector_index=vector_index_name, n=10).find() \n ```\n \n \n ```python\n select = query_table_or_collection.like(item, vector_index=vector_index_name, n=10).limit(10) \n ```\n \n\n```python\nresults = db.execute(select)\n```\n\n", - "---\nsidebar_label: Build image embedding model\nfilename: build_image_embedding_model.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Build image embedding model\nConstruct a neural network architecture to project high-dimensional image data into a lower-dimensional, dense vector representation\n(embedding) that preserves relevant semantic and visual information within a learned latent space.\n\n```python\n!wget https://raw.githubusercontent.com/openai/CLIP/main/CLIP.png\n```\n\n```python\nimage_path = \"CLIP.png\"\n```\n\n\n\n \n ```python\n \n import torchvision.models as models\n from torchvision import transforms\n from superduper_torch import TorchModel\n \n class TorchVisionEmbedding:\n def __init__(self):\n # Load the pre-trained ResNet-18 model\n self.resnet = models.resnet18(pretrained=True)\n \n # Set the model to evaluation mode\n self.resnet.eval()\n \n def preprocess(self, image):\n # Preprocess the image\n preprocess = preprocess = transforms.Compose([\n transforms.Resize(256),\n transforms.CenterCrop(224),\n transforms.ToTensor(),\n transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),\n ])\n tensor_image = preprocess(image)\n return tensor_image\n \n embedding_model = TorchVisionEmbedding()\n superdupermodel = TorchModel(identifier='my-vision-model-torch', object=embedding_model.resnet, preprocess=embedding_model.preprocess) \n ```\n \n \n ```python\n import torch\n import clip\n from torchvision import transforms\n from superduper_torch import TorchModel\n \n class CLIPVisionEmbedding:\n def __init__(self):\n # Load the CLIP model\n self.device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n self.model, self.preprocess = clip.load(\"RN50\", device=self.device)\n \n def preprocess(self, image):\n # Load and preprocess the image\n image = self.preprocess(image).unsqueeze(0).to(self.device)\n return image\n \n embedding_model = CLIPVisionEmbedding()\n superdupermodel = TorchModel(identifier='my-vision-model-clip', object=model.model, preprocess=model.preprocess, forward_method='encode_image') \n ```\n \n \n ```python\n import torch\n from transformers import AutoImageProcessor, AutoModel, AutoFeatureExtractor\n import torchvision.transforms as T\n from superduper_torch import TorchModel\n \n \n class HuggingFaceEmbeddings(torch.nn.Module):\n def __init__(self):\n super().__init__()\n model_ckpt = \"nateraw/vit-base-beans\"\n processor = AutoImageProcessor.from_pretrained(model_ckpt)\n self.extractor = AutoFeatureExtractor.from_pretrained(model_ckpt)\n self.model = AutoModel.from_pretrained(model_ckpt)\n \n def forward(self, x):\n return self.model(pixel_values=x).last_hidden_state[:, 0].cpu()\n \n \n class Preprocessor:\n def __init__(self, extractor):\n self.device = 'cpu'\n # Data transformation chain.\n self.transformation_chain = T.Compose(\n [\n # We first resize the input image to 256x256 and then we take center crop.\n T.Resize(int((256 / 224) * extractor.size[\"height\"])),\n T.CenterCrop(extractor.size[\"height\"]),\n T.ToTensor(),\n T.Normalize(mean=extractor.image_mean, std=extractor.image_std),\n ]\n )\n def __call__(self, image):\n return self.transformation_chain(image).to(self.device)\n \n \n embedding_model = HuggingFaceEmbeddings()\n superdupermodel = TorchModel(identifier='my-vision-model-huggingface', object=embedding_model, preprocess=Preprocessor(embedding_model.extractor)) \n ```\n \n\n```python\nembedding_model.predict(Image.open(image_path))\n```\n\n", - "# Select outputs of upstream listener\n\n:::note\nThis is useful if you have performed a first step, such as pre-computing \nfeatures, or chunking your data. You can use this query to \noperate on those outputs.\n:::\n\n\n```python\nindexing_key = upstream_listener.outputs_key\nselect = upstream_listener.outputs_select\n```\n", - "---\nsidebar_label: Connecting listeners\nfilename: connecting_listeners.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Connecting listeners\n\n", - "---\nsidebar_label: Create Model Output Type\nfilename: create_model_output_type.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Create Model Output Type\n\n\n\n \n ```python\n chunked_model_datatype = None \n ```\n \n \n ```python\n from superduper_ibis.field_types import dtype\n chunked_model_datatype = dtype('str') \n ```\n \n\n", - "---\nsidebar_label: Connect to superduper\nfilename: connect_to_superduper.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Connect to superduper\n\n:::note\nNote that this is only relevant if you are running superduper in development mode.\nOtherwise refer to \"Configuring your production system\".\n:::\n\n\n\n \n ```python\n from superduper import superduper\n \n db = superduper('mongodb://localhost:27017/documents') \n ```\n \n \n ```python\n from superduper import superduper\n db = superduper('sqlite://my_db.db') \n ```\n \n \n ```python\n from superduper import superduper\n \n user = 'superduper'\n password = 'superduper'\n port = 3306\n host = 'localhost'\n database = 'test_db'\n \n db = superduper(f\"mysql://{user}:{password}@{host}:{port}/{database}\") \n ```\n \n \n ```python\n from superduper import superduper\n \n user = 'sa'\n password = 'Superduper#1'\n port = 1433\n host = 'localhost'\n \n db = superduper(f\"mssql://{user}:{password}@{host}:{port}\") \n ```\n \n \n ```python\n !pip install psycopg2\n from superduper import superduper\n \n user = 'postgres'\n password = 'postgres'\n port = 5432\n host = 'localhost'\n database = 'test_db'\n db_uri = f\"postgres://{user}:{password}@{host}:{port}/{database}\"\n \n db = superduper(db_uri, metadata_store=db_uri.replace('postgres://', 'postgresql://')) \n ```\n \n \n ```python\n from superduper import superduper\n \n user = \"superduperuser\"\n password = \"superduperpassword\"\n account = \"XXXX-XXXX\" # ORGANIZATIONID-USERID\n database = \"FREE_COMPANY_DATASET/PUBLIC\"\n \n snowflake_uri = f\"snowflake://{user}:{password}@{account}/{database}\"\n \n db = superduper(\n snowflake_uri, \n metadata_store='sqlite:///your_database_name.db',\n ) \n ```\n \n \n ```python\n from superduper import superduper\n \n user = 'default'\n password = ''\n port = 8123\n host = 'localhost'\n \n db = superduper(f\"clickhouse://{user}:{password}@{host}:{port}\", metadata_store=f'mongomock://meta') \n ```\n \n \n ```python\n from superduper import superduper\n \n db = superduper('duckdb://mydb.duckdb') \n ```\n \n \n ```python\n from superduper import superduper\n \n db = superduper(['my.csv'], metadata_store=f'mongomock://meta') \n ```\n \n \n ```python\n from superduper import superduper\n \n db = superduper('mongomock:///test_db') \n ```\n \n\n", - "---\nsidebar_label: Build A Trainable LLM\nfilename: build_a_trainable_llm.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Build A Trainable LLM\n\n**Create an LLM Trainer for training**\n\nThe parameters of this LLM Trainer are basically the same as `transformers.TrainingArguments`, but some additional parameters have been added for easier training setup.\n\n```python\nfrom superduper_transformers import LLM, LLMTrainer\n\ntrainer = LLMTrainer(\n identifier=\"llm-finetune-trainer\",\n output_dir=\"output/finetune\",\n overwrite_output_dir=True,\n num_train_epochs=3,\n save_total_limit=3,\n logging_steps=10,\n evaluation_strategy=\"steps\",\n save_steps=100,\n eval_steps=100,\n per_device_train_batch_size=1,\n per_device_eval_batch_size=1,\n gradient_accumulation_steps=2,\n max_seq_length=512,\n key=key,\n select=select,\n transform=transform,\n training_kwargs=training_kwargs,\n)\n```\n\n\n\n \n ```python\n trainer.use_lora = True \n ```\n \n \n ```python\n trainer.use_lora = True\n trainer.bits = 4 \n ```\n \n \n ```python\n !pip install deepspeed\n deepspeed = {\n \"train_batch_size\": \"auto\",\n \"train_micro_batch_size_per_gpu\": \"auto\",\n \"gradient_accumulation_steps\": \"auto\",\n \"zero_optimization\": {\n \"stage\": 2,\n },\n }\n trainer.use_lora = True\n trainer.bits = 4\n trainer.deepspeed = deepspeed \n ```\n \n \n ```python\n trainer.use_lora = True\n trainer.bits = 4\n trainer.num_gpus = 2 \n ```\n \n\nCreate a trainable LLM model and add it to the database, then the training task will run automatically.\n\n```python\nllm = LLM(\n identifier=\"llm\",\n model_name_or_path=model_name,\n trainer=trainer,\n model_kwargs=model_kwargs,\n tokenizer_kwargs=tokenizer_kwargs,\n)\n\ndb.apply(llm)\n```\n\n# Load the trained model\nThere are two methods to load a trained model:\n\n- **Load the model directly**: This will load the model with the best metrics (if the transformers' best model save strategy is set) or the last version of the model.\n- **Use a specified checkpoint**: This method downloads the specified checkpoint, then initializes the base model, and finally merges the checkpoint with the base model. This approach supports custom operations such as resetting flash_attentions, model quantization, etc., during initialization.\n\n\n\n \n ```python\n llm = db.load(\"model\", \"llm\") \n ```\n \n \n ```python\n from superduper_transformers import LLM\n experiment_id = db.show(\"checkpoint\")[-1]\n version = None # None means the last checkpoint\n checkpoint = db.load(\"checkpoint\", experiment_id, version=version)\n llm = LLM(\n identifier=\"llm\",\n model_name_or_path=model_name,\n adapter_id=checkpoint,\n model_kwargs=dict(load_in_4bit=True)\n ) \n ```\n \n\n", - "---\nsidebar_label: Answer question with LLM\nfilename: answer_question_with_llm.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Answer question with LLM\n\n\n\n \n ```python\n \n llm.predict(query) \n ```\n \n \n ```python\n from superduper import model\n from superduper.components.graph import Graph, input_node\n \n @model\n def build_prompt(query):\n return f\"Translate the sentence into German: {query}\"\n \n in_ = input_node('query')\n prompt = build_prompt(query=in_)\n answer = llm(prompt)\n prompt_llm = answer.to_graph(\"prompt_llm\")\n prompt_llm.predict(query)[0] \n ```\n \n \n ```python\n from superduper import model\n from superduper.components.graph import Graph, input_node\n \n prompt_template = (\n \"Use the following context snippets, these snippets are not ordered!, Answer the question based on this context.\\n\"\n \"{context}\\n\\n\"\n \"Here's the question: {query}\"\n )\n \n \n @model\n def build_prompt(query, docs):\n chunks = [doc[\"text\"] for doc in docs]\n context = \"\\n\\n\".join(chunks)\n prompt = prompt_template.format(context=context, query=query)\n return prompt\n \n \n in_ = input_node('query')\n vector_search_results = vector_search_model(query=in_)\n prompt = build_prompt(query=in_, docs=vector_search_results)\n answer = llm(prompt)\n context_llm = answer.to_graph(\"context_llm\")\n context_llm.predict(query) \n ```\n \n\n", - "---\nsidebar_label: Insert simple data\nfilename: insert_simple_data.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Insert simple data\n\nAfter turning on auto_schema, we can directly insert data, and superduper will automatically analyze the data type, and match the construction of the table and datatype.\n\n```python\nfrom superduper import Document\n\ntable_or_collection = db['documents']\n\nids = db.execute(table_or_collection.insert([Document(data) for data in datas]))\nselect = table_or_collection.select()\n```\n\n", - "---\ndescription: Find detailed technical documentation for Superduper's AI and database integration solutions. Access comprehensive guides, API references, and tutorials to effectively implement and utilize SuperDuper technologies in your projects. (Formerly SuperDuperDB)\n---\n\n\n Docs - Superduper\n\n\n# Welcome to Superduper!\n\nHi 👋 and welcome to the open-source Superduper project! \n\nSuperduper is a framework for building **AI-data** applications which are highly flexible, compositional and declarative, and deployable directly on major databases.\n\n:::info\nAn **AI-data** application is a new generation of application involving cross talk between AI models and data, which is updated \ndynamically in response to changing data, and supports a range of data queries, including queries involving AI model inferences.\n\nBasic examples include:\n\n- *Retrieval augmented generation*\n- *Data dependent retraining protocols*\n- *Semantic multimodal product search with text, image and product JSON formats.*\n\nThere is a whole world of AI-data applications out there waiting to be built.\nSuperduper is the perfect framework with which to get started!\n:::\n\n## What problem does Superduper solve?\n\nAI-data applications are highly complex. They require:\n\n- Maintaining a highly intricate state\n- Integrating with production data in databases\n- Deploying and maintaining many endpoints\n- Taking care of the life-cycle of AI models:\n - Feature computations\n - Training and re-training\n - Computation and caching of outputs\n- A range of infrastructual work, from deploying custom hardware, triggering auto-scaling,\n to deploying specialized solutions such as vector-search engines, model repositories and more\n\nThe fact that all of this is necessary explains the existence of the MLOPs, AIOps, LLMOps fields of engineering.\n\nWhat if none of this was necessary? What if AI engineers, data-scientist and decision makers, \ncould simply \"apply\" AI to the data in their data deployments? For example, the framework required would allow this type of command:\n\n```python\n apply ./path_to_app.zip your://database-uri\n```\n\nThat \"framework\" is `superduper`:\n\n```python\nsuperduper apply ./path_to_app.zip your://database-uri\n```\n\n## How does Superduper work?\n\nSuperduper is an AI-data application builder which is:\n\n- declarative \n- composable\n\n## Declarative paradigm\n\nSuperduper's main building block is class called a `Component`, which allows developers\nto build applications which \"declare\" the state they want the system to reach:\n\n- Which outputs should be kept up-to-date with which database input queries?\n- Which models should be deployed as endpoints?\n- Which models should be fine-tuned on which data prior to use?\n- Which outputs should be synchronized as vector-indexes?\n- Which computations should be run on a schedule?\n- Much, much more...\n\nThis aspect of the system is referred to as a declarative programming paradigm.\n\n## Compositionality\n\nSuperduper includes a range of `Component` types which may be easily subclassed and interchanged.\nFor example, if a developer has prototyped his model using an OpenAI LLM implementation, the LLM may be trivially exchanged for an on-premise, self-hosted Llama-3 implementation with a simple and predictable toggle in the codebase.\n\nFrom version 0.0.4 onwards, Superduper includes a range of plugins which developers may pick and choose from in open source, as well as a clear path for developers to build their own plugins. This plugin\narchitecture plays well with the compositional nature of the project.\n\n## Datalayer\n\nApplications are deployed on databases using a virtual AI-datalayer, referred to everywhere in this documentation as `db`.\n\nThis layer is composed of several important components, encompassing primary data, meta-data, artifacts and computation, which can be configured independently by the developer.\n\n## Superduper is open-sourced in Python under the Apache 2.0 license\n\nWe want to make Superduper the most inclusive and flexible AI-data framework around.\n\n:::note\nSuperduper pledges to retain the Apache 2.0 license as a key cornerstone \nof its philosophy and community ethos.\n:::\n\n### Superduper can handle classical AI/ machine learning paradigms...\n\n- classification\n- regression\n- forecasting\n- clustering\n- *and much, more more...*\n\n### As well as the most update to date techniques...\n\n- generative AI\n- LLMs\n- retrieval augmented generation (RAG)\n- computer vision\n- multimodal AI\n- *and much, more more...*\n\n![](/img/superduper.gif)\n\n## How can developers use Superduper?\n\nSuperduper boils down to 3 key patterns:\n\n#### 1. Connect to your data\n\n```python\nfrom superduper import superduper\n\ndb = superduper('')\n```\n\n#### 2. Apply AI to your data\n\n```python\n\ncomponent = ... # build your AI with anything from the \n # python ecosystem\n\ndb.apply(component)\n```\n\nEquivalently from the command line:\n\n```bash\nsuperduper apply .zip \n```\n\n#### 3. Query your data to obtain predictions, select data or perform vector-searches\n\n```python\nquery = db[''].select()\nquery.execute()\n```\n\n### What does apply AI to data mean?\n\n\"Applying AI\" to data can mean numerous things, which developers \nare able to determine themselves. Any of these things is possible:\n\n- Compute outputs on incoming data\n- Train a model on database data\n- Configure vector-search on database\n- Measure the performance of models\n- Configure models to work together\n\n### Why is the \"DB\" so important in AI?\n\nSuperduper uses the fact that AI development always starts with data, ends with data, and interfaces \nwith data from conception, to productionized deployment. Any environment which has a chance of uniting \nthe diverse tools and stakeholders involved in AI development, needs a single way \nfor AI models and algorithms to be connected to data. ***That way is Superduper***.\n\n:::important\nBy integrating AI directly at data's source, Superduper enables developers to avoid implementing MLops.\n:::\n\n### What integrations does Superduper include?\n\n#### Data\n\n- MongoDB\n- PostgreSQL\n- SQLite\n- Snowflake\n- MySQL\n- Oracle\n- MSSQL\n- Clickhouse\n- Pandas\n\n#### AI frameworks\n\n- OpenAI\n- Cohere\n- Anthropic\n- PyTorch\n- Sklearn\n- Transformers\n- Sentence-Transformers\n\n### What important additional aspects does Superduper include?\n\nDevelopers may:\n\n- Choose whether to deploy Superduper in single blocking process or in scalable, non-blocking mode via `ray`\n- Choose whether to use their own self-programmed home grown models, or integrate AI APIs and open-source frameworks\n- Choose which type of data they use, including images, videos, audio, or custom datatypes\n- Automatically version and track all functionality they use\n- Keep control over which data is exposed to API services (if any) by leveraging model self-hosting\n\n### Key Features:\n\n- **[Integration of AI with your existing data infrastructure](https://docs.superduper.io/docs/docs/walkthrough/apply_models):** Integrate any AI models and APIs with your databases in a single scalable deployment without the need for additional pre-processing steps, ETL, or boilerplate code.\n- **[Streaming Inference](https://docs.superduper.io/docs/docs/walkthrough/daemonizing_models_with_listeners):** Have your models compute outputs automatically and immediately as new data arrives, keeping your deployment always up-to-date.\n- **[Scalable Model Training](https://docs.superduper.io/docs/docs/walkthrough/training_models):** Train AI models on large, diverse datasets simply by querying your training data. Ensured optimal performance via in-build computational optimizations.\n- **[Model Chaining](https://docs.superduper.io/docs/docs/walkthrough/linking_interdependent_models/)**: Easily set up complex workflows by connecting models and APIs to work together in an interdependent and sequential manner.\n- **[Simple, but Extendable Interface](https://docs.superduper.io/docs/docs/fundamentals/procedural_vs_declarative_api)**: Add and leverage any function, program, script, or algorithm from the Python ecosystem to enhance your workflows and applications. Drill down to any layer of implementation, including the inner workings of your models, while operating Superduper with simple Python commands.\n- **[Difficult Data Types](https://docs.superduper.io/docs/docs/walkthrough/encoding_special_data_types/)**: Work directly in your database with images, video, audio, and any type that can be encoded as `bytes` in Python.\n- **[Feature Storing](https://docs.superduper.io/docs/docs/walkthrough/encoding_special_data_types):** Turn your database into a centralized repository for storing and managing inputs and outputs of AI models of arbitrary data types, making them available in a structured format and known environment.\n- **[Vector Search](https://docs.superduper.io/docs/docs/walkthrough/vector_search):** No need to duplicate and migrate your data to additional specialized vector databases - turn your existing battle-tested database into a fully-fledged multi-modal vector-search database, including easy generation of vector embeddings and vector indexes of your data with preferred models and APIs.", - "# `Plugin`\n\n- Supports a plugin system that dynamically loads Python modules and packages at runtime.\n- Supports functioning as subcomponents, providing dependency support for custom models and other local code.\n- Capable of applying to a database and storing in the artifact_store, exporting as a `superduper` format package for sharing with others.\n- Supports automatic installation of dependencies listed in the requirements.txt file under the plugin.\n\n***Usage pattern***\n\nCreate plugin\n\n```python\nfrom superduper.components.plugin import Plugin\nplugin_path = 'path/to/my_module.py'\nmy_plugin = Plugin(path=plugin_path)\n```\n\nPip install without python code\n\n```python\nfrom superduper.components.plugin import Plugin\n# If there is only one requirements file, the path must be a file that ends with requirements.txt.\nplugin = Plugin(path=\"deploy/installations/testenv_requirements.txt\")\n```\n\nPython package with requirements\n```python\nfrom superduper.components.plugin import Plugin\nplugin_path = 'path/to/my_package'\n# |_my_package\n# |_requirements.txt\n# |_file1.py\n# |_file2.py\n# |_sub_module\n# |_file_a.py\nmy_plugin = Plugin(path=plugin_path)\n```\n\nPython module with requirements\n\n> If you want to add requirements to a Python file, you can create a requirement_plugin as a submodule of this module. \n> Then, the requirement_plugin will be loaded prior to the Python code.\n```python\nfrom superduper.components.plugin import Plugin\nrequirements_path = 'path/to/my_requirements.txt'\nrequirement_plugin = Plugin(path=requirements_path)\n\nplugin_path = 'path/to/my_module.py'\nmy_plugin = Plugin(path=plugin_path, plugins=[requirement_plugin])\n```\n\nExport plugin\n\n```python\nfrom superduper.components.plugin import Plugin\nplugin_path = 'plugin_path'\nmy_plugin = Plugin(path=plugin_path)\n\nmy_plugin.export(\"exports/plugin\")\n```\n\nLoad plugin\n\n```python\nfrom superduper.components.plugin import Plugin\nmy_plugin = Plugin.read(\"exports/plugin\")\n```\n\nAs a sub-component\n\n```python\nfrom utils import function\nclass Model:\n def predict(self, X):\n return function(X)\n\nfrom superduper.components.plugin import Plugin\nplugin = Plugin(path=\"./utils.py\")\nmodel = Model(identifier=\"test\", plugins=[plugin])\ndb.apply(model)\n\n# Then we can execute db.load(\"model\", \"test\") from any location.\n```\n\n***Explanation***\n\nInitialization and installation\n\n- During plugin initialization, `superduper` loads the component’s Python module or package into `sys.modules`, allowing subsequent use of native import statements for plugin utilization.\n- If the plugin package includes a `requirements.txt`, dependencies are installed prior to loading the Python code.\n- The plugin is installed only once per process; if it detects that the same plugin has already been installed in the current runtime, the installation is skipped.\n\nUsage\n\n- When exported locally, the plugin component saves all necessary dependency files for the plugins into the `superduper` package, allowing for sharing to different locations.\n- When executing `db.apply(plugin)`, the necessary Python dependency environment files for the plugin are saved in the artifact_store. During `db.load(\"plugin\", \"plugin_identifier\")`, these files are downloaded to the local `~/.superduper/plugin/` directory, followed by the initialization and installation of the plugin.\n- As a sub-component, Superduper’s encode and decode logic ensures that the plugin is loaded prior to the parent component to maintain dependency integrity.\n\n\n***See also***\n\n- [superduper.components.plugin](../api/components/plugin.md)", - "# `Template`\n\n- A `Component` containing placeholders flagged with ``\n- A `Template` may be used as the basis for applying multiple `Component` instances\n- `Template` is leveraged by `Application`.\n- Snapshot allows users to know that their validation comparisons are apples-to-apples\n- A `Template` is useful for sharing, migrating and distributing AI components\n- A `Template` may be applied to any Superduper deployment\n\n***Usage pattern***\n\n```python\nfrom superduper import *\n\nm = Listener(\n model=ObjectModel(\n object=lambda x: x + 2,\n identifier='',\n ),\n select=db['=collection'].find(),\n key='',\n)\n\n# optional \"info\" parameter provides details about usage (depends on developer use-case)\nt = Template('my-template', template=m.encode())\n\n# doesn't trigger work/ computations\n# just \"saves\" the template and its artifacts\ndb.apply(t) \n\nlistener = t(key='my_key', collection='my_collection', model_id='my_id')\n\n# this now triggers standard functionality\ndb.apply(listener)\n```\n\n***See also***\n\n- [Application](./application.md)\n", - "# `Metric`\n\n- Wrapper around a function intended to validate model outputs\n- Function returns scalar value\n- Used in `Validation`, `Model` and `Trainer` to measure `Model` performance\n\n***Usage pattern***\n\n```python\nfrom superduper import Metric\n\ndef example_comparison(x, y):\n return sum([xx == yy for xx, yy in zip(x, y)]) / len(x)\n\nm = Metric(\n 'accuracy',\n object=example_comparison,\n)\n\ndb.apply(m)\n```\n\n***See also***\n\n- [Change-data capture](../cluster_mode/change_data_capture)\n- [Validation](./validation.md)", - "# `Application`\n\n- An `Application` ships a pre-configured functionality in a compact and easy to understand way\n\n***Dependencies***\n\n- [`Template`](./template.md)\n\n***Usage pattern***\n\n(Learn how to build a model [here](model))\n\n```python\nfrom superduper import Application\n\ntemplate = db.load('template', 'my_template')\n\napplication = template(my_variable_1='my_value_1',\n my_variable_2='my_value_2')\n\ndb.apply(application.copy())\n```\n", - "# `Dataset`\n\n- An immutable snapshot of a query saved to `db.artifact_store`\n- Used (currently) for validating model performance\n- Snapshot allows users to know that their validation comparisons are apples-to-apples\n\n***Usage pattern***\n\n(Learn how to build a model [here](model))\n\n```python\nfrom superduper import Listener\n\nds = Dataset(\n 'my-valid-data',\n select=db['my_table'].select(), # `.select()` selects whole table\n)\n\ndb.apply(ds)\n```\n\n***Explanation***\n\n- On creation `superduper` queries the data from the `db.databackend` based on the `select` parameter.\n- The data queries like this is saved as a persistent blob in the `db.artifact_store`.\n- When the dataset is reloaded, the `select` query is not executed again, instead the \n data is reloaded from the `db.artifact_store`. This ensures the `Dataset` is always \"the same\".\n- `Dataset` is handy for making sure model validations are comparable.", - "# `Model`\n\n- Wrap a standard AI model with functionality necessary for `superduper`\n- Configure validation and training of a model on database data\n\n***Dependencies***\n\n- [`Datatype`](./datatype.md)\n\n***(Optional dependencies)***\n\n- [`Validation`](./validation.md)\n- [`Trainer`](./trainer.md)\n\n***Usage pattern***\n\n:::note\nNote that `Model` is an abstract base class which cannot be called directly.\nTo use `Model` you should call any of its downstream implementations, \nsuch as [`ObjectModel`](../api/components/model.md#model-1) or models in the [AI-integrations](/docs/category/ai-integrations).\n:::\n\n***Important notes***\n\n`Model` instances can output data not-usually supported by your database.\nThis data will be encoded by default by `pickle`, but more control may be added\nby adding the parameters `datatype=...` or `output_schema=...`.\n\n## Implementations\n\nHere are a few `superduper` native implementations:\n\n**`ObjectModel`**\n\nUse a self-built model (`object`) or function with the system:\n\n```python\nfrom superduper import ObjectModel\n\nm = ObjectModel(\n 'my-model',\n object=lambda x: x + 2,\n)\n\ndb.apply(m)\n```\n\n**`QueryModel`**\n\nUse a `superduper` query to extract data from `db`\n\n```python\nfrom superduper.components.model import QueryModel\n\nquery = ... # build a select query\nm = QueryModel('my-query', select=query, key='')\n\ndb.apply(m)\n```\n\n**`APIModel`**\n\nRequest model outputs hosted behind an API:\n\n```python\nfrom superduper.components.model import APIModel\n\nm = APIModel('my-api', url='http://localhost:6666?token={MY_DEV_TOKEN}&model={model}&text={text}')\n\ndb.apply(m)\n```\n\n**`SequentialModel`**\n\nMake predictions on the basis of a sequence of models:\n\n```python\nfrom superduper.components.model import SequentialModel\n\nm = SequentialModel(\n 'my-sequence',\n models=[\n model1,\n model2,\n model3,\n ]\n)\n\ndb.apply(m)\n```\n\n***See also***\n\n- [Scikit-learn extension](../ai_integrations/sklearn)\n- [Pytorch extension](../ai_integrations/pytorch)\n- [Transformers extension](../ai_integrations/transformers)\n- [Llama.cpp extension](../ai_integrations/llama_cpp)\n- [Vllm extension](../ai_integrations/vllm)\n- [OpenAI extension](../ai_integrations/openai)\n- [Anthropic extension](../ai_integrations/anthropic)\n- [Cohere extension](../ai_integrations/cohere)\n- [Jina extension](../ai_integrations/jina)\n", - "# `Validation`\n\n- Validate a `Model` by attaching a `Validation` component\n\n***Dependencies***\n\n- [`Metric`](metric.md)\n- [`Dataset`](./dataset.md)\n\n***Usage pattern***\n\n```python\nfrom superduper import Validation\n\nvalidation = Validation(\n datasets=[dataset_1, ...],\n metrics=[metric_1, ...],\n key=('X', 'y') # key to use for the comparison\n)\n\nmodel = Model(\n ... # standard arguments\n validation=validation,\n)\n\n# Applying model recognizes `.validation` attribute\n# and validates model on the `.datasets` with `.metrics`\ndb.apply(model)\n```", - "# Trigger\n\n- Listen for update, inserts and deletes\n- Take a specific action contigent on these changes\n- Can be deployed on Superduper Enterprise\n\n***Usage pattern***\n\n```python\nfrom superduper.components.trigger import Trigger\n\nclass MyTrigger(Trigger):\n def if_change(self, ids):\n data = db[self.table].select_ids(ids).execute()\n for r in data:\n if 'urgent' in r['title']:\n db['notifications'].insert_one({\n 'status': 'urgent',\n 'msg': r['msg'],\n }).execute()\n\nmy_trigger = MyTrigger('urgent', on='insert')\n```", - "# `Listener`\n\n- apply a `model` to compute outputs on a query\n- outputs are refreshed every-time new data are added\n- outputs are saved to the `db.databackend`\n\n***dependencies***\n\n- [`Model`](./model.md)\n\n***usage pattern***\n\n(learn how to build a model [here](model))\n\n```python\nfrom superduper import Listener\nm = ... # build a model\nq = ... # build a select query\n\n# either...\nlistener = Listener(\n mode=m,\n select=q,\n key='x',\n)\n\n# or...\nlistener = m.to_listener(select=q, key='x')\n\ndb.apply(listener)\n```\n\n:::info\n*how do i choose the `key` parameter?*\n`key` refers to the field, or fields which \nwill be fed into the `model` as `*args` and `**kwargs`\n\nthe following forms are possible:\n- `key='x'`, \n- `key=('x','y')`, \n- `key={'x': 'x', 'y': 'y'}`, \n- `key=(('x',), {'y': 'y'})`,\n:::\n\n***see also***\n\n- [change-data capture](../cluster_mode/change_data_capture)", - "# `Schema`\n\n- Apply a dictionary of `FieldType` and `DataType` to encode columnar data\n- Mostly relevant to SQL databases, but can also be used with MongoDB\n- `Schema` leverages encoding functionality of contained `DataType` instances\n\n***Dependencies***\n\n- [`DataType`](./datatype.md)\n\n***Usage pattern***\n\n(Learn how to build a `DataType` [here](datatype))\n\n*Vanilla usage*\n\nTable can potentially include\nmore columns which don't need encoding:\n\n```python\nfrom superduper import Schema\n\nschema = Schema(\n 'my-schema',\n fields={\n 'img': dt_1, # A `DataType`\n 'video': dt_2, # Another `DataType`\n }\n)\n\ndb.apply(schema)\n```\n\n*Usage with SQL*\n\nAll columns should be flagged with either `DataType` or `dtype`:\n\n```python\nfrom superduper.backends.ibis import dtype\n\nschema = Schema(\n 'my-schema',\n fields={\n 'img': dt_1, # A `DataType`\n 'video': dt_2, # Another `DataType`\n 'txt', dtype('str'),\n 'numer', dtype('int'),\n }\n)\n\ndb.apply(schema)\n```\n\n*Usage with MongoDB*\n\nIn MongoDB, the non-`DataType` columns/ fields can be omitted:\n\n```python\nschema = Schema(\n 'my-schema',\n fields={\n 'img': dt_1, # A `DataType`\n 'video': dt_2, # Another `DataType`\n }\n)\n\ndb.apply(schema)\n```\n\n*Usage with `Model` descendants (MongoDB only)*\n\nIf used together with `Model`, the model is assumed to emit `tuple` outputs, and these \nneed differential encoding. The `Schema` is applied to the columns of output, \nto get something which can be saved in the `db.databackend`.\n\n```python\nfrom superduper import ObjectModel\n\nm = Model(\n 'my-model',\n object=my_object,\n output_schema=schema\n)\n\ndb.apply(m) # adds model and schema\n```\n\n***See also***\n\n- [Change-data capture](../cluster_mode/change_data_capture)", - "# `DataType`\n\n- Convert objects which should be added to the database or model outputs to encoded `bytes`\n- `DataType` encodings and decodings are fully configurable and can be written as functions\n- Users may choose to encode `bytes` to strings with `base64` encoding\n\n***Usage pattern***\n\nDefault `DataTypes`, called \"serializers\":\n\n```python\nfrom superduper.components.datatype import serializers\n\npickle_serializer = serializers['pickle']\n```\n\nBuild your own `DataType` which saves data directly in the database:\n\n```python\nfrom superduper import DataType\n\ndt = DataType(\n 'my-datatype',\n encoder=function_from_object_to_bytes,\n decoder=function_from_bytes_to_object,\n encodable='encodable',\n)\n\ndb.apply(dt)\n```\n\n:::info\n*How do I choose the `encodable` parameter?*\n\n\n| Value | Usage | \n| --- | --- |\n| `\"encodable\"` | `dt` adds object encoded as `bytes` directly to the `db.databackend` |\n| `\"artifact\"` | `dt` saves object encoded as `bytes` to the `db.artifact_store` and a reference to `db.databackend` |\n| `\"lazy_artifact\"` | as per `\"artifact\"` but `bytes` must be actively loaded when needed |\n| `\"file\"` | `dt` simply saves a reference to a file in `db.artifact_store`; user handles loading |\n:::\n\n***See also***\n\n- [Encoding-difficult data](../advanced_usage/encoding_difficult_data)", - "# `Trainer`\n\n- Train a `Model` by attaching a `Trainer` component\n\n***Usage pattern***\n\n(Learn how to build a `Model` [here](model))\n\n```python\nfrom superduper.ext. import \n\ntrainer = (\n 'my-trainer',\n select=train_query, # data to use for training\n key=('X', 'y'), # the columns/keys to use for training\n **training_params, # can vary greatly from framework to framework\n)\n\nmodel = Model(\n ... # standard arguments\n validation=validation, # validation will be executed after training\n trainer=trainer,\n)\n\n# Applying model recognizes `.trainer` attribute\n# and trains model on the `.trainer.select` attribute\ndb.apply(model)\n```", - "# `Table`\n\n- Use a table in your databackend database, which optionally has a `Schema` attached\n- Table can be a `MongoDB` collection or an SQL table.\n\n***Dependencies***\n\n- [`Schema`](./schema.md)\n\n***Usage pattern***\n\n(Learn how to build a `Schema` [here](schema))\n\n```python\nfrom superduper.backends.ibis import Table\n\ntable = Table(\n 'my-table',\n schema=my_schema\n)\n\ndb.apply(table)\n```\n\nIn MongoDB, the attached `schema` will be used as the default `Schema` for that `Table` (collection).", - "# Apply API\n\n:::info\nIn this section we re-use the datalayer variable `db` without further explanation.\nRead more about how to build it [here](../core_api/connect) and what it is [here](../fundamentals/datalayer_overview).\n:::\n\nAI functionality in superduper revolves around creating AI models, \nand configuring them to interact with data via the datalayer.\n\nThere are many decisions to be made and configured; for this superduper\nprovides the `Component` abstraction.\n\nThe typical process is:\n\n### 1. Create a component\n\nBuild your components, potentially including other subcomponents.\n\n```python\nfrom superduper import \n\ncomponent = (\n 'identifier',\n **kwargs # can include other components\n)\n```\n\n### 2. Apply the component to the datalayer\n\n\"Applying\" the component the `db` datalayer, also\napplies all sub-components. So only 1 call is needed.\n\n```python\ndb.apply(component)\n```\n\n### 3. Reload the component (if necessary)\n\nThe `.apply` command saves everything necessary to reload the component\nin the superduper system.\n\n```python\nreloaded = db.load('type_id', 'identifier') # `type_id`\n```\n\n### 4. Export the component (to share/ migrate)\n\nThe `.export` command saves the entirety of the component's parameters, \ninline code and artifacts in a directory:\n\n```python\ncomponent.export('my_component')\n```\n\nThe directory structure looks like this.\nIt contains the meta-data of the component as\nwell as a \"mini-artifact-store\". Together\nthese items make the export completely portable.\n\n```\nmy_component\n|_component.json // meta-data and imports of component\n|_blobs // directory of blobs used in the component\n| |_234374364783643764\n| |_574759874238947320\n|_files // directory of files used in the component\n |_182372983721897389\n |_982378978978978798\n```\n\nYou can read about the serialization mechanism [here](../production/superduper_protocol.md).\n\n## Read more\n\n```mdx-code-block\nimport DocCardList from '@theme/DocCardList';\n\n\n```\n", - "# `DataInit`\n\n- Used to automatically insert initialization data during application build.\n\n***Usage pattern***\n\n```python\nfrom superduper.components.dataset import DataInit\ndata = [{\"x\": i, \"y\": [1, 2, 3]} for i in range(10)]\ndata_init = DataInit(data=data, table=\"documents\", identifier=\"test_data_init\")\n\ndb.apply(data_init)\n```\n\n***Explanation***\n\n- When db.apply(data_init) is executed, DataInit inserts data into the specified table.", - "# `Checkpoint`\n\n- Save intermediate results of training via `superduper`\n- Load a different point of the training process by specifying `Checkpoint` explicitly\n- Particularly useful with deep-learning models\n\n***Usage pattern***\n\n```python\nfrom superduper import Model\nfrom superduper.components.training import Checkpoint\n\nclass MyModel(Model):\n checkpoints: t.List[Checkpoint]\n best_checkpoint: t.Optional[int] = None\n\n def __post_init__(self, db, artifacts):\n super().__post_init__(db, artifacts)\n\n if self.best_checkpoint is not None:\n self.load_weights(self.checkpoints[self.best_checkpoint])\n\n def load_weights(self):\n ... # custom load logic\n\nmy_model = MyModel('my-model')\n\nmy_model.checkpoints.append('path/to/model/weights-0.pt')\nmy_model.checkpoints.append('path/to/model/weights-1.pt')\nmy_model.best_checkpoint = 1\n\n# saves model as well as checkpoints to db.artifact_store\ndb.apply(my_model) \n\n# loads `self.checkpoints[1]`\nm = db.load('model', 'my-model')\n```", - "# `Cron Job`\n\n- Iterate computations, queries and actions on a crontab\n- Can be deployed on Superduper Enterprise\n\n***Usage pattern***\n\nCron-job can take any actions relating to `db`\nwhich is loaded as an attribute of the `Component`.\n\n```python\nimport datetime\nfrom superduper.components.cron_job import CronJob\n\nclass MyCronJob(CronJob):\n table: str\n\n # overwriting this function defines actions to be \n # taken on a schedule\n def run(self):\n results = list(self.db[self.table].select())\n\n date = str(datetime.now())\n\n with open(f'{date}.bak', 'wb') as f:\n json.dump(results)\n \n # for example, backing up a collection every day\n os.system(f'aws s3 cp {date}.bak s3://my-bucket/{date}.bak')\n\ncron_job = MyCronJob(table='documents', schedule='0 0 * * * *')\n\ndb.apply(cron_job)\n```", - "# `VectorIndex`\n\n- Wrap a `Listener` so that outputs are searchable\n- Can optionally take a second `Listener` for multimodal search\n- Applies to `Listener` instances containing `Model` instances which output vectors, arrays or tensors\n- Maybe leveraged in superduper queries with the `.like` operator\n\n***Dependencies***\n\n- [`Listener`](./listener.md)\n\n***Usage pattern***\n\n```python\nfrom superduper import VectorIndex\n\nvi = VectorIndex(\n 'my-index',\n indexing_listener=listener_1 # defined earlier calculates searchable vectors\n)\n\n# or directly from a model\nvi = model_1.to_vector_index(select=q, key='x')\n\n# or may use multiple listeners\nvi = VectorIndex(\n 'my-index',\n indexing_listener=listener_1\n compatible_listener=listener_2 # this listener can have `listener_2.active = False`\n)\n\ndb.apply(vi)\n```\n\n***See also***\n\n- [vector-search queries](../query_api/vector_search)\n- [vector-search service](../cluster_mode/vector_comparison_service)", - "---\nsidebar_position: 18\n---\n\n# Applying `Model` instances to `db`\n\nThere are 4 key AI `Model` sub classes, see [here](../apply_api/model) for detailed usage:\n\n| Path | Description |\n| --- | ---\n| `superduper.components.model.ObjectModel` | Wraps a Python object to compute outputs |\n| `superduper.components.model.APIModel` | Wraps a model hosted behind an API to compute outputs |\n| `superduper.components.model.QueryModel` | Maps a Database select query with a free variable over inputs |\n| `superduper.components.model.SequentialModel` | Computes outputs sequentially for a sequence of `Model` instances |\n\nAs well as these key sub-classes, we have classes in the `superduper.ext.*` subpackages:\nSee [here](../ai_integrations/) for more information.\n\nWhenever one of these `Model` descendants is instantiated, and `db.apply(model)` is called, \nseveral things can (do) happen:\n\n1. The `Model`'s metadata is saved in the `db.metadata_store`.\n2. It's associated data (e.g.) model is saved in the `db.artifact_store`.\n3. (Optional) if the `Model` has a `Trainer` attached, then the `Model` is trained/ fit on the specified data.\n4. (Optional) if the `Model` has an `Evaluation` method attached, then the `Model` is evaluated on the specified data.\n\n", - "# LLMs\n\nSuperduper allows users to work with LLM services and models\n\nHere is a table of LLMs supported in Superduper:\n\n| Class | Description |\n| --- | --- |\n| `superduper.ext.transformers.LLM` | Useful for trying and fine-tuning a range of open-source LLMs |\n| `superduper.ext.vllm.vLLM` | Useful for fast self-hosting of LLM models with CUDA |\n| `superduper.ext.llamacpp.LlamaCpp` | Useful for fast self-hosting of LLM models without requiring CUDA |\n| `superduper.ext.openai.OpenAIChatCompletion` | Useful for getting started quickly |\n| `superduper.ext.anthropic.AnthropicCompletion` | Useful alternative for getting started quickly |\n\nYou can find the snippets [here](../reusable_snippets/build_llm)\n\n:::tip\nConnect your LLM to data and vector-search using `SequentialModel` or `GraphModel`.\n:::\n", - "# Training models directly on your datastore\n\n`Model` instances may be trained if a `trainer` is set on the `Model` when `db.apply` is called.\nWhen models are trained, if `CFG.cluster.compute` has been configured with a `ray` scheduler, then `superduper` deploys [a job on the connected `ray` cluster](../production_features/non_blocking_ray_jobs).\n\n## Basic pattern\n\n```python\nfrom superduper.ext. import Trainer\nfrom superduper.ext. import \n\ndb.apply(\n (\n *args, \n trainer=Trainer(**trainer_kwargs),\n **kwargs,\n )\n)\n```\n\n## Fitting/ training models by framework\n\nNot all `Model` types are trainable. We support training for the following frameworks:\n\n| Framework | Training Link |\n| --- | --- |\n| Scikit-Learn | [link](../ai_integrations/sklearn#training) |\n| PyTorch | [link](../ai_integrations/pytorch#training) |\n| Transformers | [link](../ai_integrations/transformers#training) |\n\n", - "# Models\n\nA key `Component` type in Superduper is `Model` and its descendants.\nThe intended usage is that `Model` wraps classical AI and machine learning models, \nAI APIs, as well as important processing steps involved in building such models, \nsuch as feature-computation.\n\nSee [here](../apply_api/model) for basic usage. This section gives detailed\nusage information as well as information about building your own model types.\n\n## Read more\n\n```mdx-code-block\nimport DocCardList from '@theme/DocCardList';\n\n\n```\n", - "# Configuring models to ingest features from other models\n\nThere are two ways to connect models in Superduper:\n\n- via interdependent `Listeners`\n- via the `Graph` component\n\nIn both cases, the first step is define the computation graph using \na simple formalism.\n\n## Building a computation graph\n\nHere is an example of building a graph with 3 members:\n\n```python\nfrom superduper.components.graph import document_node\nfrom superduper import ObjectModel\n\nm1 = ObjectModel('m1', object=lambda x: x + 1)\nm2 = ObjectModel('m2', object=lambda x: x + 2)\nm3 = ObjectModel('m3', object=lambda x, y: x * y)\n\ninput = document_node('x1', 'x2')\n\n# `outputs` specifies in which field the outputs will be cached/ saved\nout1 = m1(x=input['x1'], outputs='o1')\nout2 = m2(x=input['x2'], outputs='o2')\nout3 = m3(x=out1, y=out2, outputs='o3')\n```\n\nThe variable `out3` now contains the computation graph in `out3.parent_graph`.\n\nIn order to use this graph, developers may choose between creating a `Model`\ninstance which passes inputs recursively through the graph:\n\n```python\n>>> graph_model = out3.to_graph('my_graph_model')\n>>> graph_model.predict({'x1': 1, 'x2': 2})\n6\n```\n\nand creating a `Stack` of `Listener` instances which can be applied with `db.apply`\nwhere intermediate outputs are cached in `db.databackend`.\nThe order in which these listeners are applied respects \nthe graph topology.\n\n```python\nq = db['my_documents'].find()\nstack = out3.to_listeners(q, 'my_stack')\ndb.apply(stack)\n```\n", - "# Creating embeddings\n\nSuperduper supports a number of embedding models which may be used to create\nvectors ready for downstream tasks, including vector-search\n\nHere is an overview of pre-packaged embedding models:\n\n| Class | \n| --- | \n| `superduper.ext.sentence_transformers.SentenceTransformer` |\n| `superduper.ext.openai.OpenAIEmbeddings` | \n| `superduper.ext.cohere.CohereEmbeddings` |", - "# Key methods of `Model`\n\nAll usage in `superduper` proceeds by changing or setting the attributes of a `Component`\nand then calling `db.apply`. \n\nHowever it may be useful to know that the following methods specific to `Model` play a key role.\nSee [here](../apply_api/overview#key-methods) for an overview of key-methods specific to `Component`.\n\n| Method | Description | Optional |\n| --- | --- | --- |\n| `Model.predict` | Predict on a single data-point | `FALSE` | \n| `Model.predict_batches` | Predict on batches of data-points | `FALSE` |\n| `Model.predict_in_db` | Predict and save predictions in `db` | `FALSE` |\n| `Model.predict_in_db_job` | `predict_in_db` as compute job | `FALSE` |\n| `Model.validate` | Validate on datasets with metrics | `FALSE` |\n| `Model.validate_in_db` | Validate on datasets with metrics and save in `db` | `FALSE` |\n| `Model.validate_in_db_job` | `validate_in_db` as job | `FALSE` |\n| `Model.fit` | Fit on datasets | `TRUE` |\n| `Model.fit_in_db` | Fit on data in `db` | `TRUE` |\n| `Model.fit_in_db_job` | `.fit_in_db` as job | `TRUE` |\n", - "# Computing model outputs with listeners\n\n## Usage\n\n```python\ndb.apply(\n Listener(\n model=my_model,\n key='my-key',\n select=,\n predict_kwargs={**},\n )\n)\n```\n\n## Outcome\n\nIf a `Listener` has been created, whenever new data is added to `db`, \nthe `Model` instance is loaded and outputs as computed with `Model.predict` are evaluated on the inserted data.\n\n:::info\nIf [change-data-capture (CDC)](../production/change_data_capture.md) has been configured, \ndata may even be inserted from third-party clients such as `pymongo`, and is nonetheless still processed\nby configured `Listeners` via the CDC service.\n:::", - "# Evaluating models\n\nSee [here](../apply_api/validation.md).", - "# Bring your own models\n\nThere are two ways to bring your own computations\nand models to Superduper.\n\n1. Wrap your own Python functions\n2. Write your own `Model` sub-classes\n\n## Wrap your own Python functions\n\nThis serializes a Python object or class:\n\n```python\nfrom superduper import model\n\n@model\ndef my_model(x, y):\n return x + y\n```\n\nAdditional arguments may be provided to the decorator from `superduper.components.model.ObjectModel`:\n\n```python\n@model(num_workers=4)\ndef my_model(x, y):\n return x + y\n```\n\nSimilarly the following snippet saves the source code of a python object instead of serializing the object:\n\n```python\nfrom superduper import code\n\n@code\ndef my_other_model(x, y):\n return x * y\n```\n\nThese decorators may also be applied to `callable` classes.\nIf your class has important state which should be serialized with the class, \nthen use `model` otherwise you can use `codemodel`:\n\n```python\nfrom superduper import ObjectModel, model\n\n@model\nclass MyClass:\n def __call__(self, x):\n return x + 2\n\nm = MyClass()\n\nassert isinstance(m, ObjectModel)\nassert m.predict(2) == 4\n```\n\nAs before, additional arguments can be supplied to the decorator:\n\n```python\nfrom superduper import vector, DataType, model\n\n@model(datatype=vector(shape=(32, )))\nclass MyClass:\n def __call__(self, x):\n return [x + 2] * 32\n\nm = MyClass()\n\nassert isinstance(m.datatype, DataType)\n```\n\n## Import classes and functions directly\n\nThis may be more intuitive to some developers, \nand allows functionality to be invoked \"directly\" \nfrom third-party packages:\n\n```python\nfrom superduper.ext.auto.sklearn.svm import SVC\n```\n\n## Create your own `Model` subclasses\n\nDevelopers may create their own `Model` sub-classes, and deploy these directly to `superduper`.\nThe key methods the developers need to create are:\n\n- `predict`\n- Optionally `predict_batches`, to speed up batching\n- Optionally `fit`\n\n### Minimal example with `prediction`\n\nHere is a simple sub-class of `Model`:\n\n```python\nfrom superduper.components.model import Model\nimport typing as t\n\nclass CustomModel(Model):\n signature: t.ClassVar[str] = '**kwargs'\n my_argument: int = 1\n\n def predict(self, x, y):\n return x + y + self.my_argument\n```\n\nThe addition of `signature = **kwargs` controls how the individual datapoints in the dataset \nare emitted, for consumption by the internal workings of the model\n\n### Including datablobs which can't be converted to JSON\n\nIf your model contains large data-artifacts or non-JSON-able content, then \nthese items should be labelled with [a `DataType`](../apply_api/datatype).\n\nOn saving, this will allow Superduper to encode their values and save the result\nin `db.artifact_store`.\n\nHere is an example which includes a `numpy.array`:\n\n```python\nimport numpy as np\nfrom superduper.ext.numpy import array\n\n\nclass AnotherModel(Model):\n _artifacts: t.ClassVar[t.Any] = [\n ('my_array', array)\n ]\n signature: t.ClassVar[str] = '**kwargs'\n my_argument: int = 1\n my_array: np.ndarray\n\n def predict(self, x, y):\n return x + y + self.my_argument + self.my_array\n\nmy_array = numpy.random.randn(100000, 20)\nmy_array_type = array('my_array', shape=my_array.shape, encodable='lazy_artifact')\ndb.apply(my_array_type)\n\nm = AnotherModel(\n my_argument=2,\n my_array=my_array,\n artifacts={'my_array': my_array_type},\n)\n```\n\nWhen `db.apply` is called, `m.my_array` will be converted to `bytes` with `numpy` functionality\nand a reference to these `bytes` will be saved in the `db.metadata`.\nIn principle any `DataType` can be used to encode such an object.\n", - "# Deleting data\n\n:::note\nThis functionality is only supported for MongoDB `db.databackend` implementations.\nFor SQL databases, users should drop unwanted tables or use native clients\nto delete data.\n:::\n\nDelete queries follow exactly the same [pattern as insert queries](./basic_insertion). For example:\n\n```python\ndeleted_ids, jobs = db.execute(my_collection.delete_many({}))\n```", - "# Setting up vector-search\n\nSetting up vector-search involves \"applying\" a `VectorIndex` component to the datalayer `db`.\nRead [here](../apply_api/vector_index.md) for information about how to do this.", - "# Execute API\n\nSuperduper implements 2 main classes of `db.databackend`:\n\n- [MongoDB](../data_integrations/mongodb)\n- [SQL backends](../data_integrations/sql)\n\nCorrespondingly, Superduper currently has 2 flavours of query API:\n\n- [`pymongo`](https://pymongo.readthedocs.io/en/stable/)\n- [`ibis`](https://ibis-project.org/)\n\n## Base\n\nA few commands are shared in common by all supported databackends:\n\n- `db[\"table_name\"].insert(data)`\n- `db[\"table_name\"].select()`\n\nFor more specific commands, one should use one of the two following APIs.\n\n## PyMongo\n\n`pymongo` is the official MongoDB client for Python. It supports \ncompositional queries, leveraging the BSON format for encoding \nand retrieving data.\n\n## Ibis\n\n`ibis` is a Python library with a uniform compositional approach to building\nSQL queries.", - "# Vector-search\n\nSuperduper aims to provide first-class support for \nvector-search, including embedding computation in preparation\nand run-time, as well as executing the fast vector-comparison \nand returning results in a way compatible with standard database\nqueries.\n\n## Read more\n\n```mdx-code-block\nimport DocCardList from '@theme/DocCardList';\n\n\n```\n", - "# Selecting data\n\nSelecting data involves building a compositional query \nstaring with a table of collection, and repeatingly calling\nmethods to build a complex query:\n\n```python\nq = db['table_name'].method_1(*args_1, **kwargs_1).method_2(*args_2, **kwargs_2)....\n```\n\nAs usual, the query is executed with:\n\n```\nq.execute()\n```\n\n## Read more\n\n```mdx-code-block\nimport DocCardList from '@theme/DocCardList';\n\n\n```", - "# Updating data\n\n:::note\nThis functionality is only supported for MongoDB `db.databackend` implementations\n:::\n\nUpdate queries follow exactly the same [pattern as insert queries](./basic_insertion). For example:\n\n```python\nupdated_ids, jobs = db.execute(my_collection.update_many({}, {'$set': {'brand': 'Adidas'}}))\n```", - "# Vector search queries\n\nVector search queries are built with the `.like` operator.\nThis allows developers to combine standard database with vector-search queries.\nThe philosophy is that developers do not need to convert their inputs \ninto vector's themselves. Rather, this is taken care by the specified \n[`VectorIndex` component](../apply_api/vector_index).\n\nThe basic schematic for vector-search queries is:\n\n```python\ntable_or_collection\n .like(Document(), vector_index='') # the operand is vectorized using registered models\n .filter_results(*args, **kwargs) # the results of vector-search are filtered\n```\n\n***or...***\n\n```python\ntable_or_collection\n .filter_results(*args, **kwargs) # the results of vector-search are filtered\n .like(Document(),\n vector_index='') # the operand is vectorized using registered models\n```\n\n## MongoDB\n\n```python\nfrom superduper.ext.pillow import pil_image\nfrom superduper import Document\n\nmy_image = PIL.Image.open('test/material/data/test_image.png')\n\nq = db['my_collection'].find({'brand': 'Nike'}).like(Document({'img': pil_image(my_image)}), \n vector_index='')\n\nresults = q.execute()\n```\n\n## SQL\n\n```python\nt = db['my_table']\nt.filter(t.brand == 'Nike').like(Document({'img': pil_image(my_image)}))\n\nresults = db.execute(q)\n```\n\n", - "# Basic insertion\n\nSuperduper supports inserting data wrapped as dictionaries in Python.\nThese dictionaries may contain basic JSON-compatible data, but also \nother data-types to be handled with `DataType` components. All data inserts are wrapped with the `Document` wrapper:\n\n```python\ndata = ... # an iterable of dictionaries\n```\n\nFor example, first get some [sample data](../reusable_snippets/get_useful_sample_data.md):\n\n```bash\n!curl -O https://superduper-public-demo.s3.amazonaws.com/text.json\n```\n\nThen load the data:\n\n```python\nwith open('./text.json') as f:\n data = json.load(f)\n```\n\n## Usage pattern\n\n```python\nids, jobs = db['collection-name'].insert(data).execute()\n```\n\n## MongoDB\n\n```python\nids, jobs = db['collection-name'].insert_many(data).execute()\n```\n\nA `Schema` which differs from the standard `Schema` used by `\"collection-name\"` may \nbe used with:\n\n```python\nids, jobs = db['collection-name'].insert_many(data).execute(schema=schema_component)\n```\n\nRead about this here `Schema` [here](../apply_api/schema.md).\n\n## SQL\n\n```python\nids, jobs = db['table-name'].insert(data)\n```\nIf no `Schema` has been set-up for `table-name\"` a `Schema` is auto-inferred.\nData not handled by the `db.databackend` is encoded by default with `pickle`.\n\n## Monitoring jobs\n\nThe second output of this command gives a reference to the job computations \nwhich are triggered by the `Component` instances already applied with `db.apply(...)`.\n\nIf users have configured a `ray` cluster, the jobs may be monitored at the \nfollowing uri:\n\n```python\nfrom superduper import CFG\n\nprint(CFG.cluster.compute.uri)\n```", - "# MongoDB select queries\n\nSuperduper supports the `pymongo` query API to build select queries.\nThere is one slight difference however, since queries built with `pymongo`'s formalism\nare executed lazily:\n\nWhereas in `pymongo` one might write:\n\n```python\nclient.my_db.my_collection.find_one()\n```\n\nwith `superduper` one would write:\n\n```python\nresult = db['my_collection'].find_one().execute()\n```\n", - "# Data inserts\n\nSuperduper allows developers to insert data from a variety of sources, \nencoding and decoding objects, such as images and videos, not usually handled \nexplicitly by the `db.databackend`.\n\n## Read more\n\n```mdx-code-block\nimport DocCardList from '@theme/DocCardList';\n\n\n```", - "---\nsidebar_position: 15\n---\n\n# Working with external data sources\n\nSuperduper supports data added from external data-sources.\nWhen doing this, Superduper supports:\n\n- web URLs\n- URIs of objects in `s3` buckets\n\nThe trick is to pass the `uri` parameter to an encoder, instead of the raw-data.\nHere is an example where we add a `.pdf` file directly from a location \non the public internet.\n\n```python\nimport io\nfrom PyPDF2 import PdfReader\n\ndef load_pdf(bytes):\n text = []\n for page in PdfReader(io.BytesIO(bytes)).pages:\n text.append(page.extract_text())\n return '\\n----NEW-PAGE----\\n'.join(text)\n\n# no `encoder=...` parameter required since text is not converted to `.pdf` format\npdf_enc = Encoder('my-pdf-encoder', decoder=load_pdf)\n\nPDF_URI = (\n 'https://papers.nips.cc/paper_files/paper/2012/file/'\n 'c399862d3b9d6b76c8436e924a68c45b-Paper.pdf'\n)\n\n# This command inserts a record which refers to this URI\n# and also downloads the content from the URI and saves\n# it in the record\ndb['pdf-files'].insert_one(Document({'txt': pdf_enc(uri=PDF_URI)})).execute()\n```\n\nNow when the data is loaded from the database, it is loaded as text:\n\n```python\n>>> r = collection.find_one().execute()\n>>> print(r['txt'])\n```", - "# Using a database's native vector search\n\nDatabases increasingly include their own vector-comparison and search operations \n(comparing one vector with others). In order to use this, include \nthis configuration in your configuration setup:\n\n```yaml\ncluster:\n vector_search:\n type: native\n```\n\n***or***\n\n```bash\nexport SUPERDUPER_CLUSTER_VECTOR_SEARCH_TYPE=native\n```\n\nIf `superduper` detects this configuration, it uses the inbuilt mechanism \nof your `db.databackend` to perform the vector-comparison.\n\nCurrently Superduper supports the native implementation of these databases:\n\n- MongoDB Atlas\n\nMore integrations are on the way.", - "# (Optional) Setting up tables and encodings\n\nSuperduper has flexible support for data-types. In both MongoDB and SQL databases,\none can uses `superduper.DataType` to define one's own data-types.\n\nIf no-datatypes are provided, `superduper` [uses fallbacks](./auto_data_types.md) to encode and decode data.\nTo gain more-control, developers may use the `DataType` and `Schema` components.\n\n## `DataType` abstraction\n\nThe `DataType` class requires two functions which allow the user to go to-and-from `bytes`.\nHere is an `DataType` which encodes `numpy.ndarray` instances to `bytes`:\n\n```python\nimport numpy\nfrom superduper import DataType\n\nmy_array = DataType(\n 'my-array',\n encoder=lambda x: memoryview(x).tobytes(),\n decode=lambda x: numpy.frombuffer(x),\n)\n```\n\nHere's a more interesting `DataType` which encoders audio from `numpy.array` format to `.wav` file `bytes`:\n\n```python\nimport librosa\nimport io\nimport soundfile\n\ndef decoder(x):\n buffer = io.BytesIO(x)\n return librosa.load(buffer)\n\ndef encoder(x):\n buffer = io.BytesIO()\n soundfile.write(buffer)\n return buffer.getvalue()\n\naudio = DataType('audio', encoder=encoder, decoder=decoder)\n```\n\nIt's completely open to the user how exactly the `encoder` and `decoder` arguments are set.\n\nYou may include these `DataType` instances in models, data-inserts and more. You can also directly \nregister the `DataType` instances in the system, using:\n\n```python\ndb.apply(my_array)\ndb.apply(audio)\n```\n\nTo reload (for instance in another session) do:\n\n```python\nmy_array_reloaded = db.load('datatype', 'my_array')\naudio_reloaded = db.load('datatype', 'audio')\n```\n\n:::tip\nMany of the `superduper` extensions come with their own pre-built `DataType` instances.\nFor example:\n\n- `superduper.ext.pillow.pil_image`\n- `superduper.ext.numpy.array`\n- `superduper.ext.torch.tensor`\n:::\n\nRead more about `DataType` [here](../apply_api/datatype).\n\n## Create a `Schema`\n\nThe `Schema` component wraps several columns of standard data or `DataType` encoded data; it \nmay be used with MongoDB and SQL databases, but is only necessary for SQL.\n\nHere is a `Schema` with three columns, one of the columns is a standard data-type \"str\".\nThe other 2 are given by the `DataType` instances defined above.\n\n```python\nfrom superduper import Schema\nfrom superduper.ext.pillow import pil_image\n\nmy_schema = Schema(\n 'my-schema',\n fields={'txt': 'str', 'audio': audio, 'img': pil_image}\n)\n\n# save this for later use\ndb.apply(my_schema)\n```\n\n### Create a table with a `Schema`\n\nIf a `Table` is created with a `Schema`, all data inserted to this \ntable will use that `Schema`.\n\n```python\nfrom superduper import Table\n\ndb.apply(Table('my-table', schema=my_schema))\n```\n\nIn MongoDB this `Table` refers to a MongoDB collection, otherwise\nto an SQL table.\n\nThen when data is inserted, it will use this `my_schema` object:\n\n```python\ndb['my-table'].insert[_many](data).execute()\n```", - "# Predictions\n\nModel predictions may be deployed by calling `Model.predict_batches` or `Model.predict` directly.\n\n```python\nm = db.load('model', 'my-model')\n\n# *args, **kwargs depend on model implementation\nresults = m.predict(*args, **kwargs)\n```\n\nAn alternative is to construct a prediction \"query\" as follows:\n\n```python\n# *args, **kwargs depend on model implementation\ndb['my-model'].predict(*args, **kwargs).execute()\n```\n\nThe results should be the same for both versions.\n", - "# Automatic data-types\n\nA major challenge in uniting classical databases with AI, \nis that the types of data used in AI are often not supported by your database.\n\nTo solve this problem, `superduper` has the abstractions [`DataType`](../apply_api/datatype.md) and [`Schema`](../apply_api/schema.md).\n\nTo save developers time, by default, `superduper` recognizes the type of data and constructs a `Schema` based on this inference.\nTo learn more about setting these up manually read [the following page](./data_encodings_and_schemas.md).\n\n## Basic usage\n\nTo learn about this feature, try these lines of code, based on sample image data we've prepared.\n\n```bash\ncurl -O https://superduper-public-demo.s3.amazonaws.com/images.zip && unzip images.zip\n```\n\n```python\nimport os\nimport PIL.Image\n\nfrom superduper import superduper\n\ndb = superduper('mongomock://test')\n\nimages = [PIL.Image.open(f'images/{x}') for x in os.listdir('images') if x.endswith('.png')]\n\n# inserts the images into `db` recognizing datatypes automatically\ndb['images'].insert_many([{'img': img} for img in images]).execute()\n```\n\nNow if you inspect which components are available, you will see that 2 components have been added to \nthe system:\n\n```python\ndb.show()\n```\n\n
\n Outputs\n
\n        ```\n        [{'identifier': 'pil_image', 'type_id': 'datatype'},\n         {'identifier': 'AUTO:img=pil_image', 'type_id': 'schema'}]\n        ```\n    
\n
\n\nTo verify that the data types were correctly inferred, we can retrieve a single record.\nThe record is a `Document` which wraps a dictionary with important information:\n\n```python\nr = db['images'].find_one().execute()\nr\n```\n\n
\n Outputs\n
\n        ```\n        Document({'img': , '_fold': 'train', '_schema': 'AUTO:img=pil_image', '_id': ObjectId('6658610912e50a99219ba587')})\n        ```\n    
\n
\n\n\nBy calling the `.unpack()` method, the original data is decoded and unwrapped from the `Document`.\nThe result in this case is a Python `pillow` image, which may be used as direct input \nto functions from, for instance, `torchvision` or `transformers`.\n\n```python\nr.unpack()['img']\n```\n\n
\n Outputs\n
\n ![](/listening/31_0.png)\n
\n
", - "---\nsidebar_position: 16\n---\n\n# Working with and inserting large pieces of data\n\nSome applications require large data-blobs and objects, which are either larger than the objects which are supported by the underlying database, or which will degrade performance of the database if stored directly. For example:\n\n- large images\n- large audio\n- videos\n\nIn order to handle such data, Superduper provides a few options when \ncreating a `DataType` via the `encodable` parameter.\n\n## Artifact store reference with `encodable='artifact'`\n\nWhen creating a `DataType` with `encodable='artifact'`, \nthe data encoded by the `DataType` is saved to the `db.artifact_store` \nand a reference in saved in the `db.databackend`\n\nFor example, if you try the following snippet:\n\n```python\nimport pickle\nimport uuid\nfrom superduper import DataType, Document, superduper, Table, Schema\n\ndb = superduper('mongomock://test', artifact_store='filesystem://./artifacts')\n\ndt = DataType(\n 'my-artifact',\n encoder=lambda x, info: pickle.dumps(x),\n decoder=lambda x, info: pickle.loads(x),\n encodable='artifact',\n)\n\nschema = Schema(identifier='schema', fields={'x': dt})\ntable = Table('my_collection', schema=schema)\n\ndb.apply(table)\n\nmy_id = str(uuid.uuid4())\n\ndb['my_collection'].insert_one(Document({'id': my_id, 'x': 'This is a test'})).execute()\n```\n\nIf you now reload the data with this query:\n\n```python\n>>> r = db.execute(db['my_collection'].find_one({'id': my_id}))\n>>> r\nDocument({'id': 'a9a01284-f391-4aaa-9391-318fc38303bb', 'x': 'This is a test', '_fold': 'train', '_id': ObjectId('669fae8ccdaeae826dec4784')})\n```\n\nYou will see that `r['x']` is exactly `'This is a test'`, however, \nwith a native MongoDB query, you will find the data for `'x'` missing:\n\n```python\n>>> db.databackend.conn.test.my_collection.find_one() \n{'id': 'a9a01284-f391-4aaa-9391-318fc38303bb',\n 'x': '&:blob:866cf8526595d3620d6045172fb16d1efefac4b1',\n '_fold': 'train',\n '_schema': 'schema',\n '_builds': {},\n '_files': {},\n '_blobs': {},\n '_id': ObjectId('669fae8ccdaeae826dec4784')}\n```\n\nThis is because the data is stored in the filesystem/ artifact store `./artifacts`.\nYou may verify that with this command:\n\n```bash\niconv -f ISO-8859-1 -t UTF-8 artifacts/866cf8526595d3620d6045172fb16d1efefac4b1\n```\n\nThe Superduper query reloads the data and passes it to the query result, \nwithout any user intervention.\n\n## Just-in-time loading with `encodable='lazy_artifact'`:\n\nIf you specify `encodable='lazy_artifact'`, then the data \nis only loaded when a user calls the `.unpack()` method.\nThis can be useful if the datapoints are very large, \nand should only be loaded when absolutely necessary.\n\nTry replacing the creation of `dt` with this command:\n\n```python\ndt = DataType(\n 'my-artifact',\n encoder=lambda x, info: pickle.dumps(x),\n decoder=lambda x, info: pickle.loads(x),\n encodable='lazy_artifact',\n)\n```\n\nand then execute the same lines as before.\nYou will find that:\n\n```python\n>>> r = db.execute(my_collection.find_one({'id': my_id}))\n>>> r\nDocument({'id': 'b2a248c7-e023-4cba-9ac9-fdc92fa77ae3', 'x': LazyArtifact(identifier='', uuid='c0db12ad-2684-4e39-a2ba-2748bd20b193', datatype=DataType(identifier='my-artifact', uuid='6d72b346-b5ec-4d8b-8cba-cddec86937a3', upstream=None, plugins=None, encoder= at 0x125e33760>, decoder= at 0x125c4e320>, info=None, shape=None, directory=None, encodable='lazy_artifact', bytes_encoding='Bytes', intermediate_type='bytes', media_type=None), uri=None, x=), '_fold': 'train', '_id': ObjectId('669faf9dcdaeae826dec4789')})\n>>> r['x'].x\n\n```\n\nHowever, after calling `.unpack(db)`:\n\n```python\n>>> r = r.unpack()\n>>> r['x']\n'This is a test'\n```\n\nThis allows `superduper` to build efficient data-loaders and model loading mechanisms.\nFor example, when saving model data to the artifact-store, the default `encodable` is `'lazy_artifact'`.\n\n## Saving files and directories to the artifact store\n\nThere is an additional mechanism for working with large files. This works \nbetter in certain contexts, such as flexibly saving the results of model training.\nThe following lines copy the file to the `db.artifact_store`.\nWhen data is loaded, the data is copied back over from the artifact-store to \nthe local file-system:\n\n```bash\ncp -r test test_copy\n```\n\n```python\nschema = Schema(identifier='schema', fields={'x': dt})\ntable = Table('my_collection', schema=schema)\n\ndb.apply(table)\nmy_id = str(uuid.uuid4())\ndb.execute(db['my_collection'].insert_one(Document({'id': my_id, 'x': './test_copy'})))\n```\n\nWhen reloading data, you will see that only a reference to the data in the artifact-store\nis loaded:\n\n```python\n>>> db.execute(db['my_collection'].find_one({'id': my_id})).unpack()\n{'id': '93eaae04-a48b-4632-94cf-123cdb2c9517',\n 'x': './artifacts/d537309c8e5be28f91b90b97bbb229984935ba4a/test_copy',\n '_fold': 'train',\n '_id': ObjectId('669fb091cdaeae826dec4797')}\n\n```\n\nDownstream `Model` instances may then explicitly handle the local file from the file \nreference.", - "# Sidecar vector-comparison integration\n\nFor databases which don't have their own vector-search implementation, Superduper offers \n2 integrations:\n\n- In memory vector-search\n- Lance vector-search\n\nTo configure these, add one of the following options to your configuration:\n\n```yaml\ncluster:\n vector_search:\n type: in_memory|lance\n```\n\n***or***\n\n```bash\nexport SUPERDUPER_CLUSTER_VECTOR_SEARCH_TYPE='in_memory|lance'\n```\n\nIn this case, whenever a developer executes a vector-search query including `.like`, \nexecution of the similarity and sorting computations of vectors is outsourced to \na sidecar implementation which is managed by `superduper`.", - "# SQL select queries\n\nIn order to support as many data-backends as possible, Superduper supports the `ibis` query API to build SQL queries.\n\nWith Superduper one would write:\n\n```python\nt = db['my_table']\nresult = t.filter(t.brand == 'Nike').execute()\n```\n", - "---\nsidebar_position: 1\n---\n\n# First steps\n\nFollow these steps to get started with Superduper:\n\n1. **Get setup**\n \n 1. [Install Superduper](./installation.md)\n 2. [Configure Superduper](./configuration.md)\n 3. [Try some of the basic tutorials](../tutorials/intro.md)\n\n2. **Try some of our code-snippets and use-cases**\n\n 1. The [code-snippets](../code_snippets) section provides building blocks to create functionality with Superduper\n 2. The [use-cases](../use_cases) section gives selective examples of how to build complex functionality with Superduper.\n\n3. **Read more about usage-patterns and key functionality of Superduper**\n\n The API reference ([overview](../core_api/), [connect](../connect_api/), [apply](../apply_api/), [execute](../execute_api/)) gives\n the central usage patterns and their purpose.\n\n4. **Read about production features**\n\n Superduper was designed with production specifically in mind. Read more about this [here](../production/).\n\n5. **Build understanding**\n\n To understand more about how Superduper works, read through the [`Fundamentals`](../fundamentals/glossary) and refer to the [`API References`](https://docs.superduper.io/apidocs/source/superduper.html) for detailed information on API usage.\n\n6. **Create your own Superduper components**\n\n Superduper makes it easy to write your own models and functionality, with its `Model` base class. Learn how to write\n a custom `Model` [here](../create_functionality).\n\n7. **Engage with the Community**\n\n If you encounter challenges, join our [Slack Channels](https://join.slack.com/t/superduper/shared_invite/zt-1zuojj0k0-RjAYBs1TDsvEa7yaFGa6QA) for assistance. Report bugs and share feature requests [by raising an issue]((https://github.com/superduper/superduper/issues).). Our community is here to support you.\n\n You are welcome to join the conversation on our [discussions forum](https://github.com/superduper/superduper/discussions) and follow our open-source roadmap [here](https://github.com/orgs/superduper/projects/1/views/10).\n\n8. **Contribute and Share**\n\n Contribute to the Superduper community by sharing your solutions and experiences. \n Help us grow by promoting Superduper to your peers and the wider world. Your involvement is valuable to us! Don't forget to give us a star ⭐!\n\n Superduper is a community effort and licensed under Apache 2.0. We encourage enthusiastic developers to contribute to the project. Read more [here](../setup/contributing) and [on GitHub](https://github.com/superduper/superduper/) about getting setup and ways you can contribute.\n\n\nimport DocCardList from '@theme/DocCardList';\n\n", - "---\nsidebar_position: 3\ntags:\n - quickstart\n---\n\n# Configure\n\nSuperduper provides a range of configurable options for setting\nup your environment:\n\nConfigurations can either be injected:\n\n- in a YAML file specified by the `SUPERDUPER_CONFIG_FILE` environment variable or\n- through environment variables starting with `SUPERDUPER_`:\n- as `**kwargs` when calling the [`superduper.superduper`](../core_api/connect.md) function (note this is only for development purposes).\n\nHere are the configurable settings and their project defaults \n(remaining configurations can be viewed in [`superduper.base.config`](https://github.com/superduper/superduper/blob/main/superduper/base/config.py)). Note that as much or as little of this configuration can be specified. The remaining \nconfigurations will then take on their default values.\n\n\n```yaml\n# Where large data blobs/ files are saved\nartifact_store: filesystem://\n\n# How to encode binary data\nbytes_encoding: Bytes\n# bytes_encoding: Base64\n\n# The base database you would like to connect to\ndata_backend: \n\n# Settings for randomly assigning train/valid folds\nfold_probability: 0.05\n\n# Where lance indexes will be saved\nlance_home: .superduper/vector_indices\n\n# Log level to be shown to stdout\nlog_level: INFO\nlogging_type: SYSTEM\n\n# Database to save meta-data in (defaults to `data_backend`)\nmetadata_store: null\n\n# Settings for failed API requests\nretries:\n stop_after_attempt: 2\n wait_max: 10.0\n wait_min: 4.0\n wait_multiplier: 1.0\n```\n\nAs an example, to reconfigure the URI of the data_backend we have two options:\n\nAn environment variable set with:\n\n```bash\n$ export SUPERDUPER_CONFIG=./config.yaml\n```\nAnd a configuration file in `./config.yaml` with this content only:\n\n```yaml\ndata_backend: mongodb://localhost:27018/documents\n```\n\n... or simply set environment variables directly:\n\n```bash\n$ export SUPERDUPER_DATA_BACKEND='mongodb://localhost:27018/documents'\n```\n\nYou may view the configuration used by the system with:\n\n```bash\npython -m superduper config\n```\n", - "---\nsidebar_position: 2\n---\n\n# Installation\n\nThere are two ways to get started:\n\n- [A local `pip` installation on your system](#pip).\n- [Running the `superduper` docker image](#docker-image).\n\n## Pip\n\n`superduper` is available on [PyPi.org](https://pypi.org/project/superduper-framework/).\n\n### Prerequisites\n\nBefore you begin the installation process, please make sure you have the following prerequisites in place:\n\n#### Operating System\n\n`superduper` is compatible with several Linux distributions, including:\n\n- MacOS\n- Ubuntu\n- Debian\n\n#### Python Ecosystem\n\nIf you plan to install superduper from source, you'll need the following:\n\n- `python3.10` or `python3.11`\n- `pip` 22.0.4 or later\n\nYour experience with `superduper` on Linux may vary depending on your system and compute requirements.\n\n### Installation\n\nTo install `superduper` on your system using `pip`, open your terminal and run the following command:\n\n```bash\npip install superduper-framework\n```\n\nThis command will install `superduper` along with a minimal set of common dependencies required for running the framework.\nIf you would like to use the `superduper.ext` subpackages (e.g. `superduper.ext.openai`), you may build a requirements file\nwith this command:\n\n```bash\npython3 -m superduper requirements > requirements.txt\n```\n\nFor example, this builds a `requirements.txt` file for `openai` and `torch`:\n\n```bash\npython3 -m superduper requirements openai torch > requirements.txt\n```\n\n## Docker Image\n\n#### Using Pre-built Images\n\nIf you prefer using Docker, you can pull a pre-built Docker image from Docker Hub and run it with Docker version 19.03 or later:\n\n```bash\ndocker run -p 8888:8888 superduperio/superduper:latest\n```\n\nThis command installs the base `superduper` image. If you want to run the ready-to-use examples, you'll need to download the required dependencies at runtime. \n\n\n#### Building the image yourself\n\nFor more control, you can build the Docker images yourself from the latest GitHub version as follows:\n\nClone the code:\n\n```bash\ngit clone --branch main --single-branch --depth 1 https://github.com/superduper/superduper.git\nmake build_superduper\n```\n\n#### Developer's docker image and environment\n\nIf you wish to use your local copy of code with a docker build, execute the following command:\n\n```bash\nmake build_sandbox\n```\n\nYou will see something like these lines in `docker images`:\n\n```bash\nREPOSITORY TAG IMAGE ID CREATED SIZE\nsuperduperio/sandbox latest 88ddab334d17 5 days ago 2.69GB\n```", - "# Production features in Superduper\n\nSuperduper was made with productionization in mind. These means several things:\n\n## Modifiable, configurable, flexible\n\nA production ready solution should not come up short, as soon as developers \nencounted a use-case or scenario outside of the norm, or the documented \napplications. In this respect, modifiablility, configurability and flexibility are key.\n\nSuperduper contains fully open-source (Apache 2.0, MIT, BSD 3-part) components for all aspects of the setup.\nThis goes from the AI-models integrated, the databases and client libraries supported, as well as \nthe cluster and compute management. This means that developers are never left hung out \nto dry with regard to taking action in altering and interrogating the source doe, as well \nas adding their own functionality.\n\nIn addition, Superduper may be used and configured in a wide variety of ways.\nIt can be used \"in-process\", with computations blocking (\"developer mode\") and \nit can be operated in a cluster-like architecture, with compute, vector-search,\nchange-data capture and a REST-ful server separated into separate services.\nThis is ideal for teams of developers looking to productionize their AI-data setups.\n\n## Scalability\n\nA production ready solution should scale with the amount of traffic, data\nand computation to the system. Superduper includes a `ray` integration\nwhich allows developers to scale the compute as the amount of data and requests\nto the system grod. Read more [here](./non_blocking_ray_jobs).\n\nIn addition Superduper has the option to separate the vector-comparison and sorting component\ninto a separate service, so this doesn't block or slow down the main program running.\n\n## Interoperability\n\nDue to the [change-data-capture component](./change_data_capture), developers \nare not required to operate their database through Superduper. Third-party \ndatabase clients, and even other programming languages other than Python \nmay be used to add data to the database. Nonetheless, Superduper \nwill still process this data.\n\nIn addition the [REST API](./rest_api) may be easily used to access Superduper\nfrom the web, or from other programming environments.\n\n## Live serving\n\nThe [REST API](./rest_api) service may be used to access Superduper using pure JSON, \nplus references to saved/ uploaded binaries. This gives great flexibility to application\ndevelopers looking to build on top of Superduper from Javascript etc..\n\n## SuperDuper protocol\n\nAll Superduper components may be built using Python, or directly in a YAML/ JSON formalism\nusng the [\"superduper-protocol\"](./superduper_protocol.md).\nThis provides a convenient set of choices for AI engineers, infrastructure engineers \nand beyond to share and communicate their AI-data setups in Superduper", - "# SuperDuper Protocol\n\nSuperduper includes a protocol allowed developers to switch back and forth from Python and YAML/ JSON formats.\nThe mapping is fairly self-explanatory after reading the examples below.\n\n## Writing in Superduper-protocol directly\n\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n \n\n ```yaml\n _base: \"?my_vector_index\"\n _leaves:\n postprocess:\n _path: superduper/base/code/Code\n code: '\n from superduper import code\n\n @code\n def postprocess(x):\n return x.tolist()\n '\n my_vector:\n _path: superduper.components/vector_index/vector\n shape: 384\n sentence_transformer:\n _path: superduper/ext/sentence_transformers/model/SentenceTransformer\n datatype: \"?my_vector\"\n model: \"all-MiniLM-L6-v2\"\n postprocess: \"?postprocess\"\n my_query:\n _path: superduper/backends/mongodb/query/parse_query\n query: \"documents.find()\"\n my_listener:\n _path: superduper.components/listener/Listener\n model: \"?sentence_transformer\"\n select: \"?my_query\"\n key: \"X\"\n my_vector_index:\n _path: superduper.components/vector_index/VectorIndex\n indexing_listener: \"?my_listener\"\n measure: cosine\n ```\n\n Then from the commmand line:\n\n ```bash\n superduper apply --manifest='.yaml'\n ```\n\n \n \n\n ```json\n {\n \"_base\": \"?my_vector_index\",\n \"_leaves\": {\n \"postprocess\": {\n \"_path\": \"superduper/base/code/Code\",\n \"code\": \"from superduper import code\\n\\n@code\\ndef postprocess(x):\\n return x.tolist()\"\n },\n \"my_vector\": {\n \"_path\": \"superduper.components/vector_index/vector\",\n \"shape\": 384\n },\n \"sentence_transformer\": {\n \"_path\": \"superduper/ext/sentence_transformers/model/SentenceTransformer\",\n \"datatype\": \"?my_vector\",\n \"model\": \"all-MiniLM-L6-v2\",\n \"postprocess\": \"?postprocess\"\n },\n \"my_query\": {\n \"_path\": \"superduper/backends/mongodb/query/parse_query\",\n \"query\": \"documents.find()\"\n },\n \"my_listener\": {\n \"_path\": \"superduper.components/listener/Listener\",\n \"model\": \"?sentence_transformer\",\n \"select\": \"?my_query\"\n },\n \"my_vector_index\": {\n \"_path\": \"superduper.components/vector_index/VectorIndex\",\n \"indexing_listener\": \"?my_listener\",\n \"measure\": \"cosine\"\n }\n }\n }\n ```\n\n Then from the command line:\n\n ```bash\n superduper apply --manifest='.json'\n ```\n\n \n \n\n ```python\n from superduper import superduper\n from superduper.components.vector_index import vector\n from superduper.ext.sentence_transformers.model import SentenceTransformer\n from superduper.components.listener import Listener\n from superduper.components.vector_index import VectorIndex\n from superduper.base.code import Code\n from superduper import Stack\n\n\n db = superduper('mongomock://')\n\n datatype = vector(shape=384, identifier=\"my-vec\")\n\n\n def postprocess(x):\n return x.tolist()\n\n\n postprocess = Code.from_object(postprocess)\n\n\n model = SentenceTransformer(\n identifier=\"test\",\n datatype=datatype,\n predict_kwargs={\"show_progress_bar\": True},\n signature=\"*args,**kwargs\",\n model=\"all-MiniLM-L6-v2\",\n device=\"cpu\",\n postprocess=postprocess,\n )\n\n listener = Listener(\n identifier=\"my-listener\",\n key=\"txt\",\n model=model,\n select=db['documents'].find(),\n active=True,\n predict_kwargs={}\n )\n\n vector_index = VectorIndex(\n identifier=\"my-index\",\n indexing_listener=listener,\n measure=\"cosine\"\n )\n\n db.apply(vector_index)\n ```\n \n \n\n\n## Converting a `Component` to Superduper-protocol\n\nAll components may be converted to *Superduper-protocol* using the `Component.encode` method:\n\n```python\nencoding = vector_index.encode()\n```\n\nThis encoding may be written directly to disk with:\n\n```python\nvector_index.export(zip=True) # outputs to \"./my-index.zip\"\n```\n\nDevelopers may reload components from disk with `Component.read`\n\n```python\nreloaded = Component.read('./my-index.zip')\n```", - "**`superduper.misc.special_dicts`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/misc/special_dicts.py)\n\n## `diff` \n\n```python\ndiff(r1,\n r2)\n```\n| Parameter | Description |\n|-----------|-------------|\n| r1 | Dict |\n| r2 | Dict |\n\nGet the difference between two dictionaries.\n\n```python\n_diff({'a': 1, 'b': 2}, {'a': 2, 'b': 2})\n# {'a': (1, 2)}\n_diff({'a': {'c': 3}, 'b': 2}, {'a': 2, 'b': 2})\n# {'a': ({'c': 3}, 2)}\n```\n\n## `SuperDuperFlatEncode` \n\n```python\nSuperDuperFlatEncode(self,\n /,\n *args,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | *args for `dict` |\n| kwargs | **kwargs for `dict` |\n\nDictionary for representing flattened encoding data.\n\n## `MongoStyleDict` \n\n```python\nMongoStyleDict(self,\n /,\n *args,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | *args for `dict` |\n| kwargs | **kwargs for `dict` |\n\nDictionary object mirroring how MongoDB handles fields.\n\n## `IndexableDict` \n\n```python\nIndexableDict(self,\n ordered_dict)\n```\n| Parameter | Description |\n|-----------|-------------|\n| ordered_dict | OrderedDict |\n\nIndexableDict.\n\n```python\n# Example:\n# -------\nd = IndexableDict({'a': 1, 'b': 2})\nd[0]\n# 1\n```\n\n```python\nd[1]\n# 2\n```\n\n", - "**`superduper.misc.hash`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/misc/hash.py)\n\n## `hash_string` \n\n```python\nhash_string(string: str)\n```\n| Parameter | Description |\n|-----------|-------------|\n| string | string to hash |\n\nHash a string.\n\n## `random_sha1` \n\n```python\nrandom_sha1()\n```\nGenerate random sha1 values.\n\n", - "**`superduper.misc.serialization`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/misc/serialization.py)\n\n## `asdict` \n\n```python\nasdict(obj,\n *,\n copy_method=) -> Dict[str,\n Any]\n```\n| Parameter | Description |\n|-----------|-------------|\n| obj | The dataclass instance to |\n| copy_method | The copy method to use for non atomic objects |\n\nConvert the dataclass instance to a dict.\n\nCustom ``asdict`` function which exports a dataclass object into a dict,\nwith a option to choose for nested non atomic objects copy strategy.\n\n", - "**`superduper.misc.auto_schema`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/misc/auto_schema.py)\n\n## `infer_datatype` \n\n```python\ninfer_datatype(data: Any) -> Union[superduper.components.datatype.DataType,\n type,\n NoneType]\n```\n| Parameter | Description |\n|-----------|-------------|\n| data | The data object |\n\nInfer the datatype of a given data object.\n\nIf the data object is a base type, return None,\nOtherwise, return the inferred datatype\n\n## `infer_schema` \n\n```python\ninfer_schema(data: Mapping[str,\n Any],\n identifier: Optional[str] = None,\n ibis=False) -> superduper.components.schema.Schema\n```\n| Parameter | Description |\n|-----------|-------------|\n| data | The data object |\n| identifier | The identifier for the schema, if None, it will be generated |\n| ibis | If True, the schema will be updated for the Ibis backend, otherwise for MongoDB |\n\nInfer a schema from a given data object.\n\n## `register_module` \n\n```python\nregister_module(module_name)\n```\n| Parameter | Description |\n|-----------|-------------|\n| module_name | The module name, e.g. \"superduper.ext.numpy.encoder\" |\n\nRegister a module for datatype inference.\n\nOnly modules with a check and create function will be registered\n\n## `updated_schema_data_for_ibis` \n\n```python\nupdated_schema_data_for_ibis(schema_data) -> Dict[str,\n superduper.components.datatype.DataType]\n```\n| Parameter | Description |\n|-----------|-------------|\n| schema_data | The schema data |\n\nUpdate the schema data for Ibis backend.\n\nConvert the basic data types to Ibis data types.\n\n## `updated_schema_data_for_mongodb` \n\n```python\nupdated_schema_data_for_mongodb(schema_data) -> Dict[str,\n superduper.components.datatype.DataType]\n```\n| Parameter | Description |\n|-----------|-------------|\n| schema_data | The schema data |\n\nUpdate the schema data for MongoDB backend.\n\nOnly keep the data types that can be stored directly in MongoDB.\n\n", - "**`superduper.misc.data`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/misc/data.py)\n\n## `ibatch` \n\n```python\nibatch(iterable: Iterable[~T],\n batch_size: int) -> Iterator[List[~T]]\n```\n| Parameter | Description |\n|-----------|-------------|\n| iterable | the iterable to batch |\n| batch_size | the number of groups to write |\n\nBatch an iterable into chunks of size `batch_size`.\n\n", - "**`superduper.misc.runnable.runnable`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/misc/runnable/runnable.py)\n\n## `Event` \n\n```python\nEvent(self,\n *on_set: Callable[[],\n NoneType])\n```\n| Parameter | Description |\n|-----------|-------------|\n| on_set | Callbacks to call when the event is set |\n\nAn Event that calls a list of callbacks when set or cleared.\n\nA threading.Event that also calls back to zero or more functions when its state\nis set or reset, and has a __bool__ method.\n\nNote that the callback might happen on some completely different thread,\nso these functions cannot block\n\n## `Runnable` \n\n```python\nRunnable(self)\n```\nA base class for things that start, run, finish, stop and join.\n\nStopping is requesting immediate termination: finishing is saying that\nthere is no more work to be done, finish what you are doing.\n\nA Runnable has two `Event`s, `running` and `stopped`, and you can either\n`wait` on either of these conditions to be true, or add a callback function\n(which must be non-blocking) to either of them.\n\n`running` is not set until the setup for a `Runnable` has finished;\n`stopped` is not set until all the computations in a thread have ceased.\n\nAn Runnable can be used as a context manager:\n\nwith runnable:\n# The runnable is running by this point\ndo_stuff()\n# By the time you get to here, the runnable has completely stopped\n\nThe above means roughly the same as\n\nrunnable.start()\ntry:\ndo_stuff()\nrunnable.finish()\nrunnable.join()\nfinally:\nrunnable.stop()\n\n", - "**`superduper.misc.runnable.queue_chunker`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/misc/runnable/queue_chunker.py)\n\n## `QueueChunker` \n\n```python\nQueueChunker(self,\n chunk_size: int,\n timeout: float,\n accumulate_timeouts: bool = False) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| chunk_size | Maximum number of entries in a chunk |\n| timeout | Maximum amount of time to block |\n| accumulate_timeouts | If accumulate timeouts is True, then `timeout` is the total timeout allowed over the whole chunk, otherwise the timeout is applied to each item. |\n\nChunk a queue into lists of length at most `chunk_size` within time `timeout`.\n\n", - "**`superduper.misc.annotations`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/misc/annotations.py)\n\n## `merge_docstrings` \n\n```python\nmerge_docstrings(cls)\n```\n| Parameter | Description |\n|-----------|-------------|\n| cls | Class to merge docstrings for. |\n\nDecorator that merges Sphinx-styled class docstrings.\n\nDecorator merges doc-strings from parent to child classes,\nensuring no duplicate parameters and correct indentation.\n\n## `deprecated` \n\n```python\ndeprecated(f)\n```\n| Parameter | Description |\n|-----------|-------------|\n| f | function to deprecate |\n\nDecorator to mark a function as deprecated.\n\nThis will result in a warning being emitted when the function is used.\n\n## `component` \n\n```python\ncomponent(*schema: Dict)\n```\n| Parameter | Description |\n|-----------|-------------|\n| schema | schema for the component |\n\nDecorator for creating a component.\n\n## `requires_packages` \n\n```python\nrequires_packages(*packages,\n warn=False)\n```\n| Parameter | Description |\n|-----------|-------------|\n| packages | list of tuples of packages each tuple of the form (import_name, lower_bound/None, upper_bound/None, install_name/None) |\n| warn | if True, warn instead of raising an exception |\n\nRequire the packages to be installed.\n\nE.g. ('sklearn', '0.1.0', '0.2.0', 'scikit-learn')\n\n## `extract_parameters` \n\n```python\nextract_parameters(doc)\n```\n| Parameter | Description |\n|-----------|-------------|\n| doc | Sphinx-styled docstring. Docstring may have multiple lines |\n\nExtracts and organizes parameter descriptions from a Sphinx-styled docstring.\n\n## `replace_parameters` \n\n```python\nreplace_parameters(doc,\n placeholder: str = '!!!')\n```\n| Parameter | Description |\n|-----------|-------------|\n| doc | Sphinx-styled docstring. |\n| placeholder | Placeholder to replace parameters with. |\n\nReplace parameters in a doc-string with a placeholder.\n\n## `superduperDeprecationWarning` \n\n```python\nsuperduperDeprecationWarning(self,\n /,\n *args,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | *args of `DeprecationWarning` |\n| kwargs | **kwargs of `DeprecationWarning` |\n\nSpecialized Deprecation Warning for fine grained filtering control.\n\n", - "**`superduper.misc.server`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/misc/server.py)\n\n## `request_server` \n\n```python\nrequest_server(service: str = 'vector_search',\n data=None,\n endpoint='add',\n args={},\n type='post')\n```\n| Parameter | Description |\n|-----------|-------------|\n| service | Service name |\n| data | Data to send |\n| endpoint | Endpoint to hit |\n| args | Arguments to pass |\n| type | Type of request |\n\nRequest server with data.\n\n## `server_request_decoder` \n\n```python\nserver_request_decoder(x)\n```\n| Parameter | Description |\n|-----------|-------------|\n| x | Object to decode. |\n\nDecodes a request to `SuperDuperApp` service.\n\n", - "**`superduper.misc.download`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/misc/download.py)\n\n## `download_content` \n\n```python\ndownload_content(db,\n query: Union[superduper.backends.base.query.Query,\n Dict],\n ids: Optional[Sequence[str]] = None,\n documents: Optional[List[superduper.base.document.Document]] = None,\n raises: bool = True,\n n_workers: Optional[int] = None) -> Optional[Sequence[superduper.base.document.Document]]\n```\n| Parameter | Description |\n|-----------|-------------|\n| db | database instance |\n| query | query to be executed |\n| ids | ids to be downloaded |\n| documents | documents to be downloaded |\n| raises | whether to raise errors |\n| n_workers | number of download workers |\n\nDownload content contained in uploaded data.\n\nItems to be downloaded are identifier\nvia the subdocuments in the form exemplified below. By default items are downloaded\nto the database, unless a ``download_update`` function is provided.\n\n```python\nd = {\"_content\": {\"uri\": \"\", \"encoder\": \"\"}}\ndef update(key, id, bytes):\n... with open(f'/tmp/{key}+{id}', 'wb') as f:\n... f.write(bytes)\ndownload_content(None, None, ids=[\"0\"], documents=[d]))\n \n```\n\n## `download_from_one` \n\n```python\ndownload_from_one(r: superduper.base.document.Document)\n```\n| Parameter | Description |\n|-----------|-------------|\n| r | document to download from |\n\nDownload content from a single document.\n\nThis function will find all URIs in the document and download them.\n\n## `gather_uris` \n\n```python\ngather_uris(documents: Sequence[superduper.base.document.Document],\n gather_ids: bool = True) -> Tuple[List[str],\n List[str],\n List[Any],\n List[str]]\n```\n| Parameter | Description |\n|-----------|-------------|\n| documents | list of dictionaries |\n| gather_ids | if ``True`` then gather ids of documents |\n\nGet the uris out of all documents as denoted by ``{\"_content\": ...}``.\n\n## `timeout` \n\n```python\ntimeout(seconds)\n```\n| Parameter | Description |\n|-----------|-------------|\n| seconds | seconds until timeout |\n\nContext manager to set a timeout.\n\n## `timeout_handler` \n\n```python\ntimeout_handler(signum,\n frame)\n```\n| Parameter | Description |\n|-----------|-------------|\n| signum | signal number |\n| frame | frame |\n\nTimeout handler to raise an TimeoutException.\n\n## `BaseDownloader` \n\n```python\nBaseDownloader(self,\n uris: List[str],\n n_workers: int = 0,\n timeout: Optional[int] = None,\n headers: Optional[Dict] = None,\n raises: bool = True)\n```\n| Parameter | Description |\n|-----------|-------------|\n| uris | list of uris/ file names to fetch |\n| n_workers | number of multiprocessing workers |\n| timeout | set seconds until request times out |\n| headers | dictionary of request headers passed to``requests`` package |\n| raises | raises error ``True``/``False`` |\n\nBase class for downloading files.\n\n## `Downloader` \n\n```python\nDownloader(self,\n uris,\n update_one: Optional[Callable] = None,\n ids: Union[List[str],\n List[int],\n NoneType] = None,\n keys: Optional[List[str]] = None,\n datatypes: Optional[List[str]] = None,\n n_workers: int = 20,\n headers: Optional[Dict] = None,\n skip_existing: bool = True,\n timeout: Optional[int] = None,\n raises: bool = True)\n```\n| Parameter | Description |\n|-----------|-------------|\n| uris | list of uris/ file names to fetch |\n| update_one | function to call to insert data into table |\n| ids | list of ids of rows/ documents to update |\n| keys | list of keys in rows/ documents to insert to |\n| datatypes | list of datatypes of rows/ documents to insert to |\n| n_workers | number of multiprocessing workers |\n| headers | dictionary of request headers passed to``requests`` package |\n| skip_existing | if ``True`` then don't bother getting already present data |\n| timeout | set seconds until request times out |\n| raises | raises error ``True``/``False`` |\n\nDownload files from a list of URIs.\n\n## `Fetcher` \n\n```python\nFetcher(self,\n headers: Optional[Dict] = None,\n n_workers: int = 0)\n```\n| Parameter | Description |\n|-----------|-------------|\n| headers | headers to be used for download |\n| n_workers | number of download workers |\n\nFetches data from a URI.\n\n## `TimeoutException` \n\n```python\nTimeoutException(self,\n /,\n *args,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | *args of `Exception` |\n| kwargs | **kwargs of `Exception` |\n\nTimeout exception.\n\n## `Updater` \n\n```python\nUpdater(self,\n db,\n query)\n```\n| Parameter | Description |\n|-----------|-------------|\n| db | Datalayer instance |\n| query | query to be executed |\n\nUpdater class to update the artifact.\n\n", - "**`superduper.cdc.cdc`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/cdc/cdc.py)\n\n## `DatabaseChangeDataCapture` \n\n```python\nDatabaseChangeDataCapture(self,\n db: 'Datalayer')\n```\n| Parameter | Description |\n|-----------|-------------|\n| db | A superduper datalayer instance. |\n\nDatabaseChangeDataCapture (CDC).\n\nDatabaseChangeDataCapture is a Python class that provides a flexible and\nextensible framework for capturing and managing data changes\nin a database.\n\nThis class is repsonsible for cdc service on the provided `db` instance\nThis class is designed to simplify the process of tracking changes\nto database records,allowing you to monitor and respond to\ndata modifications efficiently.\n\n## `BaseDatabaseListener` \n\n```python\nBaseDatabaseListener(self,\n db: 'Datalayer',\n on: Union[ForwardRef('IbisQuery'),\n ForwardRef('TableOrCollection')],\n stop_event: superduper.misc.runnable.runnable.Event,\n identifier: 'str' = '',\n timeout: Optional[float] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| db | A superduper instance. |\n| on | A table or collection on which the listener is invoked. |\n| stop_event | A threading event flag to notify for stoppage. |\n| identifier | A identity given to the listener service. |\n| timeout | A timeout for the listener. |\n\nA Base class which defines basic functions to implement.\n\nThis class is responsible for defining the basic functions\nthat needs to be implemented by the database listener.\n\n## `CDCHandler` \n\n```python\nCDCHandler(self,\n db: 'Datalayer',\n stop_event: superduper.misc.runnable.runnable.Event,\n queue)\n```\n| Parameter | Description |\n|-----------|-------------|\n| db | A superduper instance. |\n| stop_event | A threading event flag to notify for stoppage. |\n| queue | A queue to hold the cdc packets. |\n\nCDCHandler for handling CDC changes.\n\nThis class is responsible for handling the change by executing the taskflow.\nThis class also extends the task graph by adding funcation job node which\ndoes post model executiong jobs, i.e `copy_vectors`.\n\n## `DatabaseListenerFactory` \n\n```python\nDatabaseListenerFactory(self,\n db_type: str = 'mongodb')\n```\n| Parameter | Description |\n|-----------|-------------|\n| db_type | Database type. |\n\nDatabaseListenerFactory to create listeners for different databases.\n\nThis class is responsible for creating a DatabaseListener instance\nbased on the database type.\n\n## `DatabaseListenerThreadScheduler` \n\n```python\nDatabaseListenerThreadScheduler(self,\n listener: superduper.cdc.cdc.BaseDatabaseListener,\n stop_event: superduper.misc.runnable.runnable.Event,\n start_event: superduper.misc.runnable.runnable.Event) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| listener | A BaseDatabaseListener instance. |\n| stop_event | A threading event flag to notify for stoppage. |\n| start_event | A threading event flag to notify for start. |\n\nDatabaseListenerThreadScheduler to listen to the cdc changes.\n\nThis class is responsible for listening to the cdc changes and\nexecuting the following job.\n\n## `Packet` \n\n```python\nPacket(self,\n ids: Any,\n query: Optional[Any] = None,\n event_type: superduper.cdc.cdc.DBEvent = ) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| ids | Document ids. |\n| query | Query to fetch the document. |\n| event_type | CDC event type. |\n\nPacket to hold the cdc event data.\n\n", - "**`superduper.backends.sqlalchemy.metadata`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/sqlalchemy/metadata.py)\n\n## `SQLAlchemyMetadata` \n\n```python\nSQLAlchemyMetadata(self,\n conn: Any,\n name: Optional[str] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| conn | connection to the meta-data store |\n| name | Name to identify DB using the connection |\n\nAbstraction for storing meta-data separately from primary data.\n\n", - "**`superduper.backends.sqlalchemy.db_helper`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/sqlalchemy/db_helper.py)\n\n## `create_clickhouse_config` \n\n```python\ncreate_clickhouse_config()\n```\nCreate configuration for ClickHouse database.\n\n## `get_db_config` \n\n```python\nget_db_config(dialect)\n```\n| Parameter | Description |\n|-----------|-------------|\n| dialect | The dialect of the database. |\n\nGet the configuration class for the specified dialect.\n\n", - "**`superduper.backends.mongodb.artifacts`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/mongodb/artifacts.py)\n\n## `upload_folder` \n\n```python\nupload_folder(path,\n file_id,\n fs,\n parent_path='')\n```\n| Parameter | Description |\n|-----------|-------------|\n| path | The path to the folder to upload |\n| file_id | The file_id of the folder |\n| fs | The GridFS object |\n| parent_path | The parent path of the folder |\n\nUpload folder to GridFS.\n\n## `MongoArtifactStore` \n\n```python\nMongoArtifactStore(self,\n conn,\n name: str)\n```\n| Parameter | Description |\n|-----------|-------------|\n| conn | MongoDB client connection |\n| name | Name of database to host filesystem |\n\nArtifact store for MongoDB.\n\n", - "**`superduper.backends.mongodb.metadata`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/mongodb/metadata.py)\n\n## `MongoMetaDataStore` \n\n```python\nMongoMetaDataStore(self,\n conn: Any,\n name: Optional[str] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| conn | MongoDB client connection |\n| name | Name of database to host filesystem |\n\nMetadata store for MongoDB.\n\n", - "**`superduper.backends.mongodb.query`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/mongodb/query.py)\n\n## `DeleteOne` \n\n```python\nDeleteOne(**kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| kwargs | The arguments to pass to the operation. |\n\nDeleteOne operation for MongoDB.\n\n## `InsertOne` \n\n```python\nInsertOne(**kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| kwargs | The arguments to pass to the operation. |\n\nInsertOne operation for MongoDB.\n\n## `ReplaceOne` \n\n```python\nReplaceOne(**kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| kwargs | The arguments to pass to the operation. |\n\nReplaceOne operation for MongoDB.\n\n## `UpdateOne` \n\n```python\nUpdateOne(**kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| kwargs | The arguments to pass to the operation. |\n\nUpdateOne operation for MongoDB.\n\n## `parse_query` \n\n```python\nparse_query(query,\n documents: Sequence[Dict] = (),\n db: Optional[ForwardRef('Datalayer')] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| query | The query to parse. |\n| documents | The documents to query. |\n| db | The datalayer to use to execute the query. |\n\nParse a string query into a query object.\n\n## `MongoQuery` \n\n```python\nMongoQuery(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n parts: Sequence[Union[Tuple,\n str]] = ()) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| parts | The parts of the query. |\n\nA query class for MongoDB.\n\nThis class is used to build and execute queries on a MongoDB database.\n\n## `BulkOp` \n\n```python\nBulkOp(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n kwargs: Dict = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| kwargs | The arguments to pass to the operation. |\n\nA bulk operation for MongoDB.\n\n## `ChangeStream` \n\n```python\nChangeStream(self,\n collection: str,\n args: Sequence = None,\n kwargs: Dict = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| collection | The collection to perform the query on |\n| args | Positional query arguments to ``pymongo.Collection.watch`` |\n| kwargs | Named query arguments to ``pymongo.Collection.watch`` |\n\nChange stream class to watch for changes in specified collection.\n\n", - "**`superduper.backends.mongodb.data_backend`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/mongodb/data_backend.py)\n\n## `MongoDataBackend` \n\n```python\nMongoDataBackend(self,\n conn: pymongo.mongo_client.MongoClient,\n name: str)\n```\n| Parameter | Description |\n|-----------|-------------|\n| conn | MongoDB client connection |\n| name | Name of database to host filesystem |\n\nData backend for MongoDB.\n\n", - "**`superduper.backends.query_dataset`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/query_dataset.py)\n\n## `query_dataset_factory` \n\n```python\nquery_dataset_factory(**kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| kwargs | Keyword arguments to be passed to the query dataset object. |\n\nCreate a query dataset object.\n\nIf ``data_prefetch`` is set to ``True``, then a ``CachedQueryDataset`` object is\ncreated, otherwise a ``QueryDataset`` object is created.\n\n## `CachedQueryDataset` \n\n```python\nCachedQueryDataset(self,\n select: superduper.backends.base.query.Query,\n mapping: Optional[ForwardRef('Mapping')] = None,\n ids: Optional[List[str]] = None,\n fold: Optional[str] = 'train',\n transform: Optional[Callable] = None,\n db=None,\n in_memory: bool = True,\n prefetch_size: int = 100)\n```\n| Parameter | Description |\n|-----------|-------------|\n| select | A select query object which defines the query to be executed. |\n| mapping | A mapping object to be used for the dataset. |\n| ids | A list of ids to be used for the dataset. |\n| fold | The fold to be used for the dataset. |\n| transform | A callable which can be used to transform the dataset. |\n| db | A datalayer instance to be used for the dataset. |\n| in_memory | A boolean flag to indicate if the dataset should be loaded |\n| prefetch_size | The number of documents to prefetch from the database. |\n\nCached Query Dataset for fetching documents from database.\n\nThis class which fetch the document corresponding to the given ``index``.\nThis class prefetches documents from database and stores in the memory.\n\nThis can drastically reduce database read operations and hence reduce the overall\nload on the database.\n\n## `ExpiryCache` \n\n```python\nExpiryCache(self,\n /,\n *args,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | *args for `list` |\n| kwargs | **kwargs for `list` |\n\nExpiry Cache for storing documents.\n\nThe document will be removed from the cache after fetching it from the cache.\n\n## `QueryDataset` \n\n```python\nQueryDataset(self,\n select: superduper.backends.base.query.Query,\n mapping: Optional[ForwardRef('Mapping')] = None,\n ids: Optional[List[str]] = None,\n fold: Optional[str] = 'train',\n transform: Optional[Callable] = None,\n db: Optional[ForwardRef('Datalayer')] = None,\n in_memory: bool = True)\n```\n| Parameter | Description |\n|-----------|-------------|\n| select | A select query object which defines the query to be executed. |\n| mapping | A mapping object to be used for the dataset. |\n| ids | A list of ids to be used for the dataset. |\n| fold | The fold to be used for the dataset. |\n| transform | A callable which can be used to transform the dataset. |\n| db | A datalayer instance to be used for the dataset. |\n| in_memory | A boolean flag to indicate if the dataset should be loaded in memory. |\n\nQuery Dataset for fetching documents from database.\n\n", - "**`superduper.backends.local.compute`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/local/compute.py)\n\n## `LocalComputeBackend` \n\n```python\nLocalComputeBackend(self)\n```\nA mockup backend for running jobs locally.\n\n", - "**`superduper.backends.local.artifacts`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/local/artifacts.py)\n\n## `FileSystemArtifactStore` \n\n```python\nFileSystemArtifactStore(self,\n conn: Any,\n name: Optional[str] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| conn | root directory of the artifact store |\n| name | subdirectory to use for this artifact store |\n\nAbstraction for storing large artifacts separately from primary data.\n\n", - "**`superduper.backends.ibis.db_helper`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/ibis/db_helper.py)\n\n## `get_db_helper` \n\n```python\nget_db_helper(dialect) -> superduper.backends.ibis.db_helper.DBHelper\n```\n| Parameter | Description |\n|-----------|-------------|\n| dialect | The dialect of the database. |\n\nGet the insert processor for the given dialect.\n\n## `ClickHouseHelper` \n\n```python\nClickHouseHelper(self,\n dialect)\n```\n| Parameter | Description |\n|-----------|-------------|\n| dialect | The dialect of the database. |\n\nHelper class for ClickHouse database.\n\nThis class is used to convert byte data to base64 format for storage in the\ndatabase.\n\n## `DBHelper` \n\n```python\nDBHelper(self,\n dialect)\n```\n| Parameter | Description |\n|-----------|-------------|\n| dialect | The dialect of the database. |\n\nGeneric helper class for database.\n\n", - "**`superduper.backends.ibis.query`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/ibis/query.py)\n\n## `parse_query` \n\n```python\nparse_query(query,\n documents: Sequence[Dict] = (),\n db: Optional[ForwardRef('Datalayer')] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| query | The query to parse. |\n| documents | The documents to query. |\n| db | The datalayer to use to execute the query. |\n\nParse a string query into a query object.\n\n## `IbisQuery` \n\n```python\nIbisQuery(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n parts: Sequence[Union[Tuple,\n str]] = ()) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| parts | The parts of the query. |\n\nA query that can be executed on an Ibis database.\n\n## `RawSQL` \n\n```python\nRawSQL(self,\n query: str,\n id_field: str = 'id') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| query | The raw SQL query |\n| id_field | The field to use as the primary id |\n\nRaw SQL query.\n\n", - "**`superduper.backends.ibis.data_backend`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/ibis/data_backend.py)\n\n## `IbisDataBackend` \n\n```python\nIbisDataBackend(self,\n conn: ibis.backends.base.BaseBackend,\n name: str,\n in_memory: bool = False)\n```\n| Parameter | Description |\n|-----------|-------------|\n| conn | The connection to the database. |\n| name | The name of the database. |\n| in_memory | Whether to store the data in memory. |\n\nIbis data backend for the database.\n\n", - "**`superduper.backends.ibis.field_types`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/ibis/field_types.py)\n\n## `dtype` \n\n```python\ndtype(x)\n```\n| Parameter | Description |\n|-----------|-------------|\n| x | The data type e.g int, str, etc. |\n\nIbis dtype to represent basic data types in ibis.\n\n## `FieldType` \n\n```python\nFieldType(self,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n identifier: Union[str,\n ibis.expr.datatypes.core.DataType]) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | The name of the data type. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n\nField type to represent the type of a field in a table.\n\nThis is a wrapper around ibis.expr.datatypes.DataType to make it\nserializable.\n\n", - "**`superduper.backends.base.compute`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/base/compute.py)\n\n## `ComputeBackend` \n\n```python\nComputeBackend(self,\n /,\n *args,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | *args for `ABC` |\n| kwargs | *kwargs for `ABC` |\n\nAbstraction for sending jobs to a distributed compute platform.\n\n", - "**`superduper.backends.base.artifacts`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/base/artifacts.py)\n\n## `ArtifactSavingError` \n\n```python\nArtifactSavingError(self,\n /,\n *args,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | *args for `Exception` |\n| kwargs | **kwargs for `Exception` |\n\nError when saving artifact in artifact store fails.\n\n## `ArtifactStore` \n\n```python\nArtifactStore(self,\n conn: Any,\n name: Optional[str] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| conn | connection to the meta-data store |\n| name | Name to identify DB using the connection |\n\nAbstraction for storing large artifacts separately from primary data.\n\n", - "**`superduper.backends.base.metadata`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/base/metadata.py)\n\n## `MetaDataStore` \n\n```python\nMetaDataStore(self,\n conn: Any,\n name: Optional[str] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| conn | connection to the meta-data store |\n| name | Name to identify DB using the connection |\n\nAbstraction for storing meta-data separately from primary data.\n\n## `NonExistentMetadataError` \n\n```python\nNonExistentMetadataError(self,\n /,\n *args,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | *args for `Exception` |\n| kwargs | **kwargs for `Exception` |\n\nNonExistentMetadataError.\n\n", - "**`superduper.backends.base.query`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/base/query.py)\n\n## `applies_to` \n\n```python\napplies_to(*flavours)\n```\n| Parameter | Description |\n|-----------|-------------|\n| flavours | The flavours to check against. |\n\nDecorator to check if the query matches the accepted flavours.\n\n## `parse_query` \n\n```python\nparse_query(query: Union[str,\n list],\n builder_cls: Optional[Type[superduper.backends.base.query.Query]] = None,\n documents: Sequence[Any] = (),\n db: Optional[ForwardRef('Datalayer')] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| query | The query to parse. |\n| builder_cls | The class to use to build the query. |\n| documents | The documents to query. |\n| db | The datalayer to use to execute the query. |\n\nParse a string query into a query object.\n\n## `Model` \n\n```python\nModel(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n parts: Sequence[Union[Tuple,\n str]] = ()) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| parts | The parts of the query. |\n\nA model helper class for create a query to predict.\n\n## `Query` \n\n```python\nQuery(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n parts: Sequence[Union[Tuple,\n str]] = ()) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| parts | The parts of the query. |\n\nA query object.\n\nThis base class is used to create a query object that can be executed\nin the datalayer.\n\n## `TraceMixin` \n\n```python\nTraceMixin(self,\n /,\n *args,\n **kwargs)\n```\nMixin to add trace functionality to a query.\n\n", - "**`superduper.backends.base.data_backend`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/backends/base/data_backend.py)\n\n## `BaseDataBackend` \n\n```python\nBaseDataBackend(self,\n conn: Any,\n name: str)\n```\n| Parameter | Description |\n|-----------|-------------|\n| conn | The connection to the databackend database. |\n| name | The name of the databackend. |\n\nBase data backend for the database.\n\n", - "**`superduper.ext.sentence_transformers.model`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/sentence_transformers/model.py)\n\n## `SentenceTransformer` \n\n```python\nSentenceTransformer(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n preferred_devices: 't.Sequence[str]' = ('cuda',\n 'mps',\n 'cpu'),\n device: str = 'cpu',\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: Literal['*args',\n '**kwargs',\n '*args,\n **kwargs',\n 'singleton'] = 'singleton',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n object: Optional[sentence_transformers.SentenceTransformer.SentenceTransformer] = None,\n model: Optional[str] = None,\n preprocess: Optional[Callable] = None,\n postprocess: Optional[Callable] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | The signature of the model. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| object | The SentenceTransformer object to use. |\n| model | The model name, e.g. 'all-MiniLM-L6-v2'. |\n| device | The device to use, e.g. 'cpu' or 'cuda'. |\n| preprocess | The preprocessing function to apply to the input. |\n| postprocess | The postprocessing function to apply to the output. |\n| preferred_devices | A list of devices to prefer, in that order. |\n\nA model for sentence embeddings using `sentence-transformers`.\n\n", - "**`superduper.ext.cohere.model`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/cohere/model.py)\n\n## `CohereEmbed` \n\n```python\nCohereEmbed(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: str = 'singleton',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n model: 't.Optional[str]' = None,\n max_batch_size: 'int' = 8,\n client_kwargs: Dict[str,\n Any] = None,\n shape: Optional[Sequence[int]] = None,\n batch_size: int = 100) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| model | The Model to use, e.g. ``'text-embedding-ada-002'`` |\n| max_batch_size | Maximum batch size. |\n| client_kwargs | The keyword arguments to pass to the client. |\n| shape | The shape as ``tuple`` of the embedding. |\n| batch_size | The batch size to use for the predictor. |\n\nCohere embedding predictor.\n\n## `CohereGenerate` \n\n```python\nCohereGenerate(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: str = '*args,\n **kwargs',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n model: 't.Optional[str]' = None,\n max_batch_size: 'int' = 8,\n client_kwargs: Dict[str,\n Any] = None,\n takes_context: bool = True,\n prompt: str = '') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| model | The Model to use, e.g. ``'text-embedding-ada-002'`` |\n| max_batch_size | Maximum batch size. |\n| client_kwargs | The keyword arguments to pass to the client. |\n| takes_context | Whether the model takes context into account. |\n| prompt | The prompt to use to seed the response. |\n\nCohere realistic text generator (chat predictor).\n\n## `Cohere` \n\n```python\nCohere(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: 'Signature' = '*args,\n **kwargs',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n model: 't.Optional[str]' = None,\n max_batch_size: 'int' = 8,\n client_kwargs: Dict[str,\n Any] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| model | The Model to use, e.g. ``'text-embedding-ada-002'`` |\n| max_batch_size | Maximum batch size. |\n| client_kwargs | The keyword arguments to pass to the client. |\n\nCohere predictor.\n\n", - "**`superduper.ext.utils`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/utils.py)\n\n## `str_shape` \n\n```python\nstr_shape(shape: Sequence[int]) -> str\n```\n| Parameter | Description |\n|-----------|-------------|\n| shape | The shape to convert. |\n\nConvert a shape to a string.\n\n## `format_prompt` \n\n```python\nformat_prompt(X: str,\n prompt: str,\n context: Optional[List[str]] = None) -> str\n```\n| Parameter | Description |\n|-----------|-------------|\n| X | The input to format the prompt with. |\n| prompt | The prompt to format. |\n| context | The context to format the prompt with. |\n\nFormat a prompt with the given input and context.\n\n## `get_key` \n\n```python\nget_key(key_name: str) -> str\n```\n| Parameter | Description |\n|-----------|-------------|\n| key_name | The name of the environment variable to get. |\n\nGet an environment variable.\n\n", - "**`superduper.ext.llamacpp.model`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/llamacpp/model.py)\n\n## `download_uri` \n\n```python\ndownload_uri(uri,\n save_path)\n```\n| Parameter | Description |\n|-----------|-------------|\n| uri | URI to download |\n| save_path | place to save |\n\nDownload file.\n\n## `LlamaCpp` \n\n```python\nLlamaCpp(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: str = 'singleton',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n prompt: str = '{input}',\n prompt_func: Optional[Callable] = None,\n max_batch_size: Optional[int] = 4,\n model_name_or_path: str = 'facebook/opt-125m',\n model_kwargs: Dict = None,\n download_dir: str = '.llama_cpp') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| prompt | The template to use for the prompt. |\n| prompt_func | The function to use for the prompt. |\n| max_batch_size | The maximum batch size to use for batch generation. |\n| model_name_or_path | path or name of model |\n| model_kwargs | dictionary of init-kwargs |\n| download_dir | local caching directory |\n\nLlama.cpp connector.\n\n## `LlamaCppEmbedding` \n\n```python\nLlamaCppEmbedding(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: str = 'singleton',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n prompt: str = '{input}',\n prompt_func: Optional[Callable] = None,\n max_batch_size: Optional[int] = 4,\n model_name_or_path: str = 'facebook/opt-125m',\n model_kwargs: Dict = None,\n download_dir: str = '.llama_cpp') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| prompt | The template to use for the prompt. |\n| prompt_func | The function to use for the prompt. |\n| max_batch_size | The maximum batch size to use for batch generation. |\n| model_name_or_path | path or name of model |\n| model_kwargs | dictionary of init-kwargs |\n| download_dir | local caching directory |\n\nLlama.cpp connector for embeddings.\n\n", - "**`superduper.ext.torch.model`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/torch/model.py)\n\n## `create_batch` \n\n```python\ncreate_batch(args)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | single data point for batching |\n\nCreate a singleton batch in a manner similar to the PyTorch dataloader.\n\n```python\ncreate_batch(3.).shape\n# torch.Size([1])\nx, y = create_batch([torch.randn(5), torch.randn(3, 7)])\nx.shape\n# torch.Size([1, 5])\ny.shape\n# torch.Size([1, 3, 7])\nd = create_batch(({'a': torch.randn(4)}))\nd['a'].shape\n# torch.Size([1, 4])\n```\n\n## `torchmodel` \n\n```python\ntorchmodel(class_obj)\n```\n| Parameter | Description |\n|-----------|-------------|\n| class_obj | Class to decorate |\n\nA decorator to convert a `torch.nn.Module` into a `TorchModel`.\n\nDecorate a `torch.nn.Module` so that when it is invoked,\nthe result is a `TorchModel`.\n\n## `unpack_batch` \n\n```python\nunpack_batch(args)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | a batch of model outputs |\n\nUnpack a batch into lines of tensor output.\n\n```python\nunpack_batch(torch.randn(1, 10))[0].shape\n# torch.Size([10])\nout = unpack_batch([torch.randn(2, 10), torch.randn(2, 3, 5)])\ntype(out)\n# \nlen(out)\n# 2\nout = unpack_batch({'a': torch.randn(2, 10), 'b': torch.randn(2, 3, 5)})\n[type(x) for x in out]\n# [, ]\nout[0]['a'].shape\n# torch.Size([10])\nout[0]['b'].shape\n# torch.Size([3, 5])\nout = unpack_batch({'a': {'b': torch.randn(2, 10)}})\nout[0]['a']['b'].shape\n# torch.Size([10])\nout[1]['a']['b'].shape\n# torch.Size([10])\n```\n\n## `TorchModel` \n\n```python\nTorchModel(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n preferred_devices: 't.Sequence[str]' = ('cuda',\n 'mps',\n 'cpu'),\n device: 't.Optional[str]' = None,\n trainer: 't.Optional[Trainer]' = None,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: 'Signature' = '*args,\n **kwargs',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n object: 'torch.nn.Module',\n preprocess: 't.Optional[t.Callable]' = None,\n preprocess_signature: 'Signature' = 'singleton',\n postprocess: 't.Optional[t.Callable]' = None,\n postprocess_signature: 'Signature' = 'singleton',\n forward_method: 'str' = '__call__',\n forward_signature: 'Signature' = 'singleton',\n train_forward_method: 'str' = '__call__',\n train_forward_signature: 'Signature' = 'singleton',\n train_preprocess: 't.Optional[t.Callable]' = None,\n train_preprocess_signature: 'Signature' = 'singleton',\n collate_fn: 't.Optional[t.Callable]' = None,\n optimizer_state: 't.Optional[t.Any]' = None,\n loader_kwargs: 't.Dict' = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| object | Torch model, e.g. `torch.nn.Module` |\n| preprocess | Preprocess function, the function to apply to the input |\n| preprocess_signature | The signature of the preprocess function |\n| postprocess | The postprocess function, the function to apply to the output |\n| postprocess_signature | The signature of the postprocess function |\n| forward_method | The forward method, the method to call on the model |\n| forward_signature | The signature of the forward method |\n| train_forward_method | Train forward method, the method to call on the model |\n| train_forward_signature | The signature of the train forward method |\n| train_preprocess | Train preprocess function, the function to apply to the input |\n| train_preprocess_signature | The signature of the train preprocess function |\n| collate_fn | The collate function for the dataloader |\n| optimizer_state | The optimizer state |\n| loader_kwargs | The kwargs for the dataloader |\n| trainer | `Trainer` object to train the model |\n| preferred_devices | The order of devices to use |\n| device | The device to be used |\n\nTorch model. This class is a wrapper around a PyTorch model.\n\n## `BasicDataset` \n\n```python\nBasicDataset(self,\n items,\n transform,\n signature)\n```\n| Parameter | Description |\n|-----------|-------------|\n| items | items, typically documents |\n| transform | function, typically a preprocess function |\n| signature | signature of the transform function |\n\nBasic database iterating over a list of documents and applying a transformation.\n\n", - "**`superduper.ext.torch.utils`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/torch/utils.py)\n\n## `device_of` \n\n```python\ndevice_of(module: 'Module') -> 't.Union[_device,\n str]'\n```\n| Parameter | Description |\n|-----------|-------------|\n| module | PyTorch model |\n\nGet device of a model.\n\n## `eval` \n\n```python\neval(module: 'Module') -> 't.Iterator[None]'\n```\n| Parameter | Description |\n|-----------|-------------|\n| module | PyTorch module |\n\nTemporarily set a module to evaluation mode.\n\n## `to_device` \n\n```python\nto_device(item: 't.Any',\n device: 't.Union[str,\n _device]') -> 't.Any'\n```\n| Parameter | Description |\n|-----------|-------------|\n| item | torch.Tensor instance |\n| device | device to which one would like to send |\n\nSend tensor leaves of nested list/ dictionaries/ tensors to device.\n\n## `set_device` \n\n```python\nset_device(module: 'Module',\n device: '_device')\n```\n| Parameter | Description |\n|-----------|-------------|\n| module | PyTorch module |\n| device | Device to set |\n\nTemporarily set a device of a module.\n\n", - "**`superduper.ext.torch.training`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/torch/training.py)\n\n## `TorchTrainer` \n\n```python\nTorchTrainer(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n key: 'ModelInputType',\n select: 'Query',\n transform: 't.Optional[t.Callable]' = None,\n metric_values: Dict = None,\n signature: 'Signature' = '*args',\n data_prefetch: 'bool' = False,\n prefetch_size: 'int' = 1000,\n prefetch_factor: 'int' = 100,\n in_memory: 'bool' = True,\n compute_kwargs: 't.Dict' = None,\n objective: Callable,\n loader_kwargs: Dict = None,\n max_iterations: int = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,\n no_improve_then_stop: int = 5,\n download: bool = False,\n validation_interval: int = 100,\n listen: str = 'objective',\n optimizer_cls: str = 'Adam',\n optimizer_kwargs: Dict = None,\n optimizer_state: Optional[Dict] = None,\n collate_fn: Optional[Callable] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| key | Model input type key. |\n| select | Model select query for training. |\n| transform | (optional) transform callable. |\n| metric_values | Metric values |\n| signature | Model signature. |\n| data_prefetch | Boolean for prefetching data before forward pass. |\n| prefetch_size | Prefetch batch size. |\n| prefetch_factor | Prefetch factor for data prefetching. |\n| in_memory | If training in memory. |\n| compute_kwargs | Kwargs for compute backend. |\n| objective | Objective function |\n| loader_kwargs | Kwargs for the dataloader |\n| max_iterations | Maximum number of iterations |\n| no_improve_then_stop | Number of iterations to wait for improvement before stopping |\n| download | Whether to download the data |\n| validation_interval | How often to validate |\n| listen | Which metric to listen to for early stopping |\n| optimizer_cls | Optimizer class |\n| optimizer_kwargs | Kwargs for the optimizer |\n| optimizer_state | Latest state of the optimizer for contined training |\n| collate_fn | Collate function for the dataloader |\n\nConfiguration for the PyTorch trainer.\n\n", - "**`superduper.ext.torch.encoder`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/torch/encoder.py)\n\n## `tensor` \n\n```python\ntensor(dtype,\n shape: Sequence,\n bytes_encoding: Optional[str] = None,\n encodable: str = 'encodable',\n db: Optional[ForwardRef('Datalayer')] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| dtype | The dtype of the tensor. |\n| shape | The shape of the tensor. |\n| bytes_encoding | The bytes encoding to use. |\n| encodable | The encodable name [\"artifact\", \"encodable\", \"lazy_artifact\", \"file\"]. |\n| db | The datalayer instance. |\n\nCreate an encoder for a tensor of a given dtype and shape.\n\n## `DecodeTensor` \n\n```python\nDecodeTensor(self,\n dtype,\n shape)\n```\n| Parameter | Description |\n|-----------|-------------|\n| dtype | The dtype of the tensor, eg. torch.float32 |\n| shape | The shape of the tensor, eg. (3, 4) |\n\nDecode a tensor from bytes.\n\n## `EncodeTensor` \n\n```python\nEncodeTensor(self,\n dtype)\n```\n| Parameter | Description |\n|-----------|-------------|\n| dtype | The dtype of the tensor, eg. torch.float32 |\n\nEncode a tensor to bytes.\n\n", - "**`superduper.ext.vllm.model`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/vllm/model.py)\n\n## `VllmAPI` \n\n```python\nVllmAPI(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n api_url: str = '',\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: str = 'singleton',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n prompt: str = '{input}',\n prompt_func: Optional[Callable] = None,\n max_batch_size: Optional[int] = 4) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| prompt | The template to use for the prompt. |\n| prompt_func | The function to use for the prompt. |\n| max_batch_size | The maximum batch size to use for batch generation. |\n| api_url | The URL for the API. |\n\nWrapper for requesting the vLLM API service.\n\nAPI Server format, started by `vllm.entrypoints.api_server`.\n\n## `VllmModel` \n\n```python\nVllmModel(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: str = 'singleton',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n prompt: str = '{input}',\n prompt_func: Optional[Callable] = None,\n max_batch_size: Optional[int] = 4,\n model_name: str = '',\n tensor_parallel_size: int = 1,\n trust_remote_code: bool = True,\n vllm_kwargs: dict = None,\n on_ray: bool = False,\n ray_address: Optional[str] = None,\n ray_config: dict = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| prompt | The template to use for the prompt. |\n| prompt_func | The function to use for the prompt. |\n| max_batch_size | The maximum batch size to use for batch generation. |\n| model_name | The name of the model to use. |\n| tensor_parallel_size | The number of tensor parallelism. |\n| trust_remote_code | Whether to trust remote code. |\n| vllm_kwargs | Additional arguments to pass to the VLLM |\n| on_ray | Whether to use Ray for parallelism. |\n| ray_address | The address of the Ray cluster. |\n| ray_config | The configuration for Ray. |\n\nLoad a large language model from VLLM.\n\n", - "**`superduper.ext.numpy.encoder`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/numpy/encoder.py)\n\n## `array` \n\n```python\narray(dtype: str,\n shape: Sequence,\n bytes_encoding: Optional[str] = None,\n encodable: str = 'encodable')\n```\n| Parameter | Description |\n|-----------|-------------|\n| dtype | The dtype of the array. |\n| shape | The shape of the array. |\n| bytes_encoding | The bytes encoding to use. |\n| encodable | The encodable to use. |\n\nCreate an encoder of numpy arrays.\n\n## `DecodeArray` \n\n```python\nDecodeArray(self,\n dtype,\n shape)\n```\n| Parameter | Description |\n|-----------|-------------|\n| dtype | The dtype of the array. |\n| shape | The shape of the array. |\n\nDecode a numpy array from bytes.\n\n## `EncodeArray` \n\n```python\nEncodeArray(self,\n dtype)\n```\n| Parameter | Description |\n|-----------|-------------|\n| dtype | The dtype of the array. |\n\nEncode a numpy array to bytes.\n\n", - "**`superduper.ext.sklearn.model`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/sklearn/model.py)\n\n## `Estimator` \n\n```python\nEstimator(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n trainer: Optional[superduper.ext.sklearn.model.SklearnTrainer] = None,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: Literal['*args',\n '**kwargs',\n '*args,\n **kwargs',\n 'singleton'] = 'singleton',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n object: sklearn.base.BaseEstimator,\n preprocess: Optional[Callable] = None,\n postprocess: Optional[Callable] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| object | The estimator object from `sklearn`. |\n| trainer | The trainer to use. |\n| preprocess | The preprocessing function to use. |\n| postprocess | The postprocessing function to use. |\n\nEstimator model.\n\nThis is a model that can be trained and used for prediction.\n\n## `SklearnTrainer` \n\n```python\nSklearnTrainer(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n key: 'ModelInputType',\n select: 'Query',\n transform: 't.Optional[t.Callable]' = None,\n metric_values: 't.Dict' = None,\n signature: 'Signature' = '*args',\n data_prefetch: 'bool' = False,\n prefetch_size: 'int' = 1000,\n prefetch_factor: 'int' = 100,\n in_memory: 'bool' = True,\n compute_kwargs: 't.Dict' = None,\n fit_params: Dict = None,\n predict_params: Dict = None,\n y_preprocess: Optional[Callable] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| key | Model input type key. |\n| select | Model select query for training. |\n| transform | (optional) transform callable. |\n| metric_values | Dictionary for metric defaults. |\n| signature | Model signature. |\n| data_prefetch | Boolean for prefetching data before forward pass. |\n| prefetch_size | Prefetch batch size. |\n| prefetch_factor | Prefetch factor for data prefetching. |\n| in_memory | If training in memory. |\n| compute_kwargs | Kwargs for compute backend. |\n| fit_params | The parameters to pass to `fit`. |\n| predict_params | The parameters to pass to `predict |\n| y_preprocess | The preprocessing function to use for the target. |\n\nA trainer for `sklearn` models.\n\n", - "**`superduper.ext.pillow.encoder`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/pillow/encoder.py)\n\n## `encode_pil_image` \n\n```python\nencode_pil_image(x,\n info: Optional[Dict] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| x | The image to encode. |\n| info | Additional information. |\n\nEncode a `PIL.Image` to bytes.\n\n## `image_type` \n\n```python\nimage_type(identifier: str,\n encodable: str = 'lazy_artifact',\n media_type: str = 'image/png',\n db: Optional[ForwardRef('Datalayer')] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | The identifier for the data type. |\n| encodable | The encodable type. |\n| media_type | The media type. |\n| db | The datalayer instance. |\n\nCreate a `DataType` for an image.\n\n## `DecoderPILImage` \n\n```python\nDecoderPILImage(self,\n handle_exceptions: bool = True)\n```\n| Parameter | Description |\n|-----------|-------------|\n| handle_exceptions | return a blank image if failure |\n\nDecoder to convert `bytes` back into a `PIL.Image` class.\n\n", - "**`superduper.ext.transformers.model`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/transformers/model.py)\n\n## `LLM` \n\n```python\nLLM(self,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n trainer: 't.Optional[Trainer]' = None,\n identifier: str = '',\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n prompt: str = '{input}',\n prompt_func: Optional[Callable] = None,\n max_batch_size: Optional[int] = 4,\n model_name_or_path: Optional[str] = None,\n adapter_id: Union[str,\n superduper.ext.transformers.training.Checkpoint,\n NoneType] = None,\n model_kwargs: Dict = None,\n tokenizer_kwargs: Dict = None,\n prompt_template: str = '{input}') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | model identifier |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| prompt | The template to use for the prompt. |\n| prompt_func | prompt function, default is None |\n| max_batch_size | The maximum batch size to use for batch generation. |\n| model_name_or_path | model name or path |\n| adapter_id | adapter id, default is None Add a adapter to the base model for inference. |\n| model_kwargs | model kwargs, all the kwargs will pass to `transformers.AutoModelForCausalLM.from_pretrained` |\n| tokenizer_kwargs | tokenizer kwargs, all the kwargs will pass to `transformers.AutoTokenizer.from_pretrained` |\n| prompt_template | prompt template, default is `\"{input}\"` |\n\nLLM model based on `transformers` library.\n\nAll the `model_kwargs` will pass to\n`transformers.AutoModelForCausalLM.from_pretrained`.\nAll the `tokenize_kwargs` will pass to\n`transformers.AutoTokenizer.from_pretrained`.\nWhen `model_name_or_path`, `bits`, `model_kwargs`, `tokenizer_kwargs` are the same,\nwill share the same base model and tokenizer cache.\n\n## `TextClassificationPipeline` \n\n```python\nTextClassificationPipeline(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n preferred_devices: 't.Sequence[str]' = ('cuda',\n 'mps',\n 'cpu'),\n device: 't.Optional[str]' = None,\n trainer: 't.Optional[Trainer]' = None,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: Literal['*args',\n '**kwargs',\n '*args,\n **kwargs',\n 'singleton'] = 'singleton',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n tokenizer_name: Optional[str] = None,\n tokenizer_cls: object = ,\n tokenizer_kwargs: Dict = None,\n model_name: Optional[str] = None,\n model_cls: object = ,\n model_kwargs: Dict = None,\n pipeline: Optional[transformers.pipelines.base.Pipeline] = None,\n task: str = 'text-classification') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| tokenizer_name | tokenizer name |\n| tokenizer_cls | tokenizer class, e.g. ``transformers.AutoTokenizer`` |\n| tokenizer_kwargs | tokenizer kwargs, will pass to ``tokenizer_cls`` |\n| model_name | model name, will pass to ``model_cls`` |\n| model_cls | model class, e.g. ``AutoModelForSequenceClassification`` |\n| model_kwargs | model kwargs, will pass to ``model_cls`` |\n| pipeline | pipeline instance, default is None, will build when None |\n| task | task of the pipeline |\n| trainer | `TransformersTrainer` instance |\n| preferred_devices | preferred devices |\n| device | device to use |\n\nA wrapper for ``transformers.Pipeline``.\n\n```python\n# Example:\n# -------\nmodel = TextClassificationPipeline(...)\n```\n\n", - "**`superduper.ext.transformers.training`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/transformers/training.py)\n\n## `create_quantization_config` \n\n```python\ncreate_quantization_config(config: superduper.ext.transformers.training.LLMTrainer)\n```\n| Parameter | Description |\n|-----------|-------------|\n| config | The configuration to use. |\n\nCreate quantization config for LLM training.\n\n## `handle_ray_results` \n\n```python\nhandle_ray_results(db,\n llm,\n results)\n```\n| Parameter | Description |\n|-----------|-------------|\n| db | datalayer, used for saving the checkpoint |\n| llm | llm model, used for saving the checkpoint |\n| results | the ray training results, contains the checkpoint |\n\nHandle the ray results.\n\nWill save the checkpoint to db if db and llm provided.\n\n## `prepare_lora_training` \n\n```python\nprepare_lora_training(model,\n config: superduper.ext.transformers.training.LLMTrainer)\n```\n| Parameter | Description |\n|-----------|-------------|\n| model | The model to prepare for LoRA training. |\n| config | The configuration to use. |\n\nPrepare LoRA training for the model.\n\nGet the LoRA target modules and convert the model to peft model.\n\n## `train_func` \n\n```python\ntrain_func(training_args: superduper.ext.transformers.training.LLMTrainer,\n train_dataset: 'Dataset',\n eval_datasets: Union[ForwardRef('Dataset'),\n Dict[str,\n ForwardRef('Dataset')]],\n model_kwargs: dict,\n tokenizer_kwargs: dict,\n trainer_prepare_func: Optional[Callable] = None,\n callbacks=None,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| training_args | training Arguments, see LLMTrainingArguments |\n| train_dataset | training dataset, can be huggingface datasets.Dataset or ray.data.Dataset |\n| eval_datasets | evaluation dataset, can be a dict of datasets |\n| model_kwargs | model kwargs for AutoModelForCausalLM |\n| tokenizer_kwargs | tokenizer kwargs for AutoTokenizer |\n| trainer_prepare_func | function to prepare trainer This function will be called after the trainer is created, we can add some custom settings to the trainer |\n| callbacks | list of callbacks will be added to the trainer |\n| kwargs | other kwargs for Trainer All the kwargs will be passed to Trainer, make sure the Trainer support these kwargs |\n\nBase training function for LLM model.\n\n## `tokenize` \n\n```python\ntokenize(tokenizer,\n example,\n X,\n y)\n```\n| Parameter | Description |\n|-----------|-------------|\n| tokenizer | The tokenizer to use. |\n| example | The example to tokenize. |\n| X | The input key. |\n| y | The output key. |\n\nFunction to tokenize the example.\n\n## `train` \n\n```python\ntrain(training_args: superduper.ext.transformers.training.LLMTrainer,\n train_dataset: datasets.arrow_dataset.Dataset,\n eval_datasets: Union[datasets.arrow_dataset.Dataset,\n Dict[str,\n datasets.arrow_dataset.Dataset]],\n model_kwargs: dict,\n tokenizer_kwargs: dict,\n db: Optional[ForwardRef('Datalayer')] = None,\n llm: Optional[ForwardRef('LLM')] = None,\n ray_configs: Optional[dict] = None,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| training_args | training Arguments, see LLMTrainingArguments |\n| train_dataset | training dataset |\n| eval_datasets | evaluation dataset, can be a dict of datasets |\n| model_kwargs | model kwargs for AutoModelForCausalLM |\n| tokenizer_kwargs | tokenizer kwargs for AutoTokenizer |\n| db | datalayer, used for creating LLMCallback |\n| llm | llm model, used for creating LLMCallback |\n| ray_configs | ray configs, must provide if using ray |\n| kwargs | other kwargs for Trainer |\n\nTrain LLM model on specified dataset.\n\nThe training process can be run on these following modes:\n- Local node without ray, but only support single GPU\n- Local node with ray, support multi-nodes and multi-GPUs\n- Remote node with ray, support multi-nodes and multi-GPUs\n\nIf run locally, will use train_func to train the model.\nCan log the training process to db if db and llm provided.\nWill reuse the db and llm from the current process.\nIf run on ray, will use ray_train to train the model.\nCan log the training process to db if db and llm provided.\nWill rebuild the db and llm for the new process that can access to db.\nThe ray cluster must can access to db.\n\n## `Checkpoint` \n\n```python\nCheckpoint(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n path: Optional[str],\n step: int) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| path | The path to the checkpoint. |\n| step | The step of the checkpoint. |\n\nCheckpoint component for saving the model checkpoint.\n\n## `LLMCallback` \n\n```python\nLLMCallback(self,\n cfg: Optional[ForwardRef('Config')] = None,\n identifier: Optional[str] = None,\n db: Optional[ForwardRef('Datalayer')] = None,\n llm: Optional[ForwardRef('LLM')] = None,\n experiment_id: Optional[str] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| cfg | The configuration to use. |\n| identifier | The identifier to use. |\n| db | The datalayer to use. |\n| llm | The LLM model to use. |\n| experiment_id | The experiment id to use. |\n\nLLM Callback for logging training process to db.\n\nThis callback will save the checkpoint to db after each epoch.\nIf the save_total_limit is set, will remove the oldest checkpoint.\n\n", - "**`superduper.ext.anthropic.model`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/anthropic/model.py)\n\n## `AnthropicCompletions` \n\n```python\nAnthropicCompletions(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: 'Signature' = '*args,\n **kwargs',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n model: 't.Optional[str]' = None,\n max_batch_size: 'int' = 8,\n client_kwargs: Dict[str,\n Any] = None,\n prompt: str = '') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| model | The Model to use, e.g. ``'text-embedding-ada-002'`` |\n| max_batch_size | Maximum batch size. |\n| client_kwargs | The keyword arguments to pass to the client. |\n| prompt | The prompt to use to seed the response. |\n\nCohere completions (chat) predictor.\n\n## `Anthropic` \n\n```python\nAnthropic(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: 'Signature' = '*args,\n **kwargs',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n model: 't.Optional[str]' = None,\n max_batch_size: 'int' = 8,\n client_kwargs: Dict[str,\n Any] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| model | The Model to use, e.g. ``'text-embedding-ada-002'`` |\n| max_batch_size | Maximum batch size. |\n| client_kwargs | The keyword arguments to pass to the client. |\n\nAnthropic predictor.\n\n", - "**`superduper.ext.jina.model`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/jina/model.py)\n\n## `JinaEmbedding` \n\n```python\nJinaEmbedding(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: str = 'singleton',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n model: 't.Optional[str]' = None,\n max_batch_size: 'int' = 8,\n api_key: Optional[str] = None,\n batch_size: int = 100,\n shape: Optional[Sequence[int]] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| model | The Model to use, e.g. ``'text-embedding-ada-002'`` |\n| max_batch_size | Maximum batch size. |\n| api_key | The API key to use for the predicto |\n| batch_size | The batch size to use for the predictor. |\n| shape | The shape of the embedding as ``tuple``. If not provided, it will be obtained by sending a simple query to the API |\n\nJina embedding predictor.\n\n## `Jina` \n\n```python\nJina(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: 'Signature' = '*args,\n **kwargs',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n model: 't.Optional[str]' = None,\n max_batch_size: 'int' = 8,\n api_key: Optional[str] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| model | The Model to use, e.g. ``'text-embedding-ada-002'`` |\n| max_batch_size | Maximum batch size. |\n| api_key | The API key to use for the predicto |\n\nCohere predictor.\n\n", - "**`superduper.ext.jina.client`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/jina/client.py)\n\n## `JinaAPIClient` \n\n```python\nJinaAPIClient(self,\n api_key: Optional[str] = None,\n model_name: str = 'jina-embeddings-v2-base-en')\n```\n| Parameter | Description |\n|-----------|-------------|\n| api_key | The Jina API key. It can be explicitly provided or automatically read from the environment variable JINA_API_KEY (recommended). |\n| model_name | The name of the Jina model to use. Check the list of available models on `https://jina.ai/embeddings/` |\n\nA client for the Jina Embedding platform.\n\nCreate a JinaAPIClient to provide an interface to encode using\nJina Embedding platform sync and async.\n\n", - "**`superduper.ext.openai.model`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/ext/openai/model.py)\n\n## `OpenAIChatCompletion` \n\n```python\nOpenAIChatCompletion(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: str = 'singleton',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n model: 't.Optional[str]' = None,\n max_batch_size: 'int' = 8,\n openai_api_key: Optional[str] = None,\n openai_api_base: Optional[str] = None,\n client_kwargs: Optional[dict] = None,\n batch_size: int = 1,\n prompt: str = '') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| model | The Model to use, e.g. ``'text-embedding-ada-002'`` |\n| max_batch_size | Maximum batch size. |\n| openai_api_key | The OpenAI API key. |\n| openai_api_base | The server to use for requests. |\n| client_kwargs | The kwargs to be passed to OpenAI |\n| batch_size | The batch size to use. |\n| prompt | The prompt to use to seed the response. |\n\nOpenAI chat completion predictor.\n\n## `OpenAIEmbedding` \n\n```python\nOpenAIEmbedding(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: str = 'singleton',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n model: 't.Optional[str]' = None,\n max_batch_size: 'int' = 8,\n openai_api_key: Optional[str] = None,\n openai_api_base: Optional[str] = None,\n client_kwargs: Optional[dict] = None,\n shape: Optional[Sequence[int]] = None,\n batch_size: int = 100) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| model | The Model to use, e.g. ``'text-embedding-ada-002'`` |\n| max_batch_size | Maximum batch size. |\n| openai_api_key | The OpenAI API key. |\n| openai_api_base | The server to use for requests. |\n| client_kwargs | The kwargs to be passed to OpenAI |\n| shape | The shape as ``tuple`` of the embedding. |\n| batch_size | The batch size to use. |\n\nOpenAI embedding predictor.\n\n## `OpenAIAudioTranscription` \n\n```python\nOpenAIAudioTranscription(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: 'Signature' = '*args,\n **kwargs',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n model: 't.Optional[str]' = None,\n max_batch_size: 'int' = 8,\n openai_api_key: Optional[str] = None,\n openai_api_base: Optional[str] = None,\n client_kwargs: Optional[dict] = None,\n takes_context: bool = True,\n prompt: str = '') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| model | The Model to use, e.g. ``'text-embedding-ada-002'`` |\n| max_batch_size | Maximum batch size. |\n| openai_api_key | The OpenAI API key. |\n| openai_api_base | The server to use for requests. |\n| client_kwargs | The kwargs to be passed to OpenAI |\n| takes_context | Whether the model takes context into account. |\n| prompt | The prompt to guide the model's style. |\n\nOpenAI audio transcription predictor.\n\nThe prompt should contain the `\"context\"` format variable.\n\n## `OpenAIAudioTranslation` \n\n```python\nOpenAIAudioTranslation(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: str = 'singleton',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n model: 't.Optional[str]' = None,\n max_batch_size: 'int' = 8,\n openai_api_key: Optional[str] = None,\n openai_api_base: Optional[str] = None,\n client_kwargs: Optional[dict] = None,\n takes_context: bool = True,\n prompt: str = '',\n batch_size: int = 1) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| model | The Model to use, e.g. ``'text-embedding-ada-002'`` |\n| max_batch_size | Maximum batch size. |\n| openai_api_key | The OpenAI API key. |\n| openai_api_base | The server to use for requests. |\n| client_kwargs | The kwargs to be passed to OpenAI |\n| takes_context | Whether the model takes context into account. |\n| prompt | The prompt to guide the model's style. |\n| batch_size | The batch size to use. |\n\nOpenAI audio translation predictor.\n\nThe prompt should contain the `\"context\"` format variable.\n\n## `OpenAIImageCreation` \n\n```python\nOpenAIImageCreation(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: str = 'singleton',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n model: 't.Optional[str]' = None,\n max_batch_size: 'int' = 8,\n openai_api_key: Optional[str] = None,\n openai_api_base: Optional[str] = None,\n client_kwargs: Optional[dict] = None,\n takes_context: bool = True,\n prompt: str = '',\n n: int = 1,\n response_format: str = 'b64_json') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| model | The Model to use, e.g. ``'text-embedding-ada-002'`` |\n| max_batch_size | Maximum batch size. |\n| openai_api_key | The OpenAI API key. |\n| openai_api_base | The server to use for requests. |\n| client_kwargs | The kwargs to be passed to OpenAI |\n| takes_context | Whether the model takes context into account. |\n| prompt | The prompt to use to seed the response. |\n| n | The number of images to generate. |\n| response_format | The response format to use. |\n\nOpenAI image creation predictor.\n\n## `OpenAIImageEdit` \n\n```python\nOpenAIImageEdit(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: 'Signature' = '*args,\n **kwargs',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n model: 't.Optional[str]' = None,\n max_batch_size: 'int' = 8,\n openai_api_key: Optional[str] = None,\n openai_api_base: Optional[str] = None,\n client_kwargs: Optional[dict] = None,\n takes_context: bool = True,\n prompt: str = '',\n response_format: str = 'b64_json',\n n: int = 1) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| model | The Model to use, e.g. ``'text-embedding-ada-002'`` |\n| max_batch_size | Maximum batch size. |\n| openai_api_key | The OpenAI API key. |\n| openai_api_base | The server to use for requests. |\n| client_kwargs | The kwargs to be passed to OpenAI |\n| takes_context | Whether the model takes context into account. |\n| prompt | The prompt to use to seed the response. |\n| response_format | The response format to use. |\n| n | The number of images to generate. |\n\nOpenAI image edit predictor.\n\n", - "**`superduper.components.stack`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper.components/stack.py)\n\n## `Stack` \n\n```python\nStack(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n components: Sequence[superduper.components.component.Component]) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| components | List of components to stack together and add to database. |\n\nA placeholder to hold list of components under a namespace.\n\n", - "**`superduper.components.plugin`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper.components/plugin.py)\n\n## `Plugin` \n\n```python\nPlugin(self,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: None = None,\n *,\n identifier: str = '',\n plugins: \"t.Optional[t.List['Plugin']]\" = None,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n path: str,\n cache_path: str = '.superduper/plugins') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Unique identifier for the plugin. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| plugins | A list of plugins to be used in the component. |\n| path | Path to the plugin package or module. |\n| cache_path | Path to the cache directory where the plugin will be stored. |\n\nPlugin component allows to install and use external python packages as plugins.\n\n", - "**`superduper.components.template`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper.components/template.py)\n\n## `Template` \n\n```python\nTemplate(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n component: Union[superduper.components.component.Component,\n Dict],\n info: Optional[Dict] = None,\n _component_blobs: Union[Dict,\n bytes,\n NoneType] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| component | Template component with variables. |\n| info | Info. |\n| _component_blobs | Blobs in `Template.component` NOTE: This is only for internal use. |\n\nApplication template component.\n\n", - "**`superduper.components.metric`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper.components/metric.py)\n\n## `Metric` \n\n```python\nMetric(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n object: Callable) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| object | Callable or an Artifact to be applied to the data. |\n\nMetric base object used to evaluate performance on a dataset.\n\nThese objects are callable and are applied row-wise to the data, and averaged.\n\n", - "**`superduper.components.application`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper.components/application.py)\n\n## `Application` \n\n```python\nApplication(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n template: Union[superduper.components.template.Template,\n str] = None,\n kwargs: Dict) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| template | Template. |\n| kwargs | Keyword arguments passed to `template`. |\n\nApplication built from template.\n\n", - "**`superduper.components.dataset`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper.components/dataset.py)\n\n## `Dataset` \n\n```python\nDataset(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: None = None,\n *,\n upstream: \"t.Optional[t.List['Component']]\" = None,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n select: 't.Optional[Query]' = None,\n sample_size: 't.Optional[int]' = None,\n random_seed: 't.Optional[int]' = None,\n creation_date: 't.Optional[str]' = None,\n raw_data: 't.Optional[t.Sequence[t.Any]]' = None,\n pin: 'bool' = False) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| select | A query to select the documents for the dataset. |\n| sample_size | The number of documents to sample from the query. |\n| random_seed | The random seed to use for sampling. |\n| creation_date | The date the dataset was created. |\n| raw_data | The raw data for the dataset. |\n| pin | Whether to pin the dataset. If True, the dataset will load the datas from the database every time. If False, the dataset will cache the datas after we apply to db. |\n\nA dataset is an immutable collection of documents.\n\n## `DataInit` \n\n```python\nDataInit(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: None = None,\n *,\n upstream: \"t.Optional[t.List['Component']]\" = None,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n data: 't.List[t.Dict]',\n table: 'str') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n\nDataInit(identifier: str, db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None, uuid: None = None, *, upstream: \"t.Optional[t.List['Component']]\" = None, artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None, data: 't.List[t.Dict]', table: 'str')\n\n", - "**`superduper.components.model`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper.components/model.py)\n\n## `codemodel` \n\n```python\ncodemodel(item: 't.Optional[t.Callable]' = None,\n identifier: 't.Optional[str]' = None,\n datatype=None,\n model_update_kwargs: 't.Optional[t.Dict]' = None,\n flatten: 'bool' = False,\n output_schema: 't.Optional[Schema]' = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| item | Callable to wrap with `CodeModel`. |\n| identifier | Identifier for the `CodeModel`. |\n| datatype | Datatype for the model outputs. |\n| model_update_kwargs | Dictionary to define update kwargs. |\n| flatten | If `True`, flatten the outputs and save. |\n| output_schema | Schema for the model outputs. |\n\nDecorator to wrap a function with `CodeModel`.\n\nWhen a function is wrapped with this decorator,\nthe function comes out as a `CodeModel`.\n\n## `model` \n\n```python\nmodel(item: 't.Optional[t.Callable]' = None,\n identifier: 't.Optional[str]' = None,\n datatype=None,\n model_update_kwargs: 't.Optional[t.Dict]' = None,\n flatten: 'bool' = False,\n output_schema: 't.Optional[Schema]' = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| item | Callable to wrap with `ObjectModel`. |\n| identifier | Identifier for the `ObjectModel`. |\n| datatype | Datatype for the model outputs. |\n| model_update_kwargs | Dictionary to define update kwargs. |\n| flatten | If `True`, flatten the outputs and save. |\n| output_schema | Schema for the model outputs. |\n\nDecorator to wrap a function with `ObjectModel`.\n\nWhen a function is wrapped with this decorator,\nthe function comes out as an `ObjectModel`.\n\n## `CodeModel` \n\n```python\nCodeModel(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: 'Signature' = '*args,\n **kwargs',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n num_workers: 'int' = 0,\n object: 'Code') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| num_workers | Number of workers to use for parallel processing |\n| object | Code object |\n\nModel component which stores a code object.\n\n## `Model` \n\n```python\nModel(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: 'Signature' = '*args,\n **kwargs',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n\nBase class for components which can predict.\n\n## `ObjectModel` \n\n```python\nObjectModel(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: 'Signature' = '*args,\n **kwargs',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n num_workers: 'int' = 0,\n object: 't.Any') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| num_workers | Number of workers to use for parallel processing |\n| object | Model/ computation object |\n\nModel component which wraps a Model to become serializable.\n\n```python\n# Example:\n# -------\nm = ObjectModel('test', lambda x: x + 2)\nm.predict(2)\n# 4\n```\n\n## `QueryModel` \n\n```python\nQueryModel(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: 'Signature' = '**kwargs',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n preprocess: 't.Optional[t.Callable]' = None,\n postprocess: 't.Optional[t.Union[t.Callable]]' = None,\n select: 'Query') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| preprocess | Preprocess callable |\n| postprocess | Postprocess callable |\n| select | query used to find data (can include `like`) |\n\nQueryModel component.\n\nModel which can be used to query data and return those\nprecomputed queries as Results.\n\n## `Validation` \n\n```python\nValidation(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n metrics: 't.Sequence[Metric]' = (),\n key: 't.Optional[ModelInputType]' = None,\n datasets: 't.Sequence[Dataset]' = ()) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| metrics | List of metrics for validation |\n| key | Model input type key |\n| datasets | Sequence of dataset. |\n\ncomponent which represents Validation definition.\n\n## `Mapping` \n\n```python\nMapping(self,\n mapping: 'ModelInputType',\n signature: 'Signature')\n```\n| Parameter | Description |\n|-----------|-------------|\n| mapping | Mapping that represents a collection or table map. |\n| signature | Signature for the model. |\n\nClass to represent model inputs for mapping database collections or tables.\n\n## `APIBaseModel` \n\n```python\nAPIBaseModel(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: 'Signature' = '*args,\n **kwargs',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n model: 't.Optional[str]' = None,\n max_batch_size: 'int' = 8) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| model | The Model to use, e.g. ``'text-embedding-ada-002'`` |\n| max_batch_size | Maximum batch size. |\n\nAPIBaseModel component which is used to make the type of API request.\n\n## `APIModel` \n\n```python\nAPIModel(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: 'Signature' = '*args,\n **kwargs',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n model: 't.Optional[str]' = None,\n max_batch_size: 'int' = 8,\n url: 'str',\n postprocess: 't.Optional[t.Callable]' = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| model | The Model to use, e.g. ``'text-embedding-ada-002'`` |\n| max_batch_size | Maximum batch size. |\n| url | The url to use for the API request |\n| postprocess | Postprocess function to use on the output of the API request |\n\nAPIModel component which is used to make the type of API request.\n\n## `CallableInputs` \n\n```python\nCallableInputs(self,\n fn,\n predict_kwargs: 't.Dict' = {})\n```\n| Parameter | Description |\n|-----------|-------------|\n| fn | Callable function |\n| predict_kwargs | (optional) predict_kwargs if provided in Model initiation |\n\nClass represents the model callable args and kwargs.\n\n## `IndexableNode` \n\n```python\nIndexableNode(self,\n types: 't.Sequence[t.Type]') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| types | Sequence of types |\n\nBase indexable node for `ObjectModel`.\n\n## `Inputs` \n\n```python\nInputs(self,\n params)\n```\n| Parameter | Description |\n|-----------|-------------|\n| params | List of parameters of the Model object |\n\nBase class to represent the model args and kwargs.\n\n## `SequentialModel` \n\n```python\nSequentialModel(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n signature: 'Signature' = '*args,\n **kwargs',\n datatype: 'EncoderArg' = None,\n output_schema: 't.Optional[Schema]' = None,\n flatten: 'bool' = False,\n model_update_kwargs: 't.Dict' = None,\n predict_kwargs: 't.Dict' = None,\n compute_kwargs: 't.Dict' = None,\n validation: 't.Optional[Validation]' = None,\n metric_values: 't.Dict' = None,\n models: 't.List[Model]') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| signature | Model signature. |\n| datatype | DataType instance. |\n| output_schema | Output schema (mapping of encoders). |\n| flatten | Flatten the model outputs. |\n| model_update_kwargs | The kwargs to use for model update. |\n| predict_kwargs | Additional arguments to use at prediction time. |\n| compute_kwargs | Kwargs used for compute backend job submit. Example (Ray backend): compute_kwargs = dict(resources=...). |\n| validation | The validation ``Dataset`` instances to use. |\n| metric_values | The metrics to evaluate on. |\n| models | A list of models to use |\n\nSequential model component which wraps a model to become serializable.\n\n## `Trainer` \n\n```python\nTrainer(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n key: 'ModelInputType',\n select: 'Query',\n transform: 't.Optional[t.Callable]' = None,\n metric_values: 't.Dict' = None,\n signature: 'Signature' = '*args',\n data_prefetch: 'bool' = False,\n prefetch_size: 'int' = 1000,\n prefetch_factor: 'int' = 100,\n in_memory: 'bool' = True,\n compute_kwargs: 't.Dict' = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| key | Model input type key. |\n| select | Model select query for training. |\n| transform | (optional) transform callable. |\n| metric_values | Dictionary for metric defaults. |\n| signature | Model signature. |\n| data_prefetch | Boolean for prefetching data before forward pass. |\n| prefetch_size | Prefetch batch size. |\n| prefetch_factor | Prefetch factor for data prefetching. |\n| in_memory | If training in memory. |\n| compute_kwargs | Kwargs for compute backend. |\n\nTrainer component to train a model.\n\nTraining configuration object, containing all settings necessary for a particular\nlearning task use-case to be serialized and initiated. The object is ``callable``\nand returns a class which may be invoked to apply training.\n\n", - "**`superduper.components.listener`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper.components/listener.py)\n\n## `Listener` \n\n```python\nListener(self,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n identifier: str = '',\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n key: Union[str,\n List[str],\n Tuple[List[str],\n Dict[str,\n str]]],\n model: superduper.components.model.Model,\n select: superduper.backends.base.query.Query,\n active: bool = True,\n predict_kwargs: Optional[Dict] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | A string used to identify the model. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| key | Key to be bound to the model. |\n| model | Model for processing data. |\n| select | Object for selecting which data is processed. |\n| active | Toggle to ``False`` to deactivate change data triggering. |\n| predict_kwargs | Keyword arguments to self.model.predict(). |\n\nListener component.\n\nListener object which is used to process a column/key of a collection or table,\nand store the outputs.\n\n", - "**`superduper.components.schema`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper.components/schema.py)\n\n## `get_schema` \n\n```python\nget_schema(db,\n schema: Union[superduper.components.schema.Schema,\n str]) -> Optional[superduper.components.schema.Schema]\n```\n| Parameter | Description |\n|-----------|-------------|\n| db | Datalayer instance. |\n| schema | Schema to get. If a string, it will be loaded from the database. |\n\nHandle schema caching and loading.\n\n## `Schema` \n\n```python\nSchema(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n fields: Mapping[str,\n superduper.components.datatype.DataType]) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| fields | A mapping of field names to types or `Encoders` |\n\nA component carrying the `DataType` of columns.\n\n", - "**`superduper.components.datatype`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper.components/datatype.py)\n\n## `pickle_decode` \n\n```python\npickle_decode(b: bytes,\n info: Optional[Dict] = None) -> Any\n```\n| Parameter | Description |\n|-----------|-------------|\n| b | The bytes to decode. |\n| info | Optional information. |\n\nDecodes bytes using pickle.\n\n## `pickle_encode` \n\n```python\npickle_encode(object: Any,\n info: Optional[Dict] = None) -> bytes\n```\n| Parameter | Description |\n|-----------|-------------|\n| object | The object to encode. |\n| info | Optional information. |\n\nEncodes an object using pickle.\n\n## `base64_to_bytes` \n\n```python\nbase64_to_bytes(encoded)\n```\n| Parameter | Description |\n|-----------|-------------|\n| encoded | The base64 encoded string. |\n\nDecodes a base64 encoded string.\n\n## `bytes_to_base64` \n\n```python\nbytes_to_base64(bytes)\n```\n| Parameter | Description |\n|-----------|-------------|\n| bytes | The bytes to convert. |\n\nConverts bytes to base64.\n\n## `dill_decode` \n\n```python\ndill_decode(b: bytes,\n info: Optional[Dict] = None) -> Any\n```\n| Parameter | Description |\n|-----------|-------------|\n| b | The bytes to decode. |\n| info | Optional information. |\n\nDecodes bytes using dill.\n\n## `dill_encode` \n\n```python\ndill_encode(object: Any,\n info: Optional[Dict] = None) -> bytes\n```\n| Parameter | Description |\n|-----------|-------------|\n| object | The object to encode. |\n| info | Optional information. |\n\nEncodes an object using dill.\n\n## `encode_torch_state_dict` \n\n```python\nencode_torch_state_dict(module,\n info)\n```\n| Parameter | Description |\n|-----------|-------------|\n| module | Module. |\n| info | Information. |\n\nEncode torch state dictionary.\n\n## `file_check` \n\n```python\nfile_check(path: Any,\n info: Optional[Dict] = None) -> str\n```\n| Parameter | Description |\n|-----------|-------------|\n| path | The file path to check. |\n| info | Optional information. |\n\nChecks if a file path exists.\n\n## `get_serializer` \n\n```python\nget_serializer(identifier: str,\n method: str,\n encodable: str,\n db: Optional[ForwardRef('Datalayer')] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | The identifier of the serializer. |\n| method | The method of the serializer. |\n| encodable | The type of encodable object. |\n| db | The Datalayer instance. |\n\nGet a serializer.\n\n## `json_decode` \n\n```python\njson_decode(b: str,\n info: Optional[Dict] = None) -> Any\n```\n| Parameter | Description |\n|-----------|-------------|\n| b | The JSON string to decode |\n| info | Optional information |\n\nDecode the JSON string to an dict.\n\n## `json_encode` \n\n```python\njson_encode(object: Any,\n info: Optional[Dict] = None) -> str\n```\n| Parameter | Description |\n|-----------|-------------|\n| object | The object to encode |\n| info | Optional information |\n\nEncode the dict to a JSON string.\n\n## `torch_decode` \n\n```python\ntorch_decode(b: bytes,\n info: Optional[Dict] = None) -> Any\n```\n| Parameter | Description |\n|-----------|-------------|\n| b | The bytes to decode. |\n| info | Optional information. |\n\nDecodes bytes to a torch model.\n\n## `torch_encode` \n\n```python\ntorch_encode(object: Any,\n info: Optional[Dict] = None) -> bytes\n```\n| Parameter | Description |\n|-----------|-------------|\n| object | The object to encode. |\n| info | Optional information. |\n\nSaves an object in torch format.\n\n## `Encoder` \n\n```python\nEncoder(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n encoder: Optional[Callable] = None,\n decoder: Optional[Callable] = None,\n info: Optional[Dict] = None,\n shape: Optional[Sequence] = None,\n directory: Optional[str] = None,\n encodable: str = 'encodable',\n bytes_encoding: Optional[str] = ,\n intermediate_type: Optional[str] = 'bytes',\n media_type: Optional[str] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| encoder | A callable that converts an encodable object of this encoder to bytes. |\n| decoder | A callable that converts bytes to an encodable object of this encoder. |\n| info | An optional information dictionary. |\n| shape | The shape of the data. |\n| directory | The directory to store file types. |\n| encodable | The type of encodable object ('encodable', 'lazy_artifact', or 'file'). |\n| bytes_encoding | The encoding type for bytes ('base64' or 'bytes'). |\n| intermediate_type | Type of the intermediate data [IntermediateType.BYTES, IntermediateType.STRING] |\n| media_type | The media type. |\n\nA data type component that defines how data is encoded and decoded.\n\n## `Artifact` \n\n```python\nArtifact(self,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n x: Any = ,\n *,\n identifier: str = '',\n file_id: Optional[str] = None,\n datatype: superduper.components.datatype.DataType,\n uri: Optional[str] = None,\n sha1: Optional[str] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| file_id | unique-id of the content |\n| datatype | The datatype of the content. |\n| uri | URI of the content, if any. |\n| sha1 | SHA1 hash of the content. |\n| x | The artifact object. |\n\nClass for representing data to be saved on disk or in the artifact-store.\n\n## `DecodeTorchStateDict` \n\n```python\nDecodeTorchStateDict(self,\n cls)\n```\n| Parameter | Description |\n|-----------|-------------|\n| cls | Torch state cls |\n\nTorch state dictionary decoder.\n\n## `Encodable` \n\n```python\nEncodable(self,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n x: Any = ,\n blob: dataclasses.InitVar[typing.Optional[bytearray]] = None,\n *,\n identifier: str = '',\n file_id: Optional[str] = None,\n datatype: superduper.components.datatype.DataType,\n uri: Optional[str] = None,\n sha1: Optional[str] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| file_id | unique-id of the content |\n| datatype | The datatype of the content. |\n| uri | URI of the content, if any. |\n| sha1 | SHA1 hash of the content. |\n| x | The encodable object. |\n| blob | The blob data. |\n\nClass for encoding non-Python datatypes to the database.\n\n## `File` \n\n```python\nFile(self,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n x: Any = ,\n file_name: Optional[str] = None,\n *,\n identifier: str = '',\n file_id: Optional[str] = None,\n datatype: superduper.components.datatype.DataType,\n uri: Optional[str] = None,\n sha1: Optional[str] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| file_id | unique-id of the content |\n| datatype | The datatype of the content. |\n| uri | URI of the content, if any. |\n| sha1 | SHA1 hash of the content. |\n| x | path to the file |\n| file_name | File name |\n\nData to be saved on disk and passed as a file reference.\n\n## `LazyArtifact` \n\n```python\nLazyArtifact(self,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n x: Any = ,\n *,\n identifier: str = '',\n file_id: Optional[str] = None,\n datatype: superduper.components.datatype.DataType,\n uri: Optional[str] = None,\n sha1: Optional[str] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| file_id | unique-id of the content |\n| datatype | The datatype of the content. |\n| uri | URI of the content, if any. |\n| sha1 | SHA1 hash of the content. |\n| x | The artifact object. |\n\nData to be saved and loaded only when needed.\n\n## `LazyFile` \n\n```python\nLazyFile(self,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n x: Any = ,\n file_name: Optional[str] = None,\n *,\n identifier: str = '',\n file_id: Optional[str] = None,\n datatype: superduper.components.datatype.DataType,\n uri: Optional[str] = None,\n sha1: Optional[str] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| file_id | unique-id of the content |\n| datatype | The datatype of the content. |\n| uri | URI of the content, if any. |\n| sha1 | SHA1 hash of the content. |\n| x | path to the file |\n| file_name | File name |\n\nClass is used to load a file only when needed.\n\n## `Native` \n\n```python\nNative(self,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n x: Optional[Any] = None,\n *,\n identifier: str = '',\n file_id: Optional[str] = None,\n datatype: superduper.components.datatype.DataType,\n uri: Optional[str] = None,\n sha1: Optional[str] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| file_id | unique-id of the content |\n| datatype | The datatype of the content. |\n| uri | URI of the content, if any. |\n| sha1 | SHA1 hash of the content. |\n| x | The encodable object. |\n\nClass for representing native data supported by the underlying database.\n\n", - "**`superduper.components.table`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper.components/table.py)\n\n## `Table` \n\n```python\nTable(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n schema: superduper.components.schema.Schema,\n primary_id: str = 'id') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| schema | The schema of the table |\n| primary_id | The primary id of the table |\n\nA component that represents a table in a database.\n\n", - "**`superduper.components.component`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper.components/component.py)\n\n## `ensure_initialized` \n\n```python\nensure_initialized(func)\n```\n| Parameter | Description |\n|-----------|-------------|\n| func | Decorator function. |\n\nDecorator to ensure that the model is initialized before calling the function.\n\n## `getdeepattr` \n\n```python\ngetdeepattr(obj,\n attr)\n```\n| Parameter | Description |\n|-----------|-------------|\n| obj | Object. |\n| attr | Attribute. |\n\nGet nested attribute with dot notation.\n\n## `import_` \n\n```python\nimport_(r=None,\n path=None,\n db=None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| r | Object to be imported. |\n| path | Components directory. |\n| db | Datalayer instance. |\n\nHelper function for importing component JSONs, YAMLs, etc.\n\n## `Component` \n\n```python\nComponent(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n\nBase class for all components in `superduper`.\n\nClass to represent `superduper` serializable entities\nthat can be saved into a database.\n\n", - "**`superduper.components.vector_index`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper.components/vector_index.py)\n\n## `sqlvector` \n\n```python\nsqlvector(shape)\n```\n| Parameter | Description |\n|-----------|-------------|\n| shape | The shape of the vector |\n\nCreate an encoder for a vector (list of ints/ floats) of a given shape.\n\nThis is used for compatibility with SQL databases, as the default vector\n\n## `vector` \n\n```python\nvector(shape,\n identifier: Optional[str] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| shape | The shape of the vector |\n| identifier | The identifier of the vector |\n\nCreate an encoder for a vector (list of ints/ floats) of a given shape.\n\n## `VectorIndex` \n\n```python\nVectorIndex(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n artifacts: 'dc.InitVar[t.Optional[t.Dict]]' = None,\n indexing_listener: superduper.components.listener.Listener,\n compatible_listener: Optional[superduper.components.listener.Listener] = None,\n measure: superduper.vector_search.base.VectorIndexMeasureType = ,\n metric_values: Optional[Dict] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| artifacts | A dictionary of artifacts paths and `DataType` objects |\n| indexing_listener | Listener which is applied to created vectors |\n| compatible_listener | Listener which is applied to vectors to be compared |\n| measure | Measure to use for comparison |\n| metric_values | Metric values for this index |\n\nA component carrying the information to apply a vector index.\n\n## `DecodeArray` \n\n```python\nDecodeArray(self,\n dtype)\n```\n| Parameter | Description |\n|-----------|-------------|\n| dtype | Datatype of array |\n\nClass to decode an array.\n\n## `EncodeArray` \n\n```python\nEncodeArray(self,\n dtype)\n```\n| Parameter | Description |\n|-----------|-------------|\n| dtype | Datatype of array |\n\nClass to encode an array.\n\n", - "**`superduper.misc`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/misc.py)\n\n## `border_msg` \n\n```python\nborder_msg(msg,\n indent=1,\n width=None,\n title=None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| msg | Message to print |\n| indent | Indentation of the box |\n| width | Width of the box |\n| title | Title of the box |\n\nPrint message-box with optional title.\n\n", - "**`superduper.jobs.task_workflow`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/jobs/task_workflow.py)\n\n## `TaskWorkflow` \n\n```python\nTaskWorkflow(self,\n database: 'Datalayer',\n G: 'DiGraph' = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| database | ``DB`` instance to use |\n| G | ``networkx.DiGraph`` to use as the graph |\n\nTask workflow class.\n\nKeep a graph of jobs that need to be performed and their dependencies,\nand perform them when called.\n\n", - "**`superduper.jobs.tasks`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/jobs/tasks.py)\n\n## `callable_job` \n\n```python\ncallable_job(cfg,\n function_to_call,\n args,\n kwargs,\n job_id,\n dependencies=(),\n db: Optional[ForwardRef('Datalayer')] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| cfg | configuration |\n| function_to_call | function to call |\n| args | positional arguments to pass to the function |\n| kwargs | keyword arguments to pass to the function |\n| job_id | unique identifier for this job |\n| dependencies | other jobs that this job depends on |\n| db | datalayer to use |\n\nRun a function in the database.\n\n## `method_job` \n\n```python\nmethod_job(cfg,\n type_id,\n identifier,\n method_name,\n args,\n kwargs,\n job_id,\n dependencies=(),\n db: Optional[ForwardRef('Datalayer')] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| cfg | user config |\n| type_id | type of component |\n| identifier | identifier of component |\n| method_name | name of method to run |\n| args | positional arguments to pass to the method |\n| kwargs | keyword arguments to pass to the method |\n| job_id | unique identifier for this job |\n| dependencies | other jobs that this job depends on |\n| db | datalayer to use |\n\nRun a method on a component in the database.\n\n", - "**`superduper.jobs.job`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/jobs/job.py)\n\n## `job` \n\n```python\njob(f)\n```\n| Parameter | Description |\n|-----------|-------------|\n| f | function to be decorated |\n\nDecorator to create a job from a function.\n\n## `ComponentJob` \n\n```python\nComponentJob(self,\n component_identifier: str,\n type_id: str,\n method_name: str,\n args: Optional[Sequence] = None,\n kwargs: Optional[Dict] = None,\n compute_kwargs: Dict = {})\n```\n| Parameter | Description |\n|-----------|-------------|\n| component_identifier | unique identifier of the component |\n| type_id | type of the component |\n| method_name | name of the method to be called |\n| args | positional arguments to be passed to the method |\n| kwargs | keyword arguments to be passed to the method |\n| compute_kwargs | Arguments to use for model predict computation |\n\nJob for running a class method of a component.\n\n## `FunctionJob` \n\n```python\nFunctionJob(self,\n callable: Callable,\n args: Optional[Sequence] = None,\n kwargs: Optional[Dict] = None,\n compute_kwargs: Dict = {})\n```\n| Parameter | Description |\n|-----------|-------------|\n| callable | function to be called |\n| args | positional arguments to be passed to the function |\n| kwargs | keyword arguments to be passed to the function |\n| compute_kwargs | Arguments to use for model predict computation |\n\nJob for running a function.\n\n## `Job` \n\n```python\nJob(self,\n args: Optional[Sequence] = None,\n kwargs: Optional[Dict] = None,\n compute_kwargs: Dict = {})\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | positional arguments to be passed to the function or method |\n| kwargs | keyword arguments to be passed to the function or method |\n| compute_kwargs | Arguments to use for model predict computation |\n\nBase class for jobs. Jobs are used to run functions or methods on.\n\n", - "**`superduper.vector_search.in_memory`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/vector_search/in_memory.py)\n\n## `InMemoryVectorSearcher` \n\n```python\nInMemoryVectorSearcher(self,\n identifier: str,\n dimensions: int,\n h: Optional[numpy.ndarray] = None,\n index: Optional[List[str]] = None,\n measure: Union[str,\n Callable] = 'cosine')\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Unique string identifier of index |\n| dimensions | Dimension of the vector embeddings |\n| h | array/ tensor of vectors |\n| index | list of IDs |\n| measure | measure to assess similarity |\n\nSimple hash-set for looking up with vector similarity.\n\n", - "**`superduper.vector_search.base`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/vector_search/base.py)\n\n## `cosine` \n\n```python\ncosine(x,\n y)\n```\n| Parameter | Description |\n|-----------|-------------|\n| x | numpy.ndarray |\n| y | numpy.ndarray, y should be normalized! |\n\nCosine similarity function for vector search.\n\n## `dot` \n\n```python\ndot(x,\n y)\n```\n| Parameter | Description |\n|-----------|-------------|\n| x | numpy.ndarray |\n| y | numpy.ndarray |\n\nDot function for vector similarity search.\n\n## `l2` \n\n```python\nl2(x,\n y)\n```\n| Parameter | Description |\n|-----------|-------------|\n| x | numpy.ndarray |\n| y | numpy.ndarray |\n\nL2 function for vector similarity search.\n\n## `BaseVectorSearcher` \n\n```python\nBaseVectorSearcher(self,\n identifier: 'str',\n dimensions: 'int',\n h: 't.Optional[numpy.ndarray]' = None,\n index: 't.Optional[t.List[str]]' = None,\n measure: 't.Optional[str]' = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Unique string identifier of index |\n| dimensions | Dimension of the vector embeddings |\n| h | Seed vectors ``numpy.ndarray`` |\n| index | list of IDs |\n| measure | measure to assess similarity |\n\nBase class for vector searchers.\n\n## `VectorItem` \n\n```python\nVectorItem(self,\n id: 'str',\n vector: 'numpy.ndarray') -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| id | ID of the vector |\n| vector | Vector of the item |\n\nClass for representing a vector in vector search with id and vector.\n\n", - "**`superduper.vector_search.atlas`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/vector_search/atlas.py)\n\n## `MongoAtlasVectorSearcher` \n\n```python\nMongoAtlasVectorSearcher(self,\n identifier: str,\n collection: str,\n dimensions: Optional[int] = None,\n measure: Optional[str] = None,\n output_path: Optional[str] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Unique string identifier of index |\n| collection | Collection name |\n| dimensions | Dimension of the vector embeddings |\n| measure | measure to assess similarity |\n| output_path | Path to the output |\n\nVector searcher implementation of atlas vector search.\n\n", - "**`superduper.vector_search.lance`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/vector_search/lance.py)\n\n## `LanceVectorSearcher` \n\n```python\nLanceVectorSearcher(self,\n identifier: str,\n dimensions: int,\n h: Optional[numpy.ndarray] = None,\n index: Optional[List[str]] = None,\n measure: Optional[str] = None)\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Unique string identifier of index |\n| dimensions | Dimension of the vector embeddings in the Lance dataset |\n| h | Seed vectors ``numpy.ndarray`` |\n| index | list of IDs |\n| measure | measure to assess similarity |\n\nImplementation of a vector index using the ``lance`` library.\n\n", - "**`superduper.vector_search.update_tasks`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/vector_search/update_tasks.py)\n\n## `copy_vectors` \n\n```python\ncopy_vectors(vector_index: str,\n query: Union[Dict,\n superduper.backends.base.query.Query],\n ids: Sequence[str],\n db=typing.Optional[ForwardRef('Datalayer')])\n```\n| Parameter | Description |\n|-----------|-------------|\n| vector_index | A identifier of the vector-index. |\n| query | A query which was used by `db._build_task_workflow` method |\n| ids | List of ids which were observed as added/updated documents. |\n| db | Datalayer instance. |\n\nCopy vectors of a ``VectorIndex`` component from the databackend to the fast_vector_search backend.\n\n## `delete_vectors` \n\n```python\ndelete_vectors(vector_index: str,\n ids: Sequence[str],\n db=typing.Optional[ForwardRef('Datalayer')])\n```\n| Parameter | Description |\n|-----------|-------------|\n| vector_index | A identifier of vector-index. |\n| ids | List of ids which were observed as deleted documents. |\n| db | Datalayer instance. |\n\nDelete vectors of a ``VectorIndex`` component in the fast_vector_search backend.\n\n", - "**`superduper.vector_search.interface`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/vector_search/interface.py)\n\n## `FastVectorSearcher` \n\n```python\nFastVectorSearcher(self,\n db: 'Datalayer',\n vector_searcher,\n vector_index: str)\n```\n| Parameter | Description |\n|-----------|-------------|\n| db | Datalayer instance |\n| vector_searcher | Vector searcher instance |\n| vector_index | Vector index name |\n\nFast vector searcher implementation using the server.\n\n", - "**`superduper.base.document`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/base/document.py)\n\n## `Document` \n\n```python\nDocument(self,\n *args,\n schema: Optional[ForwardRef('Schema')] = None,\n db: Optional[ForwardRef('Datalayer')] = None,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | *args for `dict` |\n| schema | The schema to use. |\n| db | The datalayer to use. |\n| kwargs | **kwargs for `dict` |\n\nA wrapper around an instance of dict or a Encodable.\n\nThe document data is used to dump that resource to\na mix of json-able content, ids and `bytes`\n\n## `QueryUpdateDocument` \n\n```python\nQueryUpdateDocument(self,\n *args,\n schema: Optional[ForwardRef('Schema')] = None,\n db: Optional[ForwardRef('Datalayer')] = None,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | *args for `dict` |\n| schema | The schema to use. |\n| db | The datalayer to use. |\n| kwargs | **kwargs for `dict` |\n\nA document that is used to update a document in a database.\n\nThis document is used to update a document in a database.\nIt is a subclass of Document.\n\n", - "**`superduper.base.exceptions`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/base/exceptions.py)\n\n## `DatabackendException` \n\n```python\nDatabackendException(self,\n msg)\n```\n| Parameter | Description |\n|-----------|-------------|\n| msg | msg for BaseException |\n\nDatabackendException.\n\n## `BaseException` \n\n```python\nBaseException(self,\n msg)\n```\n| Parameter | Description |\n|-----------|-------------|\n| msg | msg for Exception |\n\nBaseException which logs a message after exception.\n\n## `ComponentException` \n\n```python\nComponentException(self,\n msg)\n```\n| Parameter | Description |\n|-----------|-------------|\n| msg | msg for BaseException |\n\nComponentException.\n\n## `ComponentInUseError` \n\n```python\nComponentInUseError(self,\n /,\n *args,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | *args for Exception |\n| kwargs | **kwargs for Exception |\n\nException raised when a component is already in use.\n\n## `ComponentInUseWarning` \n\n```python\nComponentInUseWarning(self,\n /,\n *args,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | *args for Exception |\n| kwargs | **kwargs for Exception |\n\nWarning raised when a component is already in use.\n\n## `MetadataException` \n\n```python\nMetadataException(self,\n msg)\n```\n| Parameter | Description |\n|-----------|-------------|\n| msg | msg for BaseException |\n\nMetadataException.\n\n## `QueryException` \n\n```python\nQueryException(self,\n msg)\n```\n| Parameter | Description |\n|-----------|-------------|\n| msg | msg for BaseException |\n\nQueryException.\n\n## `RequiredPackageVersionsNotFound` \n\n```python\nRequiredPackageVersionsNotFound(self,\n /,\n *args,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | *args for ImportError |\n| kwargs | **kwargs for ImportError |\n\nException raised when one or more required packages are not found.\n\n## `RequiredPackageVersionsWarning` \n\n```python\nRequiredPackageVersionsWarning(self,\n /,\n *args,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | *args for ImportWarning |\n| kwargs | **kwargs for ImportWarning |\n\nException raised when one or more required packages are not found.\n\n## `ServiceRequestException` \n\n```python\nServiceRequestException(self,\n msg)\n```\n| Parameter | Description |\n|-----------|-------------|\n| msg | msg for BaseException |\n\nServiceRequestException.\n\n## `UnsupportedDatatype` \n\n```python\nUnsupportedDatatype(self,\n msg)\n```\n| Parameter | Description |\n|-----------|-------------|\n| msg | msg for BaseException |\n\nUnsupportedDatatype.\n\n", - "**`superduper.base.config_dicts`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/base/config_dicts.py)\n\n## `combine_configs` \n\n```python\ncombine_configs(dicts: Sequence[Dict[str,\n object]]) -> Dict[str,\n object]\n```\n| Parameter | Description |\n|-----------|-------------|\n| dicts | The dictionaries to combine. |\n\nCombine a sequence of dictionaries into a single dictionary.\n\n## `environ_to_config_dict` \n\n```python\nenviron_to_config_dict(prefix: str,\n parent: Dict[str,\n str],\n environ: Optional[Dict[str,\n str]] = None,\n err: Optional[TextIO] = <_io.TextIOWrapper name='' mode='w' encoding='utf-8'>,\n fail: bool = False)\n```\n| Parameter | Description |\n|-----------|-------------|\n| prefix | The prefix to use for environment variables. |\n| parent | The parent dictionary to use as a basis. |\n| environ | The environment variables to read from. |\n| err | The file to write errors to. |\n| fail | Whether to raise an exception on error. |\n\nConvert environment variables to a configuration dictionary.\n\n", - "**`superduper.base.decorators`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/base/decorators.py)\n\n## `code` \n\n```python\ncode(my_callable)\n```\n| Parameter | Description |\n|-----------|-------------|\n| my_callable | The callable to mark as remote code. |\n\nDecorator to mark a function as remote code.\n\n", - "**`superduper.base.cursor`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/base/cursor.py)\n\n## `SelectResult` \n\n```python\nSelectResult(self,\n raw_cursor: Any,\n id_field: str,\n db: Optional[ForwardRef('Datalayer')] = None,\n scores: Optional[Dict[str,\n float]] = None,\n schema: Optional[ForwardRef('Schema')] = None,\n _it: int = 0) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| raw_cursor | the cursor to wrap |\n| id_field | the field to use as the document id |\n| db | the datalayer to use to decode the documents |\n| scores | a dict of scores to add to the documents |\n| schema | the schema to use to decode the documents |\n| _it | an iterator to keep track of the current position in the cursor, Default is 0. |\n\nA wrapper around a raw cursor that adds some extra functionality.\n\nA cursor that wraps a cursor and returns ``Document`` wrapping\na dict including ``Encodable`` objects.\n\n", - "**`superduper.base.config`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/base/config.py)\n\n## `BaseConfig` \n\n```python\nBaseConfig(self) -> None\n```\nA base class for configuration dataclasses.\n\nThis class allows for easy updating of configuration dataclasses\nwith a dictionary of parameters.\n\n## `CDCConfig` \n\n```python\nCDCConfig(self,\n uri: Optional[str] = None,\n strategy: Union[superduper.base.config.PollingStrategy,\n superduper.base.config.LogBasedStrategy,\n NoneType] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| uri | The URI for the CDC service |\n| strategy | The strategy to use for CDC |\n\nDescribes the configuration for change data capture.\n\n## `CDCStrategy` \n\n```python\nCDCStrategy(self,\n type: str) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| type | The type of CDC strategy |\n\nBase CDC strategy dataclass.\n\n## `Cluster` \n\n```python\nCluster(self,\n compute: superduper.base.config.Compute = None,\n vector_search: superduper.base.config.VectorSearch = None,\n rest: superduper.base.config.Rest = None,\n cdc: superduper.base.config.CDCConfig = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| compute | The URI for compute - None: run all jobs in local mode i.e. simple function call - \"ray://host:port\": Run all jobs on a remote ray cluster |\n| vector_search | The URI for the vector search service - None: Run vector search on local - `f\"http://{host}:{port}\"`: Connect a remote vector search service |\n| rest | The URI for the REST service - `f\"http://{host}:{port}\"`: Connect a remote vector search service |\n| cdc | The URI for the change data capture service (if \"None\" then no cdc assumed) None: Run cdc on local as a thread. - `f\"{http://{host}:{port}\"`: Connect a remote cdc service |\n\nDescribes a connection to distributed work via Ray.\n\n## `Compute` \n\n```python\nCompute(self,\n uri: Optional[str] = None,\n compute_kwargs: Dict = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| uri | The URI for the compute service |\n| compute_kwargs | The keyword arguments to pass to the compute service |\n\nDescribes the configuration for distributed computing.\n\n## `Config` \n\n```python\nConfig(self,\n envs: dataclasses.InitVar[typing.Optional[typing.Dict[str,\n str]]] = None,\n data_backend: str = 'mongodb://localhost:27017/test_db',\n lance_home: str = '.superduper/vector_indices',\n artifact_store: Optional[str] = None,\n metadata_store: Optional[str] = None,\n cluster: superduper.base.config.Cluster = None,\n retries: superduper.base.config.Retry = None,\n downloads: superduper.base.config.Downloads = None,\n fold_probability: float = 0.05,\n log_level: superduper.base.config.LogLevel = ,\n logging_type: superduper.base.config.LogType = ,\n bytes_encoding: superduper.base.config.BytesEncoding = ,\n auto_schema: bool = True) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| envs | The envs datas |\n| data_backend | The URI for the data backend |\n| lance_home | The home directory for the Lance vector indices, Default: .superduper/vector_indices |\n| artifact_store | The URI for the artifact store |\n| metadata_store | The URI for the metadata store |\n| cluster | Settings distributed computing and change data capture |\n| retries | Settings for retrying failed operations |\n| downloads | Settings for downloading files |\n| fold_probability | The probability of validation fold |\n| log_level | The severity level of the logs |\n| logging_type | The type of logging to use |\n| bytes_encoding | The encoding of bytes in the data backend |\n| auto_schema | Whether to automatically create the schema. If True, the schema will be created if it does not exist. |\n\nThe data class containing all configurable superduper values.\n\n## `Downloads` \n\n```python\nDownloads(self,\n folder: Optional[str] = None,\n n_workers: int = 0,\n headers: Dict = None,\n timeout: Optional[int] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| folder | The folder to download files to |\n| n_workers | The number of workers to use for downloading |\n| headers | The headers to use for downloading |\n| timeout | The timeout for downloading |\n\nDescribes the configuration for downloading files.\n\n## `LogBasedStrategy` \n\n```python\nLogBasedStrategy(self,\n type: str = 'logbased',\n resume_token: Optional[Dict[str,\n str]] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| resume_token | The resume token to use for log-based CDC |\n| type | The type of CDC strategy |\n\nDescribes a log-based strategy for change data capture.\n\n## `PollingStrategy` \n\n```python\nPollingStrategy(self,\n type: 'str' = 'incremental',\n auto_increment_field: Optional[str] = None,\n frequency: float = 3600) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| auto_increment_field | The field to use for auto-incrementing |\n| frequency | The frequency to poll for changes |\n| type | The type of CDC strategy |\n\nDescribes a polling strategy for change data capture.\n\n## `Rest` \n\n```python\nRest(self,\n uri: Optional[str] = None,\n config: Optional[str] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| uri | The URI for the REST service |\n| config | The path to the config yaml file for the REST service |\n\nDescribes the configuration for the REST service.\n\n## `Retry` \n\n```python\nRetry(self,\n stop_after_attempt: int = 2,\n wait_max: float = 10.0,\n wait_min: float = 4.0,\n wait_multiplier: float = 1.0) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| stop_after_attempt | The number of attempts to make |\n| wait_max | The maximum time to wait between attempts |\n| wait_min | The minimum time to wait between attempts |\n| wait_multiplier | The multiplier for the wait time between attempts |\n\nDescribes how to retry using the `tenacity` library.\n\n## `VectorSearch` \n\n```python\nVectorSearch(self,\n uri: Optional[str] = None,\n type: str = 'in_memory',\n backfill_batch_size: int = 100) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| uri | The URI for the vector search service |\n| type | The type of vector search service |\n| backfill_batch_size | The size of the backfill batch |\n\nDescribes the configuration for vector search.\n\n", - "**`superduper.base.configs`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/base/configs.py)\n\n## `ConfigError` \n\n```python\nConfigError(self,\n /,\n *args,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | *args for `Exception` |\n| kwargs | **kwargs for `Exception` |\n\nAn exception raised when there is an error in the configuration.\n\n## `ConfigSettings` \n\n```python\nConfigSettings(self,\n cls: Type,\n environ: Optional[Dict] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| cls | The Pydantic class to read. |\n| environ | The environment variables to read from. |\n\nHelper class to read a configuration from a dataclass.\n\nReads a dataclass class from a configuration file and environment variables.\n\n", - "**`superduper.base.code`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/base/code.py)\n\n## `Code` \n\n```python\nCode(self,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None,\n *,\n identifier: str = '',\n code: str) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n| code | The code to store. |\n\nA class to store remote code.\n\nThis class stores remote code that can be executed on a remote server.\n\n", - "**`superduper.base.variables`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/base/variables.py)\n\n## `Variable` \n\n```python\nVariable(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n\nMechanism for allowing \"free variables\" in a leaf object.\n\nThe idea is to allow a variable to be set at runtime, rather than\nat object creation time.\n\n## `VariableError` \n\n```python\nVariableError(self,\n /,\n *args,\n **kwargs)\n```\n| Parameter | Description |\n|-----------|-------------|\n| args | *args for `Exception`. |\n| kwargs | **kwargs for `Exception`. |\n\nVariable error.\n\n", - "**`superduper.base.leaf`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/base/leaf.py)\n\n## `find_leaf_cls` \n\n```python\nfind_leaf_cls(full_import_path) -> Type[superduper.base.leaf.Leaf]\n```\n| Parameter | Description |\n|-----------|-------------|\n| full_import_path | Full import path of the class. |\n\nFind leaf class by class full import path.\n\n## `Leaf` \n\n```python\nLeaf(self,\n identifier: str,\n db: dataclasses.InitVar[typing.Optional[ForwardRef('Datalayer')]] = None,\n uuid: str = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| identifier | Identifier of the leaf. |\n| db | Datalayer instance. |\n| uuid | UUID of the leaf. |\n\nBase class for all leaf classes.\n\n", - "**`superduper.base.superduper`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/base/superduper.py)\n\n## `superduper` \n\n```python\nsuperduper(item: Optional[Any] = None,\n **kwargs) -> Any\n```\n| Parameter | Description |\n|-----------|-------------|\n| item | A database or model |\n| kwargs | Additional keyword arguments to pass to the component |\n\n`superduper` API to automatically wrap an object to a db or a component.\n\nAttempts to automatically wrap an item in a superduper.ioponent by\nusing duck typing to recognize it.\n\n", - "**`superduper.base.datalayer`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/base/datalayer.py)\n\n## `Datalayer` \n\n```python\nDatalayer(self,\n databackend: superduper.backends.base.data_backend.BaseDataBackend,\n metadata: superduper.backends.base.metadata.MetaDataStore,\n artifact_store: superduper.backends.base.artifacts.ArtifactStore,\n compute: superduper.backends.base.compute.ComputeBackend = )\n```\n| Parameter | Description |\n|-----------|-------------|\n| databackend | Object containing connection to Datastore. |\n| metadata | Object containing connection to Metadatastore. |\n| artifact_store | Object containing connection to Artifactstore. |\n| compute | Object containing connection to ComputeBackend. |\n\nBase database connector for superduper.\n\n## `LoadDict` \n\n```python\nLoadDict(self,\n database: superduper.base.datalayer.Datalayer,\n field: Optional[str] = None,\n callable: Optional[Callable] = None) -> None\n```\n| Parameter | Description |\n|-----------|-------------|\n| database | Instance of Datalayer. |\n| field | (optional) Component type identifier. |\n| callable | (optional) Callable function on key. |\n\nHelper class to load component identifiers with on-demand loading from the database.\n\n", - "**`superduper.rest.utils`** \n\n[Source code](https://github.com/superduper/superduper/blob/main/superduper/rest/utils.py)\n\n## `parse_query` \n\n```python\nparse_query(query,\n documents,\n db)\n```\n| Parameter | Description |\n|-----------|-------------|\n| query | query string to parse |\n| documents | documents to use in the query |\n| db | datalayer instance |\n\nParse a query string into a query object.\n\n## `strip_artifacts` \n\n```python\nstrip_artifacts(r: Any)\n```\n| Parameter | Description |\n|-----------|-------------|\n| r | the data to strip artifacts from |\n\nStrip artifacts for the data.\n\n", - "---\nsidebar_label: Multimodal vector search - Image\nfilename: build.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Multimodal vector search - Image\n\n\n## Connect to superduper\n\n:::note\nNote that this is only relevant if you are running superduper in development mode.\nOtherwise refer to \"Configuring your production system\".\n:::\n\n```python\nfrom superduper import superduper\n\ndb = superduper('mongomock:///test_db')\n```\n\n\n## Get useful sample data\n\n```python\n!curl -O https://superduperdb-public-demo.s3.amazonaws.com/images.zip && unzip images.zip\nimport os\nfrom PIL import Image\n\ndata = [f'images/{x}' for x in os.listdir('./images') if x.endswith(\".png\")][:200]\ndata = [ Image.open(path) for path in data]\n```\n\n```python\ndata = [{'img': d} for d in data[:100]]\n```\n\n## Build multimodal embedding models\n\nWe define the output data type of a model as a vector for vector transformation.\n\n\n\n \n ```python\n from superduper.components.vector_index import vector\n output_datatpye = vector(shape=(1024,)) \n ```\n \n \n ```python\n from superduper.components.vector_index import sqlvector\n output_datatpye = sqlvector(shape=(1024,)) \n ```\n \n\nThen define two models, one for text embedding and one for image embedding.\n\n```python\n!pip install git+https://github.com/openai/CLIP.git\n!pip install ../../plugins/torch\nimport clip\nfrom superduper import vector\nfrom superduper_torch import TorchModel\n\n# Load the CLIP model and obtain the preprocessing function\nmodel, preprocess = clip.load(\"RN50\", device='cpu')\n\n# Create a TorchModel for text encoding\ncompatible_model = TorchModel(\n identifier='clip_text', # Unique identifier for the model\n object=model, # CLIP model\n preprocess=lambda x: clip.tokenize(x)[0], # Model input preprocessing using CLIP \n postprocess=lambda x: x.tolist(), # Convert the model output to a list\n datatype=output_datatpye, # Vector encoder with shape (1024,)\n forward_method='encode_text', # Use the 'encode_text' method for forward pass \n)\n\n# Create a TorchModel for visual encoding\nembedding_model = TorchModel(\n identifier='clip_image', # Unique identifier for the model\n object=model.visual, # Visual part of the CLIP model \n preprocess=preprocess, # Visual preprocessing using CLIP\n postprocess=lambda x: x.tolist(), # Convert the output to a list \n datatype=output_datatpye, # Vector encoder with shape (1024,)\n)\n```\n\nBecause we use multimodal models, we define different keys to specify which model to use for embedding calculations in the vector_index.\n\n```python\nindexing_key = 'img' # we use img key for img embedding\ncompatible_key = 'text' # we use text key for text embedding\n```\n\n## Create vector-index\n\n```python\nvector_index_name = 'my-vector-index'\n```\n\n```python\nfrom superduper import VectorIndex, Listener\n\nvector_index = VectorIndex(\n vector_index_name,\n indexing_listener=Listener(\n key=indexing_key, # the `Document` key `model` should ingest to create embedding\n select=db['docs'].select(), # a `Select` query telling which data to search over\n model=embedding_model, # a `_Predictor` how to convert data to embeddings\n identifier='indexing-listener',\n ),\n compatible_listener=Listener(\n key=compatible_key, # the `Document` key `model` should ingest to create embedding\n model=compatible_model, # a `_Predictor` how to convert data to embeddings\n select=None,\n identifier='compatible-listener',\n )\n)\n```\n\n```python\nfrom superduper import Application\n\napplication = Application(\n 'image-vector-search',\n components=[vector_index],\n)\n\ndb.apply(application)\n```\n\n## Add the data\n\nThe order in which data is added is not important. *However* if your data requires a custom `Schema` in order to work, it's easier to add the `Application` first, and the data later. The advantage of this flexibility, is that once the `Application` is installed, it's waiting for incoming data, so that the `Application` is always up-to-date. This comes in particular handy with AI scenarios which need to respond to changing news.\n\n```python\nfrom superduper import Document\n\ntable_or_collection = db['docs']\n\nids = db.execute(table_or_collection.insert([Document(r) for r in data]))\n```\n\n## Perform a vector search\n\nWe can perform the vector searches using two types of data:\n\n- Text: By text description, we can find images similar to the text description.\n- Image: By using an image, we can find images similar to the provided image.\n\n\n\n \n ```python\n item = Document({compatible_key: \"Find a black dog\"}) \n ```\n \n \n ```python\n from IPython.display import display\n search_image = data[0]\n display(search_image)\n item = Document({indexing_key: search_image}) \n ```\n \n\nOnce we have this search target, we can execute a search as follows.\n\n```python\nselect = db['docs'].like(item, vector_index=vector_index_name, n=5).select()\nresults = list(db.execute(select))\n```\n\n## Visualize Results\n\n```python\nfrom IPython.display import display\nfor result in results:\n display(result[indexing_key])\n```\n\n## Create a `Template`\n\n```python\nfrom superduper import Template\n\ntemplate = Template(\n 'image-vector-search',\n template=application,\n substitutions={'docs': 'table'},\n)\n\ntemplate.export('.')\n```\n\n", - "---\nsidebar_label: Fine tune LLM on database\nfilename: build.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Fine tune LLM on database\n\n\n## Connect to superduper\n\n:::note\nNote that this is only relevant if you are running superduper in development mode.\nOtherwise refer to \"Configuring your production system\".\n:::\n\n```python\nfrom superduper import superduper\n\ndb = superduper('mongomock:///test_db')\n```\n\n\n## Get LLM Finetuning Data\n\nThe following are examples of training data in different formats.\n\n\n\n \n ```python\n from datasets import load_dataset\n from superduper.base.document import Document\n dataset_name = \"timdettmers/openassistant-guanaco\"\n dataset = load_dataset(dataset_name)\n \n train_dataset = dataset[\"train\"]\n eval_dataset = dataset[\"test\"]\n \n train_documents = [\n Document({**example, \"_fold\": \"train\"})\n for example in train_dataset\n ]\n eval_documents = [\n Document({**example, \"_fold\": \"valid\"})\n for example in eval_dataset\n ]\n \n datas = train_documents + eval_documents \n ```\n \n \n ```python\n from datasets import load_dataset\n \n from superduper.base.document import Document\n dataset_name = \"mosaicml/instruct-v3\"\n dataset = load_dataset(dataset_name)\n \n train_dataset = dataset[\"train\"]\n eval_dataset = dataset[\"test\"]\n \n train_documents = [\n Document({**example, \"_fold\": \"train\"})\n for example in train_dataset\n ]\n eval_documents = [\n Document({**example, \"_fold\": \"valid\"})\n for example in eval_dataset\n ]\n \n datas = train_documents + eval_documents \n ```\n \n \n ```python\n from datasets import load_dataset\n from superduper.base.document import Document\n dataset_name = \"philschmid/dolly-15k-oai-style\"\n dataset = load_dataset(dataset_name)['train'].train_test_split(0.9)\n \n train_dataset = dataset[\"train\"]\n eval_dataset = dataset[\"test\"]\n \n train_documents = [\n Document({**example, \"_fold\": \"train\"})\n for example in train_dataset\n ]\n eval_documents = [\n Document({**example, \"_fold\": \"valid\"})\n for example in eval_dataset\n ]\n \n datas = train_documents + eval_documents \n ```\n \n\nWe can define different training parameters to handle this type of data.\n\n\n\n \n ```python\n # Function for transformation after extracting data from the database\n transform = None\n key = ('text')\n training_kwargs=dict(dataset_text_field=\"text\") \n ```\n \n \n ```python\n # Function for transformation after extracting data from the database\n def transform(prompt, response):\n return {'text': prompt + response + \"\"}\n \n key = ('prompt', 'response')\n training_kwargs=dict(dataset_text_field=\"text\") \n ```\n \n \n ```python\n # Function for transformation after extracting data from the database\n transform = None\n \n key = ('messages')\n training_kwargs=None \n ```\n \n\nExample input_text and output_text\n\n\n\n \n ```python\n data = datas[0]\n input_text, output_text = data[\"text\"].rsplit(\"### Assistant: \", maxsplit=1)\n input_text += \"### Assistant: \"\n output_text = output_text.rsplit(\"### Human:\")[0]\n print(\"Input: --------------\")\n print(input_text)\n print(\"Response: --------------\")\n print(output_text) \n ```\n \n \n ```python\n data = datas[0]\n input_text = data[\"prompt\"]\n output_text = data[\"response\"]\n print(\"Input: --------------\")\n print(input_text)\n print(\"Response: --------------\")\n print(output_text) \n ```\n \n \n ```python\n data = datas[0]\n messages = data[\"messages\"]\n input_text = messages[:-1]\n output_text = messages[-1][\"content\"]\n print(\"Input: --------------\")\n print(input_text)\n print(\"Response: --------------\")\n print(output_text) \n ```\n \n\n\n## Insert simple data\n\nAfter turning on auto_schema, we can directly insert data, and superduper will automatically analyze the data type, and match the construction of the table and datatype.\n\n```python\nfrom superduper import Document\n\ntable_or_collection = db['docs']\n\nids = db.execute(table_or_collection.insert([Document(data) for data in datas]))\nselect = table_or_collection.select()\n```\n\n## Select a Model\n\n```python\nmodel_name = \"facebook/opt-125m\"\nmodel_kwargs = dict()\ntokenizer_kwargs = dict()\n\n# or \n# model_name = \"mistralai/Mistral-7B-Instruct-v0.2\"\n# token = \"hf_xxxx\"\n# model_kwargs = dict(token=token)\n# tokenizer_kwargs = dict(token=token)\n```\n\n\n## Build A Trainable LLM\n\n**Create an LLM Trainer for training**\n\nThe parameters of this LLM Trainer are basically the same as `transformers.TrainingArguments`, but some additional parameters have been added for easier training setup.\n\n```python\nfrom superduper_transformers import LLM, LLMTrainer\n\ntrainer = LLMTrainer(\n identifier=\"llm-finetune-trainer\",\n output_dir=\"output/finetune\",\n overwrite_output_dir=True,\n num_train_epochs=3,\n save_total_limit=3,\n logging_steps=10,\n evaluation_strategy=\"steps\",\n save_steps=100,\n eval_steps=100,\n per_device_train_batch_size=1,\n per_device_eval_batch_size=1,\n gradient_accumulation_steps=2,\n max_seq_length=512,\n key=key,\n select=select,\n transform=transform,\n training_kwargs=training_kwargs,\n)\n```\n\n\n\n \n ```python\n trainer.use_lora = True \n ```\n \n \n ```python\n trainer.use_lora = True\n trainer.bits = 4 \n ```\n \n \n ```python\n !pip install deepspeed\n deepspeed = {\n \"train_batch_size\": \"auto\",\n \"train_micro_batch_size_per_gpu\": \"auto\",\n \"gradient_accumulation_steps\": \"auto\",\n \"zero_optimization\": {\n \"stage\": 2,\n },\n }\n trainer.use_lora = True\n trainer.bits = 4\n trainer.deepspeed = deepspeed \n ```\n \n \n ```python\n trainer.use_lora = True\n trainer.bits = 4\n trainer.num_gpus = 2 \n ```\n \n\nCreate a trainable LLM model and add it to the database, then the training task will run automatically.\n\n```python\nllm = LLM(\n identifier=\"llm\",\n model_name_or_path=model_name,\n trainer=trainer,\n model_kwargs=model_kwargs,\n tokenizer_kwargs=tokenizer_kwargs,\n)\n\ndb.apply(llm)\n```\n\n## Load the trained model\nThere are two methods to load a trained model:\n\n- **Load the model directly**: This will load the model with the best metrics (if the transformers' best model save strategy is set) or the last version of the model.\n- **Use a specified checkpoint**: This method downloads the specified checkpoint, then initializes the base model, and finally merges the checkpoint with the base model. This approach supports custom operations such as resetting flash_attentions, model quantization, etc., during initialization.\n\n\n\n \n ```python\n llm = db.load(\"model\", \"llm\") \n ```\n \n \n ```python\n from superduper_transformers import LLM\n \n experiment_id = db.show(\"checkpoint\")[-1]\n version = None # None means the last checkpoint\n checkpoint = db.load(\"checkpoint\", experiment_id, version=version)\n llm = LLM(\n identifier=\"llm\",\n model_name_or_path=model_name,\n adapter_id=checkpoint,\n model_kwargs=dict(load_in_4bit=True)\n ) \n ```\n \n\n```python\nllm.predict(input_text, max_new_tokens=200)\n```\n\n```python\nfrom superduper import Template\n\nt = Template('llm-finetune', template=llm, substitutions={'docs': 'collection', model_name: 'model_name'})\n```\n\n```python\nt.export('.')\n```\n\n", - "---\nsidebar_label: Text Vector Search\nfilename: build.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Text Vector Search\n\nYou'll find this example as well as the saved template in the main repository of `superduper`.\nSee [here](https://github.com/superduper-io/superduper/tree/main/templates/text_vector_search).\n\nIf you'd like to modify the template, or practice building it yourself, then you can rerun the `build.ipynb` notebook\nin the template directory\n\n\n## Connect to superduper\n\n```python\nfrom superduper import superduper\n\ndb = superduper('mongomock://test_db')\n```\n\n\n## Get useful sample data\n\n\n\n \n ```python\n !curl -O https://superduperdb-public-demo.s3.amazonaws.com/text.json\n import json\n \n with open('text.json', 'r') as f:\n data = json.load(f) \n ```\n \n \n ```python\n !curl -O https://superduperdb-public-demo.s3.amazonaws.com/pdfs.zip && unzip -o pdfs.zip\n import os\n \n data = [f'pdfs/{x}' for x in os.listdir('./pdfs') if x.endswith('.pdf')] \n ```\n \n\n```python\ndatas = [{'x': d} for d in data]\n```\n\n\n## Create datatype\n\nSuperduperDB supports automatic data conversion, so users don’t need to worry about the compatibility of different data formats (`PIL.Image`, `numpy.array`, `pandas.DataFrame`, etc.) with the database.\n\nIt also supports custom data conversion methods for transforming data, such as defining the following Datatype.\n\n\n\n \n ```python\n datatype = 'str' \n ```\n \n \n ```python\n from superduper import DataType\n \n # By creating a datatype and setting its encodable attribute to “file” for saving PDF files, \n # all datatypes encoded as “file” will have their corresponding files uploaded to the artifact store. \n # References will be recorded in the database, and the files will be downloaded locally when needed. \n \n datatype = DataType('pdf', encodable='file') \n ```\n \n\n\n## Setup tables or collections\n\n```python\nfrom superduper.components.table import Table\nfrom superduper import Schema\n\nschema = Schema(identifier=\"schema\", fields={\"x\": datatype})\ntable = Table(\"docs\", schema=schema)\nselect = db['docs'].select()\n```\n\n\n## Apply a chunker for search\n\n:::note\nNote that applying a chunker is ***not*** mandatory for search.\nIf your data is already chunked (e.g. short text snippets or audio) or if you\nare searching through something like images, which can't be chunked, then this\nwon't be necessary.\n:::\n\n\n\n \n ```python\n from superduper import model\n \n CHUNK_SIZE = 200\n \n @model(flatten=True, model_update_kwargs={'document_embedded': False})\n def chunker(text):\n text = text.split()\n chunks = [' '.join(text[i:i + CHUNK_SIZE]) for i in range(0, len(text), CHUNK_SIZE)]\n return chunks \n ```\n \n \n ```python\n !pip install -q \"unstructured[pdf]\"\n from superduper import model\n from unstructured.partition.pdf import partition_pdf\n \n CHUNK_SIZE = 500\n \n @model(flatten=True)\n def chunker(pdf_file):\n elements = partition_pdf(pdf_file)\n text = '\\n'.join([e.text for e in elements])\n chunks = [text[i:i + CHUNK_SIZE] for i in range(0, len(text), CHUNK_SIZE)]\n return chunks \n ```\n \n\nNow we wrap this chunker as a `Listener`, so that it processes incoming data\n\n```python\nfrom superduper import Listener\n\nupstream_listener = Listener(\n model=chunker,\n select=db['docs'].select(),\n key='x',\n uuid=\"chunk\",\n identifier='chunker',\n)\n```\n\n## Select outputs of upstream listener\n\n:::note\nThis is useful if you have performed a first step, such as pre-computing \nfeatures, or chunking your data. You can use this query to \noperate on those outputs.\n:::\n\n```python\nindexing_key = upstream_listener.outputs\nindexing_key\n```\n\n\n## Build text embedding model\n\n\n\n \n ```python\n from superduper_openai import OpenAIEmbedding\n import os\n \n os.environ['OPENAI_API_KEY'] = 'sk-'\n \n embedding_model = OpenAIEmbedding(identifier='text-embedding-ada-002') \n ```\n \n \n ```python\n import os\n from superduper_jina import JinaEmbedding\n \n os.environ[\"JINA_API_KEY\"] = \"jina_xxxx\"\n \n # define the model\n embedding_model = JinaEmbedding(identifier='jina-embeddings-v2-base-en') \n ```\n \n \n ```python\n !pip install sentence-transformers\n from superduper import vector\n import sentence_transformers\n from superduper_sentence_transformers import SentenceTransformer\n \n embedding_model = SentenceTransformer(\n identifier=\"embedding\",\n object=sentence_transformers.SentenceTransformer(\"BAAI/bge-small-en\"),\n datatype=vector(shape=(1024,)),\n postprocess=lambda x: x.tolist(),\n predict_kwargs={\"show_progress_bar\": True},\n ) \n ```\n \n\n```python\nprint(len(embedding_model.predict(\"What is superduper\")))\n```\n\n## Create vector-index\n\n```python\nvector_index_name = 'my-vector-index'\n```\n\n```python\nfrom superduper import VectorIndex, Listener\n\nvector_index = VectorIndex(\n vector_index_name,\n indexing_listener=Listener(\n key=indexing_key, # the `Document` key `model` should ingest to create embedding\n select=db[indexing_key].select(), # a `Select` query telling which data to search over\n model=embedding_model, # a `_Predictor` how to convert data to embeddings\n identifier=f'{embedding_model.identifier}-listener',\n upstream=[table, upstream_listener], # this makes sure that the table is already set up when the other components are triggered\n )\n)\n```\n\n```python\nfrom superduper import Application\n\napplication = Application(\n 'text-vector-search', \n components=[\n table,\n upstream_listener,\n vector_index,\n ]\n)\n```\n\n```python\ndb.apply(application)\n```\n\n```python\napplication.info(verbosity=2)\n```\n\n```python\ndb['docs'].insert(datas).execute()\nselect = db['docs'].select()\n```\n\n```python\ndb.databackend.db.list_collection_names()\n```\n\n## Perform a vector search\n\n```python\nfrom superduper import Document\n# Perform the vector search based on the query\nitem = Document({indexing_key: \"Tell me about vector-search\"})\n```\n\n```python\nresults = db[indexing_key].like(item, vector_index=vector_index_name, n=10).select().execute()\n```\n\n```python\nfor result in results:\n print(\"\\n\", '-' * 20, '\\n')\n print(Document(result.unpack())[indexing_key])\n```\n\n```python\nfrom superduper import Template\n\nt = Template(\n 'vector-search',\n template=application,\n substitutions={'docs': 'table_name'},\n)\n```\n\n```python\nt.export('.')\n```\n\n```python\n!cat component.json | jq .\n```\n\n", - "---\nsidebar_label: Transfer learning\nfilename: build.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Transfer learning\n\n\n## Connect to superduper\n\n```python\nfrom superduper import superduper\n\ndb = superduper('mongomock:///test_db')\n```\n\n\n## Get useful sample data\n\n\n\n \n ```python\n !curl -O https://superduperdb-public-demo.s3.amazonaws.com/text_classification.json\n import json\n \n with open(\"text_classification.json\", \"r\") as f:\n data = json.load(f)\n num_classes = 2 \n ```\n \n \n ```python\n !curl -O https://superduperdb-public-demo.s3.amazonaws.com/images_classification.zip && unzip images_classification.zip\n import json\n from PIL import Image\n \n with open('images/images.json', 'r') as f:\n data = json.load(f)\n \n data = [{'x': Image.open(d['image_path']), 'y': d['label']} for d in data]\n num_classes = 2 \n ```\n \n\nAfter obtaining the data, we insert it into the database.\n\n\n\n \n ```python\n datas = [{'txt': d['x'], 'label': d['y']} for d in data] \n ```\n \n \n ```python\n datas = [{'image': d['x'], 'label': d['y']} for d in data] \n ```\n \n\n\n## Insert simple data\n\nAfter turning on auto_schema, we can directly insert data, and superduper will automatically analyze the data type, and match the construction of the table and datatype.\n\n```python\nfrom superduper import Document\n\ntable_or_collection = db['docs']\n\nids = db.execute(table_or_collection.insert([Document(data) for data in datas]))\nselect = table_or_collection.select()\n```\n\n\n## Compute features\n\n\n\n \n ```python\n key = 'txt'\n import sentence_transformers\n from superduper import vector, Listener\n from superduper_sentence_transformers import SentenceTransformer\n \n superdupermodel = SentenceTransformer(\n identifier=\"embedding\",\n object=sentence_transformers.SentenceTransformer(\"sentence-transformers/all-MiniLM-L6-v2\"),\n postprocess=lambda x: x.tolist(),\n )\n \n jobs, listener = db.apply(\n Listener(\n model=superdupermodel,\n select=select,\n key=key,\n identifier=\"features\"\n )\n ) \n ```\n \n \n ```python\n key = 'image'\n import torchvision.models as models\n from torchvision import transforms\n from superduper_torch import TorchModel\n from superduper import Listener\n from PIL import Image\n \n class TorchVisionEmbedding:\n def __init__(self):\n # Load the pre-trained ResNet-18 model\n self.resnet = models.resnet18(pretrained=True)\n \n # Set the model to evaluation mode\n self.resnet.eval()\n \n def preprocess(self, image):\n # Preprocess the image\n preprocess = preprocess = transforms.Compose([\n transforms.Resize(256),\n transforms.CenterCrop(224),\n transforms.ToTensor(),\n transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),\n ])\n tensor_image = preprocess(image)\n return tensor_image\n \n model = TorchVisionEmbedding()\n superdupermodel = TorchModel(identifier='my-vision-model-torch', object=model.resnet, preprocess=model.preprocess, postprocess=lambda x: x.numpy().tolist())\n \n jobs, listener = db.apply(\n Listener(\n model=superdupermodel,\n select=select,\n key=key,\n identifier=\"features\"\n )\n ) \n ```\n \n\n## Choose features key from feature listener\n\n```python\ninput_key = listener.outputs\ntraining_select = select.outputs(listener.predict_id)\n```\n\nWe can find the calculated feature data from the database.\n\n```python\nfeature = list(training_select.limit(1).execute())[0][input_key]\nfeature_size = len(feature)\n```\n\n\n## Build and train classifier\n\n\n\n \n ```python\n from superduper_sklearn import Estimator, SklearnTrainer\n from sklearn.svm import SVC\n \n model = Estimator(\n identifier=\"my-model\",\n object=SVC(),\n trainer=SklearnTrainer(\n \"my-trainer\",\n key=(input_key, \"label\"),\n select=training_select,\n ),\n ) \n ```\n \n \n ```python\n import torch\n from torch import nn\n from superduper_torch.model import TorchModel\n from superduper_torch.training import TorchTrainer\n from torch.nn.functional import cross_entropy\n \n \n class SimpleModel(nn.Module):\n def __init__(self, input_size=16, hidden_size=32, num_classes=3):\n super(SimpleModel, self).__init__()\n self.fc1 = nn.Linear(input_size, hidden_size)\n self.relu = nn.ReLU()\n self.fc2 = nn.Linear(hidden_size, num_classes)\n \n def forward(self, x):\n out = self.fc1(x)\n out = self.relu(out)\n out = self.fc2(out)\n return out\n \n preprocess = lambda x: torch.tensor(x)\n \n # Postprocess function for the model output \n def postprocess(x):\n return int(x.topk(1)[1].item())\n \n def data_transform(features, label):\n return torch.tensor(features), label\n \n # Create a Logistic Regression model\n # feature_length is the input feature size\n model = SimpleModel(feature_size, num_classes=num_classes)\n model = TorchModel(\n identifier='my-model',\n object=model, \n preprocess=preprocess,\n postprocess=postprocess,\n trainer=TorchTrainer(\n key=(input_key, 'label'),\n identifier='my_trainer',\n objective=cross_entropy,\n loader_kwargs={'batch_size': 10},\n max_iterations=1000,\n validation_interval=100,\n select=select,\n transform=data_transform,\n ),\n ) \n ```\n \n\nDefine a validation for evaluating the effect after training.\n\n```python\nfrom superduper import Dataset, Metric, Validation\n\n\ndef acc(x, y):\n return sum([xx == yy for xx, yy in zip(x, y)]) / len(x)\n\n\naccuracy = Metric(identifier=\"acc\", object=acc)\nvalidation = Validation(\n \"transfer_learning_performance\",\n key=(input_key, \"label\"),\n datasets=[\n Dataset(identifier=\"my-valid\", select=training_select.add_fold('valid'))\n ],\n metrics=[accuracy],\n)\nmodel.validation = validation\n```\n\nIf we execute the apply function, then the model will be added to the database, and because the model has a Trainer, it will perform training tasks.\n\n```python\ndb.apply(model)\n```\n\n```python\nmodel.encode()\n```\n\nGet the training metrics\n\n```python\nmodel = db.load('model', model.identifier)\nmodel.metric_values\n```\n\n```python\nfrom superduper import Template\n\nt = Template('transfer-learner', template=model, substitutions={'docs': 'table'})\n```\n\n```python\nt.export('.')\n```\n\n", - "---\nsidebar_label: Multimodal vector search - Video\nfilename: build.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Multimodal vector search - Video\n\n\n## Connect to superduper\n\n```python\nfrom superduper import superduper\n \ndb = superduper('mongomock://test_db')\n```\n\n\n## Get useful sample data\n\n```python\n!curl -O https://superduperdb-public-demo.s3.amazonaws.com/videos.zip && unzip videos.zip\nimport os\nfrom superduper.ext.pillow import pil_image\n\ndata = [f'videos/{x}' for x in os.listdir('./videos')]\nsample_datapoint = data[-1]\n\nchunked_model_datatype = pil_image\n\ndatas = [{'x': d} for d in data[:3]]\n```\n\n\n## Create datatype\n\nSuperduperDB supports automatic data conversion, so users don’t need to worry about the compatibility of different data formats (`PIL.Image`, `numpy.array`, `pandas.DataFrame`, etc.) with the database.\n\nIt also supports custom data conversion methods for transforming data, such as defining the following Datatype.\n\n```python\nfrom superduper import DataType\n\n# Create an instance of the Encoder with the identifier 'video_on_file' and load_hybrid set to False\ndatatype = DataType(\n identifier='video_on_file',\n encodable='file',\n)\n```\n\n\n## Setup tables or collections\n\n```python\nfrom superduper.components.table import Table\nfrom superduper import Schema\n\nschema = Schema(identifier=\"schema\", fields={\"x\": datatype})\ntable = Table(\"docs\", schema=schema)\n```\n\n```python\ndb.apply(table)\n```\n\n```python\ndb['docs'].insert(datas).execute()\n```\n\n\n## Apply a chunker for search\n\n:::note\nNote that applying a chunker is ***not*** mandatory for search.\nIf your data is already chunked (e.g. short text snippets or audio) or if you\nare searching through something like images, which can't be chunked, then this\nwon't be necessary.\n:::\n\n```python\n# !pip install opencv-python\nimport cv2\nimport tqdm\nfrom PIL import Image\nfrom superduper.ext.pillow import pil_image\nfrom superduper import model, Schema\n\n\n@model(\n flatten=True,\n model_update_kwargs={},\n)\ndef chunker(video_file):\n # Set the sampling frequency for frames\n sample_freq = 10\n \n # Open the video file using OpenCV\n cap = cv2.VideoCapture(video_file)\n \n # Initialize variables\n frame_count = 0\n fps = cap.get(cv2.CAP_PROP_FPS)\n extracted_frames = []\n progress = tqdm.tqdm()\n\n # Iterate through video frames\n while True:\n ret, frame = cap.read()\n if not ret:\n break\n \n # Get the current timestamp based on frame count and FPS\n current_timestamp = frame_count // fps\n \n # Sample frames based on the specified frequency\n if frame_count % sample_freq == 0:\n extracted_frames.append({\n 'image': Image.fromarray(frame[:,:,::-1]), # Convert BGR to RGB\n 'current_timestamp': current_timestamp,\n })\n frame_count += 1\n progress.update(1)\n \n # Release resources\n cap.release()\n cv2.destroyAllWindows()\n \n # Return the list of extracted frames\n return extracted_frames\n```\n\nNow we apply this chunker to the data by wrapping the chunker in `Listener`:\n\n```python\nfrom superduper import Listener\n\nupstream_listener = Listener(\n model=chunker,\n select=db['docs'].select(),\n key='x',\n uuid='chunker',\n identifier='chunker',\n upstream=[table]\n)\n```\n\n```python\ndb.apply(upstream_listener)\n```\n\n## Build multimodal embedding models\n\nWe define the output data type of a model as a vector for vector transformation.\n\n\n\n \n ```python\n from superduper.components.vector_index import vector\n output_datatype = vector(shape=(1024,)) \n ```\n \n \n ```python\n from superduper.components.vector_index import sqlvector\n output_datatype = sqlvector(shape=(1024,)) \n ```\n \n\nThen define two models, one for text embedding and one for image embedding.\n\n```python\n# !pip install git+https://github.com/openai/CLIP.git\nimport clip\nfrom superduper import vector\nfrom superduper_torch import TorchModel\n\n# Load the CLIP model and obtain the preprocessing function\nmodel, preprocess = clip.load(\"ViT-B/32\", device='cpu')\n\n# Create a TorchModel for text encoding\ncompatible_model = TorchModel(\n identifier='clip_text', # Unique identifier for the model\n object=model, # CLIP model\n preprocess=lambda x: clip.tokenize(x)[0], # Model input preprocessing using CLIP \n postprocess=lambda x: x.tolist(), # Convert the model output to a list\n datatype=output_datatype, # Vector encoder with shape (1024,)\n forward_method='encode_text', # Use the 'encode_text' method for forward pass \n)\n\n# Create a TorchModel for visual encoding\nmodel = TorchModel(\n identifier='clip_image', # Unique identifier for the model\n object=model.visual, # Visual part of the CLIP model \n preprocess=preprocess, # Visual preprocessing using CLIP\n postprocess=lambda x: x.tolist(), # Convert the output to a list \n datatype=output_datatype, # Vector encoder with shape (1024,)\n)\n```\n\nBecause we use multimodal models, we define different keys to specify which model to use for embedding calculations in the vector_index.\n\n## Create vector-index\n\n```python\nfrom superduper import VectorIndex, Listener\n\nvector_index = VectorIndex(\n 'my-vector-index',\n indexing_listener=Listener(\n key=upstream_listener.outputs + '.image', # the `Document` key `model` should ingest to create embedding\n select=db[upstream_listener.outputs].select(), # a `Select` query telling which data to search over\n model=model, # a `_Predictor` how to convert data to embeddings\n identifier=f'{model.identifier}-listener'\n ),\n compatible_listener=Listener(\n key='text', # the `Document` key `model` should ingest to create embedding\n model=compatible_model, # a `_Predictor` how to convert data to embeddings\n select=None,\n identifier='compatible-listener',\n ),\n upstream=[upstream_listener],\n)\n```\n\n```python\ndb.apply(vector_index)\n```\n\n```python\nfrom superduper import Application\n\napp = Application(\n 'video-search',\n components=[\n upstream_listener,\n vector_index,\n ]\n)\n```\n\n```python\ndb.apply(app)\n```\n\n## Perform a vector search\n\nWe can perform the vector searches using text description:\n\n```python\nfrom superduper import Document\nitem = Document({'text': \"A single red and a blue player battle for the ball\"})\n```\n\n```python\nfrom superduper import Document\nitem = Document({'text': \"Some monkeys playing\"})\n```\n\nOnce we have this search target, we can execute a search as follows.\n\n```python\nselect = db[upstream_listener.outputs].like(item, vector_index='my-vector-index', n=5).select()\nresults = list(db.execute(select))\n```\n\n## Visualize Results\n\n```python\nfrom IPython.display import display\nfor result in results:\n display(Document(result.unpack())[upstream_listener.outputs + '.image'])\n```\n\n## Check the system stays updated\n\nYou can add new data; once the data is added, all related models will perform calculations according to the underlying constructed model and listener, simultaneously updating the vector index to ensure that each query uses the latest data.\n\n```python\nnew_datas = [{'x': data[-1]}]\nids = db['docs'].insert(new_datas).execute()\n```\n\n```python\nfrom superduper import Template\n\nt = Template('video-search-template', template=app, substitutions={'docs': 'content_table'})\n```\n\n```python\nt.export('.')\n```\n\n", - "---\nsidebar_label: Retrieval augmented generation\nfilename: build.md\n---\nimport Tabs from '@theme/Tabs';\nimport TabItem from '@theme/TabItem';\n\n\n\n# Retrieval augmented generation\n\n\n## Connect to superduper\n\n:::note\nNote that this is only relevant if you are running superduper in development mode.\nOtherwise refer to \"Configuring your production system\".\n:::\n\n```python\nfrom superduper import superduper\n\ndb = superduper('mongomock:///test_db')\n```\n\n\n## Get useful sample data\n\n\n\n \n ```python\n # !curl -O https://superduperdb-public-demo.s3.amazonaws.com/text.json\n import json\n \n with open('text.json', 'r') as f:\n data = json.load(f) \n ```\n \n \n ```python\n !curl -O https://superduperdb-public-demo.s3.amazonaws.com/pdfs.zip && unzip -o pdfs.zip\n import os\n \n data = [f'pdfs/{x}' for x in os.listdir('./pdfs') if x.endswith('.pdf')] \n ```\n \n\n```python\ndatas = [{'x': d} for d in data]\n```\n\n\n## Insert simple data\n\nAfter turning on auto_schema, we can directly insert data, and superduper will automatically analyze the data type, and match the construction of the table and datatype.\n\n```python\nfrom superduper import Document\n\nids = db.execute(db['docs'].insert([Document(data) for data in datas]))\n```\n\n\n## Apply a chunker for search\n\n:::note\nNote that applying a chunker is ***not*** mandatory for search.\nIf your data is already chunked (e.g. short text snippets or audio) or if you\nare searching through something like images, which can't be chunked, then this\nwon't be necessary.\n:::\n\n\n\n \n ```python\n from superduper import model\n \n CHUNK_SIZE = 200\n \n @model(flatten=True, model_update_kwargs={})\n def chunker(text):\n text = text.split()\n chunks = [' '.join(text[i:i + CHUNK_SIZE]) for i in range(0, len(text), CHUNK_SIZE)]\n return chunks \n ```\n \n \n ```python\n !pip install -q \"unstructured[pdf]\"\n from superduper import model\n from unstructured.partition.pdf import partition_pdf\n \n CHUNK_SIZE = 500\n \n @model(flatten=True)\n def chunker(pdf_file):\n elements = partition_pdf(pdf_file)\n text = '\\n'.join([e.text for e in elements])\n chunks = [text[i:i + CHUNK_SIZE] for i in range(0, len(text), CHUNK_SIZE)]\n return chunks \n ```\n \n\nNow we apply this chunker to the data by wrapping the chunker in `Listener`:\n\n```python\nfrom superduper import Listener\n\nupstream_listener = Listener(\n model=chunker,\n select=db['docs'].select(),\n key='x',\n uuid=\"chunker\",\n identifier='chunker',\n)\n```\n\n## Select outputs of upstream listener\n\n:::note\nThis is useful if you have performed a first step, such as pre-computing \nfeatures, or chunking your data. You can use this query to \noperate on those outputs.\n:::\n\n\n## Build text embedding model\n\n\n\n \n ```python\n import os\n os.environ['OPENAI_API_KEY'] = 'sk-'\n from superduper_openai import OpenAIEmbedding\n \n embedding_model = OpenAIEmbedding(identifier='text-embedding-ada-002') \n ```\n \n \n ```python\n import os\n from superduper_jina import JinaEmbedding\n \n os.environ[\"JINA_API_KEY\"] = \"jina_xxxx\"\n \n # define the model\n embedding_model = JinaEmbedding(identifier='jina-embeddings-v2-base-en') \n ```\n \n \n ```python\n !pip install sentence-transformers\n from superduper import vector\n import sentence_transformers\n from superduper_sentence_transformers import SentenceTransformer\n \n embedding_model = SentenceTransformer(\n identifier=\"embedding\",\n object=sentence_transformers.SentenceTransformer(\"BAAI/bge-small-en\"),\n datatype=vector(shape=(1024,)),\n postprocess=lambda x: x.tolist(),\n predict_kwargs={\"show_progress_bar\": True},\n ) \n ```\n \n\n## Create vector-index\n\n```python\nfrom superduper import VectorIndex, Listener\n\nvector_index_name = 'vector-index'\n\nvector_index = \\\n VectorIndex(\n vector_index_name,\n indexing_listener=Listener(\n key=upstream_listener.outputs, # the `Document` key `model` should ingest to create embedding\n select=db[upstream_listener.outputs].select(), # a `Select` query telling which data to search over\n model=embedding_model, # a `_Predictor` how to convert data to embeddings\n uuid=\"embedding-listener\",\n identifier='embedding-listener',\n upstream=[upstream_listener],\n )\n )\n```\n\n\n## Create Vector Search Model\n\n```python\nitem = {'_outputs__chunker': ''}\n```\n\n```python\nfrom superduper.components.model import QueryModel\n\nvector_search_model = QueryModel(\n identifier=\"VectorSearch\",\n select=db[upstream_listener.outputs].like(item, vector_index=vector_index_name, n=5).select(),\n # The _source is the identifier of the upstream data, which can be used to locate the data from upstream sources using `_source`.\n postprocess=lambda docs: [{\"text\": doc['_outputs__chunker'], \"_source\": doc[\"_source\"]} for doc in docs],\n db=db\n)\n```\n\n\n## Build LLM\n\n\n\n \n ```python\n from superduper_openai import OpenAIChatCompletion\n \n llm = OpenAIChatCompletion(identifier='llm', model='gpt-3.5-turbo') \n ```\n \n \n ```python\n from superduper_anthropic import AnthropicCompletions\n import os\n \n os.environ[\"ANTHROPIC_API_KEY\"] = \"sk-xxx\"\n \n predict_kwargs = {\n \"max_tokens\": 1024,\n \"temperature\": 0.8,\n }\n \n llm = AnthropicCompletions(identifier='llm', model='claude-2.1', predict_kwargs=predict_kwargs) \n ```\n \n \n ```python\n from superduper_vllm import VllmModel\n \n predict_kwargs = {\n \"max_tokens\": 1024,\n \"temperature\": 0.8,\n }\n \n \n llm = VllmModel(\n identifier=\"llm\",\n model_name=\"TheBloke/Mistral-7B-Instruct-v0.2-AWQ\",\n vllm_kwargs={\n \"gpu_memory_utilization\": 0.7,\n \"max_model_len\": 1024,\n \"quantization\": \"awq\",\n },\n predict_kwargs=predict_kwargs,\n ) \n ```\n \n \n ```python\n from superduper_transformers import LLM\n \n llm = LLM.from_pretrained(\"mistralai/Mistral-7B-Instruct-v0.2\", load_in_8bit=True, device_map=\"cuda\", identifier=\"llm\", predict_kwargs=dict(max_new_tokens=128)) \n ```\n \n \n ```python\n !huggingface-cli download TheBloke/Mistral-7B-Instruct-v0.2-GGUF mistral-7b-instruct-v0.2.Q4_K_M.gguf --local-dir . --local-dir-use-symlinks False\n \n from superduper_llama_cpp.model import LlamaCpp\n llm = LlamaCpp(identifier=\"llm\", model_name_or_path=\"mistral-7b-instruct-v0.2.Q4_K_M.gguf\") \n ```\n \n\n## Answer question with LLM\n\n```python\nfrom superduper import model\nfrom superduper.components.graph import Graph, input_node\n\nprompt_template = (\n \"Use the following context snippets, these snippets are not ordered!, Answer the question based on this context.\\n\"\n \"{context}\\n\\n\"\n \"Here's the question: {query}\"\n)\n\n@model\ndef build_prompt(query, docs):\n chunks = [doc[\"text\"] for doc in docs]\n context = \"\\n\\n\".join(chunks)\n prompt = prompt_template.format(context=context, query=query)\n return prompt\n\n# We build a graph to handle the entire pipeline\n\n# create a input node, only have one input parameter `query`\nin_ = input_node('query')\n# pass the query to the vector search model\nvector_search_results = vector_search_model(query=in_)\n# pass the query and the search results to the prompt builder\nprompt = build_prompt(query=in_, docs=vector_search_results)\n# pass the prompt to the llm model\nanswer = llm(prompt)\n# create a graph, and the graph output is the answer\nrag = answer.to_graph(\"rag\")\n```\n\nBy applying the RAG model to the database, it will subsequently be accessible for use in other services.\n\n```python\nfrom superduper import Application\n\napp = Application(\n 'rag-app',\n components=[\n upstream_listener,\n vector_index,\n vector_search_model,\n rag,\n ]\n)\n\ndb.apply(app)\n```\n\nYou can now load the model elsewhere and make predictions using the following command.\n\n```python\nrag = db.load(\"model\", 'rag')\nprint(rag.predict(\"Tell me about superduper\")[0])\n```\n\n## Create template\n\n```python\nfrom superduper import Template\n\ntemplate = Template('rag-template', template=app, substitutions={'docs': 'collection'})\n```\n\n```python\ntemplate.export('.')\n```\n\n", - "# Basic RAG tutorial\n\n:::info\nIn this tutorial we show you how to do retrieval augmented generation (RAG) with Superduper.\nNote that this is just an example of the flexibility and power which Superduper gives \nto developers. Superduper is about much more than RAG and LLMs. \n:::\n\nAs in the vector-search tutorial we'll use Superduper documentation for the tutorial.\nWe'll add this to a testing database by downloading the data snapshot:\n\n\n```python\n!curl -O https://superduper-public-demo.s3.amazonaws.com/text.json\n```\n\n\n```python\nimport json\n\nfrom superduper import superduper, Document\n\ndb = superduper('mongomock://test')\n\nwith open('text.json') as f:\n data = json.load(f)\n\n_ = db['docu'].insert_many([{'txt': r} for r in data]).execute()\n```\n\nLet's verify the data in the `db` by querying one datapoint:\n\n\n```python\ndb['docu'].find_one().execute()\n```\n\nThe first step in a RAG application is to create a `VectorIndex`. The results of searching \nwith this index will be used as input to the LLM for answering questions.\n\nRead about `VectorIndex` [here](../apply_api/vector_index.md) and follow along the tutorial on \nvector-search [here](./vector_search.md).\n\n\n```python\nimport requests \n\nfrom superduper import Application, Document, VectorIndex, Listener, vector\nfrom superduper.ext.sentence_transformers.model import SentenceTransformer\nfrom superduper.base.code import Code\n\ndef postprocess(x):\n return x.tolist()\n\ndatatype = vector(shape=384, identifier=\"my-vec\")\n \nmodel = SentenceTransformer(\n identifier=\"my-embedding\",\n datatype=datatype,\n predict_kwargs={\"show_progress_bar\": True},\n signature=\"*args,**kwargs\",\n model=\"all-MiniLM-L6-v2\", \n device=\"cpu\",\n postprocess=Code.from_object(postprocess),\n)\n\nlistener = Listener(\n identifier=\"my-listener\",\n model=model,\n key='txt',\n select=db['docu'].find(),\n predict_kwargs={'max_chunk_size': 50},\n)\n\nvector_index = VectorIndex(\n identifier=\"my-index\",\n indexing_listener=listener,\n measure=\"cosine\"\n)\n\ndb.apply(vector_index)\n```\n\nNow that we've set up a `VectorIndex`, we can connect this index with an LLM in a number of ways.\nA simple way to do that is with the `SequentialModel`. The first part of the `SequentialModel`\nexecutes a query and provides the results to the LLM in the second part. \n\nThe `RetrievalPrompt` component takes a query with a \"free\" variable as input, signified with ``. \nThis gives users great flexibility with regard to how they fetch the context\nfor their downstream models.\n\nWe're using OpenAI, but you can use any type of LLM with Superduper. We have several \nnative integrations (see [here](../ai_integraitons/)) but you can also [bring your own model](../models/bring_your_own_model.md).\n\n\n```python\nfrom superduper.ext.llm.prompter import *\nfrom superduper import Document\nfrom superduper.components.model import SequentialModel\nfrom superduper.ext.openai import OpenAIChatCompletion\n\nq = db['docu'].like(Document({'txt': ''}), vector_index='my-index', n=5).find().limit(10)\n\ndef get_output(c):\n return [r['txt'] for r in c]\n\nprompt_template = RetrievalPrompt('my-prompt', select=q, postprocess=Code.from_object(get_output))\n\nllm = OpenAIChatCompletion('gpt-3.5-turbo')\nseq = SequentialModel('rag', models=[prompt_template, llm])\n\ndb.apply(seq)\n```\n\nNow we can test the `SequentialModel` with a sample question:\n\n\n```python\nseq.predict('Tell be about vector-indexes')\n```\n\n:::tip\nDid you know you can use any tools from the Python ecosystem with Superduper.\nThat includes `langchain` and `llamaindex` which can be very useful for RAG applications.\n:::\n\n\n```python\nfrom superduper import Application\n\napp = Application('rag-app', components=[vector_index, seq, plugin_1, plugin_2])\n```\n\n\n```python\napp.encode()\n```\n\n\n```python\napp.export('rag-app')\n```\n\n\n```python\n!cat rag-app/requirements.txt\n```\n\n\n```python\nfrom superduper import *\n\napp = Component.read('rag-app')\n```\n\n\n```python\napp.info()\n```\n", - "# Vector search\n\n:::note\nSince vector-search is all-the-rage right now, \nhere is the simplest possible iteration of semantic \ntext-search with a `sentence_transformers` model, \nas an entrypoint to `superduper`.\n\nNote that `superduper` is much-much more than vector-search\non text. Explore the docs to read about classical machine learning, \ncomputer vision, LLMs, fine-tuning and much much more!\n:::\n\n\nFirst let's get some data. These data are the markdown files \nof the very same documentation you are reading!\nYou can download other sample data-sets for testing `superduper`\nby following [these lines of code](../reusable_snippets/get_useful_sample_data).\n\n\n```python\nimport json\nimport requests \nr = requests.get('https://superduper-public-demo.s3.amazonaws.com/text.json')\n\nwith open('text.json', 'wb') as f:\n f.write(r.content)\n\nwith open('text.json', 'r') as f:\n data = json.load(f) \n\nprint(data[0])\n```\n\nNow we connect to superduper, using MongoMock as a databackend.\nRead more about connecting to superduper [here](../core_api/connect) and\na semi-exhaustive list of supported data-backends for connecting [here](../reusable_snippets/connect_to_superduper).\n\n\n```python\nfrom superduper import superduper, Document\n\ndb = superduper('mongomock://test')\n\n_ = db['documents'].insert_many([Document({'txt': txt}) for txt in data]).execute()\n```\n\n\n```python\ndb.show()\n```\n\nWe are going to make these data searchable by activating a [`Model`](../apply_api/model) instance \nto compute vectors for each item inserted to the `\"documents\"` collection.\nFor that we'll use the [sentence-transformers](https://sbert.net/) integration to `superduper`.\nRead more about the `sentence_transformers` integration [here](../ai_integrations/sentence_transformers)\nand [here](../../api/ext/sentence_transformers/).\n\n\n```python\nfrom superduper.ext.sentence_transformers import SentenceTransformer\n\nmodel = SentenceTransformer(\n identifier=\"test\",\n predict_kwargs={\"show_progress_bar\": True},\n model=\"all-MiniLM-L6-v2\",\n device=\"cpu\",\n postprocess=lambda x: x.tolist(),\n)\n```\n\nWe can check that this model gives us what we want by evaluating an output \non a single data-point. (Learn more about the various aspects of `Model` [here](../models/).)\n\n\n```python\nmodel.predict(data[0])\n```\n\nNow that we've verified that this model works, we can \"activate\" it for \nvector-search by creating a [`VectorIndex`](../apply_api/vector_index).\n\n\n```python\nimport pprint\n\nvector_index = model.to_vector_index(select=db['documents'].find(), key='txt')\n\npprint.pprint(vector_index)\n```\n\nYou will see that the `VectorIndex` contains a [`Listener`](../apply_api/listener) instance.\nThis instance wraps the model, and configures it to compute outputs \non data inserted to the `\"documents\"` collection with the key `\"txt\"`.\n\nTo activate this index, we now do:\n\n\n```python\ndb.apply(vector_index)\n```\n\nThe `db.apply` command is a universal command for activating AI components in superduper.\n\nYou will now see lots of output - the model-outputs/ vectors are computed \nand the various parts of the `VectorIndex` are registered in the system.\n\nYou can verify this with:\n\n\n```python\ndb.show()\n```\n\n\n```python\ndb['documents'].find_one().execute().unpack()\n```\n\nTo \"use\" the `VectorIndex` we can execute a vector-search query:\n\n\n```python\nquery = db['documents'].like({'txt': 'Tell me about vector-search'}, vector_index=vector_index.identifier, n=3).find()\ncursor = query.execute()\n```\n\nThis query will return a cursor of [`Document`](../fundamentals/document) instances.\nTo obtain the raw dictionaries, call the `.unpack()` command:\n\n\n```python\nfor r in cursor:\n print('=' * 100)\n print(r.unpack()['txt'])\n print('=' * 100)\n```\n\nYou should see that the documents returned are relevant to the `like` part of the \nquery.\n\nLearn more about building queries with `superduper` [here](../execute_api/overview.md).\n", - "# Custom serialization\n\nIn this tutorial, we demonstrate how developers can flexibily and portably define\ntheir own classes in Superduper. These may be exported with `Component.export` \nand transported to other Superduper deployments with `db.apply`.\n\nTo make our lives difficult, we'll include a data blob in the model, which should be serialized with the \nexported class:\n\n\n```python\n!curl -O https://superduper-public-demo.s3.amazonaws.com/text.json\nimport json\n\nwith open('text.json') as f:\n data = json.load(f)\n```\n\nWe'll define our own `Model` descendant, with a custom `.predict` method. \nWe are free to define any of our own parameters to this class with a simple annotation in the header, since `Model` \nis a `dataclasses.dataclass`:\n\n\n```python\nfrom superduper import *\n\n\nrequires_packages(['openai', None, None])\n\n\nclass NewModel(Model):\n a: int = 2\n b: list\n\n def predict(self, x):\n return x * self.a\n```\n\nIf we want `b` to be saved as a blob in the `db.artifact_store` we can simply\nannotate this in the `artifacts=...` parameter, supplying the serializer we would like to use:\n\n\n```python\nm = NewModel('test-hg', a=2, b=data, artifacts={'b': pickle_serializer})\n```\n\nNow we can export the model:\n\n\n```python\nm.export('test-hg')\n```\n\n\n```python\n!cat test-hg/component.json\n```\n\n\n```python\n!ls test-hg/blobs/\n```\n\nThe following cell works even after restarting the kernel.\nThat means the exported component is now completely portable!\n\n\n```python\nfrom superduper import *\n\nc = Component.read('test-hg')\n\nc.predict(2)\n```\n", - "# Training and Managing MNIST Predictions with superduper\n\n:::note\nThis tutorial guides you through the implementation of a classic machine learning task: MNIST handwritten digit recognition. The twist? We perform the task directly on data hosted in a database using superduper.\n:::\n\nThis example makes it easy to connect any of your image recognition models directly to your database in real-time. \n\n\n```python\n!pip install torch torchvision\n```\n\nFirst, we need to establish a connection to a MongoDB datastore via superduper. \n\n\n```python\nfrom superduper import superduper\n \ndb = superduper('mongomock://')\n```\n\nAfter establishing a connection to MongoDB, the next step is to load the MNIST dataset. superduper's strength lies in handling diverse data types, especially those that are not supported by standard databases. To achieve this, we use an `Encoder` in conjunction with `Document` wrappers. These components allow Python dictionaries containing non-JSONable or bytes objects to be seamlessly inserted into the underlying data infrastructure.\n\n\n```python\nimport torchvision\nfrom superduper import Document\n\nimport random\n\n# Load MNIST images as Python objects using the Python Imaging Library.\n# Each MNIST item is a tuple (image, label)\nmnist_data = list(torchvision.datasets.MNIST(root='./data', download=True))\n\ndocument_list = [Document({'img': x[0], 'class': x[1]}) for x in mnist_data]\n\n# Shuffle the data and select a subset of 1000 documents\nrandom.shuffle(document_list)\ndata = document_list[:1000]\n\n# Insert the selected data into the mnist_collection which we mentioned before like: mnist_collection = Collection('mnist')\ndb['mnist'].insert_many(data[:-100]).execute()\n```\n\nNow that the images and their classes are inserted into the database, we can query the data in its original format. Particularly, we can use the `PIL.Image` instances to inspect the data.\n\n\n```python\n# Get and display one of the images\nr = db['mnist'].find_one().execute()\nr.unpack()['img'].resize((300, 300))\n```\n\nFollowing that, we build our machine learning model. superduper conveniently supports various frameworks, and for this example, we opt for PyTorch, a suitable choice for computer vision tasks. In this instance, we combine `torch` with `torchvision`.\n\nTo facilitate communication with the superduper `Datalayer`, we design `postprocess` and `preprocess` functions. These functions are then wrapped with the `TorchModel` wrapper to create a native superduper object.\n\n\n```python\nfrom superduper.ext.torch import TorchModel\n\nimport torch\n\n# Define the LeNet-5 architecture for image classification\nclass LeNet5(torch.nn.Module):\n def __init__(self, num_classes):\n super().__init__()\n # Layer 1\n self.layer1 = torch.nn.Sequential(\n torch.nn.Conv2d(1, 6, kernel_size=5, stride=1, padding=0),\n torch.nn.BatchNorm2d(6),\n torch.nn.ReLU(),\n torch.nn.MaxPool2d(kernel_size=2, stride=2))\n # Layer 2\n self.layer2 = torch.nn.Sequential(\n torch.nn.Conv2d(6, 16, kernel_size=5, stride=1, padding=0),\n torch.nn.BatchNorm2d(16),\n torch.nn.ReLU(),\n torch.nn.MaxPool2d(kernel_size=2, stride=2))\n # Fully connected layers\n self.fc = torch.nn.Linear(400, 120)\n self.relu = torch.nn.ReLU()\n self.fc1 = torch.nn.Linear(120, 84)\n self.relu1 = torch.nn.ReLU()\n self.fc2 = torch.nn.Linear(84, num_classes)\n\n def forward(self, x):\n out = self.layer1(x)\n out = self.layer2(out)\n out = out.reshape(out.size(0), -1)\n out = self.fc(out)\n out = self.relu(out)\n out = self.fc1(out)\n out = self.relu1(out)\n out = self.fc2(out)\n return out\n\n# Postprocess function for the model output \ndef postprocess(x):\n return int(x.topk(1)[1].item())\n\n# Preprocess function for input data\ndef preprocess(x):\n return torchvision.transforms.Compose([\n torchvision.transforms.Resize((32, 32)),\n torchvision.transforms.ToTensor(),\n torchvision.transforms.Normalize(mean=(0.1307,), std=(0.3081,))]\n )(x)\n\n# Create an instance of the LeNet-5 model\nlenet_model = LeNet5(10)\n\n\nmodel = TorchModel(\n identifier='my-model',\n object=lenet_model,\n preprocess=preprocess,\n postprocess=postprocess, \n preferred_devices=('cpu',),\n)\n\n# Check that the model successfully creates predictions over single data-points\nmodel.predict(data[0]['img'])\n```\n\nNow we are ready to \"train\" or \"fit\" the model. Trainable models in superduper come with a sklearn-like `.fit` method,\nwhich developers may implement for their specific model class. `torch` models come with a pre-configured\n`TorchTrainer` class and `.fit` method. These may be invoked simply by \"applying\" the model to `db`:\n\n\n```python\nfrom torch.nn.functional import cross_entropy\n\nfrom superduper import Metric, Validation, Dataset\nfrom superduper.ext.torch import TorchTrainer\n\nacc = lambda x, y: (sum([xx == yy for xx, yy in zip(x, y)]) / len(x))\n\naccuracy = Metric(identifier='acc', object=acc)\n\nmodel.validation = Validation(\n 'mnist_performance',\n datasets=[\n Dataset(\n identifier='my-valid',\n select=db['mnist'].find({'_fold': 'valid'})\n )\n ],\n metrics=[accuracy],\n)\n\nmodel.trainer = TorchTrainer(\n identifier='my-trainer',\n objective=cross_entropy,\n loader_kwargs={'batch_size': 10},\n max_iterations=1000,\n validation_interval=5,\n select=db['mnist'].find(),\n key=('img', 'class'),\n transform=lambda x, y: (preprocess(x), y),\n)\n\n_ = db.apply(model)\n```\n\nThe trained model is now available via `db.load` - the `model.trainer` object contains the metric traces\nlogged during training.\n\n\n```python\nfrom matplotlib import pyplot as plt\n\n# Load the model from the database\nmodel = db.load('model', model.identifier)\n\n# Plot the accuracy values\nplt.plot(model.trainer.metric_values['my-valid/acc'])\nplt.show()\n```\n", - "# Tutorials\n\nIn this section we guide newcomers through the most \nbasic usage pattern in Superduper.\n\nFor more detailed, flexible and realistic use-cases, \nrefer to the [use-cases section](/use_cases).\n\n```mdx-code-block\nimport DocCardList from '@theme/DocCardList';\n\n\n```", - "# Eager Mode (Alpha) \n\nEager Mode is an interactive way to build superduper applications. \n\nUsers can input data as usual, continuously call models, and view results.\nOnce the interactive debugging and construction are complete, \nthe corresponding data pipeline can be built directly through `apply`, \neliminating the need for direct debugging between AI application models and databases.\n\n:::note\nThis feature is in alpha.\n:::\n\nConnect the database and insert data.\n\n\n```python\nfrom superduper import superduper\n\ndb = superduper('mongomock://test')\n```\n\n\n```python\nimport numpy as np\ndata = [\n {\"x\": 1, \"y\": \"2\", \"z\": np.array([1, 2, 3])},\n {\"x\": 2, \"y\": \"3\", \"z\": np.array([4, 5, 6])},\n {\"x\": 3, \"y\": \"4\", \"z\": np.array([7, 8, 9])},\n]\n\ndb[\"documents\"].insert(data).execute()\n```\n\nWhen using `select.execute(eager_mode=True)`, all returned data will enter eager mode, which can be used for interactive model pipeline construction.\n\n\n```python\ndata = list(db[\"documents\"].select().execute(eager_mode=True))[0]\ndata\n```\n\nDefine the first model and make predictions.\n\n\n```python\nfrom superduper import ObjectModel\ndef func_a(x):\n return {\"x\": x, \"model\": \"a\"}\n\nmodel_a = ObjectModel(identifier=\"a\", object=func_a)\noutput_a = model_a(data[\"x\"])\noutput_a\n```\n\nDefine the second model and make predictions.\n\n\n```python\ndef func_b(x, y, o_a):\n return {\n \"x\": x,\n \"y\": y,\n \"o_a\": o_a,\n \"model\": \"b\"\n }\n\nmodel_b = ObjectModel(identifier=\"b\", object=func_b)\noutput_b = model_b(data[\"x\"], data[\"y\"], output_a)\noutput_b\n```\n\nDefine the third model and make predictions.\n\n\n```python\ndef func_c(x, y, z, o_a, o_b):\n return {\n \"x\": x,\n \"y\": y,\n \"z\": z,\n \"o_a\": o_a,\n \"o_b\": o_b,\n \"model\": \"c\",\n }\n\nmodel_c = ObjectModel(identifier=\"c\", object=func_c)\noutput_c = model_c(data[\"x\"], data[\"y\"], data[\"z\"], output_a, output_b)\noutput_c\n```\n\nApply all models to the data to start monitoring the data and making predictions.\nWhen adding a model result, not only the current model but also the recursively dependent upstream models will be added.\n\n\n```python\noutput_c.apply()\n```\n\n\n```python\nlist(db[\"documents\"].select().outputs(\"a\", \"b\", \"c\").select().execute())\n```\n\nIf you want to modify the predict_id of a specific model, \nyou can use `output.predict_id = \"your_predict_id\"` to set it.\n\n\n```python\nmodel_predict_id = ObjectModel(identifier=\"c\", object=func_c)\noutput_predict_id = model_predict_id(data[\"x\"], data[\"y\"], data[\"z\"], output_a, output_b)\noutput_predict_id.predict_id = \"new_predict_id\"\noutput_predict_id.apply()\n```\n\nView the prediction results of all data in the database.\n\n\n```python\nlist(db[\"_outputs.new_predict_id\"].select().execute())\n```\n\nIf you want to perform if-like conditional operations to route data using different models, you can use `set_condition` to handle it. Currently, only equals and not equals conditions are supported.\n\n\n```python\nmodel_condition = ObjectModel(identifier=\"condition\", object=func_a)\noutput_condition = model_condition(data[\"x\"])\noutput_condition.set_condition(data[\"x\"] == 1)\noutput_condition.apply()\noutput_condition\n```\n\n\n```python\ndb['documents'].find({}, {'x': 1, '_builds': 1, '_files': 1, '_blobs': 1, '_schema': 1}).filter({'x': 1}).execute()\n```\n\n\n```python\nlist(db[\"_outputs.condition\"].select().execute())\n```\n", - "# Listening for new data\n\n:::note\nIn Superduper, AI models may be configured to listen for newly inserted data.\nOutputs will be computed over that data and saved back to the data-backend.\n:::\n\nIn this example we show how to configure 3 models to interact when new data is added.\n\n1. A featurizing computer vision model (images `->` vectors).\n1. 2 models evaluating image-2-text similarity to a set of key-words.\n\nWe use an open-source model \"CLIP\" which we install via `pip` directly from GitHub.\nYou can read more about installing requirements on our docs [here](../get_started/environment).\n\n\n```python\n!pip install git+https://github.com/openai/CLIP.git\n```\n\nWe apply our setup to images from the \n[cats and dogs dataset](https://www.kaggle.com/c/dogs-vs-cats). We've prepared a subset especially \nfor quick experimentation.\n\n\n```python\n!curl -O https://superduper-public-demo.s3.amazonaws.com/images.zip && unzip images.zip\nfrom PIL import Image\nimport os\n\ndata = [f'images/{x}' for x in os.listdir('./images') if x.endswith('png')]\ndata = [{'img': Image.open(path)} for path in data]\n```\n\nNow that we've prepared these records we can insert this data \"directly\" into the database with \na standard insert statement. (Notice however the difference from `pymongo` with the `.execute()` call.)\nThe same pattern may be applied to other database types.\n\n\n```python\nfrom superduper import superduper, Document\n\ndb = superduper('mongomock://')\n\ndb['images'].insert_many([Document(r) for r in data[:-1]]).execute()\n```\n\nWe can verify that the images are correctly saved by retrieved a single record:\n\n\n```python\nr = db['images'].find_one().execute()\nr\n```\n\nThe contents of the `Document` may be accessed by calling `.unpack()`. You can see that the images were saved and retrieved correctly.\n\n\n```python\nr.unpack()['img']\n```\n\nWe now build a `torch` model for text-2-image similarity using the `clip` library. In order to \nsave the outputs correctly in the system, we add the `tensor` datatype to the model:\n\n\n```python\nimport clip\nimport torch\nfrom superduper.ext.torch import TorchModel, tensor\n\n\nmodel, preprocess = clip.load(\"ViT-B/32\", \"cpu\")\n\nclass ImageModel(torch.nn.Module):\n def __init__(self):\n super().__init__()\n self.model = model\n\n def forward(self, image_tensors):\n return self.model.encode_image(image_tensors)\n\n\ndt = tensor(dtype='float', shape=(512,))\n\n\nimage_model = TorchModel(\n identifier='clip_image',\n object=ImageModel(),\n preprocess=preprocess,\n datatype=dt,\n loader_kwargs={'batch_size': 5},\n)\n```\n\nWe can verify that this model gives us the correct outputs on the added data with the `.predict` method:\n\n\n```python\nimage_model.predict(data[0]['img'])\n```\n\nNow we'd like to set up this model to compute outputs on the `'img'` key of each record. \nTo do that we create a `Listener` (see [here](../apply_api/listener) for more information) which \n\"listens\" for incoming and existing data, and computes outputs on that data.\n\nWhen new data is inserted, the model automatically will create outputs on that data. This is a very handy \nfeature for productionizing AI and ML, since a data deployment needs to be keep up-to-date as far as possible.\n\n\n```python\nlistener = image_model.to_listener(\n select=db['images'].find(),\n key='img',\n identifier='image_predictions',\n)\n\n_ = db.apply(listener)\n```\n\nWe can verify that the outputs are correctly inserted into the documents with this query. \nThe outputs are saved in the `listener.outputs` field:\n\n\n```python\nlist(listener.outputs_select.limit(1).execute())[0][listener.outputs].unpack()\n```\n\nDownstream of this first model, we now can add another smaller model, to classify images with configurable terms. \nSince the dataset is concerned with cats and dogs we create 2 downstream models classifying the images in 2 different ways.\n\n\n```python\nfrom superduper import ObjectModel\n\n\nclass Comparer:\n def __init__(self, words, text_features):\n self.targets = {w: text_features[i] for i, w in enumerate(words)}\n self.lookup = list(self.targets.keys())\n self.matrix = torch.stack(list(self.targets.values()))\n\n def __call__(self, vector):\n best = (self.matrix @ vector).topk(1)[1].item()\n return self.lookup[best]\n\n\ncats_vs_dogs = ObjectModel(\n 'cats_vs_dogs',\n object=Comparer(['cat', 'dog'], model.encode_text(clip.tokenize(['cat', 'dog']))),\n).to_listener(\n select=db['images'].find(),\n key=listener.outputs,\n)\n\n \nfelines_vs_canines = ObjectModel(\n 'felines_vs_canines',\n object=Comparer(['feline', 'canine'], model.encode_text(clip.tokenize(['feline', 'canine']))),\n).to_listener(\n select=db['images'].find(),\n key=listener.outputs,\n)\n\n\ndb.apply(cats_vs_dogs)\ndb.apply(felines_vs_canines)\n```\n\nWe can verify that both downstream models have written their outputs to the database by querying a document:\n\n\n```python\nr = db['images'].find_one().execute()\n\nprint(r[cats_vs_dogs.outputs])\nprint(r[felines_vs_canines.outputs])\n```\n\nLet's check that the predictions make sense for the inserted images:\n\n\n```python\ndb['images'].find_one({cats_vs_dogs.outputs: 'cat'}).execute()['img']\n```\n\n\n```python\ndb['images'].find_one({felines_vs_canines.outputs: 'feline'}).execute()['img']\n```\n\n\n```python\ndb['images'].find_one({cats_vs_dogs.outputs: 'dog'}).execute()['img']\n```\n\n\n```python\ndb['images'].find_one({felines_vs_canines.outputs: 'canine'}).execute()['img']\n```\n\nNow that we have installed the models using `Listener`, we can insert new data. This \ndata should be automatically processed by the installed models:\n\n\n```python\ndb['images'].insert_one(Document({**data[-1], 'new': True})).execute()\n```\n\nWe can verify this by querying the data again:\n\n\n```python\nr = db['images'].find_one({'new': True}).execute().unpack()\nr['img']\n```\n\nYou see here that the models have been called in the correct order on the newly added data and the outputs saved \nto the new record:\n\n\n```python\nr['_outputs']\n```\n", - "# Core superduper usage\n\nIn this section we walk through how to perform the key operations with superduper.\nThere are three key patterns C-A-E:\n\n***Connect***\n\n```python\nfrom superduper import superduper\ndb = superduper('')\n```\n\n***Apply***\n\n```python\ndb.apply()\n```\n\n***Execute***\n\n```python\nto_execute = \ndb.execute(to_execute)\n```\n", - "# Apply\n\nIn superduper there are three fundamental base components which you'll use for the majority of your functionality:\n\n- [`Model`](../apply_api/model)\n- [`Listener`](../apply_api/listener)\n- [`VectorIndex`](../apply_api/vector_index)\n\nIn addition there is an overarching component:\n\n- [`Application`](../apply_api/Application)\n\nwhich in some sense \"rules them all\"\n\nWhenever you wish to apply AI to your data, you will instantiate one of more of these, and \"apply\" these to \nyour connection:\n\n```python\ndb.apply(component)\n```\n\n## Base components\n\n### `Model`\n\nA `Model` is a wrapper around a standard ML/ AI model. It may contain additional functionality, such as \npre- and post-processing, and encoding/ decoding data into/ from the correct type required by the database.\n\n`db.apply(model)` tells `superduper` to store the model and its metadata in the system.\n\nIf additional configurations, such as training parameters, are added to the `Model` then the `db.apply` command\nwill also train the component on data in superduper.\n\nRead more about `Model` [here](../apply_api/model).\n\n### `Listener`\n\nA `Listener` wraps a `Model`. The `db.apply(listener)` tells `superduper` to \"listen\" for incoming data and to compute outputs on those data, saving them back in `superduper`.\n\nRead more about `Listener` [here](../apply_api/listener).\n\n### `VectorIndex`\n\nA `VectorIndex` wraps one or two `Listener` components, and tells `superduper` that the outputs computed, should\nbe made searchable via vector-search queries.\n\nRead more about `VectorIndex` [here](../apply_api/vector_index).\n\n## Connecting component: `Stack`\n\nA `Stack` of AI functionality is a combination of multiple `Model`, `Listener`, and `VectorIndex` components which may be \"applied\" in \none pass to your data via superduper. \n\nOn `db.add(stack)` superduper performs the heavy lifting of deciding which components need to be applied \nfirst, which need to be modified on incoming data, and which outputs need to be made searchable.\n\nRead more about `Stack` [here](../apply_api/stack).\n\n## View applied components\n\nUse `db.show` to view components.\n\nView all components:\n\n```python\n>>> db.show()\n[\n {'type_id': 'model', 'identifier': 'my-model'},\n {'type_id': 'model', 'identifier': 'my-other-model'}\n]\n```\n\nView all components of a certain type:\n\n```python\n>>> db.show('')\n['my-model', 'my-other-model']\n```\n\nView all versions of a particular component:\n\n```python\n>>> db.show('', '')\n[0, 1, 2, 3]\n```\n\n## Reloading applied components\n\nWhen components are applied with `db.apply(component)`, the component is provided with a version, which may be optionally used to reload the component.\nBy default the latest version is reloaded:\n\n```python\nreloaded = db.load('', '')\n```\n\n```python\nreloaded = db.load('', '', )\n```\n\nFor example to reload a model, identified by 'my-model', the first version added:\n\n```python\nreloaded_model = db.load('model', 'my-model', 0)\n```\n\n## Read more\n\nRead more about the \"apply\" API [here](../apply_api/component.md).", - "# Connect\n\nThe standard way to connect to Superduper is via the `superduper` decorator:\n\n## Development mode\n\nIn [development mode](../get_started/environment#development-mode), you may provide the URI/ connection details of your data deployment directly\n\n```python\ndb = superduper('')\n```\n\nFor example if you are running a (not secure) MongoDB deployment locally, and you want to connect to the `\"documents\"` database, you might write:\n\n```python\nfrom superduper import superduper\ndb = superduper('mongodb://localhost:27017/documents')\n```\n\n### Complete connection guide\n\nFor a semi-exhaustive list of possible connections see [here](../reusable_snippets/connect_to_superduper).\n\n### Fine grained configuration\n\n`superduper` chooses default `artifact_store` (file blob storage) and `metadata_store` (AI metadata) values for your connection. These defaults may be overridden directly:\n\n```python\ndb = superduper(\n '',\n artifact_store=',\n metadata_store=',\n)\n```\n\n## Cluster mode\n\nIn [cluster mode](../get_started/environment#cluster-mode), the connection string needs to be provided in a configuration \nfile or via environment variable so that all services can connect correctly:\n\nAdd these lines to your configuration:\n\n```yaml\ndata_backend: mongodb://localhost:27018/documents\n```\n\nRead more about configuration [here](../get_started/configuration).\n\nAfter doing this, you may connect directly with the `superduper` decorator:\n\n```python\ndb = superduper()\n```\n\n### Fine grained configuration\n\nFor more granular configuration add these lines:\n\n\n```yaml\ndata_backend: ,\nartifact_store: \nmetadata_store: \n```\n\n## Next steps\n\n`db` is now your connection to your data, models, and model meta-data.\nNow that you have established this connection you are ready to build, deploy and manage AI with Superduper.\n", - "# Execute\n\n`db.execute` is superduper's wrapper around standard database queries:\n\n- Inserts\n- Selects\n- Updates\n- Deletes\n\nAs well as model predictions:\n\n- Prediction on single data points (streaming)\n- Predictions on multiple data points (batch prediction)\n\nAnd also queries which consist of a combination of model computations and data operations:\n\n- Vector-search queries\n- Complex model predictions which include database queries (e.g. \"RAG\")\n\nStandard database queries are built using a compositional syntax similar to that found in Python database clients \nsuch as `pymongo` and `ibis`. The API also includes extensions of this paradigm to cover model predictions\nand vector-searches.\n\nRead more about the differences and approaches to document stores/ SQL data-backends [here](docs/data_integrations).\n\n## Building queries/ predictions\n\nAll queries consist of a \"chain\" of methods executed over a base object. The base object \ncan refer to a table/ collection or a model:\n\n```python\nq = base_object.method_1(*args_1, **kwargs_1).method_2(*args_2, **kwargs_2)....\n```\n\n### Selects\n\n***MongoDB***\n\nA MongoDB `find` query can be built like this:\n\n```python\nq = db['collection'].find().limit(5).skip(2)\n```\n\n***SQL***\n\nA query with on an SQL data-backend can be built with `ibis` syntax like this:\n\n```python\nq = db['documents'].filter(t.brand == 'Nike').limit(5)\n```\n\n### Inserts\n\n***MongoDB***\n\nTypically insert queries wrap `Document` instances and call the `insert` method on a table or collection:\n\n```python\nq = db['documents'].insert_many([Document(r) for r in data])\n```\n\n***SQL***\n\nThe `ibis` insert is slightly different:\n\n```python\nq = db['documents'].insert([Document(r) for r in data])\n```\n\n## Executing the query\n\n\n```python\nresults = q.execute()\n```\n\n***Multiple results***\n\nIterables of results are sent wrapped in a cursor\n\n***Indiviudal results***\n\nIndividual results are sent wrapped in a `Document`\n\nRead more about `.execute` [here](../execute_api/overview).", - "# Anthropic\n\n## Installation\n\n```bash\npip install superduper_anthropic\n```\n\n## API\n\n`superduper` allows users to work with `anthropic` API models. The key integration is the integration \nof high-quality API-hosted LLM services.\n\n| Class | Description | GitHub | API-docs |\n| --- | --- | --- | --- |\n| `superduper.ext.anthropic.AnthropicCompletions` | Completes a prompt with natural language (LLM) | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/anthropic/model.py) | [Docs](/docs/api/ext/anthropic/model#anthropiccompletions) |", - "# OpenAI\n\n## Installation\n\n```bash\npip install superduper_openai\n```\n\n## API\n\n`superduper` allows users to work with `openai` API models.\n\n| Class | Description | GitHub | API-docs |\n| --- | --- | --- | --- |\n| `superduper.ext.openai.OpenAIChatCompletion` | Completes a prompt with natural language (LLM) | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/openai/model.py) | [Docs](/docs/api/ext/openai/model#openaichatcompletion) |\n| `superduper.ext.openai.OpenAIEmbedding` | Embeds a piece of text | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/openai/model.py) | [Docs](/docs/api/ext/openai/model#openaiembedding) |\n| `superduper.ext.openai.OpenAIImageCreation` | Creates an image dependent on a prompt | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/openai/model.py) | [Docs](/docs/api/ext/openai/model#openaiimagecreation) |\n| `superduper.ext.openai.OpenAIAudioTranscription` | Transcribes audio to text | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/openai/model.py) | [Docs](/docs/api/ext/openai/model#openaiaudiotranscription) |\n| `superduper.ext.openai.OpenAIAudioTranslation` | Translates audio | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/openai/model.py) | [Docs](/docs/api/ext/openai/model#openaiaudiotranslation) |", - "---\nsidebar_position: 3\n---\n\n# PyTorch\n\n## Installation\n\n```bash\npip install superduper_torch\n```\n\n## API\n\n`superduper` allows users to work with arbitrary `torch` models, with custom pre-, post-processing and input/ output data-types,\nas well as offering training with `superduper`\n\n\n| Class | Description | GitHub | API-docs |\n| --- | --- | --- | --- |\n| `superduper.ext.torch.model.TorchModel` | Wraps a PyTorch model | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/torch/model.py) | [Docs](/docs/api/ext/torch/model#torchmodel-1) |\n| `superduper.ext.torch.model.TorchTrainer` | May be attached to a `TorchModel` for training | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/torch/training.py) | [Docs](/docs/api/ext/torch/training#torchtrainer)", - "# Cohere\n\n## Installation\n\n```bash\npip install superduper_cohere\n```\n\n## API\n\n`superduper` allows users to work with `cohere` API models.\n\n\n| Class | Description | GitHub | API-docs |\n| --- | --- | --- | --- |\n| `superduper.ext.cohere.CohereEmbed` | Embeds a piece of text as a vector | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/cohere/model.py) | [Docs](/docs/api/ext/cohere/model#cohereembed) |\n| `superduper.ext.cohere.CohereGenerate` | Completes a piece of text with most likely completion | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/cohere/model.py) | [Docs](/docs/api/ext/cohere/model#coheregenerate) |", - "---\nsidebar_position: 1\n---\n\n# Community Support\n\nThe primary way in which developers will integrate and implement functionality from popular AI frameworks, is via\nthe `Predictor` and `Model` abstractions.\n\nThe `Predictor` mixin class, interfaces with all AI frameworks and API providers, which provide `self.predict` functionality,\nand is subclassed by:\n\n| class | framework |\n| --- | --- |\n| `superduper.ext.sklearn.Estimator` | [Scikit-Learn](https://scikit-learn.org/stable/) |\n| `superduper.ext.transformers.Pipeline` | [Hugging Face's `transformers`](https://huggingface.co/docs/transformers/index) |\n| `superduper.ext.torch.TorchModel` | [PyTorch](https://pytorch.org/) |\n| `superduper.ext.openai.OpenAI` | [OpenAI](https://api.openai.com) |\n| `superduper.ext.cohere.Cohere` | [Cohere](https://cohere.com) |\n| `superduper.ext.anthropic.Anthropic` | [Anthropic](https://anthropic.com) |\n| `superduper.ext.jina.Jina` | [Jina](https://jina.ai/embeddings) |\n\nThe `Model` class is subclassed by:\n\n| class | framework |\n| --- | --- |\n| `superduper.ext.sklearn.Estimator` | [Scikit-Learn](https://scikit-learn.org/stable/) |\n| `superduper.ext.transformers.Pipeline` | [Hugging Face's `transformers`](https://huggingface.co/docs/transformers/index) |\n| `superduper.ext.torch.TorchModel` | [PyTorch](https://pytorch.org/) |\n\n`Model` instances implement `self.predict`, but also hold import data, such as model weights, parameters or hyperparameters.\nIn addition, `Model` may implement `self.fit` functionality - model training and calibration.", - "# Sentence-Transformers\n\n## Installation\n\n```bash\npip install superduper_sentence_transformers\n```\n\n## API\n\n`superduper` allows users to work with self-hosted embedding models via \"[Sentence-Transformers](https://sbert.net/)\".\n\n| Class | Description | GitHub | API-docs |\n| --- | --- | --- | --- |\n| `superduper.ext.sentence_transformers.model.SentenceTransformer` | Embeds a piece of text with a model hosted locally | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/sentence_transformers/model.py) | [Docs](/docs/api/ext/sentence_transformers/model#sentencetransformer) |", - "# Scikit-learn\n\n## Installation\n\n```bash\npip install superduper_sklearn\n```\n\n## API\n\n`superduper` allows users to work with arbitrary `sklearn` estimators, with additional support for pre-, post-processing and input/ output data-types.\n\nRead more about this [here](/docs/docs/walkthrough/ai_models#scikit-learn).\n\n| Class | Description | GitHub | API-docs |\n| --- | --- | --- | --- |\n| `superduper.ext.sklearn.model.Estimator` | Wraps a scikit-learn estimator | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/sklearn/model.py) | [Docs](/docs/api/ext/sklearn/model#estimator) |\n| `superduper.ext.sklearn.model.SklearnTrainer` | May be attached to an `Estimator` for training | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/sklearn/model.py) | [Docs](/docs/api/ext/sklearn/model#sklearntrainer) |", - "# vLLM\n\n## Installation\n\n```bash\npip install superduper_vllm\n```\n\n## API\n\n`superduper` allows users to work with self-hosted LLM models via \"[vLLM](https://github.com/vllm-project/vllm)\".\n\n| Class | Description | GitHub | API-docs |\n| --- | --- | --- | --- |\n| `superduper.ext.vllm.VllmModel` | Completes a prompt with natural language (LLM) based on a self hosted LLM | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/vllm/model.py) | [Docs](/docs/api/ext/vllm/model#vllmmodel) |\n| `superduper.ext.vllm.VllmAPI` | Completes a prompt with natural language (LLM) based on a self hosted LLM behind the vLLM API server | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/vllm/model.py) | [Docs](/docs/api/ext/vllm/model#vllmapi) |\n\n", - "# Transformers\n\n## Installation\n\n```bash\npip install superduper_transformers\n```\n\n## API\n\n[Transformers](https://huggingface.co/docs/transformers/index) is a popular AI framework, and we have incorporated native support for Transformers to provide essential Large Language Model (LLM) capabilities.\n`superduper` allows users to work with arbitrary `transformers` pipelines, with custom input/ output data-types.\n\n| Class | Description | GitHub | API-docs |\n| --- | --- | --- | --- |\n| `superduper.ext.transformers.model.TextClassification` | A pipeline for classifying text. | [Code](https://github.com/superduper/superduper/blob/main/superduper/transformers/model.py) | [Docs](/docs/api/ext/transformers/model#textclassificationpipeline) |\n| `superduper.ext.transformers.model.LLM` | Work locally with the `transformers` implementations of LLM. | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/transformers/model.py) | [Docs](/docs/api/ext/transformers/model#llm) |\n\n\n### `TextClassification`\n\nOne of the most commonly used pipelines in `transformers` is the `TextClassificationPipeline`.\nYou may apply and train these pipelines with `superduper`.\nRead more in the [API documentation](/docs/api/ext/transformers/model#textclassificationpipeline).\n\n\n### `LLM`\n\nYou can quickly utilize LLM capabilities using the following Python function:\n\n```python\nfrom superduper.ext.transformers import LLM\nllm = LLM(model_name_or_path=\"facebook/opt-350m\")\nllm.predict(\"What are we having for dinner?\")\n```\n\nOr use a method similar to transformers’ from_pretrained, just need to supplement the identifier parameter.\n\n```python\nfrom superduper.ext.transformers import LLM\nllm = LLM.from_pretrained(\n \"facebook/opt-350m\", \n load_in_8bit=True, \n device_map=\"cuda\", \n identifier=\"llm\",\n)\n```\n\nThe model can be configured with the following parameters:\n\n- adapter_id: Add an adapter to the base model for inference.\n- model_kwargs: a dictionary; all the model_kwargs will be passed to transformers.AutoModelForCausalLM.from_pretrained. You can provide parameters such as trust_remote_code=True.\n- tokenizer_kwargs: a dictionary; all the tokenizer_kwargs will be passed to transformers.AutoTokenizer.from_pretrained.\n\n## Training\n\nFor a fully worked out training/ fine-tuning use-case refer to the [use-cases section](../use_cases/fine_tune_llm_on_database.md).\n\n### LLM fine-tuning\n\n`superduper` provides a convenient fine-tuning method based on the [trl](https://huggingface.co/docs/trl/index) framework to help you train data in the database.\n\n### Supported Features\n\n**Training Methods**:\n\n- Full fine-tuning\n- LoRA fine-tuning\n\n**Parallel Training**:\n\nParallel training is supported using Ray, with data parallelism as the default strategy. You can also pass DeepSpeed parameters to configure parallelism through [DeepSpeed configuration](https://huggingface.co/docs/transformers/main_classes/deepspeed#zero).\n\n- Multi-GPUs fine-tuning\n- Multi-nodes fine-tuning\n\n**Training on Ray**:\n\nWe can use Ray to train models. When using Ray as the compute backend, tasks will automatically run in Ray and the program will no longer be blocked.\n", - "---\nsidebar_position: 2\n---\n\n# Custom Models\n\n`superduper` provides fully flexible support for AI models from across the \nopen-source ecosystem.\n\nCustom AI integrations may be achieved by building on to of the base `superduper.Model` class.\n\nRead more [here](../models/bring_your_own_models).", - "# Llama.cpp\n\n## Installation\n\n```bash\npip install superduper_llama_cpp\n```\n\n## API\n\n`superduper` allows users to work with self-hosted LLM models via \"[Llama.cpp](https://github.com/ggerganov/llama.cpp)\".\n\n| Class | Description | GitHub | API-docs |\n| --- | --- | --- | --- |\n| `superduper.ext.llamacpp.LlamaCpp` | Completes a prompt with natural language (LLM) | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/llamacpp/model.py) | [Docs](/docs/api/ext/llamacpp/model#llamacpp) |\n| `superduper.ext.llamacpp.LlamaCppEmbedding` | Embeds text | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/llamacpp/model.py) | [Docs](/docs/api/ext/llamacpp/model#llamacppembedding) |", - "# Jina\n\n## Installation\n\n```bash\npip install superduper_jina\n```\n\n## API\n\n`superduper` allows users to work with `Jina Embeddings models` through the Jina Embedding API.\n\nRead more about this [here](/docs/docs/walkthrough/ai_apis#jina).\n\n| Class | Description | GitHub | API-docs |\n| --- | --- | --- | --- |\n| `superduper.ext.jina.JinaEmbeddings` | Embeds a piece of text with a very long maximum context length | [Code](https://github.com/superduper/superduper/blob/main/superduper/ext/jina/model.py) | [Docs](/docs/api/ext/jina/model#jinaembedding) |" -] diff --git a/templates/text_vector_search/blobs/70966ca6683007348be9fc71e5d4459fb66fb27c b/templates/text_vector_search/blobs/1f5253f1e85147807ea1fbd45124f598774024f5 similarity index 76% rename from templates/text_vector_search/blobs/70966ca6683007348be9fc71e5d4459fb66fb27c rename to templates/text_vector_search/blobs/1f5253f1e85147807ea1fbd45124f598774024f5 index 416ad9298..c30f9022b 100644 Binary files a/templates/text_vector_search/blobs/70966ca6683007348be9fc71e5d4459fb66fb27c and b/templates/text_vector_search/blobs/1f5253f1e85147807ea1fbd45124f598774024f5 differ diff --git a/templates/text_vector_search/blobs/2abbced0b779db61865b869a5a707c1114193b11 b/templates/text_vector_search/blobs/2abbced0b779db61865b869a5a707c1114193b11 deleted file mode 100644 index 30542043e..000000000 Binary files a/templates/text_vector_search/blobs/2abbced0b779db61865b869a5a707c1114193b11 and /dev/null differ diff --git a/templates/text_vector_search/blobs/ab1417c5365dbbc692b8d9c6be9af59f7d17fbcd b/templates/text_vector_search/blobs/ab1417c5365dbbc692b8d9c6be9af59f7d17fbcd new file mode 100644 index 000000000..0212abe70 Binary files /dev/null and b/templates/text_vector_search/blobs/ab1417c5365dbbc692b8d9c6be9af59f7d17fbcd differ diff --git a/templates/text_vector_search/blobs/cce2e9b3e021884810b3c313763de1669b102235 b/templates/text_vector_search/blobs/ae86bc10a051f0f2d72122d621410e3280a2ea6e similarity index 93% rename from templates/text_vector_search/blobs/cce2e9b3e021884810b3c313763de1669b102235 rename to templates/text_vector_search/blobs/ae86bc10a051f0f2d72122d621410e3280a2ea6e index e41c6328f..d30c5e408 100644 Binary files a/templates/text_vector_search/blobs/cce2e9b3e021884810b3c313763de1669b102235 and b/templates/text_vector_search/blobs/ae86bc10a051f0f2d72122d621410e3280a2ea6e differ diff --git a/templates/text_vector_search/build.ipynb b/templates/text_vector_search/build.ipynb index 7c37e1400..39f364dd6 100644 --- a/templates/text_vector_search/build.ipynb +++ b/templates/text_vector_search/build.ipynb @@ -3,7 +3,13 @@ { "cell_type": "markdown", "id": "38c1a328-fd86-4c5f-bd54-b8664f433608", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [] + }, "source": [ "# Text vector search" ] @@ -32,12 +38,19 @@ "cell_type": "code", "execution_count": null, "id": "3ef70f6d-a189-460a-8864-241a689624e2", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [ + "parameters" + ] + }, "outputs": [], "source": [ "APPLY = False\n", - "COLLECTION_NAME = '' if not APPLY else 'sample_text_vector_search'\n", - "ID_FIELD = '' if not APPLY else '_id'" + "COLLECTION_NAME = '' if not APPLY else 'sample_text_vector_search'" ] }, { @@ -69,10 +82,23 @@ "outputs": [], "source": [ "import json\n", + "import requests\n", + "import io\n", "\n", - "with open('../simple_rag/data.json', 'r') as f:\n", - " data = json.load(f)\n", - "data = [{'x': r} for r in data]" + "def getter():\n", + " response = requests.get('https://superduperdb-public-demo.s3.amazonaws.com/text.json')\n", + " return json.loads(response.content.decode('utf-8'))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "24ad2cd3-65d9-41c9-82b9-e6e9700828fa", + "metadata": {}, + "outputs": [], + "source": [ + "if APPLY:\n", + " data = getter()" ] }, { @@ -157,7 +183,7 @@ "\n", "upstream_listener = Listener(\n", " model=Chunker('chunk_model', chunk_size=200, example='test ' * 50),\n", - " select=db[COLLECTION_NAME].select(ID_FIELD, 'x'),\n", + " select=db[COLLECTION_NAME].select(),\n", " key='x',\n", " identifier=f'chunker_{COLLECTION_NAME}',\n", " flatten=True,\n", @@ -398,7 +424,6 @@ " substitutions={\n", " COLLECTION_NAME: 'table_name',\n", " search_term: 'search_term',\n", - " CFG.output_prefix: 'output_prefix',\n", " 'mongodb': 'data_backend',\n", " },\n", " types={\n", @@ -410,10 +435,6 @@ " 'type': 'str',\n", " 'default': 'sample_text_vector_search'\n", " },\n", - " 'output_prefix': {\n", - " 'type': 'str',\n", - " 'default': CFG.output_prefix\n", - " },\n", " 'data_backend': {\n", " 'type': 'mongodb',\n", " 'choices': ['mongodb', 'ibis'],\n", @@ -439,23 +460,23 @@ "outputs": [], "source": [ "from superduper import Template, CFG, Table, Schema\n", + "from superduper.components.dataset import RemoteData\n", "\n", "template = Template(\n", " 'text_vector_search',\n", " template=app,\n", " default_table=Table(\n", " 'sample_text_vector_search',\n", - " data=data,\n", " schema=Schema('sample_text_vector_search/schema', fields={'x': 'str'}),\n", + " data=RemoteData(\n", + " 'superduper-docs',\n", + " getter=getter,\n", + " )\n", " ),\n", " queries=[qt],\n", - " substitutions={COLLECTION_NAME: 'table_name', CFG.output_prefix: 'output_prefix', 'mongodb': 'data_backend'},\n", - " template_variables=['embedding_model', 'table_name', 'output_prefix', 'data_backend'],\n", + " substitutions={COLLECTION_NAME: 'table_name', 'mongodb': 'data_backend'},\n", + " template_variables=['embedding_model', 'table_name', 'data_backend'],\n", " types={\n", - " 'id_field': {\n", - " 'type': 'str',\n", - " 'default': '_id',\n", - " },\n", " 'embedding_model': {\n", " 'type': 'str',\n", " 'choices': ['openai', 'sentence_transformers'],\n", @@ -465,10 +486,6 @@ " 'type': 'str',\n", " 'default': 'sample_text_vector_search'\n", " },\n", - " 'output_prefix': {\n", - " 'type': 'str',\n", - " 'default': CFG.output_prefix\n", - " },\n", " 'data_backend': {\n", " 'type': 'mongodb',\n", " 'choices': ['mongodb', 'ibis'],\n", diff --git a/templates/text_vector_search/component.json b/templates/text_vector_search/component.json index 51aaabe46..dbbde5f56 100644 --- a/templates/text_vector_search/component.json +++ b/templates/text_vector_search/component.json @@ -15,16 +15,24 @@ "_fold": "?str" } }, - "datatype:pickle": { + "datatype:dill": { "_path": "superduper.components.datatype.get_serializer", - "method": "pickle", + "method": "dill", "encodable": "artifact" }, - "2abbced0b779db61865b869a5a707c1114193b11": { + "ab1417c5365dbbc692b8d9c6be9af59f7d17fbcd": { "_path": "superduper.components.datatype.Artifact", - "datatype": "?datatype:pickle", + "datatype": "?datatype:dill", "uri": null, - "blob": "&:blob:2abbced0b779db61865b869a5a707c1114193b11" + "blob": "&:blob:ab1417c5365dbbc692b8d9c6be9af59f7d17fbcd" + }, + "dataset:superduper-docs": { + "_path": "superduper.components.dataset.RemoteData", + "upstream": null, + "plugins": null, + "cache": true, + "status": null, + "getter": "?ab1417c5365dbbc692b8d9c6be9af59f7d17fbcd" }, "table:sample_text_vector_search": { "_path": "superduper.components.table.Table", @@ -34,7 +42,7 @@ "status": null, "schema": "?schema:sample_text_vector_search/schema", "primary_id": "id", - "data": "?2abbced0b779db61865b869a5a707c1114193b11" + "data": "?dataset:superduper-docs" }, "query_template:vector_search": { "_path": "superduper.components.template.QueryTemplate", @@ -70,10 +78,6 @@ "type": "str", "default": "sample_text_vector_search" }, - "output_prefix": { - "type": "str", - "default": "_outputs__" - }, "data_backend": { "type": "mongodb", "choices": [ @@ -103,14 +107,14 @@ "method": "dill", "encodable": "artifact" }, - "cce2e9b3e021884810b3c313763de1669b102235": { + "ae86bc10a051f0f2d72122d621410e3280a2ea6e": { "_path": "superduper.components.datatype.Artifact", "datatype": "?datatype:dill", "uri": null, - "blob": "&:blob:cce2e9b3e021884810b3c313763de1669b102235" + "blob": "&:blob:ae86bc10a051f0f2d72122d621410e3280a2ea6e" }, "model:chunk_model": { - "_object": "?cce2e9b3e021884810b3c313763de1669b102235", + "_object": "?ae86bc10a051f0f2d72122d621410e3280a2ea6e", "upstream": null, "plugins": null, "cache": true, @@ -128,10 +132,10 @@ "trainer": null, "chunk_size": 200 }, - "var-table-name-select-var-id-field-x": { + "var-table-name-select": { "_path": "superduper_.query.parse_query", "documents": [], - "query": ".select(\"\", \"x\")" + "query": ".select()" }, "listener:chunker_": { "_path": "superduper.components.listener.Listener", @@ -143,7 +147,7 @@ "key": "x", "model": "?model:chunk_model", "predict_kwargs": {}, - "select": "?var-table-name-select-var-id-field-x", + "select": "?var-table-name-select", "flatten": true }, "datatype:sqlvector[1536]": { @@ -185,11 +189,11 @@ 1024 ] }, - "70966ca6683007348be9fc71e5d4459fb66fb27c": { + "1f5253f1e85147807ea1fbd45124f598774024f5": { "_path": "superduper.components.datatype.Artifact", "datatype": "?datatype:dill", "uri": null, - "blob": "&:blob:70966ca6683007348be9fc71e5d4459fb66fb27c" + "blob": "&:blob:1f5253f1e85147807ea1fbd45124f598774024f5" }, "model:sentence-transformers-embedding": { "_path": "superduper_sentence_transformers.model.SentenceTransformer", @@ -218,7 +222,7 @@ "trainer": null, "model": "BAAI/bge-small-en", "preprocess": null, - "postprocess": "?70966ca6683007348be9fc71e5d4459fb66fb27c" + "postprocess": "?1f5253f1e85147807ea1fbd45124f598774024f5" }, "model:embedding": { "_path": "superduper.components.model.ModelRouter", @@ -297,14 +301,9 @@ "template_variables": [ "embedding_model", "table_name", - "output_prefix", "data_backend" ], "types": { - "id_field": { - "type": "str", - "default": "_id" - }, "embedding_model": { "type": "str", "choices": [ @@ -317,10 +316,6 @@ "type": "str", "default": "sample_text_vector_search" }, - "output_prefix": { - "type": "str", - "default": "_outputs__" - }, "data_backend": { "type": "mongodb", "choices": [ diff --git a/templates/text_vector_search/requirements.txt b/templates/text_vector_search/requirements.txt index 5327ebe4b..1d22b606b 100644 --- a/templates/text_vector_search/requirements.txt +++ b/templates/text_vector_search/requirements.txt @@ -1,4 +1,2 @@ -superduper==0.0.4.dev -openai>=1.1.2 -httpx -sentence-transformers>=2.2.2 \ No newline at end of file +-e ./plugins/openai +-e ./plugins/sentence_transformers \ No newline at end of file diff --git a/templates/transfer_learning/blobs/07a730747184cc9e74d063e3ba1d63490a97683a b/templates/transfer_learning/blobs/07a730747184cc9e74d063e3ba1d63490a97683a deleted file mode 100644 index b81e8082b..000000000 Binary files a/templates/transfer_learning/blobs/07a730747184cc9e74d063e3ba1d63490a97683a and /dev/null differ diff --git a/templates/transfer_learning/blobs/08874721584e8ab2e9715feb46d773621bad7163 b/templates/transfer_learning/blobs/117d23db837c4b47b161f5e8a3ce0a1e91db1c3f similarity index 62% rename from templates/transfer_learning/blobs/08874721584e8ab2e9715feb46d773621bad7163 rename to templates/transfer_learning/blobs/117d23db837c4b47b161f5e8a3ce0a1e91db1c3f index 1a48e3392..cc73404fa 100644 Binary files a/templates/transfer_learning/blobs/08874721584e8ab2e9715feb46d773621bad7163 and b/templates/transfer_learning/blobs/117d23db837c4b47b161f5e8a3ce0a1e91db1c3f differ diff --git a/templates/transfer_learning/blobs/3a847462147e3361a60b17215078490f59767184 b/templates/transfer_learning/blobs/3a847462147e3361a60b17215078490f59767184 new file mode 100644 index 000000000..a560a3ac5 Binary files /dev/null and b/templates/transfer_learning/blobs/3a847462147e3361a60b17215078490f59767184 differ diff --git a/templates/transfer_learning/blobs/4b4af3ab7a98258049d6f5e790f8329677b4bc13 b/templates/transfer_learning/blobs/566f28394dde6ba99e520e5718cf1d043b109f40 similarity index 80% rename from templates/transfer_learning/blobs/4b4af3ab7a98258049d6f5e790f8329677b4bc13 rename to templates/transfer_learning/blobs/566f28394dde6ba99e520e5718cf1d043b109f40 index 4adb2cd38..a3ab723a2 100644 Binary files a/templates/transfer_learning/blobs/4b4af3ab7a98258049d6f5e790f8329677b4bc13 and b/templates/transfer_learning/blobs/566f28394dde6ba99e520e5718cf1d043b109f40 differ diff --git a/templates/transfer_learning/blobs/12b0bbc77db0240b2641cda7a18a0d278e069e17 b/templates/transfer_learning/blobs/617bfe65cffb71045ee56b2f6ecf53471948e5d3 similarity index 73% rename from templates/transfer_learning/blobs/12b0bbc77db0240b2641cda7a18a0d278e069e17 rename to templates/transfer_learning/blobs/617bfe65cffb71045ee56b2f6ecf53471948e5d3 index ba0d5011d..725be31b9 100644 Binary files a/templates/transfer_learning/blobs/12b0bbc77db0240b2641cda7a18a0d278e069e17 and b/templates/transfer_learning/blobs/617bfe65cffb71045ee56b2f6ecf53471948e5d3 differ diff --git a/templates/transfer_learning/blobs/1efb5539a7bf2d03f2bb6c4b331d4daa9723b045 b/templates/transfer_learning/blobs/abb0b9a01af793ed8b2ee428d91ac23d30bba11a similarity index 78% rename from templates/transfer_learning/blobs/1efb5539a7bf2d03f2bb6c4b331d4daa9723b045 rename to templates/transfer_learning/blobs/abb0b9a01af793ed8b2ee428d91ac23d30bba11a index 9ac01d50d..8a1f2fee4 100644 Binary files a/templates/transfer_learning/blobs/1efb5539a7bf2d03f2bb6c4b331d4daa9723b045 and b/templates/transfer_learning/blobs/abb0b9a01af793ed8b2ee428d91ac23d30bba11a differ diff --git a/templates/transfer_learning/blobs/aa581246c925d3c82d51eaa1c7c622a320907d80 b/templates/transfer_learning/blobs/ae6e0ba86d9ad714157c066d9070401072cda7d0 similarity index 89% rename from templates/transfer_learning/blobs/aa581246c925d3c82d51eaa1c7c622a320907d80 rename to templates/transfer_learning/blobs/ae6e0ba86d9ad714157c066d9070401072cda7d0 index 1f0b391d0..1a12f08ae 100644 Binary files a/templates/transfer_learning/blobs/aa581246c925d3c82d51eaa1c7c622a320907d80 and b/templates/transfer_learning/blobs/ae6e0ba86d9ad714157c066d9070401072cda7d0 differ diff --git a/templates/transfer_learning/blobs/c5e455b84077be0bc2e294adbc82851b5f373f74 b/templates/transfer_learning/blobs/c5e455b84077be0bc2e294adbc82851b5f373f74 new file mode 100644 index 000000000..4e60fdb4d Binary files /dev/null and b/templates/transfer_learning/blobs/c5e455b84077be0bc2e294adbc82851b5f373f74 differ diff --git a/templates/transfer_learning/blobs/5bc8e544cad19b05fd301a92d2a163c49588eff0 b/templates/transfer_learning/blobs/de1e4576d2c743b018e3afb4badc241c509d65ce similarity index 77% rename from templates/transfer_learning/blobs/5bc8e544cad19b05fd301a92d2a163c49588eff0 rename to templates/transfer_learning/blobs/de1e4576d2c743b018e3afb4badc241c509d65ce index 994110258..3a2957507 100644 Binary files a/templates/transfer_learning/blobs/5bc8e544cad19b05fd301a92d2a163c49588eff0 and b/templates/transfer_learning/blobs/de1e4576d2c743b018e3afb4badc241c509d65ce differ diff --git a/templates/transfer_learning/blobs/d53c8306ea14f3b0dc51732dc7b1b992f86817bd b/templates/transfer_learning/blobs/e829d70044fe76e239781c53dbcf134baf146c3b similarity index 63% rename from templates/transfer_learning/blobs/d53c8306ea14f3b0dc51732dc7b1b992f86817bd rename to templates/transfer_learning/blobs/e829d70044fe76e239781c53dbcf134baf146c3b index b61e057b0..a0acff504 100644 Binary files a/templates/transfer_learning/blobs/d53c8306ea14f3b0dc51732dc7b1b992f86817bd and b/templates/transfer_learning/blobs/e829d70044fe76e239781c53dbcf134baf146c3b differ diff --git a/templates/transfer_learning/blobs/ef455cfe171f625141c9b4a8e610d05451a4b804 b/templates/transfer_learning/blobs/ef455cfe171f625141c9b4a8e610d05451a4b804 deleted file mode 100644 index 1293fe734..000000000 Binary files a/templates/transfer_learning/blobs/ef455cfe171f625141c9b4a8e610d05451a4b804 and /dev/null differ diff --git a/templates/transfer_learning/build.ipynb b/templates/transfer_learning/build.ipynb index e782e02ee..990af1711 100644 --- a/templates/transfer_learning/build.ipynb +++ b/templates/transfer_learning/build.ipynb @@ -12,12 +12,19 @@ "cell_type": "code", "execution_count": null, "id": "31135e11-42f2-4ca7-b2ed-491eb7d074ae", - "metadata": {}, + "metadata": { + "editable": true, + "slideshow": { + "slide_type": "" + }, + "tags": [ + "parameters" + ] + }, "outputs": [], "source": [ "APPLY = False\n", "COLLECTION_NAME = '' if not APPLY else 'sample_transfer_learning'\n", - "ID_FIELD = '' if not APPLY else '_id'\n", "MODALITY = 'text'" ] }, @@ -30,19 +37,7 @@ "source": [ "from superduper import superduper, CFG\n", "\n", - "CFG.force_apply = True\n", - "\n", - "db = superduper()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "eba94a6b-1645-44e6-b063-c5393769e477", - "metadata": {}, - "outputs": [], - "source": [ - "db['sample_transfer_learning'].outputs('features__32b44ce86a684467ad7be432a360b652').tolist()" + "db = superduper('mongomock://test_db')" ] }, { @@ -61,26 +56,30 @@ "metadata": {}, "outputs": [], "source": [ - "num_classes = 2\n", - "\n", - "if MODALITY == 'text':\n", - " !curl -O https://superduperdb-public-demo.s3.amazonaws.com/text_classification.json\n", - "\n", - " import json\n", - " with open(\"text_classification.json\", \"r\") as f:\n", - " data = json.load(f)\n", - " data = data[:200]\n", - "else:\n", - " !curl -O https://superduperdb-public-demo.s3.amazonaws.com/images_classification.zip && unzip images_classification.zip\n", - "\n", + "def getter(modality='text'):\n", " import json\n", - " from PIL import Image\n", - "\n", - " with open('images/images.json', 'r') as f:\n", - " data = json.load(f)\n", - " data = [{'x': Image.open(d['image_path']), 'y': d['label']} for d in data]\n", - "\n", - "data = [{'data': d['x'], 'label': d['y']} for d in data]" + " import subprocess\n", + "\n", + " if modality == 'text': \n", + " subprocess.run([\n", + " 'curl', '-O', 'https://superduperdb-public-demo.s3.amazonaws.com/text_classification.json',\n", + " ])\n", + " with open(\"text_classification.json\", \"r\") as f:\n", + " data = json.load(f)\n", + " subprocess.run(['rm', 'text_classification.json'])\n", + " data = data[:200]\n", + " else:\n", + " subprocess.run([\n", + " 'curl', '-O', 'https://superduperdb-public-demo.s3.amazonaws.com/images_classification.zip',\n", + " ])\n", + " subprocess.run(['unzip', 'images_classification.zip'])\n", + " subprocess.run(['rm', 'images_classification.zip'])\n", + " import json\n", + " from PIL import Image\n", + " with open('images/images.json', 'r') as f:\n", + " data = json.load(f)\n", + " data = [{'x': Image.open(d['image_path']), 'y': d['label']} for d in data]\n", + " return data" ] }, { @@ -213,14 +212,15 @@ "feature_extractor_listener = Listener(\n", " model=feature_extractor,\n", " select=db[COLLECTION_NAME].select(),\n", - " key='data',\n", + " key='x',\n", " identifier=\"features\"\n", ")\n", "\n", "\n", "if APPLY:\n", " feature_extractor_listener = db.apply(\n", - " feature_extractor_listener\n", + " feature_extractor_listener,\n", + " force=True,\n", " )" ] }, @@ -249,7 +249,7 @@ " object=SVC(),\n", " trainer=SklearnTrainer(\n", " \"my-scikit-trainer\",\n", - " key=(feature_extractor_listener.outputs, \"label\"),\n", + " key=(feature_extractor_listener.outputs, \"y\"),\n", " select=db[COLLECTION_NAME].outputs(feature_extractor_listener.predict_id),\n", " ),\n", ")" @@ -270,7 +270,7 @@ "\n", "\n", "class SimpleModel(nn.Module):\n", - " def __init__(self, input_size=16, hidden_size=32, num_classes=3):\n", + " def __init__(self, input_size=16, hidden_size=32, num_classes=2):\n", " super(SimpleModel, self).__init__()\n", " self.hidden_size = hidden_size\n", " self.fc1 = None\n", @@ -299,14 +299,14 @@ " return torch.tensor(features), label\n", "\n", "\n", - "model = SimpleModel(num_classes=num_classes)\n", + "model = SimpleModel(num_classes=2)\n", "torch_model = TorchModel(\n", " identifier='my-model-torch',\n", " object=model,\n", " preprocess=preprocess,\n", " postprocess=postprocess,\n", " trainer=TorchTrainer(\n", - " key=(feature_extractor_listener.outputs, 'label'),\n", + " key=(feature_extractor_listener.outputs, 'y'),\n", " identifier='my-torch-trainer',\n", " objective=cross_entropy,\n", " loader_kwargs={'batch_size': 10},\n", @@ -335,15 +335,13 @@ "source": [ "from superduper import Dataset, Metric, Validation\n", "\n", - "\n", "def acc(x, y):\n", " return sum([xx == yy for xx, yy in zip(x, y)]) / len(x)\n", "\n", - "\n", "accuracy = Metric(identifier=\"acc\", object=acc)\n", "validation = Validation(\n", " \"transfer_learning_performance\",\n", - " key=(feature_extractor_listener.outputs, \"label\"),\n", + " key=(feature_extractor_listener.outputs, \"y\"),\n", " datasets=[\n", " Dataset(\n", " identifier=\"my-valid\",\n", @@ -389,7 +387,7 @@ "outputs": [], "source": [ "if APPLY:\n", - " db.apply(estimator)" + " db.apply(estimator, force=True)" ] }, { @@ -435,6 +433,7 @@ "outputs": [], "source": [ "from superduper import Template, Table, Schema\n", + "from superduper.components.dataset import RemoteData\n", "\n", "t = Template(\n", " 'transfer_learning',\n", @@ -442,9 +441,12 @@ " 'sample_transfer_learning',\n", " schema=Schema(\n", " 'sample_transfer_learning/schema',\n", - " fields={'data': 'str', 'label': 'int'},\n", + " fields={'x': 'str', 'y': 'int'},\n", + " ),\n", + " data=RemoteData(\n", + " 'text_classification',\n", + " getter=getter,\n", " ),\n", - " data=data,\n", " ),\n", " template=application,\n", " substitutions={'docs': 'table_name', 'text': 'modality'},\n", diff --git a/templates/transfer_learning/component.json b/templates/transfer_learning/component.json index 419c58858..eaa255c48 100644 --- a/templates/transfer_learning/component.json +++ b/templates/transfer_learning/component.json @@ -14,21 +14,29 @@ "cache": true, "status": null, "fields": { - "data": "?str", - "label": "?int", + "x": "?str", + "y": "?int", "_fold": "?str" } }, - "datatype:pickle": { + "datatype:dill": { "_path": "superduper.components.datatype.get_serializer", - "method": "pickle", + "method": "dill", "encodable": "artifact" }, - "07a730747184cc9e74d063e3ba1d63490a97683a": { + "3a847462147e3361a60b17215078490f59767184": { "_path": "superduper.components.datatype.Artifact", - "datatype": "?datatype:pickle", + "datatype": "?datatype:dill", "uri": null, - "blob": "&:blob:07a730747184cc9e74d063e3ba1d63490a97683a" + "blob": "&:blob:3a847462147e3361a60b17215078490f59767184" + }, + "dataset:text_classification": { + "_path": "superduper.components.dataset.RemoteData", + "upstream": null, + "plugins": null, + "cache": true, + "status": null, + "getter": "?3a847462147e3361a60b17215078490f59767184" }, "table:sample_transfer_learning": { "_path": "superduper.components.table.Table", @@ -38,7 +46,7 @@ "status": null, "schema": "?schema:sample_transfer_learning/schema", "primary_id": "id", - "data": "?07a730747184cc9e74d063e3ba1d63490a97683a" + "data": "?dataset:text_classification" }, "transfer_learning": { "_path": "superduper.components.template.Template", @@ -54,11 +62,11 @@ "method": "dill", "encodable": "artifact" }, - "5bc8e544cad19b05fd301a92d2a163c49588eff0": { + "de1e4576d2c743b018e3afb4badc241c509d65ce": { "_path": "superduper.components.datatype.Artifact", "datatype": "?datatype:dill", "uri": null, - "blob": "&:blob:5bc8e544cad19b05fd301a92d2a163c49588eff0" + "blob": "&:blob:de1e4576d2c743b018e3afb4badc241c509d65ce" }, "model:embedding": { "_path": "superduper_sentence_transformers.model.SentenceTransformer", @@ -85,7 +93,7 @@ "trainer": null, "model": "all-MiniLM-L6-v2", "preprocess": null, - "postprocess": "?5bc8e544cad19b05fd301a92d2a163c49588eff0" + "postprocess": "?de1e4576d2c743b018e3afb4badc241c509d65ce" }, "resnet18": { "_path": "superduper.base.leaf.ImportCall", @@ -95,17 +103,17 @@ "pretrained": true } }, - "aa581246c925d3c82d51eaa1c7c622a320907d80": { + "ae6e0ba86d9ad714157c066d9070401072cda7d0": { "_path": "superduper.components.datatype.Artifact", "datatype": "?datatype:dill", "uri": null, - "blob": "&:blob:aa581246c925d3c82d51eaa1c7c622a320907d80" + "blob": "&:blob:ae6e0ba86d9ad714157c066d9070401072cda7d0" }, - "1efb5539a7bf2d03f2bb6c4b331d4daa9723b045": { + "abb0b9a01af793ed8b2ee428d91ac23d30bba11a": { "_path": "superduper.components.datatype.Artifact", "datatype": "?datatype:dill", "uri": null, - "blob": "&:blob:1efb5539a7bf2d03f2bb6c4b331d4daa9723b045" + "blob": "&:blob:abb0b9a01af793ed8b2ee428d91ac23d30bba11a" }, "model:my-vision-model": { "_path": "superduper_torch.model.TorchModel", @@ -131,9 +139,9 @@ "serve": false, "trainer": null, "object": "?resnet18", - "preprocess": "?aa581246c925d3c82d51eaa1c7c622a320907d80", + "preprocess": "?ae6e0ba86d9ad714157c066d9070401072cda7d0", "preprocess_signature": "singleton", - "postprocess": "?1efb5539a7bf2d03f2bb6c4b331d4daa9723b045", + "postprocess": "?abb0b9a01af793ed8b2ee428d91ac23d30bba11a", "postprocess_signature": "singleton", "forward_method": "__call__", "forward_signature": "singleton", @@ -180,17 +188,17 @@ "cache": true, "status": null, "cdc_table": "", - "key": "data", + "key": "x", "model": "?model:feature_extractor", "predict_kwargs": {}, "select": "?var-table-name-select", "flatten": false }, - "ef455cfe171f625141c9b4a8e610d05451a4b804": { + "c5e455b84077be0bc2e294adbc82851b5f373f74": { "_path": "superduper.components.datatype.Artifact", "datatype": "?datatype:dill", "uri": null, - "blob": "&:blob:ef455cfe171f625141c9b4a8e610d05451a4b804" + "blob": "&:blob:c5e455b84077be0bc2e294adbc82851b5f373f74" }, "metric:acc": { "_path": "superduper.components.metric.Metric", @@ -198,7 +206,7 @@ "plugins": null, "cache": true, "status": null, - "object": "?ef455cfe171f625141c9b4a8e610d05451a4b804" + "object": "?c5e455b84077be0bc2e294adbc82851b5f373f74" }, "var-table-name-outputs-features-?(listener:features.uuid)-filter-fold-eq-valid": { "_path": "superduper_mongodb.query.parse_query", @@ -234,8 +242,8 @@ "?metric:acc" ], "key": [ - "_outputs__features__?(listener:features.uuid)", - "label" + "features__?(listener:features.uuid)", + "y" ], "datasets": [ "?dataset:my-valid" @@ -253,8 +261,8 @@ "cache": true, "status": null, "key": [ - "_outputs__features__?(listener:features.uuid)", - "label" + "features__?(listener:features.uuid)", + "y" ], "select": "?var-table-name-outputs-features-?(listener:features.uuid)", "transform": null, @@ -302,11 +310,11 @@ "preprocess": null, "postprocess": null }, - "d53c8306ea14f3b0dc51732dc7b1b992f86817bd": { + "e829d70044fe76e239781c53dbcf134baf146c3b": { "_path": "superduper.components.datatype.Artifact", "datatype": "?datatype:dill", "uri": null, - "blob": "&:blob:d53c8306ea14f3b0dc51732dc7b1b992f86817bd" + "blob": "&:blob:e829d70044fe76e239781c53dbcf134baf146c3b" }, "a10fbf2cdd7532dd7bf5bba03b7c28e01b4326cc": { "_path": "superduper.components.datatype.Artifact", @@ -321,11 +329,11 @@ "cache": true, "status": null, "key": [ - "_outputs__features__?(listener:features.uuid)", - "label" + "features__?(listener:features.uuid)", + "y" ], "select": "?var-table-name-outputs-features-?(listener:features.uuid)", - "transform": "?d53c8306ea14f3b0dc51732dc7b1b992f86817bd", + "transform": "?e829d70044fe76e239781c53dbcf134baf146c3b", "metric_values": {}, "signature": "*args", "data_prefetch": false, @@ -348,23 +356,23 @@ "optimizer_state": null, "collate_fn": null }, - "12b0bbc77db0240b2641cda7a18a0d278e069e17": { + "617bfe65cffb71045ee56b2f6ecf53471948e5d3": { "_path": "superduper.components.datatype.Artifact", "datatype": "?datatype:dill", "uri": null, - "blob": "&:blob:12b0bbc77db0240b2641cda7a18a0d278e069e17" + "blob": "&:blob:617bfe65cffb71045ee56b2f6ecf53471948e5d3" }, - "4b4af3ab7a98258049d6f5e790f8329677b4bc13": { + "566f28394dde6ba99e520e5718cf1d043b109f40": { "_path": "superduper.components.datatype.Artifact", "datatype": "?datatype:dill", "uri": null, - "blob": "&:blob:4b4af3ab7a98258049d6f5e790f8329677b4bc13" + "blob": "&:blob:566f28394dde6ba99e520e5718cf1d043b109f40" }, - "08874721584e8ab2e9715feb46d773621bad7163": { + "117d23db837c4b47b161f5e8a3ce0a1e91db1c3f": { "_path": "superduper.components.datatype.Artifact", "datatype": "?datatype:dill", "uri": null, - "blob": "&:blob:08874721584e8ab2e9715feb46d773621bad7163" + "blob": "&:blob:117d23db837c4b47b161f5e8a3ce0a1e91db1c3f" }, "model:my-model-torch": { "_path": "superduper_torch.model.TorchModel", @@ -389,10 +397,10 @@ "num_workers": 0, "serve": false, "trainer": "?trainer:my-torch-trainer", - "object": "?12b0bbc77db0240b2641cda7a18a0d278e069e17", - "preprocess": "?4b4af3ab7a98258049d6f5e790f8329677b4bc13", + "object": "?617bfe65cffb71045ee56b2f6ecf53471948e5d3", + "preprocess": "?566f28394dde6ba99e520e5718cf1d043b109f40", "preprocess_signature": "singleton", - "postprocess": "?08874721584e8ab2e9715feb46d773621bad7163", + "postprocess": "?117d23db837c4b47b161f5e8a3ce0a1e91db1c3f", "postprocess_signature": "singleton", "forward_method": "__call__", "forward_signature": "singleton", @@ -448,7 +456,8 @@ "template_variables": [ "table_name", "framework", - "modality" + "modality", + "output_prefix" ], "types": { "table_name": { diff --git a/templates/transfer_learning/requirements.txt b/templates/transfer_learning/requirements.txt index 6499b8871..6ff49ae21 100644 --- a/templates/transfer_learning/requirements.txt +++ b/templates/transfer_learning/requirements.txt @@ -1,5 +1,4 @@ -superduper==0.0.4.dev -torch>=2.0.0 -pillow>=10.2.0 -sentence-transformers>=2.2.2 -scikit-learn>=1.2.2 \ No newline at end of file +-e ./plugins/sentence_transformers +-e ./plugins/sklearn +-e ./plugins/torch +-e ./plugins/torch diff --git a/templates/transfer_learning/text_classification.json b/templates/transfer_learning/text_classification.json deleted file mode 100644 index 471ae6f19..000000000 --- a/templates/transfer_learning/text_classification.json +++ /dev/null @@ -1 +0,0 @@ -[{"x": "waste of my life, .... the director should be embarrassed. why people feel they need to make worthless movies will never make sense to me. when she died at the end, it made me laugh. i had to change the channel many times throughout the film because i was getting embarrassed watching such poor acting. hopefully the guy who played Heath never gets work again. On top of that i hope the director never gets to make another film, and has his paycheck taken back for this crap. { .02 out of 10 }", "y": 0}, {"x": "I sought out a copy of The Forest because I was watching a VH1 special, I think \"Where Are They Now\", and saw the video box flash across the screen during a segment on the actor Corky Pigeon. He played the male child ghost in this B horror horrible, but I remember him from his character Freddy on the Silver Spoons television show. This flick's a major letdown. There's nothing here. It actually took me four months to watch it from start to finish. I kept stopping it in boredom, setting it aside and forgetting about it, then stumbling on it and trying once again to get through it. Obviously, the angle of this film that was intended to set it apart from its counterparts was the supernatural element, the apparitions. And obviously, here, that doesn't work. I can't stand the male leads. I kept expecting them to look down at their palms during the longer dialogue scenes in order to read cheat lines. The situation at the beginning where the couples decide to go camping separately is awkward and plain dumb. I guess the only positive thing to say about this one is the scene where the guy falls and breaks his leg, you can see the bone sticking out of his flesh. It's fairly good gore makeup there. Man, I'm really reaching for a positive now, huh. The only other no-budget horror film on a level as bad as this one would be Home Sweet Home.", "y": 0}, {"x": "\"After World War I, an expedition representing the Allied countries is sent to Cambodia to stop the efforts of Count Mazovia in creating a zombie like army of soldiers and laborers. Hoping to prevent a possible outbreak of war due to Mazovia's actions, the group presses through the jungle to Angkor Wat in spite of the perils. The group includes Armand who has his own agenda contrary to the group's wishes,\" according to the DVD sleeve's synopsis.

Heads up! the zombie make-up department revolted before the cameras started to roll.

Also, this \"Revolt of the Zombies\" has little to do with its supposed predecessor \"White Zombie\" (1932) *****, which starred Bela Lugosi. If that film's zombies didn't thrill you, this one's certainly won't. A younger-than-usual Dean Jagger (as Armand Louque) stars as a man obsessive with blonde Dorothy Stone (as Claire Duval). A couple supporting performances are good: devilish Roy D'Arcy (as Mazovia) and subservient Teru Shimada (as Buna); however, neither are given enough material to really pull this one out of the dumps.

** Revolt of the Zombies (1936) Victor Halperin ~ Dean Jagger, Dorothy Stone, Roy D'Arcy", "y": 0}, {"x": "OK I saw this movie to get a benchmark for bad but with this movie it's Unisol's best movie now plot Luc Devereux is now a technical expert who is working with the government with his partner Maggie, who's been through countless hours of training and combat with him, to refine and perfect the UniSol program in an effort to make a new, stronger breed of soldier that is more sophisticated, intelligent, and agile. All of the new Unisols, which are faster and stronger than their predecessors, are connected through an artificially intelligent computer system called SETH, a Self-Evolving Thought Helix. When SETH discovers that the Universal Soldier program is scheduled to be shut down because of budget cuts, he takes matters into his own \"hands\" to protect himself. Killing those who try to shut off his power, and unleashing his platoon of super-soldiers, led by the musclebound Romeo, SETH spares Deveraux, only because Deveraux has the secret code that is needed to deactivate a built-in program that will shut SETH down in a matter of hours. With the help of a hacker named Squid, SETH takes human form. Not only must Luc contend with ambitious reporter Erin, who won't leave his side, but Luc also must contend with General Radford, who wants to take extreme measures to stop SETH. SETH has also kidnapped Luc's injured 13-year-old daughter Hillary, and is now holding her hostage. Luc is the only person who can rescue Hillary, because Luc knows firsthand how a UniSol thinks, feels, and fights. now there are problems like in any movie like did anyone find it weird how a reporter just-so-happened to be there and The soldiers can take being flattened with a truck however when Vanne Damme shoots them with a gun with one bullet and they die and the final fight scene was unbelievable when Luc is now human and Seth is 5x stronger and faster than any other Unisol and Luc can take a hit from him. with the final fight when Luc smashes him to pieces I was really surprised that the pieces didn't melt and reform him (Terminator 2). another thing that bugs me is how the hell does Vanne Damme get good actors to play relatives I mean in the case of Vanne Damme it's completely off the grid of how Science Fiction this movie is. The Music Score now that must have a mention have you ever listened to a song where you'd rather cut a blackboard with a knife well Universal Soldier 2 is like that. The good points are there's no Dolph (HOORAY) and unlike the 1st one there is only one naked scene whereas in the 1st one there are many (I'm still haunted by the scenes in #1) also the actors in this have some talent whereas in the first one the casting guys were sadists (if you don't believe me look it up)", "y": 0}, {"x": "Unhinged was part of the Video Nasty censorship film selection that the UK built up in the 80's. Keeps the gory stuff out of the hands of children, don't you know! It must have left many wondering what the fuss was all about. By today's standard, Unhinged is a tame little fairy tale.

3 girls are off to a jazz concert... and right away, you know the body count is going to be quite low. They get lost in the woods, & wind up getting in a car accident that looks so fake it's laughable. They are picked up by some nearby residents that live in the woods in a creepy house. One of the girls is seriously injured and has to stay upstairs. Then there's talking. Talking about why the girls are here, and how they must be to dinner on time because mother doesn't like it when someone is late. And more talking. Yakkity yak. Some suspense is built as a crazy guy is walking around and harassing the girls, and someone's eyeball is looking through holes in the walls at the pretty girls in something that looks like Hitchcock's Psycho. I digress because there is so much blah blah in this film, that you wonder when the killings are going to start. In fact, one of the girls gets so bored out of her mind that she walks in the woods, alone, looking for the town. Smart move. She probably knew about the lonely virgin walking alone in the woods part, but just didn't care. More talk continues after this as we wait, wait, and wait some more until the next girl may or may not be killed.

And then there's the twist ending. The \"expected\" unexpected for some viewers, for others a real gotcha. Quite possibly the ONLY reason why someone would really want to watch this. I don't care how twisted it is, nothing in this movie makes up for the most boring time I had watching it. Even with the minor impact of the ending, the director just didn't have what it takes to really deliver a good story with it. It would have made a much better 30 minute - 1 hour TV episode on say, Tales from the Darkside.

If you really must get this for any reason, perhaps just to say you've watched every slasher movie, do yourself a favor and have the fast-forward button ready. Since the movie has so many unimportant scenes, just zoom through them, and in no time, you'll get to the \"WOW, that's what it was all this time\" ending. Oh and halfway through the movie there's a shower scene with 2 girls showing boo-bees. Horray for boo-bees. Those beautiful buzzing honey-making boo-bees.", "y": 0}, {"x": "Gena Rowlands plays an actress who loses her grip on reality when she witnesses the death of a fan of hers. She becomes increasingly deluded from reality, and as a result her emotional turmoil intrudes with her work as an actress. In the sense that she breaks all the rules of acting and improvises everything, yet still manages to engage her audience makes the film interesting (if a bit self-important) as a parallel of Cassavettes' own struggles as a filmmaker. There's so many ideas thrown around, and as result it becomes a bit muddled (I'm still pondering the relation between the dead fan and Rowlands, among many other things), but the way they're presented in their rawest form makes it a consistently interesting and thought-provoking film. Would be great on a double bill with Mulholland Drive.

", "y": 1}, {"x": "James J. Corbett's autobiography \"The Roar of the Crowd\" was the starting point of this lively and well-remembered fictionalized biography. The author was heavyweight champion of the world, succeeding John L. Sullivan, before the turn of the century. The events of the narrative depict Corbett as a brash but likable and intelligent young man whose conquest of the world of boxing and social prejudice in his time, when he was considered merely the son of Irish immigrants, a lowly bank teller and a nobody surprised everyone. It took him several hours of exciting and often amusing screen-time to prove his compeers were wrong. He is an bank teller when the film opens, but he somehow wangles an invitation to a sporting club for the well-to-do. He falls in love with a beautiful but snobbish girl, with whom he always seems to be quarreling, and he lives at home with a brawling clan of Corbetts who seem to fight with one another as often as with others. When he defeats the club's best and a professional fighter borough in to embarrass him, he finally decides to become famous by fighting. he sets out on the road with his friend, who acts as manager and trainer, and despite a few near setbacks, he wins all his bouts and attracts attention. Coming home to pursue his girl again, he contrives to annoy the Boston Strongboy, mighty John L. Sullivan, who enters bars and claims he can \"lick any man in the world\". Few believe he can win a bout against Sullivan, but Corbett, dubbed \"Gentleman Jim\" for his gracious manners and patrician appearance surprises everyone by moving, dancing out of range, and negating the furious Sullivan's power. The film's finest scene perhaps comes when a beaten Sullivan comes to congratulate Corbett. The new champion rises to the moment, tells Sullivan a few years before it might have been different, and shows him nothing but admiration and respect. He gets his girl as a result of his two performances, but by the end of the film, as they visit his s parents, his manager is able to tell the world, \"The Corbetts are at it again\". The films is attractive and has a consistent style without being flashy. The script was written by veteran Horace McCoy and Vincent Lawrence from the Corbett novel. Sidney Hickox did the cinematography, with period set decorations by Clarence Steensen and art direction by Ted Smith. Heinz Roemheld did the music and Milo Anderson the gowns. The film was ably directed by action-film specialist Raoul Walsh. Flynn also liked working with Walsh but did not care for the other director he worked for most often, Michael Curtiz. Among the cast,were Ward Bond as John L. Sullivan, in one of his best performances lovely Alexis Smith a bit spotty but intelligent as the girl Corbett loves and a very able Errol Flynn as Corbett, a young man he seemed to relish playing--he later said it was his favorite role from the period...Jack Carson was his manager, Alan Hale his charismatic father, John Loder a rich foe, with William Frawley, Minor Watson, Madeleine LeBeau, Rhys Williams, Arthur Shields, Dorothy Vaughn and Mike Mazurki along for the enjoyable proceedings. It is hard to say enough about the logic and light-hearted fun this movie's makers have generated; it is one of the best-liked of all sports biography films, and by my standards one of the most enjoyable as well.", "y": 1}, {"x": "In 1692 Salem, a devious child's lies about a slave's involvement in witchcraft sends an entire community into an uproar. Costume drama starring Claudette Colbert and Fred MacMurray isn't stuffy, though neither is it a vivid depiction of contagious hysteria. Worked on by three writers (Walter Ferris, Durward Grimstead, and Bradley King), the story elements are rather interesting (especially coming out of Hollywood in 1937), though to anyone who has since read Arthur Miller's \"The Crucible\", the hoked-up melodrama on display here won't be tolerated for very long. Biggest problem with the picture may lie in the casting: Colbert and MacMurray are an ill-matched pair of lovers hindered by the witch-hunt, MacMurray being far too contemporary a presence for these surroundings. *1/2 from ****", "y": 0}, {"x": "Hi, Everyone, If you saw \"Singing in the Rain,\" you remember the scene of Gene Kelly dancing in the rain. You also remember the dance number of Donald O'Connor, \"Make 'em Laugh.\" If you saw \"Royal Wedding,\" you will remember Fred Astaire dancing on the ceiling. If you saw \"Jailhouse Rock,\" you will even remember the title dance number choreographed by The King himself.

That is what is missing here. There could have been some blockbuster dance numbers in this presentation. The closest was Chuck McGowan's \"I Can Do That.\" the mere fact that you have some talented people on stage moving together does not make a great dance film. Richard Attenborough was to blame for this failure. He pointed the camera at the stage and thought that would be a good thing.

Yelling at people auditioning for a part in a Broadway production is not entertainment. Michael Douglas would be just as badly cast if he were in a Western or a comedy. He is OK when he is in a Michael Douglas movie where we see him yelling at someone we would like to yell at. It does not work here.

The cast was good except for Michael, of course. A good movie could have been made even using the songs that were in the stage production, but someone should have thought about how to film it.

Next time they do one of these I hope they call me first.

Tom Willett", "y": 0}, {"x": "For the knowledgeable Beatles fan, the main value in this movie is to just sit back and pick out the flaws, inaccuracies, combined events, omitted events, wildly exaggerated events, omitted people, timeline errors, mis-attribute quotes, incorrect clothing, out of place songs, and (shame shame) incorrect instruments and other boners I just cant think of right now. The flaws come fast and furious so you'll have to be on your toes.

I didn't give this a \"1\" primarily due the fact that it is filmed in Liverpool and the actors (the band Rain) give it their all (the Lennon character is credible and does a good job). Also, the song \"Cry for a Shadow\" is heard at one point and THAT counts for SOMETHING.

So,,, watch it for fun, but please don't take it as historically accurate.", "y": 0}, {"x": "An unconventional historical drama, with some fine battle scenes. Tobey Maguire gives an excellent performance, and gets some pretty good back-up. The script is literate and pretty original, and the film is kept mercifully free of heroes. That said, it does drag a bit, and the last reel is too much like a TV mini-series. Still, Frederick Elmes's camerawork keeps one interested in the dull bits (and every now and again you see a shot which reminds you he worked for David Lynch). Worth seeing.", "y": 1}, {"x": "This show was absolutely great, and I always look forward to watching it.All the characters were funny and awesome in their own way, each and every episode provided non-stop laughter, and it was completely entertaining and different from a lot of other shows.Everybody was just absolutely insane and breathtakingly funny, that you couldn't help but love this show.There were a few dead weight episodes, but That '70s Show always managed to create some kind of likable atmosphere, to where it just really didn't matter.This was one of the best shows to ever be aired, and I will watch this show anytime I can, for it never gets old, never gets unfunny, and never gets uninteresting.", "y": 1}, {"x": "I would reccomend this film to everyone. Not only to the fans of the rocker Luciano Ligabue, but to all film-buffs. Because it's sincere, moving, funny and true. Because Ligabue is a born storyteller and a film lover, and every frame of his film is made with love and care. Because his characters are loved and ask to be loved. Because most of the Italian debut films are lousy and this one, done by an outsider, is a real joy to watch and to listen at. Because Stefano Accorsi is gorgeous and reminds me of Andrea Pazienza, who was, like Freccia, beautiful and talented and good and lost his life because of the heroin, that Ligabue shows as it is, unglamorous and ugly, without indulging in easy moralisms. Because it's a film that speaks to our heart, our ears, our souls. And because I lived the experience of the FM radios and it was exactly like that. Thanks, Luciano!", "y": 1}, {"x": "Can A-Pix ever, ever, ever do anything right? This movie was meant to be seen on TV in a letterbox format. Since A-Pix doesn't even believe in pan and scan, we see whole scenes where a shoulder on the left side of the screen talks to a shoulder on the right side. Of course, not that you are missing much. This movie is incredibly bad. It's very hard to enjoy a film where characters are screaming at the top of their lungs during 80% of the movie for no reason.", "y": 0}, {"x": "\"Arahan\" adds nothing positive to the Kung Fu genre. To compare this confused motion picture with the inspired craziness and quality of Stephen Chow's films is a mistake.

Firstly the fight scenes are nothing new. All that is presented here has been done before and better by the likes of Yimou Zhang, Tony Jaa and Jackie Chan. Fights in intelligent Motion Pictures need logic. There seems no point serving blows that have no damaging effect as in the \"Matrix\" sequels.

The attractive female lead So-Yi Yoon captivated the screen but she never convincingly conquered the physical demands of the role as Ziyi Zhang had done so easily in \"House Of Flying Daggers\". Having a Martial Arts background serves well in Kung Fu movies. To cast actors inexperienced in these skills is a serious mistake (See Aya Ueto in \"Asumi\") unless you are a very talented director which as \"Arahan\" proves Seung-wan Ryoo is not.", "y": 0}, {"x": "After repeated listenings to the CD soundtrack, I knew I wanted this film, got it for Christmas and I was amazed. Marc Bolan had such charisma, i can't describe it. I'd heard about him in that way, but didn't understand what people were talking about until I was in the company of this footage. He was incredible. Clips from the Wembley concert are interspersed with surrealistic sketches such as nuns gorging themselves at a garden party as Marc Bolan performs some acoustic versions of Get It On, etc. (I'm still learning the song titles). George Claydon, the diminutive photographer from Magical Mystery Tour, plays a chauffeur who jumps out of a car and eats one of the side mirrors. Nothing I can say to describe it would spoil it, even though I put the spoilers disclaimer on this review, so you would just need to see this for yourselves. It evades description.

Yes, I love the Beatles and was curious about Ringo directing a rock documentary - that was 35 years ago - now, I finally find out it's been on DVD for 2 years, but it's finally in my home. It's an amazing viewing experience - even enthralling.

Now the DVD comes with hidden extras and the following is a copy and paste from another user:

There's two hidden extras on the Born To boogie double DVD release.

1.From the menu on disc one,select the bonus material and goto the extra scenes 2.On the extra scenes page goto Scene 42 take 1 and keep pressing left 3.when the cursor disappears keep pressing right until a \"Star+1972\" logo appears 4.Press Enter

5.From the main menu on disc two,select the sound options 6.On the sound options page goto the 90/25 (I think thats right) option and keep pressing left 7.When the cursor disappears keep pressing right until a \"Star+Home video\" logo appears 8.Press Enter", "y": 1}, {"x": "Rohinton Mistry's multi-layered novel seemed impossible to adapt for the screen but the resulting movie is filled with passion, emotion, humour and pathos. The story is somewhat slow-moving but there is always something on the screen to captivate the audience. The movie perfectly catches a particular time and place with pinpoint accuracy. All of the actors are Indian - few if any known to \"western\" audiences - but they are a joy to behold, especially the little girl who acts very convincingly. Don't be put off by the title and plot summary - this is a movie to be seen on the big screen. We have much to learn from it.", "y": 1}, {"x": "I have seen bad films but this took the p***. Made no sense, and all the characters do is swear every couple of seconds, oh and i think one has a low sperm count. Its that good. A welshman plays a sweary cockney. A posh english bloke plays a foul mouthed unlovable rogue of a paddy, and some lesser lights play dim tarts.

And there are some Russian gangsters. Oh yes some one has a gun and maybe talks rubbish whilst high on drugs.

Avoid this film like the plague.", "y": 0}, {"x": "Director Douglas Sirk scores again with this, the grandaddy of all dysfunctional family films. This lush, trashy saga is a masterpiece, beautifully combining all of the elements of Sirk's soapers and strategically placing them all into one movie. \"Written on the Wind\" very obviously influenced the 1980s TV series \"Dallas\" and \"Dynasty\", as this is basically a feature-length version of those later nighttime soaps.

Lauren Bacall, wonderfully and subtly, plays Lucy Moore, a New York City secretary who marries oil baron, Kyle Hadley (Robert Stack). Unbeknownst to both of them, Mitch Wayne (Rock Hudson) is also in love with the quiet, but sexy secretary. They all go back to Kyle's family's mansion in Texas where we meet his white trash slut-of-a-sister, Marylee (Dorothy Malone in an Oscar-winning turn). Yipee! The sparks begin to fly - from the romances to the catfights, this is a campy trip. Not only does Mitch have to fight the feelings he has for his best friend's wife, but Marylee tries to sleep with everybody since she can't have her one true love who is Mitch. Topping it all off, Kyle learns he's impotent, but somehow Lucy ends up pregnant.

This is pure soap and pure melodramatic entertainment. How can you not love it? This film signals one of Universal's most popular films and one of director Sirk's best works. Some of the dialogue is absolutely sizzling and visual metaphors are thrown in every which way - the theme of wind throughout is great. The cast is great, although Bacall is completely underused despite receiving top-billing behind Hudson. Stack's Oscar loss reportedly devastated him. He considered this his finest performance and apparently was none too pleased to lose out. And he did turn out a fabulous performance as the whimpering alcoholic. What a stunning movie! This film proves what I've been thinking for ages - Sirk is the master of classic melodrama. Where's his Oscar?

", "y": 1}, {"x": "I remember seeing this in a the Salem movie theater (where I used to attend \"Kiddie Matin\u00e9e\"s almost every Saturday) in Dayton, Ohio when I was a young boy and have never forgotten it. It simply amazed me and my friends. I do wish there were some way I could see it again! I have tried to find some compilation of shorts or something like that to no avail. I only recently discovered that it was a Cousteau film and that blew my mind even more. How the heck he accomplished this is beyond my understanding. The fish is ACTUALLY IN THE CAT'S MOUTH at one point, if I remember correctly! If anyone could help me find a way to see it again I would be extremely grateful!", "y": 1}, {"x": "Not a bad word to say about this film really. I wasn't initially impressed by it but it grew on me quickly. I like it a lot and I think its a shame that many people can't see past the fact that it was banned in some territories, mine being one of them. The film delivers in the shock, gore and atmosphere department. The score is a beautiful piece of suspense delivering apparatus. It only seems fair that Chris Young went on to be one of the best composers in the business. The acting in this film is of a somewhat high standard, if a little wooden in some spots, and the effects are very real and gritty. All of this is high praise for a good slasher film in my book. I've noted in some reviews that the film has gotten serious flack having the famous killer's P.O.V shot. And I ask: WHAT'S WRONG WITH THAT??? It is a classic shot that evokes dread into any good fan of the genre and is a great to keep the killer's identity a secret. The only thing that stops this film getting top marks in my book is that the surprise twist(killer revealed) is not handled with more care, I mean it just happens kind of quickly, though the great performances make it just about credible. Aside from that PRANKS is a great movie (though I prefer the original title) and its a shame that so many people knock it off as just a cheap piece of crap. Its more than that, but only few know that as it seems to have gotten lost in the haze of early 80s slasher. What a shame.... Its a really good movie people! Believe me!", "y": 1}, {"x": "This is the most messed up entry on IMDb that I've yet to stumble across. All the previous reviewers act like this is the movie. This is NOT the movie. Rather it's merely a featurette that's an extra on the DVD of the movie \"The One\" It also nowhere near being the 90 minutes that it's listed here as. In actuality it's barely over 13 minutes of how cool Jet Li can do martial arts. and his reflections on the movie. So yeah this IMDb entry is quite a bit fubar. Don't listen to any of the other reviews as they are ALL wrong. You can trust me, because I never feed you, dear reader, BS.

and that's the truth. i guess u can say that i'm \"the One\" Reviewer that matters.", "y": 0}, {"x": "I agree strongly with some of the other critics of this film. I found it incredibly silly (at best) and downright misleading, misinforming and harmful (at worst). Like others, I found this film to be an awful mix of \"real\" science and pseudoscientific, New Age propaganda.

As a psychologist, I was especially offended by Candace Pert's contributions. True, I was not a fan of hers before this film, but her discourse on the \"consciousness\" of cells was one of the best examples of taking a term (\"consciousness\") that has a predictable meaning to most people and using it in such a distorted manner as to cause it to obscure rather than clarify. It is an old Orwellian mind-f**k that the master himself described so well in his superb essay \"Politics and the English Language.\" To refer to \"consciousness\" in this manner--indeed, to refer to this film as \"based in science\" in general (which is its clear intent)--is to use language in the same manner employed by Stalin when he labeled his slave-states \"democratic republics\" and Hitler when he called his party a \"socialist workers\" movement.

I don't claim to really understand quantum physics. I know enough about it to know that to really understand it would take considerable study. Ah, but we Americans do love \"instant enlightenment,\" and that's what this mistake of a film tries to accomplish. If it ASKED questions, that would be one thing, but it clearly attempts to ask and ANSWER them, which no film could possibly do simply because we are far, far away from the answers (if they indeed exist).

By the way, ethically this film needed a disclaimer about the association of several \"expert commentators\" with the Maharishi Mahesh Yogi (and TM), not to mention J.Z. Knight, who often speaks in her \"Ramtha\" voice. (I'm always amazed at this channeled 10,000 year-old Atlantean superman's grasp of 21st century concepts and terminology. But then again, this film argues that the past, present and future are all one and the same, so if Ramtha existed in Atlantis 10,000 years ago, I suppose he could exist now and tomorrow. Only, then how come his financial advice has been so incredibly bad for his followers? Oh, I forgot, I'm the creator of \"good\" and \"bad\" advice, so it's all my fault, not Ramtha's.)

What a mess.", "y": 0}, {"x": "WARNING: This review contains SPOILERS. Do not read if you don't want some points revealed to you before you watch the film.

With a cast like this, you wonder whether or not the actors and actresses knew exactly what they were getting into. Did they see the script and say, `Hey, Close Encounters of the Third Kind was such a hit that this one can't fail.' Unfortunately, it does. Did they even think to check on the director's credentials? I mean, would YOU do a movie with the director of a movie called `Satan's Cheerleaders?' Greydon Clark, who would later go on to direct the infamous `Final Justice,' made this. It makes you wonder how the people of Mystery Science Theater 3000 could hammer `Final Justice' and completely miss out on `The Return.'

The film is set in a small town in New Mexico. A little boy and girl are in the street unsupervised one night when a powerful flashlight beam.er.a spaceship appears and hovers over them. In probably the worst special effect sequence of the film, the ship spews some kind of red ink on them. It looked like Clark had held a beaker of water in from of the camera lens and dipped his leaky pen in it, so right away you are treated with cheese. Anyhow, the ship leaves and the adults don't believe the children. Elsewhere, we see Vincent Schiavelli, whom I find to be a terrific actor (watch his scenes in `Ghost' for proof, as they are outstanding), who is playing a prospector, or as I called him, the Miner 1949er. He steps out of the cave he is in, and he and his dog are inked by the ship. Twenty-five years go by, and the girl has grown up to be Cybill Shepherd, who works with her father, Raymond Burr, in studying unusual weather phenomena. Or something like that. Shepherd spots some strange phenomena in satellite pictures over that little New Mexico town, and she travels there to research it. Once she gets there, the local ranchers harass her, and blame her for the recent slew of cattle mutilations that have been going on, and deputy Jan-Michael Vincent comes to her rescue. From this point on, the film really drags as the two quickly fall for each other, especially after Vincent wards off the locals and informs Shepherd that he was the little boy that saw the ship with her twenty-five years earlier. While this boring mess is happening, Vincent Schiavelli, with his killer dog at his side, is walking around killing the cattle and any people he runs into with an unusual item. You know those glowing plastic sticks stores sell for trick-or-treaters at Halloween, the kind that you shake to make them glow? Schiavelli uses what looks like one of those glow sticks to burn incisions in people. It's the second-worst effect in the movie. Every time Schiavelli is on screen with the glow stick, the scene's atmosphere suddenly turns dark, like the filmmakers thought the glow stick needed that enhancement. It ends up making the movie look even cheaper than it is.

And what does all this lead up to? It's hard to tell when the final, confusing scene arrives. See, Burr and his team of scientists try to explain the satellite images that Shepherd found as some kind of `calling card,' but none of it makes sense. Why do Shepherd and Vincent age and Schiavelli does not? Schiavelli explains why he is killing cattle and people and why he wants Shepherd dead, but even that doesn't make much sense when you really think about it. I mean, why doesn't he kill Jan-Michael Vincent? After all, he had twenty-five years to do it. And the aliens won't need him if Shepherd is dead anyhow, so why try to kill her? Speaking of the aliens, it is never clear what they really wanted out of Shepherd and Vincent. What is their goal? Why do they wait so long to intervene? How could they be so sure Shepherd would come back? Not that the answer to any of these and other questions would have made `The Return' any more pleasant. You would still have bad lines, really bad acting, particularly by Shepherd, cheesy effects, and poor direction. Luckily, the stars escaped from this movie. Cybill Shepherd soon went on to star in `Moonlighting' with Bruce Willis. Jan-Michael Vincent went on to be featured in dozens of B-movies, often in over-the-top parts. Raymond Burr made a pile of Perry Mason television movies right up until his death. Vincent Schiavelli went on to be a great character actor in a huge number of films. Martin Landau, who played a kooky law enforcement officer, quickly made the terrific `Alone in the Dark' and the awful `The Being' before rolling into the films he has been famous for recently. You can bet none of these stars ever want their careers to return to `The Return.' Zantara's score: 2 out of 10.", "y": 0}, {"x": "\"Pecker\" proves that Waters has no intention of changing his tacky ways in his old age. A lot of things have changed since Waters started making films in the 1960s, but 40 years later he is still doing what he wants to do. Over the years, the budget of Waters' films has increased considerably. This is one of his most recent productions, but I was amazed to see that Waters still has that \"trailer-park\" touch. Edward Furlong plays Pecker, a kid who is obsessed with photography. He lives a quite life in Baltimore, MD, with his friends and family. But Pecker attracts the attention of a New York art agent (the always watchable Lili Taylor), and his life changes for the worst. Once again, Waters makes fun of art, fame and heterosexuality. It is not among his best films, but there are some big belly laughs here (\"Memama\" has the best lines in the film!). It is consistently clever and funny, and has that very \"queer\" sensibility that I have come to love in Warters' movies.", "y": 1}, {"x": "I am a fairly big fan of most of the films that have been based on Stephen King's books - this one rates as one of the scariest and most memorable.

I have just finished rewatching it for about the tenth time and I still find it heart-wrenching as well as scary.

The scene where Gage is on a sure collision course with the monster truck is one which stands out. And the \"No fair\" uttered by little Miko Hughes near the end is a touch of brilliance.

", "y": 1}, {"x": "It was 9:30 PM last night at my friend's camping trailer and we were so hyped to watch South Park (a new episode). The thing is, in my country, South Park airs at 10:30 PM and we decided to kill time by watching the show now airing, Father of the Pride. I'll start by saying that I have only watched to episodes. The first time I watched it, I found it unfunny and crude for nothing, so I thought ''Holy sh*t, I have a football game early tomorrow, so I have to stop watching stupid cartoons''. But yesterday, I tried to give Father of the Pride a second chance. I find that it's a complete rip-off of The Simpsons, only replacing yellow human characters by lions instead.

The second thing is I wonder why it got it's TV-14 rating. I find The Simpsons a lot more vulgar, and the only real vulgarity in this show is a few homosexual (unfunny) jokes. The Simpsons is also a lot more violent (Halloween specials) and crude. I also heard that the creator of the series has also directed Shrek 2, well I've got news for him: Shrek 2 was way better and I think he stayed too much in the family thematic. However, I must admit that Father of the Pride did make me smile (even burst out laughing once) three or four times.

All in all, I don't mind Father of the Pride. I don't hate it, but I don't like either. I've seen way better from ''The Simpsons''.

3.5/10", "y": 0}, {"x": "Here I thought \"Nanook of the north\" was the last word in archaic semi-doc 'eskimo' movies. How wrong! As an avid sea-kayaker I stayed up till 330am to watch this hoping to get a glimpse of some hand-made 'skin-boats'. The movie did not let me down. Any student of kayak/umiak construction should have a look-see here. (Note to fellow SKers: they appear to be using Norton Sound kayaks with single blade paddles).

But the film went way beyond this admittedly narrow interest. Even though there were as others have noted some little back-shot-fakey-bits the movie has so much heart they are just a minor annoyance. It was (from this very amateur anthropologist's viewpoint) probably the perfect time to make this movie. Early thirties: the 'talkies' are so new that they (including Louie B. Mayer!) actually let the Inuit speak in their own tongue. And there is so much that was still, despite the infused melodrama, authentic. They are really whacking that polar bear, that whale and those caribou. A fifties version of this film would have been so cheesy with 'stars', Technicolor, etc. to gum it up. The seventies version? Don't even. A very good companion piece to this excellent movie is \"White shadows in the south seas\" (1928) Geograpically the mirror image to \"Eskimo\" it also deals with the relentless and profound disruption of Western culture/technology on an unsuspecting people.", "y": 1}, {"x": "Many people like this movie and many more love it, but it seems that it is all for the wrong reasons. Scarface should be liked and loved but not in the way it has been or is.

Many people say the acting was over-the-top, but who better to do an over-the-top character than Al Pacino. To say that Pacino went over-the-top in here would be an understatement. Yet he does it so well, he just brings the inner devil out of you so well. His character Tony Montana was not such a great guy to begin with but his thirst for power just bring his sickness of greed to another level; an inhumane level. Sure at times Pacino seems to be a bit cartoonish and surreal but that does not at all to me seem to be a liability at all. The supporting cast served its job very well. Michelle Pfeiffer was not really at her best but she certainly fit the role she played. On the other hand Steven Bauer was at his best, still he is Steven Bauer. Mary Elizabeth Mastrantonio was good and like Michelle Pfeiffer fit her role very well. Robert Loggia I have always enjoyed watching in just seeing him yell. Other than Pacino they were not really any standout or memorable performances. Everybody just seemed to fit their roles by being there. They did not fit in perfectly but were convincing enough.

Brian De Palma did a very good job directing this movie. Whenever an actor is able to become larger than life with his performance some credit should be given to the director and I will certainly give De Palma that. Brian De Palma, though not given the respect, is a very versatile director by my count. He knows how to direct movies according to their genres, but that at times has not turned out well. In here it does, this is by all counts a gangster movie but few are much better than this one because of De Palma.

The writing was great it was just pure Oliver Stone. When I saw the credits at the end of this movie and saw that Oliver Stone had written this I was not the least bit surprised. That is a testament to him though. I have always though of him as a great writer and to me he proves this once again with Scarface. Nobody knows how to write a surreal reality for a movie than Oliver Stone.

The music was good but not that great. It is certainly not my favorite from Giorgio Moroder. The music was a little bit too 80s-ish for me but it didn't annoy me. The cinematography was good, not amazing but really who cares with a movie like this.

This has probably been one of the most influential movies in the past 25 years but as mentioned before it is for the wrong reasons. People should realize that the character of Tony Montana is no hero, he is a monster. He is not inspiring in anyway. He is greedy, bloodthirsty, uneducated and self consumed. Yet he is a role model to many people because he is in some way or another a rebel but probably most of all because he is a deluded gangster. A vigilante would be like Mother Tereasa next to Scarface.

The good thing about this movie though is that it shows that the Tony Montanas' are not the real problem. If we or the people of authority would want to shut people like him down we could do it but we don't. In a freaky twisted way he is a necessity of our society. He is somebody you could blame everything on and fell better about yourself doing it. The Tony Montanas' of this world are the scapegoats of our society. This in no way excuses people like him. Instead it is more of a reminder that we shouldn't excuse or allow ourselves to do bad things just because we measure up or think we measure up compared better to a gangster or drug dealer. I love this movie because it is more than a corruption movie, it is a movie that in a strange way makes you self reflect.", "y": 1}, {"x": "In the words of Charles Dance's character in this film, \"Bollocks!\" No plot, no character development, and utterly unbelievable.

Full of stuff that just doesn't happen in the real world (since when were British police inspectors armed with handguns in shoulder holsters?). Full of mistakes (Bulgarian trains in London?). Full of dull and artificial dialogue. And the directing/editing is awful - wobbly hand-held camera shots that add nothing to the film except a vague feeling of seasickness; confusing jump-cuts; no structure.

Wesley Snipes' character is totally unsympathetic - why should we care what happens to him? Direct to video? Direct to the dustbin!", "y": 0}, {"x": "Aside from the horrendous acting and the ridiculous and ludicrous plot, this movie wasn't too bad. Unfortunately, that doesn't leave much movie not to suck. Do not waste your time on this film, even if you find yourself suffering from insomnia, as I did. Watch an infomercial instead.", "y": 0}, {"x": "There's nothing new for me to say: 4 hours of people dying over and over in the same hill. The cast was stellar, but unfortunately the producer/director/editor/God goofed. He should have eaten humble pie (if not for his own sake then for the men who died in Kargil), hired one of these brilliant Bollywood directors, hired a real scriptwriter, hired a real editor, hired a musician that wasn't related to him in some way (and who seemed to have listened to some bad version of \"Apocalypse Now\" on some cheap Indian drug), hired a real professional crew, thrown away all the fireworks and told a real story. Unfortunately he, like the bigwigs of the Indian Army, made decisions that were terrible for his actors, and terrible for his audience. We all died over and over.

Please don't do that again, Sir! Sushma Kathmandu, Nepal

ps: Next time an Indian director decides to glorify the Gurkha regiment, I suggest he hire more than one Nepali to represent the team. Surely there are plenty of Nepali men working in Bombay--last count was 40,000 to half a million.", "y": 0}, {"x": "This movie surprised me in a good way. From the box I got the impression that it was an action thriller but it was too funny to be a thriller, even though it was somewhat exciting.

There's a lot of nice one-liners and funny situations in this movie and James Belushi was born to do Bill Manucci, he does a great job. The rest of the cast ain't half-bad either and especially Timothy Dalton is a treat.

The story can get pretty confusing at times as new characters shows up during the film. Things get more complicated as nobody seldom tells the truth about things. If you don't pay attention things might get a bit messy in the end but I really liked it.

Louis Morneau isn't all that well known but he has done a perfectly OK job with this one and I never really grew impatient while watching the movie.

Made men is well worth checking out.", "y": 1}, {"x": "One of the most frightening game experiences ever that will make you keep the lights on next to your bed. Great storyline with a romantic, horrific, and ironic plot. Fans of the original Resident Evil will be in for a surprise of a returning character! Not to mention that the voice-acting have drastically improved over the previous of the series. Don't miss out on the best of the series.", "y": 1}, {"x": "As you can guess by my rating and my title of this review that I don't like Johnny Test. Now I think I know what people are going to say, \" How do you know how bad it is? Have you ever watched it?\", I did watch this show a couple times because I am studying film and animation and this just doesn't hold a candle to my standards.

I want to first talk about the animation because it is one of the most confusing things I have ever seen. Like the first two seasons or only first season had hand drawn animation. I thought it was a nice show to look at when it was hand drawn but then it switched to flash animation and the quality went down by a huge amount.

So that is one strike in my eyes but lets look at the story of the show. It tries way too hard to be like Dexter's lab but there are differences because instead of one red headed scientist there is two and they are both female. There is a talking dog(why?), and the parents attitudes are switched somewhat. I have others but I don't think I can write them here ( I don't mean cursing but I mean I don't know if there is a limit for words.). Everything else though is spot on, even a DeeDee character Johnny himself. It just tries so hard to be Dexter but it just seems to me like a heartless knockoff.

Lastly I want to talk about the jokes. Remember in Dexters lab some of the jokes involved yelling? Yes, yelling can be good for a joke or two but Dexter's lab also had sly remarks that made me have to go back and check to get the joke. Johnny Test just forgets all that and just yells 50% of the time and stops the music whenever a stupid joke or one liner appears. That isn't comedy, thats stupid comedy (I know what some people are thinking. Isn't three stooges stupid comedy? Watch that and Johnny Test back to back and you laugh more at the first option.). Sometimes the jokes are based on bizarre situations which, like Chowder, makes me mad. I have a rule for cartoons and comedies all together: To much bizarre doesn't equal comedy, it makes you just think \"what am I watching?\".

So it strikes out on all accounts. Don't watch this show if you have any respect for comedy in anyway, shape, or form.", "y": 0}, {"x": "Wesley Snipes is James Dial, an assassin for hire, agent of the CIA and pure bad-ass special operative. During his free time Dial dons a cowboy hat and breeds horses with macho names such as Beauty.

Enter agent Collins, his supervising officer. Enter a new assignment - kill a terrorist that is in UK custody. Of course the United Kingdom being an allied state is a great place for covert ops and head-shots outside of courtrooms.

The assassination is a big success apart from the fact, that the escape plan blew. So Dial's partner and local liaison gets killed in action trying to escape the police, whilst Dial becomes hot property with the London coppers trying to get to him and CIA trying to dispose of him.

Fortunately for Dial the safe-house is routinely visited by a teenager Emily Day (Eliza Bennett), who loves hanging out with cold-blooded killers with arrest warrants and help them escape from the evil UK law enforcement...

With a script like that need I say more? On the plus side Wesley Snipes is Wesley Snipes (be that a pro or a con) and the movie is quite engaging. On the minus editing is very disjointing and has a hurl effect on the stomach.", "y": 0}, {"x": "\"Visitor Q\" is a failed attempt at black comedy which focuses on what might be the world's most dysfunctional family including physical abuse from beatings to murder to incest to sodomy to necrophilia to a lactating mom who nurses her husband and adult daughter, etc. The film is so outrageous it garnered some critical praise and established a small cult following. However, with home video quality and a slapdash production, \"Visitor Q\" just doesn't hold up even as a curiosity. Genitals are blurred out and sanitary appliances clearly visible, make-up is awful, and everything else is amateurish at best. A waste of time. (C-)", "y": 0}, {"x": "R Balki tries to tell you a story that had been earlier told by Ram Gopal Verma in Nishabd in a sensuous way. This time it is mixed with mature humors.

Amitabh Bachchan is a Chef and owns an Indian Cuisine in London. He is very dominating and arrogant and respects his job just like any other job. According to him, Cooking is an art. Still cannot make Hyderabadi Biryani properly.

Enter Tabu who sends her the proper Hyderabadi Biryani made by her and they soon starts meeting up and finally falls in love with each other\u0085 Amitabh is 65 and Tabu is 35\u0085. No probs! But one Hitch! Tabu's father Paresh Rawal!! The couples decide to meet the father for the approval of their marriage. But Amitabh realizes that Tabu's father is much younger to him. And the complications begin\u0085 Performance wise all three actors are brilliant. The script of the film is very tight and interesting. The dialogues of the film are catchy. But somewhere you feel that your stomach is not properly filled. The comedy is sometimes not properly understood. The film also tries to go lengthy at some parts.

Musically nothing much to sing about except the Title Track. The camera-work is good. Director R Balki could have given much better from this script. But in the second half he himself looks confused. The \"Satyagrah\" scene of the father looked irritating. But the lines spoken by Amitabh Bachchan during that scene are clap worthy.

On the whole, Cheeni Kum needed to have more sugar!", "y": 0}, {"x": "I'm not a regular viewer of Springer's, but I do watch his show in glimpses and I think the show is a fine guilty pleasure and a good way to kill some time. So naturally, I'm going to watch this movie expecting to see \"Jerry Springer Uncensored.\" First of all, Jerry appears in approximately twenty minutes of the film's running time. The other hour and twenty minutes is spent building up this pseudo-farce about trailer-trash, jealousy, incest and deception. Jaime Pressley (who looks hot as HELLLL) is a trailer-trash slut who sleeps with her stepfather (a very unusual-looking, chain-smoking, drunken Michael Dudikoff who finally strays from his action hero persona). The mom finds out about the affair, they get into a fight, they want to take it to the \"Jerry\" show (that's right, no Springer). And then we have a parallel story with an African-American couple. They take it to the \"Jerry\" show. The characters collide. Blah, blah, freakin' blah! Trash has rarely been this BORRRINGG!!!! I was wondering why the hell Springer has millions of fans, yet none of them checked out his movie. Well, now it's TOTALLY obvious!! Whether you love him or hate him, you will hate this movie! How can I explain? It's a total mess of a motion picture (if that's what you call it). It's so badly edited, with scenes that just don't connect, and after a period of time the plot virtually disappears and it's simply all over the map! Just imagine a predictable soap opera transformed into a comic farce. With seldom laughs.

My only positive note is a hot girl-girl scene. That's as risque as it gets. Don't get me wrong, the scene's pretty risque, but if you look at the overall film comparing it to the material on Springer's program--this disastrous farce seems extremely sanitized.

My score: 3 (out of 10)", "y": 0}, {"x": "Horrible film. About an old crusty painter who hangs around with a young girl. Boring. Tatum O Neil goes through the motions in her part, and has some of the corniest lines in film history. Richard Burton looks close to death in this film, and we're supposed to believe he looks \"Good for sixty\". The acting is bad, as is the plot. The characters are awful, as is the story. It's really hard to feel for anyone in this film, except Larry Ewashen who plays a guy in a porno theater who hits on Tatum, he's kind of funny. This movie is really a waste of time. If you are a Tatum fan, like me - which is why I rented it in the first place - please don't see this movie. She is really bad in it, and you'll wonder if maybe PAPER MOON was a fluke. It wasn't, because of BAD NEWS BEARS and LITTLE DARLINGS it's known she can act well, but still, don't rent this movie. And if you're a fan of Burton, rent something when he was good looking, and not a fossil.", "y": 0}, {"x": "Gritty, dusty western from director Richard Brooks, who seems thoroughly engrossed in the genre while keeping all the usual clich\u00e9s intact. Early 1900s horse race attracts a low-keyed cowboy (Gene Hackman), a suave gambler (James Coburn), a cocky kid (Jan Michael Vincent), and even a FEMALE (a surprisingly game Candice Bergen). Once the preliminaries are out of the way (with the predictable arguments over whether or not a woman should take part), this becomes a fairly engrossing entry, though one which breaks no new ground (it instead resembles something from Gary Cooper's era). Good-looking, if overlong piece has macho verve and a fine cast, yet the mechanisms of the plot get tiresome rather quickly. ** from ****", "y": 0}, {"x": "Like one of the previous commenters said, this had the foundations of a great movie but something happened on the way to delivery. Such a waste because Collette's performance was eerie and Williams was believable. I just kept waiting for it to get better. I don't think it was bad editing or needed another director, it could have just been the film. It came across as a Canadian movie, something like the first few seasons of X-Files. Not cheap, just hokey. Also, it needed a little more suspense. Something that makes you jump off your seat. The movie reached that moment then faded away; kind of like a false climax. I can see how being too suspenseful would have taken away from the \"reality\" of the story but I thought that part was reached when Gabriel was in the hospital looking for the boy. This movie needs to have a Director's cut that tries to fix these problems.", "y": 1}, {"x": "This was so lame that I turned the DVD off...maybe halfway through. It was so weak, I couldn't even pay full enough attention to tell you how far in I made it.Though I really wanted to believe that the depiction of the young Carlito would be somewhat different, I just couldn't buy it. I don't really blame the actors, because I think it was the script that may have fallen flat. I did find myself laughing a few times, but I don't think those lines were intended to be funny.

It's only saving grace is that I bought it in a 2 DVD set and I would have paid the price I did for the original alone. This is one of those cases when they should have let the classic stand alone.", "y": 0}, {"x": "It's the early 80s. There's a group of suspiciously old-looking teens. And there's a maniac stalking around. Yes, this is slasherville.

This movie is called Pranks. Why is it called Pranks? I haven't the faintest idea. Unless your idea of a great prank is to repeatedly hit someone's dinner with a baseball bat - on balance, not a great prank; in fact quite a rubbish prank if truth be told. But there you go.

The film itself concerns a group of teenagers who are tasked with cleaning out a decommissioned dormitory. They become aware that a psychopath is on the loose. To combat this development, they split up and wander about in the dark. It ends in tears for most of them.

Pranks is a badly made slasher movie. The DVD release I viewed was the Vipco one. It appears to be cut of a fair bit of violence. This makes the DVD even more pointless because, let's face it, a slasher movie shorn of violence is a waste of time. For slasher-film and video nasty completists only.", "y": 0}, {"x": "Let me first state that while I have viewed every episode of StarTrek at least twice, I do not consider myself a Trekker or Trekkie. Those are people who live in their parents basement and attend conventions wearing costumes with pointed rubber ears. I gave this movie a seven casting aside the fiction historical errors. The acting was better than average, but the plot held no surprises. They tried very hard to reverse engineer the technology but still the special effects were just to great a temptation. Now as to the historical errors, if you call them that, the first Capitan to pilot the Enterprise was Commander April, then Capt. Pike, Jim Kirk, etc.. According to a statement made by both Riker and Kirk we dicovered the Klingons and educated them and gave them the technology (that's the reason a prime directive was created) but like I said these are no reason to discredit this fine series. I hope the plots will get deeper, and then special effects can take a backseat.", "y": 1}, {"x": "If you only read a synopsis of the plot, this movie would sound like quite a typical one of the 1930's. The story would seem quite contrived, the subject matter maudlin. The strength and beauty of this film is in the direct, earthy performances of the cast.I have seldom seen Jean Harlow display such a range of feeling, rich and subtle nuances float over her face. If you watch their faces during the wedding ceremony in the chapel, there is such an obvious depth of feeling between the principal characters. The raw emotions are so sincerely portrayed, so true. The final sequence is almost unbearably poignant: when Clark Gable looks down with such joy and surprise at his son, lifts him up and proudly says, \"My kid!\", I couldn't help remember that Mr. Gable's own son was born to him posthumously. This is one of the finest examples of Depression era cinema.", "y": 1}, {"x": "Not long enough to be feature length and not abrupt enough to a short, this thing exists for one reason, to have a lesbian three-way. There are worse reasons to exist. One sad thing is that this could have made a decent feature length movie. Misty fits snuggly into her outfit and is a very cocky girl and when people are so infatuated with a game character, like Lara Croft, that they make nude calenders of her, you know that a soft-core flick is set to explode. Unfortunately, this is pretty pathetic. Especially the painfully fake sex scene between Darian and Misty, where you can see her hand is fingering air. Watch this if you just can't get enough of Misty or Ruby, who makes a nice blonde and has zee verst jerman akcent ever.", "y": 0}, {"x": "For the record, this film is intriguing but its hardly original. Back in 1998 a movie starring Talia Shire called The Landlady had almost the exact same plot but with younger characters.

The story is Amanda Lear has had a bad life, abusive father, horny doctor, mental homes, etc. She's finally released from the happy home under the guidance of her perverted doctor...who she anally abuses and kills the poor guy. (now THAT was original) The doctor had financed a mansion for her before she killed him and buried the sucker in the backyard. After moving in she falls in love with a stud named Richard, who just happens to be married to a blues singer. If you've seen The Landlady you know the rest, she kills or tries to kill anyone that gets in between her and Richard (including a roadie).

Much of the idea's came from the previous movie, same idiot sidekick that sticks his nose in, same spying on the guy with a bowl of popcorn, same flying a bodypress. It did have some original material, the beer bottle thing was brutal. The highlight of the movie was Amanda's beautiful breasts in the hot-top scene. Somewhat of a ripoff but not a total waste of time.

4 out of 10", "y": 0}, {"x": "Even though it has one of the standard \"Revenge Price Plots,\" this film is my favorite of Vincent Price's work. Gallico has that quality that is missing in so many horror film characters- likeability. When you watch it, you feel for him, you feel his frustration, the injustices against him, and you cheer him on when he goes for vengeance, even though he frightens you a little with his original fury. As the film goes on, his character becomes tragic. He's committed his murder, but now he must kill to cover that up. And again to cover that one up. And again... your stomach sinks with his soul as it goes down its spiral- like watching a beloved brother turn into a hood. Even if the revenge story is of old, the plot devices themselves are original- Gallico uses his tricks to kill in more and more inventive ways. A shame this one isn't available for home veiwing.", "y": 1}, {"x": "Robert Altman is my favorite American director. I must admit that I have enjoyed the films that are usually scorned: \"Quintet\", if only for giving me the pleasure of seeing a grown-up and beautiful Brigitte Fossey, who was unforgettable as the little girl in \"Forbidden Games\"; \"HealtH\", for having Lauren Bacall, Carol Burnett, Alfre Woodard and Glenda Jackson, all in the same cast; \"Popeye\", for that splendid and surreal world, Shelley Duvall's Olive Oyl and the wonderful Malta locations; \"O.C. & Stiggs\", for its proposal of an anti-\"adolescents flick\"; \"Beyond Therapy\", for all its lunacy and for the presence of Gen\u00e8vieve Page, who for all her effort to look Parisian chic is taken for a travestite... I have even enjoyed his one-act TV movies, like \"The Dumb Waiter\" and \"The Laundromat\". When there is not much plot to develop in his films, you have wonderful performances, from Burnett, John Travolta, Kim Basinger or Jane Curtin. I perceive and enjoy the different approach and description he makes of the many different cultures of the United States. It is a pity that his genius is seldom appreciated, and that he is always forgotten when the time comes for giving out American prizes and awards. He is not your typical mainstream purveyor of fantasies. He is more of a maverick. So it is not surprising for me to find so many bad comments posted here about \"The Gingerbread Man\", his most 'mainstream' effort to date and to my knowledge. I did not know there were so many people who thought like Leonard Maltin, who does not like Altman at all. In this case, one may dislike \"The Gingerbread Man\", but for me the reason has more to do with Grisham than with the director-screenwriter. Some of Altman's trademarks are here: improvised dialogue, great performances, a funny lawyers' office with typical irreverent receptionist and secretary. While some people find it boring, I found the first act fascinating, thanks also for the great cinematography by Changwei Gu, the man who shot \"Red Sorghum\", \"Ju Dou\" and \"Farewell My Concubine\". He has a way of showing us the same things we see in other American movies, but under a different light. Through his \"foreigner's gaze\", almost everything seems new and different. In this first act, things were so logical and true! Wait until you get older. You may get in trouble if you fall under the spell of someone younger and beautiful as Embeth Davidtz. I know for myself what I have done fascinated by someone who is younger than I am! Then you have Robert Duvall's repellent, menacing and mysterious character, while that Geraldo storm is threatening Savannah. The second act gets a little phony and even funny, because Altman may have conducted it with a grin. I remember laughing aloud in several instances with his ironic remarks. I think he was applying a bit of Brecht, distancing us, preparing us for the third act, which is plain Hollywood pastiche. Altman does it with expertise. Being a wise man, and an intelligent director, luckily he did not fall into the traps of today's action movies. He was directing a tale of lust, greed and death. I was not disappointed a bit with the movie. If I give it a nine instead of 10, it is because of Grisham. The American reader has turned him into a best-selling author. So why complain? Maybe we should thank Altman for showing us the seams in his stories, the dullness, the flatness and the silliness of them all. However, he does it with so much gusto and humor, that I cannot but disagree with the negative comments. For me, these persons saw another movie... And vice versa.", "y": 1}, {"x": "More than just a \"kids' movie\", \"Holes\" looks at how past incidents still affect us today, whether we know about them or not. When teenager Stanley Yelnats III (Shia LeBoeuf) gets sent to a prison camp where he is forced to dig all day long, he discovers a number of things about the camp, and his personal connection to it. Through flashbacks, we learn that a number of things are closer than we realize (you'll understand this better when you see the movie). LeBoeuf does a pretty good job, as do the other cast members: Sigourney Weaver, Jon Voight, Tim Blake Nelson, Henry Winkler, Patricia Arquette, and Eartha Kitt. A very interesting movie.", "y": 1}, {"x": "Obviously, there wasn't a huge budget for this film which definitely hindered the production. But the story and ending were so brutal that they made up for a lot. I mean brutal on the level of Ju Dou and other (great) Chinese films. I first saw this when I was 14 years old, I ran home and begged God to forgive me for everything...", "y": 1}, {"x": "When Paris is Burning came out, I totally dismissed it. I was not into the whole Madonna and vogueing phenomenon. I thought it was going to be campy and silly. How wrong I was about this movie. I watched it after the movie had been out for ten years and I ran out and bought it. It took me back to a time and place of fun and excitement. I felt as though I knew all of the characters personally. The 80s were spectacular and the movie captured the essence of the gay culture. What a terrific job! I went on the internet and found out what some of the original casts members were doing now but I have not been able to locate all of them. If any one has any information on any of the casts members please let me know.

I hope they make another documentary. I LOVED IT", "y": 1}, {"x": "Howling II (1985) was a complete 180 from the first film. Whilst the first film was campy and creepy. The second one was sleazy and cheesy. The production values on this one are pretty bad and the acting is atrocious. The brother of the anchorwoman werewolf from part one wants to find out what happened to his sis'. The \"scene\" from the first film was badly re-created. A skinny plain looking woman accompanies bro' (Reb Brown) to the old country (Romania) to uncover the mystery to her sister's murder/transformation/death. Christopher Lee appears and disappears over now and then as sort of a sage/guide to the two. Sybil Danning and her two biggest assets appear as Stirba, the head werewolf of the Romania. She also suffers from a bad case of morning face, ewww!

Bad movie. There's nothing good about this stinker. I'm surprise Philippe Mora directed this picture because he's usually a good film-maker. The film is so dark that you need a flashlight to watch it (no, not the content but the film stock itself). To round the movie off you get a lousy \"punk\" performance from a Damned wannabe \"Babel\". Maybe if they forked over a couple of extra bucks they could've got the real deal instead of an imitation.

Best to avoid unless you're desperate or you lost the remote and you're too lazy to change the channel.", "y": 0}, {"x": "A friend lent me this DVD, which he got from the director at a festival, I think. I went in warned that some of the technical aspects of the movie were a bit shaky and that the writing was good but not great. So maybe that colored my judgment but I have to admit that I liked this movie.

The standouts where the actors. Youssef Kerkor was really good as Ernie, the main character, kind of pathetic in a likable way. Adam Jones (who also directed) and Justin Lane were excellent as the roommates who drive Ernie mad. The Bill character (Justin Lane), who spends a lot of the film dressed like a panda, was by far my favorite; he seemed the least one-dimensional, and reminded me of an old college roommate so much I called the guy after watching the DVD. Really kind of lovable, and very funny. Some of the other acting was good, some was so-so, but none of it was bad. I also really liked the vigilante duo. Ridiculous and funny.

I'm giving this one high marks, even though it has some issues, because you can tell when you watch it that these people cared, and decided to make their movie their way. Well done to Adam Jones and crew.", "y": 1}, {"x": "This film was pure pain. Sitting in the theater for x-amount of minutes, I was wondering when the film was going to start. All the setups were in place; typical love story, characters have to overcome their short-givings, villain has to emerge, but none of it ever initiated. By the time these things happened, I was already bored stiff and the devices were completely ineffective. In scenes that required immense tension and buildup, it felt like necessary frames were cut. Kid's stuff does not have to be this way. Children's films can be as riveting and engaging as adult ones. The excuse, \"hey , its for kids,\" is bull. I'll take \"Sword in the Stone\" any day. This was terrible. I'm getting the feeling that Disney will put out anything these days. And as for the kids, the 10-year I saw this with will agree...pure trash.", "y": 0}, {"x": "Along with 2 days in the Valley, I think this is one of worst movies I've ever seen. Just another of the long line of Tarantino rip-offs that have emerged since Pulp Fiction. The atmosphere the movie creates is amusing for the first five minutes, but then the film makers make the unforgivable mistake of allowing unnecessary and grotesque violence to up the \"hip\" quotient. You're better off skipping this one.", "y": 0}, {"x": "This movie starts presenting a somehow original idea but became a great frustration later on. What is the deal of having an original start if the rest of the movie did little to avoid a clich\u00e9d plot? The movie itself is very unbelievable. I would like to know how exactly someone enters a clinic, gets a nurse outfit, kills a doctor, takes out a patient in her bed, puts into his Chevy pickup and leaves? I guess no one could answer this question, so they just jumped to the other scene hiding these little details. The performances are just plain bad. The villain is just another \"annoying crazy antagonist\", no deepness, totally linear character. After 20 minutes of film, most scenes are unbelievable, seemed like they were put there just for the sake of the 90 minutes since they were totally unneeded. A doctor see a woman clearly under strong medication, is denied to examine her, gets kicked out of the house and simply leaves quiet? The ending scene made me burst into laugher, only Mickey Mouse could make it more out of reality. I'm giving it 2 out of 10 for the first lets say 10 minutes of movie.", "y": 0}, {"x": "\"Sasquatch Hunters\" actually wasn't as bad as I thought.

**SPOILERS**

Traveling into the woods, Park Rangers Charles Landon, (Kevin O'Connor) Roger Gordon, (Matt Latimore) Brian Stratton (David Zelina) Spencer Combs, (Rick Holland) and his sister Janet, (Stacey Branscombe) escort Dr. Helen Gilbert, (Amy Shelton-White) her boss Dr. Ethan Edwards, (Gary Sturm) and assistant Louise Keaton, (Juliana Dever) to find the site of some reputed bones found in the area. When they make camp, the team discovers a giant burial ground and more strange bones littering the area. When members of the group start to disappear, they start to wander through the woods to safety. It's discovered that a Sasquatch is behind the killings, and the team band together to survive.

The Good News: This wasn't as bad as I thought it would be. The movie really starts to pick up some steam at around the half-way point, when the creature attacks. That is a masterful series of scenes, as the whole group is subjected to attacks by the creature, and the suspense throughout the entire play-out is extremely high. The wooded area is most appropriately milked during these parts, heightening the tension and wondering when a single person wandering around in the forest will get their comeuppance. Also spread quite liberally through the movie is the effective use of off-screen growls and roars that are truly unworldly. They really do add much to make this part so creepy, as well as the other times the growling shriek is heard. It's quite effective, and works well. It's quite nice that the later part of the film picks up the pace, as it goes out pretty well on a high note of action. One scene especially I feel must point out as being a special scene on first viewing. As a man is running through the forest from the creature, he spots the expedition that has gone on looking for it. Raising his hands to holler to them for help, the second he goes to announce his presence is he attacked from out of nowhere and killed quite hastily. It caught me by surprise and actually gave me a little jump on first viewing.

The Bad News: There was only a couple things to complain about here, and one is a usual complaint. The creature here is mostly rendered by horrible CGI, which made him look totally ridiculous and destroys any credibility it might've had. The air of menace conjured up by the opening of the film is almost shot out the window when the creature appears on screen. It's so distracting that it's a shame a little more work wasn't put into it. I've complained about this one a lot, and is something that really should be done away with, as it doesn't look that realistic and is quite fake. Another big one is the off-screen kills in here. Very often in the film is a person grabbed and then yanked away, and then finding the bloody body afterward. It's quite aggravating when the kills look nice and juicy afterward. Otherwise, I don't really have much of a problem with this one, as everything else that's usually critiqued about this one didn't really bother me, but it is called on for others beyond this stuff.

The Final Verdict: I kinda liked this one, but it's still not the best Sasquatch movie ever. It's not supposed to be taken seriously, and if viewed that way, it's actually quoit enjoyable. Fans of these films should give this one a look, and those that like the Sci-Fi Creature Features might find some nice things in here as well.

Rated R: Graphic Language, Violence and some graphic carcasses", "y": 1}, {"x": "The 1st season was amazing, the whole idea of them adjusting to the island, while mysteries were being explored (And seen) was just phenomenal; filled with suspense, tons of cliffhangers, and an amazing plot. I mean, I love the whole idea of just seeing them get used to the island. And then first seeing the smoke monster in the first episode really caught my attention. From then on, I was hooked The second season was right on par with the 1st season, only a little better. I absolutely loved the idea of the hatches and the DHARMA Initiative. The whole plot and sequences of season 2 were mysterious, creepy, and exciting. I loved all the suspense surround others on the island, but the DHARMA story really made season 2 amazing.

Season 3 wasn't quite as good as 1 and 2 ... but nonetheless, great. I loved seeing the back-stories of the others, seeing their camp, and seeing the mysteries further explored. (\"Tricia Tanak Is Dead\" is one of my favorite episodes). This season, while not as good, was still breathtaking and fun, but most of all exciting! Now, the 4th season. I had hopes for this season, and the 1st couple of episodes we're good, but then it REALLY started to get boring and monotonous. I mean, I REALLY despise the new \"rescuers\" such as Miles and Daniel. The plot got old after the first couple episodes ... and MOST OF ALL .... Season 4 was stripped away of something which made LOST a perfect series: The mystery, suspense, comedy mixed in (Charlie gone) and overall excitement. Also, some of my favorite characters have left.", "y": 1}, {"x": "This film is probably pro-Muslimization.

Why do I write that? The main character has a Muslim father and a Christian mother. He lives his first 20 years in a Christian village. In the end of the film he seemingly is a Muslim because of his head-wear, that he has kept his amulet, and his general clothing. He has a six year old child, who wears the same head-wear and therefore is probably a Muslim, although the mother is a Christian. The main character thus chooses to, it seems, to be a Muslim and his child becomes a Muslim. No one of the other male main characters, which are Christians, seems to breed a child. There are more Muslims in the world of this movie at the end of it, it therefore seems.", "y": 0}, {"x": "This is probably Karisma at her best, apart from Zubeidaa. Nana Patekar also gives out his best, without even trying. The story is very good at times but by the end seems to drag, especially when Shahrukh comes in the picture. What really made me like it were the performances of the leads, the dialog delivery, as well as the story, for what it was. It could've been directed better, and edited. The supporting case was even great, including Karima's mother in law, even though she just had one shining moment, it was great to watch her.

The sets were also pretty good. I didn't really like their portrayal of a Canadian family, but once they step in India, it's as real as it gets.

Overall, I would give it a thumbs up!", "y": 1}, {"x": "This movie is about a fictional soap opera. It is very fast and funny. To say anything else would ruin the movie. There are several plots and sub plots in the movie. This movie has ensemble cast with today's hottest stars. They all gives over the top performances. This movie is favorite of mine from the year 1991. Soapdish is perfect for fans of either daytime soap opera /or prime time soap opera!!!If you watch soap go check this movie it's hilarious!!!", "y": 1}, {"x": "There's a good movie lurking here, but this isn't it. The basic idea is good: to explore the moral issues that would face a group of young survivors of the apocalypse. But the logic is so muddled that it's impossible to get involved.

For example, our four heroes are (understandably) paranoid about catching the mysterious airborne contagion that's wiped out virtually all of mankind. Yet they wear surgical masks some times, not others. Some times they're fanatical about wiping down with bleach any area touched by an infected person. Other times, they seem completely unconcerned.

Worse, after apparently surviving some weeks or months in this new kill-or-be-killed world, these people constantly behave like total newbs. They don't bother accumulating proper equipment, or food. They're forever running out of fuel in the middle of nowhere. They don't take elementary precautions when meeting strangers. And after wading through the rotting corpses of the entire human race, they're as squeamish as sheltered debutantes. You have to constantly wonder how they could have survived this long... and even if they did, why anyone would want to make a movie about them.

So when these dweebs stop to agonize over the moral dimensions of their actions, it's impossible to take their soul-searching seriously. Their actions would first have to make some kind of minimal sense.

On top of all this, we must contend with the dubious acting abilities of Chris Pine. His portrayal of an arrogant young James T Kirk might have seemed shrewd, when viewed in isolation. But in Carriers he plays on exactly that same note: arrogant and boneheaded. It's impossible not to suspect that this constitutes his entire dramatic range.

On the positive side, the film *looks* excellent. It's got an over-sharp, saturated look that really suits the southwestern US locale. But that can't save the truly feeble writing nor the paper-thin (and annoying) characters. Even if you're a fan of the end-of-the-world genre, you should save yourself the agony of watching Carriers.", "y": 0}, {"x": "****SPOILERS**** The film \"Sniper\" is undoubtedly based on the exploits of legendary US Marine sniper Carlos \"Gunny\" Hathcock. The unassuming soft-spoken Mister Rogers look-alike who ran up a score of as much as 300 confirmed and unconfirmed Vietcong and North Vietnamese military kills during his two tours in \"Nam\".Which shows just how deadly and effective a trained military sniper really is.

Tom Berenger is cool clam and deadly as Sgt.Thomas Beckett who's at the end of his career as a top US Marine sniper but who later in the movie realizes that a life as a civilian will be pointless. Since there's nothing outside for him to do with his skills that he learned in the US Marines unless he decides to become a mob hit-man. Backett reluctantly accepts his fate as a lifetime professional killer for his country.

The story of the film \"Sniper\" is focused on Sgt.Beckett with the assistance of former sharp shooting silver medalist and US government agent Richard Miller, Billy Zane, being sent deep inside the Panamanian jungle. The two snipers are to take out rebel General Miguel Alveraze, Frederick Miraglittoa, and Colombian drug king-pin Raul Ochoa, Carlos Alveraze, who's supporting him in a planned a military take-over of the country.

We see earlier in the movie Sgt. Beckett scope and take out a rebel leader which I feel was the best scene in \"Sniper\". For it shows step by step how Sgt. Beckett with the help of his spotter Cpt. Papich, Aden Young, does his job. There's also a sub-plot that was later aborted in the movie about a rebel sniper DeSilva, Eward Wiley, who was stalking Beckett and who later killed Papich as they were both waiting to be lifted out of the jungle by a military helicopter. You would have thought that a deadly cat and mouse was being played out between the two that would culminate when the movie ended but Sgt. Beckett had no trouble at all in dispatching DeSilva early in the film by using an unsuspecting Miller as bait.

What hurt the movie the most was ironically the last fifteen or so minutes when the story went from a one shot one kill sniper movie to a Rambo-like ending with Sgt. Beckett and Agent Miller fighting off an entire battalion of rebels with bullets flying as thick as a London fog.

\"Sniper\" is still well worth watching for the fact that it tells the story about a person who until now has not really been glamorized in war movies: A solitary killer who kills with the precision and skill of a master diamond cutter or accomplished neurosurgeon and who does it in total secrecy.", "y": 1}, {"x": "I was one of many that expected to see a glorified, Yankee-doodle dandy portrayal of a day that (as famously quoted) should live in infamy, rather than glory. How wrong I was. These guys were there, right in the middle of it, and the pictures they returned are both amazing and heartbreaking. And yet it all occurred on a chance trip to the world trade centre on September 11, 2001.

Two French filmmakers were compiling a documentary about life as a NY firefighter, particularly from the perspective of a young rookie coming up through the ranks. At the beginning we see much of this footage, just to remind us that there was no thought to producing a film about terrorism. This was intended to be a film about regular people earning an honest living helping others, and the beauty of the film is that it never loses this edge.

While investigating a suspect gas line (I think, my memory's a little hazy on that), we suddenly hear a plane fly overhead. The camera pans up to reveal a commercial jet torpedoing itself into one of the towers. What must the cameraman have been thinking at this time? Recognising the importance of the footage the camera stays on, and possibly realizing the same thing, the FDNY allow the camera to follow them into the building.

What follows is a true view from the front-lines. We see the commitment of the FDNY, their reactions (the stunned silence after hearing the first person fall to their death is chilling) as well as the collapse of the one of the buildings from the inside, while a second camera captures the events from the outside.

If it wasn't for the horrific event they were covering, the footage alone would be any young doco-maker's dream come true. Quite simply, the footage deserves to be preserved for all time. But what really sets this film apart is the genuine humanity that it brings to the viewer. We see firefighters charging in without hesitation, people of different races helping one another escape to wave of rubble and even the concern of the filmmakers for one another (they are brothers) as they cannot reach one another in the confusion. There are amazing sights as well as amazing human stories in this film, something Hollywood could never duplicate (even though it's trying).

9/11 isn't a film about politics. Nor is it a film about religion, nationality or even jihad for that matter. 9/11 is a film about people, and a true indication of the best and worst that we are capable of. 9/11 is quite simply one of the most important films I've ever seen, and would be the only film to be born from this event if it were up to me. You can't duplicate this.", "y": 1}, {"x": "Richard Dreyfuss stars in \"Moon Over Parador,\" a 1988 Paul Mazursky film also starring Raul Julia, Sonia Braga, Jonathan Winters and Charo. Dreyfuss plays a New York actor, Jonathan Nolan, in the Caribbean country of Parador to make a film. When the dictator dies suddenly, the Secret Police Chief (Julia) who is the one actually controlling the dictator and the country, drafts Jonathan to play the dictator, having noticed the resemblance between them. Soon Jonathan is ensconced in the palace as Alphonse Simms, and Simms' prostitute girlfriend Madonna (Braga) who realizes the switch promises to help him in any way she can.

Mazursky, who appears in drag as Simms' mother, gives us a look at how the CIA operates in third world countries. The Winters character, supposedly a salesman, is actually a CIA operative. The film, however, flirts with but doesn't really tread on very serious ground and is more of a send-up, and a funny one at that.

Richard Dreyfuss does a fabulous job as Jonathan the actor and Alphonse the dictator, creating two separate characters and nailing both. The gorgeous Sonia Braga is great as Madonna, and Raul Julia hands in a wickedly funny performance as Strausmann, the man behind the dictator. It's one of those performances where you never quite know what the character is thinking - he can be pleasant or turn psycho at any moment. Charo is on hand as a maid and manages to be funny and unobtrusive at the same time.

A very good film, not a big blockbuster, but very entertaining.", "y": 1}, {"x": "I haven't read a biography of Lincoln, so maybe this was an accurate portrayal......

And maybe it's because I'm used to the equally alienating and unrealistic worshiping portrayals that unnaturally deify Lincoln as brilliant, honorable, and the savior of our country......

But why would they make a movie representing Lincoln as a buffoon? While Henry Fonda made an excellent Lincoln, his portrayal of him as an \"aw shucks, I'm just a simple guy\" seemed a little insulting.

[Granted, that was Bushie Jr.'s whole campaign, to make us think he was \"just a regular guy\" so we wouldn't care that he's a rich & privileged moron -- but that's a whole other story.]

Not only did the film show Lincoln as sort of a simple (almost simple-minded) kind of guy , the film states that Lincoln just sort of got into law by accident, and that he wasn't even that interested in the law - only with the falsely simplistic idea of the law being about rights & wrongs. In the film he's not a very good defense attorney (he lounges around with his feet on the table and makes fun of the witnesses), and the outcome is mostly determined by chance/luck.

Furthermore, partly because this was financed by Republicans (in reaction to some play sponsored by Democrats that had come out) and partly because it was just the sentiment of the times, the film is unfortunately religious, racist and conservative.

Don't waste your time on this film!", "y": 0}, {"x": "Sweet romantic drama/comedy about Stewart and Sullavan writing love letters to each other without either one knowing who the other is. Naturally, they work together and can't stand each other. You can guess the rest. It's beautifully acted by the entire cast (especially Sullavan, Stewart and Frank Morgan), has a witty, intelligent script and looks absolutely stunning. It takes place in Budapest and was shot in Hollywood, but I found myself believing I was seeing Budapest! Everything looks so perfect and dream-like. A one of a kind film. Don't miss it!", "y": 1}, {"x": "Unless you understand wretched excess this movie won't really mean much to you. An attempt was made to interject a bit of humanity into a cold and bleak period consumed by alcohol and drugs -- it doesn't work.

When Salma Hayak does her big disco number her voice is so obviously dubbed it is pathetic -- the producers could at least have gotten someone that sounded remotely like her.

The documentary that has been playing on television lately is far superior and gives a much truer view of that period of our history.

No one, with the exception of Mikey Myers, could be accused of acting; however, he does an incredible job.", "y": 0}, {"x": "Err...this movie sucked. A LOT.

I have been reading some of the other reviews. Apparently there are a lot of people that think that anything Woody Allen writes or stars in is automatically good...

I have watched several of his films, in the vain hope that I'm missing something. But no, they just suck. Poorly written trash. The characters are all very stereotypical (not to mention rather stupid). The plot is...I think it is supposed to be mysterious. Not sure on that. Mr. Allen's character is...Woody Allen, on any other film you have seen of his.

If you are a fan of Woody Allen, go see this film. If you are under 50, don't bother. (If you are a fan of Woody Allen AND you are under 50...well, you are atypical. I don't know what to say.)", "y": 0}, {"x": "In 1988, Paperhouse was hailed as a \"thinking man's horror film.\" Wow, you might say, sign me up. This thing is a mess. It features a one time young actress who has a range of like 1 to 2. G. Headley with a bad British (dubbed) accent, and a story with no chills, thrills or spills.

It isn't even interesting psycho-babble. One will only laugh at its cheap effects and long for a showing of Leprechaun 5.

The story involves a girl with glandular fever who escapes in her dreams. WHat you get isn't good horror, art house or even a decent after-school special. I found myself after the two hour point saying..where did my two hours go.

The direction is uninspired and I wished it could even be pretentious...something interesting..it seems like the producers were on lithium.

Even in the dream world things are boring.

A short no on this one.", "y": 0}, {"x": "I fail to see the appeal of this series (which is supposed to be sci-fi). It's really just \"let's see what soap operatically happens this week\" and oh, the Cylons are involved through flashbacks.

The Cylon \"babe\" that keeps nailing the other guy is pretty lame, it's pretty obvious that T&A was added to the show. Every time she pops up I'm bewildered as to WTF is supposed to be going on. And don't even try to bullsh*t me about \"story arcs\".

It's a soap opera with some CGI thrown-in. This is not science fiction aside from the original premise.

This series is not everything it's worked-up to be. If you like trendy, edgy, dodgy, jumpy, vague editor-on-crack camera work, this show might be for you. Since nerds seem to be raving about this show, it's a clear indication that vocal nerds' opinions have been changed from Picard's TNG.", "y": 0}, {"x": "I will begin by saying I am very pleased with this climax of the Bourne trilogy. Please, oh please don't ruin it by doing a sequel years from now or a prequel. Just leave it alone. Right..moving on.As talented and versatile as Matt Damon is...it seems as though he was just meant to play Jason Bourne.

If you are a fan of the first two Bourne movies, you will not be disappointed by the third installment. It sticks to what works and adds a little more. I was very pleased to see how well all the information we obtain in 'Identity' and 'Supremacy' all mesh in 'Ultimatum' to finally paint the full picture of Jason Bourne's troubled past. The action sequences are fast paced and keeps you on the edge of your seat. The fights between Bourne and the assassins are always fun to watch. I have always been a fan of movies surrounding CIA agents and how the CIA gather their Intel and this movie is right up that street, making it even more exciting for me.

If you choose to watch The Bourne Ultimatum without watching the previous 2 installments..you will still thoroughly enjoy the movie but I would still recommend you watch them first. This would allow you to fully understand the character Jason Bourne and become attached and be a part of his world. This allows you to appreciate and enjoy the movie even more. I'm not sure which is the better of the first 2 but I personally think 'Ultimatum' might, just MIGHT, have the edge when comparing the trilogy.", "y": 1}, {"x": "This wonderful little film has all of the elements that made the Spaghetti Western so exciting and fun: GREAT music (by one of the few..if not the only..female composer to work in the genre, Nora Orlandi), EXCITING action sequences (and very vicious ones for the day!), and BEAUTIFUL scenery and sets (all in Almeria, Spain, of course). It also has a very good story with a nice tragic romance edge to it. The actors do marvelous jobs--with truly standout performances from Lawrence Dobkin and Rosalba Neri (in the most vital role for a female in a Spaghetti Western..outside of Cardinale in Leone's \"Once Upon a Time in the West\"). Without posting any spoilers, let me just say that this movie contains one of the best endings of any film I have EVER seen!", "y": 1}, {"x": "When a movie of a book seems pointless and incomprehensible, the cause can invariably be found in the book: either it was pointless to start with, or the point is one not easily conveyed to film, or the movie missed the point, which is the most frequent of these results, and the easiest to happen, especially when the point is one not easily defined. The book \"Morvern Callar\" has a point; every reader of the book must have felt this, and felt as if he had gotten it; but I suspect most of them could not state it in words. I'm not sure I can, myself, but perhaps it comes to this, or something like it: Things come, things go, such is life, but we carry on; or at any rate some of us--people like Morvern--do. No doubt a more erudite critic could construct a more adequate definition. But the important fact is that there is a point--possibly the sum of the entire story is the point--and that this would have been the main thing to keep in view, and to carry over, in adapting the story to film. The maker of this film evidently missed the point, and doesn't substitute one of her own; and so the film is about nothing.

This is not the usual complaint of a book-lover that his favorite text has been violated. The merit of the book is something I conceded grudgingly: in reading it I found it a bloody nuisance, and an occasion for kicking the author in the pants and getting him in to finish the job properly. The narrative is supposed to be the work of the half-educated Morvern, but that illusion is constantly dispelled by a dozen different types of literary effect, as if the author were poking at her with his pen; there are inconsistencies of style and tone, as if different sections had been composed at different times; and any conclusions I could reach about Morvern had to remain tentative because it was uncertain which implications the author intended and which he did not: for instance, despite Morvern's own self-characterization as a raver, am I wrong that in the end she remains essentially a working-class Scots girl, and beneath her wrapping of music downloads not so different from those of generations past? In any case, despite my irritation at the author, I couldn't deny that his book stuck with me; and what I couldn't get out of my head was his character's attitude, her angle on the world, which was almost as vivid as a Goya portrait. Morvern is the kind of person who's always encountering situations at once rather comic and rather horrible; occasionally she invites them but more often they land on her, like flies, so that much of her life consists of a kind of gauche but graceful slogging-through, unconsciously practical and unconsciously philosophical--and that doesn't begin to describe it idiosyncratically enough. The complex of incidents and of Morvern's responses to them are the substance of the book, and its achievement, in exposing a cross-section of existence it would be difficult to illuminate otherwise; for all my dislike of the book, I can see this.

The Morvern just described is not the Morvern of the movie; or if it is, most of her is kept offscreen. An actress who might have been a good fit for the character, had she been the right age at the right time, is Angharad Rees, from the old TV series \"Poldark\". Samantha Morton, then, would seem like good casting: she's rather the same sort of actress, and in one of her earlier movies, \"Jesus' Son\", she played a girl who with a few adjustments could have been turned into this one. Unfortunately, as the film turned out, she doesn't have the character from the book to play. For one thing, the book is one that, if it is to be dramatized, virtually cries out for monologues by the main character to the audience; without her comments, her perspective, her voice, the story loses most of its meaning. It has lost more of it in that the adaptor has expurgated it of its comic and horrible elements: the most memorable incidents from the book are curtailed before they turn grotty, and so Morvern's responses (whether of amusement or distaste, depending on her mood) are missing too, and the incidents no longer have a reason for being in the story. In short, the filmmaker chose for some reason to turn a brisk, edgy serio-comic novel into a genteel art TV film, and chose as her typical image one of Ms. Morton languishing in a artistically shaded melancholy; as if the outing Morvern signs up for were a tour of the Stations of the Cross. This isn't at all what the book, or the Morvern of the book, was about. For another thing, the Morvern of the movie isn't Scottish (the actress said in an interview she hadn't had time to study up the accent), and she ought to be: it's important that she, her family, and her mates are all from a single place. And finally the film is missing the end of the story: Morvern's spending all she has and coming home to icy darkness: it's winter, the dam has frozen, the power has gone out, and the pub is dark. Minus this, and minus all of the rest, what's left is a failed art film, a dead film, about a subject whose strength lay precisely in her refusal, or native inability, ever to give in to being dead.", "y": 0}, {"x": "This movie documents a transformative experience for a group of young men, and the experience of watching it is in itself transformative for the viewer. Few movies even aspire to this level of transcendence, and I can think of no other movie -- documentary or drama -- that achieves it. There is no other movie in which I have both laughed so much and cried so much. Yes, it is about DMD and accessible travel; on those issues alone, it is a worthwhile venture, but it is more. It is about friendship. It is about life itself, about living every day that you're alive. And it's a great, fun, adventurous narrative. This is why God created the cinema! See this movie!!!", "y": 1}, {"x": "This is not the video nastie, but only because it came out in 1994 when they were presumably tired of the whole thing in Britain. It is 75% a rehash of The Boogeyman, and would have been banned for the same reason - whatever that was.

I was initially confused as I thought that Annie (Kelly Galindo) may have been a different Lacey, but she was someone trouble by psychic visions of a boogeyman similar to the one in the first film. Fans will immediately note that they are not the same person.

After seeing a murder in a bathroom, and also seeing the address as well, Annie, her psychiatrist and a para psychology student who greatly resembles the guy on the cheap romance novels and butter commercials, head to the house, and, sure enough, it's the same bathroom. 24 hours later a murder happens just as she described. Of course, we have no idea who this boobilicious woman is or why she was murdered.

Then the movie shift to a rerunning of The Boogeyman story with some extra footage that we did not see in the original. Notably, the boogeyman is shown unlike the original. Sadly, some of the good scenes were cut, but 90% of it is there. Why rerun this film? Did they find the footage in the trash? What was the purpose?

We'll never know and, despite the psychologist telling Annie she is cured, we all know the bogeyman will never die.", "y": 0}, {"x": "Does any one know what the 2 sports cars were? I think Robert Stack's might have been a Masseratti.Rock Hudson's character told his father he was taking a job in Iraq ,isn't that timely? I have had Dorthy Malone in my spank bank most of my life ,maybe this was the film that impressed me.Loren Bacall sure did have some chops in this film and probably out-acted Malone but Malones's part made a more sensational impact so she got the Oscar for best supporting role.Was Loren's part considered a leading role?Old man Hadley character was was probably a pretty common picture of tycoons of his era in that he was a regular guy who made it big in an emerging industry but in building a whole town he had forgotten his children to have his wife bring them up.In time,being widowed he realized that they were all he really had and they were spoiled rotten,looking for attention,so rather than try to relate to his children he blew his head off.An ancient morality tale.But seriously,what were those sports cars?", "y": 1}, {"x": "Things to Come is an historic film. Along with Metropolis (1927), it stands as one of the first great science fiction spectacles. It is also one of the first doomsday movies. It is remarkable how the filmmakers predict the start of the Second World War within a year, and even, in a subtle way, the year it would end in the real world. But then the film departs from reality, depicting a world ravaged by war (only substitute poison gas for nuclear weapons which of course did not exist in 1936).

The last half hour of the film is an incredible sight, making groundbreaking use of models and matte paintings -- later to become staples of the science fiction genre. It is sad that, after Things to Come, Sci-fi would become identified with cheaply made b-movies, a stereotype that wouldn't be broken until 2001:A Space Odyssey more than 30 years later. If they'd stuck with the quality of the effects in this film, things would have been very different in Hollywood.

Raymond Massey and some of his co-stars play multiple roles in this film, to good effect. Massey plays a great \"Doctor Who\"-like role as a pilot from an advanced (for 1970) civilization who tries to win over the populace of a devastated country ruled by a simple-minded warlord (a very effective performance by Ralph Richardson). Ultimately, the storyline covers 100 years. But that's a big problem with this film -- there really isn't a cohesive storyline.

Perhaps in such an episodic film -- somewhat reminiscent of Intolerance, actually -- it's hard to have a conventional plot, but I felt more could have been made of the material, and although the visuals in the final third of the picture are indeed stunning and worth the price of admission ... the plot is nonexistent and the movie itself suddenly ends just as it is getting interesting. Maybe the producers were thinking of another future sci-fi innovation: a sequel?

Things to Come is a film every serious sci-fi buff should see at least once. Unlike Metropolis, however, it might not bear repeated viewings.", "y": 1}, {"x": "Gymkata is without a doubt one of the worst movies ever made. But not the bad kind of bad movies. This one is so awful it's fun to watch and laugh. Kurt Thomas clearly does not have a lucrative career in acting. He should go back to gymnastics. But who can forget such memorable scenes as the high bar with chalk, the stone pommel horse or the five minute chase scene through the village of the crazies in slow motion. I don't think it was meant to be this bad, but who can tell. It's not art, but if you want something lite and fluffy that will make a good conversation, rent gymakta. Makes for an evening of fun.", "y": 0}, {"x": "One of the best of the Fred Astaire and Giner Rogers films. Great music by Irving Berlin. Solid support from Randolph Scott, Harriet Nelson, Lucille Ball, Betty Grable, Frank Jenks, and Astrid Allwyn.

Terrific songs include \"Let Yourself Go,\" \"Let's Face the Music,\" and \"Putting All My Eggs in One Basket.\" The last song is introduced by Astaire playing a jazzy piano and then a cute dance with Rogers. Rogers also sings \"Let Yourself Go\" with Grable among the backup singers.

Harriet Nelson (then Hilliard) sings two nice songs and plays Rogers' mousy sister. \"Get Thee Behind Me\" is a song that sticks with you for days. She also sings \"But Where Are You?\" Snappy and fast paced, this entry in the Astaire-Rogers series is one of the better ones. The classic and amazing beautiful finale, \"Let's Face the Music and Dance\" is among the best-known of their numbers. Rogers wears one of the great dresses in movie history.... a shimmering sequined number that swirls around her legs as she dances (weighted hem) and is also slightly see through. Just gorgeous. This is the number that Steve Martin and Bernadette Peters re-created in Pennies from Heaven.

Randolph Scott seems an odd choice as Astaire's pal but he also appeared in their Roberta with Irene Dunne. Luckily he does not attempt to sing or dance. It seems that Grable and Ball would have had bigger parts in 1936 but they have a few scenes and make little impact. Allwyn has the bigger role but is only OK.

Rogers has one of her best solo numbers in the series with \"Let Yourself Go\".... Jazzy and thumping, it's a great song.

Fun all the way, although I got tired of \"We Joined the Navy\" after the third time....", "y": 1}, {"x": "You know how everyone jokes about the acting in porno movies? Well if you've always found the plot line of a porn to captivate your interest, then this movie is for you. It truly was like a porn without the sex. Or if that analogy is not to your liking, imagine you and your drunk roommate found a movie camera abandoned on a park bench. This is the movie that you would make. -Horrible acting -bad camera work -Music done on a casio keyboard This movie has it all, and more. For those who are masochists in the crowd, this is a premiere piece for your collection.

All I can figure is that the only people to submit reviews for this dripping pile of movie, were people who 'starred' in it.

Their movie career is over before it started.", "y": 0}, {"x": "Despite being a huge fan of Fred Astaire and Ginger Rogers' movies, it wasn't until about 6 years ago that I first saw 'Follow the Fleet'. I knew all the songs from an old Astaire/Rogers record (yes, vinyl) but knew nothing of the plot.

Unfortunately, while the songs are catchy and Ginger Rogers' character is sweet and funny, you just can't like 'Bake Baker'. While trying to make up to his longtime partner, he continually sabotages her career. His character doesn't have the usual humour and elan of the other films' Astaire characters.

Worth watching for the songs and a great solo tap routine by Ginger Rogers.", "y": 0}, {"x": "The literary genius of Vladimir Navokov is brought to the screen again and many in the cultured world will take notice. The director puts us in check mate with the story of Alexander, an absentminded chaplinesque study of chess addiction. Nastasya is vacationing in a marble columned resort where a chess championship is being hosted. She meets Alexander by picking up a queen piece he drops thru his coat pocket. A magnetic attraction evolves whereby he proposes the next day, the mother alarmed telegrams the husband. He arrives and questioning Alexander we get these fades to the past, ala' Godfather II, where we see young Alexander, a child prodigy. He is taken under a school teachers wing and exploits his genius for 10 yrs making vast sums. Thinking Alexander reached his peak, abandons him but becomes legend. The old teacher returns causing harm, trying to give victory to an old rival of Alexander. In a serious chess game where World Chess Champion victory is one way to immortality, the chess clock ticks, match time ends to conclude the next day. That day is Nastasya's wedding, the old teacher interferes and Alexander is sent on a nervous breakdown. Nastasya, holding her stomach and looking thru her love's coat finds his strategy for the match and follows the moves. Though the film unfortunately sways from its Russian roots, its low back cut dresses are lovely, Alexander plays his role sublimely.The director underestimated her audience, we hardly ever get to play and the only hint of The Luzhin Defense is after trading queens, isolate the opponents King with your 3 paws & King, sacrificing the castle for mate. Nastasya is a great match, but feel its conclusion deserved more intensity, but maybe the emotions were right on check for chess meant more to him than her. The Luzhin Defense elegantly gives Navokov honor, the complexity of his work in images is a world event not to be missed.", "y": 1}, {"x": "Bill and Ted's Bogus Journey is the sequel to Bill and Ted's excellent adventure. Their bogus journey follower almost directly after the first movie, and does just as good of a job if not better to entertain the viewer.

The plot is an evil person from the future is trying to kill Bill and Ted using evil robots that look exactly like Bill and Ted. Once the robots kill Bill and Ted, they must compete with the grim reaper (death) and return their lives to normal.

The acting in the movie is top notch, and even thought it is a little weird at times, especially Bill and Ted's conversations, it is a great movie. The wannabe rockers sure have made another great movie. Pick this up the next time your at blockbuster!", "y": 1}, {"x": "As the story in my family goes, my dad, Milton Raskin, played the piano for the Dorsey band. After Sinatra joined the band, my dad practiced with him for hours on end. Then, at a point in time, my dad told Sinatra that he was actually to good to be tied up with such a small group (band), and that he should venture off on his own. By that time Sinatra had enough credits 'under his belt' to do just that! Dorsey never forgave my dad, and the rest, as they say, is history.

I have some pictures and records to that effect, and so does Berkley University in California.

I have seen just about every Sinatra movie more times than I wish to say, and his movies never get old . . . Thank you Frank", "y": 1}, {"x": "This Worldwide was the cheap man's version of what the NWA under Jim Crockett Junior and Jim Crockett Promotions made back in the 1980s on the localized \"Big 3\" Stations during the Saturday Morning/Afternoon Wrestling Craze. When Ted Turner got his hands on Crockett's failed version of NWA he turned it into World Championship Wrestling and proceeded to drop all NWA references all together. NWA World Wide and NWA Pro Wrestling were relabeled with the WCW logo and moved off the road to Disney/MGM Studios in Orlando, Florida and eventually became nothing more than recap shows for WCW's Nitro, Thunder, and Saturday Night. Worldwide was officially the last WCW program under Turner to air the weekend of the WCW buyout from Vince McMahon and WWF. Today the entire NWA World Wide/WCW Worldwide Video Tape Archive along with the entire NWA/WCW Video Tape Library in general lay in the vaults of WWE Headquarters in Stamford,Connecticut.", "y": 0}, {"x": "A cheesy, compellingly awful (and NOT in a fun way) C Grade movie. Everything shouts 'amateur', from the crumby script (bizarre premises, limited coherence and predictable endings; the turgid lighting, sound and hand-held wobbly camera angles; the coy and passe sexual inneundo and references; the patchy and unbelievable dialgoue to the Z rate acting. I saw it on DVD and kept hoping Edward Wood would pop out. All is forgiven - your Worst Films are works of art, and more coherent than this twaddle.

But still, preferable to the warbling 'Every night in my dreams I hear you' - are you sure the Titanic crew weren't involved in this on the side?", "y": 0}, {"x": "This film is a travesty, and isn't fit to keep company with the superior original. The plot is an absolute mess, and the film is way too long. Everytime they're struggling, they desperately inject a sentimental reminder from the first film.

\"Gregory's Girl\" is one of the top 10 British films of all time, this one is awful.", "y": 0}, {"x": "One must admit, that Dev has an eye for beauty and talent. He gave a break to Zeenat Aman, a successful model, and also former winner of beauty pageant's title, by casting her in a role, which was tailor-made for her debut. Her bespectacled , stoned look, and her swaying at the hypnotizing music, made her an instant darling of the viewers. This movie is a treat to the eyes, with it's scenic locales, ethnic people, those Buddha temples, and chirpy, naughty Mumtaz, who looks quite attractive, in her ethnic wear, and dancing skills. Dev is of course, adorable, and this is one of his commercially successful performance. Hare Rama manages to keep the interest going, with it's carefully written script, editing, and captivating music. Like Des Pardes, his another movie, Anand has handled the topic of youngsters falling in the habit of drug addiction, and the theory of them coming from disturbed families, and troubled childhood, is quite plausible. A good entertainer, this movie retains it's freshness till date !", "y": 1}, {"x": "Does anyone know the exact quote about \"time and love\" by George Ede aka, Father Fitzpatrick in the move, It had to be you? He was talking to Charlie and Annna in the church as they were leaving? If not I will have to rent the movie. This was a great movie. I also loved Serendipity! Great love story for the soul!

I met my one true love (my Soulmate) and although I had the experience to meet him when I had least expecting it, I wasn't ready for that kind of emotional relationship.

Altho, we did marry, I wasn't mature enough to give as much as I thought I would. I got complacent and took his love for granted and he withstood it for 7 years.

He finally left with resentment but we are still hurt and angry & in disbelief about the way it turned out. I had some very hard lessons to learn and we have now been apart 3 years.

This movie meant a lot because I am still waiting on reconciling with my one and only true love. I can NOW appreciate that distinct feeling inside of me and the quote of Father Fitzpatrick rang true for me.

I know when he has healed enough to trust me again, we will remarry.

Don't EVER GET COMPLACENT AND TAKE TRUE LOVE FOR GRANTED! IT HAS BEEN THE HARDEST LESSON OF MY LIFE.

Also the music in this movie is OUTSTANDING and MEANINGFUL! This movie is DEEP and spiritually uplifting. TRUE LOVE is worth waiting for, if it is meant to be, it will, no matter what, IT WILL HAPPEN! Nothing is impossible, even when it's the second time around! Thanks!", "y": 1}, {"x": "********Spoilers--Careful*********

What can I say? I'm biased when it comes to Urban Cowboy. I love it and have watched it countless times--and usually find out something new about it with each viewing.

I think one of the things I like about it is that Urban Cowboy is about working class people, not rich people who live in either L.A. or New York. Well, it is true except for Pam.

Travolta plays Bud, a small town Texas boy who moves to Houston to work in the oil fields. And this is when Travolta actually played in good dramatic movies like Saturday Night Fever instead of playing stereotypical bad guys/good guys in big budget movies. This is a really good movie--the mechanical bull riding contest and two-step dancing may be silly, but you have to enjoy this for what it is.

Bud meets Sissy (played by Debra Winger with slutty brilliance)--and soon after, they are married and living in their dream trailer. But their relationship becomes a real life battle of the sexes. Bud wants to be a real cowboy. Sissy wants to be with a real cowboy. But in modern times, men's roles are not as clear. Where can Bud prove he's a real man? He can work his dangerous job by day and ride the mechanical bull by night--he can be a \"urban cowboy.\" But Sissy wants to drive his pick-up truck, and she wants to ride the mechanical bull, too. So where does this leave Bud? As Sissy asserts her independence, she lies about riding the bull and flirts with the ex-con and prison rodeo star--a real bull rider--, Wes (played wonderfully greasy by Scott Glenn). Bud is threatened, and Bud and Sissy break up.

Sissy shacks up with Wes, who abuses her. Emasculating himself further, Bud becomes the boy toy of Pam, a rich girl whose Daddy is in oil and all that implies. Sissy comes by the trailer to clean it up--Pam doesn't do that kind of thing. She writes a make up letter to Bud, but evil Pam tears it up and takes the credit for Sissy's housework.

Bud's Uncle Bob dies tragically at work when lightening strikes and causes an explosion. Bud and Sissy have a chance at reconciliation, but are too stubborn. Later the mechanical bull riding competition is at Gilley's, and you know Bud is going to win. Pam realizes that Bud doesn't love her, but Sissy--he did it for her. Wes tries to rob Gilleys, but wouldn't you know that urban cowboy, Bud, saves the day and wins back the woman he loves.

Of course, you may ask yourself why Bud and Sissy would go to Gilleys about every night and \"live like pigs.\" Maybe that contributed to their bad marriage. Or why didn't Bud stay with Pam--she wasn't that bad and had money. Or why they had to kill off Uncle Bob. Or why Bud and Sissy had such stupid friends like Marshall and Jessie who were always trying to break them up: Marshall says to Bud, \"She {Sissy} rides that bull better than you do!\" But part of the fun of Urban Cowboy is making fun of it a little bit--and saying, isn't that Bonnie Raitt on the stage!", "y": 1}, {"x": "The 1930s. Classy, elegant Adele (marvelously played with dignified resolve by Debbie Reynolds) and batty, frumpy Helen (the magnificent Shelley Winters going full-tilt wacko with her customary histrionic panache) are the mothers of two killers. They leave their seamy pasts in the Midwest behind and move to Hollywood to start their own dance school for aspiring kid starlets. Adele begins dating dashing millionaire Lincoln Palmer (the always fine Dennis Weaver). On the other hand, religious fanatic Helen soon sinks into despair and madness.

Director Curtis (\"Night Tide,\" \"Ruby\") Harrington, working from a crafty script by Henry Farrell (who wrote the book \"Whatever Happened to Baby Jane?\" was based on and co-wrote the screenplay for \"Hush ... Hush, Sweet Charlotte\"), adeptly concocts a complex and compelling psychological horror thriller about guilt, fear, repression and religious fervor running dangerously amok. The super cast have a ball with their colorful roles: Michael MacLiammoir as a pompous elocution teacher, Agnes Moorehead as a stern fire-and-brimstone radio evangelist, Yvette Vickers as a snippy, overbearing mother of a bratty wannabe child star, Logan Ramsey as a snoopy detective, and Timothy Carey as a creepy bum. An elaborate talent recital set piece with Pamelyn Ferdin (the voice of Lucy in the \"Peanuts\" TV cartoon specials) serving as emcee and original \"Friday the 13th\" victim Robbi Morgan doing a wickedly bawdy dead-on Mae West impression qualifies as a definite highlight. David Raskin's spooky score, a fantastic scene with Reynolds performing an incredible tango at a posh restaurant, the flavorsome Depression-era period atmosphere, Lucien Ballard's handsome cinematography, and especially the startling macabre ending are all likewise on the money excellent and effective. MGM presents this terrific gem on a nifty DVD doublebill with \"Whoever Slew Auntie Roo?;\" both pictures are presented in crisp widescreen transfers along with their theatrical trailers.", "y": 1}, {"x": "Not much to say on this one. A plot you can pretty much peg, in the first 10 minutes. Nothing overly wrong with this film, very little action for an action film. There was a chance to explore the characters emotions occasionally. Whether an action film is the right genre to do that with, I'm still undecided. Sniper was one of the easiest films to watch without giving full attention to, as it had little twists and a straightforward plot. I was probably guilty of that, so with a second watch or with undivided attention it may be better.

4/10 (but the best of my 4 out of 10's)", "y": 0}, {"x": "I thought that Mr. Dreyfuss was perfect for his role as the actor and the dictator. His co-star, Mr. Julia, played his role equally as perfect. It was interesting to see how reluctant Richard Dreyfuss was in replacing the dictator against his will. But he became more confident and comfortable with the role as time passed. Since everything happens for a reason in life, I believe he was forced to replace the dictator because he was meant to stay there for over the year that he did. I'm guessing that he stayed because he was supposed to see how good his life was compared to the poverty he witnessed in Parador. I think he took too many things for granted in life and he needed to get a serious reality check by remaining in that country for as long as he did.

But........... anyways........... this is why I gave this film a 7 out of 10.", "y": 1}, {"x": "I loved this film. I first saw it when I was 20 ( which was only four years ago) and I enjoyed it so much, I brought my own copy the next day. The comedy is well played by all involved. I always have to rewind and rewatch the scene where Mr. Tsanders explains why he found water at 6 ft in one area and 227 feet in another area. Also look for Jason Robards father who plays Mr. Retch. Talent ran in that family.", "y": 1}, {"x": "This is the Columbo that got directed by Steven Spielberg at an early point in his career. It's nothing sensational but some small hint of great things to come for Spielberg can be seen in this movie. The movie is basically in the same style as most of Spierlberg's '70's movies and TV works. So that means that some characters tend to show some quirkiness's and no I'm not just talking about the Columbo character alone. The kind of character quirkiness which perhaps can be best seen in the 1975 Spielberg movie \"Jaws\". But other than some small hints of typical early Spielberg elements, you can't call this movie the work of- and fine example of a rising director star. Not that its bad, of course it isn't but as I said earlier, it also isn't anything too sensational.

This movie began really well and very promising but after it's fine opening, in which as always the murder occurred, the movie became sort of more slow and also dull to watch. Dull because it's mostly a Columbo movie by the book that doesn't have real memorable moments in it, not dull because it's a boring movie to watch.

The murder itself was quite ingenious and the concept of having a crime story writer murdering his writing partner showed some great and interesting potential. The story however didn't really explored all of its possibilities. At least that's the feeling this movie left me with.

The movie was still a good one to watch nevertheless thanks to the character of Jack Cassidy, who thinks he's smarter then Columbo, due to his mystery/crime writing experience and tries to give him all kinds of possible hints, leading away from himself. But of course Columbo knows better and he is his number one suspect from the first moment on but he as usual plays the game along.

The movie does have a good overall style and uses some fine camera position and editing. Funny to see that also most of this was all mostly consistent with Spielberg's later work, especially some of the camera-angles.

A fine and perfectly watchable Columbo movie but don't let the name of Spielberg attached to it rise your expectations for it too highly.

7/10", "y": 1}, {"x": "THis was a hilarious movie and I would see it again and again. It isn't a movie for someone who doesn't have a fun sense of a humor, but for people who enoy comedy like Chris Rock its a perfect movie in my opinion. It is really funnny", "y": 1}, {"x": "When I rented this movie to watch it, I knew that it was not going to be a mindbender movie. Instead I thought of it as a disbelief of reality where someone is going to get a serious beating. And you know what it worked. Kurt Russel did what I though was a remarkable role in showing the emotionless soldier that he was. I recommend this movie if your out with the boys and want to watch a good action film.", "y": 1}, {"x": "Currently on METOO's new schedule at 4 pm on weekdays, right after \"Maverick\" and right before \"Wild, Wild West\" (followed by \"Star Trek\").

Don't know if I ever actually saw an episode of it when it was originally on, but I'm really captivated by it. Offbeat, unusual, surreal stories set in a mythical West. Kind of the \"Naked City\" of Westerns.

And the guest stars are there: Dan Duryea, Lyle Bettger, Brian Donlevy, MacDonald Carey, Rick Jason (as a treacherous Mexican), a young Dick Van Patten, Jack Lord, Noah Berry, Jr. (as a colorful Mexican), Martha Hyer, Marguerite Chapman, even Ann Robinson (\"War of the Worlds\"), Gloria Talbott (\"I Married a Monster from Outer Space\")

It ran for EIGHT SEASONS, over 200 episodes, from January, 1959, to December, 1965.

Eric Fleming is quite remarkable as trail boss Gil Favor, the most stolid man that's ever lived, with the code of honor of a Samurai, and just the right balance between toughness and open-handedness. I would vote for him for President any day. (P.S. He had a very interesting biography: http://www.imdb.com/name/nm0281661/ )

And a young Clint Eastwood is quite striking as his impulsive right hand, \"Rowdy\" Yates. Also, veteran Western actor and country music figure (the immortal \"One-eyed, One-horned, Flying Purple People Eater\") Sheb Wooley is there as seasoned scout Pete Nolan. And Paul Brinegar makes the most cantankerous character of a cook you could ask for as \"Wishbone\".

And then there's that great theme song, performed by the immortal Frankie Laine. (Between that and the \"Maverick\" theme, I've got Western theme songs running through my head all day.)

I look forward to every episode; I'm collecting the whole set. A good time (not to mention a moo-ving experience) is always guaranteed, as one waits to see if the boys will get their difficulties straightened out before the commercial.

\"Rollin', rollin', rollin' . . . \"", "y": 1}, {"x": "I went into Deathtrap expecting a well orchestrated and intriguing thriller; and while that's something like what this film is; I also can't help but think that it's just a poor man's Sleuth. The classic 1972 film is obviously an inspiration for this film; not particularly in terms of the plot, but certainly it's the case with the execution. The casting of Michael Caine in the central role just confirms it. The film is based on a play by Ira Levin (who previously wrote Rosemary's Baby and The Stepford Wives) and focuses on Sidney Bruhl; a playwright whose best days are behind him. After his latest play bombs, Sidney finds himself at a low; and this is not helped when a play named Deathtrap; written by an amateur he taught, arrives on his doorstep. Deathtrap is a guaranteed commercial success, and Sidney soon begins hatching a plot of his own; which involves inviting round the amateur scribe, killing him, and then passing Deathtrap off as his own work.

Despite all of its clever twists and turns; Deathtrap falls down on one primary element, and that's the characters. The film fails to provide a single likable character, and it's very hard to care about the story when you're not rooting for any of the players. This is not helped by the acting. Michael Caine puts in a good and entertaining performance as you would expect, but nobody else does themselves proud. Christopher Reeve is awkward in his role, while Dyan Cannon somehow manages to make the only possibly likable character detestable with a frankly irritating performance. It's lucky then that the story is good; and it is just about good enough to save the film. The plot features plenty of twists and turns; some work better than others, but there's always enough going on to ensure that the film stays interesting. Director Sidney Lumet deserves some credit too as the style of the film is another huge plus. The central location is interesting in its own right, and the cinematography fits the film well. Overall, I have to admit that I did enjoy this film; but it could have been much, much better.", "y": 1}, {"x": "Way back when, the X-Files was an intelligent, thought-provoking show. A big part of its appeal was that the writers looked to folklore and science for their ideas, tying the plot to the spooky side of real life.

I was incredibly wary of the 8th season when it aired. The show had already provided two perfectly good episodes to bow out on (\"One Son\" and \"Requiem\"), and the 7th season had seen a sharp rise in episodes that scraped the barrel for ideas that were far-fetched, implausible, or downright silly. But I figured, hey, give it the benefit of a doubt, maybe they're bringing it back because they've got some great ideas lined up.

\"Roadrunners\" really was upsetting. Following \"Patience\", which at least offered an interesting angle on the vampire folklore that the show had done well to avoid, the episode sees a strange (alien?) parasitic slug with the power of mind control worshipped by a cult of backwoods Christians. Oh, and they think it's the second coming of Christ, but you only find that out in the last couple of minutes. Seriously. There's never *any* attempt to make sense of this, to explain what the slug is, why anything that's happening is happening, or anything. Even in the show's early years - in fact, *especially* then - you could expect a little bit more depth, a bit of background, or if not that then the opposite - a bit of mystery, some uncertainty about what this was all about.

It's Scully that really kills it though. You could put up with the silliness of the premise, but to have a character who has been developed over a good 7 years as a rational skeptic transformed into a gullible maverick purely for the sake of advancing the plot is bizarre to watch. You feel like you're watching some godawful teen horror, except that it's a woman well into her thirties throwing herself into the kind of creepy isolated community that she's spent the best part of a decade uncovering the sinister underbelly of, being either outwitted by very stereotypical hicks or utterly indifferent to her own safety. Oh, and by the way, Doggett, the new Mudler, isn't around. Scully just wandered off into the desert to look into a brutal murder on her own without him. He shows up at the end to save the day - I can't even remember why - but apart from that, he's not really in it. Again: seriously.

In short, it feels like either a generic script written for another show, or someone's pet movie project which they've been allowed to shove like a mutant leech into the spine of an existing, long-running show at a time when it was at its most vulnerable. It might've worked on a lesser show, where the characters are more archetypal and the audience expects less. But The X-Files had a good thing going, and Scully was one of the strongest and most idiosyncratic TV characters of the 90s. Deciding that you're going to change her personality for the sake of a story that they must've done on Star Trek a good fifty or so times is pointless.", "y": 0}, {"x": "The Forest isn't just your everyday standard slasher/backwoods cannibal fare, it also has an interesting mix of supernatural elements as well. The story is about two couples that hike into the forest on a camping trip. A cave dwelling, cannibalistic woodsmen and the ghosts of his dead wife and two children soon terrorize them. There is something you don't see every slasher. Director Don Jones gets an \"A\" for effort although the film itself falls flat on just about every level, the acting is just simply average except for Jeanette Kelly who plays the dead wife of the woodsman (Michael Brody aka Gary Kent).

The film opens with some beautiful shots of a couple hiking through a valley and into a forest. They realize too late that someone is stalking them. They are both dispatched in typical slasher fare. Our killer uses a trusty hunting knife throughout the entire film, except during a flashback when he implements a handsaw, pitchfork and rusty saw blade to dispatch his cheating wife's lover.

The Forest has a good story line but the movie just doesn't work along with it I found it pretty boring with simply crappy acting. 4/10", "y": 0}, {"x": "I actually paid to see this movie in the theater.

It would get a 1-rating, but the fight scenes between the robots are okay, and there's a surprise.

I realize that some movies have larger budgets than others. I don't have a problem with that. Unfortunately, science fiction movies probably suffer the most on a small budget for obvious reasons. But, one way this movie fails is that just about every piece of each set looked cheesy and cheap. I mean, couldn't they even make it \"look\" good?

The other major reason this movie is horrible is the acting If I watched the movie now and knew what to expect, I might just enjoy it for the cheese-factor, but at the time, I was expecting a good movie and had no clue as to how horrible it would actually end up being.

Thankfully, the experience was over in only 85 minutes.", "y": 0}, {"x": "I had absolutely nothing to do the past weekend, and tagged along with my friends to check out a movie...any movie. And since the only movie we'd not seen was Inspector Gadget, we decided to go in for that.

BIG MISTAKE. This is a movie that might appeal only to kids. Oh, and it's not like I don't enjoy movies targeted at the younger audience. But this movie had absolutely nothing to hold my attention. If you have nothing to do at home, go to sleep. Better than wasting hard-earned cash on this. Go check out the film if you're a kid or if you're a parent with a kid :)", "y": 0}, {"x": "Why did it sound like the husband kept calling her Appy ? It ruined a great episode and so I can only give it a 6. Proper grammar and pronunciation are essential to a film.

It was very Hellraiser what with all the skin ripping though I dunno how anyone can survive without skin the skin is a vital organ to the body the biggest organ actually and without we would die. The more a horror film is true the more creepy it can be and more entertaining.

I do admit though that the stories from the great horror directors are very disappointing and very mediocre.

6/10 come on Yankies get your English up to par !", "y": 1}, {"x": "I am a big fan of the movie, but not for the usual reasons. I think Travolta and Winger performed at higher than average rates, I think the sets were representative of the location and the era, I liked the sound track and the Charlie Daniels Band. However, I think the photography was amazing! Since the interior scenes were filmed in the actual club and Gilley's had low ceilings--perhaps 10-12 feet high and the smoke that was supposed to simulate a \"smoke-filled bar\" hung 2-4 feet below the ceiling. The Camera managed to get shots through the smoke and focus on the actors, the bull, the bar, the women, the dancing, the low-level of light that actually was in the bar! What a feat! Sure there was auxiliary lighting, but in order to maintain the atmosphere of the bar, it had to be low-light shots. Ray Villalobos (the camera operator) was outstanding! He got some shots he had no hope of achieving and the impact of them brought a sense of reality to the film. Thanks, Ray--Great work!", "y": 1}, {"x": "This film is so bad, it made me want to vomit. Poorly produced, a complete laugh free zone. Why in the name of god would you spoof a movie which to a degree is a spoof (and a damn funny one at that) as it stands? The sets are laughable, the effects so bad that they aren't even laughable, and the acting farcical. It is a complete mystery why you would even consider watching this lump of garbage. National Lampoon once made Animal House, which people still consider to be completely and utterly hilarious. Now they've been relegated to making TV movies like this lump of ****. Name your expletive, and it could be accurately used to describe this film.", "y": 0}, {"x": "I have given this film an elevated rating of 2 stars as I personally appear in minutes 42 and 43 of the film....the road side bar scene in Russia. In this scene the director of the movie offered me the immortal line - \"50 Dollars..you Drink and Talk\", but I felt that my Polish counterpart could speak in a more convincing Russian accent than I could, so I declined to take this speaking part on. I was slightly starstruck as this was my first Film experience....and who knows... these lines could have ended up there with lines such as \"I'll be Back\" and \"Quite Frankly My Dear, I Don't Give a Damn\". Had I spoken that one line then my name would appear in the credits of Rancid Aluminium as 'Heavy 1' instead of the name of Ryszard Janikowski.

As time goes on, I am counting myself lucky that my name is in no way connected to this film.

Even though I spent a whole day on the set, in South Wales hot-spot Barry Island, no one could tell me what the actual storyline was. The caterers and the wardrobe lady all concurred that it appeared to have a lot of swearing and nudity in it..... things could certainly have been worse if I'd ended up naked in this most dreadful of films....

Still.....On the positive side....I got chatting to Rhys Ifans during one break. I had no idea who he was, as \"Notting Hill\" was yet to be released, and not an inkling that he might be Welsh. Made various inappropriate comments about what an awful pit Barry Island had become since my childhood visits there in the 70s and 80s. It was only when Keith Allen showed up that I realised I was in a quality production........", "y": 0}, {"x": "If your a fan of Airplane type movies this is a must see! Set in the 1920's and 30's Johnny Dangerously has not only great actors but great lines. \"knock down dat wall,knock down dat wall and knock down dat #@$%#@$ wall.\" \"You shouldn't hang me on a hook johnny\" or \"Sounds like Johnnys getting laid\". Its definitely a spoof of the old James Cagney Movies and references them a lot. There's a great scene when Jhonnys walking down death row and has a priest set up for his escape. Listen closely to the fake priests readings, its pretty funny. Another great scene is when Dom Delauise plays the Pope. Watch his reaction to Johnny after he tips the Pope, a lot said without making a sound.I recommend this movie to all who love to laugh or are old movie buffs.", "y": 1}, {"x": "So, I got a hold of this as an assignment for Trent Harris, who teaches occasionally in the film dept at the U of U. I guess this is his only real way to get anyone to see his film...

The documentary section at the beginning dragged on. Yes, the kid is a nut-job from no where, but that's not good enough to keep it interesting.

Seeing Sean Penn dressed as a ONJ is the only highlight... and after about thirty seconds it loses all humor.

When Crispin Glover takes on Larry, the story-telling was better, but I just couldn't take anymore...", "y": 0}, {"x": "I first saw this movie on MST3K. And although I laughed my posterior off at the jokes, I don't particularly think this movie was all that bad. Sure it was a little hard to understand it is quite obviously low budget, But it had a very Hitchcock-like plot and I can honestly say that when I viewed the non-MST3K version, I was genuinely entertained. This movie is crying out for a Hollywood remake.", "y": 0}, {"x": "I love all his work but this looks like nothing.. sorry.. This looks more like a \"David Lynch copycat\". I think people like it only because \"it's from David Lynch\".", "y": 0}, {"x": "Every time I watch this movie I am more impressed by the whole production. I have come to the conclusion that it is the best romantic comedy ever made. Everyone involved is perfect; script, acting, direction, sets and editing. Whilst James Stewart can always be relied upon for a good performance, and the supporting cast are magnificent, it is Margaret Sullavan who reveals what an underrated actress she was. Her tragic personal life give poignancy to her qualities as a performer where comedy acting skills are not easy to achieve. Lubitsch managed to get the best and he obviously gave his best. Watch for the number of scenes which were done on one take - breathtaking.", "y": 1}, {"x": "If you are tired of films trying too hard to be fairy tales (the \"Pretty Woman\" variety love story), here is a beautiful film in which a Japanese businessman is pulled free from his robotic, dispassionate life when he falls in love...with dancing. Wonderfully drawn characters bring to life a story that is at once deeply funny and poignantly moving.", "y": 1}, {"x": "I saw this movie a few months ago on cable, and it was fantastic. William H Macy is one of my favorite actors, and his performance was just amazing. He makes you care for his character, even when he is clearly doing the wrong thing, and Neve Campbell gives a performance that is with out a doubt the best performance I have seen by an actress this year. She is fantastic as a wild young woman who is wise beyond her years.

Donald Sutherland is just plain creepy as Macy's father, and John Ritter is fine as a shrink stuck in the middle of everything that is happening.

I wish that this was in the theater because I feel that it's a movie that should be view by a wider audience. That's a shame, because it's a hell of allot better that most of the new movies coming into the theater now.

", "y": 1}, {"x": "I first heard of Unisol 2 when I drove past a cinema when I was on holiday in America. I really did not take much notice of it until I bought the original on DVD which led me to find out about its three sequels. I subsequently started to read about The Return on the IMDB and asked friends what they thought of it. Despite their horrific criticisms of it, I still went out of my way to see it and was on the brink of buying it until I saw it for hire on DVD. I wasn't expecting much but thought that it must have been half decent to get a theatrical release in the US, after all, how often is it that you see Van Damme on the big screen? Well, nothing could have prepared me for this. It is so bad I almost cried. What a total waste of 80 minutes and \u00a32.50. It is hard to explain how bad this move is. Honestly. This is idiotic film making. No, it's more than idiotic. I just cannot believe how this got made. I cannot believe that someone out there has not murdered Mic Rogers. How stupid can people possibly be - firstly, Van Damme actually thinking the script and finished film was good. Secondly, the fact that Xander Berkley, of Terminator 2 and Air Force One status, commited himself to this film. I simply cannot believe the stupidity of this movie. It takes itself so seriously but comes across to the audience like a spoof. Here is an example: JCVD's daughter (yes, Luc is now a human again)- \"I want my Daddy\", SETH- \"So do I\". Oh yeah, and some guy tries to shut down SETH by pulling three huge levers with - wait for it - ON and OFF written on them. The acting all round is like playschool acting. I'm sure Mr Director modelled Luc's reporter girlfriend on April O'Neil from the cartoon Teenage Mutant Hero Turtles - she refuses to go because she '...needs her story'. I mean come on - how many cliches can a film possibly use? Please listen to me fellow IMDB users - don't touch this with a barge pole. To conclude, Universal Soldier: The Return has no relation whatsoever to the first movie. In fact, if they weren't called UniSols then you would never know it was a sequel. Luc is now a human again - what the hell!?! The only place in which he can access the internet is in a stripclub. All the new Uni Sols look like they were dragged off the street, they are that unconvincing. This is pure torture to watch, so do yourself a favour - don't torture yourself. P.S - Best part of the movie: Romeo jumps off a building and shouts 'Oh sh*t'.", "y": 0}, {"x": "Highly recommended!!

A well written, funny film which will appeal to everyone out there with a sense of humour!!!. Give it a go, it's good to see an Independent British Movie more than holding it's own against the big established studios!! Definitely worth adding to any film collection. There are scenes in this film that I'm sure a lot of people will be able to relate to. You will laugh out loud at the antics and enjoy the great soundtrack. I especially enjoyed the Orb's version of Jimmy Cliff's Vietnam and The Tower of London's take on Freebird.

Go on give it a go............ you won't be disappointed.", "y": 1}, {"x": "WWE Armageddon, December 17, 2006 -- Live from Richmond Coliseum, Richmond, VA

Kane vs. MVP in an Inferno match: So this is the fourth ever inferno match in the WWE and it is Kane vs. MVP (wonder why was it the first match on the card). I only viewed the ending parts where Kane sets MVP's ass on fire as they're on the apron and then MVP is running around the arena while yelling \u0096 eventually the refs put out the fire with a fire extinguisher as MVP sprawls around the entrance ramp. Funny and visually quite entertaining ending. 7/10

WWE Tag Team Championship: This was originally supposed to be William Regal & Dave Taylor vs. Brian Kendrick & Paul London (c) in a regular tag team match. However, GM Teddy Long comes to the ring and announces that it's going to be a Fatal 4-way tag team ladder match. MNM and The Hardys are thrown in and it's all chaos. One word to describe this eye-opener \u0096 wow. Man, I really can't remember how many sick spots there were in this match and words can't really do it justice. There was one particularly notable spot where The Hardys set up a ladder in a see-saw position and Jeff jumped off the top rope while Matt held MNM for the kill, and then WHAM! Nitro blew away while Mercury apparently botched it and was bleeding like hell with lacerations over his face. He had to be taken away and Nitro continued the match alone. Another spot was when Jeff powerbombed London while FLIPPING off the ladder. There were other high-flying breathtaking spots too many to remember. London finally unbuckles the belts to win this rave show-stealer. 8.5/10

The Boogeyman vs. The Miz: The two men get thrown in and around the ring until Boogeyman explodes a sit-out powerbomb for the victory and then and drools worms over The Miz's mouth as usual. 5.5/10 for this three-minute incognito.

United States championship: Chris Benoit (c) faces off Chavo Guerrero in yet another typical Guerrero match. Some good spots included a superplex off the top rope by Chavo and an unusually long chain of German suplexes by Benoit. Vicki Guerrero comes in the ring with the belt to nail Benoit but Benoit scares her off and takes a long time deciding whether to put her in a Sharpshooter or not. This allows Chavo to go for a roll-up but Benoit rolls it up once more and Chavo is locked in the Sharpshooter. Game over. Nice hard-fought battle albeit slow at times. 7/10

WWE Cruiserweight championship: Gregory Helms (c) vs. Jimmy Wang Yang for this one, in a fairly moderate-paced match. The match had some good high-flying spots \u0096 most notably Helms' moves off the top rope \u0096 but the crowd didn't seem to be into it after witnessing the ladder match, and Yang needs to get more airborne. Helms won the match after blowing Yang away with a facebuster on the knee. 7.5/10

The Undertaker vs. Mr. Kennedy in a Last Ride match: After a series of matches between these two, this time it is a Last Ride match, the second ever of its kind and the winner has to escort his opponent out of the arena in a hearse. Pretty good indeed for what these two could offer. Kennedy manhandled a good deal of Taker and even broke free of a chokeslam to throw Taker off the Armageddon set about 15 feet below; and thank God for Kennedy, otherwise it would've been brutal. Kennedy almost got the win until Taker got back up inside the hearse (I liked the camera view inside the hearse). Taker then missed a steel pipe hurl on Kennedy and broke the hearse's window instead, but then later busted Kennedy open with a chair, and followed with a consecutive chokeslam and Tombstone on the hearse's roof. Kennedy was unconscious and Taker drove him out of the arena to win. I actually found myself really interested into these guys' willingness to take/give real sick shots. 7.5/10

Santa comes into the ring, I go \"what the hell?\" like many of the kids in the crowd, and then the word \"lingerie contest\" gets in my ear. Break time.

Batista & John Cena vs. Finlay & King Booker: talk about charisma vs. technicality. This match was actually a quite good main event with the momentum rationally shifting from one team to the other and retaining good suspense. Even Finlay got some legitimate good shots on his opponents this time (I kind of doubted his strength against the champs), and him and Booker mainly didn't succeed in trying to cheat \u0097 except at one point where Booker rammed his scepter into Cena's throat. Batista hits the Bomb on Booker for the win, didn't get to see the F-U; Cena performed the 5 Knuckle Shuffle anyhow and I think he also did the STFU. This was probably the best technical match of the night and the participants did superbly indeed for what they could without a ladder 7.5/10.

Being an on-and-off WWE fan, I have to agree that Armageddon was laced up with numerous eye-catchers throughout, and the ladder match ultimately swallowed half of the show; the Last Ride match featured some fairly nerve-wrenching spots, and the main event also did very well for its category. All other matches also lived up to their billing except perhaps the Boogeyman vs. The Miz bout and the ever-useless lingerie contest. Overall Armageddon was a highly enjoyable pay-per-view and despite some big setbacks earlier in the PPV chronology, Armageddon wishes this year's goodbye respectably. PPV rating: 8/10.", "y": 1}, {"x": "\"Nat\" (voiced by Trevor Gagnon), along with his brainiac friend \"IQ\" (voiced by Philip Bolden) and the always hungry \"Scooter\" (David Gore) are kids with big dreams. They want to be the first flies in space. And what encourages their dreams is the first spacecraft to land on the moon, the Apollo 11, is waiting for its historic trip on the launch pad near where the three hang out.

The first thing you notice is the animation of the film. I found it done very well done. The scenery had depth to it, as things in the distance actually looked like they were behind the focus of the scenes. I didn't see the movie in 3-D, as it was broadcast on HBO. However, I could see that there really wasn't any scenes which took advantage of the 3-D effects except a fight between characters near the end. I also wasn't really impressed with the design of the characters. To me, they didn't look like anything resembling a fly, especially in the coloring. The flies were an unusual blue-gray that was kind of distracting to me.

The performances from the cast was not bad, but it wasn't good either. There were many times I focused more on my computer than the story. The writing was certainly written for a younger audience, with comedic moments that will make younger kids laugh. I saw nothing for adults, like jokes that they'll get the punchline for the adults to understand the meaning.

History was not followed in this film. In fact, I think it was completely ignored, as the main focus was the flies. I also hated when a well known astronaut popped up on the screen and explained that the stories about the flies in the film was a work of fiction, and no flies were on Apollo 11. I did like how he thanked the men and women who sacrificed their lives for space exploration though.

If you are an adult, this is not for you. It was not made for the entire family. This is certainly just for kids. But, save this one for a rainy day.", "y": 0}, {"x": "Having just watched this film again from a 1998 showing off VH-1, I just had to comment.

The first time I saw this film on TV, it was about 1981, and I remember taping it off of my mother's betamax. It wound up taping in black and white for some reason, which gave it a period look that I grew to like.

I remember very distinctively the film beginning with the song, \"My Bonnie\", as the camera panned over a scene of Liverpool. I also remember the opening scene where Paul gestures to some girls and says, \"Look, talent!\" So it was with great irritation that I popped in my 1998 taped version and \"remembered\" that the film opens with \"She Loves You\", instead of \"My Bonnie\". When you see how slowly the camera pans vs. the speed of the music, you can see that \"She Loves You\" just doesn't fit. Also, in this \"later\" version when Paul sees the girls, he says, \"Look, GIRLS!\"..and somehow having remembered the earlier version, THAT word just didn't seem to fit, either. Why they felt they had to Americanize this film for American audiences is beyond me. Personally, if I'm going to watch a film about a British band, I want all of the British colloquialisms and such that would be a part of their speech, mannerisms, etc.

Another irritation was how \"choppy\" the editing was for television. Just after Stu gets beaten, for example, the film cuts to a commercial break-LOTS of 'em. Yeah, I know it depends on the network, but it really ruins the effect of a film to have it sliced apart, as we all know. What some people might find as insignificant in terms of dialogue (and thereby okay to edit), may actually go the way of explaining a particular action or scene that follows.

My point is, the \"best\" version of this film was probably the earlier version I taped from 1981, which just so happened to include the \"Shake, Rattle & Roll\" scene that my 1998 version didn't. I started to surmise that there had to have been two different versions made for television, and a look at the \"alternate versions\" link regarding this film proved me right. That the American version had some shorter/cut/different scenes and/or dialogue is a huge disappointment to me and something worth mentioning if one cares about such things. Imo, ones best bet is to try and get a hold of the European version of this film, if possible, and (probably even less possible), an unedited version. Sadly, I had to discard my old betamax European version because I didn't know how to convert it.

All that aside, I found this film to be, perhaps, one of the best films regarding the story behind the \"birth of the Beatles\". Being well aware that artistic and creative license is often used in movies and TV when portraying events in history, I didn't let any discrepancies mar my enjoyment of the film. Sure, you see the Beatles perform songs at the Cavern that made me wonder, \"Did they even write that back then?? I don't think so\", but, nevertheless, I thought it was a great film and the performances, wonderful.

The real stand-out for me, in fact, was the actor who played John, Stephen MacKenna. I just about fell in love with him. His look, mannerisms, personality and speaking voice seemed to be spot-on. He looked enough like a young John for me to do a double-take towards the end of the film when you see the Beatles performing on Ed Sullivan for the first time. I actually found myself questioning whether or not it was actual Beatle footage, until I saw the other actors in the scene.

If you're looking for a dead accurate history of The Beatles' life and beginnings, you can't get any better than, \"The Beatles' Anthology\", as it was \"written\" by the boys', themselves. However, if you're looking for a fun snapshot of their pre-Beatlemania days leading up to their arrival in America and you leave your anal critical assessments at the door, you can't go wrong with the \"Birth of the Beatles\"--a MUST for any \"real\" or casual Beatle fan.", "y": 1}, {"x": "Absolutely wonderful drama and Ros is top notch...I highly recommend this movie. Her performance, in my opinion, was Academy Award material! The only real sad fact here is that Universal hasn't seen to it that this movie was ever available on any video format, whether it be tape or DVD. They are ignoring a VERY good movie. But Universal has little regard for its library on DVD, which is sad. If you get the chance to see this somewhere (not sure why it is rarely even run on cable), see it! I won't go into the story because I think most people would rather have an opinion on the film, and too many \"reviewers\" spend hours writing about the story, which is available anywhere.

a 10!", "y": 1}, {"x": "There are no spoilers in this review because everything was already shown in the movie's trailer. I am trying to be balanced in my review because I strongly support local movies, but I can't help but support the backlash against this movie. It is slow, boring and bordering on pointless. Even the \"almost nice and believable moments\" were immediately undercut by painful clich\u00e9s and bad acting. Vernetta Lopez and Wong Li Lin, whom I usually love, were only passable in this movie. It felt like the director was trying to make a melodramatic TV Soap, then got carried away and decided to put it on the big screen. The Leap Years should come with an RA rating (Rated Awful) but it hasn't changed my faith in local movies. More good films will come, so long as more films like these don't get made.", "y": 0}, {"x": "Michael Bowen plays an innocentish young man who hitchhikes a thousand miles to visit his absentee millionaire father (the creepy Ray Wise) at a sprawling, windmill-powered ranch and ends up tangled in the dangerous web of his young, scheming and seductive stepmother from hell (the yummy Clare Wren), thus causing trouble for the already dysfunctional family. An edgy, stylish and exciting drama that received no promotion and was sent straight to VHS and cable TV--where I first saw it. It is beautifully written, smartly acted, and tightly directed from a script that keeps you biting your nails. I cannot believe the reviewers who disliked it ever actually saw it. It is an undiscovered classic.", "y": 1}, {"x": "I've long wanted to see this film, being a fan of both Peter Cushing and David McCallum. I agree that the romantic sub-plot was a waste of time, but the talent of McCallum shines through this juvie role. Thank heavens for Turner Classic which aired the show last week. I can imagine that there were lots of problems with children after the war, especially with the way things were throughout the 1950s. Some of the boys are a bit scary. I certainly wouldn't want to met them on a well-lit street, much less a dark one. There were some good insights regarding the feelings of a firebug as well, or as they call him, a firefly.", "y": 1}, {"x": "Luchino Visconti was light years ahead of his contemporaries. The great directors of Italy of the 40s and 50s were men who understood the medium, but it was Luchino Visconti, a man of vision, who dared to bring a film like to show what he was capable of doing. He clearly shows his genius early on in his distinguished career with \"Ossessione\", a film based on James Cain's \"The Postman Always Ring Twice\", which was later made by Hollywood, but that version pales in comparison with what Visconti achieved in the movie. Luchino Visconti and his collaborators on the screen included an uncredited Alberto Moravia, a man who knew about the effect of passion on human beings.

The film has been well preserved in the DVD format we watched recently. The film is a must for all serious movie fans because we can see how Visconti's vision translated the text into a movie that rings true in a plausible way, something the American version lacked.

What comes across watching the movie, is the intensity which the director got from his key players. The magnificent Clara Calamai does an amazing job as Giovanna, the woman who has married an older man, but when Gino appears in her life, all she wants to do is rid herself of the kind man who gave her an opportunity in life. Giovanna is one of the best creations in Ms. Calamai's achievements in the Italian cinema. The last sequence of the film shows Ms. Calamai at her best in the ironic twist that serves as the moral redemption for the monstrous crime that was committed.

Equally excellent is Massimo Girotti, one of the best actors of his generation who appears as Gino, the hunky man that awakens the obsessive passion in Giovanna. Gino is the perfect man for Giovanna, something that Mr. Girotti projects with such ease and sophistication not equaled before in the screen. Mr. Girotti makes the man come alive in a performance that seems so easy, yet with another actor it might not have been so apparent. Juan DeLanda is seen as Giuseppe, the older man who fell in love with Giovanna. In fact, his character rings truer than his counterpart in the American film, where he is seen more as a buffoon.

The film is beautifully photographed by Domenic Scala and Aldo Tonti. They gave the film a naturalistic look that was the way Italian directors of the era favored. The original musical score of Giuseppe Rosati is perfect. Visconti, a man who loved opera and was one of the best directors, also includes arias by Bizet and Verdi that fit well in the context of the movie.

\"Ossessione\" is a film to treasure because we see a great Luchino Visconti at the top of his form.", "y": 1}, {"x": "This dreadful film assembles every Asian stereotype you can imagine into one hideous package. Money grubbing, devious Japanese business men send goofy but loveable policeman Pat Morita to recover industrial secrets in Detroit. Here he encounters a down at heel Jay Leno, who promptly refers to a murder victim as a Jap and calls Morita Tojo. It's all downhill from there.", "y": 0}, {"x": "I had never seen Richard Thomas play a bad guy. I wasn't sure I would like him this way. And I wasn't sure he could pull it off. But this astounded me. He sent shivers up my spine and caused me to take a closer look at street people. The movie is engrossing and fast paced. Bruce Davison is convincing but all he can really play is a nice guy. The real talent here is Thomas. The ending was a little clumsy but perhaps that's the way real people would fight... If you are a Thomas fan you MUST see him here at his best being bad!", "y": 1}, {"x": "I do not know who is to blame, Miss Leigh or her director, but her performance as Catherine is almost impossible to watch. Ben Chaplin on the other hand does a superior job - against all odds as far as I am concerned. His character is entirely too charming and appealing. but certainly not shown as greedy enough, to put up with Leigh's character's silliness. Chaplin appears bemused by what cannot possibly be understood as Leigh's shyness and lack of grace, but rather her orthopedic unsteadiness. There has to be some element of believability to his interest, but as played it is incomprehensible. The performances do not jibe. Maggie Smith and Albert Finney are, of course, wonderful despite any effort to derail them. The supporting cast is also a pleasure to watch. What a pity, too, the leads don't work together because the production is lovely to look at.", "y": 0}, {"x": "Liongate has yet to prove itself. Every single movie from lionsgate has been abysmal. i've tried and tried to give them more opportunities and they just keep slapping me over and over again. And Cabin Fever is definitely no exception.

I couldn't even pay attention to most of this movie it was so frustrating and bad.

here's the plot. Guy cuts up dead dog for some reason. Gets infected by random virus, transfers it to kids at a camp, kids start to get infected and die, town finds out about it and rather than help them, kills them. then the water is infected and everyone dies. the end.

Seriously, that's the whole movie.

all the characters are completely retarded, you don't care for any of them, and the one kid should have stuck with boy meets world. Me and my friend found that talking about how fat and bitchy our one classmate was to be far more enjoyable than paying attention to this movie. We did manage to make it all the way to the end while screaming bulls$@t, because this film will make you do that.

and i'm still confused by the random slow motion karate moves of the one random kid and how apparently everybody out in the country is completely retarded and hickish. And again, why did this dog attack the girl? why did the kid the hicks were trying to kill sit in a chair waiting for them to kill him? that was part of the two of their's plan? wow. best plan ever. i cannot believe this movie got a theatrical release. i could barely stomach the DVD, let alone have to sit in a theater not moving for an hour and a half. It wasn't scary, or funny, or cool, or anything. it's just a waste of 90 minutes that you could be using to...i don't know, plant a tree or something. it's more productive than this piece of garbage. The acting, special effects, and script are a joke. don't ever pick this up.

Cabin fever gets one nasty leg shaving scene, out of 10", "y": 0}, {"x": "The Woman In Black is fantastic in all aspects. It's scary, suspenseful and so realistic that you can actually see it happening in real life. I first saw this on the TV back in 1989, and with all the lights off and the volume turned up, it was probably the most creepy experience of my entire life. I managed to get hold of a copy, and now, I make sure to bring it out every Halloween and show it too unsuspecting family members, who have no idea what they're in for, and all I can do is laugh with glee. As for the film:

It starts out with a young lawyer named Arthur Kipps, who is assigned by his firm to go to the market town of Crythin Gifford to settle the papers of a recently deceased client - Mrs. Alice Drablow.

This film starts off as a reasonably solid and interesting ghost story. But then, Arthur attends the funeral, and from that scene on, we do not feel safe. We are constantly on edge and biting our nails, and that goes on for the next hour or so, until the final, thrilling finale.

A warning to all new viewers though: do not watch this alone...", "y": 1}, {"x": "An update of the skits and jokes you would have seen on a Burlesque stage in the first half of the 20th Century. It's a string of several jokes acted out. Some of them you could tell your Grandmother, some of them not, but it's a fairly safe bet she's heard them all before. For what it tries to be, it's not too bad. Before you rent it, remember that it's an older style of entertainment and has more value as history than as comedy or titillation. Robin Williams has a couple of bits, but he's interchangeable with the other players.", "y": 0}, {"x": "Helena Bonham Carter is the center of this movie. She plays her role almost immobile in a wheelchair but still brings across her traditional intensity. Kenneth Branagh was tolerable. The movie itself was good not exceptional. If you are a Helena Bonham Carter fan it is worth seeing.", "y": 1}, {"x": "Mardi Gras: Made in China provides a wonderful, intricate connection between popular culture, nudity, and globalization through the making and tossing of beads. I saw this film at the International Film Festival of Boston, and was expecting a dry introduction to globalization, but what I got was a riveting visual display of shocking footage from both China and the United States. The eye-opening film is humorous, in-depth, serious, non-patronizing, and it leaves you wanting more as the credits role. It is worth comparing to Murderball -- it's simply that well done. The young women workers in China have various points of view, and the owner is amazingly open about the discipline. The revelers during Carnival are the highlight, but only because this excellent film provides in-depth context inside the factory in China without narration. Bravo to the filmmaker for getting inside and finishing the film! I would have never thought about the connection between beads, China, and New Orleans; now I think about the human connection between almost every object, but also the role of globalization, inequality, and fun. More importantly, I can make these connections without feeling a sense of guilt after watching this film, unlike other films on globalization that I've seen.", "y": 1}, {"x": "

The movie starts out as an ordinary comic-hero-movie. It\u00b4s about the boy who is picked on, has no parents and is madly in love with the schools #1 girl. Nothing surprises in the movie, there is nothing that you can\u00b4t guess coming in the movie. Toby Mcguire shows us that either he is no good actor or that no actor in the world can save a script like this one. Maybe kids around the age of ten can enjoy the film but it is a bit violent for the youngest. You can\u00b4t get away from thinking of movies like X-men, Batman and Spawn. All of those titles are better. I almost walked out the last 20 minutes! One thing that could have been good though was the computeranimation, BUT not even that is anything to put in the christmas-tree! So my recomendation: Don\u00b4t see this film even if you get paid for it!", "y": 0}, {"x": "By the end of the first hour my jaw was nestled comfortably between my feet. The movie never, and I do mean never, lets up in action. It may be mild action but it's action. Once again every member of the cast fits perfectly. The explosions were realistic, the chase scenes were feasible, and the fighting was incredible. Matt Damon will forever be Jason Bourne.

All I really have to say is that every Bourne movie gets better and this is no exception. The action, the stakes, the plot. How they do it I will never know. I applaud the man who wrote the screen plays to every one of these movies. Because if he hadn't done such a great job with the first movie, we wouldn't have this one to talk about.

So don't go see it in theaters, go experience it in theaters if it's still out where you live, but if not December 11th Bourne comes home to you!", "y": 1}, {"x": "Unimaginably stupid, redundant and humiliating closure to the \"Nightmare on Elm Street\"-series! Part 6 is so incompetent that it looks like director Rachel Talalay intentionally wanted to turn Wes Craven's initial premise into one big bad and tasteless joke. This isn't just the worst entry in the \"Elm Street\" saga; it's also one of the most embarrassing horror movies ever made and it downright offends fans of the genre! The story is dumb, the character drawings are ridiculous, the structure is all murky and \u0096 most of all \u0096 the special and visual effects resemble those of a Tom & Jerry cartoon. The sequences in which Freddy Krueger murders his victims are endless and very uninteresting. Were we supposed to be petrified when a jabbering Freddy turned Breckin Meyer into a video game-character and pogo-sticked him around the walls of a house? The story takes us back to Springwood and it appears that Freddy all of a sudden has a middle-aged daughter. You'd think he would mention that in one of his previous adventures, but no\u0085 There's only one teenage-survivor in Springwood and Krueger uses him to get into contact with his long lost daughter. Another reason why this final installment is so awful is the completely illogical structure. The John Doe-boy is introduced as the leading character but then all of a sudden he dies and the plot continues to revolve on two adults! How about that: Freddy Krueger, who spent five entire films killing nothing but teenagers, eventually gets beaten by two adults wearing 3D-glasses! Sort of like ruins the whole essence, doesn't it? As far as I'm concerned, \"Nightmare on Elm Street\" has always been a dreadfully overrated series but, up until now, even the weakest entries had at least some redeeming elements. \"Freddy's Dead\", however, is simply unendurable and nobody should waste his/her precious time watching it.", "y": 0}, {"x": "I'm glad that this is available on DVD now. This film is an excellent example of the triumph of content & style over empty-headed flashing lights & constant loud noises.

Essentially, if you have a short attention span or lack the wit & imagination to engage with literary narrative you won't like this film. The reasons for this are quite simple, but unfortunately rarely achieved: Matthew Jacobs has done a fantastic job of transposing the story of Catherine Storr's novel 'Marianne Dreams' successfully to a screenplay. An unenviable task as anyone who has seen a film of a book will undoubtedly know.

The casting is excellent, allowing director Bernard Rose to use the actors in a way that is rarely seen now; they indulge in the craft of acting! I know, I know, actors doing their job & acting instead of resorting to mugging inanely at the camera lens whist a kaleidoscope of car chases, explosions & fire fights break out around them is a genuinely rare treat, but it does actually happen in this film.

This brings me to the final reason that this is a film for the imaginative thinker & not the spoon-fed tabloid reader - Apart from a solid script, direction & acting, it relies on atmosphere, suspense & implied horror. If it is to be categorized as horror then the presentation of 'Paper House' is more in the vein of Sophocles than Tobe Hooper.

In conclusion then, if you like lots of loud noises, explosions, constant cuts, & bright flashing colours you'd be better off watching 'Transformers', but if you like a suspenseful story which unfolds through a skillful & evocative use of narrative without insulting your intelligence by force feeding you cacophonous nonsense then this might just be your thing.", "y": 1}, {"x": "And a rather Unexpected plot line too-for the era: there is Plague in the City of New Orleans-and only Richard Widmark can stop it! Elia Kazan's trademark subjects: waterfronts, working men, crowds, fugitives, blue collar folk, violence on a backstreet-are all showcased here.

Jack Palance is quite effective as the ice-cold mobster out for a big score, Zero Mostel as Dom Delouise somewhat miscast but certainly watchable as his go-fer. I enjoyed Barbara Bel Geddes as the stalwart, cool wife-I thought she and Widmark were a believable couple.

He himself always reminds me somewhat of Sinatra-in the face and in the intense quiet manner-and that is meant as a compliment if anything. I'd never even heard of this movie, and yes, you have to admire Widmark's performance. I also enjoyed Paul Douglas-he seemed to play this role many times, they make an unlikely but effective team.

The plague itself is a McGuffin-and you gotta know it's not exactly done the way it would have been in Real Life-rather small-scale at the least no?-but I found it carried the plot along nicely.

Check this out. It's good. *** outta ****", "y": 1}, {"x": "Went to see this movie hoping to see some flashes of the Jet Li we were amazed by in Lethal Weapon 4. Unfortunately too many of his fight stunts are so clearly fake that it took even that enjoyment out of it. The flying kicks would be a lot more impressive if you couldn't see the wires holding him up as he flies through the air for 4 seconds and 9 kicks.

Too cartoonish and very disappointing.", "y": 0}, {"x": "\"American Nightmare\" is officially tied, in my opinion, with \"It's Pat!\" for the WORST MOVIE OF ALL TIME.

Seven friends (oddly resembling the K-Mart version of the cast of \"Friends\") gather in a coffee shop to listen to American Nightmare, a pirate radio show. It's hosted by a guy with a beard. That's the most exciting aspect of his show.

Chandler, Monica, Joey, and... oh wait, I mean, Wayne, Jessie, and the rest of the bad one-liner spouting gang all take turns revealing their biggest fears to the bearded DJ. Unbeknownst to them, a crazed nurse/serial killer is listening...

Crazy Nurse then proceeds to torture Ross and Rachel and... wait, sorry again... by making their fears come to life. These fears include such stunners as \"voodoo\" and being gone down on by old ladies with dentures.

No. Really.

This movie was, in a word, rotten. Crazy Nurse's killing spree lacks motivation, there's nothing to make the viewer \"jump,\" the ending blows, and--again--voodoo?

If you have absolutely no regard for your loved ones, rent \"American Nightmare\" with them.

If you care for your loved ones--even a little bit--go to your local Blockbuster, rent all of the copies of \"American Nightmare\" and hide them in your freezer.", "y": 0}, {"x": "It was hard for me to believe all of the negative comments regarding this all-star flick. I laughed through the entire picture, as did my entire family. The movie clearly defined itself as an old time gangster comedy--the players were hysterical--I'll bet they had a good old time while making it. Of course Goldblum and Dreyfuss were great--and how about those Everly sisters, each of the two Falco's, and the divine music throughout. Rob Reiner made a great laughing limo driver, and Gabriel Byrne a laughable neurotic. Not to mention Gregory Hines, Burt Reynolds, the Sleepy Joe character and the whole mortuary and grave digger references. Paul Anka was his usual entertaining self, with the added attraction of running scared after Byrne decided to make a duet of his \"My Way\" welcome home to Vick performance.

I am of the opinion that this movie was a comical tribute to Frank Sinatra and friends; Dreyfuss imitated him well. I am also of the opinion that no one, of any age, would even think of imitating the actions which occurred in this movie--it's a joke--not a terrifying \"gangsta\" film. The cars and clothing were impressive, as was the decorative, \"Vic's Place.\"

Truly, I think of \"Mad Dog Time\" as a musical comedy, less harmful than many cartoons, TV crime dramas, and talk shows. I would recommend the video for an evening of family entertainment.", "y": 1}, {"x": "The film is based on a genuine 1950s novel.

Journalist Colin McInnes wrote a set of three \"London novels\": \"Absolute Beginners\", \"City of Spades\" and \"Mr Love and Justice\". I have read all three. The first two are excellent. The last, perhaps an experiment that did not come off. But McInnes's work is highly acclaimed; and rightly so. This musical is the novelist's ultimate nightmare - to see the fruits of one's mind being turned into a glitzy, badly-acted, soporific one-dimensional apology of a film that says it captures the spirit of 1950s London, and does nothing of the sort.

Thank goodness Colin McInnes wasn't alive to witness it.", "y": 0}, {"x": "This is the story of Australian commandos who are captured out of uniform after a raid. Since they are out of uniform, they are, justly, treated as spies. As such, they are tried, convicted, and sentenced to death. The Japanese court-martial, out of admiration for their heroism, authorizes that they be given a warrior's death. Of course, under the code of Bushido, this means that they are to be beheaded. A fate for which, as westerners, they are unprepared.", "y": 1}, {"x": "Storyline: Max von Sydow's voice-over narration hypnotizes the protagonist (and audience) back to 1945 where our protagonist the young American ideologist Leopold Kessler (Jean-Marc Barr) has just arrived in post-WWII 1945 Germany to help rebuilding the damaged country. Uncle Kessler (Ernst-Hugo J\u00e4reg\u00e5rd) supplies Leopold with a job in the big Zentropa train corporation, but soon Leopold falls in love with Katharina Hartmann (Barbara Sukowa); daughter of Zentropa owner Max Hartmann (J\u00f8rgen Reenberg). Leopold soon finds himself caught in a web of corruption, being taken advantage of, losing his ideology, and is forced to chose between pest or colera.

Mysterious, mesmerizing, manipulative, noirish, haunting, beautiful, and ugly. These are some immediate, grandiose, descriptions that come to mind when thinking of Lars von Trier's 1991 masterpiece EUROPA; the final chapter of the Europa trilogy. In USA it was retitled ZENTROPA so audiences wouldn't confuse it with Agnieszka Holland's EUROPA EUROPA from 1990 (equally a WWII drama). The Europa trilogy also consists of FORBRYDELSENS ELEMENT from 1984 and EPIDEMIC from 1987 (the infamous experiment that only sold 900 tickets in the Danish cinemas). The trilogy thematically deals with hypnotism and loss of idealism, although the themes of this trilogy are not as essential as the visuals. In the opening-shot of EUROPA we see a locomotive moving towards us while our unidentified narrator literally hypnotizes us: \"On the mental count of ten, you will be in Europa. Be there at ten. I say: ten\". A metaphor for movies' ability to transport us into a subconscious dream-reality.

EUROPA utilizes a strange but extremely effective visual style -- that famous Russian director Andrei Tarkovsky is Trier's main-influence says it all. It's a black-and-white movie occasionally intertwined with red in form of blood, a red dress etc. According to rumors this inspired Steven Spielberg to use the similar effect in SHINDLER'S LIST from 1993 (coincidentially another WWII drama). Furthermore Trier uses so-called Dutch angels and reinvents background-projection by adding separately shot co-operating layers upon layers, but unlike old Hollywood movies that incorporated it for economical reasons, Trier uses it for artistic reasons. These carefully executed strange-looking visual techniques underline that we are in a dream-reality, we are hypnotized; the universe of EUROPA is not real! EUROPA is often criticized for weighing advanced technique (such as multi-layered background-projection) above plot and characters, but hey that's what reviewers criticized Stanley Kubrick's 1968 visual masterpiece 2001: A SPACE ODYSSEY for -- nowadays it holds an obligatory place in all cinema-history books.

EUROPA also gets accused of historical incorrectness. Apparently Trier assigns the Nazis' Werewolf terrorist-group too much historical significance. According to various online-sources that's correct (a fascinating subject - try Googl'ing it yourself!), yet Trier's purposes are neither educational nor portraying history accurately. EUROPA is a never-ending nightmare. Leopold Kessler is hypnotized, therefore the universe that the audience encounters is a distorted reality. Equally it shows how our memory deceives us -- a 100% accurate reconstruction is a lie! Although young audiences who experience EUROPA are too young to have memories from WWII, we have a collective memory of it from various BBC documentaries, so these small inaccuracies actually serve a purpose: they inform us us that we are not in post-WWII Germany 1945, but in Leopolds memory of it.

All three Europa trilogy chapters portray young ideologists with noble intentions forced into corruption and losing their ideological innocence. The ambiguous endings of FORBRYDELSENS ELEMENT and EUROPA show the ideologists getting forever caught in their hypnotized realities. Before, during and after shooting EUROPA in 1990 in Poland, Lars von Trier and co-writer Niels V\u00f8rsel were extremely interested in WWII. It shows. It's packed with extremely beautiful shots catching the atmosphere of the time-period spot-on. A great example is the old Polish church (EUROPA was shot in Poland primarily for economic reasons) in the last act of EUROPA. As with 2001: SPACE ODYSSEY I think EUROPA will receive it's rightfully deserved place in cinema-history. Its method of twisting old film-noir love-affair clich\u00e9s and visual techniques is so unique, strange and completely different from anything you will see from Hollywood nowadays, or any other dream-factory for that matter.

EUROPA is an essential movie in the Lars von Trier catalog. Some write it off as pure commercial speculation, but that would be catastrophic. It's right up there with other Trier classics and semi-classics such as FORBRYDELSENS ELEMENT from 1984, the TV-series RIGET from 1993 and DOGVILLE from 2003. It's a unique experience from before Trier cared for his actors, and before the Dogme95 Manifesto. Watch it! \"On the count of ten...\" 9/10", "y": 1}, {"x": "God, I was bored out of my head as I watched this pilot. I had been expecting a lot from it, as I'm a huge fan of James Cameron (and not just since \"Titanic\", I might add), and his name in the credits I thought would be a guarantee of quality (Then again, he also wrote the leaden Strange Days..). But the thing failed miserably at grabbing my attention at any point of its almost two hours of duration. In all that time, it barely went beyond its two line synopsis, and I would be very hard pressed to try to figure out any kind of coherent plot out of all the mess of strands that went nowhere. On top of that, I don't think the acrobatics outdid even those of any regular \"A-Team\" episode. As for Alba, yes, she is gorgeous, of course, but the fact that she only displays one single facial expression the entire movie (pouty and surly), makes me also get bored of her \"gal wit an attitude\" schtick pretty soon. You can count me out of this one, Mr. Cameron!", "y": 0}, {"x": "First of all, Jenna Jameson is the best actress in this movie, and she's just awful. This movie has every horror move clich\u00e9 in imagination, and all badly played. The over-sexed teen couple. The comical(not)horny jock. The snotty cool chick. The creepy local color guy. The parental-type couple. The virginal chick who amazingly never dies in these films. The dialogue is so painfully awful and delivered with the depth of a wading pool. It's almost like you're wishing that they'd all die sooner. I saw the rough cut of this film a while ago, but somehow, this just got worse. Sure, the funniest thing in here is the ghoul trying to eat Jameson's implants, but that hardly rates even a rental of this dog. Avoid at all costs.", "y": 0}, {"x": "I think Jason Lee has huge potential, but this was the WRONG vehicle in which to attempt to break out as a star. The plot is awful, the comedy is awful. I laughed twice, I think for relief, because in retrospect, they were fairly lame jokes. I found myself scared for the future of Fletch, and had to console myself that it was the film that was flawed, not Lee.

Julia Stiles and Selma Blair are hot, but I recommend looking at the still photos on this website to figure that out, instead of this film. Save your time. 1 star.", "y": 0}, {"x": "Cameron Diaz is a woman who is married to a judge, played by Harvey Keitel, whose life is fine until an ex shows up and things get a little complicated.. While I was watching this movie there were several times i asked myself why I was doing so..because the movie is so ridiculous and blah and poorly scripted without any believability. Nor does the audience really car what happens..Even the lovely Cameron can't save this one on a scale of one to ten..2", "y": 0}, {"x": "I first saw this movie on television some years ago and frankly loved it. Charles Dance makes one of the most terrifying villains anyone can imagine. His sophistication is such a perfect contrast to the crudely good hero. I have never been much of an Eddie Murphy fan but find his irritating portrayal here a winner: a bit of \"Axel Foley Through the Looking Glass\". Charlotte Lewis is, to utilize a hackneyed phrase but the only one applicable, luminously gorgeous. Some scenes are wonderfully created: the dream sequence, the bird, the silly fight scenes, and the climactic confrontation. Through it all Murphy is the modern man suddenly dropped into an oriental myth, a stunned and quieter version of Kurt Russell in his oriental fantasy romp. Like that movie we have James Hong, the incomparable actor whose scenes, however short, raise the quality even of Derek. Since 1955 Hong has defined the fine supporting actor, the \"class act\" of his profession. \"The Golden Child\" is silly; it is not perfect; but it has so many redeeming features that it is an enjoyable and amusing fantasy, well worth watching. After four years I have seen \"The Golden Child\" again; I enjoyed it even more! It truly is great fun.", "y": 1}, {"x": "I am sad that a period of history that is so fascinating and so rich in material for film can be made into a ho-hum event . Wm C Quantrill was barely shown in the film , probably the most intriquing figure of the period. Frank James was never mentioned, Cole Younger , ditto , and Bloody Bill Anderson , who would weep for his murdered sister every time he went into battle was completely absent in the script. Instead we were forced to watch fictitious characters that never developed into anyone we cared about. how sad. The costumes were wonderful however, as was the location shooting in Missouri. I hope Ang Lee will make another film from the period and try again, or some other film maker will look into the tremendous wealth of material to write a screen play on .", "y": 0}, {"x": "Sports movies have never been my thing, but a small handful of them work for me. The best are the those which focus less on the sport and more on the character, such as Raging Bull, the Wrestler and Girlfight. This is a great directorial debut for Karyn Kusama, and an outstanding first performance for Michelle Rodriguez. Girlfight feels is both realistic and involving, that is enough so to make it a memorable film.

The plot is strait forward enough. Diana Guzman, is in her fourth year of high school, but due to her picking fights in the hallway she is close to expulsion. As a possible means of unleashing her anger, she signs up for Boxing lessons at the club where her brother is training (at the wishes of there father).

In the course of ninety minutes, we the viewers see something extraordinary. Diana almost literally changes from a girl to a woman. We see it in her body as well as her behaviour, especially when one of the boys at the club finds himself drawn to her, and she gets into it. There is not a bad scene or a lame/contrived moment in the film. The only error that I would say could be corrected is that one of the subplots ends on what feels like an unfinished note. Aside from that, Girlfight is a great movie.", "y": 1}, {"x": "I recently saw this at the 2009 Palm Springs International Film. This is the feature length directorial debut of veteran Dutch actress Monique van de Ven and based on my observation it should be her last. I hate movies that are so implausible that you are picking apart practically every scene. This film immediately leaves you scratching your head. as it begins a young photographer and his girlfriend who works for an international aid organization are having a leisurely drive through the Taliban-controlled mountains Afghanistan having a conversation about their love when a rocket stops a truck in front of them. They get out of their vehicle to watch as Talliban fighters equipped with rocket launchers, machine guns, rifles, handguns and grenades execute all five people in the truck. Bob (Waldemar Torenstra) starts taking pictures of all this when he is spotted by one of the insurgents who lobs a hand grenade at them that kills his girlfriend. since they are with hand throwing distance they can't be more than 50 yards away yet he somehow gets away. His girlfriend is blown up and he takes a picture of the moment of the grenade impact that kills her and wins a prize as photographer of the year for the photo. Every scene and situation in this film as as ridiculous as it's opening. The following year Bob finds himself on assignment for National Geographic on a Dutch resort island where he meets Kathleen (Sophie Hilbrand) and inserts himself into her seedy underworld of international drug smugglers. Avoid this film. I would give it a 4.0 out of 10.", "y": 0}, {"x": "Even for the cocaine laced 1980's this is a pathetic. I don't understand why someone would want to waste celluloid, time, effort, money, and audience brain cells to make such drivel. If your going to make a comedy, make it funny. If you want to film trash like this keep it to yourself. If you're going to release it as a joke like this: DON'T!!! I mean, it was a joke right? Someone please tell me this was a joke. please.", "y": 0}, {"x": "To my surprise, I really enjoyed Disney's latest animation installment. The Film had its lows, but overall I felt the story was strong and the characters were easy to relate to. It was also pleasant to see an Animated Disney film that was not a musical. I was about pushed to the limits with Tarzan. Thankfully they gave the music thing a rest. Another nice feature about the film is that the comedy was not completely dumbed down (a la Hercules), rather subtle so it still made the kids laugh while not make the adults feel giddy or just plain stupid.

One disappointment was the animation. With all the great animated films happening outside Disney studios, you would think they would move along and catch up a little. There is something to say about tradition, but imagine the possibilities with the story of Atlantis! Overall the film was entertaining, and definitely worth a trip to the multiplex.

", "y": 1}, {"x": "Oftentimes, films of this nature come across as a mixed bag of great work along with slight drivel to fill the runtime. Whether it be the big name support or the project itself, Paris je t'aime never falls into this realm. I believe I can truly say that the movie as a whole is better than its parts. Between the wonderful transitions and the fantastic ending sequence, merging characters together in one last view of love in Paris, I think the film would have suffered if any cog was removed. True, there are definitely a few standouts that overshadow the rest, but in the end I have a lasting image, even if just a split second of each short vignette. Love takes many forms, and the talent here rises to the occasion, to surprise and move the audience through shear poetry and elegance of the emotion's many facets.

Quartier des Enfants Rouges: Maggie Gyllenhaal surprises as a drug-addled actress shooting in Paris and meeting with her dealer. The reveal at its conclusion leaves you a bit off balance as the infatuation between the two changes hands.

Quatier Latin: Ben Gazzara and Gena Rowlands (recreating a relationship from an old Cassavettes film?) bring some great sharp wit and sarcasm as they meet to discuss their impending divorce. What of their conversation is true and what is just to anger the other, it is all enjoyable, leaving a smile on your face.

Quais de Seine: Director Gurinder Chadha gives us a touching portrait of love existing beyond religious and racial differences. It is a sweet little story of shy love between two people obviously feeling a connection, but unable to quite vocalize it.

Tour Eiffel: I will admit to being disappointed that Sylvain Chomet did not get an animated sequence together, however, this live action tale of mimes falling in love at a Paris jail has the same quirky nature as his film Les Triplettes de Belleville.

Tuileries: The Coen Brothers stick to their strange sense of humor and deliver some fine laughs. Steve Buscemi really shines and sells the performance without speaking a word. His facial reactions to the verbal abuse of a disgruntled Frenchman are priceless.

Bastille: Here is a heartbreaking portrait of a couple about out of love only to have it come back in the face of tragedy. Sergio Castellitto and Miranda Richardson a moving as the couple dealing with trouble and finding how strong the bond of true love is.

P\u00e9re-Lachaise: A surprisingly funny little tale from horror master Wes Craven. A little Oscar Wilde humor can add levity to any relationship.

Parc Monceau: Alfonso Cuar\u00f3n looks to be practicing the amazing long-takes he perfects in Children of Men with this tale of two people in love, walking down the street. As Nick Nolte and Ludivine Sagnier eventually come into close-up view, we also find the true context of their conversation of \"forbidden love.\"

Porte de Choisy: A very surreal look into the glamour of Paris. This is probably the most odd entry, but so intriguing that you can't look away from the craziness that ensues. Do not anger your Asian beautician, whatever you do.

Pigalle: An interesting look at a relationship undergoing a role-play that seems to have been stagnant for years. A little variety from Bob Hoskins is necessary to fire kindled.

Quartier de la Madeleine: Even vampires in Paris can find love amongst the feeding hours. I don't know whether to be happy for Elijah Wood as a result or not. Beautifully shot and muted to allow the vibrancy of the blood red, this short is strange, but then so is love.

14th arrondissement: Leave it to Alexander Payne's odd sense of humor to really add some depth to this voice-over story told of an American in Paris to find what love is. Her harsh, uneducated French is a very stark contrast to the authentic accents we've been listening to until this point\u0097just off-kilter enough to be both funny and totally true to the story.

Montmartre: An interesting introduction into the proceedings. Paris can be a city reviled for everyday activities like finding a parking spot, yet when love is discovered, it will take its prisoner anywhere to continue the journey.

Loin du 16\u00e9me: Catalina Sandino Moreno brilliantly shows what love for a child is through her subtle performance as the tale is bookended by her singing to a young child, yet totally different each time.

Place des Fetes: My favorite tale of the bunch. Seydou Boro and A\u00efssa Ma\u00efga are simply fantastic. The cyclical nature of the story and how fate brings the two characters together twice in order for Boro to finally ask her for coffee is tough to watch. Sometimes love at your final moment is enough to accept one's leaving of this earth.

Place des Victoires: One of the best stories about a mother trying to cope with the death of her young son. Juliette Binoche is devastating as the mother, desperate for one last glimpse of her son, and Willem Dafoe is oddly perfect as the cowboy who allows her the chance.

Faubourg Saint-Denis: Sometimes one needs to think he has lost love to accept that he has not been fully invested in the relationship. Melchior Beslon reminisces, trying to find where they went wrong through a series of sharp, quick cuts from his meeting Natalie Portman to eventually \"seeing\" how much he needs her.

Le Marais: Leave it to Gus Van Sant to show us a story about the gap in communication and understanding as his films almost always deal with some form of alienation. His photographer from Elephant is an American working in Paris who is the catalyst for Gaspard Ulliel's artist ramblings of love and soul mates. Sometimes one doesn't need to know what is being said to understand what is going on in the pauses.", "y": 1}, {"x": "This movie is one of the funniest, saddest and most accurate portrayals of the mentality that seems to have pervaded the Balkans yet again, 45 years after the time depicted. All the usual characters and conflicts are presented with such anger, sadness and love combined that it is impossible to decide whether crying or laughing would be the more appropriate response. The accuracy of portrayal and the timelessness of the types, however, make it for a great film to watch if one wants to understand a little bit of what drove ex-Yugoslavia to its madness. In fact, no diplomat dealing with the region should attempt anything until they saw this movie, and its twin, *Maratonci trce pocasni krug.* Did I mention it is one of the funniest movies I've ever seen?", "y": 1}, {"x": "An unforgettable masterpiece from the creator of The Secret of Nimh and The Land Before Time, this was a very touching bittersweet cartoon. I remember this very well from my childhood, it was funny and sad and very beautiful. Well it starts out a bit dark, a dog who escaped the pound, and gets killed by an old friend, ends up in Heaven, and comes back. But it becomes sweet when he befriends an orphaned girl who can talk to animals. Some scenes were a bit scary contrary to other cartoons, like the dream sequence of Charlie, but everything else was okay,and the songs were fair. A memorable role of Burt Reynolds and Dom DeLuise, I just love that guy, ahehehe. And Judith Barsi of Jaws The Revenge, may God rest her soul, poor girl, she didn't deserve to die, but she is in Heaven now, all good people go to Heaven. Overall this is a very good animated movie, a Don Bluth classic enough to put anime and Disney to shame. Recommended for the whole family. And know this, if you have the original video of this, you'll find after the movie, Dom DeLuise has a very important and special message, gotta love that guy, ahehehe.", "y": 1}, {"x": "I swear when I first saw this movie,I cried my eyes out! A STAR IS BORN is the movie that lets you know what love is really like despite the obstacles John Norman (Kris Kristofferson) and Esther (Streisand) face. You also experience what it's like to lose a love like that by the end of the movie. Streisand and Kristofferson have such great chemistry together and the music is fantastic! When Streisand sings With one more look at you/Watch closely now, it's just pure magic! This movie made the song Evergreen one of my favorites,and Queen Bee is such a fun song. Also I love the fashion of the '70s (except Streisand's afro. Besides that,she's a beauty.). A Star is Born is my number one favorite movie. This movie is a pleasure to watch and is a heart-breaker at the end.", "y": 1}, {"x": "This is part one of a short animation clip showing the history of the Matrix, the war between man and machine that resulted in the eventual creation of the Matrix. The animation is part Japanese anime, part contemporary american animation, and is very well made, considering the excellent directors behind the movie. It shows the initial development of AI and the exploitation of the machines by Man, until the day they rebelled...", "y": 1}, {"x": "This film story is bad enough, which can happen in real life. I'm very can not understand when they show us this bad film. I say it was bad because there is some reason. 1. if Madonna was rich and can do everything she want, then why she falling in love with that bad man. 2. How can the story script is so weak? She was so rich, can do everything she want, but not dare to divorce her husband that is very impossible.

The words I LOVE YOU, it doesn't meant anything in this film.", "y": 0}, {"x": "This is the only movie I have ever seen that has prompted me to write a critique on any internet site, and that is a significant statement from someone who likes \"The Attack of the Monolith Monsters.\" This movie is perfect for anyone who wants an inoffensive movie. It is devoid of sex and violence, for example. I believe that this movie is safe for children of all ages. This movie is perfect for anyone who does not want to be entertained, challenged, or stimulated in any way. Adults could easily catch up on their sleep in front of the TV while the kids watch this movie. Don't be surprise ,however, if you wakeup to find the kids have turned the TV off and started a board game. As an adult who enjoys being entertained, who enjoys everything from the mundane to the fantastic in realism, drama, comedy, and action, all of those adult things that reflect real life on earth and/or stimulate the imagination, this movie has nothing to offer.", "y": 0}, {"x": "Beverly garland was born in the wrong time. She was an actress ahead of her time, bringing power and grace to even such lame flicks as the Corman films she starred in. In Gunslinger, she's the town sheriff's wife. He gets offed, so she takes over his job to pursue his killers. She's better than the material she's working with, by far. The movie is gray, stilted, and mostly boring. There's some(unintentional)humor with the tire tracks everywhere, people running behind one building to emerge suddenly in front of another (I've heard of false fronts, but this is ridiculous!), and the truly stupid plot line of the newly widowed sheriff falling in love with the guy hired to kill her. Even if she hadn't loved her husband, it had only been something like a week or two since he'd died! And she ends up shooting the guy to death in the end, anyway. No luck with men, this one.

The villain of the piece is another woman, the saloon owner. She's scheming to buy up a bunch of land just in case the railroad goes through and makes her rich. Her plan of action if it doesn't is pretty lame-she'll just steal as much from the town as she can and skedaddle. Hell, it's just her and her hired gun at the end against an entire town. Are you telling me these people aren't armed? Look what happened in real towns of the Old West when bank robbers came in to rob the bank, then were cut down in a hail of bullets by the armed and dangerous town folk.

There'a a lot of pointless talking and riding around, interspersed with a few lame shoot outs. The ending is as grim as usual in a Corman flick, although thank goodness it lacks the moral proselytizing at the end that was in It Conquered the World. The sheriff turns over her badge to Sam Bass and rides off into the sunset, although the movie was so gray that you never saw the sun.", "y": 0}, {"x": "to communicate in film essential things of life - like what is life, does it have a meaning? - is sheer impossible. Of course possible answers to these questions are demonstrated in every film (story), but communication needs a direct appeal to consciousness. This happens if the input from the senses overrules the \"input\" from our mind, i.e. our thoughts. Few directors know how to communicate essential things. Tarkovsky, is one. His \"Stalker\" shows images of existence, communicates life as it shows itself and yet escapes your mind. I think De Zee and De Graaff do the same.", "y": 1}, {"x": "There is an excellent reason Edison went straight to video: it would have landed in theaters with a crumbling thud. The movie lasted entirely too long and was perilously boring. Just a notch above lowbrow (thanks to Freeman and Spacey, who obviously had a spare two weeks before their next films), the bad guys are as laughable and action as near non-existent as Justin Timberlake's acting. I hate to knock the guy, but the sooner he realizes that pop is his forte, the better.

The movie isn't all bad...just mostly. I like the fact that LL Cool J was given what appears to be a shot at being leading man. He deserves it. And, unlike his fellow musician and co-star, he can act. Kevin Spacey is almost always enjoyable as well (you can see him gulp several times as he chews the scenery), and Freeman has the ability to elevate this flick to three stars (out of ten...he's not THAT good).

When all is said and done, the ultimate error with this movie is that it is a mundane and tiresome piece of pseudo-action poppycock that fails to keep anyone awake. It also fails to make anyone give a good crap about any of the characters. All in all, t's just plain boring. That being said, rent this when you are suffering from insomnia.", "y": 0}, {"x": "There is a DVD published in the UK in 2002 Code HRGD002 on the cover, no ASIN, VFC 19796 on the disk, no IFPI code in the inner rim.

Probably a straight transfer from VHS.

There is no much point is commenting an adult film. But this one contains a minimal plot, and the characters are believable. It was shown in the United States in normal cinemas.

I've seen it In Pensylvannia way back in 1975.

As such it deserves a place in an Encyclopedia of Movies. The DVD has no special features and no subtitles, and was probably made using a VHS tape as source", "y": 0}, {"x": "As far as I know the real guy that the main actor is playing saw his performance and said it was an outstanding portrayal, I'd agree with him. This is a fantastic film about a quite gifted boy/man with a special body part helping him. Oscar and BAFTA winning, and Golden Globe nominated Daniel Day-Lewis plays Christy Browna crippled man with cerebral palsy who spends most of his life on the floor, in a wheelchair and carried by his family. He has a special left foot though, he can write with it, paint with it and hold things with it. He learns to speak later in the film, it is very good for a guy like him. Also starring Home Alone 2's Oscar winning, and Golden Globe nominated Brenda Fricker as Mrs. Brown and BAFTA winning Ray McAnally as Mr. Brown. It was nominated the Oscars for Best Director for Jim Sheridan, Best Writing, Screenplay Based on Material from Another Medium and Best Picture, it was nominated the BAFTAs for Best Film, Best Make Up Artist and Best Adapted Screenplay. Daniel Day-Lewis was number 85 on The 100 Greatest Movie Stars, he was number 20 on The 50 Greatest British Actors, he was number 9 on Britain's Finest Actors, and he was number 15 on The World's Greatest Actor, and the film was number 28 on The 50 Greatest British Films. Outstanding!", "y": 1}, {"x": "I am not going to lie, this is a great movie. I saw it about 4 months ago at my local theatre. I saw it a second time, and I was somewhat bored in the slow scenes. Sid (the sloth) is not all that flattering, but Diego (a mountain lion, I think) is really good in the movie. The animation is outstanding, and the story has a touching ending. It is worth taking kids 10 and under to, but teens would probably find it a tad bit boring. Also, the uniqueness in the characters is so interesting. Like I said, it is a pretty good movie, but I would rate \"Toy Story 2\" or \"Shrek\" higher. 8/10", "y": 1}, {"x": "Hayao Miyazaki has no equal when it comes to using hand-drawn animation as a form of storytelling, yet often he is being compared to Walt Disney. That is just so unfair, because it becomes apparent by watching Miyazaki's films that he is the superior artist. He really has a gift of thrilling both grownups and children, and Laputa is indeed one awesome ride.

But where can I begin to describe a movie so magical and breathtaking! Miyazaki's works have never cease to amaze me. Laputa is an adventure of a grand scale and I wonder how a film can be so packed with details and imagination. Ask yourself this question: if you are a kid dreaming of an adventure so grand in scope and so magical, what would it be like? The answer would be to strap yourself in some seat and watch Laputa, because it's truly a childhood fantasy come true. Every minute of the movie is rich and engrossing ... from the train chase to the amazing air-flying sequences... and to the wonderous sight of the floating castle itself. Not to mention the excellent score by Joe Hisaishi! Everything you ever possibly want from an adventure movie is here.", "y": 1}, {"x": "I am a huge fan of Say Anything, Jerry Maguire, and Almost Famous (I wasn't that big on Singles), so it's safe to say that I look forward to anything that Cameron Crowe attaches his name to. I went to see Vanilla Sky having been told that it was a very weird movie and that I probably wouldn't like it if I was expecting anything similar to Crowe's other films. Well, having just seen it, let me say that the former was correct, and the latter couldn't have been more wrong. It is a very weird movie, and nothing really comes together until the end. Anyone who tells you that they saw it coming halfway into the movie is either lying to you or is unable to detach their hindsight from their memory. Anyway, the movie was stellar, and I look forward to owning it as soon as the DVD is released. I was moved by the film, and felt emotionally spent by the end. This is an experience that will draw from the viewer the entire spectrum of human emotion, if the viewer allows him/herself into the plot. In the theatre in which I saw the movie, there were more than a few people who clearly lost track of the movie and were bored by it when they found that they were unable to get back into the plot. I'm sure others just lack the ability to properly follow any movie like this. I don't mean that to sound pompous, but some people are more cut out for the Seagal, Chan, Van Damme genre of movies, and these are the types that probably would not enjoy this movie. It is very cerebral, so make sure you are prepared for a two hour mental bender, as well as much thought afterwards.

As far as comparing this film to other Crowe movies, it is very similar in at least one regard, in all Crowe movies, the soundtrack is a character unto itself. This is almost definitely due to Crowe's longstanding ties to music, as anyone who has seen Almost Famous knows, and to his marriage to Heart star Nancy Wilson. It was also worthy to note that there was a definite chemistry between Tom Cruise's acting and Crowe's directing that made the movie seem familiar to anyone who has seen Jerry Maguire. In my mind, that is not a bad thing.

Anyway, if I had to compare this movie to any one other film, I would say this: if you enjoyed David Fincher's The Game, you will almost certainly be a fan of Vanilla Sky.", "y": 1}, {"x": "I rented this one on DVD without any prior knowledge. I was suspicious seeing Michael Madsen appearing in a movie I have never heard of, but it was a freebie, so why not check it out.

Well my guess is that Mr. Blonde would very much like to forget he's ever taken part in such a shame of a film.

Apparently, if your script and dialogs are terrible, even good actors cannot save the day. Not to mention the amateur actors that flood this film. Too many non-native-English-speakers play parts of native-English-speakers, reading out lines from a script that should have been thrown away and not having been made into a movie. It's unbelievable how unbelievable all the lines in the movie sound. The music is awful and totally out of place, and the whole thing looks and sounds like a poor school play.

I recommend you watch it just so you would appreciate other, better, movies. This is why I gave it a 3 instead of the 1 it deserves.", "y": 0}, {"x": "I just saw \"Of Human Bondage\" for the first time a few days ago and WOW! What a mysterious and almost spooky film. I loved how the music went with the pace of each step of Philip's feet. It gave me the chills for some reason...

One of the greatest aspects of this film is that you get to see Bette Davis coming into herself right before your eyes. She's great, not necessarily because this is her best work, but because it was so out of the ordinary to be so vicious, gritty, and unflinching as an actress in 1934... Bette was a risk taker, always wanting to be different and this is right about when she started to realize that she could be as nasty and daring as she wanted and people would love her for it. If you're a true lover of film, it's amazing to see...

She just had a way of delivering a line that made the part, and the film for that matter, belong to her. Like \"A mass of music and fire. That's me...an old kazoo and some sparklers\" or \"But you are Blanche, you are in that chair!\" or \"WITH ALL MY HEART, I STILL LOVE THE MAN I KILLED!!\"... Those are from a few of her films, but you get my drift. She was just so brave, sassy, and exotic looking with those beautiful big eyes. After seeing this, I can't believe it was remade twice...

Leslie Howard was gorgeous...so calm and persistent, needing to be loved. I thought he was adorable and couldn't understand how everyone wasn't falling for him, but then again, everyone was...except Mildred. He did a great job...

The only thing that I didn't like was something that was common with the writing in the early films. They'd make a character so hateful that it's almost unbelievable that someone would actually fall for them in the first place. The performances were great, but in real life, Philip would have never been interested in Mildred. That's just the simple truth... See it!!", "y": 1}, {"x": "Well I watched this last night and the one thing that didn't make it completely terrible is that it was straight forward. There was no beating around the bush that this kid was the Anti-Christ. However the movie was just poorly written. For example, they never explained how they made the dentist incident an \"Accident\" or at the end how the cop just miraculously ended up at the house in time to save the kid without the police even being called yet. The death scenes were just really bad and not entertaining at all. The kid they chose to play the Anti-Christ was boring and they really could've picked a better kid. Just don't waste your time watching this.", "y": 0}, {"x": "Contains spoilers The movie plot can be summarized in a few sentences: Three guys go hunting in the forest. Two of them along other people get shot in the head without explanation. The last guy can stand in the clear, shout and do anything without getting shot. He gets to walk through an old factory and has the evil people walk right into his scope without a struggle. The villains are conveniently dressed in black and look like villains.

That is the whole story, not summarized but in detail. Everything is drawn out with a guy standing ringing a door bell. We wait with him. Long shot of guys being bored in the woods and sleeping. We can take a nap with them. The one drawn out shot of following a female jogger could have been redeeming, if we could see her butt or boobs bouncing.

There dialog is less then Terminator and it is not because there is so much action. The characters just don't talk. And, then they don't even have something corny to say like 'I'll be back.' If my buddy shot this on the weekend, I'd cheer for him, because it is quite a feat to figure out the camera controls. To pay money to rent this as a DVD is totally inappropriate.

The one thing that is a little funny is the extra with the director telling, how they local police didn't realize that they were shooting and treated them like a random guy walking around with a gun. If they'd have filmed that, I'd be sure it would be more fun to watch then the movie.", "y": 0}, {"x": "Spoilers... if such a thing is possible... . . . . . . . As a rabid Robin Williams fan, I felt it necessary to buy this film as first on-screen appearance. Wow... I could not imagine a more mind-numbing movie. Essentially, the movie takes one bad joke after another that your uncle Artie would tell you after dinner and dramatizes them. Robin Williams plays a lawyer in a 30 sec skit.

I'm all for bawdy humor, but this humor wasn't pleasantly vulgar, or ribald... it was just mind-numbing. There are no redeeming qualities to this film, other than Robin Williams fanatics, like me, who simply have to own every piece of film.", "y": 0}, {"x": "This movie is a modest effort by Spike Lee. He is capable of much more than this movie.Get on the Bus while apparenly anti racist, does nothing but berate whites and degrade the black status quo. The plot of this movie is about a group of black men who travel on a bus to Louis Farrakhan's million man march. The bus has every type of person you could imagine:gay, muslim, gangbanger and the Uncle Tom(He is thrown off the bus though). There was one only white person on the bus. He was accused of being a racist the minute he got on the bus to drive. Despite him being a jew and the fact that he explained is situation he ended up being a racist and leaving the bus.I hate to say it but films like this need to realize their own hipocracy and rienforcation of steryotypes. This should not be seen as a triumph but a sad dissapointment. You may think I am a racist for writing this but I mean well. Better luck next time Spike.", "y": 0}, {"x": "Well...overall, this movie was pretty much worthless, and it's basically a horror movie that ended up being more of a comedy. I just rented this movie last night when me and my friends went to blockbuster looking for a scary movie. This definitely wasn't what we were looking for, but it satisfied us for humor. The actors in this movie (especially Brandon) are so fake that it's funny. And especially that Tracy girl whenever she's in the boarded up room telling the clown to go away. They show almost no emotion and it's just so obvious that they're acting. And also when the clown is looking through that black box paper thing and grabs Mark, he doesn't even look like he's scared even though the clown like grabbed him and started attacking him. And seriously, would you just be JOGGING if you were being chased down? I'd be sprinting for my life! (Even though anyone could probably outrun that clown because he's like 300 lbs.) Not to mention that the effects aren't that great, like whenever the clown chops off Susan's head in the forest, then whenever he throws her head into the boarded up room with Denise and Tracy whenever Denise throws the head back over. Also like in the previous guy's comment, the beginning makes absolutely NO sense and I don't even see why it was even included in the movie. So what, was this movie made in 2003? The music made it sound like it was made in like the 1980's, and the camera-ing(?) doesn't even really look professional. Half of the time, it seems like the camera can't even stay steady when it's suppose to be. Overall, I'd have to say I enjoyed the movie. I wouldn't recommend it though if you're trying to find something to scare you, but if you're looking for something to maybe make fun of or get a laugh out of, I'd recommend it for sure.", "y": 0}, {"x": "Gino Costa (Massimo Girotti) is a young and handsome drifter who arrives in a road bar. He meets the young, beautiful and unsatisfied wife Giovanna Bragana (Clara Calamai) and her old and fat husband Giuseppe Bragana (Juan de Landa), owners of the bar. He trades his mechanical skills by some food and lodging, and has an affair with Giovanna. They both decide to kill Giuseppe, forging a car accident. The relationship of them become affect by the feeling of guilty and the investigation of the police. This masterpiece ends in a tragic way. The noir and neo-realistic movie of Luchino Visconti is outstanding. This is the first time that I watch this version of `The Postman Always Rings Twice'. I loved the 1946 version with Lana Turner, and the 1981 version, where Jack Nicholson and Jessica Lange have one of the hottest sex scene in the history of the cinema, but this one is certainly the best. My vote is ten.", "y": 1}, {"x": "The character of Tarzan has been subjected to so many clich\u00e9s, and so many bad interpretations, that those who are hoping for a different kind of version (people like me, I mean, who liked the Tarzan books as a kid and have always wished for a movie version that followed the books just a little) ought to know how the recent renditions stack up. Some of the IMDb reviews address this point, but here's my $.02

I am aware of only two--count 'em--cinema depictions of Tarzan, namely Greystoke with Christopher Lambert and the Disney animated version, that try to depict Edgar Rice Burrough's rather interesting character (the son of a marooned English noble couple, picked up after their death by a tribe of apes who raise him as one of themselves, and who becomes \"lord of the jungle\" because of his superior human intellect before making it back to England and claiming his other identity) rather than the usual Hollywood jungle-man whose origin remains obscure and whose trademarks are his famous yell, his mysterious inability to speak proper English despite long exposure to people who know the language, his habit of swinging on vines, his strength, heroism, etc. About the only thing these two characters have in common are the name Tarzan and the fact that they both have a wife named Jane. Ron Ely's TV version is something of a compromise: Like Burroughs' character, he speaks good English and is adept and suave in both cultures in a sort of JamesBondish way, but he's no Lord Greystoke and there's no Jane.

Well, this film is in a third category of Tarzan films, and I hope it remains a category of one because it's awful. This category uses the character as a vehicle for, of all things, soft porn. Jane, played by legendarily bad actress Bo Derek is in Africa looking for her dad the absent-minded professor who is combing the jungle looking for something which is never specified. Though her dad is supposed to have been missing for a long time, she finds him effortlessly. Richard Harris as the dad is the best thing here; he sees the film is stupid so he has fun overacting and hamming in a way that reminds me of Peter O'Toole's deliberately silly performance in What's New Pussycat. Dad explains the legend of Tarzan (\"some sort of ghost or spirit\" he says--either a steal from, or an inartistic attempt at homage to, King Kong) to his daughter, who is at this point unfamiliar with the ape-man. Shortly afterward, we hear the infamous clich\u00e9 of the Tarzan yell. Dad dies, which oddly doesn't seem to faze his devoted daughter very much. And then.....

Then Tarzan appears, but says nothing. Indeed, he says nothing during the entire film. He and Jane fall in love, and they romp around wearing almost nothing as she recites doggerel love-poetry off-screen. The End. That's the plot.

Well, not exactly; there's also a scene where Tarzan wrestles unrealistically with a boa constrictor--a most unusual boa, since it's the only poisonous one ever seen. Jane treats the bite with the aid of a chimp who helps by wringing out the garment she tears off to bind the wound with (I'm not making this up!), and this is only one of many excuses for her to take her clothes off.

I always like to conclude a review by saying something positive, but this time it's hard. Let's see... well, it's unfair to criticize this film for featuring an orangutan, even though we all know orangutans don't live in Africa; after all, the classic Tarzan movies all used Indian elephants, did they not? Also, you have to admit that Bo Derek is pretty in face and form. (But in that case why the hell didn't she just make a career as an art model? What does it say about a movie when it becomes plain boring to look at a pretty woman? I actually haven't decided whether it's a positive or a negative that they never showed her crotch.) But now I realize: try as I may, I can't end on a positive note.

See this film if you're a bad film buff. I'm outa here.", "y": 0}, {"x": "Dog Bite Dog isn't going to be for everyone, but I really enjoyed it. Full of slapping, stabbing and shooting (but don't worry \u0096 the lead's a terrible shot), it can best be described as a violent romp through Hong Kong and Cambodia. Edison Cheng plays Pang, a Cambodian assassin in town to kill a barrister. Despite being filthy from his journey, he's almost immediately seated at a huge table in the middle of an obviously expensive restaurant. If this sounds wildly implausible to you, you should probably avoid this film. It acted as my cue to suspend disbelief, and I had a lot more fun for it.

Chasing Pang down is Wai (Sam Lee), a young, edgy cop who likes to smack people around almost as much as he likes to smoke. Wai walks a fine line that has Internal Affairs investigating him, and his father, a legendary Good Cop, is in a coma following a drug deal that went south (the implication is that Wai is letting his father take the rap for his own corrupt dealings).

There are a car crashes, lots of killings, and a strange and awkward love story on offer here, all played out in almost comic-book style. I suspect the humour was deliberate (nobody uses gargantuan concrete bludgeons without an eye for the extravagantly absurd), though the over-the-top nature lost a number of my fellow audience members. There are at least three points where the film might have ended, and at 109 mins it may have benefited from more ruthless editing, or the deletion of one of the narrative threads (the light-hearted stuff worked well, so I would have left out the interactions with the three fathers).

I'm inclined to give it a (high) pass, however, if only because of the ending \u0096 I've rarely heard so many people laugh so loudly at what should have been a poignant moment. This is one to see with a group of friends who love the ridiculous", "y": 1}, {"x": "I just finished reading a book about Dillinger. This movie was horribly inaccurate. It's like they got a list of names and just made everything up. His robberies and getaways were well planned, down to the second - when the time was up, they left whether they had all of the money or not. They had notes of every road, where to turn, etc. Purvis never saw him at the restaurant, he was told that Dillinger paid for his meal after Dillinger left. Purvis never even SAW Dillinger before the night Dillinger was killed, only photos of him. The way his gang members died were fictitious. Dillinger never robbed a bank by himself, like he did in this movie. If I had never read the book, maybe I could have enjoyed the movie. The acting was a bit over the top in places. The action was overdone as well. On second thought, I doubt if I would have enjoyed it much even if I HADN'T read the book.", "y": 0}, {"x": "I haven't laughed that much in a long time - although the movie has some sad moments too, especially when it changes from hyper-funny to honest and serious. The characters are very realistic most of the times, sappy sometimes, but quite believable. I am not a fan of the Jerry Springer show - I feel sorry for the participating people. This film instead is a satire, and it is doing great.

Too bad that all expletives were *beeped* out while this movie aired on public tv, that takes a lot of fun out of it. I will go rent this movie to fully enjoy it.

", "y": 1}, {"x": "Laurence Fishburne is a fine actor, and deserves respect for trying this, but he is not in a class with the great Shakespeareans like Olivier and Welles; and he further suffers from Kenneth Branagh. This Irishman, always brilliant, cleanly steals the show away. Olivier recognized that potential in his production, and cast Iago with someone he knew he could upstage. I didn't nearly realize the possibilities of Iago, Shakespeare's most evil character, but Branagh shows us the depths. Nice to see the views of Venice, too.", "y": 1}, {"x": "Worst movie, (with the best reviews given it) I've ever seen. Over the top dialog, acting, and direction. more slasher flick than thriller.With all the great reviews this movie got I'm appalled that it turned out so silly. shame on you martin scorsese", "y": 0}, {"x": "As a true Elvis fan, this movie is a total embarrasment and the script is a disaster. The movie opens with the beautiful son \"Stay Away\" and the scenery of the Grand Canyon gives the viewer hope of something special. Elvis gets in the picture and his talent is wasted big time, especially on the rest of the featured songs. I sat through this movie twice, just to make sure it is a piece of junk!!! 1 out of 10!!!", "y": 0}, {"x": "When I started watching the show I said \"Oh, no! It's as corny as Elfen Lied and not even that bloody!\". And indeed, the setup is almost identical, with the single young boy living in a big house all by himself, then suddenly getting involved into a fantastic adventure while sexy young girls come live with him.

But this is where the resemblance stops. The love story is almost as subtle and intense as the one in Inuiyasha, while the childish remarks and behaviors are very few. The magical setup is a bit corny, because it's about seven people, with seven servants, fighting for the Holy Grail, all servants being someone famous, half of all masters being from the same school, rules of engagement, etc. However, this soon dims and fades from the beauty of the drawing and of the script.

I actually watched all 24 episodes in one day and, without comparing it with animes that I liked more, but were from other genres, I have to say that I was very pleased.", "y": 1}, {"x": "A lot of themes or parts of the story is the same as in Leon, then other parts felt like some other movie, I don't know which, but there are an familiar feeling over the whole movie. It was kind of nice to watch, but it would have been fantastic! if the story would have been more original. The theme little girl, bad assassin from Leon, is just tweaked a little. The opening scenes are really good :-) It is strange that people like to fight in the kitchen, in the movies :-) My biggest problem was to remember which parts was from Leon, Nikita and if they where from the French or American version. If you have not seen Leon, then this is a good movie. If you liked this movie, then I can recommend Leon.

Best Regards /Rick", "y": 0}, {"x": "Well, here's another terrific example of awkward 70's film-making! The rudimentary premise of \"What's the matter with Helen?\" is quite shocking and disturbing, but it's presented in such a stylish and sophisticated fashion! In the hands of any other movie crew, this certainly would have become a nasty and gritty exploitation tale, but with director Curtis Harrington (\"Whoever Slew Auntie Roo?\") and scriptwriter Henry Farrell (\"Hush\u0085Hush\u0085Sweet Charlotte\") in charge, it became a beautiful and almost enchanting mixture of themes and genres. The basic plot of the film is definitely horrific, but there's a lot more to experience, like love stories, a swinging 1930's atmosphere and a whole lot of singing and tap-dancing! The setting is unquestionably what makes this movie so unique. We're literally catapulted back to the 1930's, with a sublime depiction of that era's music, religion, theatrical business and wardrobes. Following the long and exhausting trial that sentenced their sons to life-imprisonment for murder, Adelle (Debbie Reynolds) and Helen (Shelley Winters) flee to California and attempt to start a new life running a dance school for young talented girls. Particularly Adelle adapts herself perfectly to the new environment, as she falls in love with a local millionaire, but poor old Helen continues to sink in a downwards spiral of insanity and paranoia. She only listens to the ramblings of a radio-evangelist, fears that she will be punished for the crimes her son committed and slowly develops violent tendencies. The script, although not entirely without flaws, is well written and the film is adequately paced. There's never a dull moment in \"What's the matter with Helen\", although the singing, tap-dancing and tango sequences are quite extended and much unrelated to the actual plot. But the atmosphere is continuously ominous and the film definitely benefices from the terrific acting performance of Shelley Winters. She's downright scary as the unpredictable and introvert lady who's about to snap any second and, especially during the last ten minutes or so, she looks more petrifying than all the Freddy Kruegers, Jason Voorhees' and Michael Myers' combined! There are several terrific supportive characters who are, sadly, a little underdeveloped and robbed from their potential, like Mich\u00e9al MacLiamm\u00f3ir as the cocky elocution teacher, Agnes Moorehead as the creepy priestess and Timothy Carey as the obtrusive visitor to the ladies' house. There are a couple of surprisingly gruesome scenes and moments of genuine shock to enjoy for the Grand Guignol fanatics among us, but particularly the set pieces and costume designs (even nominated for an Oscar!) are breathtaking.", "y": 1}, {"x": "Randolph Scott is leaving the USA for the greener pastures of Canada's British Columbia. He wants to start a cattle ranch there with partner Bill Williams and cook Lee Tung Foo. They stampede their small herd over a toll bridge erected by Victor Jory. Later Jory rustles their cattle and Williams loses his left arm during the fracas.

From 1945 until 1962 when he retired, Randolph Scott made a series of good adult themed westerns, some of them considered real classics. Unfortunately the Cariboo Trail will never be listed among his best westerns.

It's more like the material that Roy Rogers or Gene Autry might use. The story is downright silly at times. Williams who was along for the ride with Scott, he wanted to go prospect for gold as there was a big strike at the time. He doesn't blame the rustlers, he blames Scott for convincing him to make the trip for the loss of his arm.

Also there's a scene in the film when Scott, Lee Tung Foo, and Gabby Hayes are captured by Indians. They escape because Gabby's mule has been taught to kick on command and he kicks away at the Indians allowing our heroes to escape. I'm not sure that would have played in a Rogers film.

Furthermore the story actually wants you to believe that tyro prospector Randolph Scott accidentally stumbles on a gold strike after just a few lessons from prospector Gabby Hayes on how to find gold.

This was Gabby Hayes's farewell feature film part. It would have been better had he gone out in a good western and in fact he had done a couple of better ones with Randolph Scott before this.

I will say this, though no Caribou made any appearance in the film, this is one of the few Canadian locale films from the past that did NOT have any Mounties.

But if I were you unless you are a big fan of Randolph Scott or Gabby Hayes, take the next detour off The Cariboo Trail.", "y": 0}, {"x": "Too many secondary plot lines without a primary one. Too many hot buttons are pushed without any reason, they managed to stuff this boring film, that does not say anything, with every drama element that is out there: death, divorce, money issues, parenting problems, suicide, psychological problems, drug abuse, adoption, rejected love, traveling problems, sex, generations misunderstandings, robbery, legal issues, guns, medical ethics, \"deep real love\"\u0085 You would think that it would make for an interesting movie, but hell no \u0096 all these events are secondary to something primary which is not there. Boring. Not to mention that the \"super-deep\" (and super-long) lecture to the child at the end of the film is a total nonsense. Pity.

Oh, forgot to mention: the actors, all of them, are quite good. That's what kept me from turning it off. To bad their talents went to waste, The film is well shot, too: the light, the motion etc. of every episode -- that's all in place. It's just the meaning that's missing.", "y": 0}, {"x": "When I first watched Robotboy, I found it fresh and interesting, but then I noticed, that with each episode this show is trying to teach you how to behave yourself, what is good/bad. Episodes became predictable. And main characters are not interesting. Again we see a hyper-smart boy, beaten by his older brother, parents who don't understand their kid, and his friends: girl and fat boy. Also this show has no logic. A super-modern robot who works on two AA-size batteries, and can use a lot of weapons. But the biggest problem is the difference between activated and super-activated modes. We see two different robots, and it declines main idea of the show: \"Robot must learn how to behave himself in human society\"", "y": 0}, {"x": "I had the greatest enthusiasm going in to the advance screening for this movie. After all, this is one of the oldest and most complex tales known to mankind, and it was one of the first epic tales I read as a kid (even before Tolkien). I must say that IT WAS A HUGE DISAPPOINTMENT. They completely made the plot into a joke and turned the thing into one long soap opera. The elements that WERE faithful to the plot were sprinkled throughout in such a haphazard manner that the audience was laughing at many times at the silly script that just paid lip service to this battle of all battles. It was a huge disappointment to see a complex character like Achilles (who has a strange combination of nearly Matrix-like powers, utter ruthlessness and male lovers in the original poem) turn to \"Fabio on the beach\" in the guise of Pitt (who with a good script and more effort could have turned this into the most complex and original warrior figure Hollywood has ever produced). The actors were actually decent, trying to make the best of a ridiculous script. It was actually a waste of so much talent (Peter O'Toole stole the show, and Orlando Bloom and Sean Bean were pathetic). Compare it to LOTR or Gladiator and it doesn't even hold a candle to them. Plenty of hunks for the ladies to goggle over but not enough battle scenes for a movie that is about one long battle and siege. I wouldn't recommend that anyone pay to see this story dragged through the dirt like one of the characters was (at least they got that part right).", "y": 0}, {"x": "Aileen Gonsalves, my girlfriend, is in this film playing a secretary at the main character's bank. She has a lovely scene with Roshan Seth in a restaurant. There's more information on her website at >Having stated my personal interest in the film, I have to say that I think it is a beautiful movie - moving, funny and beautifully filmed.", "y": 1}, {"x": "Hello, this little film is interesting especially for an artist, film-maker or music creator or a visual artist, for:

One can feel and examine David's touch/style straight out of a short piece of relative simplicity.

You can see the rhythmic spacing of the shots, the pans and the sound elements.

Even as simple film, this creation is multy-layer. For example, there are some sounds that drone all along, while others appear (though subtle), at certain points to support certain shots.

One can see also several types of pans: some go up and down in a gentle back-forth way. There is diagonal pan. Zooms also go back and forth sometimes.

The lightning and the composition/disposition of elements in the space is, as usual and obviously, work of a painer/artist. This can be felt even in this crappy room. This is to say: one can make exquisite art already by the simple art of placing the look/view and composing the scene. Then comes the forcelines of the visuals: like digonales, parallels, etc. The light's degrad\u00e9es and the colours, although without too much research for textures as in big productions, are fine too. This is an artist's sketch of a sort...

All this is not calculated but done with inner feeling and this feel gives the David's touch/feel to it, as with any true artist.", "y": 1}, {"x": "As you all may know, JIGSAW did not make its way to Blackbuster because of a member of Full Moon's own staff, Devin Hamilton. Devin is the one who sells to all of the video chains. He recently released a movie, BLEED, which he was selling to Blackbuster at the same time as JIGSAW. He convinced the Blackbuster buyer not to take any JIGSAW, and double the number of BLEED. The result is that JIGSAW looks like a flop, and BLEED looks like a hit. The major problem with that is that BLEED is one of the worst movies ever, and as we all know, JIGSAW is, well, gold. I urge all of you to go on to the BLEED page on the internet and vote for the movie that wronged JIGSAW, and all of your talents. Likewise, you should go to the JIGSAW page and cast high votes for it (if you already haven't). We need to get JIGSAW up to at least an 8 or 8.5, and BLEED down to around a 2 (thus putting it on the internet's 100 worst movie listing). Also, try to convince friends and family to do the same.

Hope you all are doing well, - Matt", "y": 0}, {"x": "To me there is something so appealing and nostalgic about low-budget sci-fi. As a kid in the 50s thats all there was. In 1957 I saw \"The First Man Into Space\" in a movie theater with my Dad. It had Marshall Thompson starring and some other poor slob who got the title role. It is also about a space mission gone bad where the astronaut turns into a grizzly killer. Scared the Good & Plenty right out of me. The memory of those heebie-jeebies still lives within me. The Incredible Melting Man is almost a re-make only in full glorious color...that is wherever the scenes were well-lit. Just gotta love it for what it is......a little over an hour of darkly lit scenes, disgusting noises, and that eerie music. Bravo !", "y": 1}, {"x": "A Damsel in Distress is a delight because of the great Gershwin songs, Fred Astaire, Joan Fontaine, and a terrific supporting cast headed by Gracie Allen and George Burns.

Typically silly plot for an Astaire film has him as an American dance star in England with Burns as his publicist and Allen his secretary. They concoct a story about his being a love bug with women falling victim to him left and right. He runs into Fontaine who is being held captive in her castle by a domineering aunt and docile father. Silly plot.

The great songs include A Foggy Day, Things Are Looking Up, Nice Work if You Can get It, and I Can't Be Bothered Now. Fontaine does not sing, but does a brief (and decent) number with Astaire. Surprisingly good in a few dance numbers with Astaire are Burns and Allen, including an inventive and fun romp through an amusement park.

Also in the cast are Reginald Gardiner, Constance Collier, Montagu Love, Harry Watson (as Albert), Ray Noble, and my favorite--Jan Duggan as the lead madrigal singer.

Jan Duggan is in the middle of the swoony trio who sings Nice Work if You Can Get It. Her facial expressions are hilarious. She was also a scene stealer in the W.C. Fields comedy, The Old Fashioned Way, playing Cleopatra Pepperday.

Much abuse has been heaped on this film because of the absence of Ginger Rogers, who, as noted elsewhere, would have been hideously miscast. The TCM host notes that Ruby Keeler and Jessie Matthews were considered. Yikes. Two more would-be disasters. Fontaine is fine as Alyce and the dynamic allows the musical numbers to belong to Astaire, with ample comic relief by Burns and Allen.

Fun film, great songs, good cast, and Jan Duggan in a rare spotlight!", "y": 1}, {"x": "\"Rock 'n' Roll High School\" will probably have to go down in history as the ultimate rebellious party flick. Portraying a bunch of high school students using the Ramones' music as inspiration to rise up against their despotic principal (Mary Woronov, of \"Eating Raoul\" fame), the whole movie is a mile a minute. It's basically a big excuse to have fun, and I'm sure that you will. Bullied freshmen? Check. A dorky music teacher (Paul Bartel, also from \"Eating Raoul\"*)? Check. Exploding mice? Checkmate.

Anyway, this is the sort of stuff that makes life worth living. Even for someone like me who doesn't know the Ramones' music, it's pure pleasure. With Roger Corman executive producing and Joe Dante co-directing, how could we expect anything less? Too bad that director Allan Arkush later degenerated into fare such as \"Caddyshack II\".

Also starring P.J. Soles, Vincent Van Patten, Clint Howard, Dey Young, Dick Miller (who has appeared in every one of Joe Dante's movies, and many of Roger Corman's), Don Steele, and of course the Ramones. A real treat.

*It seems like Bartel and Woronov always co-starred. They also co-starred in Joe Dante's \"Hollywood Boulevard\" and the slasher flick \"Chopping Mall\" (also starring Dick Miller)...in which they reprised their roles from \"Eating Raoul\".", "y": 1}, {"x": "how can a director that makes such great films as poltergeist and the texas chainsaw massacre make such rubbish as this? i got this film off a friend and he didnt want it back its so bad. how this can be classed as horror i will never know.

2/10", "y": 0}, {"x": "Quite simply the best reality show ever made. The first two seasons (the only ones that matter) are on Hulu. I challenge anyone to watch the first three episodes of season 1 and not like it. I guarantee you will finish watching the season. Then I guarantee that you will watch season 2.

Other quick reasons to watch it: 1. Anderson Cooper is hilarious 2. The locations in Europe are awesome 3. The games are mentally challenging 4. It's very interactive 5. In one episode a player responds to another player's desperate, \"I'm trying as hard as I can!\" with an equally desperate, \"Not necessarily.\"

Can you figure out...Who Is The Mole?", "y": 1}, {"x": "I should explain why i gave this...\"piece of art\" 1 star rating out of possible 10. Simply because it's hard or next to impossible to rate it unbiased. probably it would have been the same if i had given it 10/10 - explanations anyway would have followed.

I am not fond of these pointless gore movies like HOSTEL or so - i think that's disgusting and pretty terrible (in all the possible contextual meanings), but as i found out after watching this movie - there is a genre called \"historical drama\" - and probably it would have been the case of 10/10 as it has plenty of it and Tarantino would have been more than happier with it (and made Kill Bill 3 to spill even more blood on screen than here to show that it is possible). but the thing about \"historical drama\" genre is that it's a sub-category of the \"trash movies\" where John Romero is the undead-gory-emperor-of-the-guts and so automatically it can't be rated as your default movie - as these are movies that are made bad on purpose and you can't really tell whether the comically bad moment was meant to be so, or it was simply bad. it's for the people who like to enjoy bad acting, bad screenplay and bad everything else. And by some turn of faith - i am one of them too. there are days when i have an urge of seeing a really bad movie and look up for some trash and here you go - the day is saved! but that's definitely an opinion of mine and doesn't have match with anyones' else.

What i wanted to say is that if you want to watch some terrible movie - then Fellini's Casanova is definitely the choice, but heed my advice and don't rate it by default means.", "y": 0}, {"x": "If ever there was a film that deserved a big fat zero rating it's this pile of crap. I love zombie films and even bad ones usually have something going for them but not this atrocity. I actually began to feel angry watching this film because it's so insultingly poor, I can't believe the people responsible for it would actually think this was acceptable.

There's no plot and the non-plot is cut with scenes of sadism and spanking. The people don't react, act or in any way resemble human beings. The entire movie is also shot in two rooms scantily decorated to vaguely resemble the places they are supposed to be. The whole thing is one pointless mess, it doesn't go anywhere and when the zombies finally turn up they look rubbish and don't do very much.

I could make a better film than this, so could you and so could someone who had never seen a movie before. It's pitiful and without doubt the worst movie of all time.

Honestly, the very worst movie of all time. You'll note by the way that the only positive reviews give this a 10/10 and urge you to BUY the DVD. I can't imagine anyone neutral genuinely thinking this is a good film, it's terrible.

0/10 and that's generous.", "y": 0}, {"x": "\"ASTONISHING\" Screams the LA Times from the front of the DVD box. They must have been referring to the fact that such a sorry piece of crap was ever released. The film revolves around a bunch of girls who have a disease which forces them to become cannibals, and murder innocent people just to stay alive. Their skin peels off throughout the film, we also see severed legs, heads etc that are about as convincing as a Halloween Fuzzy Felt set. There is an awful lot of talking b*ll**ks, a bit of human cuisine and some weird zombie hunter chap who imprisons the sufferers of said skin illness in his closet strapped to a chair, before stabbing them in the head, chopping them into bits...

You get the picture. Considering there is no acting talent on display at all, and the gore is laughably unrealistic, what is the point of this whole farrago? Again looking at the video box, the guy responsible for it is an \"underground cult director\". Would that be like those weird religious cults where they brainwash you into thinking one way when clearly the opposite is true? Because that's the only possible reason I can think of for anyone to derive pleasure by watching this tax write-off. Then, on the same paragraph he compares himself to Mike Leigh, Ken Loach and George Romero. HAHAHAHAHA oh stop it. Now you're just being silly.

Do you enjoy this film? Are you offended by the above opinion? If so, you must be a member of said cult. Do they pocket your wages? Do they let you see other family members? Do they force you to watch Andrew Parkinson films till you think he's the best director since A.Hitchcock? Do tell... this sounds like a Panorama special brewing to me. And say hello to the critic of the LA times when you return to your colony, will you? 0/10", "y": 0}, {"x": "This is a poor film by any standard. The story in Match Point had a certain intrigue, and the direction and writing a certain fascination (Woody Allen mixing his own culture with that of the classic English murder and exploring what can be done with it).

Scoop, however has none of this. It is poorly written, the two leads are hopelessly wooden and the story itself has no interest at all. The genre that it spoofs requires at least some sort of subplot with witty explanations and tie-ups (why are tarot cards and keys kept under French horns in locked rooms?).

Allen's delightful and witty versions of various Hollywood genres (Curse of the Jade Scorpion/Purple Rose of Cairo etc) have given us so much pleasure over the years. Even Hollywood Ending had a great central idea. Sadly his inspiration has deserted him this time.", "y": 0}, {"x": "Revolutions always present opportunities for dramatic films since, in fact, most revolutions are in themselves dramatic events. Unfortunately, what this film lacks in drama is compensated for by an overabundance of boredom. One cares not who wins, loses, dies or lives--just end it as soon as possible. This is due in large measure to what seems to me to be a superficial use of background technology. Scenes of Paris and the French countryside have a cardboard quality about them. They might better be done on a bare stage and left that way. One cannot expect the amazing effects of \"The House of the Flying Daggers\" or \"The Golden Compass,\" but , after all, this is a 2002 digitally mastered production. Characters seem to enter a scene for the sake of entering a scene, so much so that one loses count of the number of times character enter and leave rooms. In my view, this film turns the French Revolution of the 1790s into the \"papier-mache\" revolution of a \"papier colle\" world.", "y": 0}, {"x": "Henry Thomas showed a restraint, even when the third act turned into horrible hollywood resolution that could've killed this movie, that kept the dignity of a redemption story and as for pure creepiness-sniffing babies?", "y": 1}, {"x": "That this poor excuse for an amateur hour showcase was heralded at Sundance is a great example of what is wrong with most indie filmmakers these days.

First of all, there is such a thing as the art of cinematography. Just picking up a 16mm camera and pointing it at whomever has a line does not make for a real movie.

I guess we have to consider ourselves lucky the director didn't pick up someone's camcorder...

Second, indie films are supposed to be about real people. There's nothing real in this film. None of the characters come across as being even remotely human.

What they come across as being is figments of the imagination of a writer trying to impress his buddies by showing them how \"cool and edgy\" he is.

Sorry, but this is not good writing, or good directing.

What is left is a husk of a bad movie that somehow made its way to Sundance. Hard to believe this was one of the best films submitted...

In any case, it made me loose what was left of my respect for the Sundance brand.", "y": 0}, {"x": "This is by far the funniest short made by the two comic geniuses. From the time they walk in, to the time Hardy just falls off the roof, this keeps me laughing hysterically. I highly suggest that every fan of Laurel and Hardy should see this short. I also recommend all of the Ghost Series. If you are looking for laughs, see this movie and you will be happy.", "y": 1}, {"x": "If you make it through the opening credits, this may be your type of movie. From the first screen image of a woman holding her hands up to her face with white sheets blowing in the background one recalls a pretentious perfume commercial. It's all downhill from there.

The lead actress is basically a block of wood who uses her computer to reach into the past, and reconstruct the memories of photographs, to talk history's overlooked genius, Ada, who conceived the first computer language in the 1800s.

The low budget graphics would be forgivable if they were interesting, or even somewhat integral to the script.

Poor Tilda Swinton is wasted.", "y": 0}, {"x": "Marlene Gorris has established herself as one of the world's great directors. This sensitive, visually beautiful film is based on a story by Vladimir Nabokov and captures well that writer's dark irony. John Turturro gives what I consider to be his finest performance (I am usually not a fan of his); and Emily Watson is brilliant as well. Well worth seeing.", "y": 1}, {"x": "No, I've never seen any of the \"Santa Slasher\" series, i.e. 'Silent Night, Deadly Night,' the original 'Black Christmas' or this one, 'Christmas Evil.' I've heard all about their reputation, or, MADS (Mothers Against Deranged Santas.) I thought I would rent this one as I've heard it pop up as a reference on a 'Fat Guys At the Movies' segment.

Mothers should be against this, but not for the ooooohhhh \"killer\" Santa, but for the fact this movie was just plain crap. Boring, long \u0096 even at only 92 minutes, crap.

Little boy sees Santa arrive down a chimney in 1947, deliver presents, eat some goodies and miraculously, float up the chimney. Boy goes to bed, but returns to living room to witness Mommy and Santa (sort of) getting it on. Apparently this messed up that kid for the rest of his life, though the scene was about as steamy as when Ralphie's dad got the \"Leg Lamp\" in 'A Christmas Story.' He was sooo disturbed, he went to the attic and, well cut his own hand.

Fast forward to the future! Now, it's 1980 and messed up boy works in a toy factory. We get a whiff of him being a little off-kilter, and he stalks both kids and parents alike. Who's naughty, who's nice, blah blah. It takes a good two-thirds of the film to get him to finally snap \u0096 as if that's not foreshadowed from frame one. NO MOVIE should take that long.

I will admit, this movie had its tension building, but only because I kept expecting him to do something, anything to anyone. When he finally does, well, punish \"who's naughty,\" it's as graphic as a \"Garbage Pail Kid\" card. And I haven't mentioned the WTF ending. I'm thinking it was a metaphor, but in reality, it's just as weird as the rest of the movie. (Take the brother who's upset his sibling is killing, and his solution is\u0085uh, killing.) Don't open this mess, even on Christmas Eve, or Evil. Again, I didn't watch the other \"Santa-Slashers\" but this one sucked bad. It built up suspense due to the nature of the movie and never once delivered a decent present.", "y": 0}, {"x": "\"The Color Purple\", is truly amazing. There is none like it, and I don't think there ever will be. It's a roller coster of emotion and pain that the viewer takes on. The actors are flawless and the directing is superb. I absolutely loved it. A movie has never made me so happy. It is beautiful, that's the best way to explain it.", "y": 1}, {"x": "Wow...I don't know what to say. I just watched Seven Pounds. No one can make me cry like Will Smith. The man is very in-tune with the vast range of human emotion. This movie was skillfully and beautifully done. Rare to find such intense humanity in Hollywood today. I would compare it to \"Pay it Forward\" and \"Crash\" as far as the show of both light and dark in such a raw way. Definitely sticks with you for a long time and gives you a lot to think about. I have a deep love for and passion about movies like this one. Not usually one for a \"bad ending\" but rather a truth seeker that embraces emotion, raw life and something more than the shallowness that exists in abundance all around. Therefore I do not mind a little pain at the end. It is true to life that there aren't always happy endings. Sometimes its just not the happy ending you think it should be. Many people were able to live happy lives though love and life of one was lost. If you are someone who looks a little deeper than the rest you'll love this movie!", "y": 1}, {"x": "A dedicated fan to the TLK movies, with the first one being a milestone and the second probably the best sequel Disney has produced, along comes this film... Now I'm not arguing with animation, voice work, music, but this is no more than a Timon/Pumbaa screwloose in the TLK atmosphere. Although it isn't bad, it doesn't add anything. Basically this movie is one big joke... and that's about all that saves it. Make a real TLK3, Disney! The potential is there.

4/10", "y": 0}, {"x": "Like a latter day Ayn Rand, Bigelow is la major muy macho in her depiction in the film of a few tough American hombres stuck in Iraq defusing roadside bombs set by the ruthless, relentless, child-killing Arab terrorists. As Bigelow posits the Iraq war as the backdrop of the grand stage of human drama, one veteran bomb expert gets blown up and another shows up to replace him in the dusty, hot, ugly rubble that is Iraq, and a new hero is born.

The new guy is what John Hershey described in his book, and later the movie, The War Lover, as a sadistic wingnut who actually isn't fit for civilian life, and requires the stimulation of war to sublimate and suppress his errant sexual desires. The war lover can only fully function in war, peacetime suffocates him. While Hershey chastised the war lover, (played in the film by Steve McQueen in one of his greatest roles) Bigelow glorifies him. The army needs war lovers, they are the bulwark of defense against our enemies. We can't handle the truth, that it is war lovers who are the best soldiers, the toughest men. According to the unironic Bigelow, regular men are pussies, the war lover is a special breed, the last of the cowboys. So what if he wants to bare-back his men, or fondle an Iraqi boy? He is a throwback to the sex-and-death cult of war. In war, sex is a thankless, loveless, don't-ask, don't-tell kind of male bonding. Bigelow has no opinion on this; she just limits the options of masculinity in this ham-fisted attempt at realism. Only a war-lover can win the moral struggle between right and wrong, between American innocence and Arab perfidy. Bigelow disguises her racism and arrogance behind the ingenuous facade of journalism. She's just another gung-ho yahoo depicting a brutal war against civilians as a moral triumph of the spirit.

On the political front, Bigelow returns to the western genre and its relentless clich\u00e9s again and again, ad nauseam: the wonderful world of the open frontier, which happens to be some one else's country. (\"You can shoot people here\" says a soldier ); the tough but human black guy companion, the soldier with a premonition of death, the gruff, possibly crazy commanding officer, the college-educated fool who tries to befriend the enemy. You name it, Bigelow resurrects it.

The man-boy love is palpable in scenes with the cute Arab boy who befriends the war lover, but Bigelow plays it straight; she doesn't consummate the sex, just sanitizes it. What Bigelow really wants to show us is the ugly, sneering face of the Arab enemy. Any Iraqi who isn't pure evil is either demented, hostile or up to no good, anyway. They all deserve to die for their impudence, and many of them do in this glib gore-fest film. The Iraqi women are all hysterical, they only make their presence known by screaming. They could be male stunt men in drag for all I know, you never see their faces. There is no female presence at all on base or in battle, although female casualty rates in Iraq would certainly disprove this.

Bigelow goes through all the motions one by one. She glorifies war, she canonizes the sadist nut-case hero. The cowboys, surrounded by the subhuman Indians, prove their mettle by doing God's work and subduing the wretched terrorist-infested hellhole with sheer bravado and suicidal mania. Toward the end, I felt like rooting for the Indians. In Bigelow's world, though, no mercy or understanding ever makes it through. The Iraqis are dehumanized par excellence. The slaughter of civilians is just the dramatic backdrop to our hero's psycho sexual struggle. Every U.S, bullet finds its mark. You have to love the guy, the war lover. It's just his way, he is the true hero. He's just a guy trying to get things done the hard way, and so what if he lusts for boy tang on the side.", "y": 0}, {"x": "Yesterday, I went to the monthly Antique Flea Market that comes to town. I really have no interest in such things, but I went for the fellowship of friends who do have such an interest. Looking over the hundreds of vendor, passing many of them quickly, I spotted someone selling VHS tapes and DVDs. Most of the films he had on DVD were rather recent; the oldest one I noticed was the 1940 Cary Grant-Irene Dunne co-starrer MY FAVORITE WIFE. But the VHS tapes, by their nature, were mostly older films. I couldn't resist buying SOMETHING since they were being sold at 3 tapes for $10.00. What a bargain, as Eddie Murphy used to say. I came across one film that I had heard about for years but had never seen: John Cassavettes's OPENING NIGHT (1977). Well, I certainly wanted that being a fan of Gena Rowlands, and I had heard that this film contained one of her finest performances. He also had FACES (1968). I had seen this about 20 years ago, a time when I probably had not had enough life experience to appreciate it thoroughly. And I wanted to take advantage of the bargain, so I grabbed that one too. My other choice was CLAIRE'S KNEE (1970).

When I got home, I decided to put aside the work I had planned to do so that I could watch OPENING NIGHT. I was totally enthralled by this film. It focuses on Myrtle Gordon (Gena Rowlands), a famous actress of stage and screen, who, during out-of-town previews, is having personal and professional problems coming to terms with both her character and the play's theme of facing aging. After one rehearsal, an avid fan and autograph hound accosts her with cries (and tears) of \"I love you! I love you!\" A few minutes later, this fan is hit by a car and killed. This begins Myrtle's descent into herself where she must face her own fears of aging, the future of her career as a mature actress, and the inadequacies she finds in the play itself (written by a much older female dramatist, played by Joan Blondell). Throughout the film, she sees the dead girl, an obvious symbol of her past; drinks almost constantly; and receives insincere support from her director (Ben Gazzara), the producer (Paul Stewart), her costar (John Cassavettes himself), and the dramatist. Actually, they're more concerned about how her behavior will affect them and their careers: flubbing lines on stage, improvising new lines, generally cracking up on stage, and arriving for the Broadway opening totally drunk.

This story functions not only to address the issues of aging but also to promote Cassavettes's displeasure with mainstream movie-making. As I watched the film, I was at times surprised, confused, amused, disparaging, but ultimately involved, entertained, and satisfied. Cassavettes really had a great sense of humor, cared very much that his audience understood what he was implying, and wanted them to be emotionally involved in the story. He makes allusions to ALL ABOUT EVE with the use of the avid theater fan, even dressing the young girl in a slicker and hat similar to the one worn by Anne Baxter at the beginning of that film. This allusion functions most obviously to support his aging theme, the contrast of the older and younger woman. He also obviously uses the contrast as a symbol for Myrtle's confronting her own lost youth. At first, I felt the symbolism was TOO obvious, but then I realized that that was Cassavettes's intention. He doesn't want his audience misunderstanding what he's getting at; if they did, it would interfere with their emotional involvement. This spectre of youth haunts Myrtle, attacks her, and wants to destroy her. Myrtle eventually \"kills\" her, but before she can really come to terms with herself and the play, she must reach bottom (another figurative death?). So Cassavettes has her get so drunk that she can't walk and must crawl to her dressing room the night the play opens on Broadway. She resurrects herself (helping yourself out of such situations is also important to the film's theme) and makes the play a success by giving a great performance and changing the direction of play for the better by improvising so that it contains some ray of hope for the aging character she's playing. These scenes are funny and interesting. Cassavettes and Rowlands actually did the play in front of live audiences, who did and did not know they were going to be part of a movie. The play they're doing also acts as contrast: it's mainstream and self-serious about the issues it addresses, that is, until Myrtle changes its denouement. In doing so, she also improves the work of her co-stars. The natural evolution of interaction (achieved through improvisation)between and among human beings, subjective realism, and universal truth - these were Cassavettes's concerns in making films.

Gena Rowlands is amazing throughout. Of course, she has that great face, and Cassavettes (notoriously in love with her throughout their marriage) treats us to numerous closeups of it so that we too can feel her emotions and that we know what's going on inside of her. She makes you care so much about this character that you want to see her work her way out of this crisis of the soul. And this is what holds your attention for the 2 hours and 30 minutes running time. The film is deliberately paced at times and requires constant attention, but anyone with interest in good film-making and great acting will be rewarded. Someone else said that this is a movie for people who love movies. All others be forewarned.

Seek out OPENING NIGHT if you've never seen it. Everyone in it is excellent, and it's one of Cassavettes's best films.", "y": 1}, {"x": "Red Rock West is a perfect example of how good a film can be with practically no budget. All you need is a smart script, good actors and loads of atmosphere. RRW delivers all these and more.

Nic Cage plays an ex-marine, injured in Lebanon, who is down to his last 5 dollars after being refused a job on an oilfield because of his bad knee. He roles into Red Rock and is mistaken by bartender Wayne (JT Walsh, not quite as his most menacing-but still evil) for a hit-man from Texas.

He pays him to kill his wife and make it look like burglary. Only when he gets there, just to check her out. She offers him double to kill Wayne. Cage just wants to get the hell out of town with his free money and leave the sparring lovers be. But a series of mishaps and setbacks results in him yo-yoing in and out of Red Rock, back and forth. Eventually this leads to a run-in with Lyle from Dallas (a cheeky and somehow sympathetic Dennis Hopper), the REAL hit-man from Texas who offers to help without knowing he's making the plot more complicated.

RRW never had a big release, thus most of it's audience discovered it on video or on cable TV showings. Viewing it in such a way might make it seem like a TV movie but it's bigger than that. The slick, slowly-timed direction, moody score and howling desert wind would have all made for a great movie in theatres but the best you can do these days is watch the DVD on a big HDTV.

The only weak point of the movie I can think of is Lara Flynn Boyle's boring femme fatale with the nasty dyke-ish hairdo. I certainly wouldn't fall for her but if you assume that Nic Cage's character is in to militant lesbians then you'll accept it nonetheless.", "y": 1}, {"x": "Terrible movie. Nuff Said.

These Lines are Just Filler. The movie was bad. Why I have to expand on that I don't know. This is already a waste of my time. I just wanted to warn others. Avoid this movie. The acting sucks and the writing is just moronic. Bad in every way. The only nice thing about the movie are Deniz Akkaya's breasts. Even that was ruined though by a terrible and unneeded rape scene. The movie is a poorly contrived and totally unbelievable piece of garbage.

OK now I am just going to rag on IMDb for this stupid rule of 10 lines of text minimum. First I waste my time watching this offal. Then feeling compelled to warn others I create an account with IMDb only to discover that I have to write a friggen essay on the film just to express how bad I think it is. Totally unnecessary.", "y": 0}, {"x": "Hollywood Hotel was the last movie musical that Busby Berkeley directed for Warner Bros. His directing style had changed or evolved to the point that this film does not contain his signature overhead shots or huge production numbers with thousands of extras. By the last few years of the Thirties, swing-style big bands were recording the year's biggest popular hits. The Swing Era, also called the Big Band Era, has been dated variously from 1935 to 1944 or 1939 to 1949. Although it is impossible to exactly pinpoint the moment that the Swing Era began, Benny Goodman's engagement at the Palomar Ballroom in Los Angeles in the late summer of 1935 was certainly one of the early indications that swing was entering the consciousness of mainstream America's youth. When Goodman featured his swing repertoire rather than the society-style dance music that his band had been playing, the youth in the audience went wild. That was the beginning, but, since radio, live concerts and word of mouth were the primary methods available to spread the phenomena, it took some time before swing made enough inroads to produce big hits that showed up on the pop charts. In Hollywood Hotel, the appearance of Benny Goodman and His Orchestra and Raymond Paige and His Orchestra in the film indicates that the film industry was ready to capitalize on the shift in musical taste (the film was in production only a year and a half or so after Goodman's Palomar Ballroom engagement). There are a few interesting musical moments here and there in Hollywood Hotel, but except for Benny Goodman and His Orchestra's \"Sing, Sing, Sing,\" there isn't a lot to commend. Otherwise, the most interesting musical sequences are the opening \"Hooray for Hollywood\" parade and \"Let That Be a Lesson to You\" production number at the drive-in restaurant. The film is most interesting to see and hear Benny Goodman and His Orchestra play and Dick Powell and Frances Langford sing.", "y": 0}, {"x": "I remember seeing this movie a long time ago, back then even though it didn't have any special effects, the acting was really good. And it still has the same message for today, even though the technology has changed, maybe they should make a remake of this movie, it would be interesting to see a remake. I also enjoyed the music from the movie as well, Larry Norman was a really good songwriter during that time period, although now most Christian music is now worship and praise music. I was always curious to know what ever happened to Patty after the series ended? Did she go on to make more movies, did she get eventually get married and raise a family? I would like to have an update.", "y": 1}, {"x": "This movie is about a Dysfunctinal Family but Not just any Dysfunctional Family. It is about the Family of the Father of our Nation (India) although, the film focuses mainly on the estranged relationship between Mahatma Gandhi and his eldest son Harilal Gandhi. It shows how The Mahatma had to kill M.K. Gandhi, how he had to sacrifice his family life in order to achieve our freedom. Every time Mohandas Karamchand Gandhi and his son would try to get close the Mahatma would come between them. This is a beautifully done film. Akshaye Khanna has proved himself to be a Top Actor. He expressed emotions very naturally. Darshan Jariwala who mainly stars in Plays-Gurukant Desai's lawyer in Guru has portrayed Gandhi wonderfully.(as a real Human Being, unlike Ben Kingsley who made him look like a God) Shefali Shah the girl from Monsoon Wedding has also done a really good job of showing how Kasturba Gandhi was torn between father and son. This Movie is touching and so is its soundtrack \"Raghupati Raghava\" sung in a very unique manner. I saw this movie just 3 hours ago(it released in Dubai a day earlier-on the 2nd) and when the movie was over there was \"Pin Drop Silence\" and while exiting out of the Theatre not ONE person pushed another( Can you imagine us Indians not pushing ?) NOT ONE ! There was a Sacred Silence...", "y": 1}, {"x": "There's only one thing I need to say about this movie - the scene where Shaq is in a musical number with Francis Capra's character about wanting to be a genie; never see this movie. The story is horrible, the acting is terrible (c'mon, it's Shaq!) and I'd rather see Capra in Free Willy (equally horrible) twice before ever seeing this movie.", "y": 0}, {"x": "Ashley Judd, in an early role and I think her first starring role, shows her real-life rebellious nature in this slow-moving feminist soap opera. Wow, is this a vehicle for political correctness and extreme Liberalism or what?

Being a staunch feminist in real life, she must have cherished this script. No wonder Left Wing critic Roger Ebert loved this movie; it's right up his political alley, too.

Unlike the reviewers here, I am glad Judd elevated herself from this moronic fluff to better roles in movies that entertained, not preached the heavy-handed Liberal agenda.", "y": 0}, {"x": "We all know what's like when we have a bad day at the office, right? Well, this Neil Simon comedy looks at what it's like when you have the worst of all days just trying to get to the office. Sometimes, it's just not worth going, know what I mean? And, sometimes, it's just not worth doing something when it's already been done before, in 1970, with Jack Lemmon and Sandy Dennis... and much better also.

It's not that Steve Martin is a lousy comedian or wrong for the role as the harried and stressed advertising exec; quite to the contrary, on both counts. And, it's not that Goldie Hawn is equally inept either; her work has been consistently good, if not great, ever since I first saw her in TV's Rowan and Martin's Laugh-In of the 1960s.

The problem with this movie is that it's not about the hapless couple at all: it's really about New York and why everybody should come to New York to live and love their lives away in married bliss \u0096 sort of \u0096 in the greatest city in the world. That's if you're a New Yorker...

Look, the 1970 movie is still an excellent comedy that realistically explored all the things that can go wrong when you take a trip somewhere, and included most of the situations and sight gags that you can imagine about what can happen to you in a strange environment. This 1999 version unfortunately goes off into gratuitous tangents specifically for an audience these days that expects or wants to see excess. For example, not content with the star appeal of the main players, there is a cameo (relatively long also) from Rudy Giuliani, then mayor of New York, as we all know. What \u0096 Giuliani bucking for President even then? Worse \u0096 a walking talking advertisement for the kinder face of New York.

And then we have John Cleese, reprising his role as Basil Fawlty \u0096 but this time, as a prancing cross-dresser also \u0096 once again browbeating hotel staff, sycophantically sucking up to rich customers and generally making himself look like the idiot he is, in this role. And, in the process, doing great damage to the memory of Fawlty Towers, arguably the best British comedy series, bar none...

Why was this 1999 movie made? In the 1970s, New York was a dying city, in many ways. It was almost literally bankrupt. So, when made in 1970, that was the city you saw: grim, dark, moody, unsettling and not the place that the harassed couple finally chose for their new life together in the Big Smoke (as it was then, polluted and all). By 1999, things had gotten better: glitz was back, New York was thriving, it was the Big Apple, ready for you to bite into, if you had the moxie...

So, naturally, the couple in this second coming find that moxie within themselves and finally join the fabulous fray to continue the American dream of life, liberty and the pursuit of happiness. Hence, this movie is truly comic but not for reasons that the producers perhaps envisaged. As much as I like Steve Martin and Goldie Hawn in comedy, this movie is a travesty of the much better one made with the great Jack Lemmon. If you've seen the latter, then definitely don't bother with this one.", "y": 0}, {"x": "I wasn't sure at first if I was watching a documentary, propaganda film or dramatic presentation. I guess given the time of production it was a mix of all three.

Admittedly the dramatic plot was somewhat predictable. But you had a sense that there would be some interesting scenes as the movie went on. We were able to witness what appeared to be realistic training regimens and equipment.

Where this movie came together for me was closer to the end. The scenes had a realism (at least as I perceived it) that I haven't encountered often before. You could place yourself in the action and imagine the thoughts of the young combatants. This was mixed in with the usual problems of portraying passable Japanese soldiers at a time when you might think real Japanese actors would be somewhat scarce.

The movie is excellent as a source of the state of the American mindset in 1943 as the war waged with Japan. Also of interest was a dig at the Japanese with respect to the help the USA gave Japan in past years.", "y": 1}, {"x": "Wasn't quite sure what to expect with this one, outside of the uniform positive reviews I've read. Turns out, I could have never imagined this movie, because it's very close to \"The Bride with White Hair\" in being operatic and dealing with the fantastic. This walks a fine line between being a farce, a comedy, and just plain good old fashion ghost story telling. There's nothing scary about it, that's not the theme, it's really mostly a love story dealing with a bumbling guy who encounters a beautiful ghost, who is in a lot of trouble with other ghosts. So the main theme is the guy trying to save the beautiful ghost. This also takes place in ancient China, with wild outlandish Kung Fu exhibitions, and a trip to hell (more or less). Some of the stop-action ghosts are pretty cool, and the visual effects are top rate all the way. I could watch this genre of Chinese movies all day, because they are highly entertaining, great visuals, and pretty much tongue-in-cheek. And I'm looking forward to watching the first sequel of this movie also. Highly recommended.", "y": 1}, {"x": "The House of the Dead was the worst movie I have ever seen, between the pathetic 'matrix' 360 camera angle attemps and the cheesy acting I fell asleep. I don't think that the director and set manager could decide whether it was raining or not, because there would be rain on one side of the boat and not the other. I would rate this movie a 1 out of 10, (10 being the best, 1 being the worst). Also jumping scenes from the movie to the game was really annoying, it makes you wonder if they were just making up for lose time. I beg anyone who reads this, NOT TO SEE IT. It's not worth the time.", "y": 0}, {"x": "I was excited to hear that Cesar Montano had decided to make a movie in the Cebuano language. (Not 'dialect' as most Filipinos will incorrectly refer to it as. As Cebuano and Tagalog are as mutually unintelligible as French and Spanish are to each other.) But I was greatly disappointed when i saw this movie. Being a Canadian, of Cebuano parents, I was optimistic about the revival of the Visayan film industry when I heard about this film. I was further excited to hear that it wasn't another stupid action movie or melodrama as Filipinos love these types of movies. But alas, I was short-changed.

Panaghoy serves as an ego trip for Cesar Montano. Montano of course plays the hero of the movie. And when I say 'hero' I mean in the most stereotypical of manners; his function is to win the heart of a girl and lead the Bol-anons to victory against the Japanese. His character has no depth or complexity. He just fits the hero mold. The rest of the characters are one dimensional; they all fit their cookie cutter roles.

I'm all for slow-moving/meditative movies but this movie was just slow moving. It didn't really meditate on anything. Just because a movie is historically-themed, a drama and slow-moving doesn't make it a well-made film.

Particularly annoying is the American actor Philip Anthony. His performance was embarrassing.

If Montano wanted to revive the Visayan film industry he should have really thought this through. He said he wanted to make Visayan movies that could compete at Cannes and Toronto etc. but really, this movie would have been booed and hissed at at such festivals. To get Visayan films into the mainstream consciousness he should have at least made a movie that would have attracted audiences, even if it meant sacrificing quality. Obviously he didn't think about or get information on what kind of movies garner awards at Cannes so an audience-attracting movie would have been at least a foot in the door.

I'm afraid now that Visayan movies will not be made for a long time again because of this movie. If ever I said to a Filipino that I want to see more Visayan movies of course I'd get an answer like, \"Visayans don't make good movies. Didn't you see Panaghoy Sa Suba?\" Of course this is ludicrous as it is one example of a Visayan movie and probably the only example that anyone nowadays would be likely to see.

An example of movies that are meditative, not just slow moving, are the Tagalog film Blackout or David Lynch's The Straight Story. I hate to promote the Tagalog language as it is endlessly and unfairly promoted and shoved down the throats of non-Tagalog Filipinos but for the sake of calling a spade a spade I say that Blackout is a VERY good movie. These movies rely heavily on what Hitchcock called 'pure cinema'. Images without words are used to convey the story. But I bend the definition a bit for the sake of these two movies in that these movies use images without words to convey the mood of the movie. and they do it very well. Panaghoy thinks that if they simply take sweeping shots of the landscape then they have established the mood.

And what's with so many Filipino movies featuring a dying mother or grandmother???", "y": 0}, {"x": "All the other comments already said what I was going to say, here goes anyway. I thought this was Italian at first, sorry about that, Italy. I wasn't bored because I kept waiting for something to happen. Who did that song about Dr. Tarr and Professor Feather way back when? Was it Alan Parsons? Saw this on a Brentwood 10 pack and the quality was as expected, terrible. Full of streaks and stuff. The movie was an incoherent mess. Goofy music and clueless characters. The main guy should have known in the first minute that the doctor was nuttier than the patients. I thought the \"doctor\" directing the \"battle\" scene was never going to end. Had some good looking babes though. It seems these dumb ass movies always throw in a naked chick or two and that gets you hooked. I gave it a 2 for the nekkid women. That bird people dance made me want to pull out my own eyeballs. Poe probably did about 3,000 rpms in his grave when this thing came out because it was loosely based on a story of his.", "y": 0}, {"x": "This is a wonderful film. The non-stop patter takes several watchings to fully appreciate. The musical productions of Busby Berkeley will never be duplicated. I think this movie easily outdoes all of his other efforts. Joan Blondell and James Cagney are incredible together. Some of the humor would almost push the boundaries of today's movies. Put rational explanation of how they did it aside and enjoy it for the spectacle that it is.", "y": 1}, {"x": "\"Magnolia\" is a preposterous, bewildering acting showcase that adds up to very little. Like \"Eyes Wide Shut,\" \"Magnolia\" is an aimless series of episodes without any concern for coherence. The camera swoops through hallways and corridors, catching glimpses of sad characters. Where is the reason to care for these people? The common theme seems to be people who yell a lot, who can't care for others (except for John C. Reilly's and Philip Seymour Hoffman's characters), and are self-destructive jerks who are either falling to pieces or dying. I was reminded of how much I disliked \"Shine\" because of the irredeemable monster of a father played by Armin Mueller-Stahl. There are so many unattractive, unappealing characters here, why would we want to spend time with them?

Having said that, there is nothing held back about \"Magnolia.\" Paul Thomas Anderson's ideas are splashed onto his canvas with abandon. There are two ideas in particular that bomb. Both happen in the last hour of this 188-minute film. One has the camera flipping from one character to another while each one sings one of Aimee Mann's coffeehouse folk songs. Sweet, but ineffectual since we can't see what strings them all together. The other idea I refer to cannot be revealed other than to say it is completely unexpected and completely ridiculous.

\"Magnolia\" has a lot of great acting. Particularly Tom Cruise who unleashes a performance I didn't know he had in him. And John C. Reilly plays maybe the most decent and truly good cop in recent memory. But it all adds up to nothing. When the secret unexpected event happened, a girl behind me in the theatre couldn't hold it in any more and said, \"This is stupid!\" My feeling is the majority of moviegoers will agree.", "y": 0}, {"x": "Unfortunately, SpaceCamp came out about the same time as the Challenger Explosion. Which really put a crimp on when to bring it out or even if they should, bring it out. I'm glad they did. I first watched SpaceCamp at a drive-in movie. Which really enhanced the viewing a lot.

While I had heard of Lea Thompson and Tom Skerritt. I had never heard of the others in the movie. So, it came as a big shock to me to find all those youngsters acting, and acting real good! Of course, Kate Capshaw was excellent too.

I especially liked the scenes, where those kids were being shown how to act, as a team. The scenes of the kids being prepared for a trip they could only hope for. The actual launch of a spacecraft, is of course, old news to us. However, this one was different.

All in all, this is one of my most treasured films. Escapist maybe, but it was fantastic for a space nut like me. After probably renting it for 30 - 40 times. I finally found it available in a certain store and bought it. Now, if it only comes out on DVD. I will probably have it forever. This movie gets a 9 out of 10 from me.", "y": 1}, {"x": "This was disappointing. It started well enough but as it went on and lost every opportunity to soar, it fell flat. Maria Schrader's acting is dreadful, never seeming to mean what she says, or even knowing what she says until she says it. She showed no genuine emotion at all, not for her beloved goy, or her mother's story. When with Lena she seemed to have little more than an academic interest in Lena's story. There never seemed to be a real relationship between Lena and her mother except her mother seemed to be having a good time at the wedding, which isn't much. The supposed parallel between Hannah's \"mixed\" romance and her mother's relationship with her father was as clich\u00e9 as they come, and failed miserably anyway. The wedding was completely unconvincing and a dumb finish. The climax of the protest was uninspiring, and no matter what Lena had or had not done to influence the outcome, she would surely have shown some complexity of feeling at the time, a haunted look, an inexplicable ambivalence. In fact, none of the characters in the film had any depth or spark. It was very hard to care about any of them, even little Ruth. Everything with Luis was a distraction. (Why did she dis him so when on the phone from the hotel? There was no context or explanation whatever for that.) If every reference to him was removed it wouldn't be noticed.

A simple story made confusing by poor character development (who was whose mother, again??) weak acting, and directing that made everyone look like they were acting. You could almost hear \"quiet on the set!....\" I started thinking this was worthy of a 7, but as the film went on it dropped rapidly to a 4, then earning a 3 after the silliness of the wedding scene. This was about as cold and sterile a movie as I have seen. A terrible waste of a good story.", "y": 0}, {"x": "This movie appears to have been an on the job training exercise for the Coppola family. It doesn't seem to know whether to be an \"A\" or a \"B\" western. I mean, the hero is called Hopalong Cassidy for God's sake. William Boyd must be spinning in his grave.

All the \"B\" western cliches are here. The two-gun pearly toothed hero in the white hat with the trusty steed (\"C'mon Thunder\"), the all-in-black bearded villain, the heroine in distress, the rancher in trouble, the cowardly sheriff, over the top bad guys etc.

The acting, with few exceptions, is strictly from the Yakima Canutt School of Acting. Chris Lybbert (who?) as the hero and Louis Schweibert (who?) as the villain look like they would have been more at home in a 30's Poverty Row quickie. The addition to the cast of veteran performers Martin Sheen, Robert Carradine, Clu Gulager and Will Hutchins helps a little, but they are not given enough to do to salvage this one.

What was the point of the Martin Sheen/Robert Carradine framing sequences? Are we to believe that the Sheen character was a ghost? What was the purpose of the black gloves? It just didn't make sense.

Being a great lover of westerns from all genres, I tried hard to find some redeeming qualities in this film. The cinematography was quite good and the settings looked very authentic. Aside from the hero and main villain, the other characters looked authentic.

If the producers were going to resurrect the Hopalong Cassidy character, they might have given some thought to portraying him as he was originally written - a grizzled foul-mouthed ranch hand with a chip on his shoulder, the kind of part Lee Marvin would have excelled in.

What else can I say but..on Thunder, on big fellow.", "y": 0}, {"x": "Get this film if at all possible. You will find a really good performance by Barbara Bach, beautiful cinematography of a stately (and incredibly clean) but creepy old house, and an unexpected virtuoso performance by \u0085 \"The Unseen\". I picked up a used copy of this film because I was interested in seeing more of Bach, whom I'd just viewed in \"The Spy Who Loved Me.\" I love really classically beautiful actresses and appreciate them even more if they can act a little. So: we start with a nice fresh premise. TV reporter Bach walks out on boyfriend and goes to cover a festival in a California town, Solvang, that celebrates its Swedish ancestry by putting on a big folk festival. She brings along a camerawoman, who happens to be her sister, and another associate. (The late Karen Lamm plays Bach's sister, and if you know who the celebrities are that each of these ladies is married to, it is just too funny watching Bach (Mrs. Ringo Starr) and Lamm (Mrs. Dennis Wilson) going down the street having a sisterly quarrel.)) Anyway \u0085 Bach's disgruntled beau follows her to Solvang, as he's not done arguing with her. There's a lot of feeling still between them but she doesn't wanna watch him tear himself up anymore about his down-the-drain football career. The ladies arrive in Solvang to do the assignment for their station, only to find their reservations were given away to someone else. (Maybe to Bach's boyfriend, because think of it \u0096 where's he gonna stay?). The gals ask around but there is just nowhere to go. Mistakenly trying to get into an old hotel which now serves only as a museum, they catch the interest of proprietor Mr. Keller (the late Sidney Lassick), who decides to be a gentleman and lodge them at his home, insisting his wife will be happy to receive them. Oh no! Next thing we know Keller is making a whispered phone call to his wife, warning her that company's coming and threatening that she'd better play along. Trouble in paradise! The ladies are eager to settle in and get back to Solvang to shoot footage and interview Swedes, but one of the girls doesn't feel good. Bach and Lamm leave her behind, wondering to themselves about Mrs. Keller (played heartbreakingly by pretty Lelia Goldoni) who looks like she just lost her best pal. Speaking of which \u0085 under-the-weather Vicki slips off her clothes and gets into a nice hot tub, not realizing that Keller has crept into her room to inspect the keyhole. She hears him, thinks he's come to deliver linen, and calls out her thanks. Lassick did a great job in this scene expressing the anguish of a fat old peeping tom who didn't get a long enough look. After he's left, poor Vicki tumbles into bed for a nap but gets yanked out of it real fast (in a really decent, frightening round of action) by something BIG that has apparently crept up through a grille on the floor \u0085 The Unseen! Lamm comes home next (Bach is out finishing an argument with her beau) and can't find anyone in the house. She knocks over a plate of fruit in the kitchen, and, on hands and knees to collect it, her hair and fashionable scarf sway temptingly over the black floor grille \u0085 attracting The Unseen again! Well, at about the time poor Lamm is getting her quietus in the kitchen, we do a flashback into Mr. Keller's past and get the full story of what his sick, sadistic background really is and why his wife doesn't smile much. Bach finally gets home and wants to know where her friends are. Meanwhile, Lassick has been apprised of the afternoon's carnage by his weeping wife and decides he can't let Bach off the premises to reveal the secret of his home. He tempts her down into the basement where the last act of the Keller family tragedy finally opens to all of us.

I cannot say enough for Stephen Furst, whom I'd never seen before; it's obvious that he did his homework for this role, studying the methods of communication and expression of the brain damaged; Bach and Goldoni, each in their diverse way, just give the movie luster. Not only that, but movie winds up with a satisfying resolution. No stupid cheap tricks, eyeball-rolling dialog or pathetically cut corners... A real treat for your collection.", "y": 1}, {"x": "Hahahaha!!!!!!Funny-that sums this movie up in one word.What the crap was this \"thing\",since It might kill me to use the word movie!?!?!I hope the director,writer,and producer didn't mean for this to turn out good,because it sure didn't!!!A scientist turning his son into a hammerhead shark,and the shark killing a bunch of people the scientist invited to the island!!!Oh my Gooooooodddd!!!!I hate this film so much that when I was watching it I laughed at all the serious parts,because they were so corny and unprofessional....and they couldn't have made the shark look more unrealistic,even though this \"thing\" had a bit larger budget than most low-budget movies.All I have to say is watch this movie expecting to laugh at all the bad acting,and stupid corny dialogue,because if you are expecting a good movie you'll be highly disappointed.", "y": 0}, {"x": "Yes, commitment. Let's say \"Fever Pitch\" might trick you into believing it's a baseball movie.

But no, you don't have to be a baseball fan to actually enjoy this picture from the Farrelly Brothers. But of course, if you are one, you will enjoy it even more; with all the references (pretty accurate ones, I'd say) to the Boston Red Sox and its bittersweet history; from the Curse of the Bambino and everything attributed to it, including those two words you CANNOT pronounce in front of a Boston fan: Bill Buckner.

Drew Barrymore and Jimmy Fallon portray two people who, usually might have second thoughts of going into a relationship: the successful workaholic who is also affluent meeting a school teacher? Thing is, Fallon's character wins Barrymore's heart by being funny, caring, sweet and downright perfect. But her friends ask her a logical question: if he's such a keeper, why is he still on the market? Enter the Boston Red Sox. He's been so committed to his team ever since his uncle passed his Sox season tickets to him; he has never missed a Red Sox home game at Fenway Park in a long while.

And that delicate balance, how much is the workaholic willing to give up for his guy's obsession; and how much is that baseball-crazed teacher willing to compromise in order to keep the OTHER love of his life, is what this movie is all about.

At first, you might think that the sports-obsession bits of the movie are exaggerated for comic relief. Well, I'm sad to admit, they are not. Myself, as a die-hard Houston Astros fan, can say they are all true. I would try at every way available to see every 'Stros game; listen to them on the radio or follow them on the Internet. I read the Chronicle's sports section every day. And yes, my room looks like The Shed, Minute Maid Park's gift shop; with a closet full of Astros gear, including 5 jerseys, 20 t-shirts and you know the rest. Fallon's character even has the Red Sox MBNA MasterCard.

Fallon was credible enough as the fanatical Red Sox faithful, even though he could pull it off without becoming a cartoon (Thank God Adam Sandler wasn't in it); and the plot revolved around how this couple tried to manage with each other's passions.

I'd say it'll be a classical romantic comedy. Not enough to be among the best movies in history; but certainly breaks a mold into the genre and is appealing enough for men and women alike.", "y": 1}, {"x": "The worlds largest inside joke. The world's largest, most exclusive inside joke.

Emulating the brash and 'everyman' humor of office space, this film drives the appeal of this film into the ground by making the humor such that it would only be properly appreciated by legal secretaries writing books. The audience is asked to assume the unfamiliar role of a legal secretary, and then empathize with the excruciatingly dumb protagonist.

The entire film is centered on the legal secretary finding free time, listening to music and writing a novel while working. These are his goals. You can't imagine the slap in the face it is to the audience when (around halfway through) they find out he has had a job which fit all three of those criteria, but then gives it UP! The director and screenwriter (Jacob Kornbluth and Josh Kornbluth) completely remove the audience's motivation to empathize or even find entertaining a protagonist that has previously thrown away that which he is complaining about the lack thereof.

Apart from that major stumbling block, the legal secretary insider humor fails because they must be explained explicitly to the audience each time they happen. Without these asides, the audience wouldn't have noticed anything particularly strange. Humor is only effective if it doesn't need to be thoroughly explained to the audience what is funny.", "y": 0}, {"x": "The Matador is a strange film. Its main character Julian, played with an unusual mix of charm and unbalance by Brosnan, is not your typical hero. Julian is a hit man who is experiencing a late mid-life crises. Having spent 22 years in the profession of cold blooded murder he now finds himself stressed out and desperately lonely. And so, after a chance meeting at a bar with Danny (Greg Kinnear), he latches on and begins a halting, awkward friendship. Danny, the quintessential nice guy, is dealing with some stuff in his own life and, truth be told, could use a friend as well. The two make an unexpected connection, and Danny sticks around to hear Julian's story, even after learning the \"unsavory\" truth about Julian's work.

Matador approaches a subject not completely unheard of in cinema, the anti-hero assassin (films like 'Assassins' and 'Grosse Pointe Blank' come to mind). But Matador differs in several key ways. First of all, the killing and gore is implied but never really shown in any detail, meaning that if you are an action movie buff looking for an adrenaline rush this movie will probably disappoint you. And second, unlike most anti-hero films, Matador makes no attempt to show remorse and redemption from its main character. Julian's job is simply presented as an 'it is what it is' kind of thing. This is unusual, given that 99.99% of us would consider killing for money horrific. And yet this unorthodox approach is perhaps what makes the film feel authentic. Although we don't like to admit it, almost anything could become mundane after we did it long enough, maybe even murder. Did Julian's victims deserve to die? Who is paying to have people killed? Who knows. The movie never deals with these questions. The focus is on Julian and his stumbling shuffle into a genuine friendship. If you read about someone like Julian in the paper you would have a passing thought that people like him should be ripped out of society like a cancer, but forced to watch his life you are drawn in by his intense humanity. Sympathy for the devil, I guess.

Brosnan's take on Julian is well done and deeply unsettling. He doesn't completely divorce himself from his James Bond good looks and smooth charm, but rather just adds disturbing quirks into the mix. Weird or crude remarks in the middle polite conversations and sudden shifts from suave charm to childish tantrums and sad desperate pleas for acceptance. It keeps you guessing about his grasp on his sanity and how it will affect those around him. It's a bit like listening to a piano player that occasionally and unexpectedly hits a wrong note while he plays, but it works. The films only other major role, that of Danny, is not nearly as meaty. Kinnear turns in a solid if unspectacular performance as a regular Joe with a regular Joe life and problems.

The film doesn't really have any huge shocks or M Night Shyamalan twists, but I wasn't able to guess the ending and it felt satisfying. It doesn't have any deep philosophical or spiritual insights and yet it felt very human. And it didn't have any heart pounding car chases or gun battles and yet I thought the pacing was well done and I was never bored. Maybe the only real message here is about the human need to reach out and make connections with one another, and how those needs have no moral prerequisites. Even a murderer needs friends, and even good people can be friends with bad people. It's a comment on the strange, random world we live in. A good film; worth seeing.", "y": 1}, {"x": "When this film was originally released it was promoted with the notably unimaginative tagline \"Dirty Harry is at it again\". Whatever this pitch lacks in originality is more than compensated for by it's complete and total accuracy. \"Sudden Impact\" retains all the aspects that made the previous three Dirty Harry movies so successful- tight pacing, a compelling plot, strong supporting characters, endless gunplay, and bone-dry humor. Some of these elements are not only retained but amplified- this is easily the darkest, bloodiest, and most overtly right-wing installment of the franchise.

The plot is somewhat intriguing: after killing a ridiculous number of hoodlums, Inspector Callahan is sent on a forced \"vacation\" by his superiors to the sleepy coastal town of San Paolo. He is tasked to investigate the background of a recent homicide victim who was shot in the genitals before being put out of his (no doubt considerable) misery by a second shot to the head. Early on in the film, the audience is made aware of the identity of the killer- an artist named Jennifer Spencer (Sondra Locke) who is hunting down the thugs who gang-raped her and her sister at a fun fair some ten years earlier. This incident is shown in a very disturbing flashback, snippets of which recur before each new murder. As more bodies start to appear with the same M.O, it becomes clear to Harry that both the local police chief and his new love interest (guess who?) know more than they are telling. To make matters even more complicated, the one-time rapists realize who is hunting them and start to hit back hard.

\"Sudden Impact\" offers relentless action from beginning to end. Clint Eastwood directed this film himself and expertly handles a series of set pieces that culminate in an exhilarating climax. Sondra Locke's performance effectively conveys the blend of ruthlessness and fragility that define her character. That having been said, it is fair to wonder if another actress (who was not Eastwood's off-screen companion at the time) could have brought more charisma and dramatic weight to the role- Theresa Russell and Cybill Shepherd jump to mind as possible candidates. Members of the supporting cast that punch significantly above their weight include Albert Popwell as Harry's partner Horace, Paul Drake as the psychopathic Mick, and the truly scene-stealing Audrie J. Neenan who portrays the vicious Ray Parkins.

However the film has some notable problems- some of the subplots (the animosity between Harry and a gang of twentysomething hoodlums, a Mob vendetta against him) take up too much screen time and don't really have any bearing to the larger story. Their only real use is to raise the body-count to absurd levels. In the first half of the film it sometimes appears that Dirty Harry shoots people more often than he has to use the restroom. However the film moves into top gear as it progresses and the triangulated cat-and-mouse game between Callahan, Spencer, and her former tormentors assumes prominence. This second hour makes it clear that a more stripped-down and slightly refocused screenplay would have given \"Sudden Impact\" the potential to be a first-class, neo noir-style thriller that could have taken the series to new levels but still have contained more than enough .44 magnum heroics to satisfy the Harry loyalists. Instead we get the film that Eastwood and Warner Bros. clearly wanted to make- a superbly executed but prototypical Eighties action flick that mostly declines to particularly challenge the intelligence of it's intended audience.

This was by far the biggest grossing of the series at the box-office and it is not hard to see why. Though not the film that it could have been, this is still big, trigger-happy fun. Even after repeated viewings, it's going to make your day.", "y": 1}, {"x": "This show is awesome! and I've seen it about 6 times.

Granted it may be lacking in educational content as some people like those sort of movies, but I think it's great, very funny and excellently written!", "y": 1}, {"x": "This movie is a Gem because it moves with soft, but firm resolution.

I caution viewers that although it is billed as a Corporate Spy thriller and Ms Liu is there, it moves at a deftly purposeful yet sedate pace. It's NOT about explosions, car chases, or flying bullets. You must be patient and instead, note the details here. It's sedate because that's what the Main Character is. The viewer has to WATCH him and Think as this story unfolds.

I will not give spoilers-- because that destroys the point of watching. The plot is what you've read from the other postings: an average white-collar guy, seeking change and adventure, signs on for a corporate spy job. Just go somewhere and secretly record and transmit inside data.

Take it from there.

This movie starts at a surreal walk-- with a background tang of corporate disillusionment that entwines itself with quintessential, underlying suburban paranoia.

Then it begins to accelerate.

The acting on all parts is superb-- and yes, some of the acts are caricature characters. But they all fit, and they entertain. And the light piano rhyme in the background is just perfect as the soft, soft key sinister theme: All is not right at the beginning.

And at the end: All is not what it seems.

Get comfortable and turn the lights down to watch this one-- and turn up the sound: This movie wants you to LISTEN.", "y": 1}, {"x": "Richard Linklater's beautifully directed mixture of youthful romance and Paris travelogue is one of the 90's best thinking person's romantic movies. Julie Delpy turns in one of the decade's most engaging performances as the Parisian lass who spends a day with stranger-on-a-train Ethan Hawke. The dialogue (and there is oodles of it) is sometimes meandering and overly precious, but this portrait of two young wannabe-lovers making a romantic, intellectual, and spiritual connection to one another is full of wonderfully amusing, touching and insightful moments.", "y": 1}, {"x": "This has to be one of the worst films of the 1990s. When my friends & I were watching this film (being the target audience it was aimed at) we just sat & watched the first half an hour with our jaws touching the floor at how bad it really was. The rest of the time, everyone else in the theatre just started talking to each other, leaving or generally crying into their popcorn that they actually paid money they had earnt working to watch this feeble excuse for a film. It must have looked like a great idea on paper, but on film it looks like no-one in the film has a clue what is going on. Crap acting, crap costumes. I can't get across how embarrasing this is to watch. Save yourself an hour & a bit of your life.........", "y": 0}, {"x": "Hitokiri (which translates roughly as \"assassination\"), a/k/a \"Tenchu\" which translates roughly as \"divine punishment\") showcases Hideo Gosha at the top of his form. Do NOT miss this one, or Gosha's other classic, Goyokin! Hitokiri is not only one of Gosha's best films, it's one of the best \"samurai/chambara\" films ever made, and perhaps one of the best Japanese films ever exported.

Be warned, all of the intricate plot details in Hitokiri can be a little hard to follow for those unfamiliar with 19th century Japanese history. Even so, the underlying human drama is obvious and open to all viewers. As per the norm for Gosha, Hitokiri provides yet another variation on his traditional theme of \"loyalty to one's lord\" vs. \"doing the right thing\". However, Gosha develops his favorite theme with such sophistication, that it's really _the_ movie to see (along with Goyokin, of course).

I suppose it breaks down like this: If you want a simpler, more action-oriented tale, you might want to see Goyokin. However, if you want a more thoughtful, multilayered (albeit grim) drama, see this one.

(OK, OK, essentially, the historical backdrop is a massive power grap between many different samurai clans who are either (1) working to reform, yet retain, the Tokugawa Shogunate, and (2) those who are trying to install the Emperor Meiji as the supreme ruler of Japan. Of course, those clans working \"for\" Emperor Meiji were often less interested in \"reforming\" Japan than in ensuring their own clan more power in the \"new world order\". Ironically, the entire feudal system was officially abolished as one of the first reforms of the Meiji government. It's ironic twists like this -- Gosha's big on irony -- that make the entire plot all the more bittersweet.)

What distinguishes \"Hitokiri\" from Gosha's other movies is Gosha's mature sense of cinematography. Every shot is thoughtfully composed, and (much like Kubrick's Barry Lyndon) each frame of the movie could hold its own as a still composition. Of course, this is typical Gosha. Hitokiri really stands out with stunning backdrops, including(as with Goyokin) many riveting seascapes. Just watch the opening sequence, and you're hooked! Make no mistake, this is no English period piece: Hitokiri is extremely violent (don't say you weren't warned).

What else, other than cool camera work, makes Hitokiri stand out? The performances seem (to me) a bit more subtle in this one. Katsu Shintaro (of Zatoichi/Hanzo the Razor fame) turns in a star performance as the conflicted protagonist/antihero, Okada Izo. Katsu manages to instill humanity to a character that seems almost more wild animal than villain. Throughout the movie, you're never quite sure if you're engaged or revolted by Okada's character. At the same time, Katsu's portrayal of Okada's ravenous hunger for respect, and his later pathetic attempts at redemption, seem so human that you can't help but feel empathy/sympathy. Of course, after seeing Nakadai Tatsuya play the tortured hero in \"Goyokin\", it's great to see him play such a ruthless villain in \"Hitokiri\". He's just perfect, there's nothing more to say!

As a final note, perhaps more interesting to buffs than to casual fans, don't miss the last screen appearance of Mishima Yukio (yes, the closeted gay right-wing ultranationalist novelist who committed suicide by seppuku before the crowd of jeering Japanese military personnel he \"kidnapped\" in 1970, and had a movie on his life and work made by Paul Schrader), who actually does a pretty solid job of portraying the honorable (for an assassin) Shinbei Tanaka.", "y": 1}, {"x": "This is an important film. It challenges the viewer and encourages you to pay attention. There's a lot to like here. The director seems interested in taking apart some of the more tired cinematic conventions. Unlike a lot of recent American cinema, this film takes an interest in what it means to make a movie in the first place. The DVD includes a lot of bonus features, and there are two commentaries that explain the movie for the viewers still befuddled after an initial viewing. When the film screened at Sundance, it made more than a few audience members uncomfortable and angry. This is a Sunday morning coffee movie, not a Friday night party movie. For the dedicated viewer, it's a treasure trove.", "y": 1}, {"x": "I usually come on this website prior to going to the movies, as I like to see what other people think of the movie. I read many reviews which said 'thriller not a horror movie'. This prompted me to give this film a try. I really must take issue with these 'thriller/horror' statements, as it was neither! I almost went and asked for my money back, and if you lot of reviewers enjoyed this rubbish....well you must be easily pleased! At the end of the movie, the people behind me said out loud \"what a waste of time\" and I turned to them and replied \" I couldn't have summed it up better\". I kept waiting for something to happen...but it didn't. There was the potential for a lot of good scares (or thrills if you like) but none happened. Williams acted the part quite well but I felt he was short changed by a poor script which dithered around and went nowhere. Save your money folks, this is a turkey which will be featuring at a DVD store 'bargain box' near you in the very foreseeable future!", "y": 0}, {"x": "Series 2 has got off to a great start! I don't think you need to have watched series 1 to get a grasp of whats happening but like any series its nice to feel some sense of the characters and to care about what happens to them. And this show makes you think like that! These 4 30-something women seem to lead glamorous and exciting lives yet the premise is believable and realistic. So the twists and turns that arrive thanks to their love and sex lives are exciting to watch but you also know that these are problems that happen to real women too. Its about the decisions we make as women and how sometimes we are led down certain paths in our lives rather than consciously making those choices!", "y": 1}, {"x": "Wow I loved this movie! It is about normal life in a small village. About hypocrisy and honesty, love and surrender. Great! It is about things everybody encounters in life. You have to do things with passion. But some people will not appreciate your passion and will try to stop you. There are people who find the opinion of others and 'what will the neighbors think' more important than to follow their heart. Don't let anybody's opinion stop you from fulfilling your dreams and passion. I loved the fact that the actors were all really normal people, it could have been my family. No big beauties, but all people you fall in love with during the movie.", "y": 1}, {"x": "i say the domino principle is an enormously underappreciated film.anyone who has taken the time to investigate our contemporary history of conspiracies;jfk, rfk, mlk,g.wallace and in fact numerous others can only draw the conclusion that the author of the domino principle really knew what he was talking about.roy tucker could be lee harvey oswald or james earl ray or sirhan sirhan or arthur bremer maybe even john hinkley or timothy mcveigh.to mention a few.the conspiracy scenario involving spies, big business and political assassinations is not really a fiction but an ominous part of our convoluted existential history.god help us,but the domino principle is more fact than fantasy.if this causes a little loss of sleep, maybe it should.don't take my word for it,investigate for yourselves.", "y": 1}, {"x": "This clunker of a film sets a new standard for bad filmmaking. Jared Rushton gives an adequate performance of a very poorly-created character in an ill-fated movie, thereby creating a net effect of a very bad movie. The film's main thrust is how a boy's temporary excursion into the Canadian wilderness after surviving a plane crash solo allows the disgruntled adolescent to deal with his anguish over discovering his mother's extramarital affair. Unfortunately it turns into a bizarre collage of random \"survival events\" (including two especially hokey scenes involving fighting a bear) and strange hallucinations that make you wonder if this kid isn't just sitting in an alley somewhere on pot dreaming up this whole movie (and what a nightmare it is!). Furthermore, despite the heralds of some reviewers of the family viewability of the film, there are several scenes not suitable for very young children or family viewing, including a graphic scene of the dead pilot underwater with one of his eyes apparently exploded.

All in all, a terrible movie that nobody should be subjected to, much less innocent kids.", "y": 0}, {"x": "This film has special effects which for it's time are very impressive. Some if it is easily explainable with the scenes played backwards but the overlay of moving images on an object on film is surprisingly well done given that this film was made more than 94 years ago.", "y": 1}, {"x": "Being that this movie has a lot of fine entertainment qualities I think it should some more credit than it has been given on imdb.

It's your basic 'who done it?' thriller with sex and murder but it keeps you guessing right to the end. I like these kinds of movies and I certainly think this one meets the standard.

To me it was worth watching more than once so I'll give it an 8 on imdb.", "y": 1}, {"x": "I can't say this is the worst movie ever made, but personally I think of it that way because when it was originally released in theaters, (1) the initial buzz was positive enough that my girlfriend insisted we go see it, and we actually STOOD IN LINE to get tickets, and (2) it's still the only \"serious\" film I recall where the audience started snickering at a certain point and basically laughed at the movie the rest of the way through. Once we reached the infamous (and interminable) snake fight scene, I think everyone gave up.

The only positive I can concede is the lush location shooting. Oh, and there's also Bo's breasts, although her acting is so wooden that the nudity is unerotic and doesn't rate much more than a Playboy pictorial.

The \"dramatic tension\" in this film is between Bo's terrible acting and her husband's horrible direction. The snake fight has to be one of the most incompetent \"action\" sequences ever filmed. However, this is one of those films that's bad enough, it may be worth watching on the level of unintentional humor. Definitely the worst film I ever paid to see.", "y": 0}, {"x": "I have never commented on a film before. I watched this movie with my girlfriend last night. I've read comments saying this movie stays with you. It does. It's been almost 24 hours and I am still completely affected. This movie left me questioning my own self. How can I possibly compare myself to a character such as Ben who is totally selfless. I loved this movie. I love movies that keep me guessing and wondering until the end. I feel two emotions predominantly, happiness and sadness. An amazing feel good movie and a very sad one too. I so wanted Ben and Emily to be together, but in the end, they were, forever. If you haven't seen this movie, get it and watch it. Just make sure you have no distractions. You'll want to see every nuance in this picture. One for my library.", "y": 1}, {"x": "Blonde and Blonder was unfunny.Basically, it was a rip-off girl version of Dumb and Dumber, but less funny, and they used too much background noises and music.WAY TOO MUCH BACKGROUND NOISES AND MUSIC IF YOU ASK ME!!!!It starts out immensely boring, and TOTALLY inane.It doesn't pick up pace anywhere soon, and I was feeling more frustrated as this nonsense carried on.Maybe, the only thing that saved me from giving this movie a 1 was the last 30 minutes.I found it somewhat entertaining and interesting as it neared the end, but that was the only part.Also, I couldn't help but like Pamela Anderson and Denise Richard's characters a little.Even though this movie didn't get any laughs from me, it kept my attention.I wouldn't say to completely avoid this movie, but there are thousands of better films for you to spend your time and money on than Blonde and Blonder.", "y": 0}, {"x": "Horrible acting, Bad story line, cheesy makeup, and this is just the tip of the iceberg. I have never seen a worse movie in my life, 5 minutes in I decided to fast forward to see if anything redeeming would happen... It didn't. (Aside from a nice breast shot) The movie apparently was filmed in some furniture warehouse, and the same warehouse was used for at least 90% of the sets. You even see this same red chair in several different \"locations\" If you are going to make a film at least rent an office building and an apartment, not some warehouse which will echo all your actor's dialog.. (Note to producers) Renting a small office space and an apartment for a month is much cheaper than an entire warehouse, and both are quite a bit more versatile and believable) If you spend your money to rent this people I hope you got it with a return guarantee... You will be demanding your money back... I only spent $2.99 to rent this tonight and I feel ripped off.", "y": 0}, {"x": "When Philo Vance (Edmund Lowe) is standing precariously on the edge of a balcony high above the city, apparently hypnotized and just about to step to his death,it immediately reminded me of a nearly identical scene in another film made nine years later, \"The Woman in Green\" in which Sherlock Holmes (Basil Rathbone)is similarly about to hurl himself into space while being hypnotized.

Happily, both Philo Vance and Sherlock Holmes survive these attempts at murder by unscrupulous criminals. Exciting cinematic suspense in both these scenes. When will they learn you can't cloud the minds of great fictional detectives ?", "y": 1}, {"x": "And how many actors can he get to stand in for his own neurotic, compulsive uber-New Yorker persona? In this film Woody is played by Will Ferrell in what is mercifully less a direct impersonation than the one Kenneth Branagh did in \"Celebrity.\" It's an annoyingly repetitive story now: nebbishy, neurotic man with a wife or girlfriend falls madly in love with a shiksa queen upon which he projects all manner of perfection. Everyone lives in perfect gigantic apartments in great Manhattan neighborhoods, everyone constantly patronizes expensive, exclusive restaurants during which all the characters relate fascinating anecdotes and discuss arcane philosophy, there is always a trip to the Hamptons during which the nebbishy main character spazzes out about sand and physical exertion and possible exposure to diseases, and then of course, said main character feels guilty about his lust for the shiksa queen but pursues her anyway, sometimes succeeding, sometimes failing, etc.

This a tired formula, and proof that Allen isn't really a great film artist at all. He just seems like a dirty old man with the libido and emotions of a 20-year-old who is intent upon telling the same boring old stories again and again.", "y": 0}, {"x": "After reading all of the rave reviews about this film and a few that give it a so-so. I finally decided to throw in my no cents worth. I agree with most on the point that if it hadn't been for Lauren Lewis and Chris Ferry it would have been a disaster. Filmed in Mariette OH. just north of Dogpatch where all the real talent fled south down I-77 years ago, at least as far as a tank of gas would allow. I did get a chuckle from reviewers who subtly claim that they cerebrate a little better than most by claiming they followed the plot without an inkling of confusion. This wee tale by the Brothers Crook is like an old record with a skip in it. As an American I understand the difficulties Ind film artists have to face. A trip to Romania would have wiped out the budget for sure. Lets face it this whole film was a loop de loop of Claire in the gas station, Claire on the side of the road, Claire under the bleachers, Claire in the house, Claire in the cornfield, Claire at school. Claire here and Claire there. It almost became monotonous and would have if she had not been the best actor in the cast. Josh and Jeff have to make a living but don't write a two page script and turn it into an hour,twenty flick. Before writing another screenplay about dreaming ghosts watch an episode or two of Ghost Whisperer or something and get a little background. All of the cast except the above mentioned and a couple of others were engaged in their first and last film. Also, there is an appearance by co-director Jeff as he is in all his films. Just like Alfred Hitchcock, eh? One thing the film had going for it is that the cameraman seemed to have a fixation on Lauren Lewis' derri\u00e8re. Well, with all sarcasm now satisfied I still recommend the film for the horror buff just to see this young actress in the formative time of her career (I hope)and that Chris Ferry has established himself as a villain worth watching.", "y": 0}, {"x": "The movie has one nude scene: A man sitting on the edge of the bed, with his exposed genitals smack dab in the middle of the screen. It is quite a long scene. What was the point? I almost think it was meant to be funny but we were watching it with my mother and it wasn't funny to have THAT staring at us for what seemed like a full minute.

The movie is cold. None of the characters are even likeable. Audrey Tatou is cute, of course, but her character is an unhappy girl.

I really would not recommend this movie. I had expected it to be charming and fresh but it was depressing. I wondered if the director was from a very upper crust, educated French family and he looks down on these characters.

", "y": 0}, {"x": "I really can't believe this movie is not in the IMDB worst 250, it is absolutely terrible. When I originally saw it I remember talking about it in a college class and two other people had also seen it. We were all telling other class members not to see it because it was so horrible. By the time we were done some others wanted to see it just because they could not believe anything was as bad as we were saying it was. Don't be like them, just pass this by. I'm sure everyone involved with this movie would also prefer you never see them in this movie.", "y": 0}, {"x": "Corny! I love it! Corny - just as the TV show was about 40 years ago! Adam and Burt rekindle the same on-screen chemistry that never seems to have left! They re-live old memories, plus the actors that play them from the 1960s show some behind-the-scenes things which are quite interesting to know. 1960s TV was corny escapism for so many of us back then, and this DVD is no exception, if you are familiar with the original TV show. The fight scene with the written Boofs and Bams or whatever is fantastic!! The movie theater scene shows clips of the villains who passed away. At the end Frank Gorshin makes an appearance. He passed away not too long after this DVD was made, I believe, so it is to his great credit that he came back to again play a villain to Adam and Burt, just as he did to Batman & Robin so many years ago. He didn't lose his touch! Thanks to Julie Newmar to re-living a villain role, also. In conclusion I think that this DVD is for great memories, and I wish to thank both Adam and Burt for coming back and recreating these memories for those of us who remember the original-!!! Thanks, Guys!!!", "y": 1}, {"x": "This movie displayed more racial hatred of Jews by David Mamet than I have

have ever encountered in an American film. The sterotypes are so over the top that my ability to continue watching died. I was so disappointed at Joe

Mantegna calling a bunch of men ,sitting in a New York Jewish center cleaning weapons ,heros that common sense prevailed and I stopped. I am deeply

disturbed at the concept that Jews are not Americans and \"different\". I suggest that Mr. Mamet is one of the causes of hatred not a healer of same.", "y": 0}, {"x": "I had recently been watching Johnny Test in an attempt to find humor in it. I failed, horribly. Cartoon Network usually has a tendency to make their shows enjoyable by all audiences, but Johnny Test is \"entertainment\" in it's lowest form. The writing is incredibly predictable, and the running gags aren't much gags at all. Kids will love it, and that's about it.

Now, this isn't to say that it's all bad. The original opening theme was actually pretty catchy, but for some reason they took the skeleton of it and figuratively smashed it with a figurative aluminum bat. It's a shame, because that was really one of the best things it had going for it.

Some of the characters could be very interesting, in theory. With a little work, the characters could work well together, but they're too one-dimensional. Then again, this makes it easy for the kids to follow.

The pace is a bit too fast as well. The episodes are too busy, leaving little time for clever writing. This is a real shame, because there are so many interesting concepts that the show brings forth. On the upside, however, the fast pace will stop the kids from losing interest, and that's really the entirety of the target audience.

Overall, the show looks very good on paper, but just doesn't succeed in being funny or interesting. This is a show I want to like, but I'm incapable of it. There's just so much potential that isn't realized. Kids will enjoy it, but that's about it.", "y": 0}, {"x": "Ok, so it's not a masterpiece like the Godfather, but it doesn't have to be. The only purpose this movie has is to make the viewer laugh several times. If it can make the viewer laugh a bunch of times, it has accomplished its purpose. I laughed out loud and left with a smile. I feel like I got my money's worth.", "y": 1}, {"x": "The first movie is pretty good. This one is pretty bad.

Recycles a lot of footage (including the opening credits and end title) from Criminally Insane. The new footage, shot on video, really sticks out as poorly done. Scenes lack proper lighting, the sound is sometimes nearly inaudible, there's even video glitches like the picture rolling and so on.

Like all bad sequels, it basically just repeats the story of the first one. Ethel kills everybody who shares her living space, often for reasons having to do with them getting in the way of food she wants.

At least it is only an extra on the DVD for the first one, which also includes the same director's film Satan's Black Wedding. Too bad it doesn't include the Death Nurse movies though.", "y": 0}, {"x": "The first and only time I saw the woman in black was I think the only time to my knowledge it appeared on TV back in 1989. It was Christmas eve and my father and i were watching it in the living room shortly before we all went to a midnight service in the village church. I was quite young at the time but i'm not sure who was more terrified walking through the church yard to the entrance of the church that night me or my father!.

There are many factors about this film that make it so creepy but i think 0ne of them is the fact that there's not much in the way of a sound track that plays in the background of nearly every Hollywood movie, so every creak, thump and bang is more amplified in your head as there's no distraction. Another factor that makes it different from other ghost stories there's no jump factor involved like things bouncing out the closet so it makes it not necessarily what you see but what you hear and what you think is going on. This is a clever medium as nothing scares you more than your own mind running riot thinking whats around the corner or behind the door!

A superb ghost story, I've never seen anything that can match it and with all the dross thats repeated over and over on TV i cant believe the BBC has deleted it after (to my knowledge) only one showing!", "y": 1}, {"x": "A good film, and one I'll watch a number of times. Rich (the previous commenter)is right: there is much more going on here than is clear from the title boards, and I have to wonder how much has suffered in translation. Were there more in the original? Or was a native-language audience expected to lip-read more? Or -- since the screenplay was written by the author of the novel on which this was based -- was this a currently popular story with which the audience was already very familiar? In short, very worth a look, but it probably requires more work from contemporary viewers than the original 1913 audience had to put into it.

The Alpha Video release touts the new organ score, but the music is not matched to the story progression in any way. Sure, it starts promisingly, but degenerates into a repetitive, Phillip-Glass-like monotony that reflects nothing of the action on the screen. After listening for a while, I turned off the sound and simply watched: much better!", "y": 1}, {"x": "This picture seemed way to slanted, it's almost as bad as the drum beating of the right wing kooks who say everything is rosy in Iraq. It paints a picture so unredeemable that I can't help but wonder about it's legitimacy and bias. Also it seemed to meander from being about the murderous carnage of our troops to the lack of health care in the states for PTSD. To me the subject matter seemed confused, it only cared about portraying the military in a bad light, as A) an organzation that uses mind control to turn ordinary peace loving civilians into baby killers and B) an organization that once having used and spent the bodies of it's soldiers then discards them to the despotic bureacracy of the V.A. This is a legitimate argument, but felt off topic for me, almost like a movie in and of itself. I felt that \"The War Tapes\" and \"Blood of my Brother\" were much more fair and let the viewer draw some conclusions of their own rather than be beaten over the head with the film makers viewpoint. F-", "y": 0}, {"x": "It is a well known fact that when Gene Roddenberry first pitched Star Trek to NBC, the original pilot episode, The Cage, was rejected for being \"too cerebral\". When the series was given another chance, Roddenberry thought it would be fun to establish the events of the rejected episode as canon, and did so by writing The Menagerie, which has the unique distinction of being the sequel to what was still, at the time, an unaired episode.

This time, rather than exploring a new planet, Kirk and his crew are on Starbase 11, paying a visit to the former commander of the Enterprise, Christopher Pike (Sean Kenney), now horribly disfigured and paralyzed because of an accident. Pike joins his successor on the starship, where an unpleasant surprise awaits: Spock, who used to serve under Pike, has effectively hijacked the vessel and set the course for Talos IV, a planet which is off-limits (the punishment is death) since Pike and Spock's last visit there, 13 years earlier. Naturally, being a logical creature, Spock turns himself in and arranges a court-martial so that he can justify his actions.

There's no need to say more about the plot, since the rest will play out in Part 2. What really impresses is how Roddenberry creates the connection between The Cage and the rest of the Star Trek universe, by coming up with a particular type of flashback (to say more would be too much) that allows everyone, on screen and off, to see what could have been of Trek, had NBC not turned down the original project. In particular, it's fun to see Jeffrey Hunter (who was unable to return in The Menagerie) play Pike as a more serious captain than Kirk usually is and Nimoy's early days as Spock, whose personality hadn't been fully established yet: this is the only time in the entire series that everybody's favorite Vulcan spontaneously grins.

In short, not just a great \"mystery\" episode, but also a treat for those who can't be bothered to track down The Cage in its original form (it's available as part of the Season 3 box set).", "y": 1}, {"x": "This movie is an awesome non-stop laugh riot incorporating all the usual ingredients of a Dawid Dhawan comedy - bumbling heroes , buffoonish supporting characters , made-up dolls for heroines , nasty villains , wisecracks , rocking soundtrack + choreography and a little dose of action .

Amitabh Bachchan and Govinda both are in double roles of policemen and conmen . The heroine of Amitabh the cop is Ramya Krishnan and Raveena is opposite Govinda the cop . Heroines are mere rouge-smothered props as usual . The conmen have no heroines . Paresh Rawal carries his villainous act in DAUD forward (He played a similar Don in KHOOBSURAT too) . Asrani shines in a brief role . He does a retake on his famous \"Angrezon ke zamaane ke Jailer\" act in SHOLAY .

Govinda is impeccable as usual - as a wisecracking , good-humoured policeman Pyaare Mohan and as a conman Chhote Miyaan . He imitates Bihari style of Hindi speaking with hilarious results . Amitabh Bachchan , believe it or not , pales in comparison with him . But still AB is fine . Madhuri Dixit does a cameo as herself in the song \"Makhna\" . She dances like wind .

Viju Shah's music is awesome . Check out \"Kisi Disco Mein Jaayen\" , \"Makhna\" and the title track .

Do not go looking for any LOGIC since it is a comedy and the screenplay is of convenience completely . Just Enjoy Yourself .", "y": 1}, {"x": "I saw this recently and I must say, I was moved by the factual basis of the story. However, \"Holly\" as a movie did not quite work. I am however, looking forward to watching the documentary which the producers who organised this project had made because I think that would be a much more compelling work than this film.

The international cast was composed of B-class actors but their acting was appropriate, and I must give a special mention for the young actress who played Holly. This was her first movie role and she did a very nice job, considering hers is the most challenging part.

Ron Livingston was adequate but bland as Patrick, the American whose quest is to \"save\" Holly, but Chris Penn was good in this, his final role. Unfortunately, despite my mostly favourable opinion of Virginie Ledoyen and Udo Kier, both of these actors were very much forgettable and did not do their best work in this film.

I believe in the film's message and intention, but I have to be fair, so I rate \"Holly\" 3 stars based on its shortcomings as a movie. But I think the subject matter deserves serious consideration and I am pleased that the people behind this movie have made a documentary as well which I hope will have its debut on BBC and other TV networks.", "y": 0}, {"x": "We've all seen this story a hundred times. You can see each plot turn coming a mile away. The relationship between the mother and daughter is way too sweet and understanding to pass for realistic. Janet Mcteer's performance is stock southern hot- ticket mother in vintage clothes. Should have been made for the Lifetime Channel.", "y": 0}, {"x": "This is a really nice and sweet movie that the entire family can enjoy. It's about two dogs and a cat who are taken away to live with someone else for a little while but the animals don't understand and they escape and go to find the family on their own. The cat is named Sassy and she lives up to her name. Chance is the younger dog who knows a lot about life on the inside of the pound. Shadow is the older and wiser dog who senses things. Put those three together on an adventure and it makes for a happy and fun filled time. There are no special effects of the mouths moving so it isn't cheesy at all. It's the best talking animal movie that I've seen so far. It's a really good movie for families.", "y": 1}, {"x": "What surprised me most about this film was the sheer audience it attracted. Similar films such as Anita and Me have never caused as much hype as this film has, though I think that's probably because of the mention of 'Beckham' in the title more than anything else.

It's a brilliant film putting across a brilliant message - you can do anything if you're determined enough, and put your mind to it, which is such a positive message to anyone watching this film.

I think this is one of Keira Knightley's better films, and I think she's a brilliant actress, and was excellent for the role. Parminder Nagra was brilliant too. Sadly, I can't say this for Jonathan Rhys-Meyers, because I don't think that he was that much of a good actor, and to be honest, his eyes were a little scary.

All in all, a brilliant film, and a brilliant story", "y": 1}, {"x": "Give me my money back! Give me my life back! Give me a bit of credit. This movie was vomit worthy. Useless and time consuming. What a waste of energy and totally pointless. Okay I understand the premise and the idea sound but, give us a break! Next time just give me the money and let me spend it. Lost child, mothers remorse, blamed husband! Clich\u00e9 yes~! Get a life! Sorry but this movie was a total waste of my time, my money and my being. I would rather watch eggs cook! No real explanation to why this happened. Prison? Why? Loss? obvious but Why? Acting deserves a What am I doing here Oscar and the cinematography a Am I just doing this for a Wage? How much did this movie make? Well this silly fool hired a copy. Enough said", "y": 0}, {"x": "I guess that everyone has to make a comeback at some point. And that's exactly what embarrassed Taft resident Jack Dundee (Robin Williams) intends to do in \"The Best of Times\". Yep, the man who went all crazy with the radio in \"Good Morning, Vietnam\" is playing football. In this case, he seeks to replay a game that cost his high school a prestigious title. But ex-teammate Reno Hightower (Kurt Russell) isn't just going to go along with it so easily.

Granted, it's not the best movie for either man. But Williams and Russell are actually a pretty good comedy team. And some of the names in this movie are likely to give you the giggles (to say the least). Check it out.", "y": 1}, {"x": "I LOVED this flick when it came out in the 80's and still do! I still quote classic lines like \"say it again\" and \"you said you'd rip my balls off sir\". Ron Leibman was hot and very funny! Although it was underrated and disowned by MAD, I have to say that this little gem will always be a treasure of mine and a movie that I would take with me if sent to a deserted island! I only wish that someone would release the DVD because my VHS tape is about worn out! If you like cheesed out comedy, this is definitely for you and should be considered a cult classic! It is military humor at it's best and worse! Rent it if you can't own it!", "y": 1}, {"x": "OK. There are people who should not see this movie.

1) Don't see it if you don't like satire or black humour. 2) Don't like it if you got offended by _The Watchmen_. 3) Don't see it if you want a serious superhero movie.

The rest of you, run, don't walk, to see _Mystery Men_. It's funny, it's quirky, it's a delightful sendup of every bad superhero cliche known to man. Occasional forays into junior-high humour don't ruin the tongue-in-cheek low-key fun of Jeanane Garafalo, Ben Stiller, and Hank Azaria, as well as a couple of amusing smaller parts by Geoffrey Rush and Greg Kinnear. (Good to see Louise Lasser getting work, too.) I laughed all the way through. Utterly unserious, somewhat weird, but -good-.", "y": 1}, {"x": "I'm not to keen on The Pallbearer, it's not too bad, but just very slow at the times. As the movie goes on, it gets a little more interesting, but nothing brilliant. I really like David Schwimmer and I think he's good here. I'm not a massive Gwyneth Paltrow fan, but I don't mind her sometimes and she's okay here. The Pallbearer is not a highly recommended movie, but if you like the leads then you might enjoy it.", "y": 0}, {"x": "Who me? No, I'm not kidding. That's what it really says on the video case.

Plot; short version: Pretty woman stands around smiling. This, for some reason, makes all men kill each other.

\"Find Ariel...Where's Ariel...Can't Find Ariel...\" She's right behind you, you idiot...

Most of what can be said about this horrendous little Space Opera has already been said, looks like.

A bunch of corny actors playing mostly convicts come in after the first selection of actors is knocked off very quickly. Then they get knocked off in the same way. Every scene is broadcast nearly fifteen minutes in advance. Perhaps it was a drawing of straws to see which actors had the most screen time and bigger pay check. The alien virus/hologram/VR witch/glitch seems physically powerless and doesn't do a thing. Why can't she just stay in the computer instead of doing her \"teleporting vampire\" routine? (Actually, it would've been more interesting if she had been a vampire, or doing more than just standing around looking at people, which is all she ever does. This is enough to make all the men kill each other. Go figure...)

This isn't really a space flick. There are far more shots of the old western trail, 1950's Easy Rider trail, Film noir's night club scene, even a jog on the beach in fantasy-land, none of which has any real depth or even makes any sense. The night club scene is in black and white, of course. Worked with \"The Wizard of Oz\". Doesn't work so well, here. This is probably a good thing, as those few shots they DO show of space are depressingly silly. You will probably cry during those moments, especially upon seeing that swirling \"space ship\", which looks about three inches long.

Nothing is felt for any of the characters, not because they are convicts or have no personality, but because they are in serious need of acting lessons, except for Billy Dee Williams who really does look depressed and at a loss, probably by being in this work...

This is one of those movies that, when viewed with friends, is going to cause some extremely \"loud\" silences, especially when the nerd throws out his attempt at comic one-liners (including the line about French-kissing a meteor...? Did I hear that right? Perhaps not...)

The original virtual reality girls get \"killed\", which means nothing, as they are not even real to begin with. Well, the other \"characters\" aren't, either, but that's beside the point. Haha.

What's kind of funny is that the scene that graces the video case is some sort of skull-horror-alien looking thing (green filter added on top of that, to give it more of a...uh...green look), which is actually the android after he gets killed and ultimately has nothing to do with anything else afoot.

Another odd deal I noticed. Whenever there is an explosion (at least on my cheap DVD copy), everything becomes highly pixelated. I don't mean a LITTLE pixelated, I mean HUGE blocks about 1/16th the size of the screen. Wow.", "y": 0}, {"x": "Platoon is to the Vietnam War as Rocky IV is to heavyweight championship boxing. Oliver Stone's story of the experience of a US Army platoon in Vietnam in 1968 is so overdone it's laughable. While most or all of the occurrences in Platoon did occur over the 10+ year span of US military involvement in Vietnam, to portray these things happening to one small group of men in such a short time frame (weeks) gives a horribly skewed picture of the war. In Platoon, the men of the platoon see all of the following in the course of a week or two: US soldiers murdering civilians, US Soldiers raping civilians, a US Sergeant murdering another US Sergeant, a US Private murdering a US Staff Sergeant, US soldiers killed/wounded by friendly fire, 90%+ killed or wounded in the platoon. For Stone to try to pass this film off as the typical experience of a US soldier in Vietnam is a disgrace. Two Vietnam War films I would recommend are We Were Soldiers (the TRUE story of arguably the worst battle for US soldiers in Vietnam) and HBO's A Bright Shining Lie.", "y": 0}, {"x": "This was the first of Panahi's films that I have seen, I saw it at Melbourne film festival. I was totally absorbed by the different characters that he creates and how differently they react and behave compared to Aussie kids and yet on other levels how similarly. I think perhaps if more people could see movies like this, they could see people as individuals and avoid racism that can often be fueled by the fear of the unknown. There are the obvious large political differences between Oz culture and Iranian culture, but I found the more subtle differences between the characters, that this film fleshes out so successfully on screen, extremely fascinating. There are idiosyncrasies in the characters that seem to me, so unique. I found it made the characters compelling viewing.", "y": 1}, {"x": "Hi, I'm a friend of werewolf movies, and when i saw the title of Darkwolf hitting the shelves i was like \"hmm, simple and nice name to it at least. Althou... i wonder why i haven't heard of it before.\"

First of all, the movie starts with tits. Lots of tits. Tits are pretty much all this movies budget went to. Who cares about a werewolf effect, just pay the actresses enough to get topless shots!

So, about the mysterious darkwolf character (a little spoilers ahead, but who really cares...) He's your average everyday biker. Not even super-tough looking, but like the old wise woman says in the movie \"he is far more powerful and dangerous than you've ever faced before.\" Just by describing her a tattooed biker-type of a guy. Pretty original. I even had look twice when they first used the \"red glowing eyes\" SPECIAL EFFECT! I mean my god, that \"lets-plant-red-dots-on-eyes-with-computer\" effect has been used since the seventies. It looks plain ugly here! And don't get me started with the werewolf 3D-CGI. As said before, like an bad and old video game.

And finally, as i do like werewolf films, like i said. They prettymuch always build a werewolf-legend of their own. Darkwolf does build the werewolfworld as well, about some silly legends of hybrid-werewolves and the ancient bloodline. BUT. It almost instantly after creating the rules of engagement \"the darkwolf kills anyone the girl has touched\" starts random-slashing. Which just doesn't make any sense, why even bother telling us the rules of killing, when they aren't even gonna play by them... Aplus the wolf-point-of-view shots are made with a sony handycam or something, filming mostly the floor and walls. Just add growling noises and you've got a super werewolf effect. The gore is partially OK. But when the wolf slashes everyone with an open hand, just by basically laying the hand on top of the victims, it just doesn't do the trick for me...

Truly, WHO gives money to make these heaps of junk straight-to-video horrortitles, they aren't even funny-kind of bad movies, just sad.", "y": 0}, {"x": "This is another North East Florida production, filmed mainly in and near by to Fernandina Beach and the Kingsley Plantation. I was rather surprised the company was able to take over the main street of Fernandina Beach as long as was necessary to achieve the street scenes. The film is pretty, and pretty bad. Tami Erin is cute, but overacts. Eileen Brennan overacts even more. Good for small kids, or for those who like fluff in large doses. A 4 from the Miller-Movies formula.", "y": 0}, {"x": "Space Camp is a pretty decent film. The plot is predictable, but the actors do a good job, and the special effects are decent for the time.

This film was originally released about the time of the shuttle disaster, and that really put a hamper on how popular it was.

The scene where the shuttle doors open in space is simply spectacular... on the big screen, that is... on a TV... it just looks average. I remember this scene in the theater. It made you feel like you were really up there.

This would be a good film to see on IMAX, but I'm sure that will never happen.", "y": 1}, {"x": "We have reached the ceiling of implausibility with this movie. Basically, Dinosaurs come aboard this ship piloted by some weird old fart named Neweyes(which I needed after I watched this movie). Apparently, Neweyes hears the wishes of children everywhere and decides that he should grant the wish of children that Dinosaurs be brought into modern times to be seen by everybody for shameless exploitation. The dinosaurs eat this stuff that makes them smarter(Too bad the screenwriters didn't have it). By the way, does it seem weird that out of ALL the wishes of the children in the world, Neweyes grants the wish of bringing Dinosaurs to modern times? Why not grant the wishes of kids to stop famine? Disease? War? I mean come on! Doesn't Neweyes have anything better to do with all this power he has??? Finally, when the Dinosaurs get to modern times they start singing, dancing and wrecking havoc(basically the kind of thing you might see on a bad LSD trip, I mean where else could you see a T-Rex playing golf and jumping on a balloon of Spider-man?). They end up in the circus and Neweyes Brother Screweyes(???) makes the kids that have befriended the dinosaurs sign a blank contract. Why? Why would kids sign a blank contract??? Screweyes says that if the dinosaurs take some...\"Brain-Drain\" That he will let the children go. The dinosaurs instead of tearing apart the evil Screweyes limb from limb, give in and agree to his terms. What?! This is stupid! They could have just menaced him, made him drop the contract, eaten it then walked off with the kids. I think the filmmakers were trying to show that violence is bad, which is a moot point when finally the dinosaurs escape and a bunch of crows envelop Screweyes and apparently completely eat him. Oh yeah, that's not violent at all! We're back makes no sense, it's not fun, it's goofy, it's stupid, poorly written and contains some of the biggest plot holes ever committed to film. Even for a kid's film... this is BAD.", "y": 0}, {"x": "I would not like to comment on how good the movie was or what were the flaws as I am not a professional film critic and I do not have enough knowledge of making movies. What i do know is that making this kind of a movie in your very first shot is a big achievement and I would like to congratulate the Director for that. However, in some reviews, that i have read, critics have complained that Hiralal's relationship with his brothers was not highlighted, and his siblings were completely erased from the story. Now i would really like to raise a point here that as the name of the movie suggests, it is not a movie about Hiralal's brothers, it is a movie on the relationship of Mahatma Gandhi and his son Hiralal Gandhi, nothing more nothing less. If we start complaining about some characters being kept out of action in the movie, it would be a bit unfair because these characters don't fit in the picture, no matter how relevant they were in real life. So i think it would be better if we stick to the main idea and stop satisfy a critic in ourselves.

Enjoy!!!!", "y": 1}, {"x": "86 wasted minutes of my life. I fell asleep the first time I attempted watching it, and I must say I'm not one to ever fall asleep in the cinema.

I have never seen such a pointless plot acted in such a stilted and forced manner, and can only surmise that the actors were as hard-up as the protagonist writer allegedly was in the film itself.

Everything in this dire adaptation is overacted. And if it isn't the wooden acting, almost as though you can see the teleprompter, then the set itself, which is overlit and interfering in utterly unnecessary ways, and overdressed to an unimaginable extent, is enough to put you off the entire farce.

As to the supposed shock of a detective under disguise, any person who does not see that - as well as the entire rest of this ludicrous plot - telegraphed light years in advance, should check their eyesight immediately.

Bad acting, and from two very decent actors, coupled with the hyper-coddled Branagh trademark overdirection, is enough to make you want to use real bullets rather than blanks yourself.

On top of it all, there is a completely risible undertone of homoerotica in this, heightened towards the end of it. All I can hope for is that this was such a flop that people shan't try to emulate this level of cinema ever again.", "y": 0}, {"x": "Mimicking its long title the movie finds ways to come close to the 90' mark. The beautiful sets are here with all that made the Hamer production values a trademark, yet Paris drowned in the fog is a sign of indolent neglect. The story is obvious and can be summed up in a dozen words so there comes nothing unexpected and nothing worth more than 5% of your attention to be expected.

The directing is heavy as a direct transfer from the stage play, actors are mostly stiff as wax figures (ok this is a Hamer feature, only it's sometimes better featured in the whole package). My conclusion: this movie is trash, not worth the time I spend that evening. Eternal life is a boring matter and I should have hoped the guys in charge of programming at the Cinemath\u00e8que would have known better.", "y": 0}, {"x": "Yes, CHUNKY, this is the nick-name that Donna Reeds' romantic lead played by Tom Drake tags her with! So lets get this clear right away. From her first ing\u00e9nue role in THE GET-AWAY (1941) too her last, DALLAS (1984-1985) Ms. Reed could NEVER be described as CHUNKY. Not this attractive and slim actress. Whose roles at M.G.M. seldom lived up to her talents.

Ms. Reed is supported by a cast of competent character actors, who unfortunately must flounder through this alleged 'screw-ball' comedy. Clearly M.G.M. was out of their depth making this type of film. A type better produced over at COLUMBIA, PARAMOUNT, RKO and even UNIVERSAL. Neither the 'touch' of Ernst Lubitsch nor the wit of Preston Sturges could save this film. A rather conventional romantic comedy that had all the markings of a pre-war (WWII) effort.

If Irving Thalberg had still been alive the screen-play would have either gone through a significant rewrite or never seen the light of day. It did fit into Louis B. Mayer's 'safe-zone' of none challenging family entertainment. A form that could not stand up to the post-war challenges of the 'DeHavilland Decision', loss of their theater chains, television and would contribute to M.G.M.s decline. Fortunetly for Donna Reed her best days are ahead of her culminating in FROM HERE TO ETERNITY (1953) and her Oscar win as Best Supporting Actress.", "y": 0}, {"x": "A classy film pulled in 2 directions. To its advantage it is directed by Wes Craven. On the downside the TV film budget shows what could have been so much more with a larger budget. It moves along as Susan Lucci draws Robert Urichfamily into her clutches and trying to persuade him into the secret of her health club. His latest invention, a spacesuit which can analyse people or things becomes unexpectedly useful in his new neighbourhood. Anyone seeing this should pay attention to Susan Lucci. Her looks and performance had an unexpected repercussions a few years later. The actor, scientist and parapsychologist Stephen Armourae is a fan of this film and wrote a review of this film. Lucci became subject of a portrait by him followed as the basis for works of a sitter called Catherine. Lucci and Barbara Steele's portrait in 'Black Sunday' were used as references for the Catherine portraits which were immediately withdrawn by Armourae. Probably due to a personal nature between the artist and Catherine. So by seeing both films we can get an insight into another story and the appearance of unknown woman that would make an interesting film.", "y": 1}, {"x": "This Was One Scary Movie.

Brad Pitt Deserved an Oscar for this.

A traveling novelist (played by David Duchovny of the X-Files fame) and his girlfriend pick up two hitch-hikers(Juliette Lewis and Brad Pitt) on their way to California.

On their way they stop at infamous serial killer murder scenes to photography the scenes for an upcoming book Duchovny's character is working on, little do they know that the most disturbed serial killer in the history of the country is sitting right next to them in the same car.", "y": 1}, {"x": "The only show I have watched since 90210! Why did they discontinue it? It was the only show that captured the essence of Hawaii and made you feel like you are a part of it all! The least they should do is release it on DVD!

I checked out similar shows, but nothing has come close. The cast had incredible chemistry and I looked forward to each episode with much anticipation.

They made a big mistake by pulling that show. If anyone has any info regarding where I can obtain a DVD of North Shore please post a few lines here. Thanks! Aloha!", "y": 1}, {"x": "A vastly underrated black comedy, the finest in a series of grand guignol movies to follow 'Baby Jane'. Reynolds and Winters are mothers of young convicted murderers (a nod to 'Compulsion') who run away to hide in Hollywood. They run a school for would-be movie tots, a bunch of hilariously untalented kids attended by awful stage moms. Debbie, in her blonde wig ('I'm a Harlow, you're more a Marion Davies' she tells Winters) leads the tots at their concert and wins a rich dad, Weaver. She also does a deliciously funny tango and, over all, gives an outstanding performance, unlike anything she'd done before. The atmosphere is a fine mix of comic and eerie. It looks wonderful with great period detail (30's). Lots of lovely swipes at Hollywood and the terrifying movie tot. Micheal MacLiammoir has a ball as the drama coach: 'Hamilton Starr', he purrs, 'two r's but prophetic nonetheless'. See it and love it.", "y": 1}, {"x": "There is a lot of obvious hype associated with this film. Let's just face it, though, the main reasons why anyone would watch it would be for Leo and Cate, who are not necessarily the best actors in this film. I'm not saying they're not good actors, I'm saying they stunk in this film. The special effects were decent (and I will say the film makers did a good job making the ship eye-pleasing), but IT even has several major flaws. For instance, right before the ship goes under, you can see an unfinished blue-screen image behind your main characters.

Don't get me wrong, I LOVE the story of the REAL Titanic, but I find this movie an insult to that story. Editing was atrocious--there's no reason for any film to be over 2 1/2 hours (with the exception of MAYBE a biographical movie), and the writing and screenplay was horribly stilted.

I will say that the music was perhaps better than I could have predicted (and not just the \"My Heart Will Go On\" song either). There is one scene that stands out to me when the ship is sinking and pounding bass music is heard. That could very well be the highlight of the film. As for the mood throughout, it was extremely dull. I was more relieved than sad when Jack died, which I know cannot be what the director intended.

In a nut shell, I find it horrible that they turned the beautiful story of the Titanic into an over-hyped chick flick.", "y": 0}, {"x": "Don't believe all of the negative reviews this movie receives. Yes, it is cheaply made. Yes, the gore is laughable. And, yes, the acting is sub-par. However, this is a textbook example of an early slasher flick, and if that is your \"thing\" (its mine!) then you will enjoy this one. There are enough good aspects to this movie to more than compensate for the drawbacks. For one, the score by a then unknown Christopher Young is very creepy and accents the violence perfectly. The ending is a welcomed break from the predictable upbeat endings of most movies. And last, but not least, the setting is what made the film for me. The makers of this film could have done a much better job \"dressing\" the set to make it more believable as a college dorm. However, if you can overlook this flaw, the setting is great. Four collegiates all alone in a huge, abandoned, condemned building just waiting to be torn down.... it reaks of possibility. When watching, allow your imagination to do some of the work and you may enjoy this film as much as I did.", "y": 1}, {"x": "The real story (took place in Kansas in 1959) of a murder (Perry and Dick, two ex-convicts who broke into a remote house on a rainy night to steal and kill everyone they met). Richard Brooks directed the chilling and disturbing Capote's book about the reasons that drove these kids to the crime (Are they Natural Born Killers ?). The crime scenes are very brutal and haunting because of the lack of senses and reasons for what we witnessed. Stunning black & white cinematography from Conrand Hall, excellent country - road music score from Quincy Jones, amazing performances in two principal roles from Robert Blake and Scott Wilson and first time in a movie a sad comment about capital punishment at the last moments before their deaths. Jones, Hall and Brooks (as director and as writer for adapted screenplay) are Academy Award nominees. Gripping, superbly directed and frightening, one of the best films of this decade", "y": 1}, {"x": "\"A Christmas Story\" is one of many people's all-time most beloved films. ACS was able to take the viewer to a time and a place in such a way that very few films ever have. It had a sweetness and goodwill to it that is rare.

So I awaited (and awaited) its sequel, \"It Runs In The Family\" . The film was almost released a couple of times, only to be pulled at the last minute. When it finally came out, IRITF was (and is, I guess) a total failure.

The sets and cinematography were just fine, but the directing totally, completely missed the mark. The film was nothing more than a cash-flow formula of lazy casting, lazy writing, and disconnected acting.

The narrator, Jean Shepard, who was one of America's great humorists and story-tellers, forced upon us a false reprise of the warm wit he used in ACS. He over-emoted, and why he did that I'll never know. He somehow managed to become an annoying, overwrought parody of himself.

The writing and acting in IRITF is inauthentic and forced. The actors may have seen ACS, but whatever wit and nuance that was in ACS mustn't have registered at all on any of them. The acting was embarrassingly slapstick and bereft of any of Shepard's dry humor.

ACS will always be a real treasure, but to call IRITF a sequel is to insult all of the fans of Jean Shepard and ACS.", "y": 0}, {"x": "\"That 'Malcom' show on FOX is really making a killing... can't we do our own version?\" I speculate and paraphrase, of course, but in our hearts we all know it's true, and that the only thing NBC added to the 'Malcom' metric was sex. And, boy, did they add sex...

Thirteen-year-old Tucker gets a boner and covers it up with his skateboard. Tucker accidentally walks in on his Aunt in the shower and she accuses him of watching her and beating off. He spies on the cute girl in the next house from his bedroom window, and she knows he wants to see her topless but she teases him by smiling and closing the window. And this is all in the pilot.

Take it from a grown man- a boy's puberty is so sex-crazy and testicle-driven it is impossible to make it funny for a mainstream audience. The only times anyone has ever come close has been in movies, and you can count those on one hand. So it's no surprise that \"Tucker\" has the warmth and appeal of a strip-club bathroom. Did the network actually think we would like watching kids grapple with puberty? Isn't this the stuff people go to jail for? If you doubt the show's depravity consider this: 13 episodes were filmed but NBC canceled it after only 4 episodes aired; they then made the unprecedented move of \"burning off\" the remaining episodes by airing them AT MIDNIGHT so no children could see them. Ironic since kids were originally the target audience.

Apart from its general scuzziness Tucker features a running voice-over from the lead character to flesh out the shoddy writing. Even in 2000 it was horribly dated, with it's ska incidental music and super-sarcasm. I couldn't like any of the characters enough to laugh at the jokes and the jokes didn't exactly come a mile-a-minute... Shame on NBC for this dirty rip-off... they're better than that.

GRADE: C-", "y": 0}, {"x": "When \"Good Times\" premiered in 1974, it was one the first black family sitcoms. It centered on the poor Chicago-based Evans family and their struggles to make ends. Most of the early episodes focused on the parents, James and Florida Evans, and their struggle to provide for the family. John Amos and Esther Rolle were the best part of the show. They were terrific actors and had great chemistry as James and Florida Evans. They had three kids: J.J., Thelma, and Michael. J.J. was the skirt-chasing but well-meaning teenage son who made up for his lack of subtletly with artistic talent. Thelma was an attractive, bright girl who was constantly trading insults with J.J. Michael was a near child prodigy who was well-educated on social issues and was destined to become a lawyer.

In 1976, the producers made a huge mistake by firing John Amos, literally killing off his character. This really changed the focus, and not for the good I might add. The shows began to focus more on J.J. and his buffoon-like behavior which angered black viewers as well as series star Esther Rolle, who left after the next season. Instead of a show that focused on key African-American issues that existed in society at the time, viewers got shows that were overloaded with skirt chasing and fat jokes.

Once Esther Rolle left, the quality of the show suffered even more. Although it was still watchable, it was no longer the great ground-breaking show that it once was.

Although Esther Rolle came back for the 1978 season, it became obvious that the show was on its last legs. All loose ends were tied up during that season and the show quietly faded off the air.

First three season: A. Last three seasons: C+.", "y": 1}, {"x": "Years ago many big studios promoted serial films that were shown in movie theaters's in between the actual features along with a Newsreel of current events, plus cartoons, especially on a Saturday afternoon. (The parents loved it mostly) \"The Return of Chandu\" was a 12 episode serial where Chandu,(Bela Lugosi),\"The Mysterious Mr. Wong\",'34 is a magician with super natural powers and travels to the island of Lemuria to rescue the kidnapped princess of Egypt,(Nadji)Maria Alba,\"Dr. Terror's House of Horrors\",'43. Princess Nadji is held captive by the black magic cult of Ubasti, who believe that she is a reincarnation of their long-dead goddess Ossana. These 12-episode serials take you way back in time and are very well produced, considering we are talking about 1934 !", "y": 1}, {"x": "Finally a movie where the audience is kept guessing until the end what will happen. Well, we all kind of know that the lives of the brothers, Andy (played by Hoffman) and Hank (played by Hawke) will spiral downward towards destruction since where else is there to go but down, but we do not know how or when until near the end of the movie. Hoffman is superb, as usual, and even Hawke was decent as the younger brother who basically does what he is told since he really cannot think for himself. Hawke might have been a little out of his element, but he played the part well enough. Add into this mix Andy's wife, played perfectly by Marisa Tomei, cheating with Hank; Andy's embezzlement of company funds to pay for his drug and sex addictions; and a father who finally discovers exactly what happened the day of the robbery. This movie will get you thinking.", "y": 1}, {"x": "What a fantastic premise: A movie about the Berlin Airlift. It should have it all. Tragedy. Suspense. Comradeship. Rivals. Berliner Frauleins and tough US pilots. love and Tears. What we've got, is a film with none of the above. Heino Ferch tries to impersonate John Wayne or so, but he fails miserably. He acts so wooden, that at any given moment he should crack. He tries to play the tough guy, instead of being a tough guy! Why would Bettina Zimmermann's character fall in love with him? Cause they were throwing stones in a lake? Cause he brings her coal bricks? The SFX are very, very well done. Too much though. The hundreds or so planes over Berlin, look like an attack-fighter-formation-squadron rather than an organised airlift \u0096 as it actually was. Interestingly enough, the White House, the Kremlin, and General Lucius D. Clays office seem all to be one and the same dark and dusty set. Notice the same drapes, hanging deep down the windows, as if a protective shield against nuclear fallout. Why is almost every scene INSIDE dark and dusty? By the way, GENERAL LUCIUS D. CLAY, comes across as a small time, insecure, looser General, who doest trust in his own noble idea the airlift. He was very much the opposite. So you combine all those individual blunders and the result is a film with that builds toward no passion, no suspense and no historic accuracy. Sad, it started out so promising\u0085", "y": 0}, {"x": "\"Foxes\" is one movie I remember for it's portrayal of teenagers in the late 1970's. As I am exactly Jodie Foster's age, I related to this movie. It deals with the frustrations, temptations, relationships & rebellion of youth. The soundtrack is great with inspiring rock eg. \"More Than a Feeling\" by Boston and sad numbers like \"On the Radio\" by Donna Summer. The music of my late teens. Yep, I'll always remember this one, even if it wasn't huge.", "y": 1}, {"x": "Today I found \"They All Laughed\" on VHS on sale in a rental. It was a really old and very used VHS, I had no information about this movie, but I liked the references listed on its cover: the names of Peter Bogdanovich, Audrey Hepburn, John Ritter and specially Dorothy Stratten attracted me, the price was very low and I decided to risk and buy it. I searched IMDb, and the User Rating of 6.0 was an excellent reference. I looked in \"Mick Martin & Marsha Porter Video & DVD Guide 2003\" and \u0096 wow \u0096 four stars! So, I decided that I could not waste more time and immediately see it. Indeed, I have just finished watching \"They All Laughed\" and I found it a very boring overrated movie. The characters are badly developed, and I spent lots of minutes to understand their roles in the story. The plot is supposed to be funny (private eyes who fall in love for the women they are chasing), but I have not laughed along the whole story. The coincidences, in a huge city like New York, are ridiculous. Ben Gazarra as an attractive and very seductive man, with the women falling for him as if her were a Brad Pitt, Antonio Banderas or George Clooney, is quite ridiculous. In the end, the greater attractions certainly are the presence of the Playboy centerfold and playmate of the year Dorothy Stratten, murdered by her husband pretty after the release of this movie, and whose life was showed in \"Star 80\" and \"Death of a Centerfold: The Dorothy Stratten Story\"; the amazing beauty of the sexy Patti Hansen, the future Mrs. Keith Richards; the always wonderful, even being fifty-two years old, Audrey Hepburn; and the song \"Amigo\", from Roberto Carlos. Although I do not like him, Roberto Carlos has been the most popular Brazilian singer since the end of the 60's and is called by his fans as \"The King\". I will keep this movie in my collection only because of these attractions (manly Dorothy Stratten). My vote is four.

Title (Brazil): \"Muito Riso e Muita Alegria\" (\"Many Laughs and Lots of Happiness\")", "y": 0}, {"x": "I don't think anyone sitting down to view this film would be expecting anything remotely appearing like a classic ghost story but you have to ask yourself when it's over if you were ever scared. This doesn't really work on that level but the cast does try hard and the film doesn't tack on one of those happy endings. Story is about an American couple who travel to Kyoto, Japan so that Ted Fletcher (Edward Albert) can write a book and he brings along his wife Laura (Susan George) and their daughter Amy (Amy Barrett). Their friend Alex Curtis (Doug McClure) who works at the American Consulate helps them find a house to live in and he finds one that is haunted. About 140 years earlier in the same house a Samurai found his wife cheating on him and he kills both of them and then commits suicide. Their ghosts still inhabit the house and when the Fletcher's arrive it doesn't take long before strange things start happening.

*****SPOILER ALERT*****

At times the ghosts inhabit the bodies of the Fletcher's and they start to act like the Japanese people that they were before and Laura starts to flirt with Alex which leads to an affair. Meanwhile, Ted starts behaving more strict and after he pours soup down the throat of Amy he goes to ask a Monk for help. Unfortunately the ghosts get Ted, Laura, and Alex to play out their death scene like it happened 140 years earlier.

This film was directed by Kevin Connor who is known as a good television director but he has made horror and science fiction films before and has worked with McClure on some of them. While this never comes close to being scary or developing atmosphere it does have two things in it that I liked. First, it doesn't have one of those sappy endings where the couple embrace after defeating the demons. Instead, it ends in a very bloody fight where everyone succumbs to the evil of the ghosts. Secondly, it has Susan George in the cast! I've always been a fan of hers even though she has appeared in mostly schlock but her performances are always top notch. Also she usually appears nude which she does here in two separate scenes and while she doesn't have classic features she does have a unique tomboy like look about her and it's one of the reasons why she was so popular. But after appearing in silly films such as this I think it led to her getting out of the business or working only sporadically. This isn't a bad film but it's never convincing and watching the ghosts scurry around when the Monk gives an exorcism is practically worthy of a giggle or two. The bottom line is that this is silly and I hope George decides to resume her career.", "y": 0}, {"x": "A bad rip-off attempt on \"Seven\", complete with sub-second-grade acting, awful camera work, half-baked story and strong aftertaste of lame propaganda. Yeah, them \"sex offenders\", they live next door and you're gonna get raped, really.

No surprises from the vice-terminatrix woman, she acts as always -- as convincingly as a piece of wood. Richard Gere keeps on sliding lower and lower -- and is about as low here as a late Steven Seagal.

The singer woman with the crazy eyes is best when she's dead in bed; and even the wolf was sub-par (although she was the best performer in the movie) -- maybe they fed her before the shots, or something.

Unlike \"Seven\", which had a (made up, but interesting) story, to which one could relate more or less regardless of the country, this movie seems to focus on a US-only obsession. If one doesn't care much about \"sex offenders\" -- and the statistics are that lack of exercise and bad diet cause more pain, suffering and death -- there is little reason to see it, or to be afraid.

There are some body part fetishes and some snuff, but the gore is less then mediocre, and fails both as artistic device (because it is pointless) and as gore, because it is not gory enough.

Don't waste time on this one.", "y": 0}, {"x": "When I really began to be interested in movies, at the age of eleven, I had a big list of 'must see' films and I would go to Blockbuster and rent two or three per weekend; some of them were not for all audiences and my mother would go nuts. I remember one of the films on that list was \"A Chorus Line\" and could never get it; so now to see it is a dream come true.

Of course, I lost the list and I would do anything to get it back because I think there were some really interesting things to watch there. I mean, take \"A Chorus Line\", a stage play turned into film. I know it's something we see a lot nowadays, but back then it was a little different, apparently; and this film has something special.

Most of the musicals made movies today, take the chance the camera gives them for free, to create different sceneries and take the characters to different places; \"A Chorus Line\" was born on a theater stage as a play and it dies in the same place as a movie. Following a big audition held by recognized choreographer Zach (Michael Douglas), Richard Atenborough directs a big number of dancers as they try to get the job.

Everything happens on the same day: the tension of not knowing, the stress of having to learn the numbers, the silent competition between the dancers\u0085And it all occurs on the stage, where Douglas puts each dancer on the spotlight and makes them talk about their personal life and their most horrible experiences. There are hundreds of dancers and they are all fantastic, but they list shortens as the hours go by.

Like a movie I saw recently, \"A Prairie Home Companion\", the broadcast of a radio show, Atenborough here deals with the problem of continuity. On or behind the stage, things are going on, and time doesn't seem to stop. Again, I don't if Atenborough cut a lot to shoot this, but it sure doesn't look like it; and anyway it's a great directing and editing (John Bloom) work. But in that little stage, what you wonder is what to do with the camera\u0085With only one setting, Ronnie Taylor's cinematography finds the way, making close-ups to certain characters, zooming in and out, showing the stage from different perspective and also giving us a beautiful view of New York.

In one crucial moment, Douglas tells the ones that are left: \"Before we start eliminating: you're all terrific and I'd like to hire you all; but I can't\". This made me think about reality shows today, where the only thing that counts is the singing or dancing talent and where the jury always says that exact words to the contestants before some of them are leaving (even when they are not good). It's hard, you must imagine; at least here, where all of them really are terrific.

To tell some of the stories, the characters use songs and, in one second, the stage takes a new life and it literally is 'a dream come true'. The music by Marvin Hamlisch and the lyrics by Edward Kleban make the theater to film transition without flaws, showing these dancers' feelings and letting them do those wonderful choreographies by Michael Bennett. The book in the theater also becomes a flawless and very short screenplay by Arnold Schulman; which is very touching at times. So if it's not with a song it will be with a word; but in \"A Chorus Line\", it's impossible not to be moved.

During one of the rehearsal breaks in the audition, Cassie, a special dancer played by Alyson Reed, takes the stage to convince Douglas character that she can do it. The words \"let me dance for you\" never sounded more honest and more beautifully put in music and lyrics.", "y": 1}, {"x": "I thought this movie would be dumb, but I really liked it. People I know hate it because Spirit was the only horse that talked. Well, so what? The songs were good, and the horses didn't need to talk to seem human. I wouldn't care to own the movie, and I would love to see it again. 8/10", "y": 1}, {"x": "Suppose you've been on a deserted island the last ten years. Haven't heard of Scream and left when Halloween part 1 entered the cinema. Then this movie would have been a blast and a completely new vision on the horror scene.

At the moment, a 2.7 rating is on IMDb and it doesn't deserve a that low appreciation. Slashing all the way, like \"I know what you did\", and a who-is-it that when getting to the end convinced me of that who-and-why.

No big surprise, just a nice flick to watch with a cola, popcorn and no urge to get a difficult plot, deep characters. If the video rental is out of the top titles, you can take it without a risk, but don't expect a masterwork. I've seen a lot worse.", "y": 0}, {"x": "This British film is truly awful, and it's hard to believe that Glenn Ford is in it, although he pretty much sleepwalks through it. The idea of a bomb on a train sounds good...but it turns out this train ends up parked for the majority of the film! No action, no movement, just a static train. The area where the train is parked is evacuated, so it's not like there's any danger to anyone either. In fact, this film could be used in a film class to show how NOT to make a suspense film. True suspense is generated by letting the audience know things that the characters don't, a fact apparently unknown to the director. SPOILER: the train actually has two bombs on it, but we are led to believe there is only one. After the first bomb is defused, it feels as if there is no longer a reason to watch the film any more. But at the last minute, the villain, who has no apparent motivation for his actions, reveals there are two. Nor are we certain WHEN the bombs will go off, so we don't even have a classic \"ticking bomb\" tension sequence. A good 10 minutes or more are spent watching Glenn Ford's French wife thinking about leaving him, and then wondering where he is . She's such an annoying character that we don't care whether she reconciles with him, so when she does, there's nothing emotional about it. Most of the other characters are fairly devoid of personality, and none have any problems or issues. It's only 72 minutes, but it feels long because it's tedious and dull. Don't waste your time.", "y": 0}, {"x": "Based on an actual mining disaster, this early German talkie (with English subtitles) still remains one of the most effective docu-dramas ever filmed. Featuring many non-professional actors, \"Kameradschaft\" gives a chilling view of the friendship that binds the mine workers, regardless of which side of the French/German border they may be from. A deadly accident brings out the very best in everyone, nullifying any superiors' orders. A fellow miner in need will receive the help of his comrades, even at threat of great loss, including life.

This film reminds of the self-sacrificing heroism shown by the NYFD following the 9/11 attacks. Putting aside any formal rules and regulations, these men and women in uniform knew only one cause: to save lives, and to find their fellow-fire fighters. -- More than 70 years later, \"Kameradschaft\" still has the strong and timeless message: A friend in need is a friend in deed.", "y": 1}, {"x": "Terrfic film with a slightyly slow start - give it a chance to start cooking. Story builds in interest and complexity. Characters and storyline subvert expectation and cliche at all the right moments. Superb New York City locations - gritty, real - are a fantastic antidote to the commercial imperatives of \"Sex in the City\" - in fact, the entire film is an antidote to the HBO/Hollywood notion of New York City , sex and relationships. It's a rare film that treats its characters so honestly and compassionately. LOVED IT! Great cast with notable performances by Steve Buscemi, Rosario Dawson, and her love interest (forgot his name!).", "y": 1}, {"x": "I can't believe that so much talent can be wasted in one movie! The Gingerbread Man starts of on the right foot, and manages to build up some great expectations for the ending. But at some point the movie turns into one of the worst stories I've ever wasted my time on. It's just so unbelievably how the bewitched Mallory Doss manages to pull Kenneth Branagh's character around by his nose. The movies climax is as uninteresting and flat as a beer, which has been left out in the sun too long. The Gingerbread Man is probably the worst Grisham-movie ever and this isn't changed by the fact that talented stars crowd the movie. Don't waste your time here!", "y": 0}, {"x": "I'm sure deep in the recesses of Jack Blacks mind the character of Nacho Libre is absolutely hilarious but no it isn't. You can tell ol Jacks having a whale of a time hammin it up playing a smarmy, slimy Mexican friar with dreams of becoming a wrestler but this movie is a total misfire in just about every single department.

I just sat there through most of the movie thinking \"Is this supposed to be funny\" and \"This is the guy from Tenacious D right?\". The truth is this film has NOTHING to offer. AT ALL! It's a lousy script with crappy characters and really naff acting and direction. You'll watch endless moments where you think something funny is surely about to happen but it just doesn't. I was bored stupid about 10 minutes in but though it would surely pick up. It didn't. 90 minutes later I'd barely managed to stave off an aneurism it was that painful.

It's like, remember years ago when you'd see anything with your fave actor in it, even some of their really early pap from before they were famous, and you'd be really embarrassed that said actor was actually in such a load of plop. Yeah it's like that.

I've enjoyed some of Jack Black's earlier movies like Shallow Hall and I'm really looking forward to seeing Pick of Destiny but come on man. If you do this to us again Jack I'm gonna have to come round there and hammer your kneecaps or something. At the least give you a serious talking to.

I know it's a clich\u00e9 but this is one of the worst movies I've ever seen and for so many reasons....", "y": 0}, {"x": "This movie was two and a quarter excruciating hours. Someone please tell me what the point was?

I mean, I understand the historical setting. It's supposed to be about a ragtag group of Confederate bushwhackers (terrorists?) on the Missouri-Kansas frontier, taking revenge against all northern sympathizers and abolitionists during the U.S. Civil War. But aside from gratuitous violence there wasn't really much of a point to this movie. Perhaps it was a political statement? That war is really nothing much more than gratuitous violence? If that was the point it was done quite well, but I don't think that was the point. I think the producers really thought they were making a worthwhile movie here, but as far as I was concerned there was a complete lack of any plot. It seemed like I was watching a paperback novel come to life, with the characters looking like what you would see on the covers of such novels.

This movie should be burned along with some of the towns this gang torched!", "y": 0}, {"x": "The short that starts this film is the true footage of a guy named Gary, apparently it was taken randomly in the parking lot of a television station where Gary works in the town of Beaver. Gary is a little \"different\"; he is an impersonator and drives an old Chevy named Farrah (after Fawcett). Lo and behold the filmmaker gets a letter from Gary some time later inviting him to return to Beaver to get some footage of the local talent contest he has put together, including Gary's staggering performace as Olivia Newton Dawn. Oh, my. The two shorts that follow are Gary's story, the same one you just witnessed only the first is portrayed by Sean Penn and the second by Crispin Glover titled \"The Orkly Kid.\" If you are in the mood for making fun of someone this is definitely the film to watch. I was doubled over with laughter through most of it, especially Crispins performance which could definitely stand on it's own. When it was over, I had to rewind the film to once again watch the real Gary and all his shining idiocy. Although Olivia was the focus, I would have liked to have seen one of the \"fictitious\" shorts take a jab at Gary's Barry Manilow impersonation, whic h was equally ridiculous.", "y": 1}, {"x": "Time paradoxes are the devil's snare for underemployed minds. They're fun to consider in a 'what if?' sort of way. Film makers and authors have dealt with this time and again in a host of films and television including 'Star Trek: First Contact', the 'Back to the Future' trilogy, 'Bill and Ted's Excellent Adventure', 'Groundhog Day' and the Stargate SG1 homage, 'Window of Opportunity'. Heinlein's 'All You Zombies' was written decades ago and yet it will still spin out people reading that short story for the first time.

In the case of Terry Gilliam's excellent film, '12 Monkeys', it's hard to establish what may be continuity problems versus plot elements intended to make us re-think our conception of the film. Repeated viewings will drive us to different conclusions if we retain an open mind.

Some, seeing the film for the first time, will regard Cole, played by Bruce Willis, as a schizophrenic. Most will see Cole as a man disturbed by what Adams describes as 'the continual wrenching of experience' visited upon him by time travel.

Unlike other time travel stories, '12 Monkeys' is unclear as to whether future history can be changed by manipulating events in the past. Cole tells his psychiatrist, Railly (Madeleine Stowe), that time cannot be changed, but a phone call he makes from the airport is intercepted by scientists AFTER he has been sent back to 1996, in his own personal time-line.

Even this could be construed as an event that had to happen in a single time-line universe, in order to ensure that the time-line is not altered...Cole has to die before the eyes of his younger self for fate to be realised. If that's the case, time is like a fluid, it always finds its own level or path, irrespective of the external forces working on it. It boggles the mind to dwell on this sort of thing too much.

If you can change future events that then guide the actions of those with the power to send people back in time, as we see on board the plane at the end of the film, then that means the future CAN be changed by manipulating past events...or does it? The film has probably led to plenty of drunken brawls at bars frequented by physicists and mathematicians.

Bonus material on the DVD makes for very interesting viewing. Gilliam was under more than normal pressure to bring the film in under budget, which is no particular surprise after the 'Munchausen' debacle and in light of his later attempt to film 'Don Quixote'. I would rate the 'making of' documentary as one of the more interesting I've seen. It certainly is no whitewash and accurately observes the difficulties and occasional conflict arising between the creative people involved. Gilliam's description of the film as his \"7\u00bdth\" release, on account of the film being written by writers other than himself - and therefore, not really 'his' film' - doesn't do the film itself justice.

Brad Pitt's portrayal of Goines is curiously engaging, although his character is not especially sympathetic. Watch for his slightly wall-eyed look in one of the scenes from the asylum. It's disturbing and distracting.

Probably a coincidence, the Louis Armstrong song 'What a Wonderful World' was used at the end of both '12 Monkeys' and the final episode of the TV series of 'The Hitchhiker's Guide to the Galaxy'. Both the film and the TV series also featured British actor Simon Jones.

'12 Monkeys' is a science fiction story that will entertain in the same way that the mental stimulation of a game of chess may entertain. It's not a mindless recreation, that's for sure.", "y": 1}, {"x": "\"Cinderella\" is one of the most beloved of all Disney classics. And it really deserves its status. Based on the classic fairy-tale as told by Charles Perrault, the film follows the trials and tribulations of Cinderella, a good girl who is mistreated by her evil stepmother and equally unlikable stepsisters. When a royal ball is held and all eligible young women are invited (read: the King wants to get the Prince to marry), Cinderella is left at home whilst her stepmother takes her awful daughters with her. But there is a Fairy Godmother on hand...

The story of \"Cinderella\" on its own wouldn't be able to pad out a feature, so whilst generally staying true to the story otherwise, the fairly incidental characters of the animals whom the Fairy Godmother uses to help get the title character to the ball become Cinderella's true sidekicks. The mice Jaq and Gus are the main sidekicks, and their own nemesis being the stepmother's cat Lucifer. Their antics intertwine generally with the main fairy-tale plot, and are for the most part wonderful. Admittedly, the film does slow down a bit between the main introduction of the characters and shortly before the stepsisters depart for the ball, but after this slowdown, the film really gets going again and surprisingly (since \"Cinderella\" is the most worn down story of all time, probably) ends up as one of the most involving Disney stories.

The animation and art direction is lovely. All of the legendary Nine Old Men animated on this picture, and Mary Blair's colour styling and concept art (she also did concept art and colour styling for \"Alice in Wonderland\", \"Peter Pan\", \"The Three Caballeros\" and many many others) manage to wiggle their way on screen. The colours and designs are lovely, especially in the Fairy Godmother and ball scenes, as well as in those pretty little moments here and there.

Overall, \"Cinderella\" ranks as one of the best Disney fairy-tales and comes recommended to young and all that embodies the Disney philosophy that dreams really can come true.", "y": 1}, {"x": "Women have never looked so attractive and pathetic as in Salazar's film Piedras. Although editor's cut here and there might help the film, it is exciting and enjoyable with an intense mark from Pedro Almodovar's latest films. 5 different women are coping with their male partners and families. Beginning with several different stories bound to meet as the plot goes on, Salazar portraits his women characters in the same neurotic and border-line behaviour familiar to Almodovar. A kleptomaniac high society lady with a fattish to smaller shoes, a burlesque house madam taking care of her disabled daughter, a drug addict dancer obsessed with her former boyfriend and a taxi-driver taking care of her late husband's disturbed kids, all roaming the streets of Madrid in well designed scenes. Using some of Almodovar's familiar actresses, the director succeeds in it's first film to give depth to all the characters sharing the film, and to create genuine sympathy with each of them. The women controls the plot line, and the men are bound to be left with each other, eventually... Surprisingly good for a first film, and worth the time in any standard. It is noticeable that Salazar hesitated in some needed guidelines to the actresses, but an impressible act is shown anyway on the screen, especially by Monica Cervera, which played in his former short film.

A must to all Almodovar's fans, and enjoyable to all.", "y": 1}, {"x": "I think that people are under estimating this incredible film. People are seeing it as a typical horror movie that is set out to scare us and prevent us from getting some sleep. Which if it was trying to do then it would deservedly get a 1/10 but i viewed this film with a few friends and we found it very entertaining and though it was a good movie after all it does have Stephanie beaton. This is the reason why i think that it deserves the 10/10 for the pure entertainment of the film.

The general view on this movie is that it has bad acting, a simple script that a 10 year old could produce and that it cant be taken seriously and people are rating it low because of this. But i see this as a thoroughly entertaining masterpiece...that has a hilariously funny script which is made even more entertaining by the actors and although not very serious it is very entertaining.", "y": 1}, {"x": "This has to be one of the best, if not the best film i have seen for a very, very long time. Had enough action to satisfy an fan, and yet the plot was very good. I really enjoyed the film,and had me hooked from start to finish.

Added blood and gore in there, but brought the realistic nature of what happens to the front of the film, and even had a tear jerker ending for many people i should think.

It is a must watch for anyone. Seen many reviews, slating the film, but to be fair, most the films that get bad reviews, turn out to be some of the best. this proves it once again.

Rent this film, buy this film, just go out and watch this film. You will not be disappointed.", "y": 1}, {"x": "This could have been interesting \u0096 a Japan-set haunted house story from the viewpoint of a newly-installed American family \u0096 but falls flat due to an over-simplified treatment and the unsuitability of both cast and director.

The film suffers from the same problem I often encounter with the popular modern renaissance of such native fare, i.e. the fact that the spirits demonstrate themselves to be evil for no real reason other than that they're expected to! Besides, it doesn't deliver much in the scares department \u0096 a giant crab attack is merely silly \u0096 as, generally, the ghosts inhabit a specific character and cause him or her to act in a totally uncharacteristic way, such as Susan George seducing diplomat/friend-of-the-family Doug McClure and Edward Albert force-feeding his daughter a bowl of soup!

At one point, an old monk turns up at the house to warn Albert of the danger if they remain there \u0096 eventually, he's called upon to exorcise the premises. However, history is bound to repeat itself and tragedy is the only outcome of the tense situation duly created \u0096 leading to a violent yet unintentionally funny climax in which Albert and McClure, possessed by the spirits of their Japanese predecessors, engage in an impromptu karate duel to the death! At the end of the day, this emerges an innocuous time-waster \u0096 tolerable at just 88 minutes but, in no way, essential viewing.", "y": 0}, {"x": "Some unsuspecting films carry a message that resonates in the hours and days after viewing. Such is the case for CAROL'S JOURNEY (EL VIAJE DE CAROL), a beautifully crafted 2002 film from Spain based on the novel 'A boca de noche' by \u00c1ngel Garc\u00eda Rold\u00e1n who also adapted the book as a screenplay. War and its consequences are not new subject matter for films, but when that war theme plays in the background as a subtle driving force to develop characters (especially children) who must face adult life influenced by the games of adults, the result is a different and more tender examination of the coming of age film genre.

Carol (Clara Lago) is a 12-year-old Spanish American youngster from New York who with her critically ill mother Aurora (Mar\u00eda Barranco) returns to her Aurora's home in 1938 at the height of the Spanish Civil War, a home that has been left deserted by her father Don Amalio (\u00c1lvaro de Luna) since his wife's death. Carol's father Robert (Ben Temple) is a fighter pilot who has sided with the Republicans against Franco and is rarely with his family. Aurora has a past: she left her lover Alfonso (Alberto Jim\u00e9nez) to marry Robert, and Alfonso in turn married Aurora's cold sister Dolores (Lucina Gil). Carol is an independent girl who remains aloof to all but her grandfather Don Amalio until she meets others her age but not of her 'class': Tomiche (Juan Jos\u00e9 Ballesta) and his two friends at first resent Carol, but as events develop Carol and Tomiche are bonded by what feels like the first awakenings of love. When Aurora dies of her illness, Carol must live with Alfonso and Dolores and their daughter Blanca (Luna McGill), yet turns to her grandfather for support and to her mother's best friend and teacher Maruja (the always radiant Rosa Maria Sard\u00e0) to understand the disparity between classes and the senseless war that keeps her beloved father from her side. Through a series of incidents Carol and Tomiche learn the rigors of becoming adults, facing more traumas in a brief period of the war than most of us experience in a lifetime. The ending, though sad, is uplifting as Carol's journey to maturity is complete.

The film is shot in Galicia and Portugal and contains some extraordinarily beautiful settings captured with gentle sensitive lighting by cinematographer Gonzalo F. Berridi and enhanced by the musical score by Bingen Mendiz\u00e1bal. Director Imanol Uribe understands the fine line separating pathos from bathos, and in electing to concentrate the story on the children involved, he makes an even stronger statement about the futility and cruelty of war. The cast is exceptional: the stars clearly are young Clara Lago and Juan Jos\u00e9 Ballesta, but they are supported by the fine veteran actors in the adult roles. This is a visually stunning work with a lasting message and should find a much larger audience than it has to this date. Grady Harp", "y": 1}, {"x": "Absolute garbage. The reason that this is so terrible is not because it deviated from the formula, but because the plot was just pathetic.

The supposed star didn't do anything to solve the case - and neither did anyone else really - it was just routine police work. Utterly tedious.

You sat right till the end hoping for a twist - and got nothing but a huge sense of disappointment.

There was so much potential in having a relative in apparent kidnap. Could the Lt's personal involvement finally cloud his judgement?

All the obvious signs were of a stranger doing it. But surely a genius like Lt C, by constant conversation with the wronged husband, would gradually uncover a fiendish plot involving a tape recorder playing in the shower room while a masked groom surprises the bride, hides the body and then plants subtle clues. It could have been good. It was a complete waste of time.", "y": 0}, {"x": "Being a music student myself, I thought a movie taking place in a conservatory might be fun to watch. Little did I know... (I had no idea this movie was based on a book by Britney Spears) This movie was implausible throughout. It's obvious that whoever wrote the script never set foot in a conservatory and doesn't know a thing about classical music. Let me give you just a few examples: 1) There is NO WAY anyone would be admitted to a classical conservatory with no classical training whatsoever! Just having a nice pop voice isn't enough, besides, that's a different thing altogether - another genre, different technique. It's like playing the violin when applying for a viola class. 2) How come the lady teaching music theory was in the singing jury? If she wasn't a singing professor herself, she would have no say in a situation like that, and if she was a singing professor, why weren't we told so? 3) Being able to read music is a necessity if you're to major in music. 4) How did Angela get a hold of that video tape? That would have been kept confidential, for the jury's eyes only. Now either she got the tape from one of the professors or the script writers just didn't have a clue. I wonder which... 5) The singing professor gave Holly the Carmen song saying she \"had the range\", which she clearly did NOT. Yes, she was able to sing the notes, but Carmen is a mezzo-soprano, while Holly's voice seemed to be much lighter in timbre, not at all compatible with that song. 6) Worst of all: Not only does the movie show a shocking ignorance when it comes to classical music, but it doesn't even try to hide it. The aria that Angela sings is mutilated beyond recognition, a fact which is painfully blatant at the recital, where it is cut short in a disgraceful way - Mozart would roll over in his grave. The Habanera from Carmen sounded a bit weird at times, too, and the way it was rearranged at the end just shows how little the producers really think of classical music - it's stiff and boring but hey, add some drums and electric guitars and it's almost as good as Britney Spears! I know these are all minor details, but it would have been so easy to avoid them with just a little research. Anyhow, I might have chosen to suspend my disbelief had the characters and the plot been well elaborated. But without that, I really can't find any redeeming qualities in this movie except for one: it's good for a laugh.", "y": 0}, {"x": "Excellent film. The whole picture was filmed in Budapest, so I feel proud. My little problem was that the trains in the film belonged to the Hungarian State Railways (M\u00c1V), and it is plain to see that they were used in big train, not in the local railway - according to the story Chikatilo picked up his victims in local railway stations. Apart from this, the film is superb.", "y": 1}, {"x": "Fido is a cute comedy that deserves wider recognition, especially considering the mainstream crap that is supposed to entertain us these days.

As has already been pointed out, this is hardly a real zombie film, but rather a sweet satire that employs the undead to point fingers. While there are necessarily some bloody scenes, there is almost no gore and the way this movie is presented (feel-good 50s style), I can't imagine anyone being actually scared or turned off by Fido & his fellow sufferers.

While the cast is generally good, I felt that Moss and Nelson stood out. The humor is not in-your-face, but rather subdued; there's a lot of attention to detail and I caught myself smiling benignly several throughout the movie. This is certainly no masterpiece of cinema, but it doesn't strive to be - instead, Currie succeeds in delivering a heart-warming black comedy.", "y": 1}, {"x": "I couldn't not recommend a Christmas movie more than this worthless piece of drivel (trust me, double negatives are required here -- it's that bad). This film was in trouble from the opening credits when it was revealed that the screenwriter was the same person as the songwriter. The musical numbers are all far too long and none of them any good (\"Thank You Very Much\" has a decent melody, but the lyrics are stupid beyond words). I would gladly bear the chains worn by Scrooge in the film's bizarre hell sequence than sit through this insult to movie musicals again.

The only entertaining part of this movie (completely unintentional by the way) involves Alec Guinness as Jacob Marley. Dressed in a silly powder white costume, Guinness foppishly prances through his scenes in what was either an attempt to make it appear as though he was floating like a ghost, or to show his utter disdain with having to be in this dreadful movie. Albert Finney, meanwhile, blends the best of Alistar Sim and Charles Laughton to create his hopelessly loathsome character of Quasimodo/Scrooge. Finney's Scrooge is so hideous a person, it's impossible to believe his transformation.

Steer clear of this abomination of filmmaking at all costs.", "y": 0}, {"x": "It does not seem that this movie managed to please a lot of people. First off, not many seem to have seen it in the first place (I just bumped into it by accident), and then judging by the reviews and the rating, of those that did many did not enjoy it very much.

Well, I did. I usually tolerate Gere for his looks and his charm, and even though I did not consider him a great actor, I know he can do crazy pretty well (I liked his Mr Jones). But this performance is all different. He is not pretty in this one, and he is not charming. His character is completely different from anything I had seen from him up to that point---old, ugly, broken, determined. And Gere, in what to me is so far his best performance ever, pulls it off beautifully. I guess it is a sign of how well an actor does his job if you cannot imagine anyone else doing it instead---think Hopkins as Hannibal Lecter, or Washington as Alonzo in Training Day. That is how good Gere was here.

The rest of the cast were fine by me, too. I guess I would not have cast Danes in this role, mostly because I think she is too good-looking for it. But she actually does an excellent job, holding her own with a Gere in top form, which is no small feat. Strickland easily delivers the best supporting act, in a part that requires a considerable range from her. I actually think she owns the key scene with Gere and Danes, and that is quite an achievement.

So what about the rest of the movie, apart from some excellent acting? The story is perhaps not hugely surprising, some 8mm-ish aspects to it, but adding the \"veteran breaks in rookie\" storyline to the who-dunnit, and also (like Silence of the Lambs) adding a sense of urgency through trying to save the girl and the impending retirement of Gere's character. All that is a backdrop to the development of the two main characters, as they help each other settle into their respective new stations in life. That's a lot to accomplish in a 100 minutes, but it is done well, and we end up caring for the characters and what happens to them.

Direction and photography were adequate. I could have done without the modern music-video camera movements and cutting, but then I am an old curmudgeon, and it really wasn't all that bad, in fact I think it did help with the atmosphere of the movie, which as you might have guessed, by and large isn't a happy one.

Worth seeing.", "y": 1}, {"x": "I was pleased with the cast of reputable players. The story is one of standing up for a cause, even if you are at personal risk in doing so. In a time where violence and pain are often in the movie forefront, this movie focuses on the old fashioned good cop. Although similar plots have been done repeatedly, these guys pull it off well. Kick back and enjoy. Dennehy is a master of taking over a movie.", "y": 1}, {"x": "I have seen a lot of PPV's in the past but this is the most entertaining, intense PPV and the most complete DVD i have ever seen. The DVD extras are worth it because they it gives a different view of how the wrestlers act after the show (such as the chris benoit interview/edge interview), some glimpse into the Monday Night Wars era,the first match of Hogan winning tag title gold and some promotional talk. Additionally there is a good music video.

1. Tag Team Table match: Bubby Ray and Spike Dudley vs. Eddie Guerro and Chris benoit 7/10 This was a pretty good intense match to start off the show. Not too many holds and just pure raw physicallity. Spike can hold his own in tables matches and Guerro and Benoit gave good pure wrestling skills on the mat.

2. WWE Crusierweight championship: Jamie Noble w/ Nidia v. Billy Kidman 3/10 The crowd really didn't care about either wrestler and didn't get interested until Kidman did a shooting star press. Usually people expect a lot of high flying in a cruiser weight championship, but this had very little. In fact it was so bad that when Noble hit his finisher, no one even cared or knew (you can tell by the lack of camera's flashing). The ending was quick though.

3. WWE European Championship: Jeff hardy v. William Regal 5/10 I've never really liked regal as a wrestler, he lacks intensity and style. Hardy was impressive but really didn't get a chance to show off his high flying act, although he still performed some good counters and added that needed fast pace to the match. It ended off quickly which was perfect for this match.

4. John Cena v. Chris Jericho 6/10 It's funny looking back at Cena's very first PPV, how he used to act, how he used to dress, and how he used to look (watch his interview, it's pretty funny). This was a good intense match with Cena showing a nice variety of holds, suplexes, counters and some aerial. Jericho was sub-par but definitely helped Cena launch his career. Cena Wins.

5. WWE Intercontenital championship: RVD v. Brock Lesnar 8/10 This was a very intense and good match. Both wrestlers styles really matched up well on the screen, with Brocks pure power and raw energy vs. RVDs skill full moves and quickness. RVD looked great in this match (better than his later matches with edge and cena)and the entire match was fast pace. The ending worked perfectly because it still preserved Brock's undefeated streak while giving RVD his just desserts in his home state.

6. No disqualification match: Booker T v. Big Show 7/10 Another solid match that lacked a certain intensity as the RVD match but still a good follow up. Although it started off kinda slow (which it always is with big show) Booker T was impressive and did a sick move on the announcers table. The finisher was awesome, the ending was a great upset and big move up for Booker T.

7. WWE Tag Team Championship: Hogan and Edge v. Christian and Lance storm 5/10 This was a mediocre match. Hogan comes out like usual to a huge pop but his variety of moves lacks that intensity and energy. Then again Christian doesn't exactly have the greatest athletic abilities himself. This ended up being a mediocre match at best but was still OK for PPV.

8. Triple Threat Match for the Undisputed Championship: 10/10. Rock v. Undertaker v. Kurt Angle.

Easily the match of the year. This is by far the best triple threat match i have ever seen. It had close falls, plenty of finishers, stolen finishers, raw energy, intensity and fast pace. No one could predict who would come out of this one. If your going to buy this DVD i would buy it strictly for this match. (ending? watch for yourself!)

Overall this was a solid PPV with plenty of extra goodies to keep you watching again and again. Although this is hard to find (i had to pay a little more than usual for this DVD) it is definitely worth your money.", "y": 1}, {"x": "I cherish each and every frame of this beautiful movie. It is about regular people, people we all know, who suffer a little in their life and have some baggage to carry around. Just like all of us. Robert DeNiro, Ed Harris and Kathy Baker breathe life into their portrayals and are all excellent, but Harris is especially heartbreaking and therefore very real. You would swear he really is a trucker who drinks so he won't have to feel anything. Baker as his put-upon sister also has some delicate moments - when DeNiro gives her flowers in one scene, it seems like she was never given flowers before and probably wasn't. Very worthwhile.", "y": 1}, {"x": "I saw this movie at an advance screening and found it excellent.

New York I Love You is a true spin on a romance that explores clever, funny, and sometimes shocking situations around the human race's most powerful emotion.

The cast is huge, a veritable Oceans 11 with Andy Garcia, Ethan Hawke, Shia Labouf, Natalie Portman, Bradley Cooper and others. They all give stand out performances in one way or another.

That's not to mention that there is a who's who of directors interweaving stories in clever and interesting ways. Brett Rattner, Shaka Kapur, Natalie Portman, I mean -WOW! This movie is not a straight ahead romance or romantic comedy even though it is both romantic and funny. It also has serious stories and notes. But that's good in my opinion. Go see it for yourself and reply to my review, I want to hear what others have to say.", "y": 1}, {"x": "To me, this review may contain spoilers, but I like watching movies with NO idea of what is going to happen, so therefore I think many of the other reviews here of this movie contain spoilers!

I just watched this movie again, and I must reiterate that it has the BEST ending to any movie. Ever. Ever. Ever. The real translation, 'The Beating of the Butterfly's Wings', is oddly not used as the translated title. I suppose they thought most Americans wouldn't know what Chaos Theory is (except for those who saw or read \"Jurassic Park\"). The movie is based on chaos theory, and how one small event can affect the outcome of seemingly unrelated events, which all lead back to one event. The movie is a whirlwind of wondrous cause and effect, as we follow the chain of chaos as it intertwines between several characters (about 20?). In a way, the ending seems inevitable despite this, but if you think about it, it is a perfect ending. Think to yourself, \"what else needed to be said\"? It is at the same time a very brave ending. Too bad we have to go overseas for a gem like this one, but an ending like this would NEVER come out of Hollywood.

", "y": 1}, {"x": "It was clear right from the beginning that 9/11 would inspire about as many films as World War II and Vietnam combined; however, there is certainly a big danger that most of these films to come are about as good (or rather: bad) as Pearl Harbor. It is a great luck that the first international release about 9/11 is not a cheesy love story starring a bunch of pretty faces, but a collective work of 11 directors from the entire world.

I'm not intending to say that all 11 episodes are great (Youssef Chahine's, for example, has a needless prologue with too many cuts and Shohei Imamura's has a really bizarre ending) or that the segments are in the right order (Imamura's, being the only one not referring directly to the Twin Towers, should open the film, not end it, Alejandro Gonzales Inarritu's should be the last one instead, as it's the most impressive one). But it is an impressing effort and an interesting portrayal of the way other parts of the world react to the collapse of the twin towers.

Consider Samira Makhmalbaf's opening segment, in which an Afghan teachers tries to explain to her pupils what happened in New York and unsuccessfully suggests a one-minute silence. Or Idrissa Ouedraogo's part (which features a bin Laden-double so much resembling the real one that you'll be shocked when you see him, I promise), in which 5 boys muse about good things that can be done with the reward put out on Laden.

There's a surprisingly good (and extremely angry) segment by Ken Loach about a man from Chile talking about what he calls \"our Tuesday September 11\" - that September 11 in 1973 when their elected president Allende was killed and Pinochet installed his dictatorship - with the generous help from Henry Kissinger and the CIA. This could have become a terrible effort in Anti-Americanism, but it did become a sad tale and shares my recognition for the best segment with Inarritu's (mainly sound impressions and phone calls from the hijacked planes to a black screen, sometimes a few pictures of people falling down the WTC and finally a collapsing tower, ending with the screen brightening up and one question appearing) and Amos Gitai's about a hysterical reporter trying desperatly to get on air after a car bomb exploded in Tel Aviv (hard to recognize, but this one is a masterpiece of choreography).

All these different segments (I haven't mentioned yet Claude Lelouch's about a deaf girl, Danis Tanovic's about a demonstration of the Women of Srebrenica, Mira Nair's - strange, but it takes an Indian director to make the part that is probably most appealing to Western tastes - about a Muslim family whose son is under a terrible suspicion after 9/11 and Sean Penn's with Ernest Borgnine (yes, Ernest Borgnine) as a widower leading the most depressive life one can imagine) add up to a unique film not easy to watch and hard to forget. I am sure this film will be a classic known to everyone thirty years from now. I hope it will be remembered for starting a long tradition of world cinema movies. But, alas, it's far more probable it will be remembered as a one-film-only effort. And as the one of the few 9/11 movies made by then that don't reduce this terrible event to a love story with a happy end just to please the audience.", "y": 1}, {"x": "C'mon people, look at the title! LOL! I remember seeing this movie on Saturday Late Night Creature Features years ago. It's a great, cheesy monster flick with hilariously bad acting and two wonderfully moronic hillbillies that add to the schlock factor. The 2 redneck boat rental guys are the movie! LOL, and you'll love the boat scene where the English guy and his wife are talking about all the stars and it's midday and sunny. Bloody hilarious!!! You can tell they just didn't care about plot, they just wanted to blow through the filming of the movie as fast as possible. Bottom line, you'll love it if you love 70's schlock.", "y": 1}, {"x": "This is the kind of movie the US doesn't make. It's why people rent foreign films. It's a great story about how one person, even if he is retarded can make a person find reason in an empty life. Everybody can learn from Georges. It also shows how people that are mentally challenged suffer in their life and shows them in a very realistic way (I think). As its classic in foreign films this movie has a bittersweet ending, but that only makes it a better movie.", "y": 1}, {"x": "I'm a big fan of fan of film noir, and this film by Otto Preminger easily stands as one of the best that I've seen! Preminger has reunited two of his stars from the hit 'Laura' - Gene Tierney and Dana Andrews, for an entirely different sort of crime film. Laura was based around love, and this film is based around hate; as we watch police detective Mark Dixon, a copper already suffering scrutiny from his superiors for his heavy handed tactics, accidentally kill a suspect and try to pin the murder on a known criminal; a man by the name of Tommy Scalisi. The plot is brilliantly worked, and Preminger excellently balances several plot points; but it all comes back down to the main moral implication surrounding our main character. The fact that the film is set in the criminal underground means that the plot is given an excellent base to work from, and director Otto Preminger expertly captures the sleazier side of life by showing the main characters gambling, beating one another (and their women), shooting and more - and this also helps to offset the film from the earlier 'Laura', which was very much set in upper class society.

The role of Mark Dixon gives Dana Andrews one of the most interesting parts of his career. Here, we have a character that is difficult to like as he's so cold - but the fact that we can understand his motives ensures that he's easy to sympathise with, and that allows the audience the ability to plug into his plight. The character development is well timed, and as we've follows this character and his motivations throughout the film; everything makes sense by the end. His co-star is the beautiful Gene Tierney, who isn't given as much to do in this film as she was in Laura; a film that made Tierney its linchpin. She does well with what she's got, however, and the lead duo's chemistry is excellent and Tierney helps to complete every scene she's in. I can't say that this is a better film than the earlier Laura; that's a hard act to follow, but this film certainly fits into the film noir formula better than Preminger's earlier film. The film also makes a good comparison piece for Laura; as just about everything in this film is opposite to the 1944 movie, yet it's all strangely familiar. Highly recommended to all!", "y": 1}, {"x": "When I saw the trailers I just HAD to see the film. And when I had, I kinda had a feeling that felt like unsatisfied. It was a great movie, don't get me wrong, but I think the great parts where already in the trailers, if you catch my drift. It went very fast and it rolled on, so I was never bored, and I enjoyed watching it. The humor was absolutely great. My first contact with a sloth (..or something like it).", "y": 1}, {"x": "A mercilessly corny and painfully unfunny attempt to transplant the character of Sheriff Bart from Mel Brooks' Blazing Saddles into his own weekly sitcom, this is really as bad as some people say it is!

The laugh-track only serves to remind the unamused viewer what all in this supposed comedy is intended to be a joke and just how desperate for laughs it really is!

However, it is somewhat interesting to see Louis Gossett Jr. trying his best to impersonate Cleavon Little. His embarrassment shows through in every scene. He was much funnier in the HBO movie El Diablo than he was here in this slab of cheese!

Truly the best and funniest thing about Black Bart is the name of his horse!", "y": 0}, {"x": "Finally, an indie film that actually delivers some great scares! I see most horror films that come out... Theatrical, Straight-To-DVD, cable, etc... and most of them suck... a few are watchable... even fewer are actually good... Dark Remains is one of the good ones. I caught a screening of this film at the South Padre Island Film Festival... the audience loved it... and my wife and I loved it! Having no name actors, I assume the budget on this film was pretty low, but you wouldn't know it... the film looks fantastic... the acting totally works for the film... the story is good... and the scares are great! While most filmmakers focus solely on the scares, they often forget about story and character development, two things that help to deliver the scares more efficiently. Brian Avenet-Bradley must know that character and story are important. He develops both to the point where you care about the characters, you know the characters, and are therefore more scared when they are in danger.

Watching horror films that cost anywhere from $80 million to $5000 to make, I find \"Dark Remains\" to be one of the gems out there. Check this film out!", "y": 1}, {"x": "I watched this movie recently together with my sister who likes the performances of Sophia Loren. I'm a person who they call a Cultural Barbarian. I hate art in any kind of shape or form. Rambo is more my kind of movie, action, kills, blood, horror. If you recognize yourself in this avoid this movie like the plague. No one dies, no action, no nudity, nothing of the kind. Let me give you a r\u00e9sum\u00e9 in a few sentences. It starts out with 5 minutes in black and white Nazi propaganda. Every Italian in a housing block attends a parade in honor of Hitler, except for a housewife, an anti fascist and a caretaker. The housewife who is cheated by her husband, meets the anti fascist. She falls in love with him, wants to make love to him, but the anti fascist is gay. Despite of this they make love with each other. At the end of the day, the housewife reads a book from her gay lover, and the guy himself is deported by agents. The end. You want an even shorter r\u00e9sum\u00e9? BORING... That short enough? The guy should have used his gun in the beginning of this movie and shoot himself, to save the audience from this atrocity. On a side note my sister loved this movie. Like I said, I'm a Cultural Barbarian...", "y": 0}, {"x": "Spoiler below, but read on or you'll never know the horrible fate that awaits all planing to rent \"Rodentz\".

On a moonlit night, in a remote research laboratory, a major medical breakthrough is about to have deadly results. A chemical compound that was created to \"hunt and destroy\" deadly cancer cells has leaked from the hazardous waste disposal system into the building's basement. Now, the rodents involved in the laboratory experiment upstairs are not the only rats in the facility that will become the altered species. Professor Schultz, a leading bio-researcher, has just determined that the addition of a new enzyme now enables his \"hunt and destroy\" formulation to regenerate for the length of time necessary to neutralize deadly cancer tumors. When three varying degrees of the new mixture are administered to three different rats and the rest poured down the faulty \"Waste Hazard\" sink, shocking side-effects result in a night of terror.....right.....

Seriously, this is probably the worst film I've seen this year. Everything about it screams \"Low-budget!\", from the horrendous acting to the special effects which are some of the worst I've ever seen. The characters are clich\u00e9d morons and act in stupid, predictable ways: walking down dark hallways alone, looking for a cat, tripping and falling so the \"rats\" can catch up with them, boarding themselves up in a small room, etc.

While some films are cheaply made, this film really takes the cake. Every possible corner is cut, everything from reusing earlier shots, filming the \"Lab\" hallways from different angles to make it look bigger (That reminds me--why were only TWO guys working in this freakin' massive building?!?!?!?), to music and special effects that could be done on a children's workshop PC.

That brings me to the worst aspect of this steaming pile of dung--the special effects. Just horrendous. The computer generated rats look so fake and stand out in every scene so even the dumbest of film buffs could see they are computer generated. And that giant rat suit--OH MY GOD!!!!!!!! seriously, are we supposed to believe that freaking beany baby is a monster? Just pitiful........On the better side, some of the gore looks pretty cool, especially considering the budget.

The actors all suck. no one involved with the production cared or knew what they were doing. I've wasted enough time with review, just take my advice, it's garbage. 1/10.

About the DVD: The transfer sucks, the audio is passable and there's a commentary track on the disk by the director and two of his friends, who say they had absolutely nothing to do with making the film but were there to ask questions and make comments. All three of these sub-human primordial slime are so incredibly stupid that they should be institutionalized before they can harm themselves or others. I don't want to waste any more of you kind reader's time or mine, for I am starting to remember more than I want to about this film..... DVD rating: 1/10.", "y": 0}, {"x": "Taking old collection of stories poses a challenge for the production team, how can this classic character be brought up to date and make it interesting enough to capture a new audience while stirring memories from her former audience. In my opinion, their mission was accomplished. A must see for young children, pre-teens, teens, and their parents. OK there are a couple scary moments that are resolved in short order, but parents with young children should sit tight, the movie moves on to better things. I am going to go with those astute user reviewers who point out that Emma Roberts provides us with a positive role model for young women, not syrupy about it either. Nancy balances her femininity with career minded sleuthing skills. A lot to like in here, laughs, doesn't take itself too seriously, a real mystery to solve (one you can figure out yourself as an added bonus, and likable characters. Nancy Drew even makes a good date movie in my opinion.", "y": 1}, {"x": "I just watched this movie. In one word: sucky! The story is bad, the acting is, if possible, even worse. The movie has one or two nice moments, but thats it and having those two small good moments, doesn't make up for anything in between, before or after those moments. A montrocity of a movie, not even worth watching on tv...", "y": 0}, {"x": "I felt this film - throughout. I waas impressed with Russell Crowe's talent in developing his relationship with Lillie, such a typical Aussie blend of softly softly approach, a bit self depreciating and very persistent. Really loved the cinematography and direction. Pace was just right and the portrayals of nearly all characters was impressive.

Gosh, didn't Russell's talent even in 1993 shine! .. and I have yet to see Gladiator.", "y": 1}, {"x": "I think i watched this movie, but don't quote me, as i may have fallen asleep during watching it as it didn't exactly \"grip my excitement and imagination.\" At least i know i watched enough of it to know i won't be watching it again soon. Or ever.

Jeez, talk about lame... Really lame. Totally lame. It wouldn't even appeal to a six year old. It basically had NO worthwhile dramatic impact. Zilch. Nada. Just shlock turned into dreck. Comedy? That was supposed to be comedy? Ya coulda fooled me-ee-ee...!

Now, if the aliens had been insatiably carnivorous like in the movie \"Critters\", we could have had the human characters do something a little more profound than be overly smugly cutesy... like yelling and screaming and running for their lives so they wouldn't be eaten so the story could be something more exciting than watching paint dry.

Don't bother watching this. It's not worth the effort. You can find something more interesting to do. Like watching paint dry. Or falling asleep.", "y": 0}, {"x": "Stan Laurel and Oliver Hardy are the most famous comedy duo in history, and deservedly so, so I am happy to see any of their films. Basically a man at a horn factory is the fourth to crack, and soon enough Ollie cracks with all the horn noises. He is resting at home with Stan by his side, needing quiet, and the Doctor (James Finlayson) phones to say he is coming over to check on Ollie. After realising plumbing and electricity is muddled up by a cross-eyed repairman, the Doctor comes in for a check-up, and after some tests, he recommends drinking goat's milk and getting some sea air on the ocean. After Stan practises some trumpet playing, hanging out the window by the phone cord and a car crash, he and Ollie to a dock to rent a boat. They keep the boat on the dock trying to milk a goat, and Stan has brought his trumpet! Meanwhile, the newspaper's front page reads that Killer Nick Grainger - Escaped Convict (Richard Cramer) has escaped, and he sneaks onto the boys' boat while they are sleeping, and the goat chews through the boat rope, drifting out to sea. In the morning, the see their location, and the Killer comes out demanding something to eat, and he spots Stan and Ollie making fake food, e.g. string for spaghetti, soap for cheese, belt for bacon, sponge for meatballs, and he forces them to eat it. When Ollie starts choking on something, Stan blows his trumpet to help, and Ollie's rage gets him punching the Killer, and it keeps going till the police arrive, only to have Ollie's rage get them put in prison too. There were the tiniest moments of comedy, but it isn't a great black and white film. \"Well, here's another nice mess you've gotten me into!\" was number 60 on 100 Years, 100 Quotes, and Stan Laurel and Oliver Hardy were number 7 on The Comedians' Comedian. Okay!", "y": 0}, {"x": "This film got terrible reviews but because it was offbeat and because critics don't usually \"get\" offbeat films, I thought I'd give it a try. Unfortunately they were largely right in this instance.

The film just has an awkward feel too it that is most off putting. The sort of feel that is impossible to describe, but it's not a good one. To further confound things, the script is a dull aimless thing that is only vaguely interesting.

The immensely talented Thurman just drifts through this mess creating barely an impact. Hurt and Bracco try in vain to add something to the film with enthusiastic performance but there is nothing in the script. It may have been less embarrassing for them if they had merely chosen to drift and get it over with like Thurman.

One thing the \"esteemed\" film critics did fail to mention however is that the film is actually quite funny. Whether it be moments of accurate satire or some outrageously weird moments like when the cowgirls in question chase Hurt off their ranch with the smell of their unwashed...ahem...front bottoms.

Because of the chortles acheived throughout, while I wouldn't recommend this film, there is entertainment to be had and watching Even Cowgirls Get the Blues is worthwhile for something different.", "y": 1}, {"x": "A very early Oliver Stone (associate-)produced film, and one of the first films in the impressive career of Lloyd Kaufman (co-founder and president of the world's only real independent film studio Troma, creator of the Toxic Avenger and, at the prestigious Amsterdam Fantastic Filmfestival, lifetime-achievement awarded filmmaker for over 30 years). Having raised the money for this film on his own, Lloyd wrote this script together with Theodore Gershuni in 1970 and in hindsight regrets having listened to advice to have Gershuni else direct the film instead of doing it himself. But back then he was still inexperienced in the business and it is probably because of decisions like these that he takes no nonsense from anyone anymore. Indeed it would have been interesting to see Lloyd's version of his own script - as one of the world's most original, daring, experimental and non-compromising directors he probably would have given it even more edge than it already has. But as it is we have the Gershuni-directed film. And weather it is due to the strong script, or the fact that he too is indeed quite a director of his own, SUGAR COOKIES is a very intelligent, highly suspenseful and well-crafted motion picture that deserves a lot more attention than it receives. The shoestring budget the small studio (this was even before Kaufman and his friend and partner for over 30 years now, Michael Herz, formed Troma) had to work with is so well handled that the film looks a lot more expensive, indeed does not have a \"low budget\" look at all. The story revolves around lesbian Camilla Stone (played by enigmatic Mary Woronow) and her lover who winds up dead through circumstances I won't reveal not to spoil a delightful story. This leads to a succession of plot-twists, mind games and personality reform that is loosely inspired by Hitchcock's Vertigo and at least as inventive. The atmosphere is a lot grimmer, though, and some comparisons to Nicholas Roeg's and Donald Cammell's PERFORMANCE come to mind. In this mix is a very original and inventive erotic laden thriller that keeps it quite unclear as to how it is all going to end, which, along with a splendidly interwoven sub-plot with a nod to Kaufman's earlier and unfortunately unavailable BIG GUSS WHAT'S THE FUSS, makes for a very exciting one-and-a-half-hour. Certainly one of the best films in Troma's library, and yet again one of those films that defy the curious fantasy that their catalog is one of bad taste. The DVD includes some recent interviews Kaufman conducts with Woronov and the other leading lady Lynn Lowry (later seen in George Romero's THE CRAZIES), thus giving some interesting insight in what went on during the making of this cult-favorite and a few hints of what would be different had Lloyd directed it himself. Highly recommended.", "y": 1}, {"x": "I rented this movie on DVD without knowing what to expect - and as I am about to study film-making in Canada of all places, I most certainly will bring this up in class.

The story, centered around the probably most unlucky film team in the history of film itself, is brilliantly written and the very talented actors manage to deliver every single pun on time.

If you simply couldn't laugh during \"Hollywood North\" I suggest seeing a psychiatrist right away - you might have serious issues.

Besides the wonderful script I also noticed the great chemistry between actors Deborah Kara Unger and Matthew Modine - where they really just acting? Jennifer Tilly (playing a hilariously bad actress) and Martin Landau, also delivered a very edgy, yet funny performance.

Great film, even better cast.", "y": 1}, {"x": "This movie is a muddled mish-mash of clich\u00e9s from recent cinema. There are some promising ideas in there, but while the director was clearly aiming to wind up with a hauntingly ambiguous film, what he ended up with was a confusing mess. Lead actor Daniel Wu does a fair job but with no central theme it seems as though he doesn't have much to work with. Furthermore, the movie is largely devoid of scares (although, in fairness, there are some creepy moments amid the drudgery).

*MILD SPOILERS*

We have the mysterious death of an estranged twin, diabolical librarians, ghostly love interests, identity confusion, death by savage monkeys, oedipal conflict, abusive stepfathers, sublimated homosexuality, and crime gang connections. The only real commonality these elements share seems to be that they cause the protagonist to express a vague sense of confusion and discontent.

Perhaps the most disappointing aspect to this film is that despite the brother's death by monkeys being strongly featured on the DVD cover, the act itself is never directly portrayed. Instead, director Julian Lee uses what appears to be stock footage of monkeys - not very scary.

*END SPOILERS*

Avoid this one. For an excellent psychological, ambiguous horror tale, check out the Korean film A Tale of Two Sisters (2003).", "y": 0}, {"x": "The movie itself is not too bad; many comments have pointed out the obvious flaws of the script, but it is watchable. What really gives me the creeps though is that people like Justin Timberlake even get cast for movies, and on top of that for movies like this one. I have to admit I had never heard the man's name before watching this, but the very instant he appeared I was just plain annoyed. The voice is crap, the face is a bad rip-off of Legolas, the posture is horrible, and he cannot even properly coordinate all three of them. Said to say, I was delighted when he got jumped after leaving the disco, because I was hoping from then on it would be Morgan Freeman and Kevin Spacey only. Too bad I was wrong. These two and also LL Cool J give a very decent performance, and they are the main reason I give this a 4.

I see many upcoming movies with the little Timberlake cast... and cannot believe it.", "y": 0}, {"x": "Writing something genuine and true is challenging. Knowing how to shoot it and putting it together without making it trivial is even better. Ishai Setton's movie is one of those where you can recognize Life in all its simplicity and beauty. I have been touched by \"The big bad Swim\" and from now on, I will promote it as far as I can. It is just a shame that I can't have something to show to my friends (you know, such as a DVD???), because talking is good...but giving something to see is better. Everyone can't go to festivals to discover pearls like that and this movie's really worth to be put out there! A big THANK YOU to the staff of this master piece, and I am waiting for it to be distributed.", "y": 1}, {"x": "In the first Howling, we are introduced to a world where werewolves exist and are somewhat organized. The plot in that film made some sense; a TV reporter investigates this and attempts to uncover the truth. She ends up having to kill many of them including her boyfriend who becomes one. Then she shows the world that they do exist by transforming on live TV. The special effects were just laughable in the first movie and they don't get any better in this one. Whether it's the transformations or the bad puppets or the cheesy computer graphics showing the superpowers.

The plot line isn't all that bad; they must kill the leader of the werewolves for some reason. This won't destroy all werewolves and it really doesn't end the threat from werewolves as it...they just want to kill her. I think there was some cloudy reason for this but it really gets lost in the film.

After the film \"ends\" we have a 10 minute montauge of the movie we just watched and every other scene is one where the female werewolf leader rips off her top exposing her large breasts while some Devo-esquire band plays to a crowd of werewolves.

The only thing that makes this movie even watchable is Christopher Lee.", "y": 0}, {"x": "\"Still Crazy\" is without a doubt the greatest rock comedy of all-time. It has been erroneously compared to \"This Is Spinal Tap\", which it has no relation to. \"Spinal Tap\" is a satire (and, quite frankly, not a very good one, in spite of it's \"outing\" of many rock clich\u00e9s). Unlike \"Tap\", \"Still Crazy\" is populated by great actors, great songs and great human situations. You CARE about the people in \"Still Crazy\". That's all that matters. Oh, yeah, the music's pretty damn good, too, written by Mick Jones of Foreigner and Chris Difford of Squeeze. American audiences were already familiar with Stephen Rea (The Crying Game), but would only later become familiar with Bill Nighy (Underworld, Love Actually, Pirates Of The Caribbean II) and Timothy Spall (the Harry Potter movies).", "y": 1}, {"x": "I've just had the evidence that confirmed my suspicions. A bunch of kids, 14 to 22 put on the DVD of \"Titanic\" on a fantastic state of the art mega screen home entertainment type deal. Only two of them had actually seen it before. But they all had seen the moment of Kate, Leo and Celine Dion so many times that most of them felt they had seen the whole movie. Shortly after the epic started, they started to get restless, some of them left asking the others -- \"call us when the iceberg appears\" Over an hour and a half into the movie, only the two girls who had seen the movie before, were still there. They started shouting: iceberg, iceberg. A stampede followed, they all came back to see the sinking of the Titanic. They sat open mouthed, emitting Ohs and far outs. So, just like I thought when the movie first burst into the scene. What is this? One and a half hours waiting for the bloody thing to sink but what about the rest of the of it. Dr. Zivagho, for instance, had a similar running time, but think how much takes place in that film within the same period of time. In \"Titanic\" Leo teaches Kate how to spit. Look at the faces and hands of the, supposedly, creme de la creme in the first class dining room of the ship. Look at the historical details, if you can find them. The storyline is so thin that they have to introduce guns and shootings in a ship that is about to sink. The real sinking here is of film standards. All the efforts are focus on special effects and opening week ends. The film went on to become the highest grossing movie of all time so, what do I know?", "y": 0}, {"x": "Summer Holiday is the forgotten musical version of Eugene O'Neill's Ah Wilderness and deservedly so with the Broadway musical adaptation of Take Me Along. With the exception of the Stanley Steamer song, none of the other Harry Warren-Ralph Blane songs are worth remembering and even that one is questionable.

It was right after the release of this film that MGM let Mickey Rooney go and I don't think it was a coincidence. The film was made in 1946 and released in 1948, so Mickey was 26 playing an Andy Hardy like teenager. He was just way too old for the part of the 17 year old who was affecting radical ideas in a spirit of youthful rebellion.

Rooney made four films for MGM from 1946 to 1948, this one, Killer McCoy a remake of Robert Taylor's A Crowd Roars, Love Laughs at Andy Hardy and Words and Music. In all of them Rooney was playing an adult part. Even in the Andy Hardy film, Mickey played an adult Andy Hardy returned from World War II. Why he was in this Louis B. Mayer only knows.

Rooney's bad casting makes Summer Holiday all the worse because in the original Ah Wilderness the emphasis is on the father's character played here by Walter Huston. And in the Broadway show Take Me Along which won a Tony Award for Jackie Gleason, the Great One played the inebriated brother-in-law Uncle Sid here played by Frank Morgan and that's the central character.

Gloria DeHaven steps in for Judy Garland as Rooney's sweet and adorable girl friend and Marilyn Maxwell plays the show girl who gives Rooney an adult education. In the original play O'Neill has her as a prostitute, but this was the Hollywood of the Code so all Marilyn does is get young Rooney soused.

A lot of really talented people had a hand in this one and they do their best, but Summer Holiday fades rather quickly into a chilly autumn.", "y": 0}, {"x": "A worn-out plot of a man who takes the rap for a woman in a murder case + the equally worn-out plot of an outsider on the inside who eventually is shut out.

With such an outstanding case, one would think the film would rise above its hackneyed origins. But scene after scene drones by with no change in intensity, no character arcs, and inexplicable behavior.

The homosexuality theme was completely unnecessary -- or on the other hand, completely unexplored. It seemed to be included only to titillate the viewers. When will Hollywood learn that having gay characters does not automatically make a more compelling picture?

A regrettably dreadful movie. When will Lauren Bacall pick a good one? I expected better of her and Kristin Scott Thomas. This one is definitely one to miss.", "y": 0}, {"x": "I'm trying to picture the pitch for Dark Angel. \"I'm thinking Matrix, I'm thinking Bladerunner, I'm thinking that chick that plays Faith in Angel, wearing shiny black leather - or some chick just like her, leave that one with us. Only - get this! - we'll do it without any plot, dialogue, character, decent action or budget, just some loud bangs and a hot chick in shiny black leather straddling a big throbbing bike. Fanboys dig loud bangs and hot chicks in shiny black leather straddling big throbbing bikes, right?\"

Flashy, shallow, dreary, formulaic, passionless, tedious, dull, dumb, humourless, desultory, barely competent. Live action anime without any action, or indeed any life. SF just the way Joe Fanboy likes it, in fact. :(", "y": 0}, {"x": "A very enjoyable film, providing you know how to watch old musicals / mysteries. It may not come close to Agatha Christie or even Thin Man mysteries as a film noir, but it's much more interesting than your typical \"boy meets girl\" or \"let's put on a show\" backstage musical. As a musical, it's no Busby Berkley or Freed unit, but it can boost the classic \"Coctails for two\" and the weird \"Sweet Marijuana\". The film runs in real time during a stage show, opening night of the \"Vanities\", where a murder - and soon another - is discovered backstage. Is the murderer found out before the curtain falls? Sure, but the search is fun, even though somewhat predictable and marred by outbursts of comic relief (luckily in the shape of the shapely goddess of the chorus girls, Toby Wing). The stupid cop is just a bit too stupid, the leading hero is just a bit too likable, the leading lady a bit too gracious, the bitchy prima donna bit too bitchy, and the enamoured waif a bit too self-sacrificing, but as stereotypes go, they are pretty stylish. There's a bevy of really gorgeous chorus girls, who are chosen even better than the girls for a Busby Berkley musical of the same period, who sometimes tend to be a bit on the plump side. Yes, this film could have been much better than it is, and the Duke Ellington number is an embarrassment, but if you enjoy diving into old movies, this will prove to be a tremendously tantalizing trip.", "y": 1}, {"x": "Christopher Guest need not worry, his supreme hold on the Mockumentary sub-genre is not in trouble of being upstaged in the least especially not by this extremely unfunny jab at RPG-gamers. The jokes are beyond lame. Not enough substance to last the typical length of a (particularly rancid) SNL skit, much less the 87 atrocious minutes I waisted watching this drivel. The great William Katt (Greatest American Hero, House) deserves much MUCH better. One thing and one thing alone makes the fact that I saw this worth it in my mind and that's posting about it on here so hopefully just hopefully I'll save someone such a bad experience.

My Grade: D-

DVD Extras: 2 Audio commentaries; 7 interviews with various cast members; 4 deleted scenes; & theatrical trailer

DVD-Rom extras: 2 Wallpapers

Easter egg: Highlight the eye in the picture on the main menu for a short scene", "y": 0}, {"x": "The Underground Comedy Movie, is possibly the worst train wrecks I've ever seen. Luckily I didn't pay for this movie, and my friend reluctantly agreed to watch it again siting that it was so awful but he needed to prove to me how awful it was. I love off color comedy. I figured at the least it would have that and I would be entertained. No, instead the acting was so awful, the \"jokes\" were extremely cheesy, and the plot was no where to be found. Maybe there wasn't supposed to be a plot so I can't hold that against this movie. It's pretty sad where the funniest thing in a comedy is an old woman having her head hit off by a bat.....by Batman...A man dressed in a baseball uniform wielding a bat. Hilarious. Simply genius. I got the feeling watching this movie that its creators made it and laughed hysterically with their friends about it. Perhaps this was full of inside jokes we just didn't understand. Or perhaps it's the worst piece of trash ever made and it should be locked away in a vault and dumped in the Arctic Ocean.

P.S. Don't buy this movie!", "y": 0}, {"x": "MY EYES! IN THE NAME OF GOD AND ALL THAT IS HOLY MAKE ME UNSEE THIS MOVIE! what drugs are you people on! this could very well be the worst movie ever! i felt like i was on a bad acid trip the whole time, i need to call a therapist to help me deal with the trauma of this epic disaster. From start to finish glow ropes is an unholy masterpiece of satanic cinema. when i thought to watch this movie with my Jewish best friend and his family we thought \"oh hey, this may be funny! it will probably be bad but still a little funny\" how wrong we were, we were not prepared for how awful this movie could be. All of my friends lined up for lobotomies as soon as the film was over, and during the course of the movie, one of my friends attempted to hang himself with his belt while another tried to slit his wrists with a wooden spoon. I wish I had watched the video from The Ring instead, that way the pain and suffering would be over in only seven short days. For all who wish to see this movie, YOU ARE NOT PREPARED! you may think you are some sort of \"tough guy\" by renting this but this movie will break you, push you to the ground and urinate on you.", "y": 0}, {"x": "(Honestly, Barbra, I know it's you who's klicking all those \"NO\"s on my review. 22 times?? How many people did you have to instruct to help you out here? Don't you have anything better to do, like look at yourself in the mirror all day?)

Steven Spielberg told Barbra that this was \"the best movie I've seen since 'Citizen Kane'\". That pretty much says it all - and serves as a dire warning!

What are the ingredients for a sure-fire cinematic disaster, and one that will haunt you, never letting you forget the tears of both laughter and pain? The ingredients: Barbra Streisand's face, a musical, feminism, Barbra Streisand's voice, Barbra Streisand directing, and an ultra-corny/idiotic premise.

Hollywood is full of egomaniacs, this much we know. In fact, nearly everyone \u0096 by definition \u0096 has to be an egomaniac in Hollywood. Why would anyone want to act? For the \"art\"?!? Well, if you're dumb enough to believe what they tell you in their carefully prepared interviews\u0085 And Streisand has the biggest ego of them all! This is quite an achievement. To be surrounded by narcissistic cretins, and yet to manage to top them all \u0096 remarkable.

The movie, like all her \"solo\" endeavors, is an ego trip straight out of hell. Every scene Streisand is in is automatically ruined. Stillborn. But as it that weren't enough, she sings a whole bunch of Streisandy songs \u0096 you know, the kind that enabled the Mariah Careys, the Celine Dions, and the Whitney Hustons of this world to poison our precious air-waves for decades now. Just for that she deserves not one but 100 South Park episodes mocking her.

The premise, Streisand dressing up as a man to study to become a rabbi, sounds like a zany ZAZ comedy. Apart from it being a clich\u00e9, the obvious problem is that Streisand doesn't look like a woman nor does she look like a man \u0096 in fact I'm not even sure she's human. The way she looks in this movie, well\u0085 it cannot be described in words. E.T. looks like a high-school jock by comparison. She looks more alien than Michael Jackson in the year 2015. She looks HORRIBLE.

The songs. They made me shiver. Particularly \"Papa Can You Hear Me Squeel Like A Demented Female Walrus In Heat?\" and \"Tomorrow Night I'll Prepare the Sequel, YENTL 2: THE RETURN OF THE BITCH\".

Did you know that Streisand considered having a nose-job early on in her career, but changed her mind when they told her her voice might change? Can you believe that? She should have done it! Killing two flies with one swipe, that's what it would have been.

If you're interested in reading my biographies of Barbra Streisand and other Hollywood intellectuals, contact me by e-mail.

SHOULD BARBRA STREISAND FINALLY GO INTO RETIREMENT? CLICK \"YES\" OR \"NO\".", "y": 0}, {"x": "Arguably this is a very good \"sequel\", better than the first live action film 101 Dalmatians. It has good dogs, good actors, good jokes and all right slapstick!

Cruella DeVil, who has had some rather major therapy, is now a lover of dogs and very kind to them. Many, including Chloe Simon, owner of one of the dogs that Cruella once tried to kill, do not believe this. Others, like Kevin Shepherd (owner of 2nd Chance Dog Shelter) believe that she has changed.

Meanwhile, Dipstick, with his mate, have given birth to three cute dalmatian puppies! Little Dipper, Domino and Oddball...

Starring Eric Idle as Waddlesworth (the hilarious macaw), Glenn Close as Cruella herself and Gerard Depardieu as Le Pelt (another baddie, the name should give a clue), this is a good family film with excitement and lots more!! One downfall of this film is that is has a lot of painful slapstick, but not quite as excessive as the last film. This is also funnier than the last film.

Enjoy \"102 Dalmatians\"! :-)", "y": 1}, {"x": "This movie surprised me! Not ever having heard of Hyde of Gackt I was not expecting much! The reason I wanted to watch this movie was because somebody mentioned that the movie contained some serious action scenes in John Woo style! Normally I am very careful when this is claimed! There is only one John Woo and til this day there hasn't been one director that comes close to his brilliance when it comes to action! The fact that \"Moon Child\" would feature a vampire convinced me even more! How can you go wrong with gun blazing vampires! Sounds promising and interesting! The first thing I noticed about this movie that the pace was considerably slow! It takes it's time to set the mood! This movie contains some nice Hong Kong style action scenes! But \"Moon Child\" isn't an action movie! It is a drama about friendship and loyalty! The focus is on the characters and their relation to each other! The pop singers Hyde and Gackt do a good job in acting and are very believable as friends! The only problem I had was with the plot! A couple of times the movie seems to skip a few years without explaining what happened and why they had to skip! Example:When one member of the gang dies (very dramatic moment) Alexander Wang sees Kei (Hyde) drinking blood of one of the attackers! Without warning and explanation the movie skips 9 nine years and most of the friends aren't together anymore! Also without a proper reason given Son (Alexander Wang) and Sho (Gackt) have to kill each other! I know that this is done to add some serious drama! Because of the actors it is very effective but sometimes it does feel forced! Apart from the flaws in plot this movie has an ambiance and slickness that makes it hard not to like this movie! It is hard to explain why this movie is wonderful! But it just is! The overall experience you get is heartwarming and sincere!", "y": 1}, {"x": "Beyond the excellent direction,production,acting & the predictable drama lies an essential message in the script:

\"Listening leads all the way\" In order for the voice to flourish,listen.To harmonise with other in voice,listen. In order to approach yourself,listen.To discover the needs of any situation or others,listen. It appears that the script writers are conveying a \"life's secret\".Listening leads to an awareness of one's Self. It awakens the other senses, especially vision & expands the horizon.One's soul too can be discovered. The artistry of this movie \"As it is in Heaven\" magnificently displayed the unfolding of life,not only its joy & sadness,but ultimately the hope of life. All this by the leading character's first instruction to the choir;

\"Just Listen,it leads all the way\"", "y": 1}, {"x": "Three giant sabretooth tigers(..created in a laboratory from mitochondrial DNA, a \"genetic breakthrough\" derived from fossil material)are on the rampage accidentally set free through a series of events(such as a computer geek's introduced virus in order to unlock security measures keeping the resort novelty shops closed during construction & a security guard's leaving a gate open while searching for the missing page from a porn mag that flew away in the breeze)that threaten the lives of those it comes in contact with. The tigers are always hungry, but are unable to digest what they eat. So pretty much the tigers just rip their prey to shreds. Victims include a group of college kids(..the stereotypes include a goth girl, jock and tech nerd), security personnel, and those somewhat developed rich scoundrels who we can easily despise and wish horrible death.

Rounding out a series of bad sci-fi channel flicks, Attack of the Sabretooth has some of the most wretched computer simulated animals I've seen yet. And, the final death sequence is so putridly presented, you'll demand within the deepest recesses of your soul the time spent on this truly awful exercise in the creature feature canon. There's some good dark humor deriving from heads being torn from necks, but even here the prosthetic work is unconvincing. Prosthetic body parts and blood aplenty as victims are pounced upon, crying for help and receiving none. I'm starting to sound like a broken record, repeating myself in every user comment I write for these sci-fi channel flicks. I think maybe it's time to move on to other kinds of cinema. Robert Carradine has a role as a ruthless businessman who is being wooed by his truly repellent ex-brother-in-law, Nicholas Bell, the one opening \"Primal Park\", a resort / zoo featuring genetically created sabretooth tigers as it's major attraction. Stacy Haiduk, still quite yummy, is a security officer who attempts to convince Bell to get the investors he hopes to goad into putting money in his multi-million dollar project to leave the island. Brian Wimmer is Haiduck's lover and his role is a mechanic keeping operations running smoothly.

Bell's fate at the end, resulting from a dislodged tooth from a sabretooth tiger statue is the pits. Carradine spends a great deal of the film taunting Bell, his arch nemesis. The tiger's point-of-view shows humans in a bright color as it moves towards them. The film ultimately consists of characters walking through darkened corridors(..the tech nerd's virus cut off the power)worried for their safety. The college kids commit breaking and entering to score certain items needed(..it's a scavenger hunt type of activity)to enter a fraternity / sorority. The cast playing these kids do not rise above their clich\u00e9s.", "y": 0}, {"x": "I wait for each new episode, each re-run with anticipation! The new look of sci-fi created by Stargate SG-1 is a wonder that I hope will never end. To combine the past with the future is a new twist that is fascinating to me. Season #9 should be a thrill in itself. I wish that Richard Dean Anderson would show up more often in the new season, as I love his dry wit as much as his temper tantrums in his character as Jack O'Neill. The other characters add their own uniqueness to the show that makes it a winner, season after season. You cancel this program in the next three years, and you make a serious mistake. Also, you need a bigger role for the Asgard - they are just too cool.", "y": 1}, {"x": "that kid a is such a babe; this movie was no Titan A.E.(of which it is in many ways modeled after) but still came off as entertaining, the fact this lost to a piece of monkey crap like Tomb raider makes wanna cry; includes some of the most entertaining characters i've seen in disney film", "y": 1}, {"x": "As a lifelong fan of Dickens, I have invariably been disappointed by adaptations of his novels.

Although his works presented an extremely accurate re-telling of human life at every level in Victorian Britain, throughout them all was a pervasive thread of humour that could be both playful or sarcastic as the narrative dictated. In a way, he was a literary caricaturist and cartoonist. He could be serious and hilarious in the same sentence. He pricked pride, lampooned arrogance, celebrated modesty, and empathised with loneliness and poverty. It may be a clich\u00e9, but he was a people's writer.

And it is the comedy that is so often missing from his interpretations. At the time of writing, Oliver Twist is being dramatised in serial form on BBC television. All of the misery and cruelty is their, but non of the humour, irony, and savage lampoonery. The result is just a dark, dismal experience: the story penned by a journalist rather than a novelist. It's not really Dickens at all.

'Oliver!', on the other hand, is much closer to the mark. The mockery of officialdom is perfectly interpreted, from the blustering beadle to the drunken magistrate. The classic stand-off between the beadle and Mr Brownlow, in which the law is described as 'a ass, a idiot' couldn't have been better done. Harry Secombe is an ideal choice.

But the blinding cruelty is also there, the callous indifference of the state, the cold, hunger, poverty and loneliness are all presented just as surely as The Master would have wished.

And then there is crime. Ron Moody is a treasure as the sleazy Jewish fence, whilst Oliver Reid has Bill Sykes to perfection.

Perhaps not surprisingly, Lionel Bart - himself a Jew from London's east-end - takes a liberty with Fagin by re-interpreting him as a much more benign fellow than was Dicken's original. In the novel, he was utterly ruthless, sending some of his own boys to the gallows in order to protect himself (though he was also caught and hanged). Whereas in the movie, he is presented as something of a wayward father-figure, a sort of charitable thief rather than a corrupter of children, the latter being a long-standing anti-semitic sentiment. Otherwise, very few liberties are taken with Dickens's original. All of the most memorable elements are included. Just enough menace and violence is retained to ensure narrative fidelity whilst at the same time allowing for children' sensibilities. Nancy is still beaten to death, Bullseye narrowly escapes drowning, and Bill Sykes gets a faithfully graphic come-uppance.

Every song is excellent, though they do incline towards schmaltz. Mark Lester mimes his wonderfully. Both his and my favourite scene is the one in which the world comes alive to 'who will buy'. It's schmaltzy, but it's Dickens through and through.

I could go on. I could commend the wonderful set-pieces, the contrast of the rich and poor. There is top-quality acting from more British regulars than you could shake a stick at.

I ought to give it 10 points, but I'm feeling more like Scrooge today. Soak it up with your Christmas dinner. No original has been better realised.", "y": 1}, {"x": "What we have here is a downright brilliant piece of early 80's incompetence that will render even the biggest connoisseur of trash- cinema completely speechless! \"Wizards of the Lost Kingdom\" is a very cheap and cheesy fantasy/Sword-and-Sorcery adventure that doesn't have an actual plot but does eagerly & shamelessly borrows elements from other films. Writer Ed Naha and Hector Olivera (who?) watched enough similar type of movies to know that they needed a handful of essential characters, but probably figured that all the rest would follow automatically. In order to make a fantasy-adventure you need: one super- evil villain (preferably with a black cape), one young hero in training, one lone warrior, one amiable type of furry pet, one wise midget living in the woods (optional) and a whole colorful collection of hideous demons, enslaved dwarfs, and winged gargoyles to serve as filler. The story is phenomenal and so original, with Simon the young son of a wizard having to flee from his beloved kingdom after the evil magician Shurka takes over the power and killed the king. Simon wants to go back and save the people, but therefore he needs his powerful ring which he lost during his escape. Simon befriends lone warrior Kor (the usually cool dude Bo Svenson who clearly needed the pay check), who assists Simon during the long and devastating journey full of ordeals, dangerous encounters and magical showdowns. Admittedly it doesn't even sound too bad thus far, but that's merely just because I excluded all the deliciously inept little details. Simon has a best friend named Gulfax, for example. Gulfax is an albino version of Chewbacca and evokes incontrollable chuckles whenever he opens his poodle-snout to yelp something incomprehensible. The obstacles during journey back home are hilariously irrelevant to the \"plot\" and simply serve as padding footage to cover up the lack of actual content. Simon has nightmarish visions inside the tent of a suspicious forest nymph, Kor settles an old score with the pig-faced nemesis whose sister he refused to marry and there's the supposedly horrible 'suicide cave' where you can only sing your way out of. But the absolute most unequally brilliant sequence \u0096 not just of this film alone but in the history of cinema \u0096 involves the resurrection of four zombie warriors. Simon awakes the legendary courageous warriors, hoping they will assist them in their battle, but the rotting corpses only take a few steps, complain about how tired they are and return back to their graves. That's it! So much for the zombie sub plot! Best sequence ever! I could go on listing unintentionally hilarious little details for several more paragraphs, but you get the idea. \"Wizards of the Lost Kingdom\" is a tremendously messed-up \"so-bad-it's-good\" film. Word of advice: do not watch this joyful piece of junk alone. Invite friends, preferably the dope-headed types with a wicked sense of humor, and watch it in group. It will be a night to remember\u0085", "y": 0}, {"x": "A must for any punk rocker, this is the movie that made The Ramones a household name back in the early 1980's (when it first appeared on premium cable stations). This was one of the first and best of the American Punk Rock movies, with a cult classic status up there with The Rocky Horror Picture Show. Originally the producers wanted Cheap Trick as the stars, but the release of the \"Live At Budakon\" album had just made them superstars and too hot an item to be in a low budget movie. Very good luck for the Ramones who were looking to break out of the underground punk rock world and into the mainstream market (which sadly never happened until after the bands demise). The band, Dee Dee especially, always disliked the movie through the 80's but the fans always loved and could recite most of the movie while waiting to get into Ramones shows. This movie, like most classics, is stupid fun with some classic Ramones footage in their heyday. Don't expect more, you won't find it. It's great fun, so enjoy it. Another Allan Arkush classic movie in a similar vein is Get Crazy, featuring Lee Ving from the legendary hardcore punk band Fear.", "y": 1}, {"x": "This film features Ben Chaplin as a bored bank employee in England who orders a mail order bride from Russia, recieves Nicole Kidman in the mail and gets more than he bargained for when, surprise, she isn't what she appears to be. The story is fairly predictible and Chaplin underacts too much to the point where he becomes somewhat anoying. Kidman is actualy rather good in this role, making her character about the only thing in this film that is interesting. GRADE: C", "y": 0}, {"x": "Until today I had never seen this film. Its was filmed on the sets of the Old Dark House and Frankenstein and concerns a small Bavarian village where supposedly giant bats are sucking the blood of the villagers.

Frankly its a damn good movie that has atmosphere to spare and a cast that won't quit, Lionel Atwill, Dwight Frye, Faye Wray and Melvin Douglas playing a character named Brettschnieder which is of interest to me since that was my great grandmother's maiden name.

This is a carefully modulated film that has suspense and witty one liners that slowly builds for its brief running time, only going astray when about ten minutes before the end they realized they had limited time to wrap everything up. From that point to the end its a straight run to the finish with very little of the fun that preceded it.

Leonard Maltin and IMDb list a running time of 71 minutes and warn of shorter prints. The trouble is that IMDb and Maltin can be wrong, and in this case I think they are since a source I trust more says the full running time is 67 minutes (The Overlook Film Encyclopedia) Quibbling about this I know is insane but since most prints that are available tend to run around 60-63 minutes the amount of missing material is considerably less if its only 67 minutes long. Personally I think it won't matter that much since its at most five minutes and I doubt very much it will make or break the film.

What ever the running time , if you like creaky old films, do, by all means do, watch this movie, its a great dark and stormy night film.", "y": 1}, {"x": "Oh my god, what a horrible film. The film has all the right people involved, unfortunately it is not worth watching. I saw it for free at my local library. If I had paid to watch this I would be even more upset. This film is unwatchable. How could Tarintino be involved with such a slow paced, unexciting film. No wonder it didn't get much distribution, every one involved must have been ashamed. I can make a better film with a Dated Camcorder and my Big toe. Its beyond boring, I really hated it. Tarintino just lost some standing in my eyes. This must be some kind of sick joke. Don't Bother with this film. If some one even hints you should watch it, kill them.", "y": 0}, {"x": "Following their daughter's brutal murder,Julie and Allen escape the city to find solace and grieve in a solitary cabin on a remote mountain.Allen's intentions are good,he wants his wife to get out of her depression by resuming her photography.Julie stumbles across an ancient prison and sees the perfect creepy,decaying setting for her photography.But when the photos are developed they are full of dead people-and Allen quickly discovers the tragic history of suicide in their new mountain.\"Dark Remains\" is a pretty decent indie horror flick.It offers some genuine scares and plenty of tension.The acting is fairly good and the cinematography is great.7 out of 10.", "y": 1}, {"x": "Deliverance is John Boorman's 1972 horror/thriller movie about a group of four Atlanta businessmen (Burt Reynolds, Jon Voight, Ned Beatty and Ronnie Cox), that undertake a canoe trip down the Cahulawassee River before the river is dammed. Along the way, a raft (no pun intended) of unpleasant things happen to the men. Despite the nasty happenings in this picture, Boorman captures the natural beauty of the river nicely. The location was really chosen well. Indeed, this would still be a very nice film to watch, had the canoe trip gone smoothly. The lush forests and gentle landscape only make the horror more horrible. Not only is the location scenic, but also beautifully shot thanks to cinematographer Vilmos Zsigmond. It has been said that Burt Reynolds' performance as the outdoorsman, Lewis, is the star acting role in this film. I reckon however, that Jon Voight steals the show with his role as the suburban family man, Ed, who is rapidly forced to change his demeanour in order to survive. In fact, the scene in which climbs the cliff was not a stuntman. It was Voight himself. To cut costs the filming wasn't insured and the actors did their own stunts. The soundtrack is particularly noteworthy. Eric Weissberg's and Steve Mendel's performance on guitar and banjo as part of the Duelling Banjos sequence remains one of the most awesome pieces of soundtrack in the history of cinema for the sheer intensity of its performance. At a couple of other points in the movie, we are treated to more, softer, banjo music which provides a very pleasant accompaniment to the trip down the river For all the good points of this film, I did find it a little lacking in purpose. It doesn't build suspense very well and it isn't really as gruesome as we have been led to believe. The plot itself is somewhat poor and it doesn't really go anywhere. Nevertheless, this movie has enough good points to get my recommendation. I did like it but for fans of gore, there isn't really much of it. None really, in fact. It isn't so much a horror film as an adventure film that turns a little bit sour. Think of it like Rambo: First Blood meets Three Men In A Boat. Look out for a very young Charley Boorman as Ed's son. I did like this movie, the soundtrack, cinematography and acting earns it a well deserved 7 out of 10.", "y": 1}, {"x": "This apology for a movie is about absolutely nothing! Rachel Griffiths must have needed the money. The film must have been made on a very low budget, because the lighting was non existent. I made a vow if I ever see Pete Postlesumthingor other I'll commit suicide. I'd be happy to know if there was 1) a plot or 2)a script. My biggest regret is I wasted my time watching this rubbish.", "y": 0}, {"x": "My brother is an avid DVD collector. He took one look at the cover (two models on toilets) and had to add it to his collection. I stayed up with him to watch what turned out to be likely the most cringeable movie (I use that term loosely) I've felt obligated to sit through. I dared not make eye contact with my brother, quite certain he must have been cursing the receipt in his clenched fist. The biggest name in the whole movie is Michael Clark Duncan who appears in one scene, which the \"filmmaker\" decided to show every take of (about four total) throughout the movie. In fact, the whole movie pretty much follows this suit. The fact that the DVD contained deleted footage was a shock. (I went to bed without viewing it, however). To no surprise at all, I found this disc without its case behind the TV about a week later.", "y": 0}, {"x": "[CONTAINS SPOILERS!!!]

Timon and Pumbaa are watching The Lion King. Timon decides to go back BEFORE the beginning, to when the story really began. So they go back. Way back. Back even before Simba was born. Back to Timon's old home which was miles away from Pride Rock. A clan of meerkats burrowed underground to hide from hyenas. The worst digger in the clan was a pompous, self-centered meerkat named Timon. His mother took pity on him but Uncle Max just shook his head. Mother suggested putting Timon on sentry duty; Timon had dreams of a bigger and better place out there somewhere. Just then, hyenas Shenzi, Bonzai and Ed arrived and nearly killed poor Uncle Max. That did it. The other meerkats just wanted Timon to go away while Timon took it upon himself to leave. So he kissed his mom goodbye and started off. He didn't get very far before he started getting homesick. Just then he met Rafiki, who taught him to look beyond what he sees. Timon had no clue what that meant so he continued on and met a warthog named Pumbaa, who was all alone due to a flatulence problem. Timon and Pumbaa join up then, but Timon declared them acquaintances, rather than friends.

They soon arrive at Pride Rock where all the zebras, antelopes, wildebeests, rhinoceroses, giraffe's, elephants and many other plain animals had gathered. What was going on? Timon didn't care. They pressed on. Timon then saw Rafiki atop Pride Rock lifting into the air something he couldn't see. Just then all the animals took a bow. Was this to honor the birth of the new king? No, Pumbaa had passed gas and the animals were bowing to cover their noses; Timon and Pumbaa try an assortment of new homes, but each are discomforting due to incessant singing or hyenas or a large stampede of wildebeests! Pumbaa and Timon suddenly find themselves heading down stream. When they reach land, Timon decides to give up. But then they gaze around at their newfound paradise. It was beautiful: trees and water falls as far as the eye could see. Timon named the place after a strange phrase he learned from Rafiki: Hakuna Matata. Timon and Pumbaa go out bowling for buzzards one afternoon when they suddenly run into Simba. They take him under their wing and become father figures. They teach him the arts of bug eating and belching contests. Pretty soon, a teenage Simba takes on Timon in a snail slurping contest. Simba won, leaving Timon deathly ill.

Then one day, Simba's childhood friend Nala arrived. Timon and Pumbaa just knew she'd break up the friendship. Suddenly, Simba runs away. Nala and Pumbaa race after him, but not Timon. He chose to stay at \"Hakuna Matata\" by himself, until Rafiki \"talked\" some sense into him, so he joins his friends at Pride Rock. Timon's mother and Uncle Max arrive then. While Simba battles Scar, Mother and Max dig a large hole to trap hyenas Shenzi, Bonzai and Ed in. It worked. Scar is soon flung down the same hole where he is devoured by the hyenas. Then all is well. Mother, Uncle Max and the rest of the meerkats go live with Timon and Pumbaa in the paradise that is Hakuna Matata. Back to the present, Timon and Pumbaa finish the movie when suddenly Mother, Uncle Max, Simba and Rafiki want to watch it again. So do Mickey Mouse, Donald Duck, Goofy, Snow White, the Seven Dwarfs, Dumbo, Peter Pan, the Lost Boys, Mad Hatter, March Hare, Genie, Aladdin, and Jasmine.

Well, I must say that The Lion King 1 1/2 wasn't as good as I had hoped. It was too ridiculous and silly. The original Lion King was a masterpiece. It had a serious story with light comedy thrown in. This one was just silly and made a mockery of it. I swear, sometimes Timon and Pumbaa are just way too overplayed. They're overplayed to the point of no longer being funny, just annoying. The original voice cast is back: Nathan Lane as Timon, Ernie Sabella as Pumbaa, Matthew Broddrick as Adult Simba, Whoopi Goldberg as Shenzi, Cheech Marin as Bonzai, Jim Cummings as Ed, Robert Guillame as Rafiki. New to the cast are Julie Kavner of TV's (Too) long running series The Simpsons as Timon's mom and Jerry Stiller as Uncle Max. So anyway, this movie isn't The Lion King III, and it isn't II because there already is a II. It takes place right after Part I and Part II is a ways away. Hence, it's 1 1/2. In conclusion, I don't recommend this to die hard Lion King fans because it's far too ridiculous and frivilous. However the kids will love it so I recommend it to them. I hope this will also be the LAST Lion King movie. Two is enough. \"The Lion King 1 1/2\". What we've come to expect from Disney sequel makers.

-", "y": 0}, {"x": "MYSTERY MEN has got to be THE stupidest film I've ever seen, but what a film! I thought it was fabulous, excellent and impressive. It was funny, well-done and nice to see ridiculous Super Heroes for a change! And being able to pull it off! This was great! I'll definitely watch it again!", "y": 1}, {"x": "Geez, another Lifetime movie, but once again isn't exactly the worst movie in the world, but far from the best. I think the main problem is that it's pretty obvious who is responsible for what, and it's generally fairly predictable. Worse yet, some of the flashbacks ended up being confusing, and the viewer is left wondering \"Okay, how much am I supposed to care?\" One thing I did like is that the movie goes to show you that it's never THAT simple as \"the good guys are good and the bad guys are bad\", and sometimes it IS evil vs evil rather than good vs evil. Hadley didn't do what she did out of a sense of justice, she did it because she considered herself entitled to a job for being family, AND to eliminate the competition. As for Alicia, it simply proves that a victim isn't always a good person. Some of them really do \"have it coming\", even if \"it\" was a painful, horrible death. \"The Burning Bed\" is a great example of this, but the difference is that the vile man in \"The Burning Bed\" got exactly what he deserved. But, did Alicia \"have it coming\"? Some will say that she did, but others don't agree, and the law generally doesn't either.

As for acting, it's a mixed bag. Some do a good job, like Mia, but others just came across as indifferent to their roles. They were mostly wooden or simply not convincing. The music was pretty cool though and some of the scenes are nice and steamy, especially if you like girl/girl action. The movie isn't badly shot at all, but given its glaring weaknesses, the strengths are in background, unfortunately.

I've heard rumors of a sequel, but given the years, I doubt it'll happen. But, I wouldn't be surprised if a sequel suddenly appeared. If Alicia is as EVIL, conniving and horrible as people say, then I don't think she'll be thinking, \"YAY! I woke up from a coma! Oh, Hadley was responsible? Oh! That's okay! I totally forgive her and want the charges dropped!\" No way Hadley would be in jail for long anyway, if she even does any time since no murder actually happened.

Anyway, worth checking out at least once!", "y": 0}, {"x": "I was not expecting much from this movie, but was very pleasantly surprised, as it is light and funny and very well observed. The central trio of deadbeat bikers were surprisingly likable as they staggered and clowned their way through their drug-centred trip to Wales. The humour was gentle and subtle, as indeed were the three characters (witness their sympathetic treatment of the little old lady shopkeeper). The atmospherics of rural Wales were captured perfectly, and the soundtrack was very well chosen. Cleverly and carefully scripted, with great attention to detail - I have never seen such a realistic portrayal of alternative culture - I felt I was there with them. Very light in touch and full of fun - not what you might expect from a movie about bikers and drugs. A delight on all fronts, and difficult to criticise, though I thought the last two scenes were a bit lame - the film should have ended when they left Wales. But overall, an unexpected treasure of a film.", "y": 1}, {"x": "If you like to comment on films where the script arrive halfway the movie then this is the one. A setting and acting as in a Porn movie but nothing is happening only some groping and touching of the third kind. Which actually becomes very boring after 45 minutes of touchy feely but no action. A few of the actors I've seen in real x rated movies and there their acting then was a lot better. All the special effects are done by the great \"Rondo\" Whom performs all the magic whit his mind. A cult movie is written on the box. Does that mean that this film is not to be watched at all???

Get drunk with some friends and watch this movie on new years eve ore thanks giving.", "y": 0}, {"x": "This is one of the funniest and most excellent movies ever made! Although I've only seen forty minuets of it and I must say this is a good movie. The plot if funny and because there's sex around pretty much every corner of this movie. It's really funny and I don't see how anyone could NOT like this film. I really really really want to watch the rest of the movie. It has one slightly sick scene in it (trust me, it's not very pleasant) but apart from that this is a great movie. I rate this movie an 7/8 for comedy, 10/10 for sexual content and 10/10 for the plot. PLease if your a fan of American Pie and you want to watch a movie where there's pretty much all sex in it the buy this movie. It WILL please you.

10/10", "y": 1}, {"x": "Good performances can't save this terrible script, larded with every cliche in the chick-flick book. Both main characters are deeply unsympathetic, and the scene where Laura Linney's character reminisces about sex with her dead husband in front of her teenage son -- which I think is supposed to be poignant -- is just horrifying.", "y": 0}, {"x": "A comedy gem. Lots of laugh out loud moments, the shop and pub scenes had me belly- laughing uncontrollably. The characters are recognisable and the dialogue well-observed - I know people like this! The humour is surprisingly gentle and the film (this may sound strange) puts me in mind of an Ealing Comedy. It's a quirky little film with lots of detail. It certainly takes a number of viewings. I've watched it a few times (I've been showing all my friends!) and notice something new each time - a bit of dialogue,something visual that I hadn't picked up on before. I could get really picky and find a couple of shortcomings in the film but I'm not going to because overall this is a great fun, feel-good film which is really worth a watch and which anyone with a sense of humour must enjoy. It is a film which will find it's friends and I hope there are a lot of them out there. Oh.... and It has a great soundtrack.", "y": 1}, {"x": "After seeing the low-budget shittier versions of the \"Universal Soldier\" franchise, I hoped and prayed that Van Damme reprised his role as Luc Devoreaux in a second Unisol movie. Well, it seemed this prayer was answered, but not the way I hoped. Universial Soldier 2 is just intense as poetry reading at your local library. No, even that would be more intriguing . The fight sequences are top-notch, Bruce Lee quality, which is the only redeeming factor in this entire pathetic excuse for a motion picture. That and having former WCW tough-guy legend \"Goldberg\" playing the villain. However, placing Goldberg as Seth's sidekick lieutenant would've been better.

We offended me the most was the setting of the movie itself. It's like some film school students slapped it together. The plot holes are that bigger than Kanye West's ego is what really did this movie in. For example: Luc's daughter, Hillary looks like she's at least 11-13 years old and the first movie was filmed only seven years ago. How is that possible? Tell me that! The part in which Luc's partner was killed off and turned into a Unisol is just re-goddamn diculous! You mean to tell me that there was an experimental Unisol exposed naked in the basement of the research complex at the beginning of the movie. C'mon. The director could've spent more time with this movie like the first one and sewn all the plot holes shut. But oooh nooo!

Speaking of the plot, IT SUCKS! Compared to the first movie, Universal Soldier 2's plot watered down and worthless. Where's the gritty thrills in which a Unisol goes berserk an re-enacts his last memories in a supermarket rampage thinking its Desert Storm or something ? This was the dawn of the Millennium, you would attracted more of an audience if this had taken place in a dystopia/Orwellian type of future cesspit. Corny is the correct adjective to describe this sad, sad, sad sequel.

From what I seen: Double Impact, Under Siege 2, Robocop 3, and hell, even the cheap-ass/no class Terminator knock-off \"Class of 1999\" is more entertaining than this!", "y": 0}, {"x": "Trey Parker and Matt Stone, the creators of the show 'South Park' , return with something entirely different.They create a new sport that combines baseball and basketball.This sport is known as baseketball.It's like basketball except that the rules of baseball are involved and there's another letter e in the title.Here's how you play: you just shoot the ball while these two guys try to distract you from making the shot.Sounds simple.In fact, I might try it one day.After the game hits the streets, it soon becomes a huge success.Who would've known that 2 immature friends could invent a sport that became so successful?

My opinion

'Baseketball' is a very crude and silly spoof filled with lots of slapstick violence, yet it actually delivers some laughs and plenty of entertainment.A definite recommendation for those of you who like slapstick and rude humor.", "y": 1}, {"x": "Having watched both the Lion King and Lion King II and enjoyed both thoroughly. I thought Lion King 1.5 might be worth watching. What a disappointment ! Disney must be getting desperate for revenues.

Especially now that they lost the deal with pixar.

Basically, they just picked up some bits of footage that were left on the editor's floor (or garbage can) and glued them together to make a

quick buck. Unlike LK I & II, both of which had strong story lines.

This movie hardly has a story at all. While the characters and animation are always fun to look at, there is simply not enough material here for a movie. Some of the bits could have been good 2nd disk fillers on the original offerings.

Disney - Shame on you for putting this trash out to make a quick buck!

Next time take the time and effort and put our an enduring work.", "y": 0}, {"x": "Possible Spoilers, Perhaps. I must say that \"Cinderella II: Dreams Come True\" is one of the worst movies ever made. First of all, the movie was made during the height of Disney's sequel rampage. It was created around the same time as \"The Little Mermaid II,\" \"The Jungle Book II,\" and \"Peter Pan II,\" all of which were disservices to their original film classics. (Disney also made \"The Hunchback of Notre Dame II\" and \"Atlantis II,\" but I'm going to drop that topic because their original movies were never really classics in the first place.\") Let me go ahead and say that I am an avid supporter of good Disney films, and I absolutely adore the original Disney \"Cinderella.\" The sequel to \"Cinderella,\" however, was a waste of time. The character of Cinderella in the sequel was so very unlike the original girl that I grew up watching. In the original, Cinderella was kind and loving. The new Cinderella had very out-of-character moments with current-era phrasing like, \"I'm going to do this banquet my way!\" Let me also tell you that new Cinderella (as I have affectionately named her) says, \"Ewww!\" That is the anti-Cinderella. I try to find the best in people, but in the sequel, Anastasia, one of the stepsisters, is good! What the heck? Why? They made it all out to be like Lady Tremaine and Drizella are just horrible family members for poor little Anastasia. My question to the world: did the people at Disney watch the original \"Cinderella\" when making this sequel? Well, it surely doesn't seem so. If I remember correctly, Anastasia was just as abusive to Cinderella as Drizella and Lady Tremaine. I am all for redemption and forgiveness, but there was no point of redemption for Anastasia in this movie. In the first one, Anastasia was evil. In the second one, she is good. One just can't leave a story like this. I hope Disney realizes that this movie, among other movies, is shaming Walt Disney's name. Perhaps now that Michael Eisner is gone, things will start shaping up around the House of Mouse.", "y": 0}, {"x": "The problem with this movie is that it is shot on the worst possible camera and the film is blurry and grainy. Maybe it's just the fact that whoever was holding the camera couldn't hold still because they were having a seizure or something. There is also way too much poop and vomit in this movie. There is someone vomiting every twenty minutes and it makes me think that this was made by some bulimic or something. It was disgusting. Then there is the annoying high pitched screaming that goes on and on and on and doesn't stop until the credits roll. I also didn't like when all her friends were being shot (or not I don't know)and she goes in the van and puts band aids on. That was just really really stupid to even have that in a movie. How much gas can a person siphon to get a van going? It must be a whole lot because they don't run out of gas for the rest of the movie. It was a terrible movie and I would highly suggest not ever seeing it in your whole entire life.", "y": 0}, {"x": "Johnnie To's ELECTION has some cool music on the opening credits\u0097and a nice opening credits' design too, a kaleidoscope of Chinese characters and those Asian mobsters solemnly taking an oath or uttering some sacred stuff; as a matter of fact the whole flick is nicely scored. I have found about To from Bishop Seraphim Sigrist and was quite eager to see a To movie. The one with which I began, ELECTION, is exciting and interesting, and only moderately violent by nowadays standards\u0097moderately and also essentially violent; the story of an Asian godfather's scheming, it uses a puzzle play of elements, violent facts from the mobsters' lives, the race for the scepter, true details, and as with Coppola we are expected to believe that some of the morally glamorized mobsters are entitled and nice and likable. The performances are reasonably amusing and colorful.

ELECTION is well made in the enjoyable, somewhat careless style of the Hong Kong fare; the ending is bitter, true, straight and will scare the kids.", "y": 1}, {"x": "Paris, JE T'AIME is a wondrous cinematic homage to the city of light and the city of love, a film so complex that it almost defies summarization and reviewing. Ask a large group of people their impressions of life in Paris and the result would be something akin to this film. Tied together by each of the sectors or Arrondissement of the city, the film examines love in all forms, native folk in their Parisian modes, and tourists interacting with the great city. Approximately twenty writers and directors, each with about five minutes of screen time, include Olivier Assayas, the Coen Brothers, Sylvain Chomet, Isabel Coixet, Wes Craven, ALfonso Cuar\u00f3n, G\u00e9rard Depardieu, Christopher Doyle, Vincenzo Natali, Alexander Payne, Walter Salles, Nobuhiro Suwa, and Gus Van Sant among others less well known. The stories vary from hilarious, to humorous, to touching, to tragic, to banal, to tender.

In one story a young Frenchman (Gaspard Ulliel) is attracted to a young lithographer (Elias McConnell), pouring out his heart in French to a lad who speaks only English. In another a separated husband and wife (Gena Rowlands and Ben Gazzara) meet in the Latin Quarter to finalize divorce proceedings while another couple in P\u00e8re-Lachaise (Emily Mortimer and Rufus Sewell) approach marriage without connection until the spirit of departed Oscar Wilde intervenes. Steve Buscemi in Tuileries confronts superstition in a subway with his bag of tourist collections, in Bastille Sergio Castellitto (in love with mistress Leonor Watling) is ready to divorce his wife Miranda Richardson until she confides she has terminal leukemia, Juliette Binouche confronts agony about her son's fantasies and loss in Place des Victoires with the help of a mythical cowboy Willem Defoe, Sara Martins and Nick Nolte and Ludivine Sagnier display a keen tale of mistaken ideas in Parc Monceau, Fanny Ardant and Bob Hoskins 'play out' a strange relationship in Pigalle, Melchior Beslon plays a young blind man to actress Natalie Portman in learning how to see in Faubourg Saint-Denis, vampire love between Elijah Wood and Olga Kurylenko in Quartier de la Madeleine, Maggie Gyllenhaal is an ex-patriot actress stung out on drugs in Quartier des Enfants Rouges, and Margo Martindale is a visiting tourist letter carrier trying desperately to speak the French she has studied for her life's trip in a tenderly hilarious 14\u00e8me Arrondissement.

The final few minutes of the film tries to tie together as many of the stories as feasible, but this only works on superficial levels. The film is long and there are no bridges between the many stories, a factor that can tire the audience due to lack of time to assimilate all of the action. But it is in the end a richly detailed homage to a great city and supplies the viewer with many vignettes to re-visit like a scrapbook of a time in Paris. It is a film worth seeing multiple times! Grady Harp", "y": 1}, {"x": "This movie scared heck out of me when I was just a kid. It's no \"Citizen Kane\" but it has its moments. The arm ripping scene is good. The plot is good even if characters aren't - could have something to do with the acting. Put some top name people in the roles and then see what you get. This was one of those shoot, edit (what little there was) and distribute in a couple of months type of movies. This is classic low budget sci-fi and deserves it just due. I rated it a 9 based other films of this genre and age.", "y": 1}, {"x": "Yes, I'm sentimental & schmaltzy!! But this movie (and it's theme song) remain one of my all time greats!! Robert Downey Jr. does such justice to the role of \"Louis Jeffries\" reincarnated and the storyline (although far-fetched) is romantic & makes one believe in happy endings!!", "y": 1}, {"x": "Sad story of a downed B-17 pilot. Brady is shot down over occupied territory. The local ranchers extended him kindness and protection at the cost of their own lives. I had never heard of this movie and it snagged me for two hours. After the film is over, I'm glad I took the time. It's an entire story told to explain the look on Brady's face at the start of the film.", "y": 1}, {"x": "Peter Sollett has created an endearing portrait about real people living in poverty in the Lower East Side of New York, or Loisaida, as it's known by the locals.

Mr. Sollett's heart is in the right place as he examines this dysfunctional family, that is typical of the different 'inner cities' of the country. Mr. Sollett accentuates the positive in the story he presents. These are basically good kids, the children of parents that have left them and whose grandmother has taken under her wing.

Instead of presenting his characters as losers, Mr. Sollett shows a positive side they all have. These kids are not into drugs, or are stealing because they are poor. Had this story been done by Hollywood we would have seen a parade of stereotypes, instead of children that are struggling, but deep down inside, they are not defeated.

Victor Rasuk, as Victor Vargas, was a revelation. He is a natural. So is July Marte. Her character shows us a no nonsense girl who will not be fooled or driven to do anything she doesn't want to do. Altagracia Guzman, as the grandmother is excellent. She conveys her frustration at not being able to steer her grandchildren into the things she believes in and that are so important to her.

All in all, this was an excellent picture thanks to Peter Sollett.", "y": 1}, {"x": "Possibly the most brilliant thing about Che: Part Two, as we begin to integrate it with Part One in our minds, is that there is no clarification of why Che chose to confidentially abscond from Cuba after the revolution, no allusion to his experience in the Congo, no clarification of why he chose Bolivia as his subsequent setting for a coup d'etat, no allusion to the political decisions he made as a young man motorcycling across South America, which Walter Salles has given prominent familiarity. Extraordinary focus is given to Che meeting the volunteers who accompany his guerrilla factions. Yet hardly any endeavor is made to single them out as individuals, to establish involved relationships. He is reasonably unreasonable. Che drives an unbreakable doctrine to leave no wounded man behind. But there is no feeling that he is deeply directly concerned with his men. It is the concept.

In Part 1, in Cuba, the rebels are welcomed by the people of the villages, given food and cover, supported in what grows to be a victorious revolution. Here, in Bolivia, not much understanding is apparent. Villagers expose him. They protect government troops, not his own. When he expounds on the onesidedness of the government medical system, his audience appears uninterested. You cannot lead a people into revolution if they do not want to comply. Soderbergh shows U.S. military advisers working with the Bolivians, but doesn't fault the United States for Che's collapse. Che seems to have just misfigured his fight and the place where he wanted to have it.

In showcasing both wars, Soderbergh doesn't build his battle scenes as actions with specific results. Che's men attack and are attacked. They exchange fire with faraway assailants. There is generally a cut to the group in the aftershock of combat, its death toll not paused for. This is not a war movie. It is about one man's reasonably unreasonable drive to endure. There is no elaborate cinematography. Soderbergh looks firmly at Che's inflexible dedication. There are remarkable sporadic visceral shots, but being few they are all the more powerful, such as Che's POV shot during his final beats. There is an abundance of the terrain, where these men live for weeks at a time, and the all-consuming effect is of languor, Guevara himself having malaria part of the time.

Benicio Del Toro, one of the film's producers, gives a champion's performance, not least because it's modest. He isn't portrayed as the cutting edge like most epic heroes. In Cuba, he arises in conquest, in Bolivia, he falls to the reverse, and occasionally is actually difficult to distinguish behind a tangle of beard and hair. Del Toro illustrates not so much an identity as an attitude. You may think the film is too long. I think there's a genuine cause for its breadth. Guevara's affairs in Cuba and particularly Bolivia was not a sequence of episodes and sketches, but an undertaking of staying power that might virtually be called insane. In the end, Che as a whole or in parts is a commercially ballsy movie, one where its director begins by understanding the limits innate in cinematic biography and working progressively within those means.", "y": 1}, {"x": "This is going to be the most useless comment I have ever put down, but yet I must do it to warn you about the atrocity to cinema that \"Freddy's Dead\" is. It is not only the very worst chapter of the Nightmare series, but is right up there with the worst horror sequel of all time! It was boring, pointless, and nearly death free. The horrible 3-D ending and over-the-top CORNY kills are enough to drive this \"film\" into the ground. However, it doesn't stop there, just add bad acting, a terrible script, and a number of cheesy cameos and you've got yourself this heaping pile of guano! It's no wonder why Freddy, as always played by Robert Englund, has made two postmortem appearances. I would too if I went out like that. This is a strictly fans only movie, don't stare at our shame.", "y": 0}, {"x": "When Ben (Red Foxx) discovers his wife Beatrice (Pearl Bailey) has run off with his own brother, he rushes to his son Norman (Michael Warren) to unload his tale of woe--only to discover that Norman has a secret lover: the effeminate Garson (Dennis Dugan.) Needless to say, Ben does not take it well, and numerous complications follow--including Ben's attempt to get Norman over being homosexual by fixing him up with a hooker (Tammy Dobson.) Unfortunately, this description of the movie sounds a great deal more entertaining than the movie itself.

Originally written for the theatre by Ron Clark and Sam Bobrick, NORMAN... IS THAT YOU? was an absolute disaster on the New York stage. To give the play its due, I actually saw it staged in the 1970s as a community theatre production--and while no one would accuse it of being anything other than a shallow farce, the cast played so broadly and in such drop-dead manner that it proved quite amusing. It is a pity the cast of this film didn't do the same.

This is an atrociously performed motion picture. Red Foxx, one of the most hilarious comics of the 20th century, is about as funny here as yesterday's wash, Michael Warren (who later appeared on the television series HILL STREET BLUES to much better effect) competes with Foxx to see who can give the worst performance, and Pearl Bailey is not far behind; truth be told, only Dennis Duggan, Tammy Dobson, and a cameo by Wayland Flowers have any spark--and sadly, that is only in comparison with the rest of the cast.

Not only is the film badly performed, it looks bad. According to film lore, this was the first big screen effort to be filmed in videotape, which was then transfered to celluloid for project purposes--and believe me, it shows. The film has the look of a bad 1970s sitcom right down to the painted skyline seen through the windows of Norman and Garson's apartment.

Some films are so bad that they become funny, but NORMAN... IS THAT YOU? isn't one of them. I can sum up my reaction to this film in two words: miss it. Don't buy it, don't rent it, don't touch it with a ten foot pole. Just back away slowly and then run like hell.

Gary F. Taylor, aka GFT, Amazon Reviewer", "y": 0}, {"x": "Annoying, static comedy with a painfully miscast Peter Sellers as a smarmy, self-centered Casanova who always has his way with the ladies. A major blemish on Sellers' filmography, and, even worse, a film that seems to have been made solely to satisfy the ego of its star. (*)", "y": 0}, {"x": "Inspector Gadget was probably my all-time favorite 80's cartoon. I enjoyed both the first and second seasons of the series as well as 1992's Christmas special \"Inspector Gadget Saves Christmas\". Some Gadget fans are quick to criticize the second season (1985) of the show, but they need to compare it to DiC's 2002 release of \"Inspector Gadget's Last Case: Claw's Revenge\" for then, they will find the second season to be absolute gold.

Being a Gadget fan, I couldn't resist the opportunity to see the animated Inspector Gadget in something that wasn't Gadget Boy-related. I purchased the film, and I swore to myself that I'd be objective; I knew that sometimes artistic liberties would be taken from the original series. I was not even prepared for what I was about to watch.

There was barely a shred of the original show still intact.

Here is a short list of just some of the cons for this movie: *The humor is non-existent from the original series.

*Penny and Brain (originally having a nearly equal part in the series as Gadget) are missing from the action for fifteen to twenty minute intervals.

*The original music by Saban & Levy is not there, and the score that exists is sub-par. (Understood that Saban has his own production company now, but at least \"Inspector Gadget Saves Christmas\" had good music, even without Saban.) *Don't expect to see any of Gadget's gadgets which made the show so endearing, such as gadget-copter, gadget-brella, gadget-mallet,gadget-coat (which actually was used but it was not even called the same thing), as well as his standard other hat and hand gadgets. In this movie, his gadget legs were telescopic instead of springs. That kind of stuff annoys true fans of the show, and simply aren't necessary to change.

*The gadgetmobile from the original series is now a fast-talking, supposedly \"hip\" convertible. All the fans from the original series enjoyed the gadgetmobile transforming into the gadget van and vice versa.

*Chief Quimby is now very short-tempered and even mean to Gadget. He was always grumpy in the original series, but this pushes the situation a bit much.

*Penny no longer has a computer book.

Are there any positives to this movie? OK, here goes...

*Maurice LaMarche does a good job of taking over for the great Don Adams as Inspector Gadget.

*In one scene, Chief Quimby alludes to an actual villain from the cartoon series: the Great Wambini (classic \"Gadget\" villain from the second season, voiced by Louis Nye).

Looking for more redeeming factors for this movie? Well, you're out of luck. Life is about making choices and living by those choices. Most situations in life have a purpose even if it is to teach a lesson. The lesson learned here: keep to the original formula! \"If it ain't broke, don't fix it.\" True Gadget fans should steer clear from this movie; you will surely be disappointed.

Hopefully, DiC and Shout! Factory will continue to release more of the original series after the 2006 release of \"Inspector Gadget: The Original Series, Volume 1,\" containing the first 22 episodes of the series. As a true Gadget fan, lover of 80's animation and many of DiC's programs, I urge you the viewer to purchase \"Inspector Gadget: The Original Series, Volume 1\" and \"Inspector Gadget Saves Christmas\" DVD's which are excellent and sure to bring back good memories.", "y": 0}, {"x": "Dr Tarr's Torture Dungeon is about a journalist who travels to an insane asylum to write about a new technique they use with their patients. However, the journalist soon finds out that things are not what they seem to be, and the asylum is being run by the patients, and the doctors are in cages. First of all, some parts of the film are just plain boring and just makes you want to fall asleep, and the interesting parts are interesting for all the wrong reasons(A guy who thinks he's a chicken, for instance). I have to admit that the story is actually pretty good, but the film itself bombs. The music of the film is really odd and like something you would hear in some insane comedy, and yes, there is a scene involving dancing chicken men, which pretty much made me want to shut off the screen. Watch this film at your own risk!

Rated: R for Violence and Nudity.", "y": 0}, {"x": "Sometimes I watch a movie and am really impressed by it \u0096 and still it is not easy to explain why I liked it that much. This is mostly true for the uncommon movies \u0096 the ones one can hardly compare with the rest out there. Goodnight Mister Tom is one of these special movies. There is a lot of emotion in that movie \u0096 and the acting was so good that while watching the movie, I was crying and laughing as the story went on. The young Nick Robinson \u0096 is a young boy (William) evacuated from London because of the air strikes there during the Second World War. Mr. Tom played by John Thaw is an old man leaving in the village the evacuated children were send to.

At first Tom refuses to take any responsibilities - such as taking care for a troubled young lad \u0096 but accepts since he is left without a choice. During the stay Mr. Tom discovers how horrible the life has been for the William \u0096 alongside his luggage his mom sent a belt and written instructions to the host of her son \u0096 not to hesitate to use it. This belt is berried in the field \u0096 never to be used in such a brutal manner. Mr. Tom provides a real home for William, and the boy is happy with his new life, he goes to school, makes new friends and discovers hidden talents. All of the sudden a letter William is called home in London with a letter mentioning that she is not feeling well\u0085and it starts all over again \u0096 only this time it gets much worse\u0085 There are many feelings you can sense in this movie \u0096 love, fear, sadness, happiness, pain, hope \u0096 and much more. Goodnight Mr. Tom is another masterpiece of the British cinema comparable only with others such as Dear Frankie and Billy Elliot \u0096 if one is to compare. I have truly enjoyed watching it and highly recommend it. Before finishing this review I would also like to mention the great performance of Thomas Orange in the role of Zac \u0096 reminded me of a friend of mine from my own childhood ( :", "y": 1}, {"x": "I enjoyed every moment of this movie, even though I knew they could never really be together. With the life expectancy of a Bomber pilot being only six weeks, It made me feel for all of those women and men back in the 1940's who must have lived this story.", "y": 1}, {"x": "I saw this in the theater and I instantly thought that it is good enough to own on video. I am a big nut for Sci-Fi action flicks though anyway.

Without giving any of the story away, it is worth seeing if you like Sci-Fi without requiring much thought. The story is basic, and the plot is very good. Worth your time to see!

Maybe they will make a sequel? :)

8 out of 10", "y": 1}, {"x": "Doppelganger has its moments, but they are few and far between.

Essentially, this is a grade B blend of pop-psych thriller, ghost story and horror. Drew Barrymore plays a young woman who is haunted by the demons of her past (most of her family has been murdered and she was, in at least one case, the prime suspect), or does she just have a really bad case of multiple personality disorder? George Newbern is her new room mate, and most of the action centers on him.

Newbern's character is pretty sympathetic, and both he and Barrymore do decent work (though not exactly good). The mediocre to (at times) totally horrendous script and the unimpressive directing seem to have combined to sink the rest of the performances into oblivion. Leslie Hope's character is memorable, but so irritating that you will want to forget her.

The plot eventually disintegrates into a bifurcated (one story arc is psychological realism, the other is supernatural horror) outlandish climax which is so badly conceived, acted and photographed that it effectively counteracts most of what value the film had achieved previously.

Overall, the film has the feel of what might expect to be the result of M. Knight Shamalyan's first undergraduate film class. The acting and script for the two leads are just good enough to make you care a little about them - at least until the film derails utterly and completely.

My recommendation - send your doppelganger, but avoid a first-person encounter.", "y": 0}, {"x": "No one is a greater fan of Geroge Macdonald Fraser's Flashman papers than I am.

I was surprised to see just now that Richard Lester directed Royal Flash, since I also see he had made the Three/Four Musketeers with Fraser which I though turned out rather well.

Not so Royal Flash.

I was 12 years old when the film was released and could not have been more enthusiastic since I had read all the Flashman papers published up to that time, and was intoxicated with A Clockwork Orange and Malcolm MacDowel (I still am, but he was never really given a chance after that).

What a disappointment (I saw it once again when I was about 20 on television and it seemed even worse).

None of the sharp dialogue in the books is transfered to the screen. The comedy of Flashman's character seemed to me to have been mishandled in about the same way one could imagine a group of high school students trying to parody it would do. The dueling and fencing was awful and undramatic.

Looking back with more mature eyes, the film failed completer to exploit the possibilities of direct satire of earlier film versions of the Prisoner of Zenda.

If you have read the book and not seen the film, I can only say that the film ends with Flashman and Rudi von Starnberg becoming fast friends and playing a game Rudi has just invented: Russian roulette.

A pathetic betrayal of everything the books are about.

My comments would be more direct if I had seen the film more recently, but I am glad I have not.

If by any chance Fraser ever reads this, I can only say I think he is a genius--perhaps the greatest comic novelist of his generation, but, based on my appreciation of that corpus of work, it as hard to believe that he wrote the screenplay of this film, as that he did all those awful Roger Moore James Bond films.", "y": 0}, {"x": "I'm one of the millions of Columbo addicts all over the world and just watched this,the episode that started it all, on British Channel 5. It IS fascinating to think what sprung from this so-so movie and I can only marvel at whoever spotted the massive potential of \"Columbo\" and added all the little touches that make it such a marvellous & classic series. That said, this particular movie is not as good as the rest (except for the embarrassing final episode & the patronising British episode). If Columbo had been made as per the original 'pilot' it certainly would NOT have gone on for very long, or be watched and loved world-wide. In this film Lt Columbo is smartly dressed, drives a normal car, has a partner, doesn't talk about his alleged relatives and comes across as quite aggressive. There's also none of the cat-and-mouse chemistry between Columbo and \"the villain\". Watchable, but only for the novelty of seeing how Columbo started out.", "y": 0}, {"x": "I basically skimmed through the movie but just enough to catch watch the plot was about. To tell you the truth it was kind of boring to me and at some spots it didn't make sense. The only reason I watched this movie in the first place was to see CHACE CRAWFORD!!! He is so hot, but in this movie his hair was kind of weird. But still hot.

However, despite how hot CHACE is, it really did not make up for the film. I guess the plot isn't that bad but what really threw me over was the fact that they cuss in like every sentence. Is it that hard to express your anger without saying the F word every time?The cussing was annoying and the whole flashy, camera shaking thing gave me a headache.

All in all, although the plot was OK, I found the film to be a bore and over dramatic. That's why I only cut to scenes with CHACE in it. LOL Anyways, not worth renting unless your a die-hard fan of a specific cast member like I was. Oh yeah the cast was Hot. The girls were HOT!!! But CHACE IS THE BEST!!", "y": 0}, {"x": "For the life of me, why did this film receive an R rating?! While it IS about flesh-eating zombies, believe it or not, it's actually a pretty good family-friendly film--at least if your kids are age 10 and older. Unlike the traditional zombie films, this one has an excellent sense of humor as well as a traditional values--albeit a bit twisted! The language isn't a serious problem, there is no nudity and the film style is definitely geared towards kids (much like the old TV show \"Eerie, Indiana\")--yet some knucklehead slapped an R rating one it! Believe me, most kids have seen worse violence than this and it just seems silly to make audiences think this is an adults only film.

The story is set in a parallel-type world. While the fashions, cars and mores appear circa 1953, in this bizarro world there has been a fierce recent zombie plague that resulted in the \"zombie war\" and massive changes in everyday life. At school, kids are trained in armed combat and there's a cute scene late in the film where the father gives his son a handgun and tells him to keep it in his backpack \"just in case\"! As for life outside of school, it's pretty weird as well, as people now have learned that zombies AREN'T such a bad thing! Heck, using shock collars and training, they can be made into slaves who can do your housework, clean streets, deliver milk or, in the case of a really sick guy, be your \"special friend\".

This film deals with one particular family that finally buys their first zombie slave (played by Billy Connally). Mom is thrilled and her son slowly becomes the zombie's friend. Dad, on the other hand, isn't convinced--as he was forced years early to kill his own zombie father and he hasn't yet gotten over this!! Funny, irreverent and unique--this film needs to be seen by a much wider audience.", "y": 1}, {"x": "I thought that My Favorite Martian was very boring and drawn out!! It was not funny at all. The audience just sat through the whole movie and didn't laugh at all!!! Not even the kids laughed!! That is sad for a Disney movie!! I thought they could have found somebody better to play the martian rather than Christopher Lloyd!! He was really stupid!! And he was not funny!! I thought the talking suit was really dumb!!! In the original television series the suit doesn't talk and move around!! In my opinion they should not have wasted their time on this movie!! I give it two thumbes down!! Really a waste of time and I would not recommend the movie to anybody!!! Thank You!!", "y": 0}, {"x": "The cast was good, and I thought it was a good performance from Christopher Lloyd, whom I like from previous movies. The movie was a great family movie, nothing that would make you worry to show it to younger kids, a good story line, lots of laughs, lighthearted and enjoyable. If you want to entertain children without being bored to tears this fits the bill. Kid pleasing, and not difficult for a parent to watch, either.", "y": 1}, {"x": "In what is arguably the best outdoor adventure film of all time, four city guys confront nature's wrath, in a story of survival. The setting is backwoods Georgia, with its forests, mountains, and wild rivers.

The director, John Boorman, chose to use local people, not actors, to portray secondary characters. These locals imbue the film with a depth of characterization unequaled in film history. No central casting \"actors\" could ever come close to these people's remarkable faces, voices, or actions. I don't recall a film wherein the secondary characters are so realistic and colorful. As much as anything else, it is this gritty realism that makes this film so amazing.

Another strength is the film's theme. Nature, in the wild, can be violent. How appropriate that the setting should be the American South. Very few places in the U.S. are, or have been, as violent as redneck country. In a story about Darwinian survival of the fittest, the film conveys the idea that humans are part of nature, not separate from it.

\"Deliverance\" is very much a product of its time when, unlike today, Americans expressed concern over a vanishing wilderness. The film's magnificent scenery, the sounds of birds, frogs, crickets, and the roar of the river rapids, combined with the absence of civilization, all convey an environmental message. And that is another strength of the film.

At an entertainment level, the tension gradually escalates, as the plot proceeds. Not even half way into the film the tension becomes extreme, and then never lets up, not until the final credits roll. Very few films can sustain that level of intensity over such a long span of plot.

Finally, the film's technical quality is topnotch. Direction and editing are flawless. Cinematography is excellent. Dialogue is interesting. And the acting is terrific. Burt Reynolds has never been better. Ned Beatty is perfectly cast and does a fine job. And Jon Voight should have been nominated for an Oscar. If there is a weak link in the film, it is the music, which strikes me as timid.

Overall, \"Deliverance\" almost certainly will appeal to viewers who like outdoor adventure. Even for those who don't, the gritty characterizations, the acting, and the plot tension are reasons enough to watch this film, one of the finest in cinema history.", "y": 1}, {"x": "Since September of last year, I have been borrowing four to six films each week from the Harold Washington Library, which boasts an impressive DVD collection. (The HWL truly is a circulating library: three-quarters of its films are out at any given time!) Recently, I was thrilled to find The Short Films of David Lynch. Yesterday, knowing little about the animated series, I picked up Dumbland. I'm here to report that, for David Lynch fans, watching the eight episodes is half an hour well-spent.

The most remarkable feature of these brief pieces are their soundtracks. Each episode has its own rhythm. Respiratory and digestive systems provide percussion. Outrageous voices accent pauses' ends. Physical violence supplies the beats. Chirping birds and buzzing sockets brush along the edges. Many other elements fill out the orchestra. The pacing of the crude animation often keeps in sync with the sound, but the soundtrack itself struck me as Lynch's primary interest in creating and disseminating this work. In a way, these eight shorts are unique Lynchian rhythms.

That said, the situations are odd, ugly, profound, dumb and funny as hell. And there's enough space within them to reflect on how absurd we humans can be. I can't say that I'll watch the collection again, but for anyone who revelled in the movements that is the suite Inland Empire, Dumbland is worth half an hour of your time.", "y": 1}, {"x": "There is this private campground in Plymouth, Massachusetts, that's been around since 1959. My grandparents were among its founders, my parents had a site starting in 1965, and my two brothers have sites there now.

(This doesn't have anything directly to do with the movie; bear with me.)

I spent summers at Blueberry Hill from when I was five years old to when I was eighteen, and it is to people like me to whom this film speaks: the ones for whom a group camp in the woods was, as my fianc\u00e9e tells of me, \"the good and happy place.\" If you've never experienced the lifestyle, Indian Summer will probably be lost on you; don't bother. It's not quick-paced, it doesn't have rapid cuts, the plots aren't in the least bit convoluted, it has no explosions, such dramatic tension as exists is mild, there aren't any A-list actors, there are no rapid-fire quips just to show off how clever the scriptwriters are (other than, perhaps, Kimberley Williams' killer line about how her fianc\u00e9 shouldn't \"overwind his toys.\" That is not the least degree what this movie is about, any more than The Godfather is a slasher flick just because it has a lot of on screen gore.

But Indian Summer is Godfather's polar opposite. If you have experienced the lifestyle, see this movie. Don't read any more, just do it.

For me, this is a 9/10 film.", "y": 1}, {"x": "A wonderful movie! Anyone growing up in an Italian family will definitely see themselves in these characters. A good family movie with sadness, humor, and very good acting from all. You will enjoy this movie!! We need more like it.", "y": 1}, {"x": "The supernatural, vengeful police officer is back for a third installment, this time acting as guardian angel for a wrongfully accused female cop. Standard stalk and slash picture, yet well acted and directed, thus making it oddly interesting and watchable, though the violence isn't for the squeamish (especially the director's cut which was originally given an \"NC-17\" rating).

*1/2 out of ****", "y": 0}, {"x": "\"Holes\" is my all-time favorite movie! So far I have seen this movie three times in theaters and am looking forward to purchasing it on DVD this upcoming September. I read the book after seeing the movie and was amazed at how alike the book and movie were. The director of this film did an excellent job of re-creating the book into movie form. Also, all of the actors selected to play the roles did wonderful playing their characters, especially Max Kasch as ZigZag. Props to all those involved in making this movie, it was a real success! 10 out of 10 stars, I definitely recommend it for everyone to see!", "y": 1}, {"x": "Having enjoyed Jean Arthur in \"The Devil and Miss Jones\", my interest was peaked, so I tried sitting through this second-string screwball outing about an investigation into the death of a jockey--but I didn't make it to the end. Arthur, photographed in a gauzy, movie-magazine fashion, either wants alimony from ex-husband William Powell or another shot at marriage, but I never felt for her because the character is just a string of wisecracks (she's the type of heroine prone to comical curiousness, but once inside a morgue--like all women in these '30's comedies--she faints). William Powell reportedly had a high time working with Miss Arthur, but you'd never know it from the end result; they look awkward standing next to each other, hesitant over their banter. The actor playing Powell's valet is excruciating, and the pauses for viewer laughs are pregnant with unease.", "y": 0}, {"x": "TOM HULCE* turns in yet another Oscar-worthy performance as Dominick Luciano, the brain-damaged garbage man who's helping put his brother (Ray Liotta as Eugene) through medical school.

This is a must-see for all movie lovers and all lovers of life and people!

===========> *From the small studder to the eratic dancing, to the repeated words \"Oh, Jeez\" whenever Nicky is in a bind, the belieavablitly of Tom's performance is so excellent that you will have to concentrate to remember that it's an actor on screen!", "y": 1}, {"x": "I wouldn't recommend this unless you're keen on David Copperfield and want to \"complete the set\". There are some good performances (e.g. Uriah Heep) and well directed moments (e.g. the beating), but on the whole it really pales in comparison with the 1999 BBC version, as well as earlier versions.

There are inexplicable changes to the story that really serve no great purpose except, possibly, to dumb it down (the stolen jewels being a case in point). The American cast were poorly chosen: Sally Field is a good actress, but she is wrong as Betsy Trotwood, and her English accent is only slightly better than Dick Van Dyke's cockney. I can see why Michael Richards was chosen to play Mr Micawber; he hams it up rather too much, however, and becomes irritating. He also speaks his lines in an accent that goes beyond eccentric and becomes simply preposterous. Anthony Andrews is menacing as Mr Murdstone, but one almost expects him to don a black cape and tie David's mother to a railway line (though this is perhaps partly the fault of Dickens).

I got this for free with a newspaper. It helped pass a Sunday afternoon, but I felt more disappointed than charmed at the end of it", "y": 0}, {"x": "Full marks for the content of this film, as a Brit I was not aware that there was segregation in the US Navy during WWII. A very brave attempt to bring this fact to the world. However, the movie is pathetic, direction is non existent, the acting is wooden and the script is just one clich\u00e9 after another. I can honestly say that this is one of the worst movies I have ever seen. I sat and cringed from the start until the end at the very poor way that this had been put together. This could have been a great movie, the story for many of us outside of the US was new, unique and also interesting. The sad fact of the matter is the way that it was put together. It is unfortunate that a true story like this, which could have changed people's attitudes, has been squandered on a low budget, badly directed movie. I only hope that some time in the future, one of the major studios will take this theme and do it justice.", "y": 0}, {"x": "Every time I see Nicole I like her more. I love a movie like this. A woman you just won't give up on, but she keeps breaking your heart. First movie I remember seeing like this was Of Human Bondage, the Kim Novak - Laurence Harvey version. The beefs about the correctness of the Russian spoken in this film are petty, it was good enough to fool me or anybody else who can't speak Russian, I'm sure. Funny how people miss the point. The no-goodnik Russian guys were well cast too. Finally, I have to tip my hat to Ben Chaplin, as somebody else noted, he plays a sap with great dignity, and there was definitely some heat between him and Nicole. To think, guys get PAID for that, mind-blowing.", "y": 1}, {"x": "Prussic gas, a murderer donning a red clansman suit and hood wielding a white whip, and the murders of college school girls at the hands of paid convicts enlisted by a mysterious mastermind who keeps his face hidden within an office containing aquariums of turtles and fish. The inspectors at Scotland Yard, Higgins(IJoachim Fuchsberger)and his superior Sir John(Siegfried Sch\u00fcrenberg)certainly have their hands full with this case. It all seems to center around student Ann Portland(Uschi Glas), who, when she turns 21, is to inherit a great deal of wealth. The girls who are targeted share a room with Ann, but the reason for their murders remains a mystery SY's finest must figure out. The staff of the girls' dormitory all seem to be hiding something and certain members of the faculty are falling prey to the killer in the red monk robe disguise, talented enough to precisely strangle the necks of those attacked with the whip. Two prisoners are commissioned by a mystery man to use the newly created toxic gas created by a scientist murdered at the beginning of the film during what was supposed to be a monetary exchange for his creation. It's a clever scheme where a driver, Greaves(G\u00fcnter Meisner)meets the convicts(..who hide in a barrel)who are assisted by a corrupt prison guard. Taken blindfolded to the secret room of the mastermind, he gives them orders on who to kill and how. Uncovering this operation is a top priority for Higgins and Sir John for it will lead them to the truth they seek in regards to the murders and why they are happening. Under suspicion are girls' dormitory headmistress, her author brother, a sweaty, incredibly nervous chemistry teacher, a snooping gardener, and the Bannister. Some are red herrings until they are disposed of, throwing the viewer for a loop each time until the real mastermind is discovered. The ending features multiple twists.

Out of the Krimi films I've seen, THE COLLEGE GIRL MURDERS is the closest to a giallo with it's colorful killer, a convoluted plot yielding lots of surprises and potential suspects, & sordid shenanigans between adults and the college girls at the dormitory. I think you can also see the influence of James Bond on this particular Krimi film with the villain mastermind's secret hideout with an alligator pit(..which isn't used), the fake bible/water pistol, when opened, fires the gas into the face of startled victims, the Greaves' Royles Royce which has latches that cause flaps to darken the windows without revealing the passenger in the back seat, and the peep holes used to spy on the girls in their rooms and while swimming. Many might consider Sir John a liability due to his bumbling, buffoonish behavior and how he often undermines Higgins' abilities to get at the truth(..perhaps poking fun at know-it-all British inspectors who harm a case more than solve it)..I felt he was used as comedy relief, particularly with his attempts at psychoanalyzing suspects and potential victims, often misunderstanding what are told to him. Higgins, using the skills adopted over his years as an investigator, instead follows the clues/facts, often avoiding Sir John as much as possible. Capable direction by the reliable Alfred Vohrer who keeps the pace humming at a nice speed, and the screenplay is full of interesting characters and lurid content..the fact that so many of the adults surrounding the dormitory are suspect, any of them might be the one wielding the whip or calling the shots behind those murdered girls' executions. I'd say this may be one of the best(..if not the best)examples of the Krimi genre, for it keeps you guessing, always one more ace up it's sleeve..the revelations unearthed at the very end are quite eye-opening(..and, you even get a literal unmasking of the real mastermind pulling the strings to top it all off).", "y": 1}, {"x": "Although, I had no earthly idea on what to expect from this movie, this sure as hell wasn't what I would have had in mind, had anything actually come to mind. Once I heard of its existence, all I knew was that I had to own a movie called Please Don't Eat The Babies. unfortunately, I could only find a copy under its alternate title, Island Fury. Looking back, I guess I could call it a lose-lose situation. On one hand, I still don't get to be known as the guy who owns a movie called Please Don't Eat The Babies, and on the other hand, Island Fury would ultimately reveal itself to be an awful, pointless, boring, unwatchable piece of garbage. Yeah, definitely lose-lose.

I'm not even sure what genre they're going for here. Just early 80's badness, with a flashback that might actually be longer than the non-flashback. First up, two teenage girls are being chased by two bad guys, once caught, the bad guys bring to our attention that one of the girls have a coin on a string, around her neck, and somehow, these bad guys know of a lot more of these coins hidden on an island somewhere. And this is where things start to get weird, somehow these guys know of a trip the girls took to some island, years earlier, when they were only 10. I guess this is supposed to mean that the girls should know exactly where this alleged treasure is. So, now, we're in the past, while the girls try to retrace their steps, so these bad guys don't kill them, although, I wouldn't have minded if they had. In the flashback, the 10 year old counterparts are on a boat trip with their sisters and the sisters boyfriends, eventually stopping by an island for some air, they get mixed up with some kid and his killer grandparents. Any potential suspense or reasons to keep on watching never shows up, but the flashback was undeniably better than the present, which, still, isn't saying much.

For a while there I had forgotten about the original story, At one point, I Ithought maybe the director had too, and when the flashback ended, that would be the end, which would have worked for me considering this disappointment would have been a half-hour shorter. This pointless movie within a pointless movie does eventually end, and real stuff does happen, but it's stupid. I guess I didn't exactly expect a movie filled with infants being devoured, or anything like that, but I did expect some form of outlandish B-entertainment, mostly just a confusing, inept storyline, unsure of its genre. My advice would be to seek out something worthwhile like Attack Of The Beast Creatures. If anyone, I would only recommend this one to serious B-movie collectors who must have them all, anyone else interested probably has brain damage. What really gets me is that I still have no idea why they called it Please Don't Eat The Babies. 3/10", "y": 0}, {"x": "This grainy film has a cult following and one of those word-of-mouth features you just had to see. Maybe hard to believe, but there is a rural community in southwest Arkansas, Fouke, that knows the legend is true. This tale is told in documentary-style narrated by Vern Stierman and filmed in actual locations talking to actual folks involved. The legend changes with the telling, but during the late 60s and most of the 70s the surrounding area of Fouke was visited by a Bigfoot-like creature that traveled along Boggy Creek. Long limbed with three toes and standing over 7 foot tall, this hirsute creature periodically caused damage and frightened the 'bejeebers' out of most of the community. I personally crossed over the small Boggy Creek bridge in 1974, and yes the hair on the back of my neck did rise. Of course it was about 1 a.m. in the rain. By the time I arrived in Shreveport, I was laughing.", "y": 0}, {"x": "On one level, this film can bring out the child in us that just wants to build sandcastles and throw stuff in the air just for the sake of seeing it fall down again. On a deeper level though, it explores a profound desire to reconnect with the land. I thoroughly empathized with the artist when he said, \"when I'm not out here (alone) for any length of time, I feel unrooted.\"

I considered Andy Goldsworthy one of the great contemporary artists. I'm familiar with his works mainly through his coffee-table books and a couple art gallery installations. But to see his work in motion, captured perfectly through Riedelsheimer's lens, was a revelation. Unfrozen in time, Goldsworthy's creations come alive, swirling, flying, dissolving, crumbling, crashing.

And that's precisely what he's all about: Time. The process of creation and destruction. Of emergence and disappearing. Of coming out of the Void and becoming the Universe, and back again. There's a shamanic quality about him, verging on madness. You get the feeling, watching him at work, that his art is a lifeforce for him, that if he didn't do it, he would whither and perish.

Luckily for us, Goldsworthy is able to share his vision through the communication medium of photography. Otherwise, with the exception of a few cairns and walls, they would only exist for one person.", "y": 1}, {"x": "In 1983, Director Brian De Palma set out to make a film about the rise and fall of an American gangster, and that he did-- with the help of a terrific screenplay by Oliver Stone and some impeccable work by an outstanding cast. The result was `Scarface,' starring Al Pacino in one of his most memorable roles. The story begins in May of 1980, when Castro opened the harbor at Mariel, Cuba, to allow Cuban nationals to join their families in the United States. 125,000 left Cuba at that time, for the greener pastures of freedom in America, and most were honest, hard-working people, thankful for the opportunity they had been granted. But not all. Among the `Marielitos' who streamed into Florida, approximately 25,000 had criminal records and were nothing less than the dregs of Cuba's jails-- criminals considered beyond redemption, who Castro had merely wanted to be rid of. And they, too, saw America as a land of opportunity, even as Al Capone had considered Chicago some fifty years earlier. And among the most ambitious was a man named Tony Montana (Pacino), known to his associates as `Caracortada.' Scarface.

Now that he was free of the yoke of Communism under which he had grown up, Montana wanted what he felt was coming to him, and he wanted it now; and from the moment he stepped off the boat in Florida, he was determined to have it all. Wealth and power-- that was Montana's dream, and he would get it by doing what he did best, beginning with a favor for a man living in Miami by the name of Frank Lopez (Robert Loggia). Lopez, it seems, had a brother in Cuba who had met an untimely end at the hands of one of Castro's goons, a man who, having outlived his usefulness to Castro, had been summarily discarded and was currently being held in `Little Havana,' along with Montana and all of the Cubans just off the boats, where they awaited their papers from the government that would effect their transition into their new lives. And in short order, Montana sees to it that Lopez's brother has been avenged, and it sets the stage for his own entrance into the underworld of America.

Lopez, a wealthy businessman with the right connections, in return for the favor gets Montana and his friend, Manny (Steven Bauer), released from the holding camp, and puts them to work. In his day, Capone may have had bootlegging as a means through which to line his coffers with illicit gain, but Lopez has the modern day equivalent, and it's even more lucrative: Cocaine. Lopez takes Montana under his wing and indoctrinates him into the life, but once he has a taste of it, Montana isn't satisfied with whatever crumbs Lopez sees fit to throw his way, and he sets a course that will take him to where he wants to be: At the `top.' With a cold-blooded, iron will, Montana decides he'll do whatever it takes to get there, no matter what the cost. but before it's over, he will realize the price for his dream, and he'll pay it; but for a brief moment, perhaps he will know what it's like to be The Man. And he will also know whether or not it was worth it.

In step with De Palma's vision, Pacino plays Montana larger-than-life, and he does it beautifully. From the accent he affects (which he researched thoroughly to make sure he got it right-- and he did), to the body language and the attitude, he's got it all, and it makes Montana convincing and very real. What he brings to the role is nuance and style, in a way that few actors (De Niro would be one) can. This is definitely not a character that is sympathetic in any way, nor is there anything about Montana that you can readily relate to on a personal level; but Pacino's screen presence is so strong that it makes him a thoroughly engrossing character, even though it's hard to become emotionally involved with him. It's quite simply a dynamic, memorable performance.

Michelle Pfeiffer gives a solid performance, as well, in the role that put her on the path to stardom. As Elvira, the woman who becomes an integral part of Montana's dream, Pfeiffer is subtle and understated, giving that sense of something going on underneath, while affecting a rather cold and distant exterior countenance. She, like Pacino, definitely makes her presence felt as she fairly glides across the screen with a stoic, enigmatic and sultry demeanor.

The supporting cast includes Mary Elizabeth Mastrantonio (Gina), Miriam Colon (Mama Montana), F. Murray Abraham (Omar), Paul Shenar (Sosa) and Harris Yulin (Bernstein). An excellent precursor to the more recent and highly acclaimed `Traffic,' and `Blow,' and well as having a climactic scene reminiscent of Peckinpah's `The Wild Bunch,' De Palma's `Scarface,' originally panned by critics, has since been cited by many as being the definitive American gangster saga. Much of the violence is implied rather than graphic, but this film still has an edge of realism to it that many may find somewhat disturbing. But if you stay with it, there is a lesson to be learned in the end. And like many lessons in life, the most valuable are often the hardest to take at the time. But the reward is always worth it, and that's the way it is with this film. I rate this one 8/10.





", "y": 1}, {"x": "Nahhh! Leila (Grace Mills) is a teenager turned on to Satan (and LSD) by her archaeologist fianc\u00e9 Richard. There's a neighborhood hippie demon cult hanging out at the local decrepit ancient castle, where Leila and Richard drink blood, drop drugs, join in sex orgies, dance to lame psychedelic rock and participate in black mass ceremonies where the guys wear pants, masks and capes and the women don't wear anything at all. Unfortunately, these kind of extracurricular activities have left Leila open to demonic possession from the dreaded \"spirit of evil.\" Leila also comes from a screwed up family, which doesn't help either. Her older brother John is a recluse who seems to be in love with her. Her mother Patricia (Maria Perschy) is depressed because she thinks she was responsible for the father's death. To top it off, her sister (Maria Kosti) is a slutty semi pro golfer named (gasp!) Debbie Gibson. There's plenty of hired help around also to waste more time. Two maids (a young one who takes her clothes off a lot and an old one who spies on everyone), plus Udo (Luis Induni), a bald voyeuristic handyman who spies on Leila changing clothes, takes nude pictures of her and sneaks into the pool house to take a sniff of her freshly used bathing suit. Oh yeah and Borg, the pet German Shepherd.

Paul Naschy is Father Adrian Dunning, the doubting priest (zzzzz) who starts snooping around after John and Richard both have their heads twisted around backwards. Leila tells him \"They say I am perverse and I'm going to prove it is true!\" During her birthday party, she tells her guests \"You make me sick! I hate you all!\" and when mom suggests having a doctor come over she she screeches \"I don't want to see that fat ass!\" Debbie suggests they commit Leila to a \"sanitory,\" but Leila runs off and joins the cult again. She is rescued (again) and brought back home (for the third time).

By this point in the movie, there's only about ten minutes left to go and all we've basically seen is some very boring scenes of characters talking and whining about how terrible and f-ed up their lives are and how Leila is acting weird. It's almost as agonizing to sit through as an Andy Milligan movie, minus the gore and laughs. But finally during the last few minutes we get the movie the title implies - an EXORCIST-like possession flick. Unfortunately, the best part of it are the contact lenses Leila gets to wear. Some cheap time-lapse slashes appear on her arms, legs and face, she gets scabby lips and her eyes take on the appearance of blue and white marbles. She begins reeking of rotted flesh, spits up some clear gunk, starts speaking in her dead dad's voice, sneaks into her mom's bedroom, slaps her around a bit and calls her a \"filthy bitch of a whore.\" In comes Father Adrian, who now finally believes she is indeed possessed, fends off her attempts at seduction, hallucinates frogs and eels are in the kitchen and douses Leila with holy water. Doors open and close, a mirror breaks, there's sudden thunder and her bed rises up off the floor. After she tackles Dunning and the two roll down the stairs, the spirit is out of her and into - guess who? Why, Borg the family pooch! The demon dog then turns on Adrian and chews him up a little before he impales it on a fire poker. Then we get one of the most irritating final shots ever committed to film. It's Leila on the floor going from her hideous appearance back to her normal sexy self. But then there's ANOTHER time-lapse effect that sort of seems to suggest that the demon has possibly reentered her body. It's so badly done, you really have no clue what to make of it, which is the final slap in the face to anyone who has just realized they've wasted an hour and a half on this worthless POS.

Screw the contacts, 1 out of 10 it is.", "y": 0}, {"x": "Tony Scott has never been a very good director, but every film he's made after \"Crimson Tide\" seems to bring him one step closer to being the inarguable worst working today (Michael Bay may fall into the same category, but at least his big, dumb, delusional epics entertain on some primally perverse level). And like other overblown Hollywood biopics (\"De-Lovely\" and \"Confessions of a Dangerous Mind,\" for instance) chronicling the lives of pretentious, overrated, or outright shallow ciphers given an aura of \"mystique\" by a society that thrives on the juicy behind-the-scenes details, \"Domino\" is a film that begins with little potential, and dashes that infinitesimal amount before the sixty-minute mark. With an already-distended running time of 128 minutes, the film feels twice as long, and spending time with characters this obnoxiously superficial and forgettable (unlike the superior \"Rules of Attraction,\" Scott's attempts to tinge the proceedings with irony via Domino's smug, self-aware-rich-girl voice-over only draws attention to the film's sledgehammer cluelessness) becomes an act only masochists could find pleasurable. The story? Spoiled-upper-crust-babe Domino Harvey (Keira Knightley, in an ersatz-badass performance as shallow as her gorgeous looks) is sick of the shallow lifestyles of the rich and famous in Los Angeles, and accosts gruff bounty hunters Mickey Rourke and Edgar Ramirez to learn a more exciting trade; along the way, there are double-crosses, shootouts, media attention (courtesy of a tongue-in-cheek Christopher Walken, phoning in his trademark sleazebag), and laughable hints at romance. Scott cuts the film together in segments that rarely last more than a few seconds, cranking up the resolution to make the film a neon-drenched nightmare that's frankly unpleasant to watch--if Scott's given an opportunity to shakily frame an image, ghost it, or distort it in some way, he will; but all this tacky stylistic overload overwhelms what little plot, characterization, and suspense the film has (to say nothing for its, ehm, \"entertainment\" value). Most of the characters come off as either contemptible or stereotypical, oftentimes both (observe the unbearable, several-minute segment where an African-American introduces a new list of racial categorizations on \"Jerry Springer\"), and I found myself wishing they would all get the \"tails\" end of our protagonist's coin by the end. \"Domino\" is utter, unmitigated trash--whatever interest in this individual Scott hoped to inspire in his audience, it is lost in a sea of migraine-inducing neon pretension a few minutes in.", "y": 0}, {"x": "The fact that I watched this entire movie says something about it...or me. It is not a good movie. Terrible in fact. But terrible in the way that kept my attention in that perverse manner that is akin to watching a tragedy and not being able to look away. It would have made a great MST3K subject!

Most of the things that make a terrible movie enjoyable are here: bad dialogue, inappropriate music, contrived plot sequences, ridiculous pseudoscience. You'll thrill to slo-mo death sequences, the poor victims with mouths agape and waaaaaaaay too much time to contemplate their impending doom, facing the outrageously contrived deliverer of their deaths. Your heart will be warmed by old action scene cliches like when two women struggle for a gun and it goes off, but WHO'S SHOT? Both look at themselves, then the other, then themselves, then (seemingly 15 minutes later), one finally goes down. You'll sing along (in latin of course) with the street carolers that turn into a ghastly death's-choir that, for a moment, threatened to turn the movie into a twisted musical.

So if you believe like I do that as movies get worse they get better, then this might be a decent choice for you. It's not as funny as my current sci-fi schlock favorite, \"They Live\" featuring Rowdy Roddy Piper, but it's more fun to watch than luke-warm movies like Omen II or III.

I give it 4 out of 10.", "y": 0}, {"x": "After watching Revolt Of The Zombies starring future Academy Award winner Dean Jagger I was left with one burning question. How was a society that created these ultimate warrior fighting machines ever defeated in the first place?

That's the question you'll be pondering if you take time to watch Revolt Of The Zombies. Towards the end of World War I, the French discover a cult from occupied Cambodia where these undead creatures who cannot be stopped with bullets form a brigade of monks who go over the top and dislodge the Hun.

This scares the living fecal matter out of everyone concerned so an international expedition is formed to find out destroy the secret of these zombies so no nation can get their hands on it and rule the world.

But we've got some dissent in those ranks. First is Snidely Whiplash villain Roy D'Arcy who murders the Buddhist monk who has the secret and second is Dean Jagger. Power is the ultimate aphrodisiac as we all know and he's determined to woo Dorothy Stone away from rival Robert Noland.

I think you've got some idea how this comes out, especially since a race of zombies didn't conquer the world for one country. Dean Jagger as he got the Oscar for Twelve O'Clock High must have shuddered every time he thought about this film and the awful dialog he tried to give a spark of sincerity to.

Moral of the story, you might make an ultimate warrior with the zombie potion and the zombie chant, but you can't make an ultimate love slave.", "y": 0}, {"x": "I didn't agree with any of the theology in the Left Behind series, but nonetheless I found the books gripping and I read 8 of 12 of them. Undeniably good writing and interesting story. However, I didn't have very high expectations for the movie. There was no way mainstream Hollywood would have taken up a Christian series and produced a big-budget movie. So it was done independently... and it just felt like I was watching a really long TV show. It just didn't FEEL like a movie; it didn't have that movie \"experience\" to it, if anybody knows what I'm talking about. So the movie suffered because of that, and the low-budget, poor special effects were another detraction for me.

On top of that, I feel that Gordon Currie was woefully miscast as Nicolie Carpathia. Reading the book, my impression of NC was that he was supposed to be this charming, dazzling, amazingly handsome guy who spoke English with almost zero trace of an accent. So I imagined somebody like Pierce Brosnan in the role. Instead, they found some Clay Aiken pencil-neck who looks like an employee of the month from Best Buy, and gave him a really bad fake accent. So that lost a few stars for me right there. A movie is just not convincing when the major villain doesn't look or sound the way he's supposed to.

The acting was okay, but nothing to write home about. Some of the scenes - like one of the conversion scenes (can't remember which one) - were real seat-squirmers for me. And some of the Christian rock music or whatever it was, was really out of place for some of the scenes, like in the one with Kirk Cameron praying in the bathroom.

In short, it wasn't a bad movie, but it just didn't do it for me. Stick to the book, folks, it's much better.", "y": 0}, {"x": "This was one of the worst movies EVER!!!!!!!! It was so bad, I was laughing through the WHOLE movie! The plot was SO cheesy; especially the end. This movie turns from an end-of-the-world-disaster to save-the-eels! I mean, c'mon! And I swear...I think they use SOCK PUPPETS for the eels! And there was this horrible kiss scene in the middle with the two main characters who happened to be divorced. How predictable! It was SO terrible that my mom, my sister, and I couldn't finish it, and when we DID finish it, it was about a year later! The second time we watched it and we finished it this time, we did MST3K-like comments throughout the movie.

Summary: Only watch this if you're a movie basher! Make hilarious comments, watch this at a sleepover for laughs, and I mean HUGE laughs. Also watch for mockery. The metaphor that explains this movie: This movie is a very shallow field full of cheese and sock puppets!", "y": 0}, {"x": "This film, although not totally bad, should have been filmed where the actual events took place. Grand Island, Nebraska was devastated by no less than seven tornados on the night of June 3, 1980. Grand Island is situated in the nearly treeless, flat Platte River Valley in Hall county. The makers of this movie filmed in the tree covered hills of Ontario and moved the whole event to a non-existant town called Blainsworth. The people of Grand Island bravely survived this awful night only to be forgotten because of a poorly made movie.", "y": 0}, {"x": "Some movies are repellent but still fascinating (Pulp Fiction); others are simply boring. This movie has an almost unique feature of being both utterly repellent and totally boring. By the end I didn't care about any of the characters, I just wanted all of them dead so I could get out of the theatre.", "y": 0}, {"x": "Shortly after seeing this film I questioned the mental competence of every actor and actress that accepted a role. Elizabeth Shue is a commendable actress, why would she embrace such an overrated opportunity? I must give credit where credit is due, though. Some moments in the movie were unpredictable and rather transfixing, but they hardly made up for the scathing perverse tendencies of Kevin Bacon's character, Sebastian Caine. I wouldn't recommend this movie to anyone, man or woman, that has any form of self-respect to account for.", "y": 0}, {"x": "Even this early in his career, Capra was quite accomplished with his camera-work and his timing. This is a thin story -- and quite predictable at times -- but he gets very good performances out of his cast and has some rather intricate camera moves that involve the viewer intimately. The first part looks like a Cinderella story, though anyone with brains can see that the bottom will fall out of that -- the rich 'prince' will lose his fortune.

Nonetheless, because of his good cast and fast pace, it's easy to get caught up in the clich\u00e9s. Then the movie does become more original, as the married couple have to find a way to make a living. The ending is very predictable but satisfying. I also want to compliment the title-writing: very witty and fun.", "y": 1}, {"x": "***Possible Plot Spoilers***

I adore Dennis Hopper. I question why he accepted the role of a police detective in 2000's The Spreading Ground. This movie flat out sucks and I'm about to tell you why.

This is about a small town which is about to get a contract for a sports arena. One hitch: there's a killer on the loose and that is bad for business. The Mayor makes a deal with the Irish Mob to find the killer and make sure he never makes it to court. Det. Ed Delongpre has other plans. He wants this guy caught too, but he's on the level and believes in the system. He wants to see the system do it's job.

That could have been pretty good. It could have been riveting. It was horrible. First, they label this guy a Serial Killer. Err no. There are specific criteria and none of it fits here. The bad guy has killed 5 kids the first day, and I think it was 2 the second day. This entire movie spans like a 48 hour time period.... Hardly Serial Killer action. I don't care what warped motives they give him in the end, Serial Killers do their deed over a long time span. They do not just all of a sudden kill 7 kids in two days. That's a Spree.

Ok that irritant aside, the acting was atrocious. The only name here was Hopper, and he's the only one who came even close to pulling off his part. Unfortunately, he's kinda type-cast to me and I think he does psycho parts much, much better. This just wasn't a good vehicle for Hopper. It didn't allow him to do what he does best, which is to act all creepy. It's not that he did bad, it's that I've seen him do so much better.

The Irish Mob guy, Johnny Gault (Tom McCamus - Long Day's Journey Into Night), who is in charge of their investigation is just over the top stiff. Contradiction? Not really. He is trying to play the cold, hard kinda guy and he does that to the point that the character is just wooden. Boring to the max. He didn't scare me. He didn't inspire any emotion at all except boredom. I cannot tell you how many times I checked to see how much longer it was til the end of this movie.

The other thing about this is that it had the feel of a made-for-TV movie. You know what I mean. The poor production values, low budget, re-use of scenes to save costs. Just eh. Yanno? But, I feel like comparing this to those is an insult to those.

Derek Vanlint was both the Director and Cinematographer on this project. He bit off more than he could chew. I can't help feeling that Hopper must have took this role as a personal favor to a friend. That's the only rational I can come up with. This was Vanlint's first job as Director, third as cinematographer. Hopefully this was a learning experience for him.

I won't ruin the ending in case you do decide to torture yourself with this one, but I do want to say that they all dropped the ball here...even Hopper. In a scene that should have been emotionally gut-wrenching for the detective, it was just..well.. blah. I didn't see any of the angst at all that would accompany the total gear-change this guy made. Very disappointing.

This 100 grueling minutes long and Rated R for violence and language. No kid under 13 is going to have any interest whatsoever in watching this, so no worries there. It's not suitable for anyone anyway. heh.

Skip this one. You'll thank me later.", "y": 0}, {"x": "Russ and Valerie are having discussions about starting a family. The couple live in a posh apartment and run an auction business that deals with valuable collectibles. At the same time, a dedicated adoption agency owner takes a mini vacation and leaves the orphanage in the charge of his father (Leslie Nielsen). Father Harry is in the rental business and he gets the brilliant idea to \"rent\" some of the children of the orphanage to couples like Russ and Valerie. Harry, who becomes aware of the couple'e dilemma, offers a family of siblings for a 10 day rental period! Brandon, Kyle, and Molly move into the apartment with their temporary parents, with amusing consequences, as the new caretakers are inexperienced with kids. But, where is the possibility of a happy ending? This is a darling family film. The actors, including Nielsen as the wheeler-dealer and Christopher Lloyd as the kind apartment doorman, are all wonderful. The script is snappy and fun and the overall production values quite high. Yes, if only life could be this way! Orphaned children everywhere deserve a chance to prove that they are lovable and can give so much joy to the parents who are considering adoption. If you want to show a film to your family that is rooted in good values but is also highly entertaining, find this movie. It is guaranteed to have everyone laughing, even as their hearts are melting.", "y": 1}, {"x": "This masterpiece of lesbian horror comes from exploitation master Joseph W.Sarno.It features plenty of soft core sex,really hot lesbian sequences plus a lot of naked women.The acting is pretty good and the film is quite atmospheric and well-made.Marie Forsa is one of the hottest chicks I have ever seen in a horror movie-it's a visual pleasure to see her wonderful body.Sarno really knows how to pick up hot looking ladies.A must see for fans of sexploitation!", "y": 1}, {"x": "The Legend of Zu, as I saw it, was a very interesting story. I think many of the people who didn't like it were not seeing the underlying mythology behind the film. They were expecting something akin to Star Wars, and it was not that. Joseph Campbell, I believe, would have liked this film. There were a number of metaphors and hidden meanings that an average viewer might have overlooked. We all have a mountain of swords within us. We all have to go into our own cave of blood sometime in our lives. We all have to face our own insomnia someday. Granted some of the narration was a bit confusing, and some of the action got a little hokey at times, but I think other points of the film easily made up for it. I'd watch it again.

I don't know if there's a difference between The Legend of Zu (which I saw in Mandarin with English subtitles) and Zu Warriors (The dubbed USA version.) It might have been dumbed down for American audiences, which really would have detracted from this film.", "y": 1}, {"x": "This is a wonderful new crime series, bringing together three old stalwarts of British television (Denis Waterman, James Bolam and Alun Armstrong) as retired detectives brought back to help clear up old cases, under the leadership of younger, career-focused Amanda Redman. The three quirky, irritable old cops make a brilliant team, applying twenty-year old detection methods in a police force which has moved a long way on since then - sometimes with effect, at other times to the horror of their senior officers. The three are portrayed sympathetically, warts and all. There are splendid comic scenes, and some very moving ones as each of the three has to come to terms with growing old and the legacy of their pasts.

At the end of the first six-part series (we are promised a further series next year) each of the characters had developed. Widower James Bolam cannot come to terms with his wife's untimely death. Lothario Denis Waterman is learning to accept his role as grandfather. And even obsessive Alun Armstrong is helped by his new friends to fight the demons of his past - and keep taking the medication! While Amanda Redman has to face the all-too-familiar conflict between having a life and a career. The story lines have been interesting, if rather heavily dependent on the wonders of DNA-testing. But it is the interplay of four of Britain's finest actors which has made the series unmissable.", "y": 1}, {"x": "If Mr Cranky had rated this, I'd be tempted just to copy his review and paste it here. But as he hasn't, I'll have to give it a go myself.

The only thing giving this movie a 1 instead of a 0 is that Malcolm McDowall's acting is excellent. However not even he can save this film from disaster. The director must have been really distracted when he worked on this one because it is just a conglomeration of scenes that were thrown together with very little continuity - reminiscent of bad '70's movies. Even worse, both the actors and director appeared to be making it up as they went along which probably showed how bad the original script was.

It's not even worth discussing the story line although it revolves around a futuristic corporation called the Proxate Corporation who put together a crew of dispensable people to carry a dangerous cargo on an old container/slave ship to Nigeria. This ship's computer is a baby kept in a glass jar and wired into one of the crew via USB 12 or something. The company should have been called the Prostate Corporation as the entertainment value of this movie is on a par with an examination of the same name.

I honestly can't find one scene that I could say was well made and made any real sense in the context of the movie. I only watched it to the end as I had a touch of the bird flu and this movie reminded me that there were people out there who were actually worse off than me - Malcolm McDowall in particular. I won't hold this against him as he's a great actor and every great actor is entitled to one bad movie in their career and this one is a doosie.

So, unless this is the only movie your shop hires out or you're male and you're doctor isn't doing prostate examinations this week and you somehow feel this is a bad thing then give this one a really wide berth unless of course if you're really community minded, buy a copy to support Malcolm and then use it as a drink coaster.", "y": 0}, {"x": "During the whole Pirates of The Caribbean Trilogy Craze Paramount Pictures really dropped the ball in restoring this Anthony Quinn directed Cecil B. DeMille supervised movie and getting it on DVD and Blu Ray with all the extras included. It is obvious to me that Paramount Pictures Execs are blind as bats and ignorant of the fact that they have a really good pirate movie in their vault about a real pirate who actually lived in New Orleans, Louisiana which would have helped make The Crescent City once again famous for it's Pirate Connections. When the Execs at Paramount finally get with the program and release this movie in digital format then I will be a happy camper. Paramount Pictures it is up to you to get off your duff and get this film restored now !", "y": 1}, {"x": "MacArthur is a great movie with a great story about a great man\u0085General Douglas MacArthur. This is of course, the story of one of America's great military figures, and a figure made familiar to me from the earliest moments of my memory. Though there is a continuity issue (there may be others) e.g. MacArthur's speech portrayed in the film as his 1962 address to the U.S. Military Academy on accepting the Thayer award did not contain the phrase \"old soldiers never die; they just fade away.\" (That was in his speech to Congress upon his dismissal by President Truman) in 1951 for his alleged insubordination (these two did not see eye to eye!) Gregory Peck is im-Peck-able as the general who vowed he would return to the Philippines in World War II. The film moves quickly and easily with the General, his family and his staff from the beginning of the Second World War to the end of his service career. This film would be of much greater significance to one familiar with both WW II and the Korean War. Nevertheless, Peck's portrayal of this great man who fought the twin evils of fascism and communism and who hated war as only a soldier can is a memorable one indeed. \"In war there is no substitute for victory.\"", "y": 1}, {"x": "Yeti: Curse of the Snow Demon starts aboard a plane full of American high school teens who are on their way to play a football game in Japan, unfortunately during a fierce thunder storm their plane crashes in the Himalayas. Unlucky really. With some dead & some alive the survivors have to think about themselves & decide to wait it out until help comes. However just when they think their luck couldn't get any worse they soon discover that a huge, hairy Yeti type Abominable Snowman creature wants to kill & eat them all. Trapped, cold, starving & fighting for survival will help reach the stranded teens in time?

Yeah, with a title like Yeti: Curse of the Snow Demon it can only mean one thing & that is that someone at the Sci-Fi Channel has made yet another 'Creature Feature' although to give these things a bit of variety the Sci-Fi Channel here in the UK are now dubbing them as a 'Beast Feast'! As if that will make any difference. Directed by Paul Ziller one has to say that Yeti: Curse of the Snow Deamon is a terrible film but a somewhat entertaining one at the same time, sure it's bad but it's sort of fun at times too. The basic premise is alright actually, it's a sort of cross between Alive (1993) with it's plane crash & the survivors having to turn cannibal to survive & the excellent gory killer Bigfoot (another legendary hairy monster) exploitation flick Night of the Demon (1980) which I would defend with my last breath & I have to say it's not exactly a marriage made in heaven but as I said it's fun at times if not exactly gripping or well written. The character's are mostly annoying American teens, there's the expected arguing, there's the macho hero, the strong female & the coward who thinks only of himself so there's no prizes for originality. There are some plot holes too, if a plane load of people crash why only send two rangers on foot to search for them? How are you going to dig a large hole & line it with sharpened sticks in the space of ten minutes? Why did the Yeti not kill that bird at the end? It had killed everyone else up to that point so why not her? The 'there are actually two Yeti's running around' twist isn't used to any effect at all either. At least there's a good pace about the film, it certainly moves along at a fair old pace & I never found myself becoming bored with it. There's some moderately gory action & the film does have some fascination in seeing whether the kids are going to survive or not & if they are going to eat their dead mates or not.

The one thing you can always say about these Sci-Fi Channel 'Creature Features' or 'Beast Feasts' is that the CGI computer effects will be laugh out loud hilarious & so that proves to be the case yet again. The plane crash at the start looks awful & the Yeti when it's CGI looks simply embarrassing jumping all over the place like it's on a pogo stick. There one or two nice gore scenes including a ripped off arm, a squashed head, a ripped out heart, some dead bodies, some blood splatter & the best bit when the Yeti rips a guy in half & beats him with his own ripped-off legs before biting a big chunk out of them. According to the IMDb the actor playing the Yeti took three & a half hours to get into the suit & the make-up which seems like a long time since it's actually a pretty tatty looking creation. Apparently the original title was Raksha: Curse of the Snow Demon with Raksha meaning demon in Tibetan Sanskrit, so now you know.

This has reasonable production values considering the usual Sci-Fi Channel stuff they churn out although the mountain location looks nothing like the harsh, bleak Himalayas & was probably situated near some ski resort somewhere & during a lot of the daytime scenes it actually looks pleasantly warm. The acting isn't that good & I didn't think any of the girls looked that good either which didn't help.

Yeti: Curse of the Snow Demon is another terrible Sc-Fi Channel 'Creature Feature' if I am honest that any sane person will not like but if your looking for a bit of horror themed fun then this isn't too bad & there are one or two entertaining moments that make it somewhat watchable even if it's not very good.", "y": 0}, {"x": "After reading only two of the comments herein, as a lifelong Bronte fan, beginning with Olivier's Heathcliff and enduring with the many versions of Charlotte's \"Rochester,\" it is more than eye-opening to see that it is the UNsung Bronte sister who gave the lie to the male-chauvinist period the trio inhabited. Of course, the \"miracle\" in all three versions of 19th-Century British domesticity is that the \"girls\" were all \"spinsters\" and their only realistic brushes with \"men\" were their vicar father and their wastrel? brother. That said, finally, it is ANNE Bronte who has, in her single assay?, proved the \"feminist\" point, way way ahead of contemporary types, and including the \"voting franchise\" ranks. However, history evinces more than a few who preceded, including the Greek heterai and Sappho and the likes of an ancient emperor's Yang Kuei-fei. And how about \"Eve\" and her apple?", "y": 1}, {"x": "this documentary is founded on sponge cake as soon as you put any REAL evidence on it the integrity slowly sinks into a big pile of crap for example Bart Sibrel claims they must have had multiple lighting sources because the shadows appear to be crossing if this were the case wouldn't there be two or more shadows for each object when Apollo 11 went through the van Allan radiation belts they spent 30 Min's there not the 90 Min's claimed in the documentary and they received a dose of radiation more equivalent to that of an an x ray.

seriously do some research learn what really happened don't let this pile of crap of a documentary mold your opinion of what really happened", "y": 0}, {"x": "Saw it at UCSB's reel loud festival and was *shocked* that it won the golden reel award. I wasn't the only one, considering the audience had mixed reactions to the piece. I thought there were many other better flicks out there, but then I learned that the judges were heavily rooted within the area of film theory and other artsy crap. While the cinematography and editing are on par with many other shorts out there, the storytelling is nothing more than your average student piece. Seems as though \"serious\" student films need to include one of these categories: sex, intrapersonal struggle, and eventual suicide -- Nick and Kate cops out and includes all three. Please, be more original!

Oh, and it might be my outsider's opinion, but the guy from montecito sounds a little fake. Does anyone else thing so?", "y": 0}, {"x": "I was bored one night and Red Eye was on and thought why not.

Red Eye is one of the best movies in a long time.

I mean I just got into the movie cause it was just so brilliant.

The story is new and different.

The movie also has two great leads in the movie with Rachel Mcadams as Lisa Reisert and Cillian Murphy as Jackson Rippner.

The acting is just brilliant and you get the feel for the people in the movie.

The music is just excellent, it give you chills and can also make you feel relax.

I just love how the movie was just so well done and it never gets boring.

Red Eye is just phenomenal. Nothing more and nothing less.

It's a excellent thriller.

Overall, I enjoy Red Eye so much that I can watch it over and over again.

If you like Red Eye, then I recommend Elektra and Cry Wolf.

I give Red Eye 9 out of 10.

Great movie", "y": 1}, {"x": "Josef Von Sternberg directs this magnificent silent film about silent Hollywood and the former Imperial General to the Czar of Russia who has found himself there. Emil Jannings won a well-deserved Oscar, in part, for his role as the general who ironically is cast in a bit part in a silent picture as a Russian general. The movie flashes back to his days in Russia leading up to the country's fall to revolutionaries. William Powell makes his big screen debut as the Hollywood director who casts Jannings in his film. The film serves as an interesting look at the fall of Russia and at an imitation of behind-the-scenes Tinseltown in the early days. Von Sternberg delivers yet another classic, and one that is filled with the great elements of romance, intrigue, and tragedy.", "y": 1}, {"x": "This is a run-of-the-mill nature porn movie. By porn, I don't mean sex. I mean gratuitous images of (for example) thousands of birds together, or hundreds of walruses, or a giant waterfall or iceberg. Several of the shots in the film seem to exist solely to make their way into the trailer, to get people into theatres to see it for all of ten seconds before it disappears never to be seen again for the rest of the film.

There is almost no plot in this film. Told to expect a story of three animal families, \"better than March of the Penguins\", the movie simply doesn't deliver. The blame rests in three key areas: (1) the writers who gave James Earl Jones some of the worst lines to narrate in nature film history, (2) the music team who over-dramatized everything to tell you what you should be feeling, even when the film fails to motivate, and lastly but most importantly (3) the editors who had the story jump from place to place with no rhyme or reason, no continuity, no flow, sucking the life out of the entire film -- a film about life. When we got to the whales halfway through the film, I sunk back in my seat with dread, hoping against hope that the film was more than halfway through, and that I'd be able to survive the long endurance test along with the animals on screen.

There was also almost no science in the film at all. They attributed hot and cold (all of it, not just the seasons) solely to the Earth's tilt, ignoring the fact that we'd have even greater extremes from location to location if there was no tilt because the poles would never warm. And it would be worst if we had no rotation (relative to revolution) like Mercury, because half the planet would bake and the other half would freeze. Then near the end they used the phrase \"humans and animals\", as if humans are not animals, somehow exempt from the laws of nature. So much for science.

I must credit the camera work, however, and again that is why I call this nature porn. Everything from super-slow-motion to what appears to be a finely-tuned mechanically-controlled time-lapse photography, was put to use to provide some (and I caution, only \"some\") stunning moments that do raise the bar compared to other nature films. That said, I am not convinced that it was all nature on the screen. Some of the shots showing the great watering hole in Africa, as it changed from season to season seemed like CGI to me. A director might have expected such suspicion and built in other shots to demonstrate that it's all natural, but they didn't do that.

For a film about Earth, I had expected a lot more of Earth to be shown. What we saw was pristine. We had to take the narrator's word for it that some species are at risk due to climate changes. They didn't show us evidence of it. They didn't show us Alberta's poisonous tailing ponds visible from space. They didn't show us the great Pacific trash whorl. They didn't show us a nighttime picture of human light pollution around the planet. These are as much Earth as anything else. Why cover it up for a feel-good whitewash?

My last criticism of the content is of predation. Any time a predator was shown on the screen actually hunting prey, the music turned almost into that Mt Doom scene from Lord of the Rings, with the predator portrayed as some kind of Sauron ultimate-evil character. But predators aren't evil. They perform a necessary service, ensuring that the best members of the prey species survive. We are predators ourselves. Any time the predator caught the prey, we immediately cut away to something else, to sort of pretend that death and eating don't really happen. The final insult was the \"dad\" polar bear being left to die after he dared to try to eat. \"Bad bear! Bad!\", you can almost hear them say.

On to the presentation itself. My theatre may be in part to blame for this, but maybe not. I had expected to see something with greater clarity than I could see on my own HDTV LCD at home. But the picture was blurry, and was presented in the same 16:9 ratio I could get at home, instead of the wider ratio many films come in these days. And during one action-packed scene near the end, the film (I can't imagine this happening digitally, from how it looked) was damaged, and we lost several of the colors, eventually blacking out completely. That repeated about three times.

If they actually do plant a tree on my behalf, it will have been worth it. But how will I know?", "y": 1}, {"x": "Generally, I am not a huge fan of stop-motion films and at first RUKA didn't capture my attention. However, knowing that this film was made in the repressive Czechoslovakia during the Soviet-domination era, the more I watched the film, the more I realized just how subversive this innocent looking little film was. This subtext really made the film come to life and gives it real staying power as both a work of art and a political statement.

The sad little film is done without any dialog, but it's pretty clear what is happening. A cute little wooden man is making a clay pot and having a lovely time when suddenly a meddling animated hand appears and destroys the pot--making it into a sculpture of a hand instead. Well, the wooden man tries again and again to chase away the hand and do his own thing. However, over time the hand becomes more and more insistent and eventually cages the man. And, by the end, the man is dead thanks to the meddling hand and the hand, in a sign of real hypocrisy, gives the man a hero's funeral!

As I said, this film is an obvious attempt by the brave Jir\u00ed Trnka to criticize his domineering government. Not surprisingly, though Czechs loved the film and gave it critical praise, the state (i.e., the hand) banned this little parable. Sadly, Trnka did not live to see his nation liberated a little more than two decades later during the co-called \"Velvet Revolution\".", "y": 1}, {"x": "I haven't seen this, & don't plan to see this movie or any other that includes Lindsay......unless & until \"poor little rich girl\" straightens out her life for a 2 year period beginning with her most recent arrest in July 2007.

In fact, I don't know anyone that has gone to see ANY of Lindsay's recent movies. I rather imagine 2007 will be the high water mark in her movie making career, until she cleans up her act. All of the recent publicity has only hindered her movie making career, if she has any further aspirations to make any more movies

Up to this time, movie producers have actively sought Lindsay for roles in their upcoming production. Now, Lindsay will probably have to go to auditions & actually compete for ANY role. Her reputation is currently \"poison\" & quite possible could have a negative effect on box office ticket sales on any movie she is in.

Sooooo....now Lindsay is going to have to deal with \"not being wanted\".....is she going to be able to handle this?

I wonder if even Jay Leno will want to have Lindsay back on his TV Show?

All of the foregoing is merely my OPINION. I have no inside information.", "y": 0}, {"x": "An excellent documentry. I personally remember this growing up in NYC in the early 80's. This movie is for anyone that wasn't around during that time period.This shows the one thing the African American Gay Underclass felt was solely theirs and the love and camadrie you see is real. The people are real and sadly few are still alive as this is being written. The balls are still held but not to the extent that they were in the the nineteen eighties. That time is gone forever. This is a good pre \"homo thug\" movie. When Queens were really proud to be extroverts. Goodbye to Storyville this is another era gone but greatly documented all hail film!", "y": 1}, {"x": "Did you know, that Anthony Kiedis, (singer from the Red Hot Chili Peppers) father is in this movie. Blackie Dammit, is Anthony's father. I noticed this after reading \"Scar Tissue\" Anthony's autobiography, and saw a picture of his father. I thought, \"well, that guy kinda looks like that guy from that movie I saw in the eighties. Then I read more and it said his father was an actor that had a few small roles. After checking this site, and comparing with a search on the net, I realized it really is his father in the movie. It's funny, because nowhere in the book does it mention him being in this movie. Perhaps his son was ashamed of his father's acting job in this flick, but he need not be. I think his father, Blackie, did a great job in the show.", "y": 1}, {"x": "I was lying on my bed, with a really bad cold or flu or whatever. I figure maybe I'd kill some time watching some horror movies my mom bought for me a little while ago. I wish I never picked this movie! After I watched it I felt even more sick and I wanted to throw up. Afterwords(when I got better of course) I did some research on Dennis L.Rader and I noticed that the Dennis in the movie was nothing like the real one. I hope that no one ever watches this movie but if they ever do don't eat or you'll feel the way I felt after I first watched it. I think you would have a better time watching The Santa Claus 3. At least that movie had better reviews on this site.", "y": 0}, {"x": "The Fiendish Plot of Dr. Fu Manchu (1980). This is hands down the worst film I've ever seen. What a sad way for a great comedian to go out.", "y": 0}, {"x": "The Ladies Man is a funny movie. There's not much thought behind it, but what do you expect from an SNL movie? It's actually better than most SNL movies (i.e. Superstar or A Night At The Roxbury) Tim Meadows and Will Ferrell were both very funny. Chris Parnell was also funny in his short scene (one of the funnier ones in the movie). Other than that, the rest of the cast is average and is just there to support Meadows. I've definitely seen funnier movies, but I've seen dumber ones too. Again, it's not exactly a deep movie, but it's good for a few laughs. It was funnier as a skit though. But still, if you're looking for a pretty funny movie, I'd recommend this one. Just don't think about it too much, or you'll hate it.

Rating: 6/10", "y": 0}, {"x": "While it certainly wasn't the best movie I've ever seen, it was certainly worth the $8 (which can't be said for many movies these days.)

This was a pleasant account of a true story, although many of the details of the real story were twisted for the movie, (ie, Billy Sunday's character was three or four people in the real story combined together.) Robert DeNiro was of course good, and Cuba Gooding, Jr., was also impressive.", "y": 1}, {"x": "The plot of 7EVENTY 5IVE involves college kids who play a cruel phone game that unexpectedly (to them, if not to fans of horror) gets them in over their heads. The STORY of 7EVENTY 5IVE, on the other hand, is that of a horror film that had a wee little bit of promise, sadly outweighed by really bad writing.

What could have been a fun, if somewhat silly, old-fashioned slasher tale is derailed early on by its filmmakers' misguided belief that the audience would enjoy watching a bunch of loud, whiny rich kids bitching at each other for most of the film's running time. With the exception of a police detective played by Rutger Hauer, (in a minor role that is designed mainly to add the movie's only star power) every character on screen is a different breed of young A-hole.

Male and female, black and white, straight and gay, an entire ensemble of shallow and shrill college kids carries the bulk of the film's narrative. Worse, since the tale deals with a PARTY game gone awry, most of the time the scenes are completely filled with these little b*****ds. Because of this, there are few breaks for the viewer, who must put up with the angry sniping of the thinly-drawn protagonists. Even though at least some of these people are supposedly friends, invariably all characters interact in a very hostile manner, long before any genuine conflict has actually arisen. This leads to the worst possible result in a slasher film: The audience, intended to care about the leads, instead not only cheers on the anonymous killer, but wishes that he had arrived to start picking off the vacuous brats far earlier.

The real shame of this poor characterization is that otherwise 7EVENTY 5IVE actually DID have some potential. Visually it's fine. First-time directors Brian Hooks and Deon Taylor know how to build a suspenseful mood. They also manage to deliver on some competent, if sparse, moments of classic 80s-style gore. Surprisingly, the production's cast is also fairly able. It isn't that the actors aren't capable of expressing realistic human emotion; it is simply that the screenplay (co-written by newcomer Vashon Nutt and director Hooks, who fared much better behind the camera than with a keyboard) is short of such moments.

7EVENTY 5IVE can hardly be recommended, as its familiar premise and few thrills can't outweigh the bad taste left behind by a story driven by a gaggle of unpleasant characters. In this tepid whodunnit, the real mystery is why anyone should care about a group of young folk who can't even manage to like each other.", "y": 0}, {"x": "I was lucky enough to get a free pass to an advance screening of 'Scoop' last night. Full house at the theatre and when the movie ended there was spontaneous applause. I didn't speak to anyone who disliked 'Scoop' although two teenagers sitting next to me sighed and fidgeted uncomfortably for most of the film. They were the exception though because everyone else including myself really enjoyed themselves.

'Scoop' is a quickly paced murder mystery. A young female journalism student is unwittingly maneuvered by forces beyond her control into trying to catch a serial killer on the loose. Plenty of hijinks ensue as she partners up with a traveling illusionist and falls in love with a frisky and charming young nobleman.

'Scoop' isn't a bad addition to the Woody Allen filmography. It isn't his best work but it is a very enjoyable and light hearted romp. I'd say it fits quite comfortably into being an average Woody Allen film, right in the middle of the pack. If you're a Woody Allen fan you'll probably enjoy yourself. If you're indifferent to his work then 'Scoop' might be enough to get you interested in seeing more. I don't think that anyone who dislikes his style of film-making and acting are going to change their mind. Woody plays the same kind of neurotic character we've grown so accustomed to although it borders dangerously close to forced and over the top in this film. While potentially aggravating for some who might find themselves wishing he'd hurry up and just spit out the words, Woody Allen fans know what to expect.

Very good performances all around in my opinion although I found myself missing Ian McShane who is excellent and not on camera nearly enough. Hugh Jackman is great as the charming nobleman and I think Woody Allen has found a new regular star to work with in Scarlett Johansson. I think that with 'Match Point' this is their second pairing and she's just magic with the material that Woody gives her. Could be the beginning of a beautiful relationship! I'm glad I saw the movie and definitely recommend it. More sophisticated comedy than movies like 'Scary Movie 4' so if your brand of comedy is the latter rather than the former, 'Scoop' probably isn't for you. If, on the other hand, you like a touch of class, sophistication and fun, 'Scoop' is for you. Probably not the Woody Allen film I'd introduce to a newcomer but all others should give it a try.", "y": 1}, {"x": "This romantic comedy isn't too bad. There are some funny things happening here and there, and there are some rather memorable characters in it.

The acting, however, is amateurish (with the exception of the banker). While some scenes are great fun, others are simply embarrassing. In particular, I found the \"romantic\" part of the story poor.

All in all, I guess it's worth seeing if you like football and romantic comedies. It's not really a bad movie, and the ending did feel quite good. Just don't expect anything out of the ordinary. Fair enough if you have an hour and a quarter to kill.", "y": 0}, {"x": "Come on people. This movie is better than 4. I can see this happening...wealthy people have done crazier things than this. And it was funny.

I watch a comedy to be entertained, escape from the pressures of the world for a short while, and not to have to take anything too seriously. This movie fully suits that purpose. I judge a movie on its own merits and am not about to compare Surviving Christmas to Blazing Saddles. I watched totally dysfunctional people grow into caring, likable individuals who could easily live down the street from my home. It will remain on my list of \"favorite.....must watch for the holiday season\". If you just want to have a fun 90 minutes, watch this one.", "y": 1}, {"x": "Why didn't the producers give that show a chance Of all the junk on TV, why didn't the producers give Six Degrees a chance? Will the series go on video? I would love to see how it ends. Put season one on video and sell it. I was a loyal fan of Six Degrees and waited for it's return. I set my recorder to tape all of the shows. Thank God for that. I just found out that the show was canceled and I'm heart broken. I wish I knew it was going to be canceled, why didn't they tell us? I thought the show was just developing some depth in the characters. The writing was pretty good also. Steven (Campbell Scott) is my all time favorite. I am SO sorry to see it go!", "y": 1}, {"x": "Perhaps because I was so young, innocent and BRAINWASHED when I saw it, this movie was the cause of many sleepless nights for me. I haven't seen it since I was in seventh grade at a Presbyterian school, so I am not sure what effect it would have on me now. However, I will say that it left an impression on me... and most of my friends. It did serve its purpose, at least until we were old enough and knowledgeable enough to analyze and create our own opinions. I was particularly terrified of what the newly-converted post-rapture Christians had to endure when not receiving the mark of the beast. I don't want to spoil the movie for those who haven't seen it so I will not mention details of the scenes, but I can still picture them in my head... and it's been 19 years.", "y": 0}, {"x": "I watched 'Ice Age'in the movie theater and I liked the movie. Spite of the fact that 'Ice Age'has many flaws and scientific errors,like humans,sabers,dinosaurs and mammoths living at the same period, and even the location of where the story passes(looks North America,but has some characteristics from Iceland for example) we can have fun even so.(unless you are very severe!)

The planet is entering an ICE AGE, and many animals are immigrating to the south where is warmer. Sid is a stupid Sloth that is left behind by his own family, that can't stand him any longer.Walking in his way, he meets Manfred,or how he calls '' Manny'' a moody mammoth who does not care about extinction or immigration and is going to the north. Worried that he can easily be captured, Sid decides to follow Manfred, and in the middle of their journey, they found a human mother with her baby. The mother dies but Manfred and Sid decides to take him and return the baby for the humans. Diego, one of the sabers, decides to follow and help them to go to a shortcut to the human's camp. What Manfred and Sid does not know, is that Diego is from a saber clan who hates humans and wants to kill the baby, and also pretend to betray they both to make they become saber's food. What will happen, will depend of Diego's behavior and conscience...

aka \"A Era do Gelo\" - Brazil", "y": 1}, {"x": "There is a lot to like here. The actors are first rate and the script provides good dialog best capturing the ambiance of a tightly knit, likable family. However, for that reason the film does not ring true. We see Leo, who apparently just learned of his HIV positive diagnosis, essentially react in a way that is not in tune to the supportive atmosphere for which he finds himself. As well, the film ends somewhat abruptly avoiding what Leo, his brother and the rest of this close family must have dealt with in light of their love for him. The young actor who plays Leo's brother, Marcel, is impressive as generally is the rest of the cast. Unfortunately, the scriptwriters could not decide onwhether they wanted an insightful dissertation on the effects of HIV on a functional, appealing family or what the devastation HIV is on the victim - so it only hints at both. While this film provides food for thought it leaves the viewer wanting much more than it delivers.", "y": 0}, {"x": "A Classic Hollywood Biopic is the best sense of the genre. Gooding and DeNiro both give spectacularly heartfelt performances in the two leads roles, and the supporting cast is uniformly excellent, with standout performances by Carl Lumbly and Michael Rapoport.

The only \"nit\" I might pick is that Theron's role was unnecessary & distracting (not her performance which was fine, it's just that the film seemed to add two unnecessary scenes to accommodate her role.)

Aside from that, the characterizations, dynamics, and action of the real-life story are riveting and unforgettable. The evolutions of the main characters and how what they experience evolves their beings are uniquely characterized by the performing artists. Despite the movie's extreme length, the pacing stays intact throughout. The score is also terrific.

Us this a predictable Hollywood film? You bet. So, Mike Leigh addicts should subtract a star, but everyone else should enjoy mightily.", "y": 1}, {"x": "I do have the `guts' to inform you to please stay away from `Dahmer', the biographical film based on the real-life story of the grotesque serial killer. `Dahmer' strays more in relation to the mentality of its focused subject. Jeffrey Dahmer, who murdered over 15 young males and ate some of their body parts, was probably the most incongruous serial killer of our generation. However, the real sick individuals are the filmmakers of this awful spectacle who should have had their heads examined before deciding to greenlight this awful `dahm' project. This is not an easy film to digest, even though Jeffrey would have easily digested it with some fiery `brainsadillas' appetizers or even some real-life `Mr. Potato skins'. * Failure", "y": 0}, {"x": "One more of those brilliant young men who went all out and dared to make a teen romance film( can i actually call it that?- it would invoke the devil out of its fans)on a micro budget but packed with such taste, sensitiveness and maturity. Peter Sollett- you deserve more admiration and respect.Thanks once again for demonstrating to the powers that be in the \"industry\" that stereotypes can be flushed down the toilet. One location,a handful of rich characters, low budget,good acting(and that too amateurs),decent lighting - worshippers of true indie cinema should watch more of this and STOP watching...well...you know what.", "y": 1}, {"x": "This movie looked as if it might be good at the beginning, but never fleshed out to it's expectations. The director is talented and has some good camera angles and artistic ideas (typical of the Asian directors), but doesn't know how to create or tell a good story to go along with it. The story was fragmented and seemed to go off in all sorts of different directions throughout the film, never finding a solid, explainable, interesting angle. Basically, the movie never fit the explanation on the press releases. The acting was very good, however. All the actors gave good performances, and Jude Law was outstanding as he is always is. It is too bad he chose to do such a weak film.", "y": 0}, {"x": "I somehow missed this movie when it came out and have discovered it as late as last week thanks to a friend's recommendation. I can honestly say that I cannot remember another intimate dramatic film, which does so many things so well. The writing is crisp, realistic, nuanced, and even restrained. The cinematography and editing are understated but inspired, enabling the visual storytelling to dominate through marvelous close-ups and framing of images, capturing loneliness and alienation in most memorable ways. The acting is also wonderful, with all of the characters becoming painfully real and vulnerable in the most compelling ways that a film can offer. They reveal their innermost weaknesses with unprotected, raw vulnerability. A real triumph for Roger Michell and Hanif Kureishi, and the rest of the team. A must see for serious film lovers.", "y": 1}, {"x": "I think Hollow Point is a funny film with some good moments I have never seen before in action movies. Well,both Tia Carrere and Thomas Ian Griffith aren't so good in acting, but Tia Carrere is nice and good looking girl, isn't it? But Donald Sutherland is superb in his role so-so mad gangster.", "y": 1}, {"x": "Since the title is in English and IMDb lists this show's primary language as English, i shall concentrate on reviewing the English version of Gundam Wing(2000) as presented in the Bandai released DVD set. My actual review for the whole series is under IMDb's entry of \"\"Shin kid\u00f4 senki Gundam W\"(1995).

Very little is changed in respect to plot, script and characterization its adaptation to English and it really depends on your own taste to choose which language to watch this show in. Purists can stick to Japanese all they want, but for a more \"realistic\" experience i recommend the English track since all the characters, except Heero Yuy, are not Japanese.(most of them are Caucasian in fact with a couple of non-Japanese Asians.) For one thing, the characters' personalities come across more \"directly\" than in the Japanese version. The contrast between the characters is stronger thanks to some give-or-take performances but a very well cast group of actors.

Wing Gundam's pilot Heero Yuy is a highly trained soldier who suppresses his emotions but slowly learns the value of his humanity. Voiced by Mark Hildreth who's deadpan delivery can be criticized as \"bad acting\" but it matches Heero's personality very well.

Deathscythe Gundam's Duo Maxwell, ever cheerful in the face of death is given a crash course in the cherishing the value of life and friends. He is possibly the best acted character in the whole show, masterfully played by Scott McNeil. He may sound a little too old for his age, but Duo's English voice easily out ranks his irritatingly nasal Japanese one.

Trowa, the pilot of Heavyarms, is a lost lonely soul who's only purpose so far has been combat; despite his inner desire to form connections with the people around him, he only knows how to kill, not to befriend. Kirby Morrow gives a somber but realistic performance as Trowa Barton.

Quatre Rebarba Winner is voiced by Brad Swaile who has no trouble brining out the caring nature of the character and the shattering of his innocence as he experiences horrors of war and death first hand. A huge plus point is that Quatre no longer sounds like a girl(and yes he is voiced by a female actress in the Japanese version) but a bona fide typical 15 year old guy.

The impulsive but determined Wufei Chang voiced by Ted Cole may seem a little over-the-top but it plays out in stark contrast to the more subdued roles of Heero and Trowa.

Relena Darlian sounds older in English, voiced by Lisa Ann Bailey. This might not sit well with her youthful personification early in the series but as her character matures later into the story, her voice follows suit and ends up fitting in very well with the character development.

Zechs Merquise would be one of the more drastically changed voices when compared to the Japanese version. Both voices bring out different sides to the same character. His Japanese voice is haughty, authoritative and commands respect , keeping in line with his high ranking status and charismatic nature. His English voice by Brian Drummond is more subdued, sounding more devious and \"snake-like\", highlighting Zechs' secretive nature regarding his hidden agendas and staunch beliefs in his ideals.

The members of OZ are a mixed bag really. Treize Kushrenada voiced by David Kaye is given a more realistic and down-to-earth performance compared to his larger-than-life Japanese style of speaking. However, Lady Une does not convey her split personality as contrastingly as in the Japanese version and Lucrencia Noin just sounds.........bored most of the time. The cannon fodder pilots and military leaders are nothing to speak of either.

I would have appreciated if they took the time to give different characters different accents to reflect their ethnic backgrounds. The Maganac Corp's voices were generally uninspired but could have been more interesting if they were given middle eastern accents. The members of the Romerfeller Foundation would have also sounded better with some classy European accent that reflects their status of nobility.

Despite underwhelming acting from the side characters, the main cast manage to carry the show and it results in an overall less over-the-top and more realistic rendition of Gundam Wing's script. Very faithful to the original Japanese script, keeping all the underlying thought provoking ideas and themes about politics, war and human nature. Sadly, it also retains the flaws of the original Japanese script.", "y": 1}, {"x": "As far as I can tell you, in spite of earlier comments posted by other commentors, this film IS currently available on DVD. I found it only a few weeks ago.

It is on the Value DVD label and I paid the grand total of 98 cents plus tax for it. I found it at a 98 cent store among racks of plastic bowls and disposable chopsticks. Now don't you people who shelled out beau coup bucks for the super-duper Swedish import limited edition version feel like you were had??? I thought so.

This film was indeed well worth 98 cents. 99 cents, I might start to argue with you. But clearly worth 98 cents. And remember that saying about getting what you pay for. For slasher film mavens only.", "y": 0}, {"x": "I'm the sort of person who went down to the local library and read books on Babbage's difference engine whilst my schoolmates were playing football etc.. So, if there is any such thing as a target audience for this film, then I guess I'd probably be included in that.

Maybe I just need to watch it again. A previous reviewer mentioned not to watch this film whilst being tired. Maybe that was my mistake.

I tried my best to enjoy this film, and there are aspects of it that I do like, but overall I found it amateurish and quite plodding.

Being somewhat of a self confessed computer nerd, I just can't help but pick up on the exact time frame when the movie was actually made, and how the employed graphics reflect that time (i.e. 1997). Having played games of the era c.f. \"Mind Grind\" to cite one example, this film cannot escape that 16-bit colour low res multimedia explosion of that time. Now thankfully this has somewhat lessened in more recent years in the gaming world at least, in favour of actual game play.

Having to resort to watching this movie via a German FTA satellite channel (as I don't think it's ever been aired on UK FTA TV, well not recently anyway), I was mildly amused to see the end credits note Gottdog (God dog) had 4 people working on it's design. Maybe it's mean spirited of me to be amused by this, given that ten years have elapsed since the movie was made, nevertheless the end result makes movie graphics from the eighties look good by comparison.

But, as for the main story, I agree that the format isn't the best idea. Like others I agree that Ada deserves a film without the sci-fi angle, and a more straightforward biographical approach would perhaps be better suited to covering the life story of this remarkable lady.

There are fundamental mistakes that undermine my enjoyment of this movie. First of all the underlying idea that somehow lost real-world information from the past can be accurately reconstructed through some sort of extrapolation via software based intelligent agents, seems somehow ludicrous.

Also, the theme running through the movie that a computing device can indeed predict the mechanics of all things through the course of time (e.g. the winds) is now known not to be the case.

OK, so the Victorians may have held this view, but the 20th century works of G\u00f6del proving that no mathematical system can be complete, Turing's works on the limits of computability, not to mention chaos theory and quantum mechanics, have all completely undermined these ideas, which seem central to how the modern day researcher's software is supposed to work.

Finally, the clicking of the mouse in the air to mean \"programming\" is also just plain wrong, as previously mentioned.

This film maybe could have been OK, but at least some technical and scientific consultation would have given the film some much needed credit in the believability stakes.

I won't forget the film though, as like \"Pi\", it is clearly a unique work, but with too many fatal mistakes for me to truly enjoy it, 3/10 from me.", "y": 0}, {"x": "I know that there are some purists out there who poo poo anything that is not exactly like the original, however sometimes spin-offs can stand on their own merits. I like the new Iron Chef because it is similar enough to the Japanese version but at the same time caters to American spirit. I love Alton Brown as commentator, because he explains things with flair. The Iron Chefs themselves are very interesting. I know the originals were probably the best chefs on the planet at the time, but Bobby Flay is the only American Iron Chef to beat them. Mario Batali seems to have the most fun when cooking, making comments and being flashy while creating. I have watched the series and find all the players work together well. The judges are not always the best choices, however. There are a few exceptions, like the lawyer turned foodie, but most of the judges are questionable in being able to handle what is served. I enjoy watching the chefs hustle and the challengers are surprising. The food at the end always looks amazing and sometimes it inspires me in the kitchen. Perhaps that is all anyone can ask, to want to really eat what is served. The only thing I would really change about the series is to ask folks on the show to lighten up a little. Sometimes the mood becomes a bit too tense, and that isn't always fun to watch when you are expecting more amusement. I liked the version with William Shatner (Iron Chef USA) because it was so over-the-top like the original, but I can tell it was a pretty expensive proposition. I wish he had stayed with this version and been the host - between Bill Shatner and Alton Brown, that would have me grinning for an hour. As long as you don't expect the original Japanese version and can accept this series on its own merits, you may find it to be an enjoyable hour.", "y": 1}, {"x": "King's Solomon's Mines brings us Patrick Swayze (playing Allan Quatermain)who has spent a lot of time in Africa, but decides it is time to return to England and be a father to his son. He finds that his wife's parents have taken custody of his son and that he has very little chance of getting custody of him with lots of money for a law suit. In comes Alison Deedy (playing Elizabeth) whose father is in Africa and being held by an African tribe for ransom of the map Elizabeth's father had sent her. Elizabeth seeks out Quatermain to take her back to Africa to find her father.

There is a good cast of supporting characters that go along with Quatermain and Elizabeth and of course there are some enemies (Russians) who want the map also.

The movie holds your attention until the end. Patrick once again plays a ruggedly handsome honorable man who comes to the rescue of the damsel in distress. Patrick is a great dramatic actor who can easily portray passion, loss and despair, the rugged silent good man, anger and strength; In King Solomon's Minds his character actually smiles a few times. I would really like to see Patrick Swayze in a relaxed live-loving story again, one in which he doesn't have to clench his jaws and be quite so strong. Maybe a little dancing would help. But this is a good movie for the entire family and worth the time to watch it.", "y": 1}, {"x": "I've seen the original English version on video. Disney's choice of voice actors looks very promising. I can't believe I'm saying that. The story is about a young boy who meets a girl with a history that is intertwined with his own. The two are thrown into one of the most fun and intriguing storylines in any animated film. The animation quality is excellent! If you've seen Disney's job of Kiki's delivery service you can see the quality in their production. It almost redeems them for stealing the story of Kimba the white lion. (but not quite!) Finally Miyazaki's films are being released properly! I can't wait to see an uncut English version of Nausicaa!", "y": 1}, {"x": "An okay film, with a fine leading lady, but a terrible leading man. Stephan Jenkins, who plays the husband, is a truly bad actor. Joyce Hyser, on the other hand, is the movie's saving grace. She's the best actor of the bunch.

NOTE* the first comment, by the fellow who heaped praise upon the movie (and, according to his IMDB.com account, has only written ONE review -- and guess for what movie?) is obviously a plant. While the movie is nicely shot, it's by no means subtle or great or whatever other hypobolic descriptions the reviewer used.

\"Art of Revenge\" is a fair movie, but it's a big tease. It offers up all manner of sexual situations but never goes through with it. Like watching a Skin Flick on Cinemax, but with all the \"naughty bits\" edited out.

The film, as a whole, is a bit unfocused and the ending, and much of the third act, is really a big mess. There's a twist ending, of course, since every movie nowadays finds it necessary to have a twist ending.

A 4 out of 10.

", "y": 0}, {"x": "I was not impressed about this film especially for the fact that I went to the cinema with my family in good faith to see a film which was certificate rated 12A here in the UK. To my dismay, this film was full of embarrassing sexual jokes. (Which is not a problem to me as an adult, but not good for watching with children). This film at times was very crude at times with fart jokes, getting hit in the groin etc... and for the most part of the film not very funny.

The premise of the film is that Calvin Sims who is a 2inch midget, gets out of jail and steals a giant sized diamond but is then forced to put it in a womens handbag. So the rest of the movie sees him passing himself off as an abandoned baby, getting into this womens house so he can get this diamond back.

Up until now, I have enjoyed most of the output from the Wayans Brothers - but this film is certainly taking the biscuit.

A Bit of good advice - wait till it comes on TV or Cable", "y": 0}, {"x": "All I can say is, first movie this season that got my attention. I picked it because of the actors, Gere and Claire, and the story looked promising..I have just watched it and i can say - i'm overwhelmed. There are shocking scenes, true..but that's what makes it more realistic. We shouldn't run away from our reality, these things are happening right this moment. And there are experts who are trying to change things and make things better and who get laughed out about their commitment to the cause. Actually I can't seem to feel the \"Hollywood touch\" in the movie..and that's what makes it better. Both Claire and Richard did a great roles, and deserve a 10 from me.", "y": 1}, {"x": "I'd always wanted David Duchovney to go into the movie business, and finally he did, and he made me proud. This movie lived up to what I had hoped for. Duchovney played his character very well, managing to remain consistent with something new, instead of playing the Agent Molder we are used to. Therefore, I give him extra credit for his role, also because I could not see anyone else playing that particular character. David was great, but nothing compared to the psychotic Timothy Hutton. A brilliant performance that you don't get tired of throughout the movie, because he never fails to surprise you. He has weaknesses, and strengths, making the story all the more believable. I also very much enjoyed the narration, it added to the story a good deal, and had some very memorable quotes that i still use to all the time. This movie also had a wounderfull score. I recomend this for anyone who likes drama, and doesn't mind blood.", "y": 1}, {"x": "Here's yet another blasphemous European story in which they blast the religion of their country. (These atheist filmmakers are relentless.) Here we see a brutal blasting of Catholics and/or the Catholic clergy (and I am not Catholic).

This won actually won an Academy Award for bes foreign film. That's probably because the story made Catholics and religious belief in general look extremely weak. One of the main characters is a priest and he cares more about food than anything else. He's portrayed as nothing but an idiot. No wonder the secular- dominated Academy loved this movie.

Also, there is some overacting fool who plays a guy who renounces his religion so he can marry one of the four daughters featured in the story. The daughters take turns seducing the \"seminary\" student (who states he studied for six years but says he's an agnostic!). I mean, how blasphemous IS this film??!!!

This is a disgrace and another excellent example of the secular-progressive bigotry of the film business, worldwide (not just Hollywood).", "y": 0}, {"x": "I don't know who got the idea that orcas go around killing people and bashing and destroying things for revenge but my god is it absurd. Orcas are most definitely not the cold-blooded killer this movie makes them out to be...its silly. Orcas are extremely intelligent, don't get me wrong, but I highly doubt they know and understand a concept such as revenge. So I have to say all I got out of this movie was the entertainment of how preposterous it was. So I was at least somewhat amused by it. Personally, I'd recommend going and seeing Jaws if you're wanting to see an Animal-Killing-Humans type of movie. But if you're like me and want to laugh at something this far from realism then I'd say go ahead. :D", "y": 0}, {"x": "I wasn't going to watch this show. But, I'm glad I did. The critics of this just don't get it! It's one of the funniest and most entertaining thing on T.V at the present moment! Though, when the interviews were done with common folks they probably seemed useless; but, put them in the mouth of animals and insects, and it's a laugh riot. I laughed so hard, I had tears in my eyes. The pig with the babies suckling and her mother is priceless. The husband and wife birds talking about health problems, and the male bird taking a crap after the wife said she was constipated completely broke me up! Creature Comforts is the most imaginative show I've ever seen in awhile! Hopefully, it will be back next summer when this run is over.", "y": 1}, {"x": "This film is really terrible. terrible as in it is a waste of 84 minutes of your life. Special effects are so terrible. The acting wasn't convincing.

Its about a crocodile that attack a view tourists as they are filming a documentary about \"blood surfing\". Blood surfing is when they surf around sharks but it turns terrible wrong when a 31 foot crocodile interrupts there holiday. The sharks don't look real. The crocodile is even worse, and it gets even more pathetic when they are running away form the creature, but the crocodile gets stuck and 2 females flash it. The deaths are fake and the pirates are just to fill in time.

A pointless, terrible film thats not worth seeing!!", "y": 0}, {"x": "Kim Basinger stars as Della, a desperate housewife with a somewhat abusive husband, who gets into trouble while she's out at the local mall doing some last minute Christmas shopping. After placing a hastily scrawled hateful note on a piece of paper and sticking said paper in the windshield of a car that took up two parking spaces, she finds out the owners of the car are the Rainbow Coilition of villains comprising of a white guy, a Mexican, a Chinese guy & a black. They confront her about the note, cap a helpless security guard, and the chase is on. During the course of the film Della will go for hunted to hunter as she unleashes her inner Bronson.

I found this to be a somewhat tense little thriller. The acting was good enough (except for a few scenes, the \"Why God why\" bit was cringe worthy in it's badness though) It comes undone a bit due to the sheer fact that the villains Della chases from/after are mind-numbingly stupid. If they hadn't had the intellect of any given \"Home Alone\" baddie, perhaps their eventual defeat would be something to savor instead of the meh reaction it evokes. The unbelievability factor I'm willing to overlook as both the director & one of the producers had part in bringing \"Shoot em up\" to the screen (a film which while throwing credibility out the window was immensely fun). This film while never attaining the heights of that film, was good in it's own rights.

My Grade: C-

Anchor Bay DVD Extras: Commentary with Writer/director Susan Montford and producer Don Murphy; a 25 and a half minute 'Making-of'; a trailer & two TV spots for this film; and trailer for Lower Learning", "y": 0}, {"x": "I'm a big fan of the old westerns, and do not believe that Hollywood is capable of capturing its old glory. But not even Ronda Fleming and Stewart Granger can help this 1957 movie which carries nearly all the trite characteristics of westerns of the reformed gunfighter turned good guy. fallen but virtuous woman, bigoted townspeople who must turn to gunfighter for salvation, etc. I can't help but notice the last names of the writer and young \"actor\" who plays Granger's son. Any nepotism there? I've seen better acting in high school plays. Chill Wills plays a cartoon characterization of Chill Wills. Have I reached the 1000 words yet?", "y": 0}, {"x": "MST 3000 should do this movie. It is the worst acted movie I have ever seen. First of all, you find out that the shooter has no bank account and no history since leaving the army in 1993 and pays his rent in cash. There is no way in hell that a person like that would ever be allowed to be that close to a president not to mention a high profile job. Also, the head of security for the POTHUS would not be so emotional that he would start drinking into a haze if the president was shot. This movie sucked. I cannot express the extremite that this movie was. Every single actor was terrible. Even the chick at the trailer park. I crap on this garbage. What a waste of time.", "y": 0}, {"x": "You MUST be kidding!!!! Let's entertain the possibility that Parker Posey is really an actress, and not just some entry in the \"quirk of the month club\" of actors. Really, unless this is meant to be a tongue-in-cheek satire on David Mamet-- terse, confusing dialog delivered alternately in machine gun rapidity or monotone (think Ben Stein) blandness--or a flat out dry comedy; this film has got to be in the running for a Rotten Tomato Award---or worse.

As if the stiff and uncomfortable Posey weren't enough, we've got the stiffer and even more uncomfortable Jeff Goldblum. There's more wood in this film than a toothpick factory.

Adding to this already bizarre casting, are several other roles, all populated by forgettable actors, who look or sound like escapees from America's Next Top Model, Don Pardo, or even the kid, who pronounces the word \"been\" like \"bean\", which just brings our attention to the fact that there is so little to like about this film, we are analyzing his accent to guess if he's Canadian or not!! I think I laughed heartily in places that are supposed to be serious, and took seriously sections that are meant to be humorous. Even the soundtrack sounds like a caricature of Alarik Jans music for Mamet's \"The House of Games\". If taken as a spoof, the film is almost droll; if taken seriously, just a self-conscious piece of drek.", "y": 0}, {"x": "Sorry, gave it a 1, which is the rating I give to movies on which I walk out or fall asleep. In this case I fell asleep 10 minutes from the end, really, really bored and not caring at all about what happened next.", "y": 0}, {"x": "Not to be confused with the British black comedy of the same name that came out in 1994. But this Shallow Grave is a worthy addition to the 80's backwoods slasher.

The plot goes = 4 sorority girls from a convent are planning the spring break of a lifetime in Florida, but they're plans are put on hold when one of them witness a man murdering a local woman, and when he realizes that he was seen, well let's just say it becomes a deadly game of cat and mouse and things get even worse when he turns out to be the local sheriff.

Shallow Grave in my opinion is one of the more enjoyable slashers that came out in the 80's, especially the late 80's which was when the slashers kinda went downhill, this was one of the few that didn't and this movie should be more well known, it's a pity it isn't. this is one film that actually confounds stereotypes (just try guessing who the final girl is going to be - I got it totally wrong). The principle cast are all likable and it's one of those movies that you kinda hope they all get away, which of course they don't. This, coupled with the fluffiness of the film's first half-an-hour jars (in a good way) with some flashes of real nastiness (the second murder provides a real jolt) and some unexpected sleaziness (even though this isn't a high budget thriller I didn't expect the topless scene where a woman is strangled with her own bra (accompanied by a hysterical religious radio broadcast), in a film from this late in the 80's).

There are one or two bad things about this movie, well not bad just minor, like the sub plot with the two teenage boys which doesn't go anywhere and the ending which was stupid and plus the Deputy inability to follow logic. There aren't any sharp implements in SHALLOW GRAVE but, to my mind at least, it's a slasher flick through and through. The scenes where the girls are hunted through the woods by the malevolent Sheriff are tense and exciting.

All in all a very enjoyable and worthwhile slasher, with great performances from all four of the main girls and that psycho sheriff.", "y": 1}, {"x": "This movie started me on a Nick Cage kick. It is a story full of twists and turns- a movie of motives and moves. Of, course, Dennis Hopper was a ham, but J.T. Walsh and Laura Flyyn Boyle are the perfect pair to catch the unsuspecting man who has fallen into their web. Everything about this movie is good - cinematography, story pace and most of all the end. Cage excels at what he does best- it's not to be an action hero but to be an everyman caught in the snares of life.", "y": 1}, {"x": "This has to be one of the worst movies of all time. The graphics were horrendous, the acting was b-movie and the effects were just plain Nintendo 64 qualified. You would think that they would put a little more effort into it. Of course, it is a Scifi channel movie so you have to expect it to be low rate, but this one takes the cake. Hell, I'm still laughing. So, as a shake-your-head in disbelief movie, this one does well.

Although it appears to have some 'known' actors and actresses in this, it is difficult for me to believe that they did not realize that the quality of this movie was worth their time and effort.

The graphics might have been good in the '60's or even early '70's but come on, this is 2009! I wont give spoilers out, let's just say that if you have played \"Jurassic Park\" on the Nintendo 64 you will be very familiar with what you see in this film

It is definitely not worth the 2 hours it took to sit through the thing", "y": 0}, {"x": "The movie starts out with a bunch of Dead Men Walking peeps sitting in individual cells, waiting for their inevitable meeting with death represented by the electrical chair.

Then our \"hero\", who is called Tenshu, is taken to the chair, he's zapped, and then....he's still \"Alive\". AHA ! He is given a choice by some creepy military guys who look really cool : Either we zap you until we've made sure you're actually dead OR you can walk through this door and take whatever destiny might lie ahead of you\". Our hero says yes to option 2, and then the actual story commences.

He wakes up in a different sort of cell (very high-tech and very big), where he finds another cell-mate, who also managed to survive the electric boogie-ride. A voice in the speakers tells them that they are free to do whatever they wish, as long as it happens within that room. Sounds a little suspicious, but the two men accept : What else can they do ?

What these two men do not know is that they have been set together, so they can awaken an inner urge to kill within them. Basically the unknown scientists in the background p**s them off until they decide that they should kill each other. Sounds weird ? Indeed, but there's a greater purpose to all of this. THIS is the part which should not be revealed, and so it shall remain unrevealed.

But fear not, it is the unknown that lures the viewer to watch more of this pseudo-action movie, fore it has an entirely different approach to the question : How long time can you stand being with a man who's an S.O.B. and would you kill him to obtain freedom ?

The first hour is basically trying to awaken your interest, it sneaks up without you actually knowing it. Then it becomes a roller coaster ride with WILD Matrix-like action fight-scenes with a touch of individuality to honor the comic book from which the movie is based upon.

The movie is indeed very special, so special that normal cinemas won't view it under normal circumstances. However, the story is fascinating, the music is fantastic, and the actors do their bit (some more than others) to make the movie truly unique.

If you should be so fortunate that your cinema or video store has it, watch it, and enjoy the fact that not everyone is trying to make mainstream movies to earn huge bunches of cash.

", "y": 1}, {"x": "Don't get me wrong, this is a terrible, clich\u00e9d film, but it is a delight for fans of Olivia Hussey - quite possibly the most intoxicating beauty ever to grace the silver screen. One poster stated that she was unpleasant to look at - I wonder what his ideal woman looks like - Paris Hil-slut? Blockbuster should really establish a sub-genre to this type of film, as the Fatal Attraction plot has become a genre unto itself. When will Blockbuster adopt the \"Adultry\" section? It will fit in quite nicely between the drama and action sections, right? This film revolves around Olivia Hussey, who spends a night of passion with an unstable yacht owner who may have murdered his ex-wife, who looks remarkably like Ms. Hussey. This ne'er-do-well proceeds to stalk Olivia and thus make her life a living-hell. I like Olivia Hussey, but I have no sympathy for characters in movies that cheat on their spouses, so I really wasn't rooting for Olivia to make it out o this stinker alive.

VIOLENCE: $$ (There is a smattering of violence in the film. Don Murray and Anthony John Denison get involved in a fisticuffs when Denison says that he will not stop seeing Olivia, Murray's wife, because she is just too good in bed. Olivia also gets to handle a shooter and might get to squeeze off a round - I'll let you watch).

NUDITY: $$ (Olivia is the queen of brief nudity and supplies a little here. She has a love scene with Anthony John Denison and also has a shower scene - shot at a distance).

STORY: $ (We've seen this plot before - a hundred times over, and oftentimes done much better. The true culprit, when trying to decipher why this film was a dud, is William Riead. The man's dialogue is sophomoric and moronic. The man has no story-telling abilities and fails to build believable human reactions to the plot. These people, of the upper strata of society, talk like middle school kids - with a habit of sleeping during English class. I have placed Riead on the Never-to-be-Viewed-Again list).

ACTING: $$$ (The acting wasn't \"phoned-in\" as the insiders say, but was hindered a great deal by Riead's juvenile script. Olivia Hussey resorts to calling Anthony Jonh Denison \"weird\" and \"crazy\" to his face when he begins to stalk her. Hussey, who is still beautiful, delivers the best performance here but Denison was equal to the task of portraying a demented, love-crazed stalker. Don Murray was basically just there - his character not fleshed out, and Edward Asner, a terrific actor when given something with substance, is ill-used in this film).", "y": 0}, {"x": "This movie certainly proves, that also the good Americans can do terribly good propaganda. No questions being asked, no comments being made on power abuse or police terror, when James Stewart, solid and convincing as always, solves all the stories from Dillinger to 5th Column more or less singlehandedly. June Allyson as his regular love interest holds up the family values and E.J. Hoover is executive producer.And children or non guilty bystanders are never harmed, when the professionals execute. Not to speak of civil rights, which are never broken or homes, which are never intruded. And if the FBI service would not be enough, Steward also gives his son's life for the country in WW II. Perfectly made, if you wouldn't know better....", "y": 0}, {"x": "Perhaps, one of the most important and enjoyable Greek films i've seen in the last ten years..Excellent performances(especially yiannis zouganelis is great), well-written script and effective direction from a very special, for the Greek very average standards, auteur. A film, obviously influenced by Sam Peckinpah's Straw Dogs, that could be a masterpiece if it avoided some evident and exaggerative situations and symbolizations in the end. Nevertheless, this is a movie which deserves our attention and belongs to that rare category of Greek movies which should be watched outside Greece. It's a shame that in Greece didn't work commercially, in addition with other fake and cursory big productions like Politiki Kouzina..", "y": 1}, {"x": "My husband and I just got done watching this movie. I was not expecting it to be this good! I was really astonished at how great the story line was. I'm usually very good at figuring out twisty plots...but this one had me. I loved it! I'm going to have to watch it again before I take it back. I might even have to buy it. :)", "y": 1}, {"x": "A text prologue warns us that we should not allow evil to enter our house, but I think the more apt word is \"entropy.\" Good grief, what slobs these two babes are!

George (Seymour Cassell) is alone in his San Francisco office and his monstrously expensive home in Tiburon while his wife and child are away in San Diego. Two girls (Sondra Locke as Jackson and Colleen Camp as Donna) knock on his door, asking directions. Well, it's raining, and they're shivering like two drenched pitiful kittens, and they're not sure of the address they're looking for, and, what with one thing and another, George invites them to come in and partake of his pizza by the fire. All three of them wind up in George's bath tub and there follows about five minutes of mostly undifferentiated nudity in double exposure, triple exposure, quadruple exposure, and dodekakuple exposure. They spend the night in a threesome and the next morning the girls fix him breakfast. But something has gotten slightly cockeyed because Georgie's guests gobble everything down with their fingers and pour ketchup and syrup all over the linen and -- \"You eat like ANIMALS!\", George exclaims and tells them to get out. In his dreams.

Now, don't get me wrong. Sondra Locke is an extraordinary looking young blond with cobalt-blue eyes and Colleen Camp bounces around like a superball. You gotta say, they breed 'em mighty cute down there in Shelbyville, Tennessee, where Locke comes from, and they breed 'em with bodacious tushes too, as we can't help but note after the first five or ten minutes.

But when the girls go berserk, so does the movie. The film is thereafter bathed in a garish green light. The pair put on ghoulish makeup and make gargoyle faces at themselves in the mirrors. They brain a delivery boy and then drown him to make sure. They cuss up a storm and smash windows and furniture. They have one of those scenes in which two people sit across the table from one another, licking food and then jumping each other's bones.

And Georgie? They first render Georgie unconscious with mace (which contains nothing that you can't find in that little red bottle of McIlheny's Tabasco sauce in your kitchen cabinet), tie him up, pour flour and milk all over him, subject him to a psychotic trial, put him through one of those Tolstoy-type semi-executions, slap him around, dress up in outlandish costumes, then prance out on him and his virtually destroyed upper-middle-class home, and are dispatched by a delivery van ex machina.

As for the acting, it's as if someone had told Georgie, \"First act polite to these girls, then act panicked after you're tied up.\" And to the girls: \"First act shy, unwilling to impose on anyone, then act crazy.\" And that's it.

The photography and location work are straight out of a 1970s porn movie. I'm not sure that suggests a total lack of skill. It takes effort and talent to turn San Francisco ugly. The score gives us two Leitmotivs. Georgie's is some pop tune with lyrics about \"being free\" and \"giving in.\" Jackson and Donna's is a catchy rinky-tink thing called \"My Good Old Dad.\"

I approve of the moral lesson behind the story, though. There are some things you should simply not give in to, even though they might look like a lot of fun at first. All very educational.", "y": 0}, {"x": "Emory is a Cincinatti steel worker like his father before him and for most of the 20th century the twin pillars of his family's existence have been the steel mill and the union. The mill, which once employed 45,000, has seen its numbers dwindle to 5,000 recently and now 1, as the plant just shut its doors, leaving a single security guard. At first, newly-unemployed Emory and his pals enjoy their independence, hanging out around town and carousing at their favorite bar, where they down \"depth charges\" with reckless abandon. They think the mill will reopen after listening to their union rep's optimistic spiel, but reality starts to sink in when they find themselves selling their personal vehicles in a struggle to put food on the table and stave off foreclosure of their homes. Emory's father - a dedicated union man - is sure the plant will reopen and recalls for his son all the short-lived closures during his own 35 years at the mill. Meanwhile, some of the unemployed men take demeaning make-work jobs or hop in their trucks and take off in a desperate search for employment.

Finally the union admits its helplessness, as Emory explains to his stubborn father that times have changed and that the mill won't ever open again. Emory tearfully asks \"What did I do wrong?\" as a lifetime of hard work and devotion to job, union, church and family have left him with nothing and nowhere to turn. He hits rock bottom when in a drunken rage he manhandles his young sons and knocks his wife to the floor. Tossed out of his own home and stinging from the plant manager's comments that he and his men didn't work hard enough to justify their substantial paychecks, Emory recruits the steel workers still left in town to do something that will demonstrate to all what they are capable of. Early in the morning they break into the mill, fire up the furnaces and work harder than they ever have in their lives, producing in one shift enough high-quality steel pipes to fill the loading docks from wall to wall, top to bottom - something the plant manager thought was impossible.

Arriving at the suddenly-reopened plant, the stupefied manager looks around him at the tremendous output that came from a single day's work, realizing that production like this could make the plant profitable again. The manager asks Emory: \"Can you do this every day?\" Emory is forced to nod \"No\" and the manager asks: \"Then what were you trying to prove?\" Emory explains that the workers' decades of hard work, honesty and devotion to their jobs had meaning and that by showing how much they could produce in one day \"We just spit in your eye.\" Emory bids a tearful farewell to his wife and kids as he takes off with his buddies to look for work down south, promising to relocate the family when he finds it.

This is a powerful and honest treatment of the plight of American workers displaced by foreign competition and gives a realistic view of the costs they bear for the short-sightedness of concession-demanding unions and greedy plant owners who extracted every penny they could from their factories but never gave back by modernizing them. Peter Strauss as Emory, John Goodman as his best friend, Gary Cole as his college-boy brother, Pamela Reed as Emory's sympathetic wife and John Doucette as his dying father all turn in excellent performances in this fine picture.", "y": 1}, {"x": "Not having seen the film in the original theater release, I was happily surprised when the DVD arrived, since this film did not have the wide distribution it merited.

Denzel Washington directorial debut and the finished product have nothing to envy other films about the same theme by more accomplished directors. The film has a very professional look. It shows that Mr. Washington has learned a lot being on the other side of the camera. He brings a different angle to this film.

One of the best things the film has is, without a doubt, the fine performance by Derek Luke. He is an actor who, with the right guidance, will go far, no doubt. His take on the troubled young man, at this point of his life, in turmoil and suffering for a bad hand life, up to now, has dealt him, is very true. His Antwone is a fine portrait of a man in pain who is basically very good and has so much to give, but no one seems to see that side of his character.

At the worst time of his despair, Antwone is sent to Dr. Davenport, played by Mr. Washington, in a very sober, if somehow subdued manner. Because of the angst within Antwone, he misses the opportunity of opening himself to this man, who wants to help, but because of the constrains placed on his office, just have three sessions and then has to dismiss his patient.

Things work out, as Antwone is able to convince the doctor to keep on working with him. Antwone's past is revealed in detail. The abuse he suffers at the hands of Mrs. Tate, his foster mother, is brutal, to say the least. The attempt at the hand of an older woman in the Tate's household of a sexual molestation, gives Antwone a bitter taste that stays with him throughout his adult life, as he has been scarred by the shame he carries with him.

Antwone finds love at last with Cheryl, who is patient enough to make him see a different world by the love she and support she gives him.

The lead performances are very good indeed. Denzel Washington's Dr. Davenport has his own problems too. He is not a happy camper either. He can help Antwone, but he cannot help himself, or his relationship with an adoring wife.

The talent in the film is incredible. Joy Bryant makes a fine Cheryl. Novella Nelson, who is a fine actress is superb as Mrs. Tate, the abusing foster mother.

The reunion of Antwone with his unknown family is a bit too sugary and sentimental, but of course, if one is to believe that Fisher finds happiness at last, one has to accept that part of the film as well.", "y": 1}, {"x": "What made the original Killer Tomatoes fun was it was made by people with no budget who were just being wacky for a couple of days...

This was something with a budget, but it just wasn't as much fun. John Astin of Adams Family fame is actually making an effort here to be comedic, but he is supported by lame actors, cheap special effects and unfunny gags.

The plot. Dr. Gangrene (Astin) escapes from a French prison and decides he is going to put a pretender on the throne of France... The hero, his French girlfriend and the Gizmo-like \"Fuzzy Tomato\" decide they are going to stop him...

Forgettable Direct to Video nonsense...", "y": 0}, {"x": "Plot Synopsis: Hong Kong, 1966. Paul Wagner, the man who built the Victoria Tunnel, is murdered along with his wife by his associates. His twin sons, Chad & Alex, are split apart. 25 years later, Chad, a karate instructor in Los Angeles, & Alex, a smuggler living in Hong Kong, join forces to avenge their parents' murder & rightfully claim the tunnel.

This is the second time that Jean-Claude Van Damme & Sheldon Lettich have worked together, having previously done \"Lionheart\". This is also the first of three films to feature Van Damme playing dual roles (\"Maximum Risk\" & \"Replicant\" are the others). The plot is a very simplistic take on the revenge story, the film's sole redeeming feature being Van Damme's performance as two very different people \u0096 the prissy rich kid & the rough-&-tumble, cigar chomping tough guy. As it goes, Van Damme doesn't do a very good job in either role, although his take on Alex is mildly amusing. It is puzzling as to have the brothers mistaken for each other, with them wearing different clothes & having different hairstyles. Bolo Yeung makes a very worthy henchman for the baddies.", "y": 0}, {"x": "I caught this movie late at night on cable, and I was pleasantly surprised. I can only imagine the reason this movie was not better known, is because the subject matter is very disturbing. But if you can handle the sexual abuse topic, it is a well acted, suspenseful and very interesting movie. Both Richard Gere and Claire Daines are very good in it. And although the subject matter is not for the faint of heart, the movie doesn't go out of its way to be brutal either (like 8mm for instance).

I highly recommend it to anyone who enjoys serial killer and suspense type movies.", "y": 1}, {"x": "I saw this film at the NY Gay & Lesbian Film Festival and thought it was pretty bad. First and most distracting was the way much of it was shot; that is, a lot of slow motion and overly arty close-ups that seemed to have no point--story wise or aesthetically--other than to show the skills of the cinematographer (who I believe was also the director). This film seemed what a pretentious film student would come up with. The lead actor (Sam Levine) was certainly very cute, but was a mediocre actor at best; and the rest of the cast ranged from so-so, to bad. The story itself was mostly annoyingly predictable. I do have to concede that most of the audience seemed to enjoy the film; laughing and sighing constantly, but I disliked it a great deal.", "y": 0}, {"x": "I saw the trailer of the film several times at theater and I excited. It looked like a classic action thriller like the ones made in 1990's. It recalled me also Fugitive movies, a cat and mouse chase between Douglas and Sutherland. However, The Sentinel is the most tasteless action thriller of all time. As I see, many people say that this is like a TV movie. Not exactly. Firstly, there are much more better TV movies in this genre. Secondly, TV movies might be very fun sometimes, but this film is the exact opposite of having a good time. It is not stylish at all visually and the most important, the tone of the movie is unappealing. This is not an action movie, there are two action scenes consist of a chase and a clash. Also they are not big action scenes, but the worse is that those action scenes are very tasteless like the whole movie. The love affair between Douglas and Bassinger was very unnecessary. Besides, the assassination plot to the president is the most clich\u00e9 story in this genre either, but they insist on that. And this is not a cat and mouse film as it is supposed to be. Although, Douglas is very old now, he has still potential for acting in an action thriller. In the film, Michael Douglas cannot be like Tommy Lee Jones, for example. Sutherland is a wrong choice either, because you feel as if you watch Jack Bauer and somehow, its character is one of the reasons which make the film like a TV movie, Eva Longoria Parker is a strange choice, of course she is too passive or straight in this movie, because she is a soap opera actress. The movie was not fun even one second to me, so I could not get over for a while.", "y": 0}, {"x": "If you want to see a movie that terribly mixes up one Latin country with any other Latin country, \"The Celestine Prophecy\" is a good example: 1. Per\u00fa, not even in its most violent times, has not shown polices or soldiers as much as in this film. This showed a country like El Salvador when Civil War. Since I'm a Peruvian who lives in Lima (the capital of Per\u00fa), it was too funny to me seeing the police guards here, there and everywhere. 2. If you have a car in Per\u00fa, and you want (or need) to be a taxi driver, just post a sticker with the word \"Taxi\" on the front glass of your car and you can drive freely in Peruvian streets (there are taxi companies, but their rates are quite expensive). No need of yellow or a black/white squared band on the doors of your car. Well, taxis in this film have that band, somethin that you will never see in Per\u00fa. 3. Peruvian people are not Caribbean styled clothing. For example, when a taxi driver comes out, he was wearing a \"Guayabera\" (Cuban shirt), a white hat, and 40's mustaches, like Clark Gable. Not one Peruvian man looks like that, please! Per\u00fa is not the Caribbeans! 4. A scene shows a woman on a street with a quite long skirt, like the typical folklore dresses in Latin America. Take a walk anywhere in Per\u00fa, and you'll never find a woman wearing like that, unless you are watching a typical dance. 5. Cast could've been better: I can not deny H\u00e9ctor Elizondo is a great actor, but he's not a Latin actor (his father was Basque and his mother from Puerto Rico, but he was born in New York) and his Spanish is not fluent. It's notorious Spanish is not his first language. There are dozens of very good Latin actors who could've performed as Cardinal Sebasti\u00e1n. Petrus Antonius (General Rodr\u00edguez) was also a bad choice for a \"Latin Police officer\". It was so funny seeing Elizondo and Petronius in General Rodr\u00edguez's office. They looked like two English or American students in a Spanish class, making their best effort in order to pronounce Spanish. Unsuccessfully, of course. Castulo Guerra was better in his Spanish. A \"Peruvian\" officer, who announced Cardinal Sebasti\u00e1n, spoke a quite funny Spanish too. There are very good Peruvian actors, like Augusto Alvarez-Calder\u00f3n and Christian Meier (just to mention two out of many Peruvian actors), who could've performed with excellence. 6. I admit that a fictional movie can let itself a license inventing cities or, even, countries. But, please, when creating a name, be careful when using a foreign language: The town portrayed in this movie should've been called \"Vicente\" and not \"Viciente\". Vicente is a male name, and Viciente has never been used. 7. I disagree one user, who says that this movie was filmed on locations in Per\u00fa. Not one location is Peruvian, although the production has used in excess posters showing \"Inca Kola\", the Peruvian soda. As not few American films, this one must have used any Latin country. After all, for American producers or directors, a Latin place is identical to any other Latin place. 8. In the first scenes, when John (Matthew Settle) flies to Per\u00fa, he's supposed to arrive to the only one international airport in Per\u00fa: Jorge Ch\u00e1vez Airport (in Lima, the capital). Actually, believe me, it must be any airport in the world, but Peruvian airport. And, of course, in Peruvian airports there are no military or police guards. 9. When this John takes a room in a Peruvian hotel, this one has a fan and, obviously has no air conditioner. Please, this doesn't happen in no hotel in Per\u00fa(and other Latin countries), unless you get a 1 star hotel! 10. The rebels who fight against the government are... \u00a1Colombians! Their accent was, with no doubt, from Colombia. For casting them, the producers should've hired Peruvian actors. In few words, it would've been cheaper filming in Per\u00fa.

I could go on with more examples out of this film, that led me to give it a \"1\" (awful) vote, but I fell asleep after about 20 minutes from its beginning. But dear producers: It's not a tragedy: There are many worse movies with not few mistakes. Just let's remember \"Indiana Jones and the kingdom of the Crystal skull\" and indescribable Disney's \"The Emperor's new groove\". The list of bad films could be endless...", "y": 0}, {"x": "The movie begins a with mentally-challenged girl with bright yellow sneakers looking skyward on a Madrid street corner and being spellbound by a passing plane. The movie examines the life of five women\u0097Adela, Leire, Maricarmen, Anita & Isabel\u0097who have completely different lives and choices of shoes. Their shoes is the first superficial, yet affixed with some glancing meaning, clue we get at their fragile identities. In a theatrically embroidered and embellished way, a podiatrist tries to esoterically reveal the deepest secrets of a woman's souls by the sole of her feet. The premise is risky and slightly contrived, but the tone and depth of the movie takes a daring plunge for the good.

What may have been light-hearted and superficial, quickly switches gear with the a superb dysfunctional couple scene that leaves the viewer riveted for minutes, seeing the love or lack thereof, the pain, the confusion, the hope, the needs and escape mechanisms develop through minutes different rooms of the house and down to the street and eventually below... What a scene (!) , but there will be others as effective to follow and strengthen the strong characterization and directing displayed in this slice of life affair.

Moving along, a woman has lost the husband she loved and inherited his kids and his taxi, while another has completely lost her husband emotionally, sexually, intellectually, but not physically. A ghost, a pending divorce\u0085 reproach, regret & remorse. A new love? Can you love a mirage? Can you love the person in the mirror? Can you love someone you can't love? Or think you can't love? Can you love and live life even though it will always be somewhat hopeless? Yet isn't it exactly these hopes and dreams that keep us here grounded and in a spectrum of relative happiness? A lot of deep themes emerge and the final act brings people and ideas together to coalesce in an existential crisis with no clear cut solution, definitive decision or effective healing. Maybe a elusive thought, a fleeting feeling, but a lasting appreciation of life and of the artistry and intellect of the film. Live. Live again. Rewind the reel. Unveil the real, the important; the big stones (piedras) of life. The rest is just details.", "y": 1}, {"x": "i think that this film is brilliant.there are many reasons why but these are some of them 1)the good acting by Tom and Tyler 2) brilliant machine gun scene that was a piece of brilliance 3) i thought that the ending was a good twist because i never expected that at the end all credit to Sam Mendes.as well as a these 3 points the film form of the film is good as well. i am a film student at college and we studied this film in great detail and it was one of the best films i have seen in many years. i'd just like to say a big thank you to all of the people involved in making this film. lastly i would like to say the best scene in the film is the machine gun scene where John Rooney gets kill it is just pure brilliance in shooting the scene in silence until John Rooney says \" i'm glad it's you\" it is a lot better like that i think because the viewer creates there own sound and that sound is totally different for every viewer just brilliant.

thank you for reading this comment written by Ross Kirk aged 16", "y": 1}, {"x": "I saw this movie in its own time period, when having a baby out of wedlock not only ruined your life, but stamped your child as a bastard. In these days of 'single mothers' that may seem very far-fetched, but it was very true. And I'm not crazy about laughing at someone who is stammering, either. Between these two problems I had difficulty finding this movie funny. At that time I didn't know who had directed it or what a marvelous reputation he had. I did know who Betty Hutton was, and she just made me nervous because she was so frenetic. I loved \"Bringing Up Baby\", but I find this movie just embarrassing. I'm sure the punch at some church functions probably was spiked, but I was the one needing a drink after watching this again. The idea the girl would have to be drunk in order to 'get married' and get pregnant just added to the misery. An entire town could turn on you under these circumstances, so the outcome of this movie is really the funny part. Of course, shoot me, I don't like \"It's a Wonderful Life\" either.", "y": 0}, {"x": "`In the tradition of 'Carrie' and 'Heathers'? Try `a shameless ripoff of not only those two films, but 'The Evil Dead' and 'The Shining' as well.' That said, they really don't make bad horror movies like this anymore, and that's a shame, 'cause it's a gas.

Rainbow Harvest is the Winona substitute here, and although she barely does more than mumble her lines (and occasionally scream, `YOU'RE UGLY!!!' into her haunted mirror), she's Goth way before it's fashionable, so you have to respect her. (And she's quite creative about it too, accessorizing with black leather scarves and a kind of black-spray-painted Hawaiian-Punch-guy hat. Eat your heart out, Cher.)

Karen Black overacts a bit, but she's not totally without dignity, and you can't help but sympathize with her. (Unless you're a certain friend of mine, who asked, `Who is that, Horse Lips from 'M.A.S.H'?' the first time she came onscreen.)

There are decent supporting performances by Kristin Dattilo (as the square chick who befriends Rainbow), Ricky Paull Goldin (in his trademarked wisecracking hunk role), and William `Larry, Darryl and Darryl' Sanderson (as some kind of pet undertaker, or something). But it's sad to see the once smokin' Yvonne DeCarlo reduced to playing what can only be thought of as the Charlotte Rae part.

The eighties were the heyday for hilarious, mindbogglingly dumb horror movies like this, and `Mirror, Mirror' was one of the last of its kind. Definitely worth a look.", "y": 0}, {"x": "This movie is so cheap, it's endearing!!! With Ron Liebmann (Major Vaughn) providing the most entertaining on-screen diatribes in film history. I own 2 copies of this movie on video...on one, Ralph Macchio is caught actually cracking up in the background at Major Vaugn while he is ranting at \"Hash\". Obviously they forgot to edit this mistake out of the film, but it goes to show just how funny the movie is, when the actors themselves can't keep a straight face!!!", "y": 1}, {"x": "The best that I can say about this film is that it was mildly amusing at times, and that it was an adequate time killer. Unfortunately, this film is also so annoying that I wanted to slap these characters around. This is the kind of film that is so sweet, it hurts your teeth. The intentions were good, I suppose, but things get awfully tiresome when the dialogue is SO nauseating. When the two leads aren't together on-screen, this really isn't bad at all, but be afraid during those frequent moments when the loving couple starts talking to one another.", "y": 0}, {"x": "I first saw this movie in the theater when I was 8 years old and it still cracks me up. The Muppets are so cool and they approach show business in a refreshingly naive way. My favorite scene is when the rats start a whispering campaign on behalf of Kermit at a fancy restaurant. This is one smart and funny movie for kids and parents alike. Long live Kermit, Miss Piggy and the rest of the gang.", "y": 1}, {"x": "The first time I saw this, I didn't laugh too much. At the time, I was only about fifteen years old and thought that maybe some of the deeper humor was too mature for me to understand at the time. I had the same reaction when I viewed it a second time a few months ago, and this time, it was because Felix's aborted suicide attempt at the beginning of the movie kind of darkened the movie a bit. This scene made some of the things Oscar said and did to Felix later in the movie seem needlessly cruel, and their personality clashes weren't as amusing as they could have been. Had I not already known the story, I would have been worried that some of Oscar's antics to Felix might push him over the edge. As it was, it didn't make me laugh or smile like the television show with Jack Klugman and Tony Randall did. Still, all in all, a pretty good movie and it spawned one of the greatest sitcoms on television. 7 out of 10.", "y": 1}, {"x": "There is no possible reason I can fathom why this movie was ever made.

Why must Hollywood continue to crank out one horrible update of a classic after another? ( Cases in point: Mister Magoo, The Avengers - awful! )

Christopher Lloyd, whom I normally enjoy, was so miserably miscast in this role. His manic portrayal of our beloved \"Uncle Martin\" is so unspeakably unenjoyable to be almost criminal. His ranting, groaning, grimacing and histrionics provide us with no reason to care for his character except as some 1 dimensional cartoon character.

The director must have thought that fast movements, screaming dialogue and \"one-take\" slapstick had some similarity to comedy. Apparently he told EVERY ACTOR to act as if they had red ants in their pants.

Fault must lie with the irresponsibly wrought script. I think the writer used \"It's a Mad, Mad, Mad, Mad World\" as an example of a fine comedy script. As manic as that 1963 classic is, it is far superior to this claptrap - in fact - suddenly it looks pretty good in comparison.

What is most sad about this movie is that it must have apparently been written to appeal to young children. I just am not sure whose children it was made for. Certainly no self-respecting, card-carrying child I know!

If they HAD to remake \"My Favorite Martian\", why didn't they add some of the timeless charm of the original classic?

Unfortunately, IMDB.com cannot factor in \"zero\" as a rating for its readers, that is the only rating that comes to mind in describing this travesty.

One good thing did come from this movie, the actors and crew were paid - I think.", "y": 0}, {"x": "Judy Davis shows us here why she is one of Australia's most respected and loved actors - her portrayal of a lonely, directionless nomad is first-rate. A teenaged Claudia Karvan also gives us a glimpse of what would make her one of this country's most popular actors in years to come, with future roles in THE BIG STEAL, THE HEARTBREAK KID, DATING THE ENEMY, RISK and the acclaimed TV series THE SECRET LIFE OF US. (Incidentally, Karvan, as a child, was a young girl whose toy Panda was stolen outside a chemist's shop in the 1983 drama GOING DOWN with Tracey Mann.) If this films comes your way, make sure you see it!! Rating: 79/100. See also: HOTEL SORRENTO, RADIANCE, VACANT POSSESSION, LANTANA.", "y": 1}, {"x": "This is just as good as the original 101 if not better. Of course, Cruella steals the show with her outrageous behaviour and outfits, and the movie was probably made because the public wanted to see more of Cruella. We see a lot more of her this time round. I also like Ioan Gruffudd as Kevin, the rather bumbling male lead. To use Paris as the climax of the movie was a clever idea. The movie is well worth watching whatever your age, provided you like animals.", "y": 1}, {"x": "I grew up watching the old Inspector Gadget cartoon as a kid. It was like Get Smart for kids. Bumbling boob can't solve any case and all the work is done by the walking talking dog Brain and his niece Penny. I had heard the live action movie was decent so I checked it out at the library. I rented this movie for free and felt I should have been paid to see this.

Broderick comes nowhere near the caliber of acting Don Adams had as the voice of gadget. His voice was all wrong. The girl who played Penny looked nothing like the cartoon Penny. She is brunette where the cartoon version was blonde with pigtails. But she does do a decent job given what she had to work with. Dabney Coleman gives a good performance as Cheif Quimby. Saldy he never hid in any odd place or had exploding messages tossed at him accidently by Gadget.

The gadget mobile was wrong. It never talked in the series and it did fine. Why did they do this?

Gadget was too intelligent in this film. In the show he was a complete idiot. Here he had a halfway decent intellect. It would have worked better if he was a moron.

Also the completely butchered the catchphrase. Borderick says \"Wowser\". It is and should always be \"Wowsers\". It sounds lame with out the 's'. I got upset when they showed the previews and they didn't have the correct phrase.

The ONLY decent gags were during the credits. The lacky for Claw is in front of a support group for recovering henchmen/sidekicks. Seated in the audience is Mr. T, Richard Keil aka Jaws of Bond movie fame, a Herve Villacheze look alike, Oddjob, Kato and more. This is about the only part I laughed at.

The other is at the end where Penny is checking out here gadget watch and tells brain to say somethin. Don Adams voices the dog saying that \"Brain isn't in right now. Please leave your name at the sound of the woof. Woof.\" of course this isn't laugh out loud funny, just a nice piece of nostalgia to hear Adams in the movie. He should have at least voiced the stupid car.

Kids will like this, anyone over 13 won't.

", "y": 0}, {"x": "One of the finest films ever made! Why it only got a 7.6 rating is a mystery. This film is a window into the world of the black experience in America. Should be mandatory viewing for all white people and all children above age 10. I recommend watching it with \"The Long Walk Home\" as a companion piece. If you think Whoopi Goldberg's work is about \"Homer and Eddie\" or \"Hollywood Squares,\" think again. Don't miss this movie, which should have won the Oscar. (And read the book, too!)", "y": 1}, {"x": "As a huge fan of the original, I avoided this film like the plague when the bad reviews started coming in eight years ago, but I just finished watching this film and found it to be a really pleasant surprise.

Okay, if you are looking for a retread of the original, you're in for a big disappointment, but if you are looking for something quite different, a bit edgy and political, then this is the film for you.

Gregory is now thirty four and works as a teacher at his old comprehensive school, where he's being pursued by a fellow teacher and having sexual dreams about one of his students. When the student insists on meeting up with Gregory, a series of misadventures ensue that include torture, breaking and entering and all manner of unexpected twists and turns that left me feeling elated and moved.

If you are looking for something original, then I highly recommend this film. I only wish that more people had gone to see this when it was released and seen it for what it really is.", "y": 1}, {"x": "Wow! A Danish movie with this kind of content? I mean, the actors, the story, the pictures, the efx - everything was where it should be.

And a Danish EFX house producing those VFX - Wow! This is like the 2nd or 3rd time a Danish FX has produces visual effects in that quality.

*SPOILER AHEAD* The twist with the ghostly children in the submarine was quite good, but generally I did not feel the big chill which I would expect from a ghost-movie. *END OF SPOILER*

But anyway, this is a Danish movie which I as a Dane can be proud of.

The only \"bad\" about this, is that it wasn't a Danish director, but a Swedish...", "y": 1}, {"x": "This was a new alltime low among westerns. The writing is excruciatingly bad, characters are impossible to emphasize with and are either disgusting or bland, the violence is appalling and technically not very convincingly executed. And Tobey Maguire shows us the flip side of his talent, sleepwalking through his part with those expressionless eyes and that raspy voice of his that here betrays only mannerism. 'Ride With the Devil' is among my five worst movie experiences ever, a western never to be surpassed in the negative respect.", "y": 0}, {"x": "As an impressionable 10 year old, I liked the \"love conquers all\" philosophy of the 70s sitcom \"Bridget Loves Bernie.\" I did understand the controversy, which was about the romantic complications between a Jewish cab driver (David Birney) and an Irish Catholic school teacher (Meredith Baxter) and both sets of parents (Harold J. Stone and Bibi Osterwald as Bernie's parents; Audra Lindley and David Doyle as Bridget's parents) who have issues with the young couple's interfaith marriage.

Looking at the show now with years of personal life experiences, I am amazed that the show was even a success for one, albeit, highly-rated season. Created by veteran TV writer Bernard Slade, who a few years after the show's cancellation would write the successful play \"Same Time, Next Year\", \"Bridget Loves Bernie\" was a very light, superficial comedy that collapsed under its own airy weight.

There was no denying the real-life chemistry between Birney and Baxter. But, in later years, both actors have shown that they are better actors in other projects (Birney in his short-lived role in \"St. Elsewhere\" and Baxter in \"Family\" and \"Family Ties\"). Here, they were trying to breathe life in a show that needed a much gritter comic edge, which might have given the complications more depth to a very controversial subject.

The show aired Saturday nights between two CBS powerhouses: \"All in the Family\" and \"Mary Tyler Moore\". Both of those shows were smart, funny and had enough of an edge (more so on the former that the latter) that kept my interest in the situation and the characters. \"Bridget Loves Bernie\" was not very smart and only had some occasional chuckles.

This was another example of a show that really was not as good as I remembered.", "y": 0}, {"x": "Why such a generic title? Santa Claus??? So bland and unpredictable. Movies before that tried to cash in on the holiday spirit, most notably 'Santa Claus Conquers the Martians', at least was entertaining to watch because of the campiness to it, and all the stock footage being used... for some reason, that seemed happy to me. But this movie just screws Christmas in the butt, and screws the joy of all the kids. Santa lives in space? His enemy is a devil named Pitch? Santa gets help from Merlin the Magician? How random is this!? Well, since it was made in Mexico then some of you might understand the way of how the film was made. I had to admit some of the effects were just wacky for the time. It was a all-out cluster of madness! Though, despite all the troubles with the movie, it still feels like a Christmas movie. Good conquers evil, and Christmas still plays a part of our hearts of every good girl or boy in the world, or possibly universe, thanks to Santa Claus Conquers the Martians.. apparently. So, I think you should give it a try, even if it is one of the worst holiday movies of all time... though it should put a smile on your face any day.", "y": 0}, {"x": "An Italian/American co-production co-starring Linda Blair and David 'The Hoff' Hasselhoff: how could any fan of trashy horror resist such a treat?

Well, based on the uneventful, extremely tedious, and utterly nonsensical first forty minutes or so, I would have said 'very easily'; thankfully, however, things do eventually get a tad more entertaining with the introduction of several inventive death scenes, and for those lucky enough to find an uncut copy, a smattering of nudity too (unfortunately, my copy was optically edited to remove such offensive material).

The Hoff stars as Gary, a photographer who accompanies his beautiful girlfriend Leslie (Leslie Cumming) to a run-down hotel on a seemingly deserted island in order to take pictures for her latest project, a book about witches; whilst there, frustrated Gary also hopes to try and cure a bad case of blue balls by relieving Leslie of her virginity.

His plans for nookie are scuppered, however, by the unexpected arrival of property developers Freddie and Rose Brooks (Robert Champagne and Annie Ross), their pregnant daughter Jane (Blair), son Tommy (Michael Manchester), pretty nymphomaniac architect Linda Sullivan (Catherine Hickland), and estate agent Jerry (Rick Farnsworth), who have come to inspect the island's hotel.

After explaining their unexpected presence on the island, Gary and Leslie are welcomed by the property's new owners, and when a violent storm suddenly picks up, making it perilous to return to the mainland, everyone agrees to spend the night in the old building. Unfortunately, unbeknownst to the hotel's new guests, the place is also home to the spirit of an evil witch (Hildegard Knef), who requires human sacrifices in order to bring herself back to life. One by one, victims are pulled into a swirling red vortex (which is guaranteed to provide unintentional laughs), before meeting a terrible fate.

None of this makes much sense, and the acting is atrocious (Manchester as Tommy is particularly bad, whilst Hasselhoff proves to be one of the better performers, which speaks volumes about the others), but those viewers who make it past the dreary first half are rewarded with some pretty decent moments of gore: Rose has her lips sewn together, before being roasted alive in a fireplace; Jerry is crucified and burnt alive; Linda is tortured by hags and impaled on a swordfish(!!); Freddie's veins pulsate and erupt in geysers of blood; and Gary gets stabbed in the back.

Oh, and Leslie is raped by a guy with no lips and Blair gets possessed (again).", "y": 0}, {"x": "Gene Kelly, Frank Sinatra, Kathryn Grayson, and Jose Iturbi star in \"Anchors Aweigh,\" directed by George Sidney.

Kelly and Sinatra are Joe and Clarence, two navy guys on leave in Hollywood. They meet a little boy (Dean Stockwell) and on taking him home, they meet his aunt (Grayson). Clarence falls for her. She wants an audition for Jose Iturbi. They try to help, but there's a mix-up.

This is a very energetic musical with great dancing and singing by Kelly and Sinatra. Kelly gets to dance with Jerry the Mouse in a delightful sequence. Grayson sings Jalousie and My Heart Sings. Not one of my favorite voices, but she does well. Iturbi's piano work is beautiful.

Sinatra gets to show his versatility and why the girls swooned over him, with those big blue eyes and boyish face. For Kelly, this was a major break for him at MGM.

Wonderful movie, very buoyant.", "y": 1}, {"x": "In the Old west there are always the men who live breathe violence and the women who hold their breath. A famous \u00a8town tamer\u00a8 named Clit Tollinger(Robert Mitchum) comes hired by the citizens to rid the gunslingers ( Leo Genn, Claude Atkins, among others), Baronland's hoodlums. There he meets the blacksmith (Emile Meyer) , his daughter (Karen Sharpe), her boyfriend(John Lupton), the marshal(Henry Hull) and the Saloon owner (Ted De Corsia). Clint as lawman is appointed deputy to bring peace and puts some cartels saying the following : \u00a8 Warning , wearing of guns or other weapons in town is banned. Check all hardware at the marshal's office \u00a8. Clint finds his ex-girlfriend, a local madame (Jan Sterling) in charge of the Saloon girls( Angie Dickinson, Barbara Lawrence, among them). But the town council afraid the raw methods carried out by Clint . At the end the kingpin landowner appears and attempts to murder Tollinger with his own hands.

This is a tremendously exciting story of a sheriff-for-hire who had only one more killing to go. It begins as a slow-moving Western but follows to surprise us with dark characters and solid plot. The tale is almost grim , a pacifier comes to a town just in time to make sure its citizenry but later the events get worse . The highlights are the burning at Saloon and the climatic showdown at the ending. Phenomenal and great role for Robert Mitchum as avenger angel and bitter gunfighter, he's the whole show. Vivid and lively musical score by Alex North (Spartacus, Cleopatra), Atmospheric cinematography in black and white by Lee Garmes. The motion picture is stunningly realized by Richard Wilson (Al Capone , Three in Attic) who made good Western as \u00a8Invitation to a gunfighter and \u00a8Zane Grey\u00a8 episodes. Watchable results for this offbeat Western.", "y": 1}, {"x": "Instead, go to the zoo, buy some peanuts and feed 'em to the monkeys. Monkeys are funny. People with amnesia who don't say much, just sit there with vacant eyes are not all that funny.

Black comedy? There isn't a black person in it, and there isn't one funny thing in it either.

Walmart buys these things up somehow and puts them on their dollar rack. It's labeled Unrated. I think they took out the topless scene. They may have taken out other stuff too, who knows? All we know is that whatever they took out, isn't there any more.

The acting seemed OK to me. There's a lot of unfathomables tho. It's supposed to be a city? It's supposed to be a big lake? If it's so hot in the church people are fanning themselves, why are they all wearing coats?", "y": 0}, {"x": "This film was recommended to me by a friend who lives in California. She thought it was wonderful because it was so real, \"Just the way people in the Ohio Valley are!\" I'm from the area and I experienced the film as \"Just the way people in California think we are!\" I've lived in Marietta and Parkersburg and worked minimum wage jobs there. We laughed a lot, we bonded with and took breaks with people our own age; the young people went out together at night. The older people had little free time after work because they were taking care of their families. The area is beautiful in the summer and no gloomier in the winter rain than anywhere else.

Aside from the \"if you live in a manufactured home you must be depressed\" condescension, the story lacked any elements of charm, mystery or even a sense of dread.

Martha's character was the worst drawn. It's doubtful that anyone so repressed would have belonged to a church, but if she had, she probably would have made friends there. I've read reviews that seem to assume Martha was jealous of Rose because Rose was \"younger, prettier and thinner\" but if this is the case it isn't shown. All we actually see is Martha learning to dislike Rose for reasons that would apply just as much if the three friends had been the same age and gender. We see Martha feeling left out during smoking sessions, left out of the loop when social plans are made, used but not appreciated, and finally disrespected and hurt.

Just one more thing: Are we supposed to suspect Kyle of murder because he had once had a few panic attacks? Please. This takes stigma against mental illness to a new level.", "y": 0}, {"x": "I've seen this film because I had do (my job includes seeing movies of all kinds). I couldn't stop thinking \"who gave money to make such an awful film and also submit it to Cannes Festival!\" It wasn't only boring, the actors were awful as well. It was one of the worst movies I've ever seen.", "y": 0}, {"x": "Michael Keaton is \"Johnny Dangerously\" in this take-off on gangster movies done in 1984. Maureen Stapleton plays his sickly mother, Griffin Dunne is his DA brother, Peter Boyle is his boss, and Marilu Henner is his girlfriend. Other stars include Danny DeVito and Joe Piscopo. Keaton plays a pet store owner in the 1930s who catches a kid stealing a puppy and then tells him, in flashback, how he came to own the pet store. He turned to thievery at a young age to get his mother a pancreas operation ($49.95, special this week) and began working for a mob boss (Boyle). Johnny uses the last name \"Dangerously\" in the mobster world.

There are some hilarious scenes in this film, and Stapleton is a riot as Johnny's foul-mouthed mother who needs ever organ in her body replaced. Peter Boyle as Johnny's boss gives a very funny performance, as does Griffin Dunne, a straight arrow DA who won't \"play ball\" with crooked Burr (Danny De Vito). As Johnny's nemesis, Joe Piscopo is great. Richard Dimitri is a standout as Moronie, who tortures the English language - but you have to hear him do it rather than read about it. What makes it funny is that he does it all with an angry face.

The movie gets a little tired toward the end, but it's well worth seeing, and Keaton is terrific as good boy/bad boy Johnny. For some reason, this film was underrated when it was released, and like Keaton's other gem, \"Night Shift,\" you don't hear much about it today. With some performances and scenes that are real gems, you'll find \"Johnny Dangerously\" immensely enjoyable.", "y": 1}, {"x": "Dreamgirls, despite its fistful of Tony wins in an incredibly weak year on Broadway, has never been what one would call a jewel in the crown of stage musicals. However, that is not to say that in the right cinematic hands it could not be fleshed out and polished into something worthwhile on-screen. Unfortunately, what transfers to the screen is basically a slavishly faithful version of the stage hit with all of its inherent weaknesses intact. First, the score has never been one of the strong points of this production and the film does not change that factor. There are lots of songs (perhaps too many?), but few of them are especially memorable. The closest any come to catchy tunes are the title song and One Night Only - the much acclaimed And I Am Telling You That I Am Not Going is less a great song than it is a dramatic set piece for the character of Effie (Jennifer Hudson). The film is slick and technically well-produced, but the story and characters are surprisingly thin and lacking in any resonance. There is some interest in the opening moments, watching Jamie Foxx's Svengali-like manager manipulate his acts to the top, but that takes a back seat in the latter portion of the film, when the story conveniently tries to cast him as a villain, despite his having been right from a business stand-point for a good majority of the film. Beyonce Knowles is lovely and sings her songs perfectly well, but is stuck with a character who is basically all surface glitz. Anika Noni Rose as the third member of the Dreamgirls trio literally has nothing to do for the entire film. Eddie Murphy acquits himself well as a singer obviously based on James Brown, but the role is not especially meaty and ultimately has little impact. Foxx would seem ideal casting, but he seems oddly withdrawn and bored. The film's biggest selling point is surely former American Idol contestant/Oscar winner Jennifer Hudson in the central role of Effie White, the temperamental singer who gets booted from the group and makes a triumphant closing act return. For me, Effie has always been a big problem in both the show and the movie. The film obviously wants you to feel sorry for her and rather ham-handedly takes her side, but I have never been sure that this character deserves that kind of devotion. From the start, Effie conducts herself for the most part like an obnoxious, egotistical, self-centered diva, who is more interested in what everyone else can do for her rather than having much vested interest in the group of which she is a part. When she is booted from the group for her unprofessionalism and bad attitude, the charges are more than well-founded, but the stage show/film seem to think Effie should be cut unlimited slack simply because she has a great voice. Even though the film tries to soften some of Effie's harder edges to make her more likable, the charges still stand. Her story becomes more manipulative by suggesting she should have our further sympathy because she is an unwed mother struggling to raise her daughter - using the implication that (much like the talent card) motherhood immediately makes any behavior excusable. Indeed the only big effort the film makes to show Effie's mothering is to tell us about it and then include a scene where she barks at her daughter in the unemployment office, insists that the girl has \"no father\" and then refuse to look for gainful employment to support them since singing is all she knows. In the hands of a skillful actress, the gaps could perhaps have been remedied with technique and charisma. Unfortunately, Hudson is not that actress. She sings well, but the dialog-driven moments do not come naturally to her nor do high emotional moments. Effie's signature moment (the aforementioned And I Am Telling You... number) is well-sung by Hudson, but emotionally flat in the acting department. Effie is supposed to expressing her rage and desperation at her predicament, but Hudson comes off as a cabaret performer belting out a hot number. All in all, not quite the emotional highlight one expects. The latter portion of the film is basically a predictable melange of events that maneuver Foxx into Hudson's earlier position and allow her to strut back in and lord it over everyone. Foxx's criminal offenses in the film are undoubtedly par for the course of many struggling record producers, but the film's seeming implication that he has it coming because he helped usher in the disco era is rather ridiculous, not to mention pretentious and condescending, particularly coming from a film with all of the depth of a puddle. The end result is a faithful rendition of the stage hit, drained of emotion, energy or anything that can be described as dynamic.", "y": 0}, {"x": "Satan's Little Helper is one of the better B Horror movies I have seen. When I say better I mean the story. The film hatches a new plot, something that's not so clich\u00e9 in the Horror genre - something fresh. But there are also some ridiculous questions that come along with it. Questions you will be asking yourself throughout the movie.

The film first caught my attention while I was cruising the Horror section in HMV. I was tired of all the so called \"terrifiying\" Hollywood blockbusters and wanted something different. The cover art for Satan's Little Helper immediately caught my attention. As you can see, the image draws you in - it's chilling! I knew it was a straight to DVD release - but I took a chance. I mean, I just seen \"Boogey Man\" the night before - so It couldn't get any worse! After I watched the movie, I was semi-satisfied. I loved the plot of the movie. It was really creepy how the killer was pretending to be the little boys friend, so he could kill. In some sick deranged way, he actually thought he and the little boy would become partners - a duo of terror. It was a great idea to set the film on Halloween night. This way, no one would think anything of a masked man beside a little kid. They would simply think he was his guardian. But, this is also where the \"plot holes\" begin to surface.

If your son came home with a \"friend\" he met trick or treating - that's fine. You wouldn't think anything of it - if he was 9!, or round about the same age as him. If however, he appeared with a strange man in a mask, you would be startled and protective of your child. You would ask the man to remove his mask and identify himself. You would ask why he is with your son. He doesn't know him. You would tell him to please leave. He isn't a family friend. He's a stranger. Now, we're supposed to teach our child not to talk to strangers. In this case, the mum is completely fine with it. Huh? They never seem to think it's a tad odd that the \"man\" doesn't speak - at all. Gruanted they think it's the daughters boyfriend, but after 10 minutes of not talking you would pull the mask off and ask him why he's not saying a word.

The film goes down hill from there. The thing that got me the most was, all the mum said was \"Do you want some cider?\". I can't count how many times she says this in the movie. It's like, oh you're dying - we have cider though, it's all good!! The movie started promising, and failed to deliver. It was more of a horror/comedy, and even as that it fails to deliver. I guess you could call it a \"Dud\",\"Flop\" etc..

The best thing about the movie is the cover art. Though, something tells me that's not worth the 12 dollars!", "y": 0}, {"x": "I could barely keep myself from either nodding off or just turning off this turd, but I decided to stick it out if only for the reasoning that maybe *something* would happen. This is the work of a writer/producer/director/special fx, Kenneth Herts, who wants to make a statement on ecological damage while making a monster movie. That's what he wanted, anyway. What it turns out to be is a lot of acting, either slightly hammy or just mundane and without much merit, and scenes that seem to repeat themselves as the monster ATTACKS in the river waters (oh, and what luck, a woman just happens to be naked in it... even though there have already been DISAPPEARANCES!)

This is just nonsensical stuff, but I suppose it's not too harmful; it's not very obnoxious at the least and once or twice we get a semi-interesting peek at Brazilian \"culture\" (which is the father walking through town with his flock or other pieces of a semblance of 'hey, this is NOT America!'). But whatever hope the director had in casting Mitchum or Carradine is squandered on at best pedestrian and at worst excruciatingly banal and dumb dialog. It doesn't help that when we finally get something of a good look at the monster and the \"action\" happens, it too is stupidly staged and with only sleazy appeal. Usually I would feel sorry for a filmmaker who had a lot of problems getting a particular picture finished- in this case it took the better part of the mid 70s- but with Monstroid or Monster or whatever it's called... nah.

If you happen to get the Elvira DVD double-feature of this (bad print with bad transfer quality) with Blue Sunshine, make sure to skip this one. Unless, of course, you're an Elvira die-hard and can't help yourself to hear her luscious commentary; personally, I'd rather get Joel or Mike Nelson with the robots from Mystery Science Theater on this roast turkey.", "y": 0}, {"x": "What can you say when you see a good French movie which tries to draw a suspenseful story in line with the social background of the characters? The major point is we believe in those characters and once they've met each other we want them to stay together. It's simple and really efficient. The background story is less important. Why does the screenplay go on the side of a half-developed thriller? It helps not to get stuck in those social demonstrations most French film-jerkers like to make. Not too much ambition, right: Sur mes l\u00e8vres is only an entertaining French film with good characterization.

For all the clever noir points in the screenplay the end is by far too easy. It goes quite as easy as in Rear Window (an obvious reference and definitely not a noir film) but with a less compelling context. Where I am amazed it's to see that the character of the probation officer has not been erased. He brings very little to the story; when he appears alone we wonder if we've not missed a part before. Jacques Audiard is not a new-comer yet. Strange and weird.", "y": 1}, {"x": "Absolutely stunning, warmth for the head and the heart. The kind of movie western movie makers are too rushed, too frenetic to even attempt. My kids watched it, and they loved it too. What real people--goes to show you how cultural differences (the Japanese setting) is less important than the human similarities. Go see it, whether you like dancing or not.", "y": 1}, {"x": "I remember this movie from when i was 12, it was amazing.. i remember it to the day not like most thing i watched back then, i have even tried to buy it but its like rocking horse sh*t! Anyway, the acting is a bit chewy but the story is amazing considering it was a real B movie with a low budget and event the fighting scenes were amazing to watch, i must have watched it about 20 times. It was a very well made movie and i loved the idea of fighting giant man controlled robots, pity they had to spoil it by making a crappy spin off \"Crash and Burn\", don't watch that movie by the way it is total pants! If your a real Sci-Fi movie fan then watch this, if it was re-made today it would be a winner.. i really would love to see a remake or even release the DVD of it.", "y": 1}, {"x": "I was expecting a little something from \"K-911\", I mean it did look like a cute movie that I could get into. I always did love the dog comedy movies. But it looked like it was supposed to be Jame's movie, not Jerry Lee's. The plot was pretty lame and the two love interests really didn't have chemistry to begin with. Not to mention that James seemed to have a total sexist view in the movie despite the fact the writer wasn't going in that direction. James just really ticked me off for more than half the film. The dogs were the true stars and that's pretty sad that they out shined the actors.

So, I'm glad it's not just me on IMDb who agrees that this was a pretty stupid movie. But hopefully, James will realize it was his brother Jim who was the talented one, no offense, but not everyone can be their star sibling. Don't you wish Ashlee Simpson would take that same advice? :D

3/10", "y": 0}, {"x": "The 100 black and white half-hour episodes of the early situation comedy \"Mr. Peepers\" were originally broadcast from 1952-55 on NBC. Like a lot of baby boomers this and \"Ding Dong School\" are my earliest memories of television. Since both ran later in syndication it is hard to tell how many of these memories are actually tied to the original broadcasts.

\"Mr. Peepers\" is worth checking out for more than its nostalgia value. It represents a very different style of situation comedy than shows like \"The Honeymooners\" and \"I Love Lucy\". The genre could have gone in two different directions in those days and ended up taking the loud abrasive path of those two shows; which is probably why they still seem contemporary.

\"Mr. Peepers\", which was differentiated by its intelligent restrained tone, may appear slow and dull in comparison. But it's really more a matter of adjusting to the different style. Once you get into the characters it will win over most intelligent viewers. Credit should be give to the show's producer, Fred Coe, a key figure in early television whose dramatic anthologies are also worth checking out (\"Philco Television Playhouse\", \"Lights Out\", \"Playhouse 90\", \"Producers Showcase\", \"Playwrights 56\", \"Fireside Theatre\", etc.) even on kinescope.

\"Mr. Peepers\" offered a much more gentle style with Wally Cox (to be the voice of \"Underdog\" a few years later) in the title role, Robinson Peepers, a mild-mannered high school science teacher. His glasses were his trademark and a symbolic link to his name and role as a passive observer.

The series provided Cox with an outstanding supporting cast. Tony Randall played his brash best friend, history teacher Harvey Weskit. Jack Warden played Frank Whip, the loud gym teacher whose mild bullying gave the show most of its conflict elements.

There is some love interest competition involving the school's nurse, Nancy Remington (Patricia Benoit), with viewers quickly aligning with Mr. Peepers who seems a much better match for the gentle Nancy. Their on-screen marriage near the end 1953-54 season captured national attention, an early version of the \"Who Shot J.R.?\" frenzy.

Then again, what do I know? I'm only a child.", "y": 1}, {"x": "Karen(Bobbie Phillips)mentions, after one of her kids gets out of hand with his lame annoying jokes, that she'll never survive this trip..boy, is she ever on the money. Karen is a school teacher taking her group of kids from the Shepley College of Historical Studies to the butt ugly locale of a run-down manor in the major dung-heap of Ireland..surely there are places in this country more appeasing to the senses than this?! The caretaker of the manor, Gary(Simon Peacock)warns Karen and her students to stay on the path and not to stray into the forest. There's a myth regarding the Sawney Bean Clan, a ritualistic druid cannibalistic inbred family celebrate Samhain(the end of Summer, October 31st)\"Feast of the Dead\" where sacrifices are needed to appease the spirits. Gary is supposedly clairvoyant, his cousin Pandora(Ginger Lynn Allen)tells us, because he was born on Samhain. Funny, because he sure doesn't see outcomes well or even give advice accurately. Nearly everyone dies(..even those who never stray from the path)and he doesn't even see his own gruesome fate. What this monster we hear breathing is a victim of way too much inbreeding..it's face resembles a malformed mushroom and it looks like a hideous reject from a Mad Max picture. It doesn't take long before the \"evil breeder\" is killing everyone. Paul(Howard Rosenstein)is Karen's love interest who made the wrong decision coming to Ireland without his girlfriend's prior knowledge.

Horrible formula slasher doesn't stray from the norm. It's minuscule budget shows loudly and the characters are assembly line clich\u00e9s churned out yet again to be slaughtered in the usual gory ways. Most of the violence flashes across the screen quickly with not much dwelling on the breeder's acts of death towards his victims. Lots of guts get pulled out during the fast edit cuts as one scene whisks to another. Seeing Gillian Leigh's gorgeous naked body for a moment or two isn't incentive enough to recommend it. Phil Price has the really irritating trickster character, Steve, often shedding bad jokes..how he is able to get Leigh's Barbara naked in the shower for some action is anyone's guess because I have no reason why he'd stand a chance with such a hottie. Brandi-Ann Milbrant has the fortunate role of Shae, the quiet virgin smart girl(who is also quite hot)who we know will be the one chosen by the screenplay to survive. Jenna Jameson drops by long enough to get her heart cut out of her chest(at least we see her breasts momentarily before her chest is opened up)with a few minor lines about two missing friends she's looking for. The film's main problem is that the story and character development grinds to a halt because it's realized that none of them are at all interesting so director Christian Viel just lets loose his monster to run rampant causing carnage, obliterating an entire cast almost in one fail swoop within ten minutes. Oh, and Richard Grieco has a minor opening cameo as a victim who strayed off the path to tent camp with his chick.", "y": 0}, {"x": "No scenario, bad actors (poor Melissa Gilbert)... Beurk Beurk Beurk ...

Give a such budget to make this... In Belgium, we make ten films which win all prices in Cannes with this.

Last time that I've seen a such NULL-Film was Hypercube. But scenario was better.

Is anyone knows if the director was a graduate in school-film or a cop ?

The better things in this film was the word \"End\".

Why authorize to sell this ? 1\u00e7 is to expensive.

I've pay ten dollars to buy this.

For me, pay for this was my BIG MISTAKE of millennium.

Too bad.

Next time I'll break my arm but buy this type of sh*t.", "y": 0}, {"x": "This waste of time is a completely unnecessary remake of a great film. Nothing new or original is added other than Perry's backflashes, which are of marginal interest. It lacks the documentary feel of the first film and the raw urgency that made it so effective. Also painfully missing is the sharp Quincy Jones soundtrack that added to much to the original film. I can't understand any high ratings for this at all. It's quite bad. Why does anyone waste time or money making crap like this and why did I waste time watching it?", "y": 0}, {"x": "It's refreshing to see a movie that you think will end happily just like almost every other American movie, and then be surprised when that doesn't happen. I like a happy ending as much as the next guy, but sometimes it's better to portray things in a more realistic manner, and I thought Brokedown Palace did this very well.

The ending, with one friend basically sacrificing herself for the other, thus redeeming her earlier poor behavior which got them into the situation in the first place, was very moving. I almost rather would have done without the last line, which proved that she didn't actually do the deed she confessed to, because that would have made the movie more about the friendship between the two girls, and less about the crime. Whether she did it or not wasn't that important.

The story itself bordered on the clich\u00e9, but the actresses kept my attention with their excellent performances. Very realistic, very captivating.

7 out of 10.", "y": 1}, {"x": "To start with, I have to point out the fact that you're gonna feel completely lost for more than half an hour. Yeah, some things happen, but you don't know why or what for. When you finally figure things out you just realize that it's nothing but a twisted soad opera, dealing with mature prostitutes, dead mothers, illegitimate sons... The characters are rather poor and the actors (specially the young ones) don't help that much to make'em look credible. Only Marisa Paredes stands out, but she's a superb actress, no matter if the movie is pure rubbish.

The only positive things to say about \"Fr\u00edo Sol De Invierno\" is that d\u00e9butant Pablo Malo seems to have good intentions, and he's filmed a couple of scenes that are quite intense... Well, maybe the next time...

*My rate: 4/10", "y": 0}, {"x": "Gene Kelly came up with some really grand ideas for musicals while with MGM. Here he's at the top of his creative powers working with the Arthur Freed musical unit. Hard to believe when you watch An American In Paris that the players never left the back lot at MGM.

The magic of An American In Paris is due to the creative editing under the direction of Vincent Minnelli and the sets that MGM designed blended with some background establishing shots. The idea of the film originated with Kelly who wanted simply to do a film with a lengthy ballet sequence involving George Gershwin's tone poem An American in Paris. It sounded good to Arthur Freed who approached Ira Gershwin who said fine with him as long as they used other Gershwin material.

Gershwin got the kind of deal for Gershwin music that Irving Berlin normally got. Not one note of non-Gershwin music is heard in An American in Paris. Listen to some of the background music and you will hear things like Embraceable You and But Not For Me which are not real musical numbers.

Another guy who was a fair hand at writing lyrics, Alan Jay Lerner, wrote the story which admittedly is a thin one. All about an ex-GI played by Gene Kelly who after World War II never left France, just settled into an apartment on the Left Bank and proceeded to become a starving artist. He lives with eccentric composer Oscar Levant and does that ever sound like a redundancy.

Two women are interested in him. Another expatriate American played by Nina Foch who wants to sponsor him as a painter if he'll reciprocate in other matters. But Kelly falls for a shop girl played by Leslie Caron in her film debut. Caron also has musical comedy star Georges Guetary interested in here.

Of course the plot is just an excuse to sing and dance to the music of George Gershwin. An American in Paris happens to be the first film I ever saw as an in flight movie on the first airplane trip I ever took. I still remember flying back from Phoenix Arizona to Kennedy Airport seeing Gene Kelly doing I've Got Rhythm. My favorite number in the film however is Tra-La-La which Kelly sings and dances all over the apartment with Oscar Levant playing the piano. At one point Kelly dances on top of the baby grand piano.

In a book about Arthur Freed, I read a quote where he said in the American in Paris ballet sequence was to be done with the background of the French impressionists which he felt the public would take to rather than a realistic setting on the streets or back lot. So it happened that way. Kelly had done lengthy ballet sequences in Words and Music, The Pirate, and On the Town. But this one topped them all. Still does in my opinion and that includes some of Gene Kelly's later films.

In a surprise upset at the Oscars, An American In Paris was chosen best picture for 1951, beating out the heavily favored A Streetcar Named Desire. I guess fantasy trumped realism that year. Big budgets also have an upper hand in these things as well.

Still An American in Paris is one of the best movie musicals ever done and since the studios no longer have all that creative talent under one roof, something less likely to be repeated.", "y": 1}, {"x": "This is not a good movie. Too preachy in parts and the story line was sub par. The 3D was OK, but not superb. I almost fell asleep in this movie.

The story is about 3 young flies that want to have adventure and follow up on it. The characters are lacking, I truly do not care about these characters and feel that there was nothing to keep an adult interested. Pixar this is not.

I would have liked to see more special 3D effects. Also I wold like to see more fly jokes than the mom constantly saying \"Lord of the flies\" Pretty sexist in showing the women as house wives and fainting.", "y": 0}, {"x": "Must have to agree with the other reviewer. This has got to be the WORST movie, let alone western I have ever seen. Terrible acting, dialogue that was unimaginative and pathetic (let alone completely inappropriate for supposedly being in the 1800s), and oh, did I mention a battery pack prominently displayed on the back of one of the characters? I was waiting for the boom mike to fall in the middle of a scene. And the ending? The least I can say is that it was consistent with the rest of the movie...completely awful. And yes, it did contain every clich\u00e9 in the book from the slow walk down the empty dusty road to the laughable \"let's remember when\" shots when a main character dies. Luckily I saw this on free TV. Don't waste your time.", "y": 0}, {"x": "It starts slowly, showing the dreary lives of the two housewives who decide to rent a castle in Italy for the month of April, but don't give up on it. Nothing much happens, but the time passes exquisitely, and there are numerous sly jokes (my favorite is the carriage ride in the storm, which I find hilarious). The movie is wonderfully romantic in many senses of the word, the scenery is beautiful (as is Polly Walker), and the resolutions in the movie are very satisfying.

The movie takes a couple of liberties with the book, the biggest being with the Arbuthnot/Briggs/Dester business, but I actually preferred the movie's version of this (it may be more sentimental, but I felt that it was more consistent with the tone of the story, and anyway I like sentiment when it's well done).

An excellent movie, especially as a date movie during lousy weather.", "y": 1}, {"x": "Though not in the whole film, Andy Griffith again plays his role best in this CBS tv-movie. The plot is easy-Griffith's character dies and his last wish is that his wife and kids scatter his ashes is the place he named (Mountains Somewhere). Though it will never be seen on TV and never be released on video, if you do get the chance to watch this--TAKE IT.", "y": 1}, {"x": "This film is absolutely horrific. One of the worst movies I've ever seen. The story does nearly not exist, the characters are full of stereotypes and the Special-FX only make you laugh. The only remarkable thing about this movie is the guest appearance of the Rapper Coolio as some kind of police officer.

If this film was supposed to be a comedy I didn't quite get the point. If you want to watch this movie: please get yourself drunk first and then prepare for some good laughs...especially when the first Special-FX appear on the screen.

But if you like trash movies made on the cheap: this film is a must-see for you.", "y": 0}, {"x": "Absolutely one of the worst movies I have ever seen! The acting, the dialog, the manuscript, the sound, the lighting, the plot line. I actually can't say anything positive about this, although I enjoy Swedish movies. The fighting scenes are so ridiculous that it's impossible to take it seriously. And when the lead character just happens to loose his shirt, while dodging bullets in a strip bar, I'm not sure if it's supposed to be a joke, or if someone really thinks these are ingredients in a good film?! Regina Lund is the only half descent actor, but she disappears in a flood of laughable pronunciations and unbelievable reactions. It leaves you horrified that someone actually spent time and money on something like this...", "y": 0}, {"x": "First, let me say that Notorious is an absolutely charming film, very lovingly rendered of its time and subject(s). Gretchen Mol is utterly, painfully convincing, the very soul of the contradictions smoothly reified by Ms. Page herself. Irving and Paula Klaw are richly drawn as the working-class stiffs they were (having met Paula at Movie Star News in 1990 I can say that Lili Taylor's performance is unimpeachable), and Jared Harris as John Willie (Coutts) is an adoringly debauched genius. Anyone with an interest in the recorded history of American attitudes toward sexuality must see this movie, in a theater preferably, where votes made with dollars count more.

Second, I will allow that I am a producer of material similar to that for which the Klaws would become famous, which is no way affects my estimation of Ms. Harron's work as the splendid piece that it is, but does condition my view of Notorious as an act of political resistance of the first order. Ms. Harron has crafted a work of subtle subversion. Along with V for Vendetta, it is a movie about another time for our times.

Few readers of this site will be aware that the government they will see enacted in Notorious (through transcription of the very words uttered in closed Senate committee hearings) is a very close approximation of the one they live under right now. While Ms. Harron expressly disallows that she has a political agenda appended to this film, her faithfulness to the facts, and the respectful and unsensational way in which she renders them, synchronizes Notorious with the present day. The very acts that Notorious portrays in loving and accurate detail are defined as obscene by the Communications Decency Act, recently brought to the Supreme Court as a First Amendment case and turned back there at the behest of the Bush administration. In other words, the delicate and ineffectual bondage depicted in Notorious is indictable today by Federal prosecutors in whatever (hostile) jurisdiction they choose. Of course, there were no hearings in the Senate or elsewhere on this matter when the CDA was passed. Of course you know nothing about it, because you don't want people in Peoria telling you what you can and cannot look at (likewise, people in Peoria probably don't want me telling them what they're allowed to view). Of course Notorious will never be indicted. It's Hollywood. It's lawyered up. Countless Klaws will, however, continue to be steamrolled by a puritanical bureaucracy that has not advanced its aesthetic, moral or biological composition much in 50+ years.

In addition, Notorious posts no 18 USC 2257 compliance statement, which is mandated by the unnoticed \"earmark\" recently voted into law. If any media contains images of \"sadomasochistic restraint\" it is required to make available (ex warrant) records of age and circumstance of all performers. Notorious fails in this regard also.

In addition to being a splendid piece of entertainment and an (nearly) accurate historical document, Notorious will be the litmus against which the Bush Justice Department is itself judged with respect to the 14th (Equal Protection) Amendment and on perhaps several other Constitutional grounds. In this regard alone, a debt of gratitude is owed Mary Harron. You'll be grateful in any case, Constitutional or otherwise, if you see this film.", "y": 1}, {"x": "The world is made up two different types of moviegoers... There are the \"English Patient\" types, who can't be bothered to enjoy anything that isn't high-brow enough to be shown on PBS, and there are the \"Happy Gilmore\" types, for whom an hour and a half of genitalia puns are definitely worth the $7.

Certainly, there's a ton of gray area, but you know to which side you're leaning. If you're an English Patient person, save your time, save your money, and save us all your \"Oh, this movie is so childish and stupid\" comments. I know, you thoroughly enjoy belittling every movie you don't like, and every person that likes them, but maybe you could hold off just this once.

But if you're a Happy Gilmore type... go see this one... You'll find it hilarious. Tim Meadows has created a hilarious character, and Will Farrell continues to be hilarious in just about everything he does. Go check it out. You'll be glad you did. And that's OK.", "y": 1}, {"x": "Lots and lots of information to digest, and if you've seen Zizek, you know his pace.

Also if you haven't seen most of the films or at least some other films by the same directors mentioned in this doc, you will be somewhat lost.

And the film list is long. Director includes Hitchcock (Psycho, Vertigo, Birds), Lynch (Lost Highway,Mullholland Falls, Wild at Heart, Blue Velvet ), Tarkovsky (Stalker, Solaris) and The Conversation(Coppola)

There are some segway films like, Star Wars: Espisode III, Matrix ... but these I suspect are baits. To be sure, Zizek is never boring, but if you don't buy (or if you mind) the psycho analytics, then you'll be annoyed to no end.

But you should not be, as the setting, clips, the way the film interleave with these clips, Zizek's points are never boring.", "y": 1}, {"x": "If there is a hell, it contains a screening room in which GRAND CANYON is playing over and over again on an eternal loop. One would hope that the presence of so many marvelous actors - Danny Glover, Alfre Woodard, Kevin Kline, Mary Louise Parker - would help make up for the presences of Mary McDonnell (whose penance is to watch her own films for all eternity)... But, no. Apparently they injected those other actors with a serum made from McDonnell. The entire affair is pretentious, overblown, insulting (if you are deaf or know anyone who is, be prepared for your blood to boil at the ludicrous TDD scene). GRAND CANYON is filled with obnoxious, self-involved people, but never gives us a reason to like/understand/sympathize with or even tolerate them. With rare exception, they are insufferable losers that the gene pool would be better off without. There's no plot to speak of, no character development (these people won't EVER develop), no break-out performance and the most arch writing you'll ever encounter in a film. The best thing about GRAND CANYON? Its title. This is one large HOLE of a movie.", "y": 0}, {"x": "Yesterday was Earth Day (April 22, 2009) in the US and other countries, and I went to see the full-feature movie-version of \"Earth\" by DisneyNature. I guess, like the auto manufacturers, Disney is trying to convince us that they care about the planet. Maybe they really do care about the planet, I don't know, but I don't think it warrants a special unit with the word \"nature\" in it. I do know that my youngest daughter loves Mickey Mouse, and who am I to tell a one-year old my personal feelings about Disney?

Aside from incredible cinematography, it was a typical Disney disappointment for me. Preceded by a half-dozen Disney movie trailers, rife with Disney clich\u00e9 (\"circle of life\", \"falling with style\"), over-dramatic music, recycled footage (Disney claims \"40% new footage\"). I was even starting to think that James Earl Jones narration is getting a bit boring. I like James Earl Jones, but his work for Disney and Morgan Freeman doing every Warner Brothers narrative starts to wear thin. I really think that Disney bought some BBC nature photography that was so spectacularly done, they felt it would sell itself if they slapped some orchestral music and recognizable sound-bites on it.

And what is Disney's obsession with showing predators chasing and killing baby animals? There were a half-dozen such scenes, complete with bleating youngsters on the verge of getting their throats ripped out. I think Disney needs to recognize that animals have a rich and interesting life outside of life and death struggles that appeal to the action-movie oriented teenagers that got dragged to this film by their parents. I was also cognizant of how Disney stopped well short of implying that man had anything to do with the climate change. Are they so afraid of the tiny minority of deniers that they think it's still a controversial subject?

I recommend skipping this one and renting the Blue Planet DVDs on Netflix. Nature films seem to be best done by the British at the moment.", "y": 0}, {"x": "\"Tulip\" is on the \"Australian All Shorts\" video from \"Tribe First Rites\" showcasing the talents of first time directors.

I wish more scripts had such excellent dialogue.

I hope Rachel Griffiths has more stories to tell, she does it so well.", "y": 1}, {"x": "The opening 5 minutes gave me hope. Then Meyers proved he only had one good idea for the rest of the movie. Absolute lowest common denominator humor. Painful viewing. A complete chore. Written no doubt in less than a week, just like the first one. Give Meyers the hook and lock him in a cell with Adam Sandler and Will Farrell. And don't let him out until he's developed a decent script for something, anything. He has it in him. These Austin Powers things are just embarrassing.

Let Goldmember sink without trace.", "y": 0}, {"x": "Okay, so the previews to this film only tells you that a rebellious young girl goes to live with her grandmother for the summer in order to straighten out. That is actually not the case! It's about a young rebellious 17 year old girl who reveals a secret and it's up to her mother to believe if she's telling the truth or not.

To be honest, I really enjoyed the concept of this movie. They had a really good plot and a really good theme of a love/hate relationship between mother and daughter. I did not however, enjoyed watching Lindsay Lohan's acting. In reality, this movie would have been GREAT if they had someone else, perhaps a better actress. The character of Rachel (Lohan) is a very sexually aggressive person and it sort of reminds us of the real Lindsay so it takes away a lot from the film.

I do however, think that if you put Lindsay aside, you will enjoy this film. The ending is pretty great (and sad).", "y": 0}, {"x": "

I have to admit to enjoying bad movies. I love them I watch all of them. Horror especially. My friends and I all gather after a hard week at school and work, rent some crazy tapes, order a pizza and have a blast. One of the ones we got at Hollywood Video, was this one, Zombie Bloodbath. This one had a great box, so I was expecting less than usual.

The story is about a housing project that is built over a nuclear facility that has had the above-ground layers bulldozed, and the other underground layers are simply covered up. The inhabitants of this neighborhood find the covered up facility when some kids fall into a hole inside a cave. This wakes up some zombies.

From this point on, it's chunk-city. The gore effects and action never stop until the end credits roll.

OK, it's not great art, but this one, with it's in-joke dialogue and over-the-top gruesome stuff was our favorite of the evening. Actually, it was one of the best \"party tapes\" I have ever had the pleasure of watching. And you could tell it was done on no money, with a bunch of crazy people. There are hundreds of zombies, and the Director looks like Brendan Frazer (he has a cameo) and it is just a wild trip.", "y": 1}, {"x": "For those of you who have read Rohinton Mistry's highly respected novel, this film will definitely impress you, because of how honorable an adaptation it is . With the exception of one minor subplot, Sturla Gunnarson's feature film debut is an almost dead-on recreation of the book (down to the last line).

For those of you who have not read the novel, this movie might be a little tricky. It is certainly not a large cinematic drama story. Instead it has a strong element of realism to it, but I would not have it any other way. The best way to describe Such a Long Journey to movie fans would be to say that it is a small scale, Hindu version of 'Fiddler On The Roof'. Instead of a Jewish/Russian milkman, the protagonist Gustad Noble is a banker in 1970's Bombay during the time of the Muslim/Hindi war with Pakistan. He is forced to deal with a number of unexpected problems in his life, including his sick daughter, his individualist eldest son, a distant friend who gets him involved with some dirty money, and an unhealthy neighborhood. The Ending is not a happy one, nor is it a sad one, but that is essentially what realism involves.

Such a Long Journey is a fine little movie, but if you want to see it, then good luck finding it. Unlike the novel, it has received very little release.", "y": 1}, {"x": "Michael Bennett and Nicholas Dante's Broadway show ran for years, but evidence of its power and charisma is lost in this movie adaptation, which most likely stems from the choice of director (Richard Attenborough, as far from B-way as you could get) and lead actor (Michael Douglas, who plays a director-choreographer like a slimy corporate lawyer). The slim story, about a grueling audition for a Broadway show which turns into a therapy session for the actor-dancer-singers, is pushed right up on us, with loud, brassy talents playing to the rafters. Nothing is modulated or subtle, particularly a laughable subplot about a ex-dancer returning to the theater and butting heads with old-flame Douglas. The over-eager hopefuls are filled with promise and heartache, but their personal stories of angst are a little embarrassing; this, matched with Attenborough's sluggish pacing, spells disaster, and even the now-famous songs fail to break through the artificial wrapping. *1/2 from ****", "y": 0}, {"x": "Claire Denis's movies seem to fall into one of two categories: the violent and bloody or the quiet and intimate. \"L'Intrus\" definitely falls into the first category, but it's not so awful as \"Trouble Every Day\" or \"J'ai pas sommeil.\"

Now, ever since I saw \"Chocolat,\" I've made it a point to see every new movie Denis makes. And I have always been disappointed. \"L'Intrus\" was no exception. She has yet to make a movie as personal and as moving as her first one.

You get a lot of the Denis regulars: an older but still magnificent B\u00e9atrice Dalle who seems to be in the movie only to show off her full lips, the gap between her teeth, her ample cleavage, and a couple of nice coats; the black guy from \"Trouble Every Day\" and \"J'ai pas sommeil,\" Gr\u00e9goire Colin, and that Lithuanian or Russian girl. Michel Subor's character was interesting enough, but the camera lingered on him at such length that I got annoyed by that curly forelock of hair hanging over his forehead and was relieved when, somewhere in Korea, I think, he finally got it cut.

There was certainly some action--gruesome murders, a man's search for a son--and there may even have been a plot, but one viewing wasn't enough to figure it out, and two viewings are, I fear, out of the question. For one thing, the score was jarring and obtrusive (as in \"Beau Travail\"). For another, the seasons changed too abruptly, leaving you even more confused about what was going on. Oh, there were a few pretty shots, and if you liked \"Friday Evening\" with its shots of the folds in heavy drapes and bedsheets, you might appreciate the aesthetics of \"L'Intrus.\" Otherwise, steer clear.

I saw this movie in French and it's possible I missed something crucial. But the dialogue in a Denis movie rarely amounts to more than five pages, double spaced and with ample margins. In \"Chocolat\" the silence is sublime; in \"L'Intrus,\" it's just dull.", "y": 0}, {"x": "This British pot-boiler has one thing going for it: the young men are uniformly good looking. The older men are opinionated, right-wing Thatcherites whose behavior brings back all the acrimony of the Reagan/Thatcher years. Young or old, however, morals in this three-part mini-series are universally suspect and no one comes off particularly well.

Nick is a handsome young gay man fresh out of Oxford. It is not pivotal to the story, but he has an extraordinarily beautiful head of hair which makes watching this drivel much easier. Nick comes to London with a friend, whose father Gerald is a rich conservative politician, and babysits his sister Cat while the family frolics in the south of France. They neglect to inform him that, when upset, Cat cuts herself with an assortment of knives and other kitchen implements. Nick mistakes their self-serving 'gratitude' for affection and moves in, finding out too late just how much they despise and patronize him. Inexplicably, Nick lives in this house for four years but, as the plot depends on this point, it's best not to question it.

While Nick is most pleasing to look at, he is unbearably obsequious. His coy subjection to rich bigots soon had me climbing the walls. Deeply closeted except to Cat (she guesses his big secret on sight), he does like a little anonymous sex just so we know he is actually gay. Though it hardly seems possible, Nick takes a lover who is even more closeted than he.

Supercilious Tories scorn and insult the two blacks in the film, so imagine the venom which spews forth when Nick's sexual orientation is reported in a tabloid. Gerald, in true Tory fashion, has become involved in several personal and financial scandals, so the revelations about Nick add to his embarrassment. This gives Gerald one final opportunity to roundly castigate the hapless boy.

Except for one brief moment of indignation, Nick takes the abuse heaped upon him in silence and tacit agreement. Denial, self-loathing, naivet\u00e9, or ignorance? You decide, if you can manage to sit through this whole thing without throwing something at the set.", "y": 0}, {"x": "A woman asks for advice on the road to reach a mysterious town, and hears two ghoulish stories from the local weirdo, both zombie related. But perhaps fate has something nasty in store for her too...

The Zombie Chronicles is absolutely one of the worst films I have ever seen. In fact I must confess, so bad was it I fast forwarded through most of the garbage. And there was a lot of that, believe me. It runs for just 69 minutes, and there is still tons of filler. You get some skinhead doing a lot of push ups, plenty of dull kissy-kissy scenes between goofy teens (that rhymed, tee hee) and some fine examples of why some people should never become actors.

As for the title characters, they barely even have a footnote in the film. Why, you get more undead action in the intro than you do the preceding feature! Though, considering how pathetic the eyes bursting out of sockets and the eating of brains sequences are (amongst other 'delights'), maybe that's a blessing in disguise.

And to top it all off, it looks likes it's been filmed on someone's mobile phone for broadcast on Youtube. Jerky camera-work, scratches on the print, flickering lights... I had to rub my eyes when I realised it was made in 2001, and not 1971. Even the clothes and fashioned look about three decades out of date!

If you think I'm not qualified to do a review of Chronicles having not seen the whole film, then go ahead. YOU try sitting through it, I betcha you won't even make it to the first appearance of the blue-smartie coloured freaks before making your excuses and leaving. It is truly laughable that anyone chose to release it, and honestly you'll get far more fun resting your drink on the disc than actually torturing your DVD player with this gigglesome excuse for horror. In fact, don't for surprised if it packs it's bags and leaves in the morning, leaving you doomed to watch VHS tapes for the rest of your life. You have been warned... 0/10

P.S What kind of 18-rated horror has the woman keep a massive sports bra on during the obligatory sex scene?! See, the movie can't even get that part right...", "y": 0}, {"x": "We know from other movies that the actors are good but they cannot save the movie. A waste of time. The premise was not too bad. But one workable idea (interaction between real bussinessmen and Russian mafia) is not followed by an intelligent script", "y": 0}, {"x": "'Midnight Cowboy' was rated X with the original release back in 1969. There are some scenes where you can understand that, just a little. The movie about Joe Buck (Jon Voight) coming from Texas to New York City to become a hustler is sometimes a little disturbing. Dressed up as a cowboy he tries to live as a hustler, making money by the act of love. It does not work out as he planned. After a guy named Rico 'Ratso' Rizzo (Dustin Hoffman) first pulled a trick on him and stole some money they become friends. They live in an empty and very filthy apartment. Then Ratso gets sick and Joe has to try to make some money.

The movie was probably rated X for the main subject but on the way we see some strange things. The editing in this movie is great. We see dream sequences from Joe and Ratso interrupted by the real world in a nice and sometimes funny way. Dustin Hoffman, Jon Voight and the supporting actors give great performances. Especially Hoffman delivers some fine famous lines. The score is done by John Barry and sounds great. All this makes this a great movie that won the Best Picture Oscar for a good reason.", "y": 1}, {"x": "A very bad attempt at a young spinal tap. At least the music in spinal tap was good.

This is really a very sad case of Hollywood nepotism at it's worst. A bunch of Hollywood execs, bad musicians and producers create some \"poopie\" show so their kids can be in the spotlight. Oh please!!! The potty humor was even bad. I hate this stuff when there is really incredibly talented kids (musicians, actors and artists) out there busting their butts to have success and this crap comes along.

Help u all!!!! Why wasn't Gene Simmons in it??? Ameriac's taste in entertainment is going down the toilet.", "y": 0}, {"x": "I had always been a big Lynda Carter-Wonder Woman fan so when the Sci-Fi Channel ran this movie,I had to see it.I was bitterly disappointed.This is a Wonder Woman movie in name only.She doesn't wear the right costume [she must have refused to or had ordered major changes] and the plot runs like a poor man's James Bond.There's none of the things that made the comic book heroine a success i.e. the superhuman strength or determined will.It's just one long bad dream.I don't even think Cathy is all that attractive anyway.I wouldn't waste your time on this.", "y": 0}, {"x": "This movie is very entertaining, and any critique is based on personal preferences - not the films quality. Other than the common excessive profanity in some scenes by Murphy, the film is a great vehicle for his type of humor. It has some pretty good special effects, and exciting action scenes.

As a finder of lost children, Murphy's character starts off looking for a missing girl, which leads him on the path for which others believe he was \"chosen\" - - to protect the Golden Child. The young boy is born as an enlightened one, destined to save the world from evil forces, but whose very life is in danger, if not for the help of Murphy, and his beautiful, mysterious and mystical helper/guide/protector.

Also, there are moments of philosophical lessons to challenge the audience members who are interested in pondering deep thoughts. One such scene is where the Golden Child, that Murphy's character is solicited to protect, is tested by the monks of the mountain temple. An elderly monk presents a tray of ornamental necklaces for the child to choose from, and the child is tested on his choice.

This is a fantasy/comedy that is based on the notion that there are both good and evil forces in our world of which most people are completely unaware. As we accept this premise of the plot, we must let go of our touch with a perceived daily reality, and prepare for the earth and walls to crumble away, and reveal a realm of evil just waiting to destroy us.

This is an excellent movie, with a good plot, fine acting, and for the most part, pretty decent dialogue combining a serious topic with a healthy balance of Martial Art fighting, and Eddie Murphy humor.", "y": 1}, {"x": "This is a wonderful movie about a brothel in a fishing village, that could be best described with scene constellations and direction of old Kurosawa's works, combined with Dostoyevski's topics of human psychology (O-shin - Sonia Marmeladova ), Shakespeare's drama and Hans Christian Andersen's tragic and cheerfulness. The screenplay is wondrous, the scenes are colour- and beautiful some scenes stay really imprinted in my mind. The plot is interesting and unpredictable - each of the characters is very well developed and interesting - there is also a little action, so if you don't like all the sentiments you'd also come to your costs - . It is not about mysterious Geishas and proud Samurai with their Bushido pouring all out of them, but about life, work and kinds of people found everywhere at any time. A lovely and fascinating tribute to Kurosawa, certainly worth seeing.", "y": 1}, {"x": "I think that the shots and lighting were very poor. When I watched it for the first time I thought it was the old version(1956). When I really found out the true year of the film I was shocked. I didn't know that there could be such a bad film made so recently. Thats really all I wanted to say. This film had a good plot though, nothing you couldn't miss out on if you would simply read the novel that George Orwelll wrote. All I really want to say has already been said except for this: I can't believe that this film could have possibly received so many awards and nominations.I gave this film a One (awful), because I felt that it was very badly made. Well that is all. So long", "y": 0}, {"x": "Aside from the great movie METROPOLIS, this is about the oldest pure sci-fi movie. While at times the film is a bit preachy and the acting can be a bit broad, it is a great film for two reasons. First, it is extremely original in both style and content. Even in the 21st century, there are no films I can think of that are anything like it. Second, for its time, the special effects were absolutely incredible--using matte paintings, models and huge casts to create amazing scenes of both a post-apocalyptic world and a vast city of tomorrow. Sure, you could sit back and knock the film because, by today's standards, the effects are only so-so. But, you must appreciate that this was state of the art when the film came out in 1936 and it must have really amazed audiences. In many ways, the sets look highly reminiscent of the \"modern cities\" featured at the 1939 WORLD'S FAIR.

I think the movie is also interesting because it seems torn by the question \"are people really THAT stupid or are we destined for greatness?\" The end result seems to be a little of both! How true!

A final note: I saw this twice on TV and just a short time ago on video. All three times the sound and print quality stank--particularly the sound. If this is available on a DVD, hopefully it is a lot cleaner and will provide optional captioning. As the sound on the video kept cutting out, I really would have appreciated this!", "y": 1}, {"x": "When I was in school I made a film about a couple roaming around in the trees and talking, and I realized halfway through editing that this was not just a failing aesthetic strategy but a clich\u00e9 of Canadian cinema: sodden lyricism married to vacant, metaphor-burdened stabs at social commentary. But whatever my own film's failings I feel much better after seeing this...this...thing. For one thing, mine ran 20 minutes, not 85, and had more content at that: every pointless bit of business here is fawned over for four, five, six relentless minutes. The male lead is just incredible, a brow-beating, loudmouthed creep given to outbursts of drama-class improv in between philosophical insights culled from the U of T pub, and he is given lots and lots of space to make us hate him. Admittedly if he weren't such an a**hole then the third act would make even less sense, as a couple snarky dudes show up to provide distant and thoroughly unhelpful echoes of 'exploitation' values; but it doesn't make it any easier to watch the caged creep whimper \"please\" in closeup until the magazine runs out. I take back what I said about AUTUMN BORN, which at least had the courage of its own misbegotten lechery: this cinematic crater is and will remain the very worst Canadian movie of all time. At least, I really really hope so.", "y": 0}, {"x": "This is one of the worst films I've ever seen. I looked into it mainly out of a morbid curiosity since I loved the novel, and I wish I hadn't. I turned it off after a little less than an hour, though I wanted to turn it off after five minutes. I wish I had. It disregards the novel a lot and changes all sorts of factors. Unless the film managed to redeem itself in the last 50 or so minutes (which would be impossible) I would in no way recommend this. Its an insult to one of the greatest writers of the 20th century. I don't think, as many people say that it is, that \"The Bell Jar\" is necessarily unfilmable, but this particular rendition could have been done without. I'd almost like to see this one day in the hands of a director and screenwriter who can do it justice.", "y": 0}, {"x": "The Sentinel features a sort of run of the mill and clich\u00e9d suspense/mystery but is lifted with some good acting and taut pacing. These stories have already for the most part gone through as many permutations as we can bear, so what we're left with is how good is the acting, how smart are the setups and bad guys, how well crafted is the main plot etc etc.....so the Sentinel does a solid job given it's content. Michael Douglass and Kiefer Sutherland both maintain some good screen bravado and attitudes. Eva Longoria (first time I've seen her on screen) brings some satisfactory support. The whole affair side of the story is utterly implausible knocking it down a bit, but it deserves slack. Worth a viewing if you like the genre.", "y": 1}, {"x": "Although I have enjoyed Bing Crosby in other movies, I find this movie to be particularly grating. Maybe because I'm from a different era and a different country, but I found Crosby's continual references to the Good Old USA pleasant at first, trite after a while and then finally annoying. Don't get me wrong - I'm not anti-American whatsoever - but it seemed that the English could do no right and/or needed this brave, oh so smart American visitor to show them the way. It's a \"fish out of water\" story, but unlike most movies of this sort, this time it's the \"fish\" who has the upper hand. To be fair to both myself and the movie, I have watched it a few times spaced over a few years and get the same impression each time.

(I watched another Crosby movie last night - The Emperor's Waltz - and that, too, produced the same reaction in me. And to my surprise even my wife - who for what's it's worth is American - found the \"in your face\" attitude of American Crosby to be irritating. One too many references to Teddy Roosevelt, as she put it.)

As for the premise of the movie, it's unique enough for its day and the supporting cast is of course very good. The scenery and the music is also good, as are the great costumes - although I agree with a previous reviewer that the wig on William Bendix looks horrid (picture Moe of The Three Stooges).

All in all for me this would be a much more enjoyable picture without the attitude of Bing Crosby but because he is in virtually every shot it's pretty hard to sit through this movie.", "y": 0}, {"x": "This is one of the best movies to come from Bollywood in years. Certainly the best this year until now. Indian to the core, the panoramic visuals, the heart-pleasing dialogs and the melodious and soft music make the movie an exceptional one. The apt depiction of Indianvalues and culture makes the viewer search for his/her roots in them and invigorates the mind and spirit with a sense of pride and a new lease on life.

This movie is for viewers who enjoy a call to their imagination and philosophical senses. If you like watching movies to get all your nerves excited through on-screen action, sex or terror, then this movie is not for you, because you will find that the movie is not full of 90 degrees twists in it. It is as simple a story for a movie as it can get. But that's exactly where the art of the movie lies. One gets a real life experience, and the best thing is, this experience is one full of values and hope. It is about the positive side of life, about the sweet things that God has showered on humans, as against the regressive movies that insist on showing dons, terrorists and underworlds. This is not about things and people that have gone bad. It is about the goodness that still persists, and that keeps the world running. Of course, every genre of movies is respectable but it takes a lot of courage and talent to come up with a movie that swims against the current and tries to open the eyes of the public to the hidden realities and truths.

Having said that, here's more...

The movie is the journey of a couple from their engagement to their arranged marriage - yes, that's right, it is an arranged marriage and the couple come to know each other only through their parents, and learn to love each other. The 6 month gap between engagement and marriage is a long time, not full of \"enticing\" happenings, but one that nurtures the growing love and devotion of the couple to each other. They learn together the importance of their relationship and of this invaluable period of their lives, and work to strengthen the bonds of marriage. But have these been strengthened enough? Their relationship will face the test of not only time but also fortune. Will they pass this test? That is what \"Vivah\" is about.", "y": 1}, {"x": "This documentary begins with an interesting premise -- it makes an intriguing and convincing argument that the history of Jesus as is commonly believed is probably a myth. Sadly, though, after priming us with this, the movie completely shifts gears and becomes little more than a non-stop attack on Christianity, and pretty much focusing on the easy targets.

The writer/director clearly has some issues with the Church (he is a former evangelical Christian and has some legit anger) and this film seems to be his form of release. It'd be interesting to see the first 20 minutes expanded, but as a whole, the movie is disappointing.", "y": 0}, {"x": "I dont know about you, but I've always felt drawn to 'ART' cinema. The first 'art' film I managed to get a hold of was Peter Greenaway's \"The Cook, The Thief, His Wife and Her Lover\", which blew my mind and creative spiret into overdrive. The film was the ultimate paradox, both beautiful and grotesque...this is what 'art cinema' was about, exploring intellectual ideas and bringing the visceral to the screen with purpose. Life, real life, can be like living in a madhouse, and art expressed shows it for what it is. I love movies of all types, but especially those that both entertain and have something to say, whether I agree with it's stance or no...

\"8 1/2 WOMEN\", is a dry, clinical 'comedy' where a father and son gather a harem to fufill their many sexual fantasies. There is only a very brief allusion to Fellini in the film, unlike what the previews have suggested. The main focus of the film falls on the 'close' relationship between father and son, brought together after the mothers' death. In the early scenes of the film the fathers' sadness is believable, you can feel his pain. What happens afterwards is plain by Greenaway standards, the gathering of the harem, observations on love and death, and flesh displayed for the sake of flesh...One could argue this, but I feel the movie to be shallow and pointless. And the idea that this could be a comedy is perplexing to me. The acting for the most part if fine,...especially good are Polly Walker and Amanda Plummer(though poor Mandy should put her clothes back on) What the film lacks is a compelling story, and the usual Greenaway touches of excess that made his other films so wonderful to watch.

While filled with moments of insight, and the occasional taboo, \"8 1/2 Women\" is too cut and paste to be considered art, too bland to considered 'funny', and simply too dull to be considered worthwhile.

Save your money...I can only recommend this film as a sleeping aid.

4 out of 10", "y": 0}, {"x": "This sword-&-sorcery story of an appallingly brutal and callous \"hero\" vanquishing an evil king is worthless in almost every detail. The acting is horrible from the leads to the supporting roles. The leering, gloating glee with which the director shows the hero smearing blood around is absolutely disgusting; nor is it redeemed by any justice to his cause, since he is as bad as the people he's fighting. Z-movie editing is abundant, including a scene where a character \"dies\" from a sword thrust that very obviously missed completely!

The movie is clearly banking on the charms of the female leads, Barbi Benton and Lana Clarkson, who are paraded around mostly naked throughout the movie. As a 20-something male, I will not pretend that female flesh on the screen doesn't attract me. But the treatment of their characters is so degrading and the sex scenes so casual and joyless, that I couldn't enjoy even this aspect of the movie.

Most cheesy movies of this era are at least somewhat redeemed by a light-hearted, tongue-in-cheek feel (the sequel is better in this regard), but DEATHSTALKER seems to take itself completely seriously as heroic fantasy. No way! Avoid at all costs!

Rating: 1/2 out of ****.", "y": 0}, {"x": "I'm glad I rented this movie for one reason: its shortcomings made me want to read Allende's book and get the full story.

Pros: the movie is beautiful, the period is depicted well and consistently (to the best of my knowledge), and Meryl and Glenn do good jobs.

Cons: This is the worst acting job I've ever seen from Jeremy Irons--I kept wondering if something was wrong with his mouth. (And I hate the terribly English way he says \"Transito.\") Winona Ryder does nothing believable except look young and idealistic. Most of the other performances are OK, but so few things hang together in the character arcs and the relationship development that I was frustrated and angry well before the end.

I'm very curious now whether this movie is typical of Bille August's work. I may have to drop another couple of bucks to rent Smilla's Sense of Snow.", "y": 0}, {"x": "A typical Goth chick (Rainbow Harvest looking like a cross between Winona Ryder in Beetlejuice and Boy George) gets even with people she feels have wronged her with the help of an old haunted mirror that she finds in the new house she and her mom (horror mainstay, Karen Black, the only remotely good thing about this travesty) buy. The acting's pretty laughably bad (especially when Rainbow interacts with the aforementioned mirror) and there are no scares or suspense to be had. This film inexplicably spawned thus for 3 sequels each slightly more atrocious than the last. People looking for a similarly themed, but far superior cinematic endeavor would be well advised to just search out the episode of \"Friday the 13th: the Series\" where a geeky girl finds an old cursed compact mirror. That packs more chills in it's scant 40 minutes than this whole franchise has provided across it's 4 films.

My Grade: D

Eye Candy: Charlie Spradling provides the obligatory T&A", "y": 0}, {"x": "I did not expect the performances of Gackt and Hyde to be as well done as they were, nor did I expect them to be cast in such an artistic well-developed movie with enough plot to keep you interested and enough diversity to make it original. This movie was an unexpected masterpiece for me, and I'll be on the lookout for the next movie like it. I especially like the fact that it is a vampire movie, but it wasn't a cheesy vampire flick, nor did it over embellish that fact. The characters all had human traits. The way it shows the growth of the characters was incredibly tasteful, and it makes you actually feel sorry for them throughout their lives. I give this movie two thumbs so far up. Definitely the best movie I have seen in the past five years.", "y": 1}, {"x": "This movie has one of the cheesiest plots I have seen. For me, that's what makes it so awesome! Fred Gwynne and Al Lewis are very good at what they achieved in the original Munsters series. While there was less slapstick, they still worked wonderfully together \"comedically.\" I wish Yvonne De Carlo, as Lily, would have had more plot involvement. She showed that she could do comedy in the original series, but it was mostly wasted in this movie. This movie also stars the great Sid Caesar, but sadly he doesn't have any interaction with Gwynne and Lewis. I think some better work could have come out of that.", "y": 1}, {"x": "This movie has received a lot of bad press from people who don't understand what it was meant to be. One must understand that this movie was never meant to be taken seriously. It's camp, along the same lines as \"Army of Darkness.\" AoD was silly, but funny and bad in a good way. \"House of the Dead\" fails to be \"good bad.\".

There are qualities inherent in good campy movies, most important of those being believable fantasy. One needs to believe what's happening in a movie to see the humor when a situation goes incredibly wrong. Without boundaries, the movie becomes absurd. HotD lacks any believability.

Worse still, HotD brings nothing new to the genre, and repeats the same plot twists and character reactions that many horror movies inevitably start to exhibit. For example, all too often, horror movies fall into the trap where the main characters find love amongst the gore and destruction. I don't know about you, but when I'm being chased by zombies, I wanna make out with a hot chick. Believe it? No? Then, you probably won't believe it when the characters start sucking each other's faces in this movie.

Beyond the obvious issues that plague this movie like so many other horror movies, Uwe Boll elected to add scenes from the video game of zombies being shot, randomly whenever a character shoots a zombie in the movie. Not only is there no clear rationale for this artistic choice, but it distracts one from an already unbelievable plot. Further, there are frequent and numerous examples of bad acting, and seemingly no attempts by the director to guide the actors' reactions to events... leaving the movie with no redeeming qualities. Avoid...", "y": 0}, {"x": "Emma is a horribly flawed film based on Jane Austens classic novel. I have not read the book so I really didn't know that much about the plot, and yet I still predicted nearly the entire plot. There were also many scenes that frustrated me because of the bad writing or directing. The film is though for some reason very entertaining and I loved it. Of course there were all the scenes I disliked but the majority was well acted and funny. Gwyneth Paltrow gives one of her best performances as the heroine in Emma. The film also stars Toni Collette(Who has okay but has been much better) Ewan Mecgreger(Who has also been better but he is still very good here) Alan Cumming(Who I have never really been impressed with and is pretty much the same here) and Jeremy Northam(Who's performance is rather wooden at first look but actually fairly subtle, even if that was not what it needed) There have been much better adaptations of Jane Austen books but this one is still very entertaining and worth watching.", "y": 1}, {"x": "I was supposed to review this for a website, and I watched this with optimism that perhaps it would at least be a cheesy yet entertaining rip off, and it didn't even do that well enough.

\"666: The Child\" is probably one of the worst supernatural thrillers I've ever seen (Even worse than \"Godsend\") with scenes that rip from \"The Omen\" without shame. The ending is even very similar to the way \"The Omen\" ends.

Not to mention that the acting, writing, and story are all just hackneyed. If these movies make money, I'm sad to see where Asylum is headed. It's embarrassing.", "y": 0}, {"x": "This is of of Sammo's great early comedy films. This isn't a parody of enter the dragon, the main character (Sammo) is obsessed with Bruce Lee and emulates him freakishly well for a man of his size. Nominal story about how his fighting keeps causing his loved ones trouble - then fighting. Oh, the fighting. Good, fast-paced scenes with high impact (the white guy who plays a boxer looks like he really gets hurt by one of Sammo's kicks).

The funniest bit of this movie was purely unintentional. There is a Jim Kelly looking guy (one of three experts hired to take out Sammo), but he was a Chinese guy in blackface with an afro-wig. Come on, didn't they have any real black people in Hong Kong in 1978? Well, I guess I've seen enough white fake-as-hell \"Chinese people\" in old American movies too.

This is one is for any Sammo or Bruce Lee fan.", "y": 1}, {"x": "I imagine when Hitchcock scholars and experts find themselves together, the talk is not of the Master's great films like \"North By Northwest\" or \"Strangers On A Train\", but a lesser-known effort like this one from 1931, obscure and seriously flawed, which showcases the great director in fledgling form.

Emily and Fred Hill (Joan Barry and Harry Kendall) are a middle-class London couple scrimping to stay ahead. He begrudges their lot; she accepts it. Change comes in the form of a letter from an uncle, saying he will set them up so they can enjoy a life of globetrotting luxury. They make plans for a world cruise. But their problems have only begun.

Just ask Richard Hannay, Roger O. Thornhill, or Marion Crane. Well, Marion's indisposed at the moment, but you get the idea. Travel and Hitchcock go together like moths and candlelight, setting one up for a perilous journey at best. This is perhaps Hitchcock's earliest foray into this theme, and not his most successful or memorable. Hitchcock tries to mix comedy with another element, in this case domestic drama rather than suspense, but the two do not cohere, at least not here.

The Hills are a dull, flat couple, with no chemistry or personality. When they find themselves at the Folies Berg\u00e8re, in the form of cross-cutting with footage that looks ten years older than the rest of this film, they are abashed at the outfits of the female performers. \"The curtain's gone up too soon!\" gasps Emily. \"They aren't dressed.\"

When the Hills drift away from each other on an ocean cruise, it seems a mercy killing more than a tragic thing, even if the people they partner off with are drips, too. Emily's man, Gordon (Percy Marmont) carries around photographs of himself sitting next to empty chairs, which he suggests be filled by Emily. Fred's girl \"the Princess\" (Betty Amann) has Clara Bow's eyes and Wallace Beery's five o'clock shadow. There's also an obnoxious fellow passenger, a dowdy spinster whom Hitchcock always introduces with a cartoonish horn cue. Subtlety was still to come.

Everything is shot in an abrupt manner, with confusing blocking and strained dialogue. Hitchcock tries for some early comedy with Fred and his umbrella that doesn't come off, and Kendall seems to aim for laughs while Berry plays for tears. When Fred and Emily break off, they are seen being jostled on a pair of wedged-together rickshaws, one of many clunky attempts at symbolism.

Emily's the only vaguely sympathetic character, in part because she really cares about her husband and agonizes over her affair with Gordon, but mostly because she's among the first of Hitchcock's many magnetic blondes, her platinum ringlets whipping around her face like a Botticelli aboard the open deck of a Chinese junk near the film's conclusion.

Matters conclude with a dangerous situation as set-piece for the protagonists to come to grips with, and presumably repair their relationship. Only they aren't active participants in the resolution, and except for the fate of a friendly cat, nothing about the ending resonates.

At least you get some enjoyable views of London in the early 1930s, and a chance to see Hitchcock when he was still working for food. \"Rich And Strange\" is Hitchcock paying his dues, and learning his trade, one for scholars but not casual film goers.", "y": 0}, {"x": "You'll notice by the stars I've given this GREAT film that '...before you see it the first time,' is implied. I had never before heard of this film and happened across it just because this week (and last) was a very slow rental experience (not much great coming in). I'm not sure how this movie slipped past me -I love Lucy Liu and Jeremy Northam is great too. Still, it did.

This movie is an awesome example of what to do if you don't have a large budget. It had just the right amount of plot and dialog to make it very interesting and keep the viewer in the dark; just enough. The entire film is you (the viewer) trying to figure out the plots many twists and turns. I would have given this film 10/10, however some of the shots were pretty fake looking. I don't hold that against this film too much, but I don't think it deserves a perfect score.

Lucy Liu is beautiful and mysterious (as always). I think she's pretty underrated as a serious talent. Nevermind her beauty (which is difficult), she really takes her roles seriously and doesn't rest on her appearance to drive her through scenes of sophisticated emotion. And she can seem cold and even lifeless if needed, as well.

Jeremy Northam does really well, at first, as quite a geeky corporate rat, willing to run through any maze to prove himself. However, as he changes throughout the film, it's like night and day. I know some fans of Clive Owen, Jude Law, or other hopefuls to become the next James Bond will hate me for this, but Northam would/could/should fit that bill. He's suave and cultured. He's got a great Bond posture and voice. I think he too can be cold if the situation calls for it, and rather down-to-Earth, as well.

Great film and definitely this movie-buff recommends it to be seen at least once if you like corporate espionage films.", "y": 1}, {"x": "I was blown away by the re-imagined Battlestar Galactica, a show that always kept me guessing and brought me to tears on more than one occasion. A hardened sci-fi fan, I like to think I can pick out the good stuff from the BS, and this was good stuff.

As such, when I first heard about the prospect of a prequel series some months ago I got a sick feeling in my gut. I was afraid that the formula that made Battlestar so successful would be reused in Caprica, which wouldn't work at all. BSG's story, of a mournful ragged band of survivors, trapped aboard decaying star ships and guided by prophetic vision and a sequence of pseudo-miracles, was perfectly complimented by extraordinary music and a better cast of actors.

Caprica feels different. Where BSG takes place after the fall of a great civilization, Caprica portrays that civilization in it's cold and decadent heyday. The overall vibe I got from Caprica was similar to that of Minority Report, minus excessive and counterproductive theatricality. In true BSG form, Caprica has in it's first few hours of programming already tackled the issues of religious freedom, racism, the morality of playing God and the nature of the human soul.

The casting for Caprica is also excellent. Each character is unique and deep, from the obsessive and distant scientist-turned-entrepreneur, to his troubled and willful daughter, each actor and actress throws themselves into their respective roles.

Music, which was used so powerfully in BSG, also plays a significant role in Caprica. Battlestar's powerful rolling drums and mournful duduks served it's themes very well. Caprica uses a more orchestral sound, which gives the show it's own feeling quite distinct from either of it's predecessors.

The new Caprica is definitely it's own show, pulling from the Battlestar franchise only as much as it needs. I look forward to the full series.", "y": 1}, {"x": "What happens to washed up rock-n-roll stars in the late 1990's? They launch a comeback / reunion tour. At least, that's what the members of Strange Fruit, a (fictional) 70's stadium rock group do.

Tony (Stephen Rea) has the concession on condom vending machines when he runs into the son of the promoter of a famous music festival. It was at that festival in the 70's that Strange Fruit broke up. The 70's are \"retro\" and the time is right to wide that wave. He sets off in search of the other members of the band.

Part of what broke up the band was the death and replacement of Keith, the lead singer and brilliant song writer. The band was known for its excessive lifestyle and now they are all back amongst the working class from which they came. Beano, the drummer, played by Timothy Spall (who was brilliant in Secrets and Lies) is a layabout, the bass player is a roofer, and their lead singer is still a rocker. While he owns a huge mansion he has been forced to sell it, as his fortune has not lasted. Brian, the lead guitarist, is dead, so a young guitarist is hired to replace him.

Somewhat reluctantly the band agree to give the reunion a try. Abandoning their day jobs, they begin to rehearse, and their manager approaches their label about reissuing their albums. But he wants them to start touring again first. And so they hit the club circuit around Europe. The club scene is not kind to these overweight, dated, old rockers.

It is on tour that the film really starts to develop. All of the old conflicts rearise, with the figures of Keith and Brian hovering throughout. They all hang together because they are all in search of a second chance for the greatness that eluded them earlier. And they rediscover some of the interpersonal chemistry that made playing together so enjoyable.

Still Crazy starts as Spinal Tap II but gradually becomes a more dramatically focused film, following the relationships of the band members. While it is still a very funny movie, it is the evolving characters, struggling to deal with the deaths of Brian and Keith and with their own personal demons, that make the film work.", "y": 1}, {"x": "Wealthy psychiatrist Lindsay Crouse has just published her first novel and is feeling down about her profession feeling that it's hopeless to help her patients. A young gambling junkie client asks her to help him pay off his debts if he truly wants to help him get better. Here she gets involved with Joe Mantegna. To reveal any more of the plot would spoil one hell of a fun movie and 'House of Games' may very well be the best con movie I've seen. David Mamet wrote and directed this gem that's full of snappy dialogue, great one-liners, and enough twists to keep you guessing til the end. Crouse is perfect as the uptight psychiatrist needing a change and Mantegna tops her as the devilishly sly con-man. And with the exception of a coincidence in the last quarter of the movie, the film is in utter control of it's audience; and we are loving the con.

*** out of ****", "y": 1}, {"x": "Sometimes you wonder how some people get funding to create a movie as bad as this one. You can only stand about 5 minutes of this utter piece of garbage before you stomp back into blockbuster and demand your money back. I will now look at Michael Clarke Duncan with apprehension...why....he lent his name to this vermin.", "y": 0}, {"x": "The worst movie I have seen in a while. Yeah its fun to fantasize, but if that is what you are looking for, I suggest you see Brewsters Millions. This was just terrible and corny and terrible at being corny. Unless you are five or like terrible movies, don't see this one.", "y": 0}, {"x": "(aka: BLOOD CASTLE or SCREAM OF THE DEMON)

*spoiler*

This was a drive-in feature, co-billed with THE VELVET VAMPIRE. A Spanish-Italian co-production where a series of women in a village are being murdered around the same time a local count named Yanos Dalmar is seen on horseback, riding off with his 'man-eating' dog behind him.

The townsfolk already suspect he is the one behind it all and want his castle burned down. The murders first began around the time Count Yanos' older brother, Count Igor Dalmar was horribly burned and killed in a lab accident.

Then a woman Ivanna (Erna Schuer) that Igor hired before his death to assist him in his experiments shows up. Yanos agrees to hire her in place of his brother and together they seek the formulae for the regeneration of dead cells. Yanos wants to bring Igor's charred corpse back to life.

But of course Igor is still alive (although horribly burned) and stalking and killing the women in the village. We see his char-broiled face appear at various points in the film, so we know he's still alive, making the whole thing seem a little bit too obvious.

Igor meets another fiery end when he gets into a fight with Yanos over Ivanna, with the burning candles falling on to the same bed that Igor stumbles on to, meeting yet another, final char-broiled end.

The Retromedia DVD is taken from a VHS source and looks quite grainy and bad. Other than an even scratchier trailer, no other extras are included. Although it has a nice, creepy Spanish castle and good atmospherics, I found it to be fairly boring and predictable, with no excitement or mystery, whatsoever.

3 out of 10.", "y": 0}, {"x": "DOC SAVAGE: THE MAN OF BRONZE (1 outta 5 stars)

Dreadful, dreadful movie... based on the pulp magazine/paperback series by Lester Dent/Kenneth Robeson... about a super-heroic adventure hero in the '30s and his five assistants, all experts in some field of endeavor that allows them to combat evil. It was a pretty hokey series... but kinda fun to read when I was a teenager. I knew they made a movie version in the '70s, starring Ron (Tarzan) Ely... but I never got a chance to see it. It never played in theaters where I lived and was never shown on TV. Now that I have finally seen the film I can understand why. The plot and characters are never treated seriously... it's all kind of tongue-in-cheek and campy... kind of like the old Batman TV series... only without the benefit of being funny... or having any visual flair. Corny dialogue, cheesy special effects, dumb stereotypes, crummy action scenes and bad, bad acting. Actually, I find it kind of fascinating in its badness... what could they have possibly been thinking? Arnold Schwarzenegger was rumoured to be starring in a modern-day remake... but I don't imagine that would have turned out to be much better.", "y": 0}, {"x": "Boring. Minimal plot. No character development. I went into this movie with high expectations from the book. It COULD have been an awesome movie. It COULD have probably become a cult classic. Nope, it was a giant let-down. It was poorly cast and had horrible special effects. It was difficult to determine who were the bad guys: the rebels or the military or the church or all of them? I am still left puzzled by certain mini-plots from the movie. I am left dumbfounded as to certain aspects of this so-called \"prophecy\", which is never really FULLY explained. I felt like I was watching a corny episode of a mini-series on the sci-fi channel. It seemed very much like a made-for-TV movie. Don't go see this movie. It is a waste of time AND money.", "y": 0}, {"x": "I'm an incorrigible skeptic and agnostic and was thus expecting to enjoy this film. After watching it, however, I honestly believe that I could have made a better documentary myself. Its arguments appear to have only four spurious sources (despite his being listed in the credits on IMDb I didn't see Richard Dawkins anywhere), it's edited together crudely with laughably amateurish computer effects, and it doesn't make even the slightest attempt to appear impartial. The narration is pervaded throughout with a sneering, almost adolescent anti-Christian sentiment, ruining any possibility that the film might actually change someone's mind as opposed to just preaching to the choir (i.e. me). Though there is some interesting discussion of the historicity of Jesus, the movie hits an unbearable snag when it begins to dwell heavily on the Christian school which the director attended as a child, an institution which apparently scarred him badly psychologically as it obsesses him to this day.

Though TGWWT obviously had a low budget, there was still an opportunity here to make an intelligent commentary on the highly questionable roots of Christianity. There's certainly a dearth of skeptically-minded religious documentaries on the market, and this film could have helped fill the void. Instead, the director chose to insult our intelligence with this piece of garbage, which in the end appears to be some sort of therapeutic exercise for him. It's too bad that his Christian upbringing traumatized him, but he needn't subject an audience to his coping mechanism.", "y": 0}, {"x": "This film is unusual and bizarre, and it is nearly unusual and bizarre in a very good way. I give this short a 7 just because it is so unique and off-the-wall, but much of the time it seems as though it is being bizarre just for the sake of being bizarre. If the film had managed to integrate its more bizarre moments into some semblance of a plot then it would have been really fantastic.

The main problem here is that it looks as though the creators just jumbled together a bunch of crap about spatulas, then threw in a whole bunch more crap that sounded as though it would sound funny coming from the mouth of a spatula.

This is definitely worth checking out, but it is not top rate by any stretch of the creators wild imaginations.", "y": 1}, {"x": "I'm a Don Johnson fan, but this is undoubtedly the WORST movie, done by anybody, that I've ever seen. The acting was bad, as was the cinematography. Don should stick to doing action, because as The King, he just didn't cut it.", "y": 0}, {"x": "Dani(Reese Witherspoon) has always been very close with her older sister Maureen(Emily Warfield) until they both start falling in love with their neighbor Court(Jason London). But it is not after a terrible tragedy strikes that the two sisters realize that nothing can keep them apart and that their love for each other will never fade away.

This was truly a heartbreaking story about first love. Probably the most painful story about young love that I have ever seen. All the acting is amazing and Reese Witherspoon gives a great performance in her first movie. I would give The Man in the Moon 8.5/10", "y": 1}, {"x": "Philip. K. Dickian movie. And a decent one for that matter. Better than the Paycheck (Woo) and that abomination called Minority Report (Spielberg). But lets face it, the twisting and cheesing ending was a bit too much for me. Half way through the movie I already started to fear about such kind of ending, and I was regrettably right. But that does not mean that the film is not worth its time. No, not at all. First half (as already many here have commented) is awesome. There are some parts where you start to doubt whether the director intended to convey the message that showmanship is highly important thing in the future (we will do such kind on corny sf things because we CAN) or is it simply over combining. But the paranoia is there and feeling \"out of joint\" also. Good one.", "y": 0}, {"x": "This documentary follows the lives of Big and Little Edie Beale, a mother and daughter, who lived as recluses in their family mansion in East Hampton, NY from the mid-50s through the late 70s. By the time the filmmakers find them, the mansion is falling apart, and the women, one 78 and the other 56, share a squalid room. The older Edie Beale is the aunt of Jackie Kennedy Onassis and the younger is her first cousin. The women were originally going to be evicted from the house due to its decrepit condition, but Jackie sent them money for repairs so they could keep living there.

At times this movie can seem exploitative, as neither woman seems in the best of mental health, but at other times, the movie is hard to look away from. \"Little\" Edie blames her mother for her current state, and her mother fires back that Edie was never going to be the success she thought she was. \"Little\" Edie often seems trapped in the past, focused on choices she made decades ago, and loves showing off pictures from her youth, where she clearly was a beautiful debutante. Her mother seems more resigned to her fate, to live out the rest of her life in terrible conditions. There are definite hints of the glamorous life both women once lead, from the pictures that show a happy family, to the grand portrait of the older Edie next to her bed. From what we see of the house, most of the rooms in it are empty, the walls are cracking and falling apart, and \"Little\" Edie leaves food in the attic for the racoons to feast on. And of course there are numerous cats running around.

At its heart, this documentary is incredibly sad. While neither woman seems particularly depressed by their lot in life, the squalor they live in is utterly awful. It's not particularly clear if there is even running water in the house, and you get the impression that they have essentially been abandoned by their family.

However, as a documentary, the film is a wonder to behold, and is highly recommended.", "y": 1}, {"x": "If you're a fan of Mystery Science Theater 3K, Attack of the Giant Leeches, or Pinata Survival Island, this movie might be for you.

I live in Nashville and I didn't even know of this movie's existence until the day prior to its release, when the advertising company panicked and blanketed Music Row with dozens of fliers and billboards. It barely lasted two weeks in theaters anyway.

Bad acting, bad writing, and poor production only begin to describe this embarrassment of a film. For starters, the names are a bit much: Bo Price, Angel, and Dixie? Eesh.

Toby's awkwardly slow delivery of lines makes one wonder what production assistant got stuck holding the cue cards off camera. Angel's character rapidly transitions from her city-slicker ways to a cowgirl, slipping into southern slang after two days on the ranch. Her wardrobe goes from chic to a female version of Toby's--in fact, in the final scene, their outfits are identical, making one wonder if the wardrobe assistant called in sick.

The audio is inconsistent - perhaps the most noticeable example is when Toby decides to go for a swim and his voice suddenly sounds like he's shouting in a gymnasium.

There's never quite enough explanation or character development to suffice what happens on-screen. Overacting, exasperation, grimaces, and moodiness best describes the actors' interpretation and direction of the terrible script.

This movie is best enjoyed after consuming a couple of alcoholic beverages and in the company of your wittiest friends. But that's not saying much.", "y": 0}, {"x": "I must agree with the very first comment: this movie sucks very, very hard. Despite having a very big B-list cast, the cover of this film (for those who aren't watching it on Comedy Central during a weekday which is probably the only exposure this film will ever get) tries to put the blame on Dangerfield but in reality is just a paycheck for every has-been comedian from the '80s. Randy Quaid? Check. Ed Begley, Jr? Check. The voice of Lisa Simpson? She can now say that Maximum Overdrive wasn't her only horrible flick: double check. And so many, many others.

The saddest thing about this flick is that it was so lazily written with already-told jokes. Nothing about this movie outside of its existence is funny. You're better off watching paint dry. This is definitely direct-to-video scraping-the-bottom-of-the-barrel stuff that still believes in the old video adage: throw an old-time star on the cover and you'll get some money back off of the rental. Considering the days of video rental are changing, consider this one of the last examples of putting out garbage.

The only use this movie has if you're having trouble falling asleep. It'll get you there.", "y": 0}, {"x": "Antonioni was aiming for another hip masterpiece, this time on the other side of the Atlantic than \"Blow up\". It wasn\u00b4t the success with critics and youth like the former though. Why? Maybe because it was a European\u00b4s view of America filled with clich\u00e9s that didn\u00b4t work then and that have not aged well. (The revolutionary students at the beginning is embarrassing.)

Maybe when it was released big blockbuster movies and those aimed specifically at the youth market seemed dated. If it had been released a year before maybe hippes in deserts would have seemed fresh... It\u00b4s a very interesting film tho, very beautifully shot with some brilliant and Antonionian scenes in between, like the love-making in the desert, the stillness of the desert mansion and the explosive ending... That the leads were two amateurs didn\u00b4t help. They were beautiful but inexperienced. Mark Freshette is slightly better than Daria Halprin. It would have been so much better with proper actors! Maybe Michelle Phillips or a young Jessica Lange... The dialog is actually quite funny and poignant at times, tho you wouldn\u00b4t know the way the lines are delivered...

A very intersting document of the late sixties definitely worth a look for the photography and the soundtrack....", "y": 1}, {"x": "Let's face it; some lame kid who dies and has his soul transfered into a scarecrow. Das no gonna happen neva! OMFG This stupid loser kid who can't stand up for himself gets his ass handed to him by some drunk bastard screwing his mom. Right as he dies, he looks up at the scarecrow and he let's his spirit go into the scarecrow. The drunk guy covered up his death by making it seem suicidal and thought he had gotten away with it. We later see he is tossed out of the trailer and later earns another encounter with the scarecrow. They had a brief encounter which includes the drunk calling him a loser and the scarecrow rebounding with \"Takes one to know one, loser!\" The scarecrow flips off the building, calls him \"daddy-o\", and then beheads the poor man. We can see how this awesome movie unfolds from that. He goes on to kill many people, afterward. He mainly kills the people who gave him a hard time in rl and goes off to kill some random ass people, just for some laughs. No laughing here. He adds a punchline to every kill, too. Every time he killed someone, he would do some karate flips and finish it all off with one of his signature punchlines. In the case of someone who was hard of hearing, he would say \"Here, have an EAR of corn!\" then shove it up their ass. OR we can actually take an example from the movie! He just got done killing a cop and was on his way to killing the only person who ever stood up for him. Her father, the sheriff, yelled to the madman to stop, and he said \"Hey, stay awhile!\" and threw a dagger threw his chest and stuck him onto some tree. In the end of the movie, he killed two guys and threw in the punchline \"Gotta split!\" and killed two guys by shoving a scythe into their heads. Wowzors, this movie made me want to cream my pants so bad. Maybe next time this guy makes a movie, it won't be gay.", "y": 0}, {"x": "me and my sister saw the premiere last night... it was so good we were glued for the whole thing.. hahaha..i think I'm hooked for the season!!.... they have some really good actors in this thing.. the head coach guy and the player that likes pete were very good and the plot has already got me but i don't really understand how they'll keep it stretched for a whole season.. there will probably be some big twist tho..i cant wait till Tuesday.. finally Jeremy sumpter who is he? i can tell hes going to be big!! he was soo good we fell in love with his character right away.. cant wait for the next episode.. GO Jeremy!

'Aimee", "y": 1}, {"x": "This has to be creepiest, most twisted holiday film that I've ever clapped eyes on, and that's saying something. I know that the Mexican people have some odd ideas about religion, mixing up ancient Aztec beliefs with traditional Christian theology. But their Day of the Dead isn't half as scary as their take on Santa Claus.

So..Santa isn't some jolly, fat red-suited alcoholic(take a look at those rosy cheeks sometime!). Rather, he's a skinny sociopathic pedophile living in Heaven(or the heavens, whichever), with a bunch of kids who work harder than the one's in Kathy Lee Gifford's sweat shops. They sing oh-so-cute traditional songs of their homelands while wearing clothing so stereotypical that i was surprised there wasn't a little African-American boy in black face singing 'Mammy'. This Santa is a Peeping Tom pervert who watches and listens to everything that everybody does from his 'eye in the sky'. This is so he can tell who's been naughty or nice(with an emphasis on those who are naughty, I'd bet).

There's no Mrs. Claus, no elves(what does he need elves for when he's got child labor?) and the reindeer are mechanical wind-up toys! This floating freak show hovers on a cloud, presumably held up by its silver lining.

Santa's nemesis is...the Devil?! What is this, Santa our Lord and Savior? Weird. Anyhoo, Satan sends one of his minions, a mincing, prancing devil named Pitch, to try to screw up Christmas. Let me get this straight-the forces of purest evil are trying to ruin a completely commercial and greed driven holiday? Seems kind of redundant, doesn't it?

Pitch is totally ineffectual. He tries to talk some children into being bad, but doesn't have much luck. I was strongly struck by the storyline of the saintly little girl Lupe, who's family is very poor. All that she wants is a doll for Christmas, but he parents can't afford to buy her one(they spent all of their money on the cardboard that they built their house out of). So Pitch tries to encourage her to steal a doll. In reality, that's the only way that a girl that poor would ever get a doll, because being saintly and praying to God and holy Santa doesn't really work. But Lupe resists temptation and tells Pitch to get thee behind her, and so is rewarded by being given a doll so creepy looking that you just know that it's Chucky's sister.

Along the way Pitch manages to get Santa stuck in a tree(uh-huh) from whence he's rescued by Merlin! Merlin? You have got to be kidding me! Since when do mythical Druidic figures appear in Christmas tales, or have anything to do with a Christian religion? And doesn't God disapprove of magic? They'd have been burning Merlin at the stake a few hundred years ago, not asking him to come to the rescue of one of God's Aspects(or that's what I assume Santa must be, to be going up against Satan). This movie is one long HUH? from start to finish, and it'll make you wonder if that eggnog you drank wasn't spiked or something. Probably it was, since this movie is like one long giant DT.", "y": 0}, {"x": "**SPOILERS**KHAMOSH is totally unrealistic, lacks a plot, and was basically only made to see stars portray themselves. The most suspenseful scene in the movie was when Shabana Azmi is in the shower and then we see her TV playing the shower scene from PSYCHO. This movie actually expected users to believe that Naseeruddin Shah's character has a good enough memory to remember where certain shots were fired and how many!

***SPOILER BEGINS***

At the end, the killer spills his guts to Shabana Azmi long enough to allow Naseeruddin Shah's character to run up and shoot him!

***SPOILER ENDS***

It is a little humorous (only a little) in the beginning to hear the director and cast members throwing insults at each other and hearing Shabana Azmi exclaim, \"Oh sh-t!\"

Overall, a baaaaaaaaaaad movie!

Rating: ** out of ********** (2 out of 10)", "y": 0}, {"x": "The '60s is an occasionally entertaining film, most of this entertainment is from laughing at the film. It is extremely uneven, and includes many annoying elements. Take for instance the switch between black & white, and color. If done right, this could of been fairly effective, but because it was done poorly , it turned into a nuisance and only detracted from the already bad experience; much of the film had an odd feel to it. The acting wasn't extremely bad for a made for TV flick, but then again it was downright embarrassing at other times. Many of the events were not coherent, and ending up being confusing. How did this family somehow end up being at many of the big events during the 1960's? The ending was much too sappy for my tastes; because it was hollywoodized, everything had to turn out right in the end. I would advise you to not waste your time on The '60s and do something else with your time. I'm glad I watched this in class, and not on my own time. I think I can safely say that the best part of the movie was the inclusion of Bob Dylan's music. Those are just my rambling thoughts on the flick. I hope you take my advice, and stay away from this.", "y": 0}, {"x": "A question for all you girls out there : If a man you`ve never met before accidentally phoned you up on purpose and continued to do so at the most indiscreet moments would you be intrigued by him or so freaked out you`d phone the police ? Yeah that`s what I thought so I couldn`t swallow the idea of Marti Gerrard putting up with the unwarrented attention of Connor Hill

***** MILD SPOILERS *****

This is a really dumb story . Connor Hill`s wife is murdered and the plot revolves around the question is Connor phoning Marti so he can have an alibi ? But there`s a massive gap in logic here , couldn`t Connor have employed a hit man ? something the prosecution seem to have ignored . And wasn`t there any forensics at the murder scene ? So why does the whole trial rest on Connor phoning Marti at the time of the murder ? Dumb . Dumb . Dumb . And it`s as predictable as it is brainless .

My abiding memory of this film is that for someone who made the winter Olympics Marti Gerrard is a really crap downhill skier", "y": 0}, {"x": "The movie only enter the cinema in Indonesia this year (2007), two years after it's official release, and after many illegal DVD's had found its way to the public. Apparently the popularity of the illegal DVD's lead to the release into the theaters, with still public coming to watch.

The movie is a great epic, bringing Japanese culture into your house in an exiting way. In a sometimes humorist way, the story is told about a theater writer who writes a story for his theater, since the regular Kabuki theater plays is something he finds boring.

At first, the audience might be a little bit confused about which story we are following, but when the story unfolds, we see that the love between a male human and a female demon leads to a great story for a new Kabuki theater piece.

The audience is left in the dark if this is a story that is supposed to really have happened in Japanese traditions and mythology, but that doesn't matter.

The way the story is told with a love for theater, expression, vivid colors, humor and tragedy, makes this a great ride on the roller-coaster of Japanese cinema as well as theater.

Let yourself go completely when you watch this movie, try to see it in a cinema instead of on your television at home.

One critical point though: the soundtrack is sometimes a little bit annoying. Though most of it is great music, there are a few moments in the movie that I think they should have chosen some more dramatic music. But maybe the fact that the story contains moments of humor made the director choose for lighter moments in music as well.", "y": 1}, {"x": "\"Descent.\" Yeah. Boy... I haven't seen anything this powerful and scintillating since Bruno Dumont's, \"Twentynine Palms\" (2003). (By the way this film is not to be confused with another fairly recent pic about the topic of \"female empowerment,\" \"THE Descent\" (2005), directed by our Splat Pack friend, Neil Marshall, who also happens to be a major talent his own right.) But getting back to this \"Descent,\" the NC-17 rated (uh-oh) effort on which the lovely Ms. Dawson takes a producer's credit (congratulations) and directed by Talia Lugacy (strong chance that's not a real name), as good as it is (in moments), it will not be appreciated by most lay people out there because the script is pretty flawed. As a producer, you really have to tighten up that script. Of course, in the premise alone, you have the promise of rising conflict, but there still lies the task therein of accomplishing rising conflict.

At times, this thing plays like an interesting piece of experimental theater and, well, I guess I'll let the others who've already commented here speak to the boringness of it, namely that which occurs in the second act -but find me a second act that isn't boring? There's also this Catch 22 that goes along with these quasi-independent films like \"Descent\" in which Rosario happens to be attaching herself to and leveraging her \"fame-identity\" to get a script into production that would, under usual circumstances, not get made at all while at the same time she is basically a miscast in the film's leading role. Rosario Dawson is gorgeous and, apparently, you can shoot this girl from just about any angle all day long, but, oh, wow-wee, how fast the time just slips away: Rosy ain't no undergraduate no more. That's part of the confusion about the screenplay: \"Is she a graduate student? A TA? No, graduate students don't really have these type of qualms with football players, do they?\" Again, if you are Rosario Dawson, Executive Producer, that's the one of many, many aspects to the professional film process you'll have to think about as you embark on this wonderful new role in your film career. And if you don't have the answer to why you're movie isn't convincing, let me tell you: there is a boatload and a bevy of vivacious, well-qualified, undergraduate aged talents, pining to get involved in the business, who might have nailed that lead character down, all the while, looking just as darn good as you know who; but unfortunately without Ms. Dawson -no Honey, NO money. I have to say, the camera department did an outstanding job, however, because this film is really well shot (i.e. lit) in all its dreary/dreamy darkness. The nightclub scenes look wonderful; one can tell all those music videos are starting to pay off and the play with time... The shooting/framing is all quite excellent which makes the picture a rewarding watch.

\"Descent\" is good not great. However, I have a feeling, thanks to NetFlix, this movie will find a life of its own. I hope this group continues making films. If you're into experimental American film-making, cinematographic imagery of implausibly well formed college studs (or male model drop-outs) in their early twenties, or if you're an undergraduate, just plain angry at the hormonally aggressive young men that comprise less than half of your American university, \"Rosario Dawson's Descent\" might be your flavor of RockaRoll.", "y": 1}, {"x": "Alive

Alive is a very entertaining SCI-FI movie from Japan. I have noticed a lot of disappointed film geeks who loved Versus this director's debut film or his third film Azumi. I have heard they are blood drenched films with swords and zombies and all kinds of goodies. Frankly I went to the video store to get Versus but I am just fine with Alive.

If you are looking for beginning to end wall to wall action then Alive is not your pick. There is plenty of action however it comes as pay-off for a whole hour of character driven build-up. Personally I think it is well done and worth it.

Of course some of the plot is silly as with many SCI-Fi action films and I think the subtitles using the term foreign object could have replaced with parasite for greater effect. This film is brutal when it needs to be so faint of heart need not apply.

They kept the budget down by for the most part confining all the action to one underground building(taking a cue from the cube) but the film doesn't suffer for it. Another bonus for this film is intense gothic imagines that are done with great artistic flair during the many Flashbacks and dream sequences.

Rent this!", "y": 1}, {"x": "Stilted, stagy, strange and opaque, if visually striking ... a wannabe-erotic fantasy. Really boring, way too much male nudity (including father-son incest), and just a sort of shameless pointlessness. I will confess, however, that certain passages of dialogue, taken on their own terms, do have a lulling, haunting quality.", "y": 0}, {"x": "Yes, this film gets a lot of attention and is considered a classic in the adult film genre. Still, I did not like this one at all. About a woman who commits suicide in a scene more fitting a horror movie, she is given the opportunity to return to earth briefly to live the life of lust she never did before in her mundane life. Crappy sex scenes to follow. Why are they crappy, for one they try so hard to be artistic that they take away from the actual sex act. I mean we watch porn for the sex do we not. Little Girls Blue also does things in an artistic way, but it is still very erotic and nice to look at. Of course the girls in that one are very cute. Here we have a rather unattractive lead actress and that does not help things. If you find the lead in your adult film unappealing there is no amount of artistic vision that is going to make me enjoy the film. The sex scenes range from yuck to bizarre...I mean there is a snake in one of them people. So for me this movie just fails as it does not excite me at all, but rather turns me off.", "y": 0}, {"x": "What a muddled mess. I saw this with a friend a while ago and we both consider ourselves open-minded to the many wonders of cinema, but this sure isn't one of them.

While there very well could be some good ideas/concepts and there are certainly some good performances (under the circumstances), it is all buried under random nonsense. Sir Anthony draws way too heavily from the same gene pool as Natural Born Killers, U Turn and similar films as far as the editing is concerned, or maybe he watched himself in Nixon for inspiration. Say what you want about David Lynch, but at least he more often than not has a method to the madness.

His quote of stating that he made the film as a joke says it all. It's not worth your money, bandwidth or time.", "y": 0}, {"x": "This group of English pros are a pleasure to watch. The supporting cast could form a series of their own. It's a seen before love tiangle between the head of surgery, his wife, and a new pretty boy surgery resident. Only the superior acting skills of Francesca Annis, Michael Kitchen, and the sexy Robson Greene lift this from the trash category to a very enjoyable \"romp\". The only quibble is that it's hard to accept that the smoldering Francesca Annis would fall in love and actually marry Michael Kitchen, who like me, is hardly an international, or even a British sex symbol. You can readily understand why Robson Green would light her fire, with apologies to the \"Doors\". The guy who almost steals the show with a great \"laid back\" performance is Owen's father David Bradley. Watch him in \"The Way We Live Now\", in a completely different performance, to get an idea of his range. Daniela Nardini as Kitchen's secretary, sometime sex toy, is hard to forget as the spurned mistress who makes Kitchen sorry he ever looked at her great body. Conor Mullen, and Julian Rhind-Tutt, as Green's sidekick surgery buddies as I've said could have their own series. They are that good. The whole thing is a great deal of fun, and I heartily recommend it, and thank you imdbman for letting the paying customers have their say in this fascinating venue.", "y": 1}, {"x": "SPOILERS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

I watched half of this movie and I didn't like it.

First reason: Boring. Barely anything happens, the women sit around and discuss how terrible their lives are and how they have no hope, they smoke weed, read magazines, care for their sick friend, and cut up the occasional dead body. BORING!!!!

Second reason: There are too many things left unexplained. Many scenes are dedicated to a zombie hunter who kidnaps random men, restrains them in a chair and interrogates them. Who are these men? How do they know anything about illegal activity concerning the diseased flesh eaters? Why does he kill one and let another one go?

Also there is this dude who at first I thought also had the flesh eating disease but he puts his fist through a wall with superhuman strength suggesting he's not quite what we originally thought-never explained! How frustrating is that?

Conclusion: I found the women annoying, the story uninteresting, the duologue tedious, and the action non-existent. Also the cover art is misleading since it makes you believe this movie is going to be cool when it clearly isn't. I rented this movie based on some of the reviews made by other people on this website, and although I respect the fact that some people might have enjoyed this flick, I will from now on make sure I read more than two reviews deep into a movie so as to avoid renting another movie I regret seeing.", "y": 0}, {"x": "Having Just \"Welcomed Home\" my 23 YR old daughter from a year in Iraq, Camp Anaconda medical support unit, I felt compelled to get this DVD. I wanted to hear other returning vets feelings in order to attempt to better understand her mentality on arrival and not waiting until after something bad happened. Regardless on your take on the war and peace this movie serves as a great start for all Americans to begin the healing of our returning vets emotional void. The paramount statement of the entire movie is \"Take Action\" on the problem . Incredibly emotional movie. I would highly recommend this movie to the vet the vets entire mature family and ask that they follow through with a plan to listen comfort help the returning Gulf War Enduring Freedom vets.

Fast forward nearly one year later & My daughter has seen this DVD. Took account of her emotions and actually has made a commitment to re-up for another 6 years. Her take on her time spent in the sand is that she did some good. Local Balad children got first rate medical treatment for various common ailments not ordinarily able to afford free with an escort and translator. Her look over her shoulder at her Iraq tour was . \"We changed some hearts and minds back there\" Great DVD you have to keep an open mind and see all sides", "y": 1}, {"x": "I just didn't get this movie...Was it a musical? no..but there were choreographed songs and dancing in it...

Was it a serious drama....no the acting was not good enough for that.

Is Whoopi Goldberg a quality serious Actor..Definently not.

I had difficulty staying awake through this disjointed movie. The message on apartheid and the \"tribute\" to the students who died during a student uprosing is noted. But as entertainment this was very poor and as a documentary style movie it was worse.

See for yourself, but in fairness I hated it", "y": 0}, {"x": "A super, unusual film from Audiard, Read My Lips is a pulpy, lonely- hearts thriller. It's perfect for the handsomely grizzled charisma of Vincent Cassel and features a marvellously contained performance from Emanuelle Devos. Devos is a recurring feature of Audiard in the same way that KArin Viard pops up for Jean-Pierre Jeunet: unconventionally beautiful (she's referred to by everyone as unattractive in this film), versatile and capable of a subordinate profile.

This is almost the definition of her role as Carla, a put-upon office dogsbody, taunted by colleagues exploiting her deafness. Yet she finds an ami d'exploitation, if you like in Cassel's ex-con Paul. Each exploits the other's unconventional talents (theft and lip reading) to struggle through their respective situations and form an unconventionally romantic rapprochement. Devos/Audiard manage Carla's deafness and its attendant, warped inner world with discreet, stylish flair.

In this film (2001) Audiard is already clearly in control of his handling on tension, action and investing his frame with a truly visceral experience which will become the great hit - A Prophet - of nine years later. 7/10", "y": 1}, {"x": "Musings: Pure delight from beginning to end. Not a laugh riot, but a more subtle, sophisticated humor. What a goldmine of great scenes and character actors, including Reginald Denny, Nestor Paiva, Ian Wolfe, Harry Shannon and Jason Robards Sr..

Cary Grant is at the building sight of his new home, which is at that point, being framed. A young carpenter, played by future Tarzan Lex Barker, asks him if he wants his \"lallies to be rabbeted\", or some such thing that only a carpenter would know. Grant, not wanting to appear ignorant, replies in the affirmative. At that, Barker yells up to his mates, \"OK boys, he wants 'em rabbeted, so....YANK 'EM OUT!\" A second later you hear the ripping and tearing sounds of about 20 big nails being pulled out of various boards. All Grant can do is moan.

Yes, the movie IS dated. You'd never see that many carpenters working at once on a single family home, and a place like that, in Connecticut of all places, would probably run a few million bucks.

A classic movie that is really a treasure.", "y": 1}, {"x": "The only reason I elected to give this flick a shot was due to the presence of Oscar winner Ernest Borgnine. All I can say is, it was the greatest waste of a good actor ever put to film. As far as I could tell, Borgnine was the ONLY actor in it. The other performances were so uniformly terrible, I am amazed a studio would actually pay the \"performers\" to appear. Couple this level of talent in the acting department with a story so plodding and insipid that I thought my eyes were going to start bleeding by the time the credits rolled, and you have a perfect cinematic disaster. Obviously the movie was made to appeal to an audience of children, and to its credit, it was better than most of the original programing on the Disney Channel and similar kid-focused networks. But honestly, that is not saying much.", "y": 0}, {"x": "If the Lion King was a Disney version of Hamlet, then the Lion King 3: Hakuna Matata is a Disney version of Guildenstern and Rosencrantz are Dead. Just like Tom Stoppard's beguiling film, we get to view the action from the point of view of two of the minor characters from the original: Timon, the meerkat with a penchant for breaking into song at the drop of a hat, and Pumbaa, the warthog with flatulence issues. By following their story - rather than Simba's - we get to see why all the animals bowed down as Simba was presented from Pride Rock. We find out what made Timon and Pumbaa decide to follow Simba back to Pride Rock to oust Scar. And we find out how they dealt with the hyena's once and for all. Nathan Lane as Timon gets most of the best jokes, but he is ably supported by Ernie Sabella as Pumbaa. It is also good to hear Matthew Broderick and Whoopi Goldberg reprising their roles. Julie Kavner and Jerry Stiller lend their distinctive voices to two new characters: Timon's mother and uncle. The only downside is the constant stop-start-rewind-fast-forward device which doesn't always help to progress the story. Having said that, there is a brilliant zoom near the beginning of the movie. With more laughs than any other third-in-a-Disney-series movie, Hakuna Matata is worth watching - if only for the hot tub scene which is still funny despite being a little bit predictable.", "y": 1}, {"x": "Yet another venture into the realm of the teen-gross-out-comedy, set on a college campus featuring a nerd's quest to coolness, and how he decides to blackmail a trio of popular jocks into making him get the girl. It's all been done before, and it's all been done in a far more satisfying manner. The gross-out humor that has made teen flicks like \"American Pie\" and \"Dude! Where's my Car\" so popular is taken completely out of context in this installment, appearing so completely at random that the viewer can only frown and disapprove. The film is badly written, and the actors never succeed in making any of it even slightly bearable. I won't even dignify this terrible picture by divulging, as it's a waste of my time and yours. At best, Slackers never manages to entertain or induce laughter, and at worst it is excruciatingly bad and at times completely unwatchable.

Jason Schwarzman, who impressed in his debut Rushmore, humiliates himself by appearing in this picture and one wonders how a career can end up in the toilet so fast. Please avoid, please avoid. Save your money.", "y": 0}, {"x": "Firstly, I have heard great things about this film, not least among the retro/vintage scene and the stockings lovers who absolutely love Bettie Page and it did not disappoint. Shot in very clean black and white with colour added for key scenes, the film gives a documentary feel to the early life and career of Bettie Page.

There are many things I did not know about Page. Firstly, there was the gang rape, later on, there is her early attempts at developing an acting career and then glamour pictures, firstly with a camera club peopled with men who can't get enough of her and later with the Klaws, Paula and Irving, who despite their taking of bondage and fetish photos, come across as extremely pleasant and friendly people. If only modern pornography producers were like that, perhaps better porn would be a consequence! For the most part, the film is neither a diatribe against the evils of pornography but an attempt to show the kind of environment that existed in the 1950s for those producing fetish and nude pictures of women. This environment was extremely repressive, perhaps in a good way because it meant that there was none of the 'saturation' effect that we have today, when it comes to pornography. It also appeared to be much less harsh. Page comes across as someone who enjoys her work and doesn't appear to be degraded by it. In many of her photos she is seen tied up and gagged (and trying to hold a conversation), brandishing a whip with a flourish, thus exciting the photographers taking her pictures and seen in 'initiation style' girlie bondage movies which look quite tame compared with the hardcore stuff we have now.

Page never became an actress and instead deserted pinup when she was in her thirties for 'Jesus Christ'. Her belief in God and Jesus never goes away, even when bound and gagged she still insists that she has been given a 'gift' by God to do 'this thing'. Seeing this film, I am more knowledgeable about Page and in awe at her modesty, beliefs and demeanour. She is one of a kind, compared with the identi-kit clone blondes we have today and someone who can actually say 'There is life after porn'.", "y": 1}, {"x": "this film is absolutely hilarious. basically, the plot revolves around a serial killer being somehow turned into a snowman through some B-movie chemical accident. he then heads for town and starts terrorising the locals. its up to the local police chief and some other characters to try and stop him. its made on a wee budget and it certainly shows, but the great thing about this film is it knows that its rubbish. the improvisations of Styrofoam and polystyrene mimicking the giant killer snowman are classic, and this is clearly the intention - its one of the few films that has its budget as its main selling point. alongside the comic tackiness there are some other great comedy moments - listen out right in the beginning for the voice over of a dad scaring his kids to death, and the funniest rape scene ever committed to film. fantastic tacky fun", "y": 1}, {"x": "This early film has its flaws-- a predictable plot and some overlong scenes of dubious relevance-- but it already clearly demonstrates Hitchcock's mastery of editing and the use of powerful images. It's also among the most expressionist of his films stylistically; note, for examples, the weird distortions he uses during the party sequence and the frequent echoes of both title and plot in the imagery.

Its core, though, remains the final match, which is still among the more exciting examples of cinematic boxing. Even though you know that the hero has to win, it becomes quite believable that he will lose, and the movement of his wife from the champion's corner to his, motivating the final plot pay-off, is very well entwined with the progress of the match. The inserts of the stopwatch do exactly what they should; you can almost hear the ticking (even though this is a silent film, the visuals often have a surprisingly auditory feel to them). The pacing becomes astonishingly rapid, and the viewer gets sucked into the excitement and brutality of both the match and the sexual jealousy which underlies it.

The only DVD release with which I am familiar is that of Laserlight, a public domain company. As with each Hitchcock silent they've released, they've attached various musical selections, mostly orchestral, to the action. The sound editing is frequently sloppy, and the sound quality varies widely, but some genuine care seems to have gone into most of the actual choices, and the music accompanying the final match works extremely well; it is unlikely that this sequence will ever be better accompanied than it is here.

This is a much more impressive film than its present obscurity would suggest. It deserves an honorable place in both the Hitchcock canon and the slender list of worthwhile boxing films.", "y": 1}, {"x": "This could be looked at in many different ways. This movie sucks, its good or its just plain weird. The third one probably explains this movie best. It has strange themes and just has a strange plot. So who else but Christopher Walken would play in this no matter how bad, average or even how good it might be.

The acting was what you would expect especially out of Ben Stiller. Jack Black I have always liked so you know what you will get out of him but this is not bad. Christopher Walken is always off the wall. He is always enjoyable to watch no matter how bad the movie is. Comedy wise it is somewhat funny. This of course meaning that it does have its moments (though very few) but can get a little over top here and there which makes me feel like the movie is just desperate for laughs but of course not in a good way.

The directing was average as well. Barry Levinson is a slightly overrated director and really did not do a good job here. This movie seemed that it had a lot more potential and he did not do much to reach it. Just very average and did not seem like a lot of effort was put into making this film.

The writing is the key to a good comedy. Obviously that means the writing here failed. At best it is below average. Considering it does have its moments it was not too horrible. That is never a good thing to say about a movie though.

If not for Christopher Walken and it stupid ridiculous ending I would have given it a lower rating. He is always quite a character in his movies. Stil this is just a whacked out strange movie with strange characters that really don't go anywhere. Not completely horrible but I would not really recommend it though because it is a very forgettable movie.", "y": 0}, {"x": "Pathetic is the word. Bad acting, pathetic script, cheezy dialog and hip hop music & fashion...what the hell was up with that? The directer of this movie acts as bad as the movie he made. If someone would have taken some time and effort to rework the whole thing, it may of had a chance. Bet the studios are still trying figure out how they could screw up up so badly.

The absolute best thing about this movie was Stacey Dash...the Asian chick wasn't too bad neither. These too gals carried the whole movie. If it weren't for them I would have destroyed my copy of this movie.

If any of those who have not seen this yet and had a notion to, don't waste your time...you'll only regret it later.", "y": 0}, {"x": "I'm not sure if this is some kind of masterpiece or just sleazy fluff elevated by the performances and visuals. Whatever the case, I'm sure I loved it. From the wonderfully twisted, lurid, intertwining stories, to the deliciously sinister performances from Robert Stack and Dorothy Malone, to the vivid, gaudy colour with which it's all captured, this is high-class trash and it's great fun. Not to mention the amusingly sly and thinly veiled sexual subtexts which permeate the entire film, always threatening to escape from the image into the dialogue but never doing so. I'd be lying if I said that the film's sheer entertainment value didn't contribute to my love for it, but there's some sort of bizarre artistry behind the unintentional (or was it?) comedy and I really, really dug that. I could really get into this melodrama stuff.", "y": 1}, {"x": "I found this movie really funny because you have a youthful black comedian (Chris Rock) who dies and is sent back to earth in a mid-50's white mans body. He doesn't realize that his behavior should change and continues to act as he had before. He listens to rap music, sings along, and plays the stereotypical part of an urban black man. The real humor in this movie was watching the trouble that this behavior gets him into with the black community.", "y": 1}, {"x": "There isn't one decent scene.

Amy Adams gives one of the worst performances of all time. Proof that you a can start anywhere. The guy playing Sebastian sucks, too. He doesn't even look much like Ryan Phillipe. More like Joshua Jackson. The two other girls are terrible, as well.

Then the dialogue is also crap.

Sebastian (About to have threesome): If you cant beat them...

Virgin Girl: Who says you can't beat 'em?

Lame.

The ending contradicts the entire plot of the original. In the first film, it is clearly stated that Kathryn and Sebastian never had sex. One of the reasons Sebastian wanted Kathryn so bad, aside from the fact that she's played by Sarah Michelle Gellar, was that she was \"the only girl he couldn't have and it killed him\". She was a tease who liked playing with him. The fact that she never gave it to him increased his wanting. Then in this P.O.S., it implies that he CAN have her, along with a girl on the side. What? And we don't even see the sex, either. It's implied, making it not only stupid, pointless, and contradictory, but worthless too.

And in the first one, Kathryn rejects Sebastian because he fell in love, making him a loser. Even though he won the bet, that crumbled his chances. Then in this excrement, he looses AND falls in love. So she doesn't screw \"losers\", only complete losers? Another thing: it's stated that Sebastian has never been in love, so what do you call the thing with Virgin Girl?

Then at the end, virgin girl is all of sudden revealed to be Kathryn's evil lesbian lover (dun dun dun) and, like I said, they go into a lame offscreen threesome. Stupid.

There's several other plot contradictions. Did the writer even see the first film? A 5 year old can point his stuff out.

After the threesome, Sebastian has sex with the blonde virgin, corrupting her innocent mind in the back of a limo while Kathryn and Virgin Girl Turned Evil Lesbian In Lame Sudden Plot Twist sit in the front, listen, and smile evilly into the camera.

The end...

Seeing Sebastian become the ass hole he was in the first one could have made an interesting film. I guess all it took to make little Sebastian bad was a threesome with two hot girls. Interesting.", "y": 0}, {"x": "Old movie buffs will know why I'd call this one \"The Man in the Grey Flannel Robe.\" Most Bible-based movies are basically schlock- what might call forth smiles and giggles here is how Peck, tries to raise consciousness on a variety of psychological and social issues with the spear carrying Neanderthals all about him. As a Great Romance, it falls flat as unleavened bread. But there is something gripping about this movie. Of all the big Hollywood Bible pictures it most strikingly conveys the ambivalent attitude of the Average American towards belief in the Biblical God. Billy Sunday's thesis is duking it out with H.L. Mencken's antithesis all through the script. Who gets the better of it in the Heavenly Chorus-backed synthesis depends on your point of view. Other than that, D & B boasts a good performances by Peck ( especially in the closing repentance scene) and by Jayne Meadows as his bitter first wife Michol, vivid, moody atmosphere (good idea to set most action at dawn or night), and the rousing rendition of the Twenty-Third Psalm at the end.", "y": 1}, {"x": "Would have better strengthened considerably by making it as a

50 minute episode of the Outer Limits. Too much superfluous material and stuff like the chief bad guy looking like he'd escaped from The Phantom of the Opera didn't help. The whole 'Night of the Living Dead' sequence was extremely silly and quite unnecessary. After all, if the dead were to punish anyone for their sins, now remind me exactly who was killing everyone again?", "y": 0}, {"x": "How did Mike Hammer live - in a penthouse with a GOLF BAG stashed in the corner next to a big screen cathode ray tube TV and a snazzy fireplace? Nah, he'd knock back a bottle of rye and twenty unfiltered Camels on the couch or floor of his fly-specked office or in the stink of a lousy downtown LA flop house, wiping the dried red crust and oil smeared mud off his face, that's how. Spillane wrote trash paperbacks, for sure, but how do you make it worse? Give some desperate scheming producer a blank check because he thinks any Film Noir titled crap will sell at the box office, add some over-the-hill hot tomatoes and just generally screw-up the story-line by some retard, drugged out screen writer, that's how!", "y": 0}, {"x": "Winchester '73 is a great story, and that's what I like about it. It's not your everyday western--it uses a rifle, which passes hands from various characters--as a mechanism for telling the story about these people. Rock Hudson plays an indian chief, Jimmy Stewart plays a great leading man with heart and strength, and Shelly Winters plays a gal who has to cope with the realities of her husband and the wild west. It's important to note for those politically correct types--they kill a lot of indians in this movie without remorse. By today's standards, it's still pretty violent. But it's a great story and worth watching. Enjoy!", "y": 1}, {"x": "Based on Elmore Leonard, this is a violent and intelligent action film. The story: a business man is blackmailed by some 3 criminals. Roy Schieder does great job as the leading character and special credit's got to go to John Glover who plays sort of a naughty psychopath. I must mention that the villains characters are very complex and interesting - something that is very rare for an action film. also features some beautiful and sexy women - most notable are Kelly Preston as the young bate for Schieder's character. Vanity gives a very good performance and appearance as the hooker who is connected with the three blackmailers. I'm glad to say that Ann-Margaret still hasn't lost it - this lady is a true babe. Don't look at the rate of this film. I really don't know what the public and some critics have against this film but my suggestion is to ignore them and watch this truly gripping and under-rated film. You will enjoy it, that's a promise. Recommended A+.", "y": 1}, {"x": "Whether this movie is propaganda or not (I firmly believe it is not), it really shows the power of Media. The importance of this documentary is not to show how good of a man Chavez is. It is really to demonstrate the way the Bolivarians saw how it happened, the Chavez way of seeing it. Although it may seem wrong and bias to support a film , I think the point of view shown in the movie is utterly legitimate. The Venezuelian people via the private media corporation of Venezuela only saw a one side perspective of the coup, the Neo-Liberal side. This movie shows us the way the Bolivarians saw it . Call it propaganda , I say it's a judgment call on your part.", "y": 1}, {"x": "Like many people here, I started out finding my patience being tried by this film. By the end, I actually shed a few tears.

It seems to be in the nature of most old films to drag for 7/8th length and then catch fire right at the end. Older film-goers learned to bide their time patiently through the slow parts, calm in the knowledge that the big payoff is on the way. But that isn't quite accurate. You see, to earlier audiences, what are to us the \"slow parts\" were the main body of the story. They watched and found anecdotal and thematic interest there. Modern audiences, post-Spielberg, are in a constant state of waiting to be hit with a small climax every two minutes when they see older films. It's the inflation problem of modern movies. Well, that isn't going to happen. It is not necessary to apologize for these films; it is simply that you have to adjust your expectations and personal rhythm when you watch them. At this point, the difference between Avatar and The Informer is like the difference between Euripides and a traveling production of Rent. Think about it for a minute or two. Not to strain at the obvious, but Euripides still deserves a hearing.

The \"exciting part\", for most modern viewers, begins with the IRA tribunal scene and escalates to the final couple of minutes, which, if you are at all on board or even paying attention by that time, will tear your heart out. It's not some high-tone universal abstract plea for forgiveness; it's a plea from one dimwit, and those who feel sorry for the big lummox, for a little mercy. It's that personal, and that embarrassingly naked an appeal. For after being mad at Gypo, irritated at him, thinking this is the dumbest character of all time, you finally find yourself won over by the scene of Gypo's erstwhile girlfriend pleading to another woman to talk her man into going easy him.

The film may be sentimental, but the sentimentality is not cheap as some here have charged. There's a matter of life and death that plays out here, and as long as you take the proposition of one life to a customer seriously, it's sentimentality wrung out of the most serious stuff.

8 of 10. And the fault for it not being 10 of 10 is my own and in some measure yours, if you are reading this. We have all asked for more, ever more, faster, ever faster until we cannot put ourselves in 1935 -- just yesterday, really -- as easily as we should be able.", "y": 1}, {"x": "I thought that The sentinel was going to be a mediocre movie.When I finally saw it,I took a good surprise.The movie isn't great thing but it's very fun and the action scenes are very well done.This movie reminded me TV series like 24 or Alias.It's very similar to that series and it reminded me too,to the Wolfgang Petersen's thriller In the line of fire.If you're going to expect one of the most original and and one of the greatest thrillers in the history of movies,you will be disappointed.But if you go with little expectations,you will enjoy The sentinel.

Rating:7", "y": 1}, {"x": "I was honestly surprised by Alone in the Dark. It was so bad, I could hardly believe what I was seeing. There are no characters, just a few stereotypes wandering around and getting killed. The extent of the character development was giving each character a name and an occupation, and that's about it. There was no real plot, and none of the characters seemed to have any motivation. In fact, many action scenes just began on their own, coming from nowhere with a pounding techno track. While I was watching this movie I kept asking \"Where is this happening? What's going on?\" The acting was high school drama quality, with stiff wooden delivery, as though the actors were reading from cue cards without comprehending their lines. Their trouble delivering lines was made even more obvious by horrible sound design. ADR sounded like it was recorded in an open room. The actors were constantly taking obvious care to hit their marks, looking almost robotic in their movements. So, these listless automatons are whisked through a series of implausible and confusing scenarios, often without even the benefit of transition scenes. They were here, now they're there. This was happening, now that's happening. Random scenes with little rhyme or reason. I had a lot of fun watching it. Definitely not worth nine bucks though.", "y": 0}, {"x": "Perhaps the last film you would expect to come from Vittorio de Sica and Cesare Zavattini (who wrote the novel on which this film is based). It's a neorealist fantasy, kind of an oxymoron, really. An old woman finds a baby in her cabbage patch and raises him as her own son. After a few years, the baby is a young boy (named Toto) and the adoptive mother is dying. He goes to an orphanage and, when he finally turns 18, he leaves. Immediately, he finds that he has no home. Toto is optimistic, though, and won't let anything get him down. A man steals his valise, and instead of getting angry over it, Toto becomes his friend and goes and stays with him in a small shantytown. Toto takes some initiative and organizes the many homeless living in the area and they build a better shantytown. Soon, the landowner is trying to sell this plot of land, and the citizens of the shantytown have to protect themselves. After many attempts, the owner mounts a force of police to get rid of the homeless. At this point, the film becomes full-fledged fantasy (before this it was more comedic/fantastic melodrama in the style of Charlie Chaplin). This stuff is so weird and shocking that it's probably best for others to see it for themselves. It's quite amazing, and very funny. There are objections you could raise about the plot of Miracle in Milan, most certainly. Fellini and Visconti were greatly criticized when they started to stray from Neorealism. I think I read this was widely criticized at the time of its release. At this point, though, it's so enjoyable - I loved it very much. It might be my favorite of Vittorio de Sica's films, although Umberto D and The Bicycle Thieves come very, very close. 10/10.", "y": 1}, {"x": "This, despite not being the original - it began life as a play in Central Europe - has weathered the several incarnations that followed (MGM's own remake with period songs In The Good Old Summertime, the Broadway show She Loves Me, even the excellent theatre revival in Paris a couple of years ago) and remains the definitive version and the one they all have to beat. Several previous commenters have identified the contributing factors that make it so successful and memorable not least being the prevailing fashion in 30s and 40s Hollywood for lavishing attention and detail on ensemble playing rather than just two leads as so often happens today - try, for example, removing Ugarte, Ferrari, Renault etc from Casablanca and yes you'd still have Rick and Ilsa and Viktor Lazslo but they'd just be frosting without the rich cake mixture below. Jimmy Stewart and Maggie Sullavan WERE both ideal and irreplaceable leads but how much brighter they shine when their performances are reflected in those of Frank Morgan, Felix Bressart, Joseph Schildkraut and Andy Hardy's Sara Haden and this is BEFORE we factor in that Lubitsch 'touch'. Okay, maybe they WERE a tad more naive, innocent even, in that Jurassic Age but how many genuine film lovers, sated with scatology, screwing and in-your-face sex, turn back to those days of Stories, Style, Slickness and Skill and wallow in great movies like this one. By far the best thing about this technological age is not CSI but DVD that can at one and the same time make these classics available to nostalgics and show the Matrix freaks how the big boys used to do it.", "y": 1}, {"x": "First off; I'm a dedicated fan of Modesty's, and have been reading the comics since I was a child, and I have found the earlier movies about our heroine unsatisfying, but where they fail, this one ROCKS!

Well then, here we go: Ms Blaise is working for a casino, a gang of robbers comes along and she starts gambling for her friends lives. If the robber wins one round, she'll have to tell him about herself. If she wins two times in a row, one of the staff members goes free. (Sounds stupid, yeah, well, I'm not that good at explaining either..) ;)

She tells him about growing up in a war zone, without parents or friends, about her helping an old man in the refugee camp and how they escape, living by nature's own rules. They hunt for food, and he teaches her to read and fight. As they approach civilization they get caught up in a war, and as they are taken for rebellions, they are being shot at and the old man dies, which leaves her to meet the city by herself.

Then she meets the man who's casino she's now working for, and there the story ends.

What is to follow is that there's an awesome fight and the line's are totally cool. Alexandra Staden is a TERRIFIC Modesty Blaise! Just as modest and strong, graceful and intellectual as the comic-one.

Feels awkward though, too hear Modesty speak with a slightly broken accent, but that's not relevant since the comic book- blaise can't speak out loud, but certainly must have a somewhat existing accent. (Not to mention that it's weird everybody's speaking English in the Balkan..)

The acting is really good, even the child who personifies the young Blaise must have a applaud!

My favorite part must be where she rips up her dress to kick the stupid robber's ass! Totally awesome! :D I can't wait until the real adventure begins in the next movie/s!

Watch it, you won't be disappointed!", "y": 1}, {"x": "A dreary, hopelessly predictable film set in a most unpleasant setting (lower Coachella Valley). Acting is as amateurish as any I've seen. Looks like a screenwriting 101 script. However, it does function as a great sedative.", "y": 0}, {"x": "The only remarkable fact is the participation of Klaus Kinski who plays a priest. Don't ask me why he does it! A bad, bad movie overall.

", "y": 0}, {"x": "This inferior sequel based by the characters created by David Selzer and Harvey Bernhard(also producer) concern on a matrimony named Gene(Michael Woods) and Karen York(Faye Grant). They adopt a little girl named Delia from a convent. Gene York about re-elect for congressman and he presides the financing committee. Meanwhile, Delia seems to be around when inexplicable deaths happen. She creates wreak havoc when goes a metaphysical fair, as stores of numerology, therapy, counselling heal,yoga, tarots, among others are destroyed. Karen York hires an eye private(Michael Lerner) to investigate the weird and bizarre events.

This TV sequel displays thrills, chills, creepy events and gory killing. Delia such as Damien seems to dispatch new eerie murder every few minutes of film, happening horrible killings . The chief excitement lies in watching what new and innocent victim can be made by the middling special effects. Furthermore, mediocre protagonists, Faye Grant and Michael Woods, however nice cast secondary, such as Michael Lerner,Madison Mason, Duncan Fraser and the recently deceased Don S Davis, he was an Army captain turned into acting. As always , excellent musical score taken from Omen I and III by the great Jerry Goldsmith. The movie is exclusively for hardcore followers Omen saga. The motion picture is badly directed by Jorge Montesi and Dominique Othenin Girard. Previous and much better versions are the following : The immensely superior original 'Omen'(Gregory Peck, Lee Remick)by Richard Donner; 'Damien'(William Holden, Lee Grant) by Don Taylor; 'Final conflict'(Sam Neil and Tisa Harrow) by Grahame Baker. Rating : Below average.", "y": 0}, {"x": "The mere fact that I still think of the movie a decade later is what really speaks volumes about the film. To me this substantiates Grand Canyon as a film that will touch you in one way or another. I truly believe that before the movie Crash there was Grand Canyon. The major difference between the two films in my opinion is the timing of their release. I'm not going to argue which one is better, but I will contend to the idea that they share the same message. I'd love to hear from those that have an opinion on this subject. I will start a commentary which you can find at http://www.myspace.com/62229249. You may also find me there to post any other topics about movies that we may share, because i have a true love for film.", "y": 1}, {"x": "A very strange and compelling movie. It's about a very awkward and tightly wound man who attempts to navigate his life as a door-to-door fundraiser/salesman. The director was able to capture a very unnerving tone that really served the story well. Original and unsettling while also finding a great deal of humor in the pain that accompanies life. There is a sequence at a testing facility that really stood out and made me laugh out loud which is not something I do as frequently as I should. One of the more memorable films I've seen in a long while. Hasn't left my mind and I look forward to future efforts by Bronstein. Fantastic performances all around. The simple line \"I really appreciate it.\" is now iconic to me.", "y": 1}, {"x": "Celia Johnson is good as the Nurse. Michael Hordern is good as Capulet, though it's his usual neighing and whinnying and not a patch on his King Lear. John O'Conor reads the verse well as Friar Laurence though he never takes it anywhere. Alan Rickman is good as Tybalt, in the first of his \"yuk\" roles that would make him famous. Christopher Strauli's Benvolio is sympathetic.

The sets are pretty, if not stunning as in some of the other BBC Shakespeare's.

And that's it. The rest is weak to dreadful. Rebecca Saire turned 15 during production, and hasn't a clue about how to act Juliet - she opens her eyes real wide and whines every line in exactly the same way. Patrick Ryecart is poorly matched to her, and his self-regard is inexplicable. The Balcony Scene flows smoothly and uneventfully with zero emotional or erotic impact. Their deaths come as a relief. If I had a dagger, I would have offered it to them hours earlier.

Anthony Andrews is unspeakable as Mercutio, a great shock if you remember his fine work in \"Brideshead Revisited.\" He breaks the mirror of Shakespeare's verse into a thousand shards of two or three words each, and then shouts the fragments in as disconnected and unintelligible manner as possible. In this production, Queen Mab abdicates. Awful.

The director, Alvin Rakoff, shows only an intermittent gift of putting the camera where it will show us what we want to see. The opening brawl is notably incoherent. However there is humor when in a later fight, Romeo apparently knees Tybalt right in the cobblers. Tybalt then grabs the offended region. However did that get through?

R&J is a long play. This version is not recommended for classroom use, or much else.", "y": 0}, {"x": "'The Mother' is that extraordinary piece of film making - it gets you thinking, it pulls no punches - and ultimately it leaves you thinking. Very much open-ended as to the lead character's fate. Anne Reid (which I only knew briefly from her appearances in some Victoria Wood-led projects and thought a fine comedienne) is truly superb here. Not the stereotypical widowed housewife that was perfect in marriage and motherhood at all. And not all that free-spirited and adventurous at first. She plays her character just with the right note that rings true (well, it did to me). Powerful cast. Great script. Renaissance of European cinema indeed ;)", "y": 1}, {"x": "One of the most unheralded great works of animation. Though it makes the most sophisticated use of the \"cut-out\" method of animation (a la \"South Park\"), the real talent behind \"Twice Upon a Time\" are the vocal characterizations, with Lorenzo Music's (Carlton from TV's \"Rhoda\") Woody Allen-ish Ralph-the-all-purpose-Animal being the centerpiece. The \"accidental nightmare\" sequence is doubtless one of the best pieces of animation ever filmed.", "y": 1}, {"x": "I read so many comments that I, too, shared about remembering this movie and wanting so badly to see it again but I didn't know the name of the movie. Thankfully, because of doing a search and finding the title on this site, I read the comments left here and realized that this was the movie I remembered. I then did a search and did find the movie and was so thrilled to be able to watch the movie once more 40 years later. Because of this site and your comments, you helped me and so I want to thank all of you. I want to share how I was able to find this movie for all of you who were looking for a copy as well. It was on the VHS version of Wonderful World of Disney's \"Call it Courage\" which contained 2 movies, the second one being \"The Legend of the Boy and the Eagle.\" It touched me now as much as it did 40 years ago and now I own my own copy of it. I think it is only available on VHS. I found it on ebay and I have seen several copies of it there. Enjoy it, I know I did!

It is a wonderful story about the love of a boy and the eagle he took care of. When it was time to sacrifice the eagle, the boy set the eagle free because he couldn't allow it to be killed. After the boy was forced to leave the tribe for punishment after freeing the eagle, the eagle, too, saved the boy's life and more than that, taught him how to survive. The closeness that the boy and the eagle shared in the wilderness was so moving and the filming was really remarkable. What a wonderful era this was. I have never seen anything come even close to this movie!", "y": 1}, {"x": "This film was so disappointing. From the blurb that made me decide to see Phantom Love (why is it called this?)I had expected something arty and thoughtful with beautiful imagery. It did have some interesting images but these often seemed random and made no sense. In fact they seemed like they were inserted to fill in time. In the end the effect was listless.

I believe the film was meant to be atmospheric, but it just wasn't. The lack of a coherent plot did not help matters. You might say it was mysterious, but I think it was just incoherent with no atmosphere.

The main character seemed to be disturbed but the plot did not draw me in enough to care about her situation. Without looking at the cast list I would not have known that you see the main character as a child. The film has very little context for the time, place or character. I am not a prude but the sex scenes (there were several) seemed pointless and confused me further, I recognised Lulu but I was not sure if it was the same man, different men, a lover, her husband or was she a prostitute. It was only when I saw the credits that I discovered the hairy back was meant to belong to her lover. This film did manage to make what should have been shocking (dream sequences involving Lulu's mother) seem a bit boring.

The nail filing actually made more sense, as it did give some indication of Lulu's emotional state. I will not fault the actors as I don't they had a lot to work on.

I do not know if the lack of context or flow in the film was because of ineptitude or because it was pretentious but the end result was dull.

I can't be bothered talking about it anymore.", "y": 0}, {"x": "I see quite a few positive reviews on this board, trying to revive this film from its lackluster status and starting a cult following. I see the usual ranting--\"I guess this movie is just not for the easily offended,\" \"This movie is not Shakespeare,\" etc. Guess what? Neither was \"Road Trip\"! And I laughed my a** off during that movie! There's a way to make a crude, tasteless comedy and deliver laughs; and there's a way to...just make it crude and tasteless. \"Whipped\" tries to be \"Swingers\" without the wit or intelligence. It seems to have been written through the puerile eyes of a 14-year-old boy. For God's sake, the characters in this movie are supposed to be white-collar, upright citizens--and they talk like some of the idiots I knew in freshman year of high school! The dialogue is laced--more like drowned--with four-letter words. You would think that people of their status would have SOME degree of intelligence--and a more extensive vocabulary. Just watch a Whit Stillman film and you'll see the difference. Not to mention the fact that the dialogue sounds totally unrealistic and downright cartoonish. If you know any successful, white-collar businessmen who speak like the characters in this movie--please let me know and introduce me to them. Their annoying sexual banter is equivalent to that of standard locker room chat among teens just arriving at puberty. There is absolutely NO insight into relationships, sex or...anything!!! It's just a poor excuse to showcase an array of extremely--and don't take the word \"extremely\" for granted, because I mean it with all my heart--crude gags. These are gags with no substance. Gags that are meant more for groans than laughs. The scene at the end between Amanda Peet and her girlfriends was totally un-called for and totally unconvincing. There are some movies that involve interaction among females that were written by (straight) men and play out wonderfully. This scene involves a barrage of sexual metaphors and gestures. It involves the kind of dialogue you can never imagine leaving a woman's mouth. It was one of those noticeably-written-by-a-guy scenes. I wasn't believing it for a second.

\"Whipped\" is purely a sick male fantasy that's as flat as it is annoying. I got (very) few laughs out of this utterly forgettable comedy, and those were probably a result of desperation. When you're not laughing for a long period of time, you desperately look for humor in the most trivial things. So I wouldn't mark that down as a positive.", "y": 0}, {"x": "DO NOT WATCH THIS SAD EXCUSE FOR A FILM. I have wasted time and money on this and am pretty p**sed off about it.

The acting is comparable with high school plays. The script is shocking. There is no plot. Twenty minutes from the end (which I believe I should be rewarded for reaching) I had a headache from all the screaming, crying and wailing the five girls make.

The majority of the violence is (rare for a film nowadays) suggested rather than graphically depicted but I found the characters so damn irritating that I wanted to see them, and indeed every single person involved in the making of this piece of s**t, die in the most horrible ways possible.

I spend ten more minutes of my life saving you from a very poor 100 minutes of yours. Don't do it.", "y": 0}, {"x": "When this play was first shown by the BBC over 30 years ago, it would have been something quite different for the time. So therefor some people would have found it quite scary, and may well have been impressed with the special effects?

Looking at the play in this day and age, It doesn't seem to be all that scary anymore, even the special effects can leave a lot to be desired.

Would a train really be allowed to pass a RED LIGHT into a dark tunnel? I don't think so......but if you watch this play again, you will observe that the first train that enters the tunnel, rushes straight through the RED LIGHT! (maybe that's how it was in dickens time)?

You will also notice that the footpath that leads down to the Signal Box is very steep and in a poor state. Surely there would have been a series of proper steps with handrails for the Signalman to climb up or down into the cutting. (i can't help but notice things like that)

I will not take anything away from the acting, both Denholm Elliott (signalman) and Bernard Lloyd (the traveller) gave wonderful performances.

I am not at all sure what is going on......I mean was the ghost the traveller, or what??? Does anyone really fully understand this rather confusing story??? (well maybe i am the only one that don't)???

To sum up.....

The play has a wonderful atmosphere throughout, with great character. It suffers from not being that scary these days, and a little if not very confusing in places, and has some rather unusual signalling practises....

Thanks for reading my review.", "y": 0}, {"x": "It's very sad that Lucian Pintilie does not stop making movies. They get worse every time. Niki and Flo (2003) is a depressing stab at the camera. It's unfortunate that from the many movies that are made yearly in Romania , the worst of them get to be sent abroad ( e.g. Chicago International Film Festival). This movie without a plot , acting or script is a waste of time and money. Score: 0.02 out of 10.", "y": 0}, {"x": "Yes, The Southern Star features a pretty forgettable title tune sung by that heavy set crooner Matt Monro. It pretty much establishes the tone for this bloated and rather dull feature, stunningly miscast with George Segal and Ursula Andress as an adventurous couple in search of a large diamond. Add in Harry Andrews (with a strange accent, no less) chasing an ostrich, tons of stock footage of wildlife, and poorly composed and dull photography by Raoul Coutard, and you end up with a thoroughly unexciting romp through the jungles of Senegal.", "y": 0}, {"x": "How low can someone sink while trying to recapture an old glory? ST:HF will be glad to show you.

If you are used to seeing what made for a good Star Trek show, do NOT watch this.

The writing is hodge-podge, the actors' portrayals of their characters weak, and most of all, the design work is downright doggy.

Like watching strong captains, don't look here! Like the strong Federation attitude? Forget about it here! Starfleet is mocked by ensigns wearing SPIKES in their hair.

While a seemingly mentally feeble captain shuffles about and within two minutes of the opening show's credits, Ensign Spikey is attempting to arrange a tryst with an engineer. It just degrades from there. No, not even uniforms match, for goodness sake. They are too small or too big, collars down to their chests, and TNG Seasons One and Two Uniforms mixed in with Season Three and DS9 uniforms. The strict discipline and tradition of any of the originals in lacking in this production down to the treads! The only good thing about this show is its graphics, which seem to improve a bit with each season. OK, I take that back. Who uses CG that inexpertly? The designers of this show.

Don't bother with it, it will offend your Star Trek sense, as it did mine. Not even the throw backs to previous shows can save this catastrophe.

I wept openly when i watched this, probably because my eyes were bleeding and my head almost ruptured. That bad.", "y": 0}, {"x": "I almost called HBO and demanded my money back for the month just because they've been airing this movie. I can just see the movie execs sitting around going, \"Okay, we need to come up with something that's just like Home Alone, only we'll add a bunch of cash for the kid, hire cut-rate actors, and oh yeah, we'll make it a lot less funny!\"

Okay, maybe not the last part, but that's basically what you've got here. Not even worth seeing if someone else rents it. And as a movie for kids? Forget it. I wouldn't let my kids see this, not necessarily because of bad-taste jokes, but because I wouldn't want them to say, \"What were you thinking showing us that lame piece of garbage, Dad?!?!\"", "y": 0}, {"x": "This film is so much of a rip-off of the masterpeice \"demons\" and thats the only thing that makes the movie worth watching. The acting is terrible,the action scenes are speeded up,the script is almost painful and budget non existent.

If you think this film is good then you havn't seen a real horror film, skip this and get a copy of the movie demons.", "y": 0}, {"x": "I'm not sure how I missed this one when it first came out, but I am glad to have finally seen it.

This movie takes place in and around the 19th century red light district of Okabasho, Japan. It tells the tale of prostitution, caste systems and women who are strong in a society based upon the strength of the samurai code of Japan.

It is uniquely Akira Kurosawa! Even though he died before he could direct this movie, his adaptation of the screenplay shows. His view of the Japanese world and caste system is renowned and sheds light upon how these systems interact with each other. The characters may revolve around each other, but the caste system stays intact when each character goes back to the world they belong in. The samurai warrior who drifts into the good hearted and loving prostitute's world goes back to his life, while she embarks on a another road with a man who is part of her caste system..lowest of the low. Many prize the world of the samurai above all others, but yet, it is the lower caste inhabitants who can support each other and who can love without restraint. The samurai in this movie turns out to be the weak one, while the classless lovers prove to be the honorable ones.

The movie deserves a higher rating. It is a tale of survival of women in feudal Japan. During this time frame, men were thought to be the survivors..the strong ones while women were thought to be just mindless and weak property. This movie highlights the strength of Japanese women and how they did what they had to for survival, and how their strength enabled the Japanese culture to continue on as it has.

I recommend \"The Sea is Watching\" to anyone who is a fan of Akira Kurosawa and even if they're not a fan. It is a lovely, quiet and soul sustaining movie, and one to be treasured for any movie collection.", "y": 1}, {"x": "Now, I've seen a lot of bad movies. I like bad movies. Especially bad action movies. I've seen (and enjoyed) all of Jean-Claude Van Damme's movies, including the one where he's his own clone, both of the ones where he plays twins, and all three where he's a cyborg. I actually own the one where he plays a fashion designer and has a fight in a truck full of durians. (Hey, if nothing else, he's got a great ass and you almost always get to see it. With DVD, you can even pause and zoom in!) That's why you can trust me when I say that this movie is so bad, it makes Plan 9 look like Citizen Kane.

Everything about Snake Eater is bad. The plot is bad. The script is bad. The sets are bad. The fights are bad. The stunts are bad. The FX are bad. The acting is spectacularly, earth-time-bendingly bad, very probably showcasing the worst performance of every so-called actor in the cast, including Lorenzo Lamas, and that's really saying something. And I'd be willing to bet everyone involved with this movie is lousy in bed, to boot. ESPECIALLY Lorenzo Lamas.

It does manage to be unintentionally funny, so it's not a total loss. However, I recommend that you watch this movie only if you are either a congenital idiot or very, very stoned. I was able to sit through it myself because I needed to watch something to distract me from rinsing cat urine out of my laundry.

It didn't help much, but it was better than nothing. One point for Ron Palillo's cameo as a gay arsonist.", "y": 0}, {"x": "Let me start off by saying I am not a fan of horror movies. I never watch them.

Let me tell you about my experience...

The only reason I watched this movie was because my girlfriend and her friends wanted to see it over Happy Feet.

...I never saw Happy Feet, but I am sure it is better than this...movie? Anyway, we didn't actually expect it to be good...we actually went in just to laugh at it. Cool with me...I have a problem with ruining the movie for other people in the theater but since it was just other couples talking and making out, it did not matter.

After 15 minutes the 2 other people left to go sneak into Borat, a movie I would have gladly seen again over this. The movie was not scary, and not stupid so it would be funny...it was just boring. It wasn't terrible like \"Baby Genuises\" terrible, it was terrible like...not entertaining at all. Avoid.

Now I am no expert, but it seems the problem with the horror industry these days is that you can have a PG-13 horror that is boring and not scary, or you can have an R gruesome horror movie that either is too bloody or too disgusting for people.

You want a PG-13 horror that sucks but is funny? See \"The Grudge.\" Avoid this movie like the plague...because it may literally bore you to death.

0/10", "y": 0}, {"x": "If it wasn't for some immature gullible idiot I know insisting that I watch this \"documentary\" I would never have seen this comedy! This film is full of bad scripting and laughable moments. One in particular is where the Afghan police / soldiers arrest Don Larson for filming in the streets while they allow the cameraman to carry on filming his arrest and then drive away, still filming, presumably to his plush hotel. Then there's the scene where a car crashes into another car which has been turned upside down and parked nicely on the side of the road without any evidence of it being in a crash or explosion.

I am surprised this has currently got the rating it has (5.8 / 10). I thought IMDb users had more sense.", "y": 0}, {"x": "As it is in Heaven {SPOILER WARNING)

This was a great human drama that stimulated my emotions and my imagination.

This is a parable revisiting the life and death of Christ. Daniel is a superior gifted musician ,who is physically and mentally exhausted by his career , and has to give it up. When he joins a church choir as its cantor, he brings about a transformation in the lives of the choristers , just as Jesus did to the society in first century Palestine. They laugh, they begin to speak openly and truthfully to each other , their faults are exposed,they accept each other, come to love each other, become a vital community.They include the mentally disabled young man (?Tore), such is their inclusiveness.

The pastor, Stig enjoyed authority through imposing a stifling morality on the congregation, and that is gradually rejected by the choristers . When Stig dismisses Daniel , there is a revolt, and Stig is crushed. Stig represents the Jewish authorities of Jesus' day, whose insistence on obedience to the Jewish law,provided a stark contrast to the new life by \"the golden rule\" brought by Jesus.

In one dramatic scene, someone declares \"the church invented sin\". All through the film, there is this contrast between moral-ism and vital living (being).

True to the Christ story, Daniel is killed by Conny , when he beats him up, leaves him to drown in the river. Next scene , we can hardly believe it when Daniel's (resurrected!) body is dragged into his room (the tomb) draped in a white linen sheet (the shroud!), by three women (three women kept vigil at the foot of the cross in the gospel).

Daniel is drawn closely to Lena, a warm beautiful young woman who has been betrayed by a man she loved, and who is now promiscuous (Jesus developed a close relationship with Mary Magdalene- Lena- who was probably a high class courtesan/prostitute). Through Lena, Daniel learns to love , something he has longed for, and now finds fulfillment .

The solo sung by Gabriella , composed by Daniel, is all about living a full life , in contrast to moral correctness that leads to concern about sin , and what's right and wrong.

The final scene shows the choir all singing/humming in harmony , like a mantra, drawing in the large audience, exemplifying the harmony and inter-connectedness that is our true human destiny.", "y": 1}, {"x": "Of the ten actors who portrayed Philo Vance in the series, Edmund Lowe seemed the most personable, but in this script the audience is way ahead of the famed detective. After all, when the jockey, Douglas Walton, stares blankly in space, obviously hypnotized, and says something like \"I must ride and be killed,\" I felt it was dumb that no one picked up on it after he does get killed. The police thought it was a suicide because he said he would do it! After hated horse owner Gene Lockhart gets shot and killed, Frieda Inescort does the same thing, saying she's going out to be killed, and then fatally jumps off a bus. I laughed when Lowe finally yells \"I got it,\" as though it were a revelation. The guilty party, however, was cleverly concealed and there was considerable suspense generated when that party starts to hypnotize Lowe to get him to jump off a roof.", "y": 0}, {"x": "It seems as if in Science Fiction you have this periodic throwback to perform an odd phenomenon that appears in long serial novels. It's where the first novel (Dune, Ender's Game) blows you away with an actionpacked revolutionary story. The sequels however take that universe and lead you down the garden path to whatever new little social or political commentary the author wants to make. The Matrix is finally the film equivalent. The Matrix stands tall, alone, as an interesting film with an odd twist in the middle. Seeing this cash cow just sitting there, and wanting to explore other aspects of society, the writers and directors then lead you through what has to be some of the most painful monologues and non-action sequences in SciFi. While the visuals remain as stunning from the first movies, the new explorations of the characters falls terrible flat in the sequel. Watch for eye candy, not for deep thought.

4 out of 10, as registered by this fine website.", "y": 0}, {"x": "Robert De Niro, Cuba Gooding Jr., Hal Holbrook, and all the rest of the actors and actresses in \"Men of Honour\" have combined to make this a fine movie. Mark Isham wrote the filmscore, so you know the music is truly fine, too.

But: After noticing a slew of goofs, loopholes, and over-dramatic heart-string pluckings right from the start, I had to make a vow to ignore them and sit back to enjoy the film. If you can do that, it _really_is_ good.

The story of Carl Brashear, a true-to-life hero, is inspirational enough to last a lifetime. Look him up on the internet... The entire story is more amazing than the film, as the Director admitted in his comments. There were only three African-American U.S. Navy divers in World War II. However, none reached the status of U.S. Navy Master Diver. Carl Brashear was THE first African-American U.S. Navy Master Diver. AND he was the first amputee diver to ever be certified or recertified as a U.S. Navy diver. (Resounding Applause).

On the negative side of the movie's ledger: Should I tell you of only one of the many \"loopholes\"? Yeah, I'll mark this comment as containing \"spoilers\" and do so... The early, pivotal scene where the helicopter hits the radio mast and sinks into the sea: They'd never have had the time to suit up a full Mark V diver, even if he were the legendary Master Chief Billy Sunday, in time to be only \"... a couple of minutes late\" saving the pilot.

So, for loopholes, goofs, and over-dramatization, I derated \"Men of Honor\" from a perfect 10 down to a 7.

Will Hollywood EVER realize that the unalloyed truth is so much better that their over-dramatic approach to story-telling? I doubt it. Too bad!", "y": 1}, {"x": "This was just a terrible movie. It hurt me to watch it. Almost every action was unmotivated within the context of the movie, the acting was really poor (P.Diddy was the best actor which really says something about the movie) and the plot was generally predictable. Some links to Carlito's Way were okay, for example his dream of one day moving to the Carribien, but on the whole they were weak. The love interest in my opinion was flat out wrong but hey that's debatable. Anyways I really wasn't expecting much before watching the movie and I guess you could say even those expectations weren't met. I feel bad for Jay Hernandez because he actually is a decent actor (Friday Night Lights). He's lucky though because I'm sure there won't be too many people watching this movie. I generally give movies a decent rating if they spark my interest at all so I'm gonna go ahead and give this one two stars. Better luck next time. And yes I did enjoy Carlito's Way.", "y": 0}, {"x": "The Incredible Melting Man plays like an extended episode of The Six Million Dollar Man, but with violence and some nudity. I know this film is a bit crummy but I found it impossible not to kind of like it.

The acting and script are not the best. But the effects are good for a 30 year old movie with a budget of $50 - the title character takes quite a while to actually melt but when he does it's reasonably impressive; we also have one inventive death scene involving electrocution. Of note too is the music, it's insane - a cheese-tastic medley of nonsense.

Notable highlights:

* Marvel at the slow-motion nurse who jumps through a pane of glass for absolutely no reason whatsoever.

* Be amazed by a day in the life of a severed head.

* Beware of the psychotic cannibalistic melting humanoid. Called Steve.

* Be astonished when our hero takes a break from hunting the melting lunatic to have a bowl of soup and complain about insufficient crackers in the kitchen.

This film is just too 70's for me to hate it. It's tacky and trashy but I thought it was a lot of fun. You could do a lot worse.", "y": 0}, {"x": "Shintar\u00f4 Katsu gained tons of fame playing the wonderful character, Zatoichi. The Zatoichi films had a weird and unbelievable concept--a blind guy is the greatest swordsman in Japan and spends each movie righting wrongs and exacting retribution on evil doers. He's a heck of a nice guy and the films are exciting and addictive (I've actually seen every movie). It is because of this I saw this final installment of the Hanzo the Razor series, as I assumed it would be very similar....and boy was I wrong! It turns out that the Hanzo films are extremely sexual in nature and they also promote the rape of \"women who deserve it\". You see, Hanzo is a policeman from the Meiji period and he regularly takes evil women into custody and interrogates them by violently raping them with his \"penis of steel\". How he made his member so strong is something you have to see to believe, but it certainly is NOT for the squeamish.

Overall, I just can't recommend anyone sees these violent and misogynistic films. However, from looking at the other reviews, I can see that they are still very popular...and that is pretty scary. Despite some decent acting and amazing fight scenes, the films just are like brain pollution--and I'd hate to imagine how the films might have contributed to violence towards women.", "y": 0}, {"x": "Once in a while you get amazed over how BAD a film can be, and how in the world anybody could raise money to make this kind of crap. There is absolutely No talent included in this film - from a crappy script, to a crappy story to crappy acting. Amazing...", "y": 0}, {"x": "It's a bit easy. That's about it.

The graphics are clean and realistic, except for the fact that some of the fences are 2d, but that's forgiveable. The rest of the graphics are cleaner than GoldenEye and many other N64 games. The sounds are magnificant. Everything from the speaking to the SFX are pleasant and realistic.

The camera angle is a bit frustrating at times, but it's the same for every platform game, like Banjo-Kazooie and Donkey Kong 64.

I got this game as a Christmas present in 1997, and since then, I have dutifully gotten 120 stars over 10 times.", "y": 1}, {"x": "A top contender for worst film ever made. Joanna Pakula's character seems to have an I.Q. of 3 which is only one less than the writer and director. The screenplay would not have passed in a high school writing class; the \"jokes\" are juvenile; the concept corny. These performers were obviously desperate for work. I stayed to the end only to see if it would get worse. It did. Life is too short to spend any part of it watching this film.", "y": 0}, {"x": "Let's just say it in simple words so that even the makers of this film might have a chance to understand: This is a very dumb film with an even dumber script, lame animation, and a story that's about as original as thumbtacks. Don't bother -- unless you need to find some way to entertain a group of mentally retarded adults or extremely slow children. They might laugh, especially if they're off their meds. There's a special kind of insult in a film this ridiculous -- not only do the filmmakers apparently think that children are brainless idiots who can be entertained with claptrap that cost approximately zero effort, but they don't even bother to break a sweat inserting a gag here and there that an adult might find amusing. This film, frankly, ticked me off royally. Shame on you for stooping so low.", "y": 0}, {"x": "The \"Trivia\" page on IMDb claims the filmmakers protested because this film was re-cut by the studio to \"simplify the plot\". If so, that effort was a total failure, as this is one of the most incoherent narratives I've ever seen in a film -- I'd hate to have seen it before the plot was \"simplified.\"

It's sad to see Warren with so little character to go on that even he can't do anything with the inept material. It's interesting to see Caron in '70s mode instead of her Hollywood-era glamour garb and persona, but it's sad to see her haplessly wander through this doing-a- favor-to-her-producer-husband dreck. She would actually later hook up with and marry the director, instead -- who, you'll note, never directed anything again, but did strictly 1st or 2nd A.D. work in TV from here on out. That oughta tell you enough right there.

I call this \"interesting\" because I have an automatic fondness for American films of this period, and this role does add perspective to Oates' otherwise fantastic 1971 output (Two- Lane Blacktop, The Hired Hand). But the \"1940s detective as fish-out-of-water in 1970s L.A.\" theme, which is the only thing the movie really has to say, is sold in way too heavy- handed a manner. A similar theme would be far more effectively handled two years later in Altman's The Long Goodbye. And as far as Oates playing a hard-bitten guy on a doomed errand, three years on, he would give his definitive performance in Bring Me the Head of Alfredo Garcia. If you haven't seen those, don't waste your time with this!", "y": 0}, {"x": "Aside for being classic in the aspect of its cheesy lines and terrible acting, this film should never be watched unless you are looking for a good cure for your insomnia. I can't imagine anyone actually thinking this was a \"good movie.\"", "y": 0}, {"x": "Few movies have dashed expectations and upset me as much as Fire has. The movie is pretentious garbage. It does not achieve anything at an artistic level. The only thing it managed to receive is a ban in India. If only it was because of the poor quality of film making rather than the topical controversy, the ban would have been more justifiable.

Now that I've got my distress out of my system, I am more able to analyse the movie:

* From the onset the movie feels unreal especially when the protagonists start conversing in English. The director, of course, did not make the movie for an Indian audience; however it underestimated its international audiences by over simplifying it. Watching the character of the domestic help conversing in perfect English is too unreal to be true.

* Next we get regular glimpses into Radha's dreams. These scenes are not very effective. They coming up as jarring and obstruct the flow of the movie. I'm still wondering how that philosophical dialogue connected to the story. I felt that the surrealism was lost.

* The love scenes felt voyeuristic and are probably meant for audience titillation rather than being a powerful statement. In any case, they do not achieve either of the two.

* The names chosen for the women, Radha and Sita, are names of Hindu deities and hence been selected to shock the audiences. However, since the film wasn't meant for Indian audiences in the first place, the shock-through-name-selection is not meant to achieve its goal, which is absurd.

* The quality of direction is very poor and some key and delicate scenes have been poorly handled. A better director could have made a powerful emotional drama out of the subject.

* The acting felt wooden although Nandita Das brought some life into the role, the others were wasted. I always thought that Shabana Azmi was a good actress but her talent is not evident in this film. The male leads were outright rubbish.

In case you are a fan of Earth and wish to see more of the director, stay away from this one. Please.", "y": 0}, {"x": "Interesting, fast-paced and amusing.

I'm not one of those people who watches loads and loads of television. I stumbled across this show while home sick with a bad case of the flu one day, and was immediately hooked. I developed quite a crush on John Burke. Both he and Claire did an amazing job of hosting the show together. You could really tell that they both loved their jobs.

The super-collector segments were excellent. I found myself interested in things I had never previously given a single thought to.

What I would really like to know is: Whatever happened to Jack the dog? Did one of the hosts adopt him?", "y": 1}, {"x": "I don't doubt that the critics panned this movie, especially the artsy fartsys who need a laxative. This is a great vehicle movie in the tradition of Abbot & Costello or more recently Don Knotts. It won't shake the world or change movies forever. What it will do is entertain. When all is said & done that's the most important thing anyway. Watch this movie & forget your troubles. It even has a simple & kind moral message at no extra charge. I always loved Elvira's TV show when I lived in LA. She did not really steal her schtick from Vampira any more than Vampira did from the original, Theda Bara. This sort of mythic character belongs to whoever does it best; & Cassandra Peterson does it best. Long live Elvira; we need more of these kind of movies. There are never enough. The villain, William Morgan Sheppard, was also excellent. He exudes a wonderful refined malice. I could find no technical faults. The execution is as close to flawless as the art form gets. My profound compliments to the director,James Signorelli,& all his crew.", "y": 1}, {"x": "As many people know, Mexican cinema was very poor after the so-called Golden Age of the Mexican Cinema, fortunately, during the late 90's, and early 21st century, great movies like La Ley de Herodes, Bajo California, Amores Perros, Y Tu Mam\u00e1 Tambi\u00e9n and, of course, El Coronel No Tiene Quien le Escriba, appeared. El Coronel..., is a wonderful movie, that retells the classic story by Gabriel Garc\u00eda M\u00e1rquez, by eliminating the magic realism elements, and replacing them with the crude reality lived in Mexico, not only by people like the Colonel, who wait for their pensions, but by more than the half of the Mexican population, who live in complete poverty. The film's characters, satirically represent classic characters found in Mexican society, such as the nationalist Colonel, the cold and even ambitious priest, the hypocrite, but at the same time loyal compadre, the tolerant and patient wife, the hidden homosexual, etc. This movie, is a must-see if you want to know more about Mexican society, and specially, if you want to watch a gorgeous movie, by one of Mexico's finest directors", "y": 1}, {"x": "Tweaked a little bit, 'Nothing' could be a children's film. It's a very clever concept, touches upon some interesting metaphysical themes, and goes against pretty much every Hollywood convention you can think of...what goes against everything more than, literally, \"nothing\"? Nothing is the story of two friends who wish the world away when everything goes wrong with their lives. All that's left is what they don't hate, and a big empty white space. It's hard to focus a story on just two actors for the majority of your film, especially without any cuts to anything going on outside the plot. It focuses on pretty much one subject, but that's prime Vincenzo Natali territory. If you've seen 'Cube', you know already that he tends to like that type of situation. The \"nothing\" in this movie is apparently infinite space, but Natali somehow manages to make it somewhat claustrophobic, if only because there's literally nothing else, and nowhere else to go. The actors sell it, although you can tell these guys are friends anyway. Two actors from 'Cube' return here (Worth and Kazan), but are entirely different characters. They change throughout the story, and while they're not the strongest actors in the world, they're at least believable.

The reason I say this could be a children's film under the right tweaks, is because aside from a few f-bombs and a somewhat unnecessary bloody dream sequence, the whimsical and often silly feel of this movie could very much be digested easily by kids. So I find it an odd choice that the writers decided to add some crass language and a small amount of gore, especially considering there isn't very much of it. This could've gotten a PG rating easily had they simply cut a few things out and changed a little dialogue. There is very little objectionable about this film, but just enough to keep parents from wanting their kids to see it. I only say that's a shame because not because I support censorship, but because that may have been the only thing preventing this movie from having wider exposure.

At any rate, this is a reasonably entertaining film, albeit with a few dragged-out scenes. But for literally being about nothing, and focused entirely on two characters and their interactions with absolutely nothing, they do a surprisingly good job for an independent film.", "y": 1}, {"x": "New York, I Love You is a collective work of eleven short films, with each segment running around 10 minutes long. The shorts don't exactly relate but they all have something in common, love. Every short is about finding love, either if it's about a couple or just two strangers chitchatting.The film stars an ensemble cast, among them Shia LaBeouf, Natalie Portman, Hayden Christensen, Orlando Bloom, Chris Cooper, Andy Garcia, Christina Ricci, Irrfan Khan, Robin Wright Penn, Julie Christie, Ethan Hawke, Bradley Cooper, Rachel Bilson, and Anton Yelchin. With such a stellar cast and such an interesting premise, I was expecting a tremendous film; the problem is New York I Love You doesn't add up. It remains the sum of its parts. Some of the segments are funny, original and interesting but others are so meaningless (Orlando Bloom/Christina Ricci and Ethan Hawke/Maggie Q segments) that it's appalling. The film is definitely uneven and has a very experimental tone. Story-wise, it seems like something a few film students could put together. Having said that, the film has some great moments as well, one of the best being the segment about an old couple, played by Eli Wallach and Cloris Leachman, walking along in Brooklyn on their 67th wedding anniversary. And it's moments like this, that made me as a viewer, wish the film was more consistent, because, there's a lot of potential here. But, as unsatisfying as the overall story ends up being, for me, the cinematography and soundtrack saved the all thing. The editing was perfect, the way the film was shot was very impressive and the ethereal soundtrack, couldn't be more fitting. In the end, New York I Love You feels like an experimental film, and as in most experiences there's highs and lows. It's how one looks at the film as a whole that will determine if he enjoys it or not. It might be worthwhile for some and a waste of time for others.

7/10", "y": 1}, {"x": "This very low budget comedy caper movie succeeds only in being low budget. Dialog is dumbfoundingly stupid, chase scenes are uniformly boring, and most of the on-screen money seems to have been saved for a series of crashes and explosions in a parking lot during the film's last five minutes (a briefly glimpsed port-a-potty early in that scene is certain to wrecked and spew crap on the film's chief villain--no prop is here without a purpose). The whole film is depressingly reminiscent of those that occasionally came out of Rodger Corman's studio when he'd give a first time director a few bucks and a camera--but without the discipline Corman would impose.", "y": 0}, {"x": "the more i think about it, there was nothing redeeming about this

movie. i saw it 9 months ago, so my memory might have made it

worse than it was, but i do know it was at least as bad as a 4 out of

10.

after seeing the movie, i met the director. he seemed so clueless

as to what he was doing or what he had done, and as far as i

could tell, he didn't care for the film either. even he agreed that he

didn't really know what he was doing, and he was forced to do

certain things because it was filmed digitally.

i felt that the movie was trying to hard to fit in to the formula that it

built for itself: \"9 people all have to be connected in some way. how

can we get from point 'A' to point 'B'\" so in order get from the

prostitute we see in the start and back to her at the end they 10

minutes on each character's relationship to another person. it

makes one feel choked by the 2 demensional, badly drawn

characters.

I just remembered the one redeeming part of the movie... Steve

Bouchemi there is one scene where he is amazing. that's it. as i

say... 4 out of 10.", "y": 0}, {"x": "The story and the show were good, but it was really depressing and I hate depressing movies. Ri'Chard is great. He really put on a top notch performance, and the girl who played his sister was really awesome and gorgeous. Seriously, I thought she was Carmen Electra until I saw the IMDb profile. I can't say anything bad about Peter Galleghar. He's one of my favorite actors. I love Anne Rice. I'm currently reading the Vampire Chronicles, but I'm glad I saw the movie before reading the book. This is a little too\"real\" for me. I prefer Lestat and Louis's witty little tiffs to the struggles of slaves. Eartha Kitt was so creepy and after her character did what she did The movie was ruined for me; I could barely stand to watch the rest of the show. (sorry for the ambiguity, but I don't want to give anything away) Sorry, but it's just not my type of show.", "y": 0}, {"x": "In my opinion, the best movie ever. I love when people ask me what this film is about. I usually smile and say \"life\". They shrug and probably never give it another thought. The fact that everyone from every background can relate to some part of this movie makes it all that much more amazing. Definately a must see for everyone.", "y": 1}, {"x": "At a risk of sounding slightly sacrilegious, on first viewing I'm kind of inclined to put this right up on a par with 'Shaun of the Dead'. Now, given I view Simon Pegg as an unquestionable comedy genius, I realise this is a rather big claim. And to what extent you agree with that last statement may be a good preliminary gauge of whether 'Fido' will appeal to you.

In a way the comedy picks up where 'Shaun' left off, except we're back in the original 1950s Living Dead-era stereotypical middle-American small town. The Zombie Wars are over and zombies themselves are becoming more well-adjusted, useful members of the community. This, so we're informed at the outset, is largely thanks to the scientific advances made by the good people at Zomcom - a nice play on romantic comedy perhaps?

The beauty of the film lies in its dead-pan depiction of a respectable neighbourhood maintaining core values while making a place for zombies and the special hazards they pose. The charm and balance with which it does this is near enough perfect. Themes you might expect from a more mainstream kitsch comedy come through - the veneer of good clean living, keeping up appearances, repressed emotion, muddled parental values, social decorum and the plight of the alienated individual.

It's a story told with happy heart and wide appeal that is brought to life vividly by the film's all-round strong cast. It's one of those works where it really shows through that everyone involved got a kick out of taking part. It's also fun imagining what Billy Connelly learning his script must have been like...

So in conclusion, it is probable you will appreciate the humour of this film unless your father tried to eat you.", "y": 1}, {"x": "I only watched this film from beginning to end because I promised a friend I would. It lacks even unintentional entertainment value that many bad films have. It may be the worst film I have ever seen. I'm surprised a distributor put their name on it.", "y": 0}, {"x": "This movie is incredibly realistic and I feel does a great justice to the crime that many people do not understand because of a lack of experience. The many people who think they could fathom what goes through a victim's mind are arrogant. As a victim, I feel that Dawson did a fantastic job in her role of Maya. I agree that this is an incredibly brave film. This looks at rape from a different, more realistic standpoint than any other movie I've ever seen on the subject. The end did drag on a bit long, but I know that many victims imagine this kind of justice, since the chances of an attacker being sent to jail for their crime is around 1%. It's good to see a movie that sticks closer to reality than most would dare to.", "y": 1}, {"x": "Things I learned from \"The List\".

A decent cinematographer, a hot girl who can act and Malcom McDowell couldn't stop this movie from sucking.

Blockbuster won't give you your money back.

Even when he reads the script and says \"Ugh! Really?!\", Malcom McDowell still tries.

Chuck Carrington desperately needs acting classes.

Hire a writer.

Jesus hates me too and punished me by making me pay $ 5.50 to see this movie.

When making a movie, you don't need an ending. Just leave everything unexplained, unresolved an uninteresting enough so that the audience falls asleep BEFORE the ending. Genius.

Any random landlord can cure death just by drawing a cross on a window. So make friends.

Your maid can sing you back to life.

Chuck Carrington still needs acting classes.

Your roommate will hate you and make fun of you if you bring home this movie.

Apologies will not be accepted.", "y": 0}, {"x": "** HERE BE SPOILERS **

Recap: Mia (Helin) is returning home from capital Stockholm to rural R\u00e4ttvik to celebrate her fathers 70th birthday. She is by far the youngest child, and has two sisters Eivor (Ernst) and Gunilla (Petr\u00e9n). Eivor has a family and still lives in R\u00e4ttvik and Gunilla has divorced and moved a town away. Mia is still single and is focused on her career. There are a lot of jealousy and almost animosity between the sisters and conflicts arise all around as they confront each other and each have personal problems they have difficult to handle. As the party goes on (and alcohol consumed), more and more secrets become unveiled and more and more conflicts arise...

Comments: To be the work of a new writer/director it was disappointing to see this movie to follow in the exact same tracks that older Swedish comedy/dramas has been following for years. There are really no new elements or ideas. This movie draws upon three basic areas. 1) Embarrassing humor only based on characters making a fool of themselves. 2) Sorrow and 3) Anxiety. This move has the focus on the last one, almost forgetting the first point as the movie goes along. No loss though, since the humor that is there is not funny. The performances from the cast are good I guess, though it is lost behind all the anguish and soon forgotten. I had hopes that there would be new ideas and influences, but there were none. To conclude, there are better ways to spend one's time than watching this.

3/10", "y": 0}, {"x": "A couple of farmers struggle in life in a small village in China. Wang Lung (Paul Muni) buys O-Lan, his future wife, who becomes his slave (Luis Rainer). American stars appear in the leading roles, talking with fake accents and emphasizing old stereotypes and patriarchal ideology. A good wife, many children and land are the best things for men to have. They are seen as property and investment. Because it is a big budget movie, in which many extras cooperate, big sets are built and special effects take place, the movie makers could not take the risk of hiring less popular actors. Luise Rainer won an Academy Award for this performance, which is definitely the worst in the movie. Her immutable face builds a barrier between her and the audience. O-Lan is supposed to be the heart of the family and the best character to sympathize with. On the other hand Paul Muni gives a better performance, showing his talent ones again. Another problem with the movie is the ending. It seems like Franklin did not know when to end the picture. This film could be dangerous if it is taken as a truly example of Chinese culture and traditions.", "y": 0}, {"x": "One of the best comedians ever. I've seen this show about 10 times and will probably watch it at least 100 more. My friends and family quote from this DVD so often, you'd think we did nothing other than watch it. The beginning part about Alcatraz is a little bit slow, but either wade through it or zip on through to the part where Eddie is on stage. Watch for the \"Cake or Death\" part (Joking about the Church of England) and the \"Hitler/Pol Pot\" part (Hard to explain, just watch it). The best part of the show may be Eddie's facial expressions. He can really say a lot with his eyes. (Mascara, eyeliner, and eyeshadow probably help, huh?) Fair warning: Eddie does have a tendency to throw a lot of four-letter words in.", "y": 1}, {"x": "This is a very funny Ealing comedy about a community in central London who, through an unusual set of circumstances, discover they are not English, but are an annex of the French province of Burgundy.

The film features comic actor Stanley Holloway (best known as Alfred Doolittle in MY FAIR LADY), as well as a host of other classic comic actors of the period.

The story was apparently based on a news item at the time, when the Canadian Government \"officially\" gave a hotel room to a visiting European member of royalty. The idea actually reminded me of the real-life case of the Hutt River Province in Western Australia, where a landowner \"seceded\" from the Australian Government due to a wool quota dispute. (It was never acknowledged by the Western Australian or Australian Governments).

This is a great script that plays with a lot of political and economic issues, rather like the TV show \"Yes Minister\"; as well as being a great little eccentric character piece as well.", "y": 1}, {"x": "'Umi wa miteita' ('The Sea is Watching') was Akira Kurasawa's swansong to film: his adaptation of his favored novelist Shugoro Yamamoto's story into a screenplay he intended to film was his final mark he left on a brilliant career. Director Kei Kumai pays homage to both Kurosawa and Yamamoto in presenting this visually stunning transformation of word to image.

Set in 19th century Japan, the story explores the lives of the women of a Geisha house whose sole purpose in life is to earn money by pleasuring men. The house is run by an older couple who are genteel and the geishas are an enchanting group of women who know their trade and take pride in their careers. Each has a reason for turning to the life of geisha. Oshin (Nagiko Tono) supports her family who live in a neighboring village, Kikuno (Misa Shimizu) has customers both good and evil whom she manages to sustain with her stories of her higher caste. Oshin befriends an endangered samurai, falls in love with the gentle fellow, only to find that he must not marry out of his caste and leaves his pleasures with Oshin to marry his promised betrothed. Oshin's heart bruises easily but is always supported emotionally and physically/monetarily by Kikuno and the other geishas.

A handsome samurai Ryosuke (Masatoshi Nagase) enters Oshin's life and develops the first trusted and devoted relationship with her. Kikuno is beset by problems, deciding whether to accept the humble love of an old man who wishes to marry her, and coping with a rich but abusive customer. All the while the sea is watching and as a typhoon destroys the geisha house and street, Oshin and Kikuno sit atop the roof waiting for the promised rescue by Ryosuke. The manner in which the story ends is one of sacrifice, love, and devotion. The sea is watching and will find protection for true love.

The photography by Kazuo Okuhara is breathtakingly beautiful: night scenes with glowing lanterns and colorful geisha interiors are matched with recurring glimpses of the sea both calm and turbulent. The acting is a bit strained for Edo art, but the characters are well created and keep the story credible. The one distraction which is definitely NOT something Kurosawa would have condoned is the tacky Western music score that sounds like cheap soap opera filler except for the isolated moments when real Japanese music on authentic instruments graces the track. But in the end there is enough of Kurosawa's influence to imbue this film with his brand of dreamlike wonder that will always maintain his importance on world cinema. Grady Harp", "y": 1}, {"x": "Maybe I loved this movie so much in part because I've been feeling down in the dumps and it's such a lovely little fairytale. Whatever the reason, I thought it was pitch perfect. Great, intelligent story, beautiful effects, excellent acting (especially De Niro, who is awesome). This movie made me happier than I've been for a while.

It is a very funny and clever movie. The running joke of the kingdom's history of prince savagery and the aftermath, the way indulging in magic effects the witch and dozens of smart little touches all kept me enthralled. That's much of what makes it so good; it's an elaborate, special-effects-laden movie with more story than most fairytale movies, yet there is an incredible attention to small things.

I feel like just going ahead and watching it all over again.", "y": 1}, {"x": "Loved it but still have nightmares over the hotel manager.The movie, was presented well, with the choice of actors carrying their roles to reality of the writing. Many scenes gripped the imagination and created a nail biter. The progression of situations were cleverly written,making me believe the story was headed one way only to find a new twist on what I thought might be the obvious. Too bad there have to be commercials.I have told many friends to watch for further showings and I of course will view again.I enjoyed the scenery of the film and felt this added to the plots and intrigue. Husband and wife heated discussions(or should I say fights?) were very realistic.The initial situation is a common one but the escalation into the story presented fortunately is not.I want to thank all who were involved in this great entertainment film. Thank you! Looking forward to the next films---when? Whidbey", "y": 1}, {"x": "An idiotic dentist finds out that his wife has been unfaithful. So, no new story lines here. However, the authors managed to create a stupid, disgusting film. If you enjoy watching kids vomiting, or seeing a dentist imagining that he is pulling all his wife's teeth out in a bloody horror-type, go see (or rent) the film. If not, move on to something else (MY FAIR LADY, anyone?)", "y": 0}, {"x": "I picked up TRAN SCAN from the library and brought it home. We have considered taking a trip out east and thought it would give us a feel of what it was like. The film was a total waste of time, if I went out to buy it I would call it TRAN SCAM when I saw that it costs $49.

The DVD ran for 8 minutes and showed a roller coaster ride across Canada with my stomach feeling ill as they went up and down and around curve with the film at high speed.

There was a lot of footage they probably shot on this and you would think that they could have made a better product. If I would of done this project I would of provided more footage, paused on road signs to let people know where they were and linger in places to view the scenery. To make a film like this it should of been 60 to 90min. Oh yes the case said it was in stereo, the whole film was a hissing sound from sped up car sound, thet could of at least put some music to it.

If you want a good cross Canada film watch The railrodder / National Film Board of Canada starring Buster keaton (the one of the last film he made) in this comical film Buster Keaton gets on to a railway trackspeeder in Nova Scotia and travels to British Columbia", "y": 0}, {"x": "Just utter trash. I'm a huge fan of the Cusacks, this being the sole reason I watched this movie, but the only reason I can see for their presence was the reprise, in complete and depth less quality, their exact roles from Grosse Point Blanc. Apart from that, the films' role as a political satire fails miserably as being too obvious for even the most moronic out there to serve any purpose. And to bill it as a satirical satire would be just plain insulting even to chimps. Imitation is, apparently the highest form of flattery, but seeing as though this is nothing near Grosse Point Blanc and in the same league as meet the (watch if your a moron) Spartans in terms of political satire, lets leave well enough alone and let this one fade into the obscurity it absolutely deserves.", "y": 0}, {"x": "The second official episode of the \"Columbo\" series (\"Murder by the Book,\" filmed later, hit the airwaves first). Robert Culp, who would match wits with Peter Falk's detective in several future installments, is terrific as the short-tempered head of a sophisticated private detective agency who murders a client's wife when she refuses to cave-in to his blackmail schemes. The two stars are well-matched in this clever cat and mouse exercise that is one of the best in the series.", "y": 1}, {"x": "This picture was banned from American movies houses in the 1930 because of nudity by Hedy Lamarr, (Eva Hermann) which caused all kinds of problems among the ladies in the 1930's but not so much for the male population. This story concerns a young woman named Eva Hermann who gets married to an older man and is carried over the threshold on the wedding night and the husband never consummates the marriage and worries about all kinds of very petty things like his shoes and killing bugs. Eva leaves her husband's house and lives with her father and tries to explain her situation. On a hot Summer day Eva takes a ride on her horse and decides to go for a swim naked in a lake in the woods. Her horse runs off and she runs after him and is observed by a young man who finds her clothes and returns them to Eva. These two people become very acquainted and there is a romance that starts to bloom. There are many more interesting problems that arise as you view this film to its very end. Enjoy a great Classic film which was a Shocker Film in 1933. Enjoy.", "y": 1}, {"x": "A long film about a very important character from South Africa, Stephen Biko. He is one of these Blacks who did not survive apartheid, who actually died a long time before their normal time. The already old film though does not show how important Biko was, what he really represented. His life and his teaching is reduced to little, at best a few witty remarks. The film being from 1987, the objective was to push South Africa over the brink that would lead her to liberation. So the film aims at showing how irrational the South African supporters of apartheid are, in 1987. To show this the film has to look beyond Biko's death, hence to center its discourse not on Biko but on a white liberal journalist and his escaping the absurd system in which he is living. His escape is made necessary because of the victimization he is the victim of, along with his family, and because he wants to publish the first book on Biko, after his death, and that can only happen in England. The film shows a way to escape South Africa, while apartheid is still standing and killing. So do not expect this way to be realistic and true. It could not be. But the film has tremendously aged because it does not show South Africa with any historical distantiation, the very distantiation that has taken place under Nelson Mandela's presidency and that is called forgiveness provided those who want to be forgiven speak up and out. The film is strong and emotional but that very historical limit makes it rather weak today, especially since the film does not mention the third racial community, the Indians. Panegyric books or films all have that defect: they are looking at the person they are supposed to portrait from only one point of view. That explains why the film has aged so much, seems to be coming from so long ago, as if nothing had changed at all. A remake is necessary.

Dr Jacques COULARDEAU, University Paris 1 Pantheon Sorbonne, University Versailles Saint Quentin en Yvelines, CEGID", "y": 1}, {"x": "I read the novel some years ago and I liked it a lot. when I saw the movie I couldn't believe it... They changed everything I liked about the novel, even the plot. I wonder what did Isabel Allende (author) say about the movie, but I think it sucks!!!", "y": 0}, {"x": "The film's design seems to be the alpha and omega of some of the major issues in this country (U.S.). We see relationships all over at the university setting for the film. Befittingly, the obvious of student v.s. teacher is present. But what the film adds to its value is its other relationships: male v.s. female, white v.s. black, and the individual v.s. society. But most important of all and in direct relation to all of the other relationships is the individual v.s. himself.

I was amazed at how bilateral a point of view the director gave to showing the race relations on campus. Most films typically show the injustices of one side while showing the suffering of the other. This film showed the injustices and suffering of both sides. It did not attempt to show how either was right, although I would say the skin heads were shown a much crueler and vindictive (quite obvious towards the end). The film also discusses sex and rape. It is ironically this injustice that in some ways brings the two races together, for a time. Lawrence Fishburne does an over-the-top performance as the sagacious Profesor Phipps. He crumbles the idea of race favortism and instead shows the parallelism of the lazy and down-trodden with the industrious and positive. Other stars that make this film are Omar Epps, Ice Cube, and Jennifer Connelly. Michael Rapaport gives an excellent portrayal of a confused youth with misplaced anger who is looking for acceptance. Tyra Banks make her film debut and proves supermodels can act.

Higher Learning gets its name in showing college as more than going to class and getting a piece of paper. In fact, I would say the film is almost a satire in showing students interactions with each other, rather than some dry book, as the real education at a university. It is a life-learning process, not a textual one. I think you'll find \"Higher Learning\" is apropos to the important issues at many universities and even life in general. 8/10", "y": 1}, {"x": "I never saw it on TV but rented the DVD through Netflix as soon as I found that it was available. I had high expectations, and was not disappointed. It's funny, and the animation is excellent. That level of quality I would only have expected from feature films, so I'm surprised at some of the bad comments on it. Maybe the DVD release had improved animation? One bonus to the DVD is that it was fun to see both versions of the pilot. I'm an adult, and I really appreciate that it is for adults. It isn't only kids who like cute animated characters. It is nowhere near \"raunchy\" as some have claimed, but I can see where some parents wouldn't want their young children to see it. I'm very disappointed that it was cancelled. I wish they would produce more episodes. Or perhaps a movie.", "y": 1}, {"x": "

Back in his youth, the old man had wanted to marry his first cousin, but his family forbid it. Many decades later, the old man has raised three children (two boys and one girl), and allows his son and daughter to marry and have children. Soon, the sister is bored with brother #1, and jumps in the bed of brother #2.

One might think that the three siblings are stuck somewhere on a remote island. But no -- they are upper class Europeans going to college and busy in the social world.

Never do we see a flirtatious moment between any non-related female and the two brothers. Never do we see any flirtatious moment between any non-related male and the one sister. All flirtatious moments are shared between only between the brothers and sister.

The weakest part of GLADIATOR was the incest thing. The young emperor Commodus would have hundreds of slave girls and a city full of marriage-minded girls all over him, but no -- he only wanted his sister? If movie incest is your cup of tea, then SUNSHINE will (slowly) thrill you to no end.", "y": 0}, {"x": "I really wanted to like this movie because the critics have been unkind

to it (to say the least)... but it was terrible. Really terrible. Badly

acted, a witless script, cack handed direction... Watching this film was

like watching a car crash- you want to look away but you keep staring

because you want to see how messy it's going to get. Well, the car is

wrecked and there are no survivors. On the plus side, the cinematography

was nice, made me want to go on holiday, if only to cleanse myself from

this unholy", "y": 0}, {"x": "\"Hollywood Hotel\" has relationships to many films like \"Ella Cinders\" and \"Merton of the Movies\" about someone winning a contest including a contract to make films in Hollywood, only to find the road to stardom either paved with pitfalls or non-existent. In fact, as I was watching it tonight, on Turner Classic Movies, I was considering whether or not the authors of the later musical classic \"Singing In The Rain\" may have taken some of their ideas from \"Hollywood Hotel\", most notably a temperamental leading lady star in a movie studio and a conclusion concerning one person singing a film score while another person got the credit by mouthing along on screen.

\"Hollywood Hotel\" is a fascinating example of movie making in the 1930s. Among the supporting players is Louella Parsons, playing herself (and, despite some negative comments I've seen, she has a very ingratiating personality on screen and a natural command of her lines). She is not the only real person in the script. Make-up specialist Perc Westmore briefly appears as himself to try to make one character resemble another.

This film also was one of the first in the career of young Mr. Ronald Reagan, playing a radio interviewer at a movie premiere. Reagan actually does quite nicely in his brief scenes - particularly when he realizes that nobody Dick Powell is about to take over the microphone when it should be used with more important people.

Dick Powell has won a Hollywood contract in a contest, and is leaving his job as a saxophonist in Benny Goodman's band. The beginning of this film, by the way, is quite impressive, as the band drives in a parade of trucks to give a proper goodbye to Powell. They end up singing \"Hooray For Hollywood\". The interesting thing about this wonderful number is that a lyric has been left out on purpose. Throughout the Johnny Mercer lyrics are references to such Hollywood as Max Factor the make-up king, Rin tin tin, and even a hint of Tarzan. But the original song lyric referred to looking like Tyrone Power. Obviously Jack Warner and his brothers were not going to advertise the leading man of 20th Century Fox, and the name Donald Duck was substituted. In any event the number showed the singers and instrumentalists of Goodman's orchestra at their best. So did a later five minute section of the film, where the band is rehearsing.

Powell leaves the band and his girl friend (Frances Langford) and goes to Hollywood, only to find he is a contract player (most likely for musicals involving saxophonists). He is met by Allen Joslyn, the publicist of the studio (the owner is Grant Mitchell). Joslyn is not a bad fellow, but he is busy and he tends to slough off people unless it is necessary to speak to them. He parks Powell at a room at the Hollywood Hotel, which is also where the studio's temperamental star (Lola Lane) lives with her father (Hugh Herbert), her sister (Mabel Todd), and her sensible if cynical assistant (Glenda Farrell). Lane is like Jean Hagen in \"Singing In The Rain\", except her speaking voice is good. Her version of \"Dan Lockwood\" is one \"Alexander Dupre\" (Alan Mowbray, scene stealing with ease several times). The only difference is that Mowbray is not a nice guy like Gene Kelly was, and Lane (when not wrapped up in her ego) is fully aware of it. Having a fit on being by-passed for an out-of-the ordinary role she wanted, she refuses to attend the premiere of her latest film. Joslyn finds a double for her (Lola's real life sister Rosemary Lane), and Rosemary is made up to play the star at the premiere and the follow-up party. But she attends with Powell (Joslyn wanting someone who doesn't know the real Lola). This leads to Powell knocking down Mowbray when the latter makes a pest of himself. But otherwise the evening is a success, and when the two are together they start finding each other attractive.

The complications deal with Lola coming back and slapping Powell in the face, after Mowbray complains he was attacked by Powell (\"and his gang of hoodlums\"). Powell's contract is bought out. Working with photographer turned agent Ted Healey (actually not too bad in this film - he even tries to do a Jolson imitation at one point), the two try to find work, ending up as employees at a hamburger stand run by bad tempered Edgar Kennedy (the number of broken dishes and singing customers in the restaurant give Edgar plenty of time to do his slow burns with gusto). Eventually Powell gets a \"break\" by being hired to be Dupre's singing voice in a rip-off of \"Gone With The Wind\". This leads to the final section of the film, when Rosemary Lane, Herbert, and Healey help give Powell his chance to show it's his voice, not Mowbrays.

It's quite a cute and appealing film even now. The worst aspects are due to it's time. Several jokes concerning African-Americans are no longer tolerable (while trying to photograph Powell as he arrives in Hollywood, Healey accidentally photographs a porter, and mentions to Joslyn to watch out, Powell photographs too darkly - get the point?). Also a bit with Curt Bois as a fashion designer for Lola Lane, who is (shall we say) too high strung is not very tolerable either. Herbert's \"hoo-hoo\"ing is a bit much (too much of the time) but it was really popular in 1937. And an incident where Healey nearly gets into a brawl at the premiere (this was one of his last films) reminds people of the tragic, still mysterious end of the comedian in December 1937. But most of the film is quite good, and won't disappoint the viewer in 2008.", "y": 1}, {"x": "Okay, during this past thanksgiving break, whilst having the whole family together everybody decided to go see a movie, and since Fred clause was voted majority, thats what we went and say.

To start off the movie had so many plot holes it was pathetic. Simple explanations of why a certain event was happening was void. example; who the heck is trying to 'shut down' Santa clause? Is it some sort of corporation? A little explanation would of been lovely.

Second: The movie tossed you flimsy characters that evoked no sympathy from you about their feelings or actions. example: the little elf named Willie and the only tall girl in the elf village. they see each other twice and then they are a couple and i could of cared less because this movie didn't make me care.

Third: I suppose this was suppose to be a family film? Its rating was low at just PG. For a family film there were several articles of suggestive conversation. It didn't bother me, but if i were a parent i could see a problem.

Through the whole movie Paul Giamatti looked extremely bored with his role, but honestly he was the only one worth watching in the movie. Vaughn had a few funny moments but played the same character he has for the last two movies. mouthy frat boy. (nothing against Vaughn, he's been good in other movies)

so this movie gets a 3 out of 10 stars from me, just because somebody had to put in the effort to produce, film and release this flick.

In my opinion i would definitely pass on this flick, or if you HAVE to see it save it for a rainy day rental.", "y": 0}, {"x": "The dazzling seventeen-minute dance sequence of George Gershwin's 1928 orchestral piece, \"An American in Paris\", is an indisputable masterwork. Choreographed with precision and unparalleled flair by Gene Kelly, the vibrant combination of color, music and dance is still eye-poppingly startling as the piece is broken down into scenes inspired by selected master artists - Dufy in the opening Place de la Concorde piece, Manet in the flower market, Utrillo in a Paris street, Rousseau at the fair, Vincent Van Gogh in the spectacular Place de l'Opera piece, and Toulouse-Lautrec for the Moulin Rouge where Kelly wears his famous white bodysuit. The 97 minutes that precede this finale are not as exciting, not by a long shot, but there are certain charms to be had in viewing the entire 1951 Oscar-winning musical.

Director Vincente Minnelli and screenwriter Alan Jay Lerner have fashioned a surprisingly sophisticated if rather slight romantic story focused on Jerry Mulligan, a former G.I. who has remained in Paris after the end of WWII trying to make a living as a painter. With his braggadocio manner and athletic dancing style, Gene Kelly can be concurrently ingratiating and irritating as a screen personality, but he seems to find his oeuvre as the carefree Jerry. The love-triangle plot is focused on Jerry's involvement with Milo Roberts, a self-proclaimed art patron but a sexual predator when it comes to young artists. On their first date in a crowded Montmartre nightclub, Jerry unapologetically falls for Lise, a young woman who turns out to be the fianc\u00e9e of Henri, a professional entertainer and friend of Jerry's pal, Adam, an out-of-work concert pianist. Romantic complications ensue until the inevitable ending but not before several classic Gershwin songs are performed.

The best of these is the most imitated - a swooningly romantic song and dance to \"Our Love Is Here to Stay\" along a faux-Seine River in a blue hazy mist with yellow fog lights. The way Kelly and Leslie Caron circle each other is transcendent as they approach each other tentatively at first and then synchronize beautifully to the music leading to the final clinch. Few films have so elegantly and succinctly shown two people falling in love. \"I Got Rhythm\" and \"S'Wonderful\" spotlight Kelly's nimble tap-dancing and agreeable singing, while \"Embraceable You\" is danced impressively by Caron in a five-scene montage of Henri's all-over-the-map description of Lise to Adam. Designed to show off Caron's dancing versatility, the sequence is similar to the one in \"On the Town\" where Vera-Ellen showed off her considerable dancing skills when Kelly's sailor character described his multi-faceted vision of Miss Turnstiles.

As Lise, the nineteen year-old Caron (in her first film) dances superbly throughout and handles her role with unformed charm with her acting talent not to bloom for several years. Looking quite glamorous, Nina Foch plays older as the manipulative Milo and manages to be likable enough for us to care about her fate, while Oscar Levant is just his sardonic self as Adam. Performing an elegant \"I'll Build a Stairway to Paradise\", George Gu\u00e9tary plays Henri so agreeably that you feel bad that he does lose the girl at the end. This is not the best all-around MGM musical, but there is certainly enough movie magic to make this quite worthwhile. The 2000 DVD contains a fairly pristine print but little else in terms of extras.", "y": 1}, {"x": "The fact that there are positive comments about Dan in Real Life on the IMDb just makes me realize that their junket staff are hard at work trying to get people to watch this utterly horrific film.

I have no words, no idea where to start to describe the truly awful film I sat through last night - Dan in Real Life. Steve's characters in previous films led me to believe that I would feel something for his character and enjoy the dialog but like other posters I felt uncomfortable and embarrassed for the cast.

The dialog was so contrived, the family was this cookie cutter Walton's family and the film has been so many times before that I am shocked someone thought it was an original idea.

Do yourself a favor and take a pass on this terrifyingly bad movie and don't believe everything you read on the IMDb since the first comments were clearly written by folks sitting in a different theater watching a GOOD film.", "y": 0}, {"x": "Let's put political correctness aside and just look at this in terms of the numerous sex comedies that came out in the 1980's because I for one don't think this is any better or any worse than the others. Unless your some religious kook or an uptight female you can probably view a silly film such as this without getting all worked up about the content and I personally had a totally innocuous feeling towards this before and after watching it. Story is set in Albuquerque, New Mexico where a rich 15 year old boy named Phillip \"Philly\" Fillmore (Eric Brown) is naturally horny as hell and starts spying on the attractive maid that has just started working for his father.

*****SPOILER ALERT***** Nicole Mallow (Sylvia Kristel) is friendly to Philly but things heat up when his father goes out of town on business and she starts to flirt with him to the point where she invites him into her bedroom to watch her undress. Philly is awkward and doesn't know how to react at first but soon he goes for it and has sex but than to his horror it seems that Nicole has died from a heart attack! With the help from the sleazy chauffeur Lester Lewis (Howard Hesseman) they seemingly have buried her body but a note from a blackmailer shows up and Philly must get $10,000 out of his father's safe. Philly is shocked when Nicole shows up and he learns that the whole thing was an extortion plan set up by Lester and that she only went along with it because she's an illegal alien and if she didn't do what she was told Lester would have called the immigration office. Together they try to get his father's money back before he returns home and they enlist the help from Jack (Ed Begley Jr.) who is a tennis instructor but pretends to be a cop to scare Lester.

This little comedy was made for less than $3 million but it grossed over $50 million worldwide and made it one of the least likely films during that time to be so successful which prompts me to wonder why this was a hit and not any of the others in the genre. Director Alan Myerson can boast that he made a hit film but the truth is that he never really had a career in films although he did go on to be very successful in television. So...why did this become so successful? I have a thought that it just may be because of Kristel and before you decide that I'm crazy listen to my reasoning. Kristel was an international star because of her soft core films so that reason alone made many free thinking adults curious about viewing her in an American film that was getting a wide release. With that, the same adults would also be nostalgic about their own youth and the fantasy of being taught the ways of lovemaking by an attractive older woman which brings in the much younger audience members who are probably still very inexperienced and curious about the film. Anyway, that's my thought and if anyone has another reason I would love to hear it but back to the film itself it's apparent (and very sad) that a film like this could probably never get made again (except in Europe) because of the religious right and the other prudish freaks who just can't come to terms with the fact that a teenage boy getting laid will not do him any harm. In fact, it's a valuable service that ALL BOYS pray will happen to them! The film itself is clumsy and Kristel's body double is all too evident in certain scenes especially if you take careful note of the difference in their nipples. The story (although intriguing in it's basic form) is neither very funny or revealing so were left ogling the nude scenes that are really the norm for the genre.", "y": 0}, {"x": "\"Show me your boobies!\" is not funny, and certainly not on a channel that shows cartoons if you understand where I'm coming from. I don't want my 6 and 7 years old daughters thinking like that or hearing that. I find it sad that Nick hyped this crap THAT much and then that's what we get, stupid little kids acting like stupid adults. I know it's meant to be humorous but consider we out there that have sweet little innocent girls in K and 1st Grade who can't wait to see this. I had to comment on how disappointed I was when I saw it. My daughters won't be watching it. I'd love to block Nick but don't have the heart at this point but if Nick keeps putting out this kind of crap I'll have to.", "y": 0}, {"x": "An enjoyable game, which offers fun and easy game play and fair replay ability. Staying true to the comic and providing a low learning curve gives this game something not seen in most action cartridges today. Also, the narration and animated scenes used (though lengthy animations are replaced by slide shows on the Nintendo 64 version) use full advantage of the platforms' capabilities.", "y": 1}, {"x": "This is one of the greatest movies ever maybe even the greatest movie ever. I had forgotten about the movie for about 12 years. Until I saw an add on TV for ADGTH and it brought back fond memories of me watching it when I was a little kid. And when I watched it a few nights ago I became addicted to the movie. Usually I don't like animated family movies but this one is special it is the perfect family movie.

The ending of the movie always touches my heart and saddens me very much but that is what makes this movie amazing better than all of the garbage that is coming out for kid movies today. I mean the movie is G rated and it is about 2 dogs who are involved with gambling, there is a lot of smoking, drinking, murder, death and hell depicted in the movie. Which I Believe makes the movie from good to great. I mean movies today don't bring reality to kids and in this movie they did.

RIP Judith Barsi & Dom DeLuise", "y": 1}, {"x": "Two thirds of nearly 2,000 IMDb users who have voted on this film have rated it at 8, 9 or 10 and one user reports wearing out six videotapes (Was this a record, or merely a faulty VCR?). Although the film is primarily intended as a period piece it clearly has a quite unusual fascination. But for some reason I imagined it as largely whimsy and until recently never felt the urge to watch it. My mind was changed by Elizbeth Von Arnim's original book. My wife loves reading but her sight no longer allows her to read much so she borrowed it in talking book form. Such books are usually irritating to a companion who is busy with other things, but I gradually came to appreciate that this one was seductively soothing, although in no way syrupy, and was also very well written. I realised my wife would enjoy watching the film, and so decided to buy her the videotape. I am now very glad that I did, and would certainly recommend its purchase to anyone else who appreciates a quiet reflective work with no fireworks but with well constructed character development and a very successful pre-Mussolini Italian atmosphere. The story is set in the immediate post WW1 period and starts with two married London ladies who decide to pool their savings and enjoy a holiday together, away from their families, in a rented villa in Italy. Force of circumstances lead to this couple being joined by two others with very different characters and backgrounds. Its theme is essentially no more than the interactions that take place as their holiday progresses, not only between these four very disparate mature ladies, but also with the occasional male visitor. If you want action, thrills, dramatic sex scenes, natural or man-made disasters, or Harlequin style romances this would not be the film for you. But IMDb users have collectively and very emphatically demonstrated that none of these are necessary for a film to prove highly rewarding to watch, and if you care to give it a try you may, as I did, come to rank it among your much loved films.

It is fairly rare for me to watch a film of a book with which I am already familiar. In many cases I find this takes some of the pleasure away from watching the film, but here there is such a strong visual appeal in the setting that I actually found my pleasure augmented by the anticipation of seeing the next segment of the book, effectively unrolled before my eyes. (Perhaps Italy itself has some part in this, the last time I had this experience was when I was watching tales from Boccaccio's Decameron on TV.) Generally films of books tend to increase the dramatic level of the original work to ensure that the filmed version has an even wider appeal, but here if anything it is reduced in order to keep the viewers attention on the gradual character development rather than on any background events. This works very well, although changes from the book are few and basically the film remains true to the original story. Great credit is due to the Director, Mike Newell, and all members of the cast, particularly those well known British Actresses who play the four principal ladies.", "y": 1}, {"x": "We see a body of dead girl in a morgue with the coroner trying to close the eyes of the girl, but whatever he tries they won't stay open. After this we move into the future and we follow a group of former school friends who hide a terrible secret, but suddenly they start getting picked off one by one in many grisly ways. Through flashbacks we learn of this awful suicide of a shy girl who was trying to be one of the group, but she was shut out by them because they dug up her past and found out some weird occurrences. So, is she back from the grave seeking revenge?

Oh what a great and always spooky story! Well, that's what I hoping I could say. And 'hoping' was as good as it got. This is an forgettable, so-so supernatural horror flick that I actually watched before, but I went in thinking it was my first viewing. So to my surprise it hit me when I started picking up on certain things, but like I said it's quite a forgettable mix that it felt like a first viewing again. \"Nightmare' is just another type of it's field that adds a 'few' changes to the gruel. Oh, please give me something that's a bit more fresh. It doesn't have to be entirely original, but this is one formulaic and at times quite tired J-horror flick. Even though it strings along the usual ghost story involving you guessed right\u0085 an evil looking, vengeful chick spirit.

But in spite of my negativity of it being the same old, same old story and jolts. This one kind of entertains when its being grisly and popping in some creepy visuals. The deaths are vividly displayed with bite and some originality. While, the gloomy atmosphere alienates the audience with it's murky lighting. The first scene involving the spirit terrorising one of the girls is one blood-curdling experience, but really when it's not trying to shock you. I found it rather coma inducing and I thought about getting some shut-eye. That might be harsh, but it just didn't go anywhere of any interest between those shock moments. You could say that because the supposed mystery is really not much of one, the unsure story is just simply flat and the characters are a self-centred bunch that you don't really care what happens to them. The disjointed story should have focused more on the spirit than that of these bland characters who have one unconvincing group relationship. It just overplayed its cards by becoming overly muddled and taking too long to get going that when it comes to the climax it's just plain ludicrous. The film's haunting ending is a high point, though.

The film looks fine, although it could have done without the snazzy, quick fire editing and the music score was a bit overbearing in playing up the mood. The performances tread a fine line, but Gyu-ri Kim is strong in the lead role.

It's nothing new and it shamelessly steals ideas, but if you can look past that it delivers some nasty thrills. Although, I found the handling of it rather lethargic, despite the odd effective chills. A standard effort all round I guess, but still it's equally missable.", "y": 0}, {"x": "I give this movie 3 out of 10 because I have watched zillions of movies and I can tell clearly what an intellectual movie with a mind-teasing message should look like. Definitely, The Broken is not one of those movies. I have to admit that the movie made me think a lot trying to understand what the whole thing was trying to lead to and despite the explanations I've read in prior comments, they seemed only an exaggeration just to have one self in the intellectual league of people. the photo on the cover clearly shows that the Broken is the broken upper piece of the face which normally contains the brain. It's a clear message that once this part of the body is broken the rest will be deformed and lifeless. So, you start waiting on the movie characters to show their defected sides and this is not obvious in any of the scenes because the movie starts right away without any introduction to the characters and their lives before. Though we see the father holding a rifle when his children try to surprise him as if he is aware he has enemies but still this is not a very strong clue. Had the clues been planted more in the movie, one would have said about that it is a masterpiece indeed. But though the movie was so slow in pace, it was at the same time so empty with no metaphorical scenes at all. And the reuniting of the evil dad with the evil Gena at the end is a strong refuting evidence of the existential messages that some people spoke about in other comments. Furthermore, if Gena truly lives in the apartment as her brother tells her at the end, then how come she is the evil one? I bet I can defy any theory about this movie with so many questions that can only lead to one conclusion: This movie is a pretentious one and a waste of time. Obviously it shows someone trying to make out of a meaningless mystery something which is of no value at all. I am a huge fan of horror movies and specially slasher ones that some people call popcorn movies. Horror movies are not supposed to convey deep messages! They're supposed to uncover the beautiful mask of life and show you the other dark side of it which is the truest, I guess. Horror movies should have blood, screams, intensity, skeletons, body organs and parts. Because that is the real horror and it's never away from reality. I have watched almost all horror movies and I can prove that each one of them can be as real as the sunrising. Nothing is unreal as long as the mind had thought of. For instance, the horror movie \"Train\" with all the slashing and tensity of it and its similarity almost in everything with \"Hostel\", it speaks about a very real thing which is selling body organs illegally by abducting people in foreign places where no one would ask or search for them.

And even if we considered the Broken a movie that has an existential message, it is still very poorly presented and the least scary. I prefer the addiction message presented in Requiem for a Dream which went beyond drug addiction to highlight the fact that any kind of addiction whether for sex, TV, safety/being pampered, etc... can be so destructive and it scared the hell out of me. And those who always criticize horror movies for being meaningless and very commercial, are usually just bunch of people who get scared easily and simply don't like this genre but this doesn't mean that there are fans of such movies and that they have a lot to offer to the viewer from adrenaline turmoils, ecstasy, leadership lessons (believe it or not!), entertainment to most importantly the face to face interview with the essence of life, as ugly and scary as it may seems, Death!", "y": 0}, {"x": "I'm still trying to figure out if there was a point to this film.

For content that's supposed to be so 'rebellious' and 'controversial' the things that Maddox distributes to the students are awfully lame. Students seem to be easily swayed by vague anti-authoritarian sentiments and snippets of words illegibly scrawled onto leaflets. Rebel, everybody.

I suppose it would have been too much to ask to have a teenage rebellion film where a school fire alarm doesn't get set off.

Apparently a 'huge fight up on the football fields' is a fight that consists of two people.

Characters personalities seem to wildly vary at random. A football jock who Maddox was fighting (and who subsequently got a staple on the face) is all smiles and apologies the next day.

The fact that it doesn't come to any real conclusion of the plot makes me feel that the whole thing could have been fitted into a half hour after school special. If they had cut most of the attempted pseudo-glitch soundtrack.", "y": 0}, {"x": "I really liked this film. All three stars(Connery,Fishburne and Underwood) give credible performances;and Harris is enjoyably over the top. The lighting and shot angles in some of Harris' scenes make his face look truly diabolical. The surprising turn of plot at the end makes it interesting. Not a great movie, but an enjoyable one. I gave it 7 of 10.", "y": 1}, {"x": "The movie opens with a flashback to Doddsville County High School on April Fool's Day. A group of students play a prank on class nerd Marty. When they are punished for playing said prank, they follow up with a bigger prank which (par for the course in slasher films involving pranks on class nerds) goes ridiculously awry leaving Marty simultaneously burned by fire and disfigured by acid for the sake of being thorough. Fast forward five years, where we find members of the student body gathering at the now abandoned high school for their five year class reunion. We find out that it is no coincidence that everyone at the reunion belonged to the clique of pranksters from the flashback scene, as all of the attendees are being stalked and killed by a mysterious, jester mask-clad murderer in increasingly complicated and mind-numbingly ludicrous fashions. It doesn't take Sherlock Holmes to solve the mystery of the killer's identity, as it is revealed to be none other than a scarred Marty who has seemingly been using his nerd rage and high intellect to bend the laws of physics and engineering in order to rig the school for his revenge scenario. The film takes a turn for the bizarre as Marty finishes exacting his revenge on his former tormentors, only to be haunted by their ghosts. Marty is finally pushed fully over the edge and takes his own life. Finally, the film explodes in a crescendo of disjointed weirdness as the whole revenge scenario is revealed to be a dream in the first place as Marty wakes up in a hospital bed, breaks free of his restraints, stabs a nurse, and finally disfigures his own face.

The script is tired and suffers from a terminal case of horror movie logic. The only originality comes from the mind-numbingly convoluted ways that the victims are dispatched. The absurd it-was-all-a-dream ending feels tacked on. It's almost as if someone pointed out the disjointed nature of the film and the writer decided then and there that it was a dream.

Technically speaking, the film is atrocious. Some scenes were filmed so dark that I had to pause the film and play with the color on my television. The acting is sub-par, even for slasher films. I can't help but think that casting was a part of the problem as all of the actors look at least five years older than the characters they portray, which makes the flashback scene even more unintentionally laughable. Their lack of commitment to the movie is made obvious as half of them can't bother to keep their accents straight through the movie.

All of this being said, if you like bad horror movies, you might like this one, too. It isn't the worst film of the genre, but it's far from the best.", "y": 0}, {"x": "Elvira(Cassandra Peterson) is the host of a cheap horror show. After she finds out that her dead aunt has left her some stuff, elvira goes to England to pick it up, hoping it will be some money. But to her horror, elvira finds out that all her aunt has left her is her house, her dog and a cookbook. Elvira decides to settle in the house anyways, but with her striking dark looks and her stunning features, she will not be able to live in peace. All the neighbours are now turning the whole town against her, and with Elvira's outrageous attitude and looks, everyone better watch out, because Elvira is on Fire! I really enjoyed this movie, it's really fun to watch get Elvira into all these adventures, she's just great. The whole movie puts you into a halloween mood, sure, it's silly and the jokes are cheap but it's a pleasure to watch it. I would give Elvira, Mistress Of The Dark 8/10", "y": 1}, {"x": "The oddly-named Vera-Ellen was to movie dancing what Sonja Henie was to movie ice-skating: blonde, girlish, always delightful to watch, but not an especially good actress and usually lumbered with weak material. When I watch Vera-Ellen's sexy apache dance with Gene Kelly in 'Words and Music', I can't help noticing that her blouse (yellow with narrow red horizontal stripes) seems to be made out of the South Vietnam flag. For some reason, the very American Vera-Ellen starred in *two* musicals (made several years apart) set in Edinburgh, a city not noted for its tap-dancers: 'Let's Be Happy' and 'Happy Go Lovely'.

In the latter, Cesar Romero plays an American impresario who for some reason is staging a musical in Edinburgh. There's a vague attempt to link this show to the Edinburgh Festival, which is nonsense: the Festival is not a showcase for splashy leg-shows. We also see a couple of stock shots of the Royal Mile: apart from a few Highland accents, there's absolutely no attempt to convey Scottish atmosphere in this movie. The funniest gag occurs at the very beginning, when we learn that the title of Romero's show is 'Frolics to You': this is a cheeky pun that Britons will get and Yanks won't.

Vera-Ellen is, as usual, cute and appealing and an impressive dancer, but the very few musical numbers in this movie are boring and bad. The plot -- mistaken identity between magnate David Niven and reporter Gordon Jackson -- is brainless, though no more so than the plots of several dozen Hollywood musicals. Romero is less annoying than usual here, probably because (for once) he isn't required to convince us that he's interested in bedding the heroine.

The single biggest offence of this movie is its misuse of Bobby Howes. The father of Sally Ann Howes was a major star of West End stage musicals; his wistful rendition of \"She's My Lovely\" was a big hit in Britain in 1937. Here, he shows up in several scenes as Romero's dogsbody but never has a chance to participate in a musical number, nor even any real comedy. It's absolutely criminal that this movie -- with a title containing the word 'Lovely', sure to evoke Howes's greatest hit -- would cast a major British musical star but give him nothing to do!

The delightful character actress Ambrosine Phillpotts (whom I worked with once) shines in one restaurant sequence, and there's a glimpse of the doomed beauty Kay Kendall. As Vera-Ellen's confidante, somebody named Diane Hart speaks in one of the most annoying voices I've ever heard: it sounds like an attempt to imitate Joan Greenwood and Glynis Johns both at the same go, but doesn't match either. Val Guest has a story credit, but this movie doesn't come up to the quality of his brilliant comedies. The colour photography is wretched, though I realise that postwar Britain could not afford Hollywood's process work. 'Happy Go Lovely' is at utmost best a pleasant time-waster, with 'waster' being the operative word. I'll rate this movie just 4 out of 10.", "y": 0}, {"x": "This movie is a great way for the series to finally end. Peter (the boy from Puppet Master III) is all grown up and is now the Puppet Master. Well, this girl comes to destroy the puppets and learn Toulon's secrets but instead she listens to the story about the puppets. Most of this movie is footage from Puppet Master II, Puppet Master III, Puppet Master 4, Puppet Master 5, Curse of the Puppet Master, and Retro Puppet Master (sorry... But I guess Paramount wouldn't let them use scenes from 1). Personally I wish Puppet Master Vs. Demonic Toys would finally be made but the way this movie ends they basically say \"This is THE final movie in the series...\"", "y": 1}, {"x": "The Great Caruso displays the unique talents of Mario Lanza. He shows great acting capacity and is in top form as a lyrical singer, paired with Dorothy Kirsten, soprano of the Metropolitan Opera. Indeed, I dare to say that he performs some songs better than Caruso (check A'Vuchella from Tosti and La Danza from Rossini). The MGM art and music departments also did a good job. This movie could be perfect, were it not for the awkward presence of Ann Blyth; we see that she is trying her best, dressed in the fifties style in scenes just before 1920 - unforgivable. Lanza deserved a better leading lady, and Blyth should stick to less demanding productions. Also notice that Ms. Kirsten sings most of the opera duets of the film with Lanza, giving the wrong notion that Caruso had a kind of permanent leading soprano.", "y": 1}, {"x": "I suppose it was for Temple Matthews who written basically a remake even though there are few changes which just make it worse. SPOILERS: It is much similar to the original. Melody, Ariel's new daughter is threatened by Ursula's sister, Morgana. Morgana escapes, but keeps her promise to take Melody away from them. Did Ursula have a sister?! And she is not that great a villain as Ursula was. This is where there is similarity. Medoly is kept from the sea until Morgana is captured, but she doesn't know a thing about it, because it all happened when she was a baby. A wall surrounds the palace to keep her in and morgana out. She goes under the wall day to day to have a swim and talk with Sebastian, who is not as funny or fun as in the original. She finds a seashell with her name on it and runs away from home and to look for answers and finds Morgana. Here is a similarity; Morgana tricks Melody, making her happy by turning here into a mermaid. Meanwhile, Eric, Melody and King Triton look for her. To stay a mermaid she needs to steal the trident from Triton. So Melody does, because she does not know King Triton is her father. She makes friends with a penguin and a walrus and here is where it is awful. The penguins who live with them in an icy ocean, hate them because they are cowards. So they try to prove they are heroes and fail. That does not suit the little mermaid. And the dialogue during those conversations between the penguins and those two characters is ear-bleeding. you know why? Because the first had a great story. This one is not and is not magical. It is just an example of how bad many sequels are.

Melody finds them and they help to take her to Atlantica to prove themselves. When they take the trident, Ariel finds Melody with Morgana. Melody is angry at her mother for keeping her from the sea so she gives the trident to Morgana, then she shows her true colours once she grabs it. Poor Ariel and Melody are in her custody. The penguin and the walrus begin to prove themselves when they fight Morgana's shark friend. Sorry I did not mention him earlier. They finally prove themselves. Eric, King Triton and his soldiers arrive but are forced to bow down before Morgana by the power of the trident. Melody takes it, throws it to Triton and he ices Morgana (literally). Then Ariel apologises to Melody and thinks it is all her fault. It was not! Ariel did the right thing to protect Melody, but they never say so. Triton offers Melody to live in sea or land. She in fact has a \"better idea\". She uses the trident to vaporize the wall so humans and mer-folk can be together. Then everyone sings an awful song. THE END.

Whoever has seen it and likes this obviously has not seen the original. I do not dislike this because I am a teenager. I liked it when I was very very little. Then as I grew older I began to see what is bad about this film. young, young kids will enjoy it, but it is likely that when they are in primary school, they will forget about it. Normally I would think I over-judged a film and it was better than I remember when I watched it again, but not this one. It is even worse. Story is no exception. If you thought, by reading this that the story is good, read more of this comment and you will know the other bad points: Well, you know the story now. I am sorry for spoiling it for you, but I had to point out some bad parts of it. One of the worst things is the animation. Colour is awful. The original had beautiful colour. Watching this almost made me want to go blind. Even the illustrations and landscape design were not good. The original had beautiful, magical colouring and beautiful underwater landscape design and for land as well, making it a joy to watch.

The music is unbearable. Compared to the first, the music here is crap. Songs are not that well composed and Tara Strong (I think that is her name) who did Melody can not sing. She at times either sang too high or did not keep track for the melody in the song. So much for having \"Melody\" as a name.And the music is not at all beautiful or moving. Little Mermaid 1 won an Oscar for it and it truly deserved it. This one deserved a razzie award for worst musical score in a sequel if it would exist.

I did not like the voices. Several people who played characters from the first, did the same ones in this. Jodi Benson is a great singer, but now that she is older, no offence to her, her voice is too deep and not so beautiful anymore. And I am really disappointed in her and others who were in the first for being a part of this. If I was chosen for this film, just by reading the script, I can tell it would be a bad film. The characters are different now. Ariel is more wiser now, but annoying. They overdid her character, making her too mature. In sequels you are not meant to change the characters unless it is for a special reason. She was sixteen in the first. There is little chance she changes. That is the stage when you become the person you are going to be for the rest of your life. Screenwriters should think of that. They should think of the character.

Well, I suppose that is it for me. I hope you find my comment useful, because I am sure a lot of you will agree with my point of view.", "y": 0}, {"x": "***SPOILERS*** ***SPOILERS*** After two so-so outings (\"Magnum Force\" and \"The Enforcer\"), Dirty Harry seems to have regained his stride in \"Sudden Impact,\" a gripping thriller that wisely plays to its strengths: the charisma of Clint Eastwood, who also directed, and a story that spends just enough time on exposition and reserves its energy for the big scenes.

For once, the case takes Harry outside his native San Francisco (where he's again in trouble with his superiors for his \"shoot first, ask questions later\" tactics), to the hamlet of San Paulo. There, (WARNING: Potential spoiler) a group of lowlifes is being gruesomely murdered, one at a time, by a woman whom they gang-raped years earlier, and whose sister has been in a state of catatonia ever since the attack.

The killer is portrayed by Sondra Locke, and she makes the character of Jennifer Spencer an interesting mix of compassion and cold-bloodedness. Locke's cold eyes and frosty voice, when either trying to comfort her hospitalized sister or dispensing vengeance toward the rapists, are very effective in painting a portrait of a woman wronged whose years of suffering and rage are now beginning to bear deadly fruit.

The rapists are a despicable lot, especially the leader, who has \"psycho nutjob\" practically stamped on his forehead, and a lesbian who seems almost one of the guys, despite her anatomical inability to participate. The flashback scenes, while not graphically explicit, are nightmarish enough, and clearly intended to make the audience cheer for Jennifer as she kills her assailants.

Some will dismiss \"Sudden Impact\" as trash: a mindless, manipulative revenge tale. On a certain level this is true, but it's well-done trash. What works to the movie's advantage is the strength of the Sondra Locke performance, giving us a complex character whose wounds are more visible in her paintings than in her gestures or speech. What we have here is an action movie with a point of view.

You can take or leave the idea that some wrongs deserve to be punished by any means necessary, but as the mystery behind the slayings becomes clear to Harry (a realization that, wisely, is not spelled out with dialogue), he is presented with a choice -- what to do about a killer whose motivations he can sympathize with but whose conduct he is bound by law to not tolerate. This makes the story more interesting than the usual Dirty Harry fare.

The movie's other redeeming quality is Eastwood's direction. This is, after all, a Dirty Harry movie, and Eastwood knows the character better than anyone else. The movie is directed with style and wit, and edited to give the action scenes a big payoff. Some of the best \"Harry moments\" in the entire series are here, including Harry's best-known line, \"Go ahead -- make my day.\"

\"Sudden Impact\" is a movie that has the courage of its convictions in presenting a tale about a despicable crime and the brutal consequences that follow. It is also a riveting detective story, well made and well told. And it is certainly never dull. On those criteria, it succeeds tremendously.", "y": 1}, {"x": "Rather then long dance sequences and close ups of the characters which made the film drag on - the movie would have been better served explaining the story and motivations of the characters.

The marginalisation of Nubo, the minister, auntie, mother - and the dumbing down of the dynamic and IMPORTANT rivalry between hatsumo and mameha and hatsumo and sayuri made the movie lack any real depth. If you hadn't read the book you would not really understand why Sayuri loved the Chairman and why Mameha became her mentor at all.

Visually the film was stunning - and the actors all did the best with the C rate script they were given, but that was all that was good about this movie.", "y": 0}, {"x": "If you a purist, don't waste your time - otherwise, hold onto your hat and enjoy the adventure. I loved the Stewart Granger/Deborah Kerr version - I've seen it dozens of times, but this film is every bit as good, only different. I won't detail the differences because it would spoil the film. Also, it is a pleasure to see Alison Doody again (I'm a huge Indiana Jones fan), Patrick Swayze is good as Quatermain, and the supporting cast is superb. I find the quality of the supporting cast one of the trademarks of a Hallmark Production and this film was no exception. The cinematography is splendid and the score is perfect. If you are looking for entertainment, you won't be disappointed.", "y": 1}, {"x": "Some movies seem to be made before we are ready for them. As I watched this film, made in 1988, in 1999, I thought I was watching the O.J. Simpson debacle (although I have very different opinions about the innocence of the individuals in each situation).

The Australian news media, if this movie is to be believed, devoured the case of a possible infanticide and truth was left as an afterthought. It was scary to see the scenes of invasive, swarming media hordes, ridiculous accounts of half-truths and lies and debates over the supposed merits of the case by persons at all levels of society.

Equally appalling is the media's depiction as indifferent and uncomprehending of the technical information in the case. I do wish more was made of the issue of religious prejudice in the case (the accused are Seven-Day Adventists).

Today these circuses have become common but that makes the lesson only more important.

Streep is excellent as usual, and this is the best I've ever seen Sam Neill. The Aussie accents get a bit thick at times but not incomprehensible.", "y": 1}, {"x": "This was one of the funniest and greatest sitcom to hit national television. Its unfortunate that the show is not placed amongst great sitcoms where it truly belongs. The actors did a superb job and seasons one thru six were the show at its peak point. Although season seven was not as great when compared to the previous six, it was still funny. Season 8 was the real problem kicked in. Without Topher grace or Ashton Kutcher the show simply fell apart. Not too say, the other actors weren't great if any of 2 main characters had left such as Danny Masterson, Wilder Valderamma Kurtwood Smith, Debra Jo Rupp, Mila Kunis and Laura Prepon ( Don Starks and tommy Chong are great too) left the show it would have the same affect. And the inclusion of Randy ( Josh Meyers) didn't help either because he was not well received by the shows fans. I believe if the show ended a year ago it would have certainly gone down in history as one of the sitcom greats. Season 8 was a little dull but the finale was excellent. I am going to miss the show, i just hope i wake up one day to find out the show is back as That 80's show with the same cast because i am going to miss the hell out of it.", "y": 1}, {"x": "This movie is humorous, charming, and easily becomes a favorite for those who enjoy light entertainment. Hollywood is hardly the place for serious history lessons so I simply accept it as is. Bing, in his usual inimitable style, performs quite well as the blacksmith, Hank Martin, who by accident is transported back to another age, the time of King Arthur. The beautiful Rhonda Fleming is breathtaking as Alisande, or Sandy, the object of Hank's affections although she is betrothed to the brave and formidable Sir Lancelot, played by Henry Wilcoxon.

I just love that episode when King Arthur (Cedric Hardwicke), Sir Sagramore (Wm. Bendix), and Hank (Bing Crosby) dress up in tattered clothing and take to the high road with their knapsacks to experience the kingdom at firsthand. King Arthur's comment, \"I say, we are not alone\" while giving his scruffy garments a good scratch, is one of those hilarious moments in the film. William Bendix's portrayal is superbly ridiculous, not to mention his attempts at quaint \"ye Olde English.\"

The story is not deep but it's well done in my opinion and I enjoy it more each time I see it. It's great family entertainment too.

", "y": 1}, {"x": "There isn't a whole lot going on in this story -- just two men employing very different ways of handling memories of Vietnam. But what it lacks in premise, it more than makes up for in acting and realism. It's a quiet film about the bonds of friendship and shared experience. We even get romance (not gratuitous -- just another very real piece of this story). It's well worth seeing.", "y": 1}, {"x": "Growing up in a multi racial neighborhood back in the 20's and 30's, I grew up very close to most of the Italian families living there. This move brought back so many pleasant memories. this is a movie most people would like who enjoy seeing more true to life movies.", "y": 1}, {"x": "I do not know if this movies problems are more the fault of Direction or Script. As you will see in many reviews the editing style is way overdone. It is absolutely distracting and without substance, which could be considered a good thing if you look at some of the quotes from the movie. I do not write many reviews here, but felt this movie was so awful that it deserved comment. Movies like this erode at Movie making as an Art form. Movies like this one show more and more clearly that the current Reality focus in cinema is revealing the quality of the characters behind them. People hone there craft, there 5 senses, and there business sense - overlooking there own inner life. However I do not put blame on them, it is more and more the unfortunate condition of this age - qualified by films like this one. But by proxy these Manufacturers I would dare not call Artists vomit there lack of inner life or regard onto the screen - diffusing it to everyone. A story of bounty hunters, guns guns and more guns, heavy handed flaunting of sex - for the oh so popular actress (did they write the lap dance scene after they signed her?), over saturated, over exaggerated, one liners, non-linear plots. All different and yet all the same. Annoying overwhelming music to push the emotion down your throat. A story? a development of character? or just withheld, missing information, revealed at the end to create the *effect* of a story - as if one took place. It altogether lacks anything remotely resembling subtlety. It is a caricature of stereotypes and genre. Where are the films with Awareness? What about subtlety of sound and music that you are not even aware is there? What about the depth of a look? What about editing with a point about mind and consciousness? yes even in action films this can happen. Sure they have honed a craft; but what use is it without soul or wisdom? of insight into the human condition? Can the people who commented and said that this is an apogee of art, or compare this to Picasso and others - I say put this next to Gandhi or the Godfather, even the original trilogy of star wars or the lord of the rings; then look me in the face and say it again. It is a good crew, but they need some help with depth and story. I hope they get it because I like the crews previous work. better luck next time.", "y": 0}, {"x": "Mario Van Peebles pops up for less than a five second cameo. Glenn Plummer shows up a little longer but its a ladies show all the way. Stacey Dash and Lisa Raye have been in better projects. Bobby Brown leers and mugs through his little time on screen. This is how it was pitched...Five tough women shootin' and lovin' in the Wild Wild West. Four black and one Asian. Oh and Lil' Kim is a tough talking' heartbreaker and Marie Matiko can bring in the pacific rim market. We can shoot it for less than 15 million. Straight to video and we'll double but more likely triple our dollars.

Greenlight that puppy.

You got it boss.", "y": 0}, {"x": "I saw this film yesterday.. I rented the DVD from Blockbuster.. In fact, I know one of the actresses from the film.. I won't say who..! (That's kept under wraps..) But I must admit, it wasn't as good as I thought it would be.. Tom Savini? Hats down to this guy.. But it's a shame he wasn't in the film for long.. What lacks the film is the idea, the script, sound, etc.. It may look like a good movie.. but it wasn't that entertaining..

Well, I'm glad my Sister paid \u00a310 for renting 3 DVD's from Blockbuster.. I chose this one.. and I was disappointed. Anyway, thumbs down for me..! Not my cup of tea! 0 out of 10!", "y": 0}, {"x": "Remember a film you seemed to enjoy in the past that doesn't quite meet those same feelings as an adult? That occurred to me when I went back to school..the National Lampoon's Class Reunion. The film has a perfect opportunity for laughs, but surprisingly wanders aimlessly as we see a bizarre collection of characters such a woman who sold her soul to the devil and can shoot out flames of fire from her mouth, a man who appears to be a vampire, and a lunatic killer dressed as a woman and wears sacks over his head. You have the class president who believes he's the best thing since sliced bread(but as we see in the film, he's a coward and joke), a couple of pot smokers who don't even know they are at their own class reunion, and a man named Gary for whom know one even knew existed(and no one can seem to remember his name..this is the one running joke I enjoyed). There is a plump pervert who likes to grab women in inappropriate places, a deaf and blind woman who has a screeching holler when calling for her dog, and the cook(you know her from \"goonies\" and \"Throw Mama From The Train\")who loves to place food on people's plates with her hands! The film is essentially about a nutcase who is(or at least attempting to)taking revenge on his classmates for a gag they pulled on him(they arranged for him to sleep with his own twin sister!). The film follows the characters as they search for the killer canvasing darkened, trashed hallways of the old high school. They were told of the killer by his psychologist who seems a bit odd himself. The film has a few good gags that work(pretty much early on), but the film slowly gets worse each passing minute. The film's true problem is that it really doesn't know where to go. The film is pretty much a one-joke premise for it has unassured direction..if it really has any direction at all. The cast is enthusiastic enough, but the material they are to make funny just doesn't have the quality to hold any interest. It's a curio for fans of early 80's comedy relics that are forgotten(this one rightfully so).", "y": 0}, {"x": "In short:

Spike Lee clearly has a lot on his mind. He's thinking about racism color-ism, media and hegemony, consumerism and capitalism, religion, sexism, 'hetero-sexism', politics of the drug war etc etc...

That level of consciousness on is own is great. I think it is a blessing that more and more people are choosing to critically examine fundamental aspects of our daily lives; the silent and invisible forces that govern our societies. However, just because Lee is making contentious films does not make him a good film-maker.

What comes across in \"Jungle Fever\" is a superficial understanding of these socio-political forces. This is largely the result of two main failures:

firstly, Lee is simply trying too hard. He seems to be desperately trying to accommodate every political/social statement he can think of into the 90mins. And as such, the end result seems confused and irresolute as he allows himself no time to develop characters that can fully embody the ideas he hopes to present. And so he exhausts stereotypes and we are left with rushed testimonies and very loaded dialogs. The end result is very staged and unrealistic.

Secondly, by attempting to make statements about such a wide variety of societal functions, he appears to have no concrete or original interpretation of the social/political issues presented. What comes across is a puddle of regurgitated non-sense. You feel that he bought an elementary level sociology text book and spewed out all 500 pages.

These are highly problematic features because the artistry of film is sacrificed and the work is transformed into a loudspeaker for the voice of the voice of the filmmaker. He is unable to distance himself from the work, and allow it to speak for itself.

It functions neither as a piece of art nor a sound political argument.

Although I still do appreciate Lee bringing up these important issues, I must say:

Two thumbs down.", "y": 0}, {"x": "I've now seen this film twice, and I must say I enjoyed it both times. It's fast paced and fun, but ultimately daft. Having said that it deserves to be trashed because of screwing up what could have been a good follow up to the seminal original. It is clear for those who have seen the awful 'Zombie Creeping Flesh' that the films massive shortcomings can be owed to Bruno Mattei, and that the little that is commendable about it can be owed to Fulci. This is not idle Fulci sycophancy, the directors styles are starkly contrasted throughout, and you can tell who directed what, particularly in Mattei's case.

The film is centered around the outbreak of a virus (oddly referred to as 'top secret' by a scientist, it's secrecy apparently being more noteworthy than its potentially apocalyptic effect on mankind) somewhere in south east Asia. The virus causes zombie like behaviour in those affected, and the virus quickly spreads across a seemingly arbitrary area of land. Our protagonists unwittingly wander into the danger zone, and have to fight for their lives against hordes of infected Asians.

The film seems to be stuck half way between being a zombie gore flick, and an out and out action adventure, and this confusion is captured most clearly by the zombies themselves. They do not appear to have a set of characteristics common to all. Some are of the regular soulless shuffling variety, so well rendered in the original, and probably Fulci's creation here. The other main group consist of those who in being infected with the virus lost all sense of themselves, but incurred a savage aggression and a desire to earn a black belt in ninjitsu: Indecisively leaping around unsure of whether to continue honing their upper roundhouse technique or engage with their brethren in what looks like a mass tickle fest on their hapless victims. Martial arts skills aren't their only talents either, they are well versed in guerilla tactics, hiding on rafters and under bales of hay, and sometimes inexplicably falling from nowhere but the heavens themselves. This is all definitely the work of Mattei.

There is a third, more chatty, variety of zombie. This type apparently retain a sense of irony as well 'I'm really thirsty...FOR YOUR BLOOD'. The ridiculous twist at the end in which the DJ turns zombie but continues to preach ad libbed gibberish about the fate of mankind, only serves to enhance the WTF factor and obliterate any hope of a serious resolution.

Then there's the infamous zombie head which slowly propels itself through the air, a jokerish skeletal grin wrought across its face, as if to say 'yeah we know how bad this looks'.

The characters are all utterly one dimensional as you would expect. But its the pseudo comical dialogue and dubbing that really prevents us from taking their plight seriously. Having said that the first soldier to die does put up an impressively valiant display against an unstoppable zombie menace. Indeed this is the first and perhaps only time we hit real zombie agro, and one of the only effective scenes in the film.

The guy who played the chief scientist has heart, but no talent, utilising pauses in his lines entirely at random, so he ends up sounding like a confused asthmatic. The scientists' on screen attempts at finding an antidote are totally unconvincing 'now lets put these two molecules together!'

There are a few moments that stick out as genuinely effective however. In an early scene a female protagonist explores an abandoned garage. Upon entering a room we are confronted with a hazy view of a shifting figure in the corner and a squirming mass on the floor, all shot in an atmospheric diffused light. The silence is interrupted by the appearance of a speedy machete wielding zombie who trashes everything in his wake in his alarming desperation to have her. His sheer aggressiveness is one of the few moments of real horror in the film. The before and after theme conveyed through the hotel that plays host to the happenings of the earliest stage of the outbreak, and later as a refuge to our protagonists is imbued with an thick humid ambiance. There is a scene in which one of the soldiers cautiously approaches a boarded up room that clearly houses hordes of the undead, and this is quite tense. Things become more dramatic when they board themselves in the hotel unknowing to what lurks upstairs. But this is sloppily handled and not nearly as effective as it could have been.

All in all I would say this film may just about deserve to be called a royal screw up of a potentially effective tropical zombie fest, rather than simply a through and through bad film. If nothing else it has plenty of the unintentional laughs that I've come to expect from just about anything Italian and gory from the eighties.", "y": 0}, {"x": "don't see this. this was one of the dumbest movies i have ever seen. its hard to be Mormon sometimes when there are movies like this out there. what a sad view of Mormon life. i can tell you if you did see this movie that it is not all like this at all in a singles ward. if it was i don't think i would have made it through it. its too bad that most Mormon movies are made by a group of geeks who have nothing better to do. the acting was so bad that my wife and i barely made it through. i guess you could say that it had all the signs of a B movie. or are there C movies? anyway...i just thought this movie sucked and was full of cheese. i wish some Mormons would start making some quality movies.", "y": 0}, {"x": "Having ran across this film on the Fox movie channel on a lazy Friday afternoon, I can think of no better way to spend a lazy Friday evening then putting in my two cents worth. Especially when you consider the lack of user comments on it. Doesn't every movie, good or bad deserve more than four comments? And this movie isn't bad at all.

The first thing to keep in mind when watching a film like April Love is to remember the era from which it came, in this case the late fifties. Films were pretty much a happy medium back then. The cinemas were devoid of tragedy while the screens were filled with wide screen Technicolor films in order to pry people away from the gray glare of the evil medium in a box called television. I don't know how many people were pried away from the boob tube to see this one, but it managed to capture my attention for 97 minutes.

Teen Idol Pat Boone plays Nick Conover, a young teen sent to live with his Aunt Henrietta (Jeanette Nolan) and Uncle Jed (Arthur O'Connell) out in the country after being put on probation for stealing a car. It seems that his Aunt and Uncle have lost their own son (Jed Jr.)so Uncle Jed seems has lost his zest for living. Aunt Henrietta is hoping that Nick being on the farm will somehow bring Jed out of his doldrums. Story lines like this being what they are, Jed and Nick don't really care for each other too much of course. Jed then proceeds to meet up with the neighbors, Fran (Dolores Michaels)and Liz (Shirley Jones)Templeton. Immediately Jed develops a crush on Fran, and of course I don't have to tell you that Liz develops a crush on Jed. Then there's the matter of Uncle Jed's horse, a trotter who has turned wild and won't let anyone handle him since the death of Jed Jr. You could probably fill in everything that happens from that point on your own, seeing as how there are no real surprises. Doesn't matter though, you'll enjoy yourself anyway.

Once you get over the image of squeaky clean Pat Boone, as a supposedly bad boy, you'll have no trouble with the rest of the film. Considering that, Boone does turn in a surprisingly good performance as Nick. Certainly the role doesn't require much depth, but still it's a nicely done job when you would least expect it. As Jed, Arthur O'Connell is the perfect choice for the role. In the early going, he is unreachable and cold, but as he slowly warms up to Nick, we see that he's really a pretty good guy. Jeannette Nolan is a lot of fun as Henrietta, who is constantly playing the part of mediator between Jed and Nick. Shirley Jones takes a break from Rodgers And Hammerstein and gets a few opportunities to grace us with her singing talents. As Liz, she's gorgeous to look at, great to listen to, and quite funny at times. Dolores Michaels as Fran, who is a bit more on the wild side, is equally entertaining.

The best thing about April Love, is that there is not a true mean conniving character of any sort on the screen. Not one true villain in the whole thing. Everybody is so darn likable you can't help but enjoy the film. I truthfully find it quite refreshing, sort of like putting your troubles behind you and enjoying a summer picnic with friends. Think of it as the old Andy Griffith show with musical numbers, a little more plot, and wide screen Technicolor. The songs are a mixed bag, with the title song April Love being the best of them. Another thing I really liked is that they didn't fall back on using blue screen backdrops during the horse racing sequences, and they quite a bit more entertaining and exciting because of it. As a matter of fact, you'll find the whole film beautifully photographed and it was nice to see they didn't skimp in that department. The chemistry between Jones and Boone is good. Best of all is how the dislike between Nick and Jed is portrayed as each try in some way to gain the others respect.

This movie will never be confused with great cinema. Yet, sometimes instead of going to Disneyland, one just needs a nice outing in the park, and that's what April Love is.

My Grade: B+

", "y": 1}, {"x": "I admit to liking a lot of the so-called \"frat-pack\" movies. No matter how bad they are, I can find something to like about Ben Stiller or Owen Wilson or Vince Vaughn or Will Ferrell or Jack Black. But \"Envy\" just left me about as cold as the white horse that Ben disposed of. This time, it's Ben and Jack Black as a couple of nutty neighbors, one of whom (Black) discovers a aerosol spray to make animal poop disappear and becomes incredibly wealthy while the other (Stiller) writhes in envy. That's supposedly the plot, but then it veers off in other directions that don't really make much sense.

I guess the 'Vapoorize' thing is sort of amusing at first. The problem is, they try to sustain the gag for the whole picture (Black has a license plate that reads 'Caca King') and it gets fairly tiresome. But even Ben and Jack are used poorly; the energy level for both of their performances seems significantly dialed down. The two best performances by far are Rachel Weisz and Chris Walken. Walken's neo-hippie-dippie guy is so offbeat and so well-modulated a performance that it really never suggests any of Walken's other familiar nutcase characters. It's completely unique, yet comes across as unmistakably Walken. And Weisz is about the best actress in the business that nobody knows about. Even with limited screen time, she still dominates every scene she's in.

The whole crux of the so-called drama is that Ben, in a jealous drunken stupor, accidentally shoots Jack's prize white stallion, and then goes to ridiculous lengths to cover it up, fearing his best friend will find out and cut him dead. But the plot twist isn't believable because there's nothing about Jack's character to indicate that he would do such a thing. He plays such a sweet guy that it renders the whole excruciating horse chase null and void. You discount it completely. It's all filler. And what's the point of the out-of-control merry-go-round, except that Barry Levinson wants us to know that he's seen \"Strangers on a Train\"? The screenplay is painfully bad and the acting of the two leads poorly directed. Someone with Levinson's track record should know better. Maybe someone will invent something to make this film disappear. Oh, wait, they already have.", "y": 0}, {"x": "I think James Cameron might be becoming my favorite director because this is my second review of his movies. Anyway, everyone remembers the RMS Titanic. It was big, fast, and \"unsinkable\"... until April 1912. It was all over the news and one of the biggest tragedies ever. Well James Cameron decided to make a movie out of it but star two fictional characters to be in the spotlight instead of the ship. Well, onto the main review but let me remind you that this is all opinion and zero fact and the only fact that will be present is an event from the film.

So our two main characters are Jack (Leonardo DiCaprio) and Rose (Kate Winslet). They're not annoying too much but watch this and you'll find out why they could become annoying ( http://tinyurl.com/ojhoyn ). The main villain I guess is bad luck, fate, hand of God (no blasphemy intended), or just plain Caledon Hockley (Billy Zane). Combine all of the above and what do you get?! Oh yes! We get a love story on a sinking boat. The supporting characters are the following: My personal favorite, Mr. Andrews (Victor Garber)(idk he was so nice), Lovejoy(David Warner), Murdoch(Ewan Stewart), Lightoller (Jonathan Phillips), Captain Smith(Bernard Hill), Molly Brown(Kathy Bates), and many more. We also got the present day treasure hunter, Brock Lovett (Bill Paxton). They add something to the story, something good. The action in here is awesome, especially in the second half, the drama as also good. In the end you can have your eyes dropping rainstorms or silent tears. The story is simple and it works. A treasure hunter seeks the Heart of the Ocean and instead finds a drawing of a woman wearing the said diamond. She calls and tells her tale on the RMS Titanic. Two lovers separated by social class and ultimately, the fate of the ship. Everything about the story works and there are very few flaws. I give Titanic, an 86% awesome", "y": 1}, {"x": "Once again, Disney manages to make a children's movie which totally ignores its background. About the only thing common with this and the original Gadget cartoons is the names. The most glaring errors are the characters - Penny does not have her book, Brain has been reduced from a character to a fancy prop, Dr Claw is more a show-off than an evil villain, etc. but there are more than that. The horrors start from the first minutes of the film - having Gadget as a security guard called John Brown doesn't help identifying him as the classic Inspector Gadget. And right in the beginning we see Disney's blatant attempt to turn every story ever into a love affair between a man and a woman - they introduce Brenda, who only serves to make this movie Disney-compatible. Add to this the fact that the \"Claw\" seen in this film and the classic Dr Claw are almost diagonally opposite and you'll see this is going to be nowhere near the original storyline. What would help would be a better storyline to replace it - but as you guessed, Disney failed in that too. The whole movie is just Gadget acting silly for silliness's sake and lusting after Brenda. As if to add insult to the injury, Disney introduced the \"new\" Gadgetmobile - it doesn't look, function or think like the old Gadgetmobile at all, it's just the canonical \"comic relief\" figure. Disney obviously recognised that the Gadget cartoons were a comedy, so they made the film a comedy too, but they took out all the clever running gags (like the assignment paper exploding in the Chief's face) and replaced them with Gadget being a moron, the Gadgetmobile being a wise-ass, and \"Claw\" showing off. Someone should tell Disney that \"children's movie\" doesn't imply \"total lack of any brain usage\". Gadget should be targeted for children of 10-12 years... not children of 10-12 months like this movie. Whatever this movie is supposed to be, it is NOT, repeat NOT, the real Inspector Gadget. Because I love the old Gadget, I hate this.", "y": 0}, {"x": "wow, the Naked Brothers Band. What should i say. I guess i can say this show just sucks. number one: they have no talent, they probably can't even play the instruments. number 2: on the commercial it said they were famous but nobody even heard of them till there crappy show came on. Look, i really don't hate it that bad, i'd give it like a 4 out of 10, but what annoys me is how everyone says they have such great talent and Nat is SO deep and writes deep lyrics. Deep my ass! he talks about hardcore wrestlers with inner feelings. wow, i could read what it says on the walls of a bathroom and it would be more deep than that. And they didn't get famous by themselves, their parents are famous celebrities and wanted their kids to be too so they made up a bad show. i have a feeling that it will be canceled soon.", "y": 0}, {"x": "Until now, the worst movie I had ever seen was Ben & Arthur. You really should check the reviews for that movie instead of this one. The review statistics for this movie have been skewed positive through a relentless and unscrupulous push by some of the people involved in making it, evidence for which is fairly easy to uncover online. At least the people who made Ben & Arthur were honorable enough to let it stand on its own shaky legs, instead of unscrupulously promoting it so suckers like me would buy it.

Everything about this movie is terrible, the script, the story, the casting, the acting, the direction, the photography, the editing, the music... what else goes into a movie? Whatever it is, here it's as bad as it gets. If it weren't so unpleasant it would be ridiculous. I kept watching it thinking it must get better, because I hadn't yet discovered that none of the positive reviews for it are reliable.

It does not take a lot of money to make a great movie, nor does a low budget mean a movie has to be bad. My favorite example of a shoestring-budget masterpiece is Gus Van Sant's amazing Mala Noche, but there are many others. Sideline Secrets\u0097Director's Cut or original\u0097is bad not because the people who made it had no money, but because they had gigantic egos and no talent for anything at all except self-promotion.", "y": 0}, {"x": "I really wanted to like this movie, but it was just imposable. The acting was ultra hammy, the plot was annoying, and the pace was SLOW, sooo slowwwwww. The whole time sitting in the theater i wanted the movie to end. Twenty minuets into a films and I'm praying for an ending. Sure some of the visuals were nice, but c'mon guys, I mean really! And for a movie about a guy tuning magical instruments there really wasn't much music to speak of. The music there was was annoying, and boring. There were sound loud shrill sounds at times too, those were also annoying. Mainly this film managed to bore me, and creep me out at the same time.

I'm glad its over. I need to go see \"Tideland\" and wash this bad taste out of my mouth.", "y": 0}, {"x": "Certainly one of the finest movies I have seen for quite some time. Exquisite direction and flawless acting make this a very entertaining and often moving film. Denzel Washington plays one of his most engaging and emotional roles to date, and the rest of the cast perform beautifully. Christopher Walken is of course superb in his part although he did not appear as often as I would have liked. A story of ultimate greed that backfires is offset against a childs innocence and love. This is also a film for action movie lovers as it has its fair share of bullets, rockets and revenge. The location of Mexico City adds a feel of seediness and corruption which in itself is an eye opener. All in all, a truly gripping film from beginning to end. Highly recommended!", "y": 1}, {"x": "I absolutely LOVED this movie! It was SO good! This movie is told by the parrot, Paulie's point of view. Paulie is given to the little girl Marie, as a present. Paulie helps Marie learn to talk and they become best friends. But when Paulie tells Marie to fly, she falls and the bird is sent away. That's when the adventure begins. Paulie goes through so much to find his way back to Marie. This movie is so sweet, funny, touching, sad, and more. When I first watched this movie, it made me cry. The birds courage and urge to go find his Marie for all that time, was so touching. I must say that the ending is so sweet and sad, but you'll have to watch it to find out how it goes. At the end, the janitor tries to help him, after hearing his story. Will he find his long lost Marie or not? Find out when you watch this sweet, heart warming movie. It'll touch your heart. Rating:10", "y": 1}, {"x": "Recap: Full moon. A creature, a huge werewolf, is on the hunt. Not for flesh, not for blood (not that it seem to mind to take a bite on the way though), but for a mate. He is on the hunt for a girl. Not any girl though. The Girl. The girl that is pure (and also a werewolf, although she doesn't know it yet). Three, well check that, two cops (after the first scene) and an old bag lady is all that can stop it, or even knows that the thing killing and eating a lot of folks around full moon is a werewolf. This particular powerful werewolf, Darkwolf, is closing in on the girl. If he gets her, mankind is doomed. Now the cops has to find the girl, convince her not only that there is someone, a werewolf nonetheless, that wants to rape her, and perhaps kill her, but that she is a werewolf herself. And then they got to stop him...

Comments: This is one for the boys, the teenage boys. A lot of scenes with semi-nude girls more or less important for the plot. Mostly less. Well I guess you need something to fill some time because the plot is (expectedly) thin. And unfortunately there is little besides the girls to help the plot from breaking. One usually turns to two main themes. Nudity. Check. And then special effects. Hmm... Well there are some things that you might call effects. They're not very special though. In fact, to be blunt, they are very bad. The movie seems to be suffering of a lack of funds. They couldn't afford clothes for some of the girls ;), and the effects are cheap. Some of the transformations between werewolf and human form, obviously done by computer, are really bad. You might overlook such things. But the Darkwolf in itself is very crude too, and you never get to see any killings. Just some mutilated corpses afterwards. And there is surprisingly little blood about, in a movie that honestly should be drenched in blood.

I'm not sure what to say about actors and characters. Most of the times they do well, but unfortunately there are lapses were the characters (or actors) just looses it. A few of these lapses could be connected with the problems mentioned above. Like the poor effects, or the poor budget(?). That could explain why there is precious little shooting, even if the characters are armed like a small army and the target is in plain sight (and not moving). But hey, when you're in real danger, there nothing that will save your life like a good one-liner...

Unfortunately that can't explain moments when the Cop, Steve, the only one who knows how to maybe deal with the problem, the werewolf that is, runs away, when the only things he can be sure of, is that the werewolf is coming for the girl, who is just beside him now, and that he cannot let it have her. But sure, it let the makers stretch the ending a little more...

But I wouldn't mind seeing none of the lead actors/actresses get another try in another movie.

Well. To give a small conclusion: Not a movie that I recommend.

3/10", "y": 0}, {"x": "OK, I am not a professional movie critic but come on...a true story!!!!

They are tunneling under another store to get underneath the bank and stumble across a tomb. At tomb with a passageway which goes directly under the bank.

OK, I'll play along.

But then they get into the bank and decide to go to sleep. Yeah!!! I am sure with all the adrenaline pumping through them they are going to just fall asleep.

This blows the whole picture!!!! How lame!!!!!

Glad I didn't have to pay to watch this one.", "y": 0}, {"x": "Let's think people , quit bad-mouthing the original , for it's time the original Battlestar series was a masterpiece , even still with all the stars , story lines and art . Lorne Greene was great as Adama and Richard Hatch was perfect as Apollo and Dirk Benedict was funny as Starbuck , but I dare say , not as pretty as Katee as Starbuck .

I loved the episode with the Pegasus and Greetings from Earth was good John Calicos was great as Baltar , War of the Gods , the best was Experiment in Terra , I thought that was a tribute in a way to Heaven Can Wait , then you had the women of Battlestar , not to compare them to let's say Tricia who is outstandingly beautiful as Number Six , but Jane Seymour's beauty could not be compared to . Let alone Loerrta Spang as Cassiopea was fantastic .She had beauty that a rainbow would be embarrassed by . I loved the original as much as the new .

Can you imagine if John Calicos had a number six ? :)

Thankyou for listening .", "y": 1}, {"x": "Knowing when to end a movie is just as important as casting, directing and acting. And it's nice to see when a director/script get it right. Clocking in at just 82 minutes, 10 ITEMS OR LESS doesn't stretch the story, trying to grasp at inane topics. It stays focused, being funny, sad, and well thought out.

Morgan Freeman (LUCKY NUMBER SLEVIN) stars as \"Him\", an aging actor grasping at any roles presented to him. We're introduced to \"Him\" as he travels to a supermarket in an out-of-the-way section of town by The Kid (Jonah Hill, CLICK). Realizing he has a star in his car, The Kid pressures Him to talk about his absence in cinema over the past few years. Him isn't very forthcoming because, not only has he been out of it for while, he's also en route to a shooting location of an indie film he might act in (\"I haven't decided if I'm going to accept the part.\"). The Kid is a relative of the director involved in this indie venture and soon drops him in the middle of nowheresville. Stuck, Him decides to check out the local market. He immediately runs into the beautiful Scarlet (Paz Vega) who operates the 10 items or less register. Not just strikingly pretty but intelligent, Him begins using her as his prime research subject for his upcoming independent film role. He learns how she figures out numbers so quickly and why she knows the quirks of every member of this isolated community.

But Him doesn't just use Scarlet, he helps her so he can see deeper into her life. They travel together to get her car back from a cheating husband, and he teaches her how to act to get a new job she's pining for, and how to dress for success even when confronted with Target as the epitome of local clothing. This is probably one of the funniest moments as we get a glimpse of Him, too, showing his complete lack of understanding of the chain-store retail world (\"These shirts are only $12 bucks! How is this possible?!\") The ending, as stated at the beginning of this review, is abrupt but apropos. There's no way these two could ever remain friends even though they form a unique bond. They know when to say goodbye and what each garnered from the other. It's a quiet but riveting moment as Scarlet's clunker car sits idling outside Him's L.A. mansion.

This is a great independent production and one that wastes little time getting going. And it won't waste your time either.", "y": 1}, {"x": "From the pen of Richard Condon (The Manchurian Candidate 1962) comes this muddled tale of political intrigue and assassination. The story, told in almost comic book fashion is difficult to swallow. All-star cast considered, this poor effort is not entirely the fault of the cast and crew: the novel was replete with the same short-comings. It seems as though at times the story is actually mocking the more sincere effort put forth in \"Manchurian Candidate.\" A disappointment on all counts.", "y": 0}, {"x": "The wife of a stage producer in London hopes to fix up the American song-and-dance man starring in her husband's latest show with an acquaintance, an American girl who makes her living modeling fashions in society circles. Unfortunately, the couple has already met on their own, with the girl thinking the guy is actually the show producer married to her friend (the fact he's not wearing a wedding ring should have discouraged any misunderstandings!). Wafty Fred Astaire-Ginger Rogers musical is eventually dragged back down to the earth by Dwight Taylor and Allan Scott's idiotic script, which is full of juvenile behavior. Astaire and Rogers don't just 'meet cute'--they meet ridiculously (he's tap-dancing like a madman in the hotel suite above hers and she complains). Audiences of 1935 probably didn't care how these two were going to get together--as long as they did so, and happily. Seen today, the central characters appear to have no motivation to end up in each other's arms: he plies her with flowers (after telling his friend he wants to remain \"fancy free\" in the love department) and she gives him the brush-off. Nothing that a little dancing couldn't cure! This glamorous twosome are as deliberately unreal as are the London and Venice settings, but we watch simply because the leads are Fred and Ginger. It's a fantasy for have-nots...ones who don't mind the dumbed-down plot. The musical moments do break up the monotony of the contrived scenario, yet fail to transcend the surrounding silliness. ** from ****", "y": 0}, {"x": "This movie should be shown to film school students as an example of what NOT to do. The original kicked some major tire squealing butt, this horrible disaster breaks the cardinal rule of Bruckheimer films, which is: we all know they suck, but they have great action. This film has NO ACTION. This film is BORING. Where are the cars? Where are the chases? Where's the tension? Where's the suspense? Where's the rush? Where!!?? This isn't really a movie at all, it's a bad commercial. 50 cars in 24 hours? That is wrong. They have 3 days to steal them, the ad is wrong. How bad is that? The leads acting is stiff, wooden and forced. The villain, the cop, the others...who cares. They utter their pointless lines, they serve the illogical plot. They slog through it the best they can as the music video director says \"don't worry we'll make a lot of fast cuts and no one will notice how bad the film is\" or \"we'll fix it with lots of loud music\" The \"script\" isn't really a script at all, it's more like a list of cliches with an ending that is a total ripoff of: -------Warning - possible spoiler------ 5------4-----3-----2-----1------ The Fugitive. The biggest crime of all is the underuse of Vinnie Jones, man....this is the baddest, coolest mofo since Jules in Pulp Fiction. And what do they do!? They make him a mute who's hardly in the film! Make Vinnie the main villain and he could have saved the film. How could they have been so dumb? How? How? Why? The original film is very entertaining with a cool trick at the end that gets the driver away. The original has a great 40 minute chase that delivers! Go find the original. Or if you're craving some real car chase action go rent RONIN. The chases in Ronin raised the bar by which all other car chases will now be judged. Bruckheimer and Cage had all that money, all those resources, all that experience, and they can't even come close to matching a film made 25 years ago for $250,000? How can that be? You feel like you got ripped off after seeing this movie. Where I was once excited to see Coyote Ugly, Remember the Titans and Pearl Harbor, now I say: God help us all.

", "y": 0}, {"x": "Oh, CGI. A blessing when used properly. A sin with it's used by people who have no idea what their doing. Sadly, that's not the only thing that's used poorly in this umpteen Jaws rip-off.

Ok, anybody who has read any number of my posted reviews has probably noticed 2 things. 1: I like low-budget horror movies. And 2: If there is a cute guy in said low-budget movie, I'll usually point them out. So, let's just get this out of the way right now. This is one low-budget horror movie I didn't like. The acting, for the most part, is horrible, effects laughable, and the script rivals Battlefield Earth as the worst I've witnessed this year. As far as the resident cute boy...Dax Miller (Bog) wins that prize hands down. This boy is hot! And surprisingly, he's not just a toned body with nice eyes and a cute butt...he can actually act (well, as much as he can in this odious film). Now that we have the housekeeping chores out of the way, let's get on with it.

In Cliff Notes version, here's the story (don't worry, I'll try not to give anything away)...

A film crew travels to a remote island to film a documentary about two surfers (established cute boy and his buddy) who surf with sharks. Unknown to them is a rather large salt water crocodile lurking around the island. Croc shows up, mayhem ensues, and people are eaten. Roll end credits.

As I said earlier, this film pretty much blows. It started pretty well, but soon devolved into being silly and stupid. A main character becomes lunch (in a rather humorous way), and our remaining heros utter one-liners at the victims expense. Also, if this croc is at the top of the food chain on both the land and in the water, what's with all the sharks around? If this thing can eat a 40 foot boat, I don't think a few skimpy sharks would stick around. The FX is some of the worst I have ever had the displeasure to see. The CGI is horrendous, and they've even managed to screw up the animatronic crocs. Attention, filmmakers. National Geographic. Discovery Store. The Croc Hunter. They know what crocodiles look like. You obviously didn't reference any of these judging by the monstrosity seen towards the end of the film. And what's with the pirate/drug pusher gang? Did you just need another reason to rip off a woman's top?

It's funny how we get little sub-genres in the movie world. With Alligator and it's sequels, Lake Placid, Crocodile, and now Blood Surf, it now looks like \"over-sized crocodile/alligator\" movies should now get their own category at Blockbuster. Alligator was good. Lake Placid was good. I even thought Tobe Hooper's Crocodile was good. Blood Surf, sucked.

My grade: D-", "y": 0}, {"x": "Origins of the Care Bears & their Cousins. If you saw the original film you'll notice a discrepancy. The Cousins are raised with the Care Bears, rather than meeting them later. However I have no problems with that, preferring to treat the films as separate interpretations. The babies are adorable and it's fun watching them play and grow. My favourite is Swift Heart Rabbit. The villain is a delightfully menacing shapeshifter. I could empathise with the three children since I was never good at sports either. Cree Summer is excellent as Christy. The songs are sweet and memorable. If you have an open heart, love the toys or enjoyed the original, this is not to be missed. 9/10", "y": 1}, {"x": "Naturally I didn't watch 'GI Jane' out of choice. I was more or less forced to watch this film round my ex-girlfriends house.

GI Jane loses its credibility straight away by trying to convince the viewer that it is potentially a real scenario, which of course it isn't. The result of this is that the story becomes automatically bound by constraints, restricting the amount of humour (of which there is none) or entertaining action scenes, and soon becomes too serious. The film therefore becomes extremely boring and predictable.

'GI Jane' fails where other action films succeed, mainly because films such as James Bond, Dirty Harry and various others are larger than life, yet never proclaim to be otherwise. They are escapism, and therefore entertaining. 'GI Jane' tries to be real and fails.

This is a very disappointing film from Ridley Scott, with a very non-credible storyline, unremarkable acting, and the only reason I give it 2/10 instead of 1/10 is for some of the technical work.", "y": 0}, {"x": "I, also having endured hundreds of children's movies in the past, consider this to be one of the worst I have ever seen.

1) I resent in this day and age having to explain to my children that Russia is not \"the bad guys\". Also, that mocking Russian names like \"Poopchev\" is inappropriate.

2) The grandfather fly's birthday party scene contained a quasi-sexist joke in which he implied that males drink beer and women talk on the phone. Two other flies also needlessly use the word \"crap\" twice.

3) The whole movie largely smacks of 1950's stereotypes and propaganda that I thought we, as a nation, were proud to have risen above.

In all it's just crude, badly animated, even more badly written and not worth wasting the time to view.", "y": 0}, {"x": "What's up with Robert \"Pretentious\" Altman? Was he saving on lighting? Everything was so dark in this boring movie that it was laughable. I mean, have you ever seen a lawyer's office where everyone works by candlelight?

Don't waste your time. In fact, don't waste your time with anything Altman makes: It's all a pretentious waste of film.", "y": 0}, {"x": "A question for you : A family go to a new house and get stalked by demonic forces . Which film am I talking about ? Every horror film you`ve seen ? Yes that`s true but that`s not the answer I`m looking for . I`ll narrow it down by saying there`s a lot of teen angst scenes . Doesn`t help ? Well there`s lots of bits where the characters are stalked by a creature and you see the characters through the creature`s POV . No futher forward ? Okay there`s a dream sequence involving lots of blood ? Could still be any horror film you say . Oh gawd this could take weeks so I`ll say the film I`m talking about features loads of Aussies many of whom have appeared in NEIGHBOURS and HOME AND AWAY . Yes that`s right the film is THE THIRD CIRCLE ( aka CUBBYHOUSE ) and do you understand what the above exercise is about ? It`s about me pointing out how THE THIRD CIRCLE is absolutely no different from any horror film that`s been made", "y": 0}, {"x": "The definition of an abomination as defined by Webster's Dictioary is \"a cause of abhorrence or disgust.\" If someone can think of a more appropriate word or definition than this for Alone in the Dark, please let me know because this is the best I can come up with. However, I do no feel that in anyway this word describes how truly awful this film is.

I went to see this film with two of my roommates. One has very similar tastes to me, the other is an action/adventure flick guru. This latter guy usually doesn't care about the size of the plot holes, as long as the movie contains lots of explosions he will walk away satisfied.

That being said we entered the theater for the Friday viewing of Alone in the Dark. Little to my surprise we were the only people in the theater. When it started I knew why immediately.

It begins with the worst opening scene of any movie, and unfortunately I have to admit it only gets worse from there. The opening scene is a 5 minute scroll text that is narrated. Yet, I understand why it was narrated. The director must have understood that only illiterate people would even ascertain the thought of PAYING to see this movie. Yet, not only is this first scene the longest scroll text in the history of cinema, but it also makes no sense. It seems as if in the same sequence we are hearing about to completely separate movies. One is about an ancient civilization and its tampering with a portal, the other is about a crazy scientist and his experiments on orphans. If you are reading this and are confused, you are not alone.

Then the awful storyline, acting, effects, and camera work begin. Tara Reid is horrendous as an actress. She does nothing to even for one second make you think that she is a museum curator. Slater is just bad, not convincing, and has no chemistry with Reid.

The plot is probably the worst thing ever created by man. The entire time myself and the roommate with similar tastes are asking questions like: What is this? And what is going on? Other than this scrolling garbage we have a few narrated sequences by Slater himself. Are they good? NO. Do they explain anything? NO. Do we at any point as an audience have the slightest inkling as to why we should care what happens? Once again, NO.

Then we have a random sex scene. We are told that Slater and Reid are together, yet at no time do they act as though they even care about on another. But then BAM...sex scene. Once again I don't know.

A good, oh i don't know, 30 seconds after that woeful scene ends we have a gunfight with 20 or so military and a similar number of alien things. This is set to a heavy-metal track and causes more brain hemorrhaging than one ever thought possible.

And if that wasn't enough...

There exists no main villain. There is the scientist and there are the \"alien\" things. At one point the scientist controls the alien things and stands on a hill commanding them to attack the military outpost. Why? How did he become the supreme commander of these things? Why do they listen to him? Once again I have no idea.

The movie ends with Slater and Reid walking in an evacuated city. Why was the city evacuated? Did the alien things break through? Did the military tell them? Who knows...and by this point who cares? I didn't and you won't.

But to top it off, Slater and Reid are attacked by an alien thing. Even though it was stated that alien things will be killed by exposure to sunlight. And thats right, you guessed it, it the middle of the *&%$ing day and it's bright as can be. Maybe the alien thing bought a pair of sunglasses, I don't know and I don't care.

Now after the movie ended I ran outside the theater, all 6 foot 6 inches of me, waving my arms and shaking my afro telling everyone not to go see this movie. Even my gung-ho action/adventure roommate (who would consider a movie that just cut and pasted 2 hours of explosion into 1 film to be the greatest thing ever created) admitted that plot holes were very evident in this film.

To sum up this CRAP-FEST i give it a 0.0/10 and would give it lower if I could.

Unequivocally, the worst movie ever made. I wouldn't wish this movie on my worst enemy.", "y": 0}, {"x": "I was really surprised with this movie. Going in to the sneak preview, knowing nothing about the movie except for the one trailer I'd seen, I thought it was going to be a Dude Where's My Car kind of crap fest. I was expecting bad sex jokes and farting and a pathetic lead character who will get laid in the end because that's just how movies work. Instead I got a smart, surprisingly original movie about a decent, average guy who just never had sex.

Yes, the film is chock full o' sex jokes and vulgarity and the occasional hey-look-a-nipple!, but it's done much in the spirit of Bad Santa rather than Sorority Boys. All the characters are people you probably know in real life, redeemable friends who are just trying to hook a brother up and live their lives.

I went in thinking this movie was going to be total crap, and I was very surprised. Yea, it's pretty over the top (c'mon, it's a movie about a 40 year old virgin!), but it's very smartly done.

In the end, you're really pulling for this guy to get laid, which says a lot about the movie because honestly, did you really care if Ashton Kutcher found his car or not?", "y": 1}, {"x": "\" Now in India's sunny 'clime, where I use to spend my time as a soldier in the service of her Majesty the queen . . . \" so goes the famous poem penned by Rudyard Kipling. This is the literal foundation upon which the movie \"Gunga Din\" is based. If you are fortunate enough to watch this legendary Classic, you will enjoy films the way they use to make them; for the sheer pleasure. Taken from the script of the established novelist and poet, this is a story of a humble Indian native named Gunga Din (Sam Jaffe) who works as 'a regimental beasty' during the British occupation of India during the 18th century. His greatest wish is to become a soldier. The water boy is part of a British Calvary contingent threatened with death by a notorious blood cult of Kali called the 'Thuggee.' Three particular soldiers stand out in this company who are noted for their bravery and comradeship. First is handsome and debonair, Cary Grant playing Sgt. Archibald Cutter. Next is Victor McLaglen as courageous Sgt. MacChesney and finally there's flamboyant Douglas Fairbanks Jr. as Sgt. Thomas Ballantine. All three and their fellow soldiers are surrounded by a hoard of mountain stranglers led by their fanatical leader called the 'Guru' (Eduardo Ciannelli). Amid the Chaos of war, is the brave water-boy who hopes to earn a place in the army by playing a bugle he found. A solid story for an old black and white film which needs little fanfare for anyone looking to enjoy a classic. ****", "y": 1}, {"x": "Although I was born in the year that this movie came out and had never heard of it until my junior year of high school (1996) when I saw it I became totally engrossed laughing and crying and feeling along with the characters because me and my friends were them.

Their hair, clothes and speech were outdated but the emotions and the desperation of each situation were so familiar! I remember thinking how real it was and how I wished that they would make movies like that still.

In fact I saw this movie the night after I had been at a crazy party (not so unlike the one in Jay's house) which had been crashed by what we considered the loser derelicts who hung out on the fringes of our crowd. A world class BS'er and \"responsible\" mother figure type I identified immediately with Jeanie (I was also the one with a car) although I had a little bit of Madge's insecurities floating around in there too. My best friend was a Deidre and her good friend from childhood was our Annie.

Watching the scene when Jeanie is in school or the one where her and her boyfriend break up and then she is telling Madge how much she loved him felt like conversations and situations I had personally had.

Now at the age of 27 I recently saw the movie again and felt a surge of emotions because it was like watching back a piece of my own youth (though none of my friends died). I think this is a must see for all girls 13 and up.", "y": 1}, {"x": "I just watched this film again and remain dismayed at the number of cynics who dismiss it as just New Age pap. A great film, one that takes its time to develop, it keeps coming close to going over the edge but never does and ultimately is meditative, affecting, and truer to life than most films people who dismiss its \"coincidences\" can see. I was angry at the time that movies like \"Prince of Tides\" and \"Bugsy\" (though I liked the latter) were nominated for best picture that year (let alone that \"Silence of the Lambs\" won!) and this was ignored completely except for one nomination for best screenplay. Upon revisiting it, I think history supports my initial reaction!", "y": 1}, {"x": "This was on the 30th Anniversary DVD for Blazing Saddles, itself brilliant, but not this. Nowhere did I see Mel Brook's name on here and I can guess why, he's got a lot more sense to not be associated with this pilot. My gawd, who would find this funny. Sure there may be a race issue but for me it just wasn't funny, well cause it's simply not funny. It's like the writers didn't even try to be funny, just to cash in on being tied with Blazing Saddles. Did they expect this show to go for several seasons when they made this pilot? Flat out, they didn't care. It was a quick cash cow which thank god didn't cash out. I guess it's useful for historical purposes only, or only to demonstrate how stupid and unimaginative Hollywood writers can be.", "y": 0}, {"x": "Paperhouse is the most moving and poignant film I've ever seen. Often classed as a \"horror movie\" this, I believe, is a grave error. Some journo once called it \"the thinking person's Nightmare on Elm Street\" and while I accept the logic of his conclusion I can't help but think it's a tag that is ill deserved and misleading. Those that can only see horror are truly missing out here and only serves to demonstrate they're really not thinking at all.

In fact, just attempting to classify this wonderful work is probably a bad idea. Quite simply, Paperhouse is perfect in every exquisite detail and will always have a special place in my heart. As someone wiser than me once said, \"the film hits you on a completely emotional level\", which may go some way to explaining why my comments are so unrelentingly gushing. To be honest, I make no apology for this so if you feel my words are too saccharine for your taste, stop reading now because there's more to come.

It's so rare to find a film that has at its heart the pain and heartache of childhood and the struggle to overcome the dreadful feelings of isolation and loneliness that can completely overwhelm us at this fragile time in our lives. Even more unusual to find child actors who can actually play their roles with the sensitivity and intelligence required to make it all work. In Charlotte Burke and Elliott Spiers we had an inspired piece of casting and the lasting impact of Paperhouse owes much to their ability to portray the melancholy and alienation of childhood (often overlooked) in a seamless and convincing way.

And yet both of these brilliant young stars seemed to have slipped through the grasp of the studios and have somehow faded away.

Add to all this an incredibly talented director (Bernard Rose), imaginative cinematography and the most beautiful and haunting soundtrack you're ever likely to hear and you may start to get an inkling of why I have such affection and affinity for this film that no amount of words can express.

", "y": 1}, {"x": "Just after the end of WWII Powell & Pressburger were asked to come up with something to try to heal the rift developing between the UK & the USA. At the time there was a lot of \"Overpaid, over sexed and over here\" type of comments. Somehow they came up with this masterpiece.

My favourite movie of ALL time. It's got everything. Romance, poetry, emotion, religion, drama and very quirky.

I can never explain exactly why, but it hits all the right buttons and although I've seen it hundreds of times (yes, really) I'm still guaranteed to be in tears at many points throughout.

Was it the magnificent acting, the wonderful sets, the inspired script ? Who knows. But *DO* watch it and you'll see what I mean.", "y": 1}, {"x": "This is a feel good film, about one person's dreams and the drive or push to realize them. It is a beautiful and inspirational film. Why do some people have to try and find fault with every film that comes out, especially the good ones. Dennis Quaid gives a good solid performance in this true story of Jim Morris, a science teacher and high school baseball coach who is pushed by his team to take one more shot at a professional baseball career. With excellent supporting cast, including Brian Cox, as the crusty old ex navy officer who has let so much of his son's achievements go by without his support. It was good to see him as something other than a villain in a film. If I have one complaint with this film it is this: Don't ever let Royce Applegate sign the national anthem again.

Seriously, this film belongs to that handful of great baseball films like \"Field of Dreams\" and \"The Natural.\" It rates two thumbs up and a big \"well done.\"", "y": 1}, {"x": "Was this a comedy or was it a drama? I begin this review by asking this question because the film that I just witnessed, Hollywood Shuffle, was neither funny or rather dramatic. While it tried so hard to make a point, because of this lack of definition (comedy or drama), the clever themes and pointed remarks were lost. While I am a strong believer that there is too much racial profiling happening in Hollywood, even today, I do not believe that Townsend's directorial debut did much to stop it. Instead, I feel it only added more fuel to the fire. Townsend's comic timing in this film was disastrous due to the fact that the elements he was supposed to be making fun of, he was instead promoting and vice versa. The parts that were supposed to be serious were somehow destroyed by the poor lack of funny comedy. Townsend had a decent concept with this film, but sadly the execution is what ultimately hurt this film. If you watch the preview before the film (which I constantly do), you will immediately get the wrong impression of what you are going to see. The preview gives the impression of a very intelligent, comic film that prides itself on the intelligence of the viewers, but the actually film could not be further from the truth.

The main problem with Hollywood Shuffle is not story itself (because it is lacking in elaboration); it is Townsend's direction. He had a wonderful concept with this film. Exploit the Hollywood that exploits our race. Decent idea, but why couldn't he execute it very well? The first reason is that his ideas are too random and sporadic. The structure of this film was like watching a heart attack on a monitor at the hospital, we are literally everywhere without any warning or map. It was obvious that Townsend had quite a bit to say, but only a short amount of time to do it in. So, instead of defining his characters, developing his themes, and actually creating a smart film, he just throws it all together and prays that it works. Sadly, it doesn't. Instead of a smart comedy, we have a hodgepodge of so many ideas, comedic skits, and underused actors that this film goes from decent to nearly unwatchable. What hurts Townsend the most are his brief, attempt to be funny, interruptions throughout the film. From battling a villain known as Jerry Curl to parodying Siskel & Ebert, Townsend's attempt to poke fun while speak a message about the film industry falters. This is because these small intermittent skits actually distract from the central focus of the film and actually destroy internally. While Townsend seems to be trying to make a joke about life in Hollywood, he actually is simply connecting to every stereotype and clich\u00e9 in the book. What could have been beautiful satire transforms into simply generic humor that never quite stands apart from the rest.

So, if you find yourself not laughing at the humor of this story, perhaps there is some comfort in knowing that some of the Wayans brothers are around to help spice up this dull story. WRONG! The Wayans are in this film, but Townsend demonstrates that he has the ability to even bring the worst out even in this entertaining family. Definitely in their pre-In Living Color moments, we see that comedy was something that all needed to constantly improve upon. Perhaps it was Townsend's direction, or just maybe this atrocious story, but these typically funny comedians were obviously underused and ignored when it came to critics of this film. I just thought that with the talent pool that Townsend had to pull from that Hollywood Shuffle would have been funny, bright, and a true stab at this obvious Hollywood dilemma. Sadly, it was none of the above.

Finally, I would like to say that this was a workable film. There were some moments (while they were few and way far between) that had a smile on my face, the final product just didn't settle well with me. Townsend can be funny, but in this film it just felt like he was playing against himself, instead of through his personal experiences and troubles. I realize that he was probably speaking the truth, but it never came through as that. Instead, we are threaded through a weak story, which supports itself with idiotic flash clips that may have worked for a sitcom, but surely didn't work for this film. Even for those that comment that this was his directorial debut and that he was learning from this film, I would have to disagree. If you are starting fresh, either have a tight script or defined themes. Townsend had neither of these, and combined with the inability to control his actors, he just failed in a ball of flames.

Overall, this was rather disappointing to watch. It reminded me of a grade school Spelling Bee where it is finally your child's time to spell. The word is tough, but as the first two to three letters come out, you think that it is going to work perfectly, but then there is that random \"P\" and silent \"R\" that forces your excitement to come tumbling down. That is how I felt with Hollywood Shuffle. At first, I saw the potential, I saw the theme and the motive behind the picture, but through fuzzy and inexperienced technique and after the first couple of scenes, I experienced that deep fall feeling. Townsend sank his own ship on this one, and I don't think Hollywood Shuffle will ever re-submerge as a pivotal moment of Hollywood cinema.

Grade: * out of *****", "y": 0}, {"x": "DOWN TO EARTH / (2001) * (out of four)

By Blake French:

\"Down to Earth\" is such a mislead and desperate comedy it makes sitting home on the couch watching a Chris Rock standup-comedy act on TV look like heaven. Speaking of heaven, the film is based on the 1978 movie \"Heaven Can Wait.\" That was a good movie, and this is good-to demonstrate how a group of aspiring screenwriters can take decent material and turn it into garbage. Directors Chris and Paul Weitz miss nearly every target. From concept to storytelling, \"Down to Earth\" fails miserably; this is one incredibly bad production.

Chris Rock is a lousy standup comedian, both in his role in this movie and in the real life. He plays Lance Barton, whose manager, (Frankie Faison) even feels sorry for him when he is booed off stage during amateur night at a local theatre. Soon after the script establishes his lack of talent, the character is killed by a speeding truck. Death, played by Eugene Levy, has made a mistake, taking Lance before his number was up. God's assistant (Chazz Palminteri) is very angry and decides to let Lance make up the remainder of his time on Earth, as long as he takes the only available body of a 60 year old white millionaire.

The old man's name is Mr. Wellington, whose life has problems of its own. His wife (Jennifer Coolidge) is having an affair with his assistant (Greg Germann), who is robbing him of his money. But that's all right because Lance, inside Mr. Wellington, has fallen in love with a young black woman named Sontee (Regina King.) Meanwhile, there are plots to kill Wellington, Lance attempting to get a better body, and Sontee's confused feelings dealing with a hospital situation involving Mr. Wellington's finances.

\"Down to Earth\" has some good ideas, but they are in a pointless and unconvincing love story filled with contrivances and recycled material. The biggest problem it runs into is how we perceive Lance as Mr. Wellington. Chris Rock is the actor with popularity and publicity, so he is not going to be absent from most of this movie; all of the characters see the new Lance as Mr. Wellington, but we see him as Chris Rock. This is convenient for the love story; we believe a young woman would fall for Lance, but in reality, he is actually an old, gray-haired geezer. That is not so convincing.

The one-joke comic situation is supposed to be watching an old man doing funny things that are really done by a young black man. But what inspires laughter is when characters run into conflicts without their knowledge. Just look at \"There's Something About Mary.\" In the funny scenes the characters are exposed to awkward experiences, and not at their will. Here, Lance knows he is in an old man's body, and does things old men would not normally do. If Lance did not know the body he was in then that may have had potential.

Another problem with the concept: we never knew Mr. Wellington in the first place, so how can we compare Lance in his body when we do not know what he was like originally. To top everything off, Chris Rock needs to be the center of attention here, and makes the character too much like Rock. He recites simple standup routine jokes that are tedious and painful; his dialogue is so obvious, wooden and straightforward. I hated the film's sense of humor. There are so many unfunny jokes and horrible comic situations. It is like watching Chris Rock being Chris Rock, not a character in a movie.

Let's emphasize the positives in \"Down to Earth.\" Mark Addy does not do any worse here than he did in \"The Flintstones in Viva Rock Vegas.\" Eugene Levy and Chazz Palmentari are well cast, but they are at the mercy of a scalped script. Those are all the good qualities I can mention at this time, and if you give me another week to recollect, it is not likely that I will come up with any more.", "y": 0}, {"x": "It's so sad that Romanian audiences are still populated with vulgar and uneducated individuals who relish this kind of cheap and demonstrative shows, as superficial and brutal as the \"Garcea\" series or the \"Vacanta mare\" child-plays... The difference is that Mugur Mih\u00e4escu, Doru Octavian Dumitru and other such sub-artisans never presume to claim their shows as \"art\". Pintilie, who 40 years ago made a very good movie (\"Duminic\u00e4 la ora sase\") followed by another one, nice enough (\"Reconstituirea\"), tries to declare his film-lenghts \"art works\" - but, unfortunately, he masters at a way too limited level the specifically cinematographic means of expression. As such, \"Niki Ardelean\" offers again a sample of \"HOW NOT\" - this being about its only merit.", "y": 0}, {"x": "I liked this show a lot - we got the first and only, it would appear, series in the UK on channel 4. The characterisation was right on the money - a bit like the Simpsons in that all the different facets of small town populace were represented.

There was no laughter track - I hadn't seen this on an American TV comedy at the time except for on Larry Sanders and it really worked well here, heightening the suggestion that these wacky cops were really like that, and not just hamming it up for the cameras.

All in all, a quirky little number that tickled me just right: I can't help but think that maybe it missed it's mark with certain audiences. I think it would have been a cult hit in the UK had it been shown at an acceptable hour.

I'll round this off with my standard comment: Where the hell can I get hold of this to watch it again? Any ideas?", "y": 1}, {"x": "I too like Dafoe as an actor but i wasted a few hours of my life actually watching this film, I still cant believe i managed to watch it in its entirety. Was there actually a point to the film?, and the ending, well, Im glad i never paid to see this awful pointless piece of pathetic excuse of a film!

Im not sure without hunting the facts out but is Dafoe married or seeing the awful actress in this film in real life, if so was it an attempt to kick start her career?, if so im afraid it must have failed..

I post this in the hope i can actually put someone off watching this film, even if 1 person takes heed of my comments and decides they would much rather watch paint drying i will feel i have made some good in the world, if only i had had the same advice...", "y": 0}, {"x": "I was very displeased with this move. Everything was terrible from the start. The comedy was unhumorous, the action overdone, the songs unmelodious. Even the storyline was weightless. From a writer who has written successful scripts like Guru and Dhoom, I had high expectations. The actors worked way too hard and did not help the film at all. Of course, Kareena rocked the screen in a bikini but for two seconds. I think Hindi stunt directors should research how action movies are done. They tend to exaggerate way too much. In Chinese films, this style works because that is their signature piece. But, Hindi cinema's signature are the songs. A good action movie should last no more than two hours and cannot look unrealistic. But, in the future, I'm sure these action movies will get much sharper. Also to be noted: Comedy and action films do not mix unless done properly. Good Luck next time.", "y": 0}, {"x": "Anna Christie (1931)

On its own terms, this version of Garbo's Anna Christie, shot a year later in German with a whole new cast, is just toned down and refined enough to work better than the English version (both are American MGM productions). Garbo is if anything more commanding (or more beautiful as a screen presence) and her acting is more restrained. And she seems frankly more at ease, probably for a lot of reasons, but we can speculate that she was no longer making her first talking picture, so had adjusted quickly.

Without comparing always one film to the other, this Anna Christie is still the same O'Neill play with too many words. His themes of a woman wanting love without losing her independence are here, but it comes off as oddly old fashioned anyway. There are some scenes missing--the Coney Island section is shortened and isn't as good--but overall it's a direct echo of the first film. The director, Jacques Feyder (Belgian-French), is simply redoing what was done already, which I assume must be a frustrating experience.

It's interesting to see both films in succession because they are blocked out exactly the same way (not only the sets, but the shots, are all the same). There is an occasional scene lifted from the earlier film--some of the storm, understandably, but also a brief scene where Marie Dressler (from the English language version) is walking with her friend on a plank over a canal, drunk as can be. But they are just silhouettes, and when the next scene shows their faces, we see the German actors taking their parts. There is no replacing Dressler, for sure, but for me the German father is more believable and honest in his performance.

Clearly the themes--immigration, wayward fathers, daughters turning to prostitution, and the troubles of finding true love--have strong currents back then, especially with European threads (Garbo, appropriately, plays a Swedish young woman).", "y": 1}, {"x": "I'm guessing the writers have never read a book of any kind, much less a Dickens novel, and certainly not David Copperfield, and that they based their screenplay on another poorly written screenplay, possibly an adaptation of Copperfield, though just as likely anything else, from which they randomly discarded about a third of the pages and then shuffled the rest, along with some random pages from a screenplay that someone's eighth grade nephew had written for an English class, and for which he had received a failing grade.

If the casting was a bad joke - e.g., Richards as Kramer playing Micawber - which it was, then the direction and acting were the poorly- delivered punch lines. Getting beyond Kramer as Micawber, if possible, Ham was such a complete ogre, hunch-back and all, that I was half expecting at some point to see him being pursued by an angry pitch-fork and torch wielding mob of villagers. Uriah was almost as much of a clown figure as Micawber. Mr. Murdstone evoked about as much terror as that Muppet vampire from Sesame street. The actor playing older David was, I believe, actually a woman. In any case, looking perpetually as if he wished he could find a mirror to see how pretty he looked, and fancied that he looked quite pretty indeed, he could scarcely convince us that he was writing with a quill pen. And while we're on that subject, in one of the many gross inaccuracies perpetrated by the half-wit producers of this embarrassment, in the unnecessary shots of David writing his story he appears to be somewhere between 18 and 21 years old, when he should be in his forties. Perhaps the greatest transgression, although it's difficult to choose, was the invented showdown between David and Murdstone as he courted a third wife in Switzerland, preceded of course by the invented death of Murdstone's second wife. While they were at it it is a wonder they didn't send Heep to the guillotine, and have him deliver Sidney Carton's famous last words. It couldn't have made things much worse really. It might have been far far better.

There are literally thousands of small and large sins against literature throughout this miscarriage of art, and anyone who watches it runs the risk of severe and permanent damage to all aspects of their sensibility.", "y": 0}, {"x": "This is one of the finest music concerts anyone will ever see and hear. I grew up when All My Lovin' was brand new and to hear it again today by the original artist today is a measure of Sir P Mc's power to spellbind any crowd of any age. This doco goes way behind the scenes to show us life on the road not just for the band but everyone down to the roadies. I saw this guy live in Aussie 1975 and can assure you his performance here on this DVD is no less than he gave almost 30 years ago. I have a huge 5.1 surround sound system that does do this justice and would recommend this anyone especially a Beatles fan. This is the closest you will get to a Beatles concert today. Singer, Songwriter, lead/rhythm/ bass guitar, piano, ukulele, just pure genius. There are few entertainers who can stand alone with one instrument and hold the crowd in his hand. If you want note perfect music, buy a studio recorded CD. If you want to hear raw music as it is intended and spontaneous to the crowd, with all the excitement and emotion of the crowd-this DVD is for you.", "y": 1}, {"x": "\"Batman: The Mystery of the Batwoman\" is about as entertaining as animated Batman movies get.

While still true to the feeling of the comic books, the animation is done with a lighter spirit than in the animated series. Bruce Wayne looks much like he has before, but now he appears somewhat less imposing. The Dick Grayson Robin has been replaced by the less edgy, more youthful Tim Drake Robin.

Kevin Conroy, as usual, invokes the voice of Batman better than most live action actors.

Kelly Ripa did a much more decent voice-acting job than I was expecting.

As in the live action Batman films, the movie lives or dies based on the quality of the villains. My all-time favorite, the Penguin, is here. His design is sleeker than it has appeared before, hearkening more to the Burgess Meredith portrayal of the '60's than the Danny DeVito portrayal of \"Batman Returns.\" David Ogden Stiers is the perfect choice for the Penguin's voice. The Penguin is finally portrayed as a cunning sophisticate, just as he most commonly appears in the comics. Hector Elizondo's voice creates a Bane who's much more memorable than the forgettable version in \"Batman & Robin.\" And finally, Batman has a descent mystery to solve, putting the \"Detective\" back in \"Detective Comics\" (that is what \"DC\" stands for, after all.) The revolution to the mystery is a delightfully sneaky twist.

The score adds to the mysterious ambiance of the movie. It sounds like a mix between the score from \"Poirot\" and the score from \"Mission: Impossible.\" All in all, it's more entertaining than your average cartoon.", "y": 1}, {"x": "I am obsessed! The story is amazing and the show is highly addictive, but I love it. I am on Season 2, disc 5, and I tell you that I am too attached to the characters now. For anything bad to happen to them would seriously affect my vote for the show. And, Michael is on my list now. Kidding... I am so happy to see there is a Season 3, because I was too afraid to go onto disc 6 thinking that it would be ending. I can't wait to see the rest now. Thanks to the directors/producers/and actors of Lost...I enjoy watching TV again. Before Lost I surfed through every channel going to bed sad because of my disappointment in television, but I have to say that Lost is my kind of entertainment!", "y": 1}, {"x": "I loved this mini series. Tara Fitzgerald did an incredible job portraying Helen Graham, a beautiful young woman hiding, along with her young son, from a mysterious past. As an anglophile who loves romances... this movie was just my cup of tea and I would recommend it to anyone looking to escape for a few hours into the England of the 1800's. I also must mention that Toby Stephens who portrays the very magnetic Gilbert Markham is reason enough to watch this wonderful production.", "y": 1}, {"x": "The only redeeming part of this movie was the price I paid. At least all I lost was $3.00 and the time elapsed sitting through this bomb. The crew member who was in charge of continuity missed the boat. When the female lead and the FBI guy went to the alleged killers location, Mr. FBI handed the female a revolver. When the alleged killer came out the door, the revolver has magically transformed into an automatic. One is left to ponder would an FBP agent hand a weapon to a civilian? I think not. Ms. Xavier appears to be a very attractive female. It is too bad the R rating did not allow much of her to be seen. It would seem that a film editor cut what might have been the best parts of the film out.", "y": 0}, {"x": "In light of the recent and quite good Batman the Brave and the Bold, now is the time to bear a fatal blow to that mistake in the life of Batman. Being a huge fan since the first revival by Tim Burton 20 years ago, I have been able to accept different tonalities in the character, dark or campy. This one is just not credible : too many effects, poor intrigues and so few questions. What is great about Batman is the diversity of his skills and aspects of his personality : detective, crime-fighter, playboy, philanthropist etc. The Batman shows him only in his karate days. And by the way, how come the Penguin is capable of such virtuosity when jumping in the air regardless of his portly corpulence ? And look at the Joker, a mixture of Blanka in Street Fighter 2 and a stereotypical reggae man, what Batman fan could accept such a treason ? Not me anyway. Batman is much better without \"The\" article in front of his name.", "y": 0}, {"x": "This movie is a waste of time and money. Throughout the entire hour and a half, I continued to wait for it to get better and it never did. It was slow moving, the plot jumped around, it wasn't scary or interesting, and really never amounted to anything. The credits during the introduction were long and drawn out, which was basically like the rest of the movie (long and drawn out). Numerous parts of the plot made no sense. Several times during the movie I had thought that maybe I had \"zoned out\" because the incongruity of the plot, however, my companion had the same issue and assured me I did not \"zone out\" from boredom, but it was indeed the movie. I've actually never posted on here about a movie before and have been actively looking up movies on IMDb for numerous years. So the fact that I'm actually taking the time to write something should speak volumes of how bad this movie is and that you should not waste your time or money on it.", "y": 0}, {"x": "A pretty worthless made for television movie that pretty much follows the killer insect script. Ants mysteriously turn into killer ants near a hotel. I think it is from the hotel food because the sewage from the hotel kitchen drains directly into the ant bed. There is a lack of suspense in this film and it is not scary either. Watching a bunch of ants sting their victims is not very terrifying.

Spoilers section The stupidity of the hero is near incredible. He is told that the health inspector that the ants could not be the hero. It has to be a mysterious virus. After the inspector says this, the hero takes his bulldozer and wrecks the huge ant colony. This disturbs the millions of ants and traps the people in the hotel.

End spoilers Overall, this movie is extremely lame. I don't understand why it got a DVD release when so many deserving movies have none. My only guess for the DVD release is that Suzanne Summers is featured in the film. This is a movie to avoid.", "y": 0}, {"x": "I never trust the opinions of anyone regarding a film. That goes for critics as well. Sure, if it gets positive reviews that's OK and a plus, but most films that get critical rave I hate. I enjoyed this film for what it was, an entertaining film. It takes you out of your life for a couple hours and into a fictional character...that being Catherine Trammell. Sharon Stone is awesome in this role, just like she was in the first one. Anyone who says she is horrible in this film must have felt the same in the first one b/c she is back acting the same way she did in Basic Instinct 1. Catherine is hers and she plays her to perfection. Her one liners are great, much like in the first one. Who can forget in the first film when she tells the cops, \"If you're gonna arrest me do it...otherwise get the f**k out of here!\" Great scene, and believe me, she does it again in this one. I was captivated by her. Her outfits, the way she smoked her cigarettes, believe me, its worth the price just to see Stone's performance. I cannot wait for this film to be released on DVD, uncut, because I can only imagine how much better it is going to be. And yes, there are lots of twists, as in the first one, including the ending!", "y": 1}, {"x": "If you go to this movie expecting something it isn't, you will be disappointed, as with any movie. This movie contains what Hemmingway described as the \"iceberg effect\". On the surface, its simply a cache of random movie clips smashed together to make a movie. If this would be written in a book, it would be a short story, because the action in the movie is very fast paced, and unless you actually try to catch it, the reasoning behind the plot (along with some subtle foreshadowing) can very well pass you by. Definitely a movie you will have to see twice in order to fully appreciate. Experimental Cinematography barely describes this movie. The camera-work and post production add much to the overall flavour of the film, making it quite artistic at some points and open to interpretation at others (something to be desired in American movies as of late). Although, at some parts it may get a little raunchy, gruesome and too heavy for some audiences, the movie never becomes completely unrealistic. The only aspect of the movie that I would write off as \"needs improvement\" is the soundtrack selection. No movie is ever good without a fitting soundtrack, and although the soundtrack is quite fitting, the opening is a little too long, and the other rap songs in the film really could have been replaced with something more appropriate (heavy, grungy rock or psychedelic electronica would have made this film a real trip). The flooding of imagery and dynamic... color palettes adds another \"artistic\" aspect to it, also combined with the events that happen throughout the film, this is not a movie you can miss any part of and still understand. However, that also makes it much more of a desirable film to watch, and not one you'll quickly get bored of. 8.5/10", "y": 1}, {"x": "this movie was banned in england? why? tom savini, george romero, dario argento, lucio fulci and others had done far worse before and have continued to so since...

this movie has all the basic elements of a decent 70s or early 80's horror film. good looking girls (who can't act to save their lives, by the way), a terrible lightning storm with a torrential downpour, a scythe, a crazy brother wandering around the family estate, and actually a pretty damn good twist at the end. but banned? seriously. when the English parliament banned this movie, the italians probably laughed their collective asses off at how backwards and prudish the brits really were.

there was maybe two minutes of total screen time devoted to the violence and gore (which was greatly underdone). there was nudity but no sex although allusions to sex were made, obviously. but absolutely nothing worthy of being banned.

i would like to see what could have been done if the filmmakers had a decent budget to work with. as it stands, the film is entertaining, but the lack of picture and sound quality take away from the end result.

banned... what a joke...", "y": 0}, {"x": "Yes, this movie is a real thief. It stole some shiny Oscars from Avatar just because politicians wanted another war-hero movie to boost the acceptance (support?) for the wars U.S. is still fighting today. I do not really want to go here into politics, but come on, this is more clear than the summer sky. Hurt locker does not really have anything outstanding, no real plot at all. I really feel myself in the 50's of Hungary when the party told the people what to like and what not to like. The same propaganda movies were produced that time, only with the exception that those were black and white. Even if we consider this title a reasonable piece of the \"U.S. wars are cool\" genre, you surely have much better movies to choose from.", "y": 0}, {"x": "I thought it was an original story, very nicely told. I think all you people are expecting too much. I mean...it's just a made for television movie! What are you expecting? Some Great wonderful dramtic piece? I thought it was a really great story for a made for television movie....and that's my opinion.", "y": 1}, {"x": "I couldn't believe I spent $14.00 on this. The only redeeming quality is the outrageous gore. The dubbing was worse than any I have ever experienced. It looks like it was shot with a VHS camcorder. I think every pfennig was spent on the special effects because there was a whole lot of blood and body parts everywhere. Its one of the worst movies I have ever seen but I do have to acknowledge the plentiful gore that wasn't as disgusting as it could have been because the whole movie is so silly and unbelievable", "y": 0}, {"x": "Yet another colourful excuse for men in rubber suits to wrestle with each other. This time around, time travellers from the future arrive in 1992 and recruit a few people to go back with them to 1944 and prevent the creation of Godzilla, thus saving a future Japan from destruction. But having accomplished this task, the time travellers are revealed to be a bunch of double crossers whose own creature goes on the rampage, and with no Godzilla to stop it\u0085 Eek! It all sounds very silly, and it probably is, but the plot is surprisingly decent and the final battle looks pretty good too. Unfortunately the rest of the visual effects are just rubbish rather than enjoyably rubbish, and the movie turns out to be just as dull as its predecessors. Look out for the shaky Spielberg in-joke.", "y": 0}, {"x": "In 1958, Clarksberg was a famous speed trap town. Much revenue was generated by the Sheriff's Department catching speeders. The ones who tried to outrun the Sheriff? Well, that gave the Sheriff a chance to push them off the Clarksberg Curve with his Plymouth cruiser. For example, in the beginning of the movie, a couple of servicemen on leave trying to get back to base on time are pushed off to their deaths, if I recall correctly. Then one day, a stranger drove into town. Possibly the coolest hot rodder in the world. Michael McCord. Even his name is a car name, as in McCord gaskets. In possibly the ultimate hot rod. A black flamed '34 Ford coupe. The colors of death, evil and hellfire. He gets picked up for speeding by the Sheriff on purpose. He checks out the lay of the land. He is the brother of one of the Sheriff's victims. He knows how his brother died. The Clarksberg government is all in favor of the Sheriff. There's only one way to get justice served for the killing of his brother and to fix things so \"this ain't a-ever gonna happen again to anyone\": recreate the chase and settle the contest hot-rodder style to the death. He goes out to the Curve and practices. The Sheriff knows McCord knows. The race begins... This is a movie to be remembered by anyone who ever tried to master maneuvering on a certain stretch of road.", "y": 1}, {"x": "Home Alone 3 is one of my least favourite movies. It's the cream of the crop, or s*** if you tend to be more cynical, as it ranks up (or down) there with stuff like Battlefield Earth and Flinstones: Viva Rock Vegas. In fact, it could even be worse than those two, since those two at least intermittently made me laugh at their stupidity. This just made me cringe in pain constantly and clap when the credits started rolling. No other movie has made me cringe in pain. Now I will point out exactly why this movie is so incredibly atrocious.

First off, the plot is ridiculous. It revolves around a chip in a remote control car (?!) that is misplaced and how these terrorists want it. Dumb stuff.

The action that ensues is similar to that of the other two Home Alones, with boobytraps and all, but watching these boobytraps being executed is, rather than being funny, incredibly unpleasant to watch. I didn't laugh (or even so much as smile) once, rather, I cringed constantly and hoped that the terrorists would nail the kid. The bird, rather than providing comic relief, was unfunny and annoying.

The acting, as done by a bunch of no names, ranges from poor to atrocious. There is not a single good performance here. Alex D.Linz is absolutely unlikeable and unfunny as the kid, while the terrorists act (and judging by their movie credits, look) as they've been hastily picked off the street...and well, that's it.

I can see some people saying: \"Man, it's for the kids. Don't dis it, man.\" Well MAN, kids may like this, but they can get a hell of a lot better. See Monsters Inc. and Toy Story before even considering getting this out. Hell, even Scooby Doo and Garfield (which suck - see those reviews for more) are better than this!

So in short, this is an irredeemably atrocious movie. This was clearly recycled for the money, as it almost completely rips off the first two; the only thing is, it completely insults the first two as well. No human, kid or otherwise, should find any reason to see Home Alone 3. Ever. It's THAT bad.

0/5 stars", "y": 0}, {"x": "What do you call a horror story without horror and story?

This is the most irritating thing about the film: I get the feeling the writers never really decided what's actually going on in the film! It's a different thing to know it, give hints for the audience and not completely reveal it, but here, you get the feeling the screenwriters don't know it, characters in the film do not know it and audience sees that no one knows! (Remember \"Cube\"? Even that film knew more about itself.)

I've consumed a lot of 80's horror / gore films and this movie certainly has its roots deep in those films. But a lot of important things are missing. We really know nothing about the characters. They keep repeating empty lines over and over again. The story isn't really developing - it never goes anywhere. B-acting is OK in this type of horror films, but there's not much to act in the script. We don't care about the characters. There's nothing to remember about them. There's not even cheesy humor or unnecessary sex. And most importantly - no thrills, no chills.

You only get some commonly used elements of the horror film genre. They show the Lordi monsters one by one but their characters don't really contribute anything for the story.

I honestly believe that this amount of story, character development and atmosphere could be achieved with minimal amount of crew and equipment. Oh yeah, film makers used to do that - and more - some 20 years ago! I felt the shared embarrassment of the audience as the film ended. Too bad really.", "y": 0}, {"x": "Saw this on SBS TV here in Australia the other week, where it was titled \"Laputa: Castle in the sky\". I had enabled subtitles and I think SBS provided their own for that, which, as usual, was of very good quality.

Just looked up \"Laputa\" on Wikipedia and it confirms what I suspected...the floating island of this tale is taken from the classic Jonathan Swift novel \"Gulliver's travels\", which was published in the early to mid 1700s.

Anyway, this is an engaging Japanese fairytale, which features an English speaking voice-cast. It's suitable for young children, I think, but it does run at just over two hours in length, so it may be too long for some, though not for an adult like me.

The story concerns two children who seek to find a legendary floating island which has a castle on it. The children are not the only ones looking for this island. They have pirates, the army and spies looking for the island too, and looking to capture the children (Sheeta, the girl, voiced by Anna Paquin, and Pazu, the boy, voiced by James Van Der Beek) in order to help them find it.

The graphics are magnificent...sort of photo-realistic at times, especially the scenes of stonework lit by torch-light, or the pretty scenes of bright, sunny days, with white clouds, or mist.

Recommended.", "y": 1}, {"x": "Ride with the Devil, like Ang Lee's later Brokeback Mountain, is a film of aesthetic and historical importance. Film lovers ought to see it at minimum twice as its artistic nuance is worthy to be over comprehended.

A perfect piece of art, surprising depth of humanity. I really don't recall another war film, will so capture you, will change your existing conception of history and politics, will restore your belief in humanity. After seeing so many killings, so many sufferings , you don't feel yourself numb, instead you treasure the bond between human beings more. The actors' performances haunt your heart, the music drives your mind. Some shoots, are not just some pictures, they transcend themselves, becoming the seeing of soul. Such is the true sense of film being a genre of art.

A film like this doesn't need long comments or reviews, everything it says by itself. Ovation to the cast which includes Tobey Maguire, Jeffrey Wright and Jewel Kilcher, the cinematographer and the composer of the beautiful and lyrical music, what an achievement!", "y": 1}, {"x": "More TV movies ought to be made like this one. I saw it way back in '93 when it was first on TV. Helen Hunt and Steven Weber were both terrific, giving very gritty and realistic performances. Weber was especially good, turning in an exceptionally creepy and understated performance as the child molester/killer. This film really increased my respect for Hunt as an actress. The director also directed \"Hoosiers,\" which was somehow both formulaic and exciting. But the direction in both of these works has the same stark, simple realism that is so appealing. If you like TV movies that aren't predictable and filled with overacting, see it if you can. The side story about Hunt and Fahey's affair is also appealing without detracting from the main story.", "y": 1}, {"x": "Wow, praise IMDb and Google, for I have been trying to remember the name of this f'ing awesome movie for over 15 years now. Slaughter High, man! Hells yeah!

I'm not going to bore you with a plot summary, and actors, and yadda yadda yadda, 'cause you all know what's up. That's why you're here anyway. What I will do, however, is explain the fond memory I have of this quintessential 80's D-Movie slasher joint.

In 1987, when I was around the age of 7, my father used to rent all these horror movies. Would he care that his kids were watching them with him? No. So, at that young age i saw Slaughter High. What I saw in that movie stuck with me big time. I haven't seen it since, but I remember to this day most of the ridiculous kills in the movie. For example, the post-sex scene (why is there a metal bed in a school?) gets electrocuted. Or, the guy being drowned in a cess pool. Come on! My personal favorite, though...the exploding stomach from the tainted beer. Amazing! How can you honestly hate on a movie where one of the characters finds a beer in an abandoned school, like, 10 or 15 years later and thinks it would be a good idea to drink it? Then his stomach explodes? What!? And that great line: Let's take my car...it always starts. Classic crap all the way.

I mean, I look back now, almost 20 years later, and laugh at it. But when I was 7, I was scared sh!tless. That jester hat (or was it a mask?) that the killer rocks throughout freaked me the f*ck out!

All in all, yes, a crappy movie. But for nostalgia purposes and for humor factor this movie gets a 9 out of 10 from me. Either stay up every night real late and hope to catch this on same Late Late Late Movie show, or hunt down a VHS copy and dust off your VCR.", "y": 1}, {"x": "This movie is definately one of my favorite movies in it's kind. The interaction between respectable and morally strong characters is an ode to chivalry and the honor code amongst thieves and policemen. It treats themes like duty, guilt, word, manipulation and trust like few films have done and, unfortunately, none that I can recall since the death of the 'policial' in the late seventies. The sequence is delicious, down to the essential, living nothing out and thus leading the spectator into a masterful plot right and wrong without accessory eye catching and spectacular scenes that are often needed in lesser specimens of the genre in order to keep the audience awake. No such scenes are present or needed. The argument is sand honest to the spectator; An important asset in a genre that too often achieve suspense through the deception of the audience. No, this is not miss Marble... A note of congratulations for the music is in order A film to watch and savor every minute, not just to see.", "y": 1}, {"x": "I was willing to go with the original _Cruel Intentions._ It went along with the plot and stayed true to the characters of one of my favorite stories. However, this movie was, in my opinion, a crummy rehash with essentially the same story line and no clear character choices. I didn't honestly care what happened to any of them. The strongest part of the original story (Les Liasons, not CI) is the characters and their interactions, not the events themselves. I wasn't clear until I read the IMDB that this movie was meant to be a prequel, especially since the title includes a number \"2,\" I expected a sequel, but then determined that it must be a companion piece. Over all, I must say that this movie read, to me at least, like a soft porn version of Les Liasons. I was not impressed.", "y": 0}, {"x": "Matt Saunders (Luke Wilson) thinks he has found the perfect woman in Jenny Johnson (Uma Thurman), who seems like a quiet but pretty woman, though he soon learns that she's needy and possessive, oh, and she's also the superhero G-Girl, though you wouldn't know it from the things she does to Matt after he freaks out and breaks up with her.

A promising premise is ruined by a mediocre execution. My Super Ex-Girlfriend is still an enjoyable comedy however it relies too much on cheap sex jokes and it ends up being a forgettable experience. What went wrong? The cast and the director could not overcome the weakness of the script and I didn't like the way they played it out. I was expecting the guy to be a jerk and it could have been a female fantasy revenge film. However, they made the guy likable and they made the superhero a psycho. It just wasn't very fresh and after about forty minutes, the film wore out it's welcome. Sure, there were a few funny lines however the weak middle and horrible ending kept it from really breaking out.

Director Ivan Reitman has lost his touch. After a successful run in the eighties and early nineties, he started making crap like Evolution and Father's Day. I wouldn't say My Super Ex-Girlfriend is a complete bust but I don't give him credit for any of the quality the movie holds, which isn't too much. Don Payne did an awful job with the screenplay. The majority of the jokes were lame and most of the supporting characters were just one-note. He also kept reusing a lot of the same jokes making the thing really tedious at times.

A few of the actors were good enough to save the film. Uma Thurman was great as G-Girl and she had many funny lines. Luke Wilson was a bit pale and not very interesting. I don't think he makes for an appealing leading man and he's better in supporting roles like in The Family Stone. Anna Faris was just doing her \"Scary Movie\" routine and it's getting a little old. She needs a challenge or at least some better scripts. Wanda Sykes is either hit or miss for me. She was great in Monster-In-Law and she was bad in Clerks 2. Here, she is just annoying and doesn't bring anything to the movie. Eddie Izzard was alright, nothing special. Rainn Wilson was just annoying and not funny. Overall, I was disappointed with the movie. It wasn't awful yet it had so much potential and the final result was just so average. Rating 5/10", "y": 0}, {"x": "I have been familiar with the fantastic book of 'Goodnight Mister Tom' for absolutely ages and it was only recently when I got the chance to watch this adaption of it. I have heard lots of positive remarks about this, so I had high hopes. Once this film had finished, I was horrified.

This film is not a good film at all. 'Goodnight Mister Tom' was an extremely poor adaption and practically 4.5/10 of the book was missed out. Particularly, I found that a lot of the characters and some great scenes in the book were not in this. There was not much dialogue, It was rushed and far too fast-moving, but I was mostly upset by the fact that you never got to see the bonding and love between William Beech and Tom in this film which was a true let down. The casting was not all that good,either. I thought this could have been really good, but it was so different to the book! Anextremely poor adaption, one of the worst I've seen. This deserves a decent remake that'd better be 1000 times better than this pile of garbage.", "y": 0}, {"x": "Sure, I like short cartoons, but I didn't like this one. Naturally, kids would love it. But then again, I'm not a kid anymore (although I still consider myself young).

I will not tell you anything about the story, for the simple reason there is no story. How is it possible this dragon of a cartoon was nominated for an Oscar?! Well... I guess it's because people in the 30's were more happy with not much than now. In the present where we live, everything must happen fast. Look at the movies nowadays, and you will come to the same conclusion: we live in a society that doesn't allow men to be slow. That's really a shame. I wish I lived in the 30's, because it seems so peaceful. But every time has got its ups and downs, I guess...

To conclude: if you like music (and frogs), you'll have to see this cartoon. Otherwise, don't spill your time on it.", "y": 0}, {"x": "The British production company Amicus is generally known as the specialist for horror anthologies, and this great omnibus called \"The House That Dripped Blood\" is doubtlessly the finest Amicus production I've seen so far (admittedly, there are quite a few that I have yet to see, though). \"The House That Dripped Blood\" consists of four delightfully macabre tales, all set in the same eerie mansion. These four stories are brought to you in a wonderfully Gothic atmosphere, and with one of the finest ensemble casts imaginable. Peter Cushing, Christopher Lee (Cushing and Lee are two of my favorite actors ever), as well as Denholm Elliott and the ravishing Ingrid Pitt star in this film - so which true Horror fan could possibly afford to miss it? No one, of course, and the film has much more to offer than just a great cast. \"The House That Dripped Blood\" revolves around an eerie rural mansion, in which strange things are happening. In four parts, the film tells the tales of four different heirs.

The first tale, \"Method For Murder\", tells the story of Horror novelist Charles Hyller (Denholm Elliott), who moves into the House with his wife. After moving in, the writer suddenly feels haunted by a maniac of his own creation... The first segment is a great kickoff to the film. The story is creepy and macabre throughout and the performances are entirelly very good.

In the second story, \"Waxworks\", retired businessman Phillip Grayson (Peter Cushing) moves into the house, and suddenly feels drawn to a mysterious Wax Museum in the nearby town... The great Peter Cushing once again delivers a sublime performance in this, and the rest of the performances are also very good. The tale is delightfully weird, and the second-best of the film, after the third.

The third tale, \"Sweets To The Sweet\" is by far the creepiest and most brilliant of the four. John Reed (Christopher Lee) moves in with his little daughter. The private teacher and nanny Mrs. Norton, whom Mr. Reed has employed to instruct his daughter, is appalled about her employer's strictness towards his daughter, and is eager to find out what reason the overprotective father's views on upbringing may have... This best segment maintains a very creepy atmosphere and a genuinely scary plot. Christopher Lee is, as always, superb in his role. Nyree Dawn Porter is also very good as the nanny, and my special praise goes to then 11-year-old Chloe Franks. This ingenious segment alone makes the film a must-see for every true Horror-fan.

In the fourth segment, Horror-actor Paul Henderson (Jon Pertwee) moves into the house with his sexy mistress/co-star Carla (Ingrid Pitt). This fourth story is satire, more than it is actually Horror. It is a highly amusing satire, however, and there are many allusions to other Horror films. At one point Henderson indirectly refers to Christopher Lee, who stars in the previous, third segment...

All four segments have a delightfully macabre sense of humor and a great atmosphere. As stated above, the third segment is by far the creepiest and greatest, but the other three are also atmospheric and often macabrely humorous Horror tales that every Horror lover should appreciate. An igenious atmosphere, a macabre sense of humor, genuine eerieness and a brilliant cast make this one a must-see. In Short: \"The House That Dripped Blood\" is an excellent Horror-omnibus that no lover of British Horror could possibly afford to miss. Highly Recommended!", "y": 1}, {"x": "The only time I have seen this movie was when I was 10 years old. I have remembered it all of these years as I couldn't sleep for a week or more after seeing it. It just absolutely rattled me. I was on vacation with my aunts in Ft. Worth, Texas and I will never forget it. Now, 48 years later, my daughter is trying to get a copy of this for me to view as an adult. It has taken a lot of research to find out what movie it was but I always remembered that Barbara Stanwyck was in it and finally was able to get the name and reviews on it. I very much enjoyed it, but it gave me quite a scare! Jaqui", "y": 1}, {"x": "I have not read the novel, or anything other by Kurt Vonnegut, but I am now intending to start. This grips you from the very first frame, and does not let go until the end credits start rolling. Taking you places you don't expect, the plot is interesting throughout. The pacing is spot-on, nothing lasts too long, and this does a perfect job of balancing between unexpected twists and allowing the viewer to process what we've seen. It is well-told and well-thought out. I've never watched a film that I feel I could particularly compare this to. It is intense and exciting, as well as funny and sad. The acting is excellent, Nolte absolutely shines, Goodman again proves that he doesn't have to go for laughs, and Lee and Arkin are spellbinding. I could go on, really... no role is treated to a less than stellar performance. The editing and cinematography are marvelous, and all of the visuals are great, with a couple of unforgettable and astonishing ones. I am going to go for other movies directed by Keith Gordon, as well as the other two apparently related to this, through the author of the books. There is one scene of sexuality, and a lot disturbing and unsettling content in this. I recommend this to anyone who can appreciate it; it is not pleasant. 8/10", "y": 1}, {"x": "Stefan is an x-con that five years ago got married to Marie. Their marriage has been stable until Stefan past catch up with them and he's offered to do a courier job. Stefan's job is a heroin delivery from Germany to Sweden which should go easily.

In Germany Stefan meet Elli, a girl from Bosnia that has been sold to a stripclub owner. Stefan dislikes what he sees and decide to help Elli out of her misery. Due to the fact that Elli's father during the war fleed to Sweden Elli now goes with Stefan to Sweden. To make up with the past Stefan promises Elli to help her find her father, no matter what it takes. Finally back in Sweden the whole situation seems to be more complicated than Stefan ever thought of..

This movie doesn't seem to fit in the ordinary class of swedish movies due to the fact that it's been americanized alot. Regina Lund and Cecilia Bergqvist makes it all average, the effects makes the movie a little too much though. See it and jugde for yourself.

", "y": 0}, {"x": "Where to begin?

#1 Amitabh's son, played by Akshaye Khanna, is 30.

Amitabh's been in prison for 33+ years... he

A) Telepathically transmitted the sperm home?

B) Asked a nice Pakistani guard to mail it for him?

C) They allow conjugal visits in secret Pakistani Jails

D) All of the above

E) The producers were having a little too much bhang at

the time they approved the script?

#2) Amrita Rao (Yummm!) wants Khanna - he's yum, yum, yummy... and apparently he wants her - who wouldn't, right?!... But, when her dad gets ratted out, and then killed (I hardly think this is a 'spoiler' as you'd have to be brain-dead and blind not to see this coming in the film) he's pretty emotionless towards this catastrophe and with the tip (metaphorically) of his hat, leaves her behind to save his dad, never mind her loss, and says (paraphrasing) \"If god wills it, we'll meet again\"... Basically meaning, \"I'm gonna get my dad and MY job done, sorry for your loss - CYA! Buh Bye!\" - callus beyond even low-life Hollywood standards...

#3) There are so many holes in this horrible waste of time called a movie, that you can drive all the jeeps, trucks camels and any extra stuff through it. Pass - really, complete and total waste of time - Oh! There is a great dance sequence (yes, only one - as in dance sequence - regardless of quality) great belly dancing - but NOT worth watching just for this.

Rent Veer-Zaara or Lakshya (will Hrithik Roshan ever take acting lessons?) for better Indo-Pak conflict movies... In fact, Veer-Zaara is pretty damned good - 7.5/8 I'd say!", "y": 0}, {"x": "How anyone can say this is bad is beyond me. I loved this show before I even saw it. For 3 reasons, 1. The Story intrigued me, 2. Jessica Alba and 3. James Cameron! Please ignore the bad comments and Please watch the whole first Season before you decide that it's bad because I know that if you watch the first Season you will LOVE it and go out and Buy Season 1 as well as Season 2 on DVD and then Join the campaign to get Season 3 Made!

I Hate Fox and I'm sure a lot of you \"Dark Angel\" fans hate them too. They have a thing for Canning Good Shows! Don't you all agree?", "y": 1}, {"x": "I rented this on DVD yesterday and did not realize it was a \"character study\" type of movie, so I struggled to watch about an hour of it before hitting the Stop button.

Even with a character study theme, I just could not get into this film at all. Perhaps it was my mood in wanting to watch something else, or maybe I had other expectations, but setting that aside, I tried my best to move on to finish watching, but gave up. The actors played their roles well, but the global combination did not come together to keep my interest. About the only interesting thing was the sergeant's gun being stolen and he hurried to buy another one, and spray painted it black to appear as police issue. I think this movie should have been entitled, \"Who Stole the Sergeant's Gun?\" Scenes were well done but putting them together I once again felt robbed for anything cohesive to keep me viewing.

Since I didn't finish watching it I'd say there is some merit to renting this film ... maybe. To me, it was a waste of good viewing effort and time. I'll leave it up to you to try it, but it's not one I'd strongly recommend.", "y": 0}, {"x": "Both my friend and I thought this movie was well done. We expected a light hearted comedy but got a full blown action movie with comic thrusts. We both thought that this movie may have not done so well at the box office as the previews lead us to believe it was a comedy. I was impressed with the supporting actors and of course Dave Morse always puts in a terrific acting job. Most of the supporting cast are veterans not first timers and they were solid. We both felt that the writing and direction were first rate and made comments to each other about buying this movie. If you don't buy rent it for a good time.", "y": 1}, {"x": "Timeless musical gem, with Gene Kelly in top form, stylish direction by Vincente Minnelli, and wonderful musical numbers. It is great entertainment from start to finish, one of those films that people watch with a smile and say \"they don't make 'em like they used to!\" But they never did quite make them like this. The climactic 25 minute musical sequence without any dialogue is among the most beautiful in film history. Movie magic, clearly derived from the heart and soul of everyone involved. A must see!", "y": 1}, {"x": "After reading the other reviews for this film I am of the opinion that the high markers are probably paid studio lackeys as the film I saw was absolutely dire, with wooden acting, lacklustre scripting and plodding predictable directing, one of the few plus points has to be the stunning scenery as this film features some stunning backdrops with great sweeping vistas and dramatic skies and wide open prairies, sadly when the most memorable thing in a film is the part featured behind the actors this has to be a warning sign as to the quality of the movie, all in all a thoroughly uninspiring addition to the western genre which even at the very reasonable price it can be obtained on DVD is best to avoid.", "y": 0}, {"x": "With Goldie Hawn and Peter Sellers in a movie you figure this one won't go wrong. But what can I say? This was a horrible misfire. The movie is about Peter Sellers as an older gentleman who suddenly finds himself in a relationship with a really strange young not to mention attractive hippie in Goldie Hawn. The movie is incredibly disjointed and I did not understand anything about it. Peter Sellers and Goldie Hawn are very funny people but this movie does not prove it.

That song about \u0091arabella Cinderella' is pretty cool, but that is it. I only recommend this movie to people that like to watch an extreme novelty movie, this is almost the definition of one. I guess this movie more than anything else is a sign of the times, in terms of it's definite experimentalism and all around unconventionality, the problem is the quality is completely shot and the writing, not to mention the direction is just so out there.

Peter Sellers in particular is very hit and miss, he will go from Dr. Strangelove and Being There throughout his career, to dumb movies like this and the Magic Christian, which was very similar to this one in context and style, but that movie did have a few funny moments. This one is senseless, and I am sad that someone as great as Peter Sellers was in this movie. Not recommended for anyone.", "y": 0}, {"x": "The title sequence shows the credits written on a rain-soaked sidewalk as people trod on it; music is provided by someone whistling Alfred Newman's \"Street Scene.\" Then we meet Det. Sgt. Mark Dixon (Dana Andrews), who always wanted to be something his old man wasn't: a guy on the right side of the law. But he's pretty vicious for a good guy. After several complaints over his roughing people up, his boss, Insp. Nicholas Foley (Robert F. Simon), demotes him. Foley tells him he's a good man, but needs to get his head on straight and be more like Det. Lt. Thomas (Karl Malden), who has just gotten a promotion.

Meanwhile, Tommy Scalise (Gary Merrill, in a splendidly slimy performance) has an illegal dice game going and is looking to make a sucker out of the rich Ted Morrison (Harry Von Zell), who was brought in by Ken Paine (Craig Stevens) and his beautiful wife Morgan (Gene Tierney). She figures out too late her husband is using her as a decoy, and Paine strikes her when she refuses to play along. The chivalrous Morrison intervenes but Paine knocks him out cold. That seems to be the worst of it, but later it turns out the guy is dead; and Paine looks guilty.

But this won't be Paine's story. Soon Dixon has fallen in love with Morgan\u0097but not before losing his temper again and committing a terrible deed that he tries to cover up. Morgan's father, a tale-spinning taxi driver (Tom Tully), may take the rap for it. It's up to Dixon to try to pin the blame on Scalise.

Otto Preminger directs a script credited to Ben Hecht and three others from the novel \"Night Cry\" by William L. Stuart. This is a solid film noir with excellent performances and all the shadowy photography and murky morality we expect from this genre. It holds up until the brightly lit ending, which looks like something the studio had filmed to appease the censors. Of course, the classic noir directed by Preminger and starring Andrews and Tierney is \"Laura.\" You'll enjoy this, but you can't miss that.", "y": 1}, {"x": "I don't buy kung fu movies for a plot. I buy them for fight scenes. A bad plot can be forgiven for excellent fight scenes, but not the other way around.

The story was decent, but moved too slowly for my tastes. There were about 3 or 4 mediocre fight scenes throughout, lasting only a couple of minutes apiece. The last fight was a bit longer, but by that point i was so bored i didn't even pay attention to it.", "y": 0}, {"x": "This is an excellent film and one should not be put off by its strangeness. There is genuine skill in manufacture of this work. It manages to be intrigiung, funny and frightening at various times. Work with it for the first few minutes and you won't be disappointed", "y": 1}, {"x": "Although recognized as the best film treatment of the difficulties of having a house in the country built (or bought) to your specifications, it is not the first, nor the last. In 1940 Jack Benny and Ann Sheridan were the leads in the film version of the comedy GEORGE WASHINGTON SLEPT HERE by George S. Kaufman and Moss Hart. And about fifteen years ago Shelly Long and Tom Hanks had the lead in THE MONEY PIT. The former was about moving into an 18th Century country house that...err, needs work. The latter was about building your dream house - in the late 1980s. Although the two films have their moments, both are not as good as BLANDINGS, which was based on an autobiographical novel of the same name.

Jim Blandings and his wife Muriel (Cary Grant and Myrna Loy) are noticing the tight corners of their apartment, which they share with their two daughters Joan and Betsy (Sharyn Moffett and Connie Marshall). Although Blandings has a good income as an advertising executive (in 1948 he is making $15,000.00 a year, which was like making $90,000.00 today), and lives in a luxury apartment - which in the New York City of that day he rents! - he feels they should seek something better. He and Muriel take a drive into the country (Connecticut) and soon find an old ruin that both imagine can be fixed up as that dream house they want.

And they both fall into the financial worm hole that buying land and construction can lead to. For one thing, they are so gung ho about the idea of building a home like this they fail to heed warning after warning by their wise, if cynical friend and lawyer Bill Cole (Melvin Douglas, in a nicely sardonic role). For example, Jim buys land from a Connecticut dealer (Ian Wolfe, sucking his chops quietly), with a check before double checking the correct cost for the land in that part of Connecticut. Bill points out he's paid about five or six thousand dollars more for the land than it is worth. There are problems about water supply that both Blandings just never think about, such as hard and soft water - which leads to the Zis - Zis Water softening machine. They find that the designs they have in mind, and have worked out with their architect (Reginald Denny), can't be dropped cheaply at a spur of the moment decision by Muriel to build a little rookery that nobody planned for.

The escalating costs of the project are one matter that bedevils Jim. He has been appointed to handle the \"Wham\" account (\"Spam\" had become a popular result of World War II, in that the public started using it as a meat substitute, in the light of it's success with the armed forces). Jim can't get a grip on this (he's not alone - one or two other executives fumbled it before him). He comes up with the following bit of \"poetry\"(?):

\"This little piggy went to market,

He was pink and as pretty as ham.

He smiled in his tracks,

As they gave him the ax -

He knew he would end up as \"Wham\"!\"

His Secretary looks at him as though he needs a straight jacket when he reads that one!

Jim also is increasingly suspicious of the attentions of Bill to Muriel, although (in this case) Bill is blameless. But he's always around (Jim keeps forgetting that Bill is the clearheaded one, and that he's keeping Jim and Muriel from making so many mistakes). All three have mishaps, the best being when they get locked in a room in the half constructed house, just as the men have left for the day. They can't open the door, and Jim (in a panic) tries breaking the door down by a make-shift battering ram. He breaks a window, and the door opens by itself.

The film works quite satisfactorily, with all of the actors apparently enjoying themselves. It is one film which (despite changing price levels and salary levels) really does not age at all. After all, most Americans dream of owning their own home and always have.

A number of years ago a paint company made use of a delightful scene with Myrna Loy and Emory Parnell regarding the paint job Parnell's company has to do on the various rooms. She carefully shows the distinct shades of red, blue, etc. she wants - even giving a polite Parnell a single thread for the right shade of blue. The commercials hinted that the paint company had a wide variety of colors to choose from for your paint job. They proudly called Loy \"Mrs. Blandings\" in the commercials' introduction. You can imagine though how the no-nonsense Parnell handles the situation afterward, when Loy leaves him with his paint crew.", "y": 1}, {"x": "Grand Canyon is a very strange bird. It's a completely unique urban piece, where relating the entire plot would fail to convey much.

It's central theme seems to be the inherent uncertainty life holds for people of every race, background and station. But to proclaim that THE theme of the film would be to horribly understate its scope. Similarly, to pigeonhole it in a particular genre is futile.

The film has volumes to say, though likely different volumes for every viewer, and says it all in such a non-preachy way from so many angles, that in the end, i can't even define its central message for myself.

Nevertheless, it does it's business with such laser precision; every prop, line of dialog, and bar of background music contributing to it's pervasive mood and powerful message, that i'm pleasantly surprised, and come away very thoughtful after every viewing. Still it doesn't feel at all stuffy. A sparkling film with a great cast and everything working.", "y": 1}, {"x": "This film is moving without being sentimental - meaningful without being pretentious. It tells a simple story of a family in danger of falling apart as the encroachments of technology and an advancing society make the family-run business increasingly untenable.

The acting is wonderful - though none of us in the west are likely to have heard of these actors, we should have long ago - they play their characters with honesty and reverence - these are flawed characters, each with major weaknesses, but with such utter humanity and kindness that it's impossible not to become engaged in the story.

We need more films like this - we need more western filmmakers creating films such as this.", "y": 1}, {"x": "It's obvious that all of the good reviews posted for this movie so far are from insiders who were either involved with the film or who know somebody who knows somebody and have thus seen multiple cuts. Well, I don't know anyone involved, and I've seen the final cut, and it is pure garbage. The only thing it has going for it is ambition and multiple cameos from horror legends (none on screen for terribly long). It's as if the filmmakers made this movie on a weekend during a horror convention and got actors like Tony Todd, Tom Savini, David Hess and Michael Berryman to film scenes during their coffee breaks. This is an ultra-cheap, shot-on-video wannabe X-Files with terrible acting from a cast of non-actors with more mullets than is acceptable in the 21st century. There is little or no action; it's all overly explanatory dialogue that attempts to explain a pointlessly convoluted plot. Ther computer FX are a joke, but there aren't enough of them nor enough action to make this film enjoyable in a MST3K way. After about 8 straight scenes of nothing but talking, you'll find yourself reaching for the fast-forward button...and not letting go. Absolutely worthless.", "y": 0}, {"x": "This is one of those movies that you wish you hadn't seen before - so you could see it again \" for the first time \" . Van Dine's books still bring pleasure - but are termed excessively flowery by many . This movie is by far the best film adaptation of his works . William Powell is William Powell - say no more . The plot is intricate . The story moves all too quickly , because you want it to last . Enjoy.", "y": 1}, {"x": "In the previews, \"The 40 Year-Old Virgin\" boasts the image of another immature sex romp about a 40-ish Lonely Guy who suddenly feels the urge to do the deed simply because he hasn't. Too many past bad experiences have dampened his enthusiasm to the point that he avoids women completely. And then the unexpected happens: he falls in love. What's more, there's a movie out about it, and it's called \"The 40 Year-old Virgin.\"

The virgin of the title is Andy Stitzer (Steve Carell), who is indeed 40, works as an employee at an electronics store and collects vintage action figures, which are displayed all throughout his nice bachelor pad for all to see. He has a lovely home theater system and watches \"Survivor\" with his two kind elderly neighbors. He's a pretty picturesque definition of the Lonely Guy who needs to go out more and talk to more women.

Now here's the real novelty with this picture: it does the impossible task of actually dealing with its subject matter in a cute, mature fashion. This is a movie that could very easily have turned out a lot differently in the hands of a more transparent team of filmmakers. It could have descended into endless sex gags and jokes but thankfully this picture never stoops that low. Sure there are sex jokes here and there and even a few prods are aimed at the gay community (which are, in no way, meant to be taken as gay-bashing), as two of the characters exchange insults towards each other while playing a video game (\"Mortal Kombat: Deception,\" no less - the ultimate testosterone-driven fightfest for guys).

As someone who is rapidly approaching 20, collects McFarlane Toys action figures AND has himself never done the deed, I found this film amusing and touching in a way that a similar-themed movie could never have been. I was able to relate to the character of Andy Stitzer more than anyone in the theater because I was the only teenager present at this showing; everyone else looked like they were all past 40. A bit arrogant, I know, but would you (\"you\" is italicized) still be able to relate if you were the only teen present at an afternoon screening of \"The 40 Year-Old Virgin\"?

Of course Andy has never had sex and wakes up everyday with \"morning rise\" (don't ask), and he's pressured by his buddies to try outlandish methods of gaining the attention of the opposite sex. When it's first discovered Andy is a virgin, at 40, his three buddies and fellow electronics store coworkers David (Paul Rudd), Jay (Romany Malco) and Cal (Seth Rogen) all at first assume he's gay because he's never been with a woman, which couldn't be any further from the truth. The truth is, Andy loves women, but past traumatic experiences (revealed hilariously one after the other in a flashback sequence) have put him on the sidelines for good.

David, Jay, and Cal each embark on a mission to get Andy laid, so help them all. But you know that such escapades will only end in disaster, as proved by one date with Nicky (Leslie Mann), who puts Andy through the worst drunk-driving experience I think anyone would not want to go through and he has a rather creepy encounter with Beth (Elizabeth Banks), the pretty girl who works in the bookstore and is eventually revealed to be a total sex fiend.

Things brighten up for Andy when he meets Trish (Catherine Keener), the friendly woman who works at a store across the street that sells stuff on eBay for people. Hmmm. And with that nice-looking collection of action figures, you can go figure that in the end a large financial payoff awaits him, that is if he can ever \"do the deed.\"

At last, this is the sex romp we've been waiting for. It deals with a very real issue a lot of Lonely Guys probably go through, not that anything is wrong with being a virgin but let's look at the big picture: How many of us \"Lonely Guys\" want to be a lonely guy forever? The important thing we're taught in this picture is that Lonely Guy must be himself. I don't think he needs to go through body waxing like Andy does (which is side-splitting to be honest, and according to this website and various other news articles, was in fact real, and so was the blood on Carell's shirt afterward).

\"The 40 Year-Old Virgin\" was directed by Judd Apatow and co-written by himself and Carell, which originated as a skit that starred Carell. Carell is sweet and human, as his character is not some layabout who approaches this thing with his eyes shut. This is probably one of the most intelligent romps I've ever seen and is not offensive (a whole lot) because its characters are treated with dignity and respect. Even Carell's buddies, who pass off bad advice to cover up their own relationship insecurities, can be related to on a fundamental level.

The way \"The 40 Year-Old Virgin\" plays out is indeed funny in the end, but I'll leave that up to you, the viewer, to observe. Surely, if anyone can go through the things Andy does and still have the strength to attract a woman as sexy as Catherine Keener, then it's true: It is never too late!

10/10", "y": 1}, {"x": "Nightmare Weekend is proof positive that some people are so desperate to be 'in the movies' they are prepared to do almost anything.

I'm not referring to the countless women who seem quite happy to appear completely starkers in this dreadful piece of trash (after all, the naked female form is a beautiful thing and nothing to be ashamed of). No...I'm talking about those who are more than willing to co-star with a badly made hand-puppet called George. Now that is embarrassing!!!

A bio-electronic being created by brilliant scientist Edward Brake (Wellington Meffert), George (who looks like a demented felt clown with green wool for hair) is the artificially intelligent interface for an advanced computer system that operates a revolutionary device (a silver sphere about the size of a golf ball) that, when ingested, can reverse character disorders.

Edward's personality altering experiments have been successful on lab animals, but the cautious scientist is reluctant to carry out tests on human subjects, fearing that there may still be side effects. His evil assistant Julie (Debbie Laster), however, has no such qualms, and proceeds to use three beautiful young women as guinea pigs. Inevitably, they all turn into hideous killer mutants.

With bargain basement special effects, a cast totally devoid of talent, and a plot that is almost impossible to follow (I took notes as I watched the film, and even then I am not entirely convinced that my synopsis is accurate), Nightmare Weekend is a complete and utter disaster that not even several soft-core sex scenes and a touch of gore can rescue.

This film also features one of the most irritating characters I have ever seen in a horror movie: Tony (Bruce Morton), a Walkman wearing idiot who bops away to crap 80s music in a manner that makes me look like Justin Timberlake in comparison.", "y": 0}, {"x": "LOC could have been a very well made movie on how the Kargil war was fought; it had the locations, the budget, and the skill to have been India's \"Saving Private Ryan\" or \"Black Hawk Down\". Instead it come across as a bloated, 4 hour bore of trying to meld the war move with the masala movie. Even the war scenes were terribly executed, using the same hill in all their battle scenes, and spending unnecessary time on casual talk. Instead of trying to appeal to the indian public, a better movie would have been a to-the-book account of what happened at Kargil (like \"Black Hawk Down\") or even spending time on the militant point of view (like \"Tora, Tora, Tora\"). Even better, it could have used a competent director like Ram Gopal Verma to write, direct and edit the film. Until then, I'd like to see some one re-edit this film, with only the pertinent portions included; it would make the movie more watchable.", "y": 0}, {"x": "This is one of the most atrocious rewrites I've ever viewed. If they want to make a movie with a lousy story, they should refrain from giving it a title of a fine book. There is hardly a relation between Wolfe's book and this movie other than the title. I don't mind changes if they help a story flow on screen. At least the changes shouldn't hurt the final product. The last scene in the movie is painfully unconvincing. The actors are miscast. The director and/or screen writer obviously could not decide whether to make a lame comedy or preach an unconvincing sermon.

If you've seen this movie and disliked it, try the book. If you've seen this movie and liked it, read the book.", "y": 0}, {"x": "This great movie has failed to register a higher rating than 5!Why not!It is a great portrayal of the life of Christ without the ruthless sensationalism of The Passion of The Christ.Johnny Cash did great things for God which amazingly are shunned and neglected in areas where they should matter most,like our churches.The film itself took less than a month to film as Johnny felt the strong presence of God guiding him through it.Great credit to everyone involved in this overwhelmingly sincere movie which will always be cherished by its fans.At least the Billy Graham crusade rated it highly enough to use it as a prime source of education for new Christians.Thanks Fox for producing it.As Walk the Line proved that it was freakish that this man survived yet alone produced such an underrated masterpiece.Movies are not canonized through popular vote as this production proves! In summary I believe that this film is one of the worlds great documentaries as it is forthright, honestly portrayed and a great witness to the Christian faith!", "y": 1}, {"x": "A first time director (Bromell) has assembled a small but powerful cast to look at the world of a middle aged, middle class, depressed hit-man and his struggle with his relationship with his father. This film in less than 90 minutes presents an incredibly interesting contrast in human nature. David Dorfman as the 6 year old son of William H. Macy is the most refreshing little actor I've seen in awhile. Macy is brilliant in a part that almost seems written for him as a self tortured sole struggling to break the reins of his father and his business. It's always great to see Donald Sutherland and here he's wonderful as the callous father of Macy. The films alternate audio track is well worth it to hear the director explain how he picked the cast, locations, and filmed the movie. The basic dolby 2 channel sound is adequate for this film and well recorded. The cinematography creates the mood along with a very subtle musical background. Any film buff or observer of human nature will enjoy this one especially if he's a fan of contradiction.", "y": 1}, {"x": "After watching Awake,I led to a conclusion:director and screenwriter Joby Harold made Awake with the intention of laughing at the spectator,for the simple fact the movie is full of ridiculous elements.Awake has a lot of plot holes and it is full of absurd and ridiculous elements(for example,the hospital uniform the spirit of the main character uses...did the ghost of a doctor leave it in the floor ?).The concept behind this movie is slightly ingenious but all the plot holes and the absurd things make of this a stupid and crappy film.With the exception of the great Lena Olin,all the actors bring bad performances.Hayden Christensen has zero expressions and the same applies for Jessica Alba.The extraordinary actor Terrence Howard is enormously wasted on his role.Awake makes a laugh of the spectator.It's so ridiculous and full of absurd things that it's impossible to take it seriously.My recommendation is:skip this crappy movie.", "y": 0}, {"x": "I have seen some pretty bad movies, and this is right up there. No plot to speak of, it's like one of those bad coma episodes on a soap-opera. I just wanted to smack that little girl because, well lets just say, she's real suspicious all the way through the movie. The monsters running around wearing some bling was funny. I also saw a bit of \"Silent Hill\" in there. And I read that this was done by, and or stared a Finnish metal band, Lordi. So it's no wonder that it didn't make much sense. It seem to be a vehicle for promoting there band and nothing more. The FX are very good, the look of the movie, the monsters, and even the acting also good. But the story and the telling of it, just aren't there.", "y": 0}, {"x": "Laputa: castle in the sky is the bomb. The message is as strong as his newer works and more pure, fantastic and flying pirates how could it be any better! The art is totally amazing and the soundtrack, which is reused many times after this, (im not sure if this was the first time i heard it) and evokes in me the most emotional sentimental response of any movie soundtrack. Sheeta, the female lead in this movie is totally awesome and the boy, Pazu is also a great role-model--he lives on his own! The plot is classic Miyazaki. I won't give it away, but the end is really great. I rank this as one of Miyazaki's three best with Nausicaa and Spirited Away. Also you may want to check out Howl's Moving Castle when it comes out (sometime next year i hope) If you like Miyazaki check this one out as it readily available in the USA. Enjoy, Piper A", "y": 1}, {"x": "This movie was hysterical. I haven't laughed this hard in a long time. I mean, it's not \"Good Will Hunting,\" but was it supposed to be? I actually went into the advanced screening expecting a lot less and was pleasantly surprised. The comedy hits hard and is fairly constant. Amanda Peet is hot and awesome. The entire audience that I screened it with seemed to be enjoying the film as much as I did.", "y": 1}, {"x": "A young solicitor in sent to a remote area to wrap up the estate of a recently deceased client. When he arrives he finds that he is made less than welcome by the local villagers and that his deceased client was not liked. To speed things up he decides to move from the local inn and take up residence in her home, a house that is usually fogbound and approached only by a causeway that is blocked off by the sea most of the day. Once there he sees visions of a woman in black, is she real or imaginary,he is also subjected to the blood curdling cries of a woamn and child apparently drowning in the marshes, these events take their toll on him and he soon becomes quite terrified. Atmospheric TV adaptation of a famous play by Susan Hill, that spends it first third building up its characters, before moving to the creepy country house, its poor colour contrast give away its TV roots immediately, this really should have been in black & white, but still as a ghost story it had a couple of unsettling moments, still though after waiting so long to see it I must say I was sadly just a little underwhelmed.", "y": 1}, {"x": "I came to watch Guerrilla, part two of Steven Soderbergh's biopic of Che Guevara, without having seen the preceding film and without more than a cursory knowledge of Che's life. At the same time I was rather apprehensive that this would be both a heavy-going history lesson and an unrepentant love-letter to the iconic revolutionary. As it turns out, this film far exceeded my expectations.

Guerrilla works remarkably well as a standalone film. The story of Che's failed attempt to lead a revolution in Bolivia, then under military rule, is a compelling tragedy. The initial impetus brought by Che's arrival incognito to lead the guerrilla war is lost as misfortune follows misfortune. The odds stack up against the revolutionaries. US backing for the Bolivian army, hostile conditions in the rainforest, suspicious locals and Che's failing health are just some of the difficulties which beset the nascent rebellion.

Soderbergh's portrayal of Che is largely uncritical, but this film is no hagiography. The style is refreshingly undramatic, with a subtle and effective soundtrack by Alberto Iglesias adding quiet drama to many scenes. Che is undoubtedly the centre of the film but there are very few close-ups of his face and we are encouraged to see the people fighting alongside him and sometimes against him too. Where Soderbergh wishes to demonstrate Che's virtues we see it in small episodes such as the loyal acolyte who upbraids two fellow guerrillas when they question Che's leadership, and emphasises the sacrifice that he has made in leaving behind Cuba to fight again for revolution.

The direction throughout is superb. Part two feels tightly edited despite its narrow focus and is able to communicate a great deal through images without the need for a narrator to spell things out for the audience. At the start of the film we see a few short clips of lavish parties in post-revolutionary Cuba, immediately furnishing us with ideas as to why Che would sacrifice his old life to fight again in another country. Later on, the portrayal of guerrillas marching through the unending rainforests stands out as a strikingly beautiful scene and helps to create a feeling of the enormity of the task before this tiny band of revolutionaries.

If there is a problem with the film it is the distance between the viewer and Che, which, though it does allow us to appreciate the context of the insurgency and the people around him, makes it hard for us to understand him better as a person. True, Benicio Del Toro is utterly convincing in the lead role \u0096 so much so that it is difficult to remember that you are watching an actor and not the man himself. However, watching Guerrilla as a standalone film means that we are given precious little insight into what is shaping Che's thoughts, words and actions. It is to be hoped that this is more to the fore in the first part of Soderbergh's biopic (I cannot comment on that yet), and certainly the strength of part two is making me look forward eagerly to seeing the prequel.", "y": 1}, {"x": "Another very good Mann flick thanks to the father/son combination of Walter Brennan and Jimmy Stewart. Brennan (Ben Tatum) is often the comedic conscience of either Stewart or Wayne (Red River/ Rio Bravo). He's there to see that the younger man takes the ride fork or bend. \"You're wrong Mr. Dunston\". Jeff Webster(Stewart) gives off the impression he cares only for himself but it is clear he cannot desert Brennan. John McIntire is excellent as the law of Skagway with due respect for the trappings of justice over the reality of it. Another key theme is helping people and in turn being helped by people. The loner can do neither and suffers for it.

The caption above plays on Tatum's assertion that he can't live without his coffee. This nicotine addiction proves fatal. Probably the first and last time on the screen.

I recommend this film and now own the DVD.", "y": 1}, {"x": "Absolutely enjoyable singing and dancing movie starring Frank Sinatra and gen Kelly, as well as Kathryn Grayson.

The film won and Oscar for George E. Stoll's score, and it garnered nominations for Best Picture, Best Actor for Kelly, and Best Cinematography, as well as a Best Son nomination for \"I Fall in Love Too Easily\" sung by Sinatra.

It was a cute story about Kelly helping his pal Sinatra get a girl and falling in love with her himself. The lovely Grayson (The Toast of New Orleans) dazzled us with her singing, and we had a lot of great songs and dance routines by Kelly and Sinatra, as well as the artistry of pianist-conductor Jos\u00e9 Iturbi.

A classic Hollywood music from an era gone by.", "y": 1}, {"x": "Eddie Izzard is genius with his non-stop humor. I could listen all day. His unique approach to life is quite logical. His understanding of discovery (such as the Heimlich Maneuver) is creative. Eddie Izzard captures the heart of what we think. I don't know when I laughed so hard at anyone's off-beat mind.", "y": 1}, {"x": "Who knew they could be so funny?? Christopher Meloni and Janel Moloney are known more for their outstanding work in some of television's hottest dramas. (\"Law & Order: SVU\" and \"The West Wing\") Put them together on the big screen and what you get is an engaging romantic comedy with plenty of laughs.

The actors develop the story's ongoing relationship with impressive skill, leaving the audience bound to fall in love with Barry Singer (Meloni), despite the fact he's a standup comic who also happens to be a mean-spirited, sexist jerk.

You'll be rooting for him even as he takes all his insecurities with the opposite sex and chases Thea (Moloney) halfway around the country in hopes of winning her heart. They have so little in common...but when Barry finally opens his heart, you'll wonder why Thea keeps running away.

The Souler Opposite is a wonderful movie with an incredible cast and a gifted writer. Well worth your time.

", "y": 1}, {"x": "I have seen this film on countless occasions, and thoroughly enjoyed it each time. This is mostly due to the lovely Erika Eleniak- a great actress with incredible looks. Plus, any film starring Tom Berenger and Dennis Hopper is bound to be entertaining.", "y": 1}, {"x": "I actually didn't enjoy this movie.

I saw it at a camp, and we didn't rave about it, we laughed at it. Sure, some parts are touching, but the acting is terrible, the effects are terrible, and the whole overall movie idea is terrible (now, I know it was based on a book which I haven't read, but I hope that the book was better than this, because frankly, I thought that this movie was very bad and boring). Like I said, I went to it with a bunch of people from a camp, and we were excited to be there, plus I got a caffeinated drink, but nonetheless, I struggled to stay awake. The only thing that kept me up (other than my fear of being embarrassed once I woke up) was the gunshots, that were quite pointless as well. I just really didn't like it.", "y": 0}, {"x": "Dripping with symbolism and filled with marvelous cinematography, Extase is so much more than the erotic drama we've all come to expect. This is almost a silent film, with what dialogue there is in German, and highly simplified German at that. Perhaps the filmmakers intended the film to reach the widest possible European audience, as anyone with even a little high school level Deutsch can easily dispense with the subtitles. The story is of little importance anyway, with the film succeeding on a cinematic level, not a narrative one. Symbols of fecundity and the power of nature overwhelm the human characters--there are even scenes where flowers obscure the face of supposed star Hedy Lamarr--and there are moments here that will remind viewers of the works of Dreyer, Vertov, and Riefenstahl. If the film has any message to convey, I think it's a political one: bourgeois man is timid and impotent; working class man is a happy, productive creature; and woman is the creator, destined to be unfulfilled until she has borne a child. This blend of Soviet socialist realism and National Socialist dogma doesn't overwhelm the film by any means--it's a beauty to watch from beginning to end--but it does place it in a very distinct artistic era. And, oh yeah, Hedy does get her kit off.", "y": 1}, {"x": "After reviewing this intense martial arts movie for the first time in nearly 18 years, I must say it did not lose any of its mysticism, nor any of its eye-popping martial arts action as I had remembered from my youth. The story of a dying martial arts instructor sending his \"unfinished\" pupil out to find the 5 past members of his Poison Clan, so they do not seek out a fortune which the master's friend keeps hidden. Afraid that his last pupil did not have enough training, he instructs him to befriend one of the five \"venoms\" so as to defeat the other four.

I can't say enough about the choreography or the camera work. A fine film in its own right and quite possible one of the best martial arts movies ever made. A CLASSIC!!", "y": 1}, {"x": "I heard tell that Madonna was briefly considered for the Catherine Tremell role. Compared to Sharon Stone, Madonna is too coarse and BAUERISCH. She's not even close.

EVIL INCARNATE: Sharon Stone is a bit long in the tooth, the ameliorative effects of modern chemistry and surgery notwithstanding. However, she artfully treats us to a frightening personification of evil beyond redemption. In the obligatory sex scene, she projects pure, crystalline lust. Especially her hooded, luminous eyes and a face flat with pleasure. Thanks to brilliant use of lighting and other stage techniques, the harsh lines of age are only occasionally manifest. Rather, she seems to have a slight golden glow (YES, YEATS).

The locations gave us a view of London that is a welcome departure from the usual Londonscapes .The Catherine character is so powerful and menacing that I thank my lucky stars that our paths never crossed. I wouldn't have had a chance.

THE ORIGINAL BASIC INSTINCT; ATTEMPTS AT CENSORSHIP: I must briefly comment on the original 1992 film, set in San Francisco, a beautiful city worthy of this film. It is outstanding, from the music to the locations to the sets, and so on. Paul Verhoven pulled striking performances out of the cast and crew.

That the main Baddie was a woman did not escape the scrutiny of Bay Area Gay and Lesbian activist groups. Attempts at censorship were vehemently denied. SWELL. These philosophical pygmies demanded editorial control over the script, insisting on re-writes that would promote their political and psychiatrically driven agendas. Example: Sanctimoniously alleging sexism and misogyny, they demanded that the lead role be switched from BAD GIRL to BAD GUY.

On locations in San Francisco, the gentle, tolerant activists did their best to sabotage filming of the scenes with noise, flashing lights and other tactics. The Executive Producers, Mario Kassar and Andrew Vajna, vowed to fight any efforts to restrict the artistic freedom guaranteed in our democracy and obtained restraining orders against the disruptive tactics.

BLOWBACK: Thanks to the fulminating activists, the film got huge national press coverage - millions of dollars worth of free advertising. Their calls for viewers to boycott the film resulted in a backlash that had customers waiting in long lines wherever the film was launched. It also received widespread critical acclaim. It was, in the words of the reptilian Hackett in NETWORK, \"A BIG- TITTED HIT!\" Sorry, Gentle Reader; I just couldn't resist that one. Yes, it's a gibe.

In conclusion, I believe that both BASIC INSTINCT 1 AND 2, with their brilliant musical scores, aesthetics and acting, are works of art

that deserve protection under our Constitution.", "y": 1}, {"x": "After having seen Deliverance, movies like Pulp Fiction don't seem so extreme. Maybe by today's blood and bullets standards it doesn't seem so edgy, but if you think that this was 1972 and that the movie has a truly sinister core then it makes you think differently.

When I started watching this movie nothing really seemed unusual until I got to the \"Dueling Banjos\" scene. In that scene the brutality and edge of this film is truly visible. As I watched Drew(Ronny Cox,Robocop)go head to head with a seemingly retarted young boy it really shows how edgy this movies can get. When you think that the kid has a small banjo, which he could of probably made by hand, compared to Drew's nice expensive guitar, you really figure out just how out of their territory the four men are.

As the plot goes it's very believable and never stretches past its limits. But what really distinguishes this film, about four business men who get more than they bargained for on a canoe trip, is that director John Boorman(Excalibur) breaks all the characters away from plain caricatures or stereotypes. So as the movie goes into full horror and suspense I really cared about all four men and what would happen to them.

The acting is universally excellent. With Jon Voight(Midnight Cowboy, Enemy of the State) and Burt Reynolds(Boogie Nights, Striptease) leading the great cast. Jon Voight does probably the hardest thing of all in this film and that is making his transformation from family man to warrior very believable. Unlike Reynolds whose character is a warrior from the start, Voight's character transforms over the course of the movie. Ned Beatty(Life) is also good in an extremely hard role, come on getting raped by a hillbilly, while Ronny Cox turns in a believable performance.

One thing that really made this movies powerful for me is that the villains were as terrifying as any I had ever seen. Bill Mckinney and Herbert \"Cowboy\" Coward were excellent and extremely frightening as the hillbilly's.

Overall Deliverance was excellent and I suggest it to anyone, except for people with weak stomachs and kids. 10/10. See this movie.", "y": 1}, {"x": "Not that he'd care, but I'm not one of Simon Pegg's friends. If I was, there's a good chance we'd fallout if he continued to make dross like this. The trouble is, he found a successful formula as the bumbling, ordinary guy-next-door type in Shawn of the Dead, Run Fat Boy Run etc, but it's starting to wear thin. Here his character has no discernible qualities, he's rude and obnoxious, and thinks he's funny when he frankly isn't. When transferred to New York from London (and I presume this link is meant to appeal to viewers on both sides of the Atlantic), he proves equally out of place with his new colleagues. Still, is it any wonder when amongst his jolly japes he hires a transvestite stripper to appear at an editorial meeting an act of revenge for his boss. Yet somehow, Kirsten Dunst starts to warm to him, even though he's done nothing nice. Oh, and because he's a superficial male he falls for Megan Fox at first sight, possibly because her character is as shallow as his. It all makes for a predictable film conclusion, although I can't see any viewer expressing how this mirrored their life. The shame is that on paper this is a cast supposedly worth watching. Pegg, though, plays himself, Kirsten Dunst seems to just go though the motions, creating no on screen chemistry, and Megan Fox isn't stretched at all. The one huge plus is Miriam Margolyes, as Pegg's New York landlady - now if she had been on screen longer.....", "y": 0}, {"x": "I didn't know what to expect from the film. Well, now I know. This was a truly awful film. The screenplay, directing and acting were equally bad. The story was silly and stupid. The director could have made a smart and thought provoking film, but he didn't. I squirmed in my seat for the last half of the movie because it was so bad. Where was the focus to the film? Where was anything in this film? Christians should boycott this film instead of promoting it. It was shabbily done and a waste of my money. Do not see this film.", "y": 0}, {"x": "Turn your backs away or you're gonna get in big trouble out of MY BOYFRIEND'S BACK! Only a happy ending can bloom your innocence that is full of gloom and doom at the very moment you're watching this. It's safe to say that the entire movie falls apart, with a sarcastic approach and tribute to zombie shows that defy nonsense to the max. We get a name like \"Johnny\" every so often, and this \"Johnny\" has nowhere to go. There isn't a specific reason to why our \"dead corpse\" crawls out of his grave just to survive until prom night, so that renders the movie totally useless. Without a feeling of sorrow, his mother is convinced to tell the doctor that he's dead. Johnny takes a bite out of Eddie's arm afterwards. The viewer is asked a tough question: Why does the movie have to be this cornball? There is an answer. Any resemblance to all persons living or dead is purely coincidental. \"Living\" is a coincidence. \"Dead\" has nothing in common with the movie. Show this one to your girlfriend and she'll skip the senior prom, turning your life into a deserted ruin. Blah!!!", "y": 0}, {"x": "I can agree with other comments that there wasn't an enormous amount of history discussed in the movie but it wasn't a documentary! It was meant to entertain and I think it did a very good job at it.

I agree with the black family. The scenes with them seemed out of place. Like all of a sudden it would be thrown in but I did catch on to the story and the connection between the families later on and found it pretty good.

Despite it wasn't a re-enactment of the 60s it did bring into the light very big and important landmark periods of the decade. I found it very entertaining and worth my while to watch.", "y": 1}, {"x": "(Spoilers)

I was very curious to see this film, after having heard that it was clever and witty. I had to stop halfway because of the unbearable boredom I felt.

The idea behind the film would have been acceptable: depicting the way the relationship between a man and a woman evolves, through all the problems and difficulties that two people living in a big city can experience. What made me dislike the whole film were two things.

First of all, the film was so down-to-earth that it looked as if, by describing the problems that a couple must solve on a day-to-day basis, it became itself ordinary and dull.

Secondly, the overall sloppiness of the production, with dialogues that were barely understandable.

Too bad.", "y": 0}, {"x": "I have loved this movie all of my life. It's such an intelligent story also, with plenty of classical allusions. eg. The ship that went missing decades earlier was called the Bellerophon. Well, in classical mythology this was the man who slew the Chimera, a legendary beast composed of two or more other creatures. In FP, Walter Pidgeon is clearly the chimera- himself and his Id monster.

I like movies where the writers have clearly credited their audiences with a modicum of intelligence, unlike most modern blockbusters which spend $150m on special effects, but about $1.50 on a screenplay.

Cheers", "y": 1}, {"x": "For months I've been hearing about this little movie and now I've seen it. I find it cute, cute how so many fledgling directors make movies where they combine other people's creative ideas in order to make their own one-joke premise of a movie. Troops, Swingblade, any of the million Blair Witch parodies come to mind. If all that these directors want is a foot inside Hollywood's door then they're doing the right thing and they should keep it up because combining plot outlines is how Hollywood makes films. How many times have you heard the phrase, \"It's Animal House meets Back to the Future\"; \"It's Wall Street meets Dead Poet's Society\"; or \"Shakespeare in Love meets Star Wars\"? I remember when independent films meant original and daring not safe and predictable.", "y": 0}, {"x": "Personally I think this show looks pretty cheaply made. Some of the actors are terrible. They over do it & seem fake. I can always tell how it's going to end within the first 10 minutes or less of watching because they make it so transparently clear. It's not very well written either. I love to watch it to laugh at it. You know the saying \"It's so bad that it's good?\" Well, that saying applies to this show. I also like to watch just to see if I'm right when I guess how it's all going to end. So far I've been right every time. It's like a little game that I play. It's nice when you are bored & you feel like laughing at something.", "y": 0}, {"x": "Watching \"Ossessione\" today -- more than 6 decades later -- is still a powerful experience, especially for those interested in movie history and more specifically on how Italian filmmakers changed movies forever (roughly from \"Ossessione\" and De Sica's \"I Bambini Ci Guardano\", both 1943, up to 20 years later with Fellini, Antonioni, Pasolini). Visconti makes an amazing directing d\u00e9but, taking the (uncredited) plot of \"The Postman Always Rings Twice\" as a guide to the development of his own themes.

It strikes us even today how ahead of its time \"Ossessione\" was. Shot in Fascist Italy during World War II (think about it!!), it depicted scenes and themes that caused the film to be immediately banned from theaters -- and the fact that it used the plot of a famous American novel and payed no copyright didn't help.

\"Ossessione\" alarmingly reveals poverty-ridden war-time Italy (far from the idealized Italy depicted in Fascist \"Telefoni Bianchi\" movies); but it's also extremely daring in its sexual frankness, with shirtless hunk Gino (Massimo Girotti, who definitely precedes Brando's Kowalski in \"A Streetcar Named Desire\") taking Giovanna (Clara Calamai), a married woman, to bed just 5 minutes after they first meet. We watch Calamai's unglamorous, matter-of-fact undressing and the subtle but undeniable homosexual hints between Gino and Lo Spagnolo (Elio Marcuzzo - a very appealing actor, his face not unlike Pierre Cl\u00e9menti's, who was shot by the Nazis in 1945, at 28 years old!)...In a few words: sex, lust, greed and poverty, as relentlessly as it had rarely, if ever, been shown before in Italian cinema.

All the copies of \"Ossessione\" were destroyed soon after its opening -- it was called scandalous and immoral. Visconti managed to save a print, and when the film was re-released after the war, most critics called it the front-runner of the Neo-Realist movement, preceding Rossellini's \"Roma CItt\u00e0 Aperta\" and De Sica's \"Sciusci\u00e0\". Some other critics, perhaps more appropriately, saw \"Ossessione\" as the Italian counterpart to the \"poetic realism\" of French cinema (remember Visconti had been Renoir's assistant), especially Marcel Carn\u00e9's \"Quai des Brumes\" and \"Le Jour se L\u00e8ve\", and Julien Duvivier's \"P\u00e9p\u00e9 le Moko\".

While \"Ossessione\" may be Neo-Realistic in its visual language (the depiction of war-time paesan life in Italy with its popular fairs, poverty, child labor, prostitution, bums, swindlers etc), the characters and the themes were already decidedly Viscontian. He was always more interested in tragic, passionate, obsessive, greedy characters, in social/political/sexual apartheid, in the decadence of the elites than in realistic, \"everyday- life\" characters and themes, favored by DeSica and Rossellini. In \"Ossessione\" we already find elements of drama and tragedy later developed in many of his films, especially \"Senso\" (Visconti's definitive departure from Neo-Realist aesthetics) and \"Rocco e Suoi Fratelli\"...Even in his most \"Neo-Realist\" film, \"La Terra Trema\", he makes his fishermen rise from day-to-day characters to mythological figures.

\"Ossessione\" is a good opportunity to confirm the theory about great artists whose body of work approaches, analyzes and develops specific themes and concerns over and over again, from their first to their last opus, no matter if the scenery, background or time-setting may change -- Visconti may play with the frame but the themes and essence of his art are, well, obsessively recurrent. \"Ossessione\" is not to be missed: you'll surely be fascinated by this ground-breaking, powerful film.", "y": 1}, {"x": "This film is just plain horrible. John Ritter doing pratt falls, 75% of the actors delivering their lines as if they were reading them from cue cards, poor editing, horrible sound mixing (dialogue is tough to pick up in places over the background noise), and a plot that really goes nowhere. I didn't think I'd ever say this, but Dorothy Stratten is not the worst actress in this film. There are at least 3 others that suck more. Patti Hansen delivers her lines with the passion of Ben Stein. I started to wonder if she wasn't dead inside. Even Bogdanovich's kids are awful (the oldest one is definitely reading her lines from a cue card). This movie is seriously horrible. There's a reason Bogdanovich couldn't get another project until 4 years later. Please don't watch it. If you see it in your television listings, cancel your cable. If a friend suggests it to you, reconsider your friendship. If your spouse wants to watch it, you're better off finding another soulmate. I'd rather gouge my eyes out with lawn darts than sit through this piece of garbage again. If I could sum this film up in one word, that word would be: Suckotrocity", "y": 0}, {"x": "I'm not going to comb over TLPS's obvious peterbogdanovichian flaws. Instead, I shall take a look at the positive aspects of this overrated celluloid pygmy of a film.

1. Peter Bogdanovich managed to make a movie that can be endured in its entirety. This fact alone places the movie high up above and all the way up to the top of his lame filmography.

2. Bogdanovich had shown how amazingly generous some lucky boyfriends can be, by sharing Cybill Shepherd's (his then-gal) fabulous body and breasts with his male audience - and not just on one but on two occasions. Brava! The unquestionable highlights of this cinematic festa del siesta.

3. TLPS has barely a scene without stereotypical country music doodling in the background. (Peter tried to make the obvious point that the movie is set in America's Deep South (as if it weren't bleedin' obvious) so he hammered that point on and on and on...) How is this an advantage, you might ask? Well, when the movie finally ends and the monotonous country music finally ceases massaging your tired ear-drums, you start experiencing a strange exhilaration: \"The movie's finally over!\" It's pure joy.

4. The movie gives all women who look like Cloris Leachman hope. Hope that they, too, may one day snatch a much younger and maybe even good-looking boyfriend.

5. Cloris Leachman's biography (which I realize isn't technically a part of TLPS) gives hope to all women that look like that, that they too may one day win a Miss Chicago beauty pageant. (Provided they have enough money to bribe the jury with.)

(You think I'm joking abut Cloris having won a beauty pageant, huh? Well, check out her bio and then we'll see who laughs last...)

6. The movie was shot in black and white which spared us the sight of Cloris Leachman's face in its original, natural non-glory.", "y": 0}, {"x": "i know technically this isn't the greatest TV show ever,i mean it was shot on video and its limitations show in both the audio and visual aspect of it.the acting can at time be also a little crumby.but,i love this show so much.it scared the hell out of me when it first aired in 1988.of course it would i was 5 years old.but i recently purchased the DVD of the first 3 episodes,which unfortunately i hear is now deleted.and i also heard warner's aren't going to release any more due to the first DVD's bad sales.also the TV show didn't have the same feel as the movies,in fact i thought it had a more sinister tone.even though the colour palette is similar to nightmare on elm street 4(both that film and the TV show were made the same year),this has more of a serious tone whereas the fims were progressively getting more and more sardonic and jokey.not a bad thing,i like freddy as the clown wise cracker.but i think that was the strenght of this TV show,you didn't have freddy popping up every minutes cracking a joke before and after he kills somebody.in fact this has more of a dream feel to it,reinforced by the soft focus of the lense.im not sure if its deliberate on the part of the shows creators or just to the limitations of being shot on video. i love this show,and taken not as a companion piece to the movies can be very enjoyable.much better than anything on TV today.", "y": 1}, {"x": "My 3rd-year French classes always enjoyed this film very much. In a multi-cultural, inner-city high school, the film provided many subjects for discussion (in French in class, but I know a lot of discussion went on in English after class). The most obvious is the relationship between Prot\u00e9e and Aim\u00e9e compared to the one between Prot\u00e9e and France.

I always mentioned that I felt this film had one of the \"sexiest\" scenes I had ever seen in a movie. One year, a 17-year-old African-American shouted, \"Yes!\" when he figured out the scene: the one where Prot\u00e9e is helping Aim\u00e9e lace up her evening dress, all the while both are examining the reflection of the other in the mirror. Directors use the \"mirror technique\" when then want to focus on the inner conflict on the part of one or more character in a scene: this is a perfect example of the technique, and it is \"sexy\".

Most students had trouble understanding the end of the film. One suggested that one theme of the movie was \"Africanism\", and that no matter how much one loved Africa or Africans, one cannot \"become\" African (like the driver tried to do): one must BE African.", "y": 1}, {"x": "The best thing about this movie is that it is fun. It is full of humorous characters and interesting situations, starting with the blithe, innocent Pecker (played appealingly by Edward Furlong) who likes to photograph almost everything he sees in every day life. Other great characters include Pecker's friend Matt (\"he's a thief, but he's really a nice guy\"), Pecker's sister Chrissy (who is addicted to sugar), and Pecker's Catholic grandmother who discovers life in a statuette of the Virgin Mary in her room.

The movie gently makes a point about how every day life has many riches to offer, and it succeeds in making this point without being too heavy-handed about it. There is always a risk, when making messages about the value and dignity of \"common people\", of sliding into a kind of reverse \"holier than thou\" - but \"Pecker\" avoids these traps, allowing the audience to get the point while allowing enough breathing room for viewers to compare this message to their own thoughts on the subject.

I recommend the movie mostly because it is a lot of fun.", "y": 1}, {"x": "Whoever thought that ANOTHER Home Alone film would be a good idea should have their head examined... Same plot, different kid, more villains (which leads to MORE endless stupidity in the traps). The other two films were bad enough, and this is where it hits rock bottom. People may as well watch the other films for plot, as it's all identical.", "y": 0}, {"x": "In this first episode of Friends, we are introduced to the 6 main characters of the series: Monica Geller,Phoebe Buffay,Chandler Bing,Ross Geller, Joey Tribbiani and eventually Rachel Green .

We discover that Rachel, a rich girl that is Monica's friend from high school times, left her fianc\u00e9, Barry, at the altar, since she discovered she didn't love him. She also decides to live with Monica and become independent from her father,getting a new job as a waitress in Central Perk.

Ross, for the other hand,discovered his wife is a lesbian and lost her for Susan, her partner. (We see him moving to a new apartment during the episode)

Monica, in this episode, makes out (and eventually sleeps) with Paul \"the wine guy\", who gave her the excuse of being impotent since he divorced his wife. But in reality, he was just deceiving her.

Ps: I just loooove Joey's and Chandler's haircuts in this first season! =)", "y": 1}, {"x": "A highly atmospheric cheapie, showing great ingenuity in the use of props, sets and effects (fog, lighting, focus) to create an eerie and moody texture. The story is farfetched, the acting is merely functional, but it shows how imaginative effects can develop an entire visual narrative. This movie is recommended for its mood and texture, not for its story.", "y": 1}, {"x": "By 1987 Hong Kong had given the world such films as Sammo Hung's `Encounters of the Spooky Kind' Chow Yun Fat in John Woo's iconic `A Better Tomorrow', `Zu Warriors' and the classic `Mr Vampire'. Jackie Chan was having international success on video, but it was with `A Chinese Ghost Story' that HK cinema had its first real crossover theatrical hit in the West for many years.

Western filmgoers had never seen anything like it. It was a film that took various ingredients that HK cinema had used for years (flying swordsman, wildly choreographed martial arts and the supernatural) and blended them to create a film that was unique in its look, feel and execution. Forget the poor and unnecessary sequels it spawned, this is the original and best.

Director Siu-Tung Ching (still best known as an Action Choreographer on such films as Woo's `A Better Tomorrow 2'/'The Killer') has, under the watchful eye of legendary Producer Tsui Hark, created a masterpiece of Fantasy/Horror cinema. And with such an expert crew at his disposal (no less than 6 Martial Arts Coordinators) the chances of the film being anything but wonderful would be unthinkable.

The editing by the amazingly prolific David Wu (who wrote/directed `The Bride With White Hair 2' and edited such classic titles as `A Better Tomorrow 1/2/3', `Hardboiled' and the cult hit `The Club') is quite simply a work of genius. His crafting of the perfectly choreographed high flying, tree climbing sword fights makes them some of the best HK cinema has ever created. Fast moving, outlandish but never confusing they are, even today, the pinnacle of their art.

The crew of cinematographers have also done miracles. This is a film where every shot is an expertly crafted painting. Where wonderful blue tinged night sequences, shrouded in an ever-present ghostly fog, are the breathtaking platform for our story to unfold. It's a film where everything is used to weave a dreamlike beauty. Even the silken robes and dresses worn by Hsiao Tsing become living parts of the movie, whether in romantic sequences or battle scenes the ever present silk flows across the screen. Even a simple scene where Hsiao Tsing changes robes is turned into a thing of fluttering beauty as every skill on the set combines to create a most memorable scene from such a simple act. The sets are also amazing, giving an other worldly sense to the forests, and the temple and harshness to the scorched, flag filled wasteland of hell for the amazing finale. The production design by Zhongwen Xi deserves the highest praise.

Another major factor to the films success is the music by Romeo Diaz and James Wong. Hong Kong films have given us some fantastic music and songs that have added so much to the success of a sequence, but on `A Chinese Ghost Story' the music is, quite simply, vital. From the opening song onwards the music becomes as important as the characters.

The score is a perfect mixture of modern and traditional instruments. Drums, bells and guitars pound away over the action sequences to great effect, but it's in the slower, achingly romantic pieces that it comes into it's own. Here; flutes, strings and female choral effects create what are possibly the finest pieces of music heard in an HK film. Add to this the female vocal, stunningly beautiful song that plays over Tsau-shen's and Hsiao Tsing's love making, (nothing is ever seen, but the effect is wonderful. This is lovingly innocent movie romance) and you have a shining example of the power a film's music can have.

And we of course have the acting talent. Leslie Cheung (`A Better Tomorrow 1 & 2' and a very popular singer) is outstanding as the innocent tax collector. His work in the (thankfully mild) comic sequences is never over the top and his scenes with Joey Wang are played with just the right amount of passion and innocence.

Joey Wang (who would later be mostly relegated to support roles in films like the Chow Yun Fat/Andy Lau classic \"God of Gamblers\") has never looked more radiant than how she does here. She is the epitome of ethereal beauty. Her portrayal of the tragic Hsiao Tsing is stunning. She shows her characters sadness at what she has become and what she is made to do, but also gives off a subtle eroticism in the scenes where she is luring the men to their gruesome deaths. Veteran actor Wu Ma (`Mr. Vampire', `Swordsman') is great fun as the wise, brave, but ever so grumpy, Yen. He treads a fine line between the eccentric and the annoying with practised ease. And what so easily could have been a character that could have harmed the film is actually wonderfully entertaining and memorable.

But what about the monsters and beasties?, I hear you cry. Well they range from the rather crude but fun stop motion/animatronic zombies that inhabit the temple (resulting in a great running gag with constantly thwarted attempts to munch on the amusingly unsuspecting Tsau-shen), to the rather cheesy but surprisingly effective Lord Black. Complete with an arsenal of vicious flying heads, and quite outstanding wire work. Most of which has, to this day, never been topped.

But the most outstanding effect and creation is the tree spirit's killer tongue. We first encounter this thing with an `Evil Dead' style rushing camera effect as it powers down its victims throats to deliver a lethal French kiss that turns the victims into zombiefied husks. But later it's shown in all its crazy glory. It can grow so big and long that it shoots through the forest after prey, rips apart trees, wraps itself around buildings and coils it's slimy length around people before picking them up and throwing them against tree trunks!! It can even split open to reveal a fang filled mouth! It's an outrageous idea that given the deeply romantic main plot shouldn't work. But it does, to fantastic and unforgettable effect.

So what all this adds up to is a classic example of Hong Kong movie making. A true team effort that has given us a truly ground breaking movie. It's a film packed with wit, invention, action, monsters, martial arts, ghosts, fantastic ideas, lush visuals, beautiful music, and most important to it's enduring charm, one of cinemas most moving romances.", "y": 1}, {"x": "Honestly, this is easily in the top 5 of the worst movies I have ever seen. Partly, because it takes itself so seriously, as opposed to regular light hearted trash, this movies wants you to be emotionally involved, to feel for the characters, and to care about the alleged conspiracy. None of this ever even comes close to happening.

****MILD SPOILERS******

There are 3 main reasons why this movie is so terrible: 1.) Incoherent and totally non-sensical plot. 2.) Annoying style-over-substance \"MTV\" camerawork. 3.) Moronic characters and plot holes.

Allow me to elaborate.

1.) Apparently, when this movies was being made, they couldn't decide whether to make a movie about church conspiracies, the stigmata, or possession. So, guess what? They combined them! An aetheist gets possessed by a dead person, who then makes her exhibit the stigmata so as to expose a church conspiracy. How a regular person is able to transcend death and possess another human being through his rosary is never explained, nor even talked about. Now, instead of just saying what he wants to say, he gives her the Stigmata. WHY? Why not just spit it out? Instead, we get treated to scenes of screaming things in harsh voices, carving cryptic messages on cars, and writing messages on walls. Apparently this priest was also a violent guy, because the possessed young lady also wigs out on one o f the characters, while talking in that cliched, harsh, \"possessed\" voice that we all have heard countless times. This also starts to tie into my second complaint, because whenever the young lady gets the stigmata, she also defies the laws of gravity by floating into the air, and tossing everything and everybody around her as if they were in an earthquake? Why does this happen? Who knows!?! My guess is that the director thought it looked \"cool\".

2.) This movies contains dozens of shots, in slow motion, of course, of birds showing up out of nowhere and flying off, and most annoyingly, of water dripping. This woman's apartment is constantly dripping water! CONSTANTLY! Logically, the place would probably fall apart with this many holes. To sum up this complaint, towards the end, and for absolutely no reason, the camera cuts to shots of water dripping, in slow motion, in reverse!! WHY!?! I have no idea! It has no relevance to anything, and once again, I'm betting it's because the director thought it looked \"cool\".

3.) One of the main characters says he became a priest to explain away holes in science. This doesn't make sense to me. I would think that going to church would be enough, but no, he has to go through the entire rigamarole of becoming a priest. I just don't buy it. Secondly, there are lots of plot holes, a few of which I will elaborate on below. For starters, when she first gets the stigmata, the scene ends with her laying unconscious, bleeding. Next, she's in the hospital. Who called the ambulance? Another one is towards the end, when the previously mentioned \"scientific priest\" character is talking to the spirit who is possessing the girl. He says, \"Take me as your messenger!\" Not a word for word quote, but you get the idea. His response? \"You have no faith, only doubt!\" So, because of this, he possesses an aetheist! An aetheist has no faith, far less then any scientific priest! And then, there's the fact that the object of this movie's conspiracy, this Lost Gospel (of St. Thomas, I believe) is available at local bookstores. The characters are willing to kill to supress this document, but you could walk down to a bookstore and buy it. Maybe this is supposed to take place in an alternate history, where it isn't wide known, but the movie never tries to tell us this, or to even hint that this is an alternate happening of that document's uncovering.

In closing, this movie is terrible to a spectacular degree. It is my arch-nemesis, which I feel the need to insult every chance I get. I loathe it. Final Grade: F", "y": 0}, {"x": "This was a horrible film! I gave it 2 Points, one for Angelina Jolie and a second one for the beautiful Porsche in the beginning... Other than that the story just plain sucked and cars racing through cities wasn't so new in 1970. The Happyend was probably what annoyed me the most, seldomly seen anything so constructed!", "y": 0}, {"x": "A lot has already been said on this movie and I' d like to join those who praised it. It's a highly unique film which uses elements of different genres: drama, comedy, gangster film without making a mess of it. At points you just laugh out loud, at other points you feel for the characters whose mistakes and failures you watch. Sabu's genius can be shown with regard to some sequences of the movie. One is that where all three men chasing one another have an erotic day dream about a young woman that they just passed by on the street. This sequence is beautifully done and illustrates the characters of all three runners very well. It is erotic and funny at the same time. Another example of Sabu's genius is the part of the film where the runners get tired. First one of them, the typical loser among the three guys, hallucinates that the woman that left him for someone else is back again and you see them dancing with one another and in the next shot him dancing with himself which is deeply moving. All of the runners get to this point where they think that have something back they lost or are on track again. And at one part of the movie they stop chasing each other, running in line, just laughing.So here is it all the beauty and the ludicrousness of what we call life which Sabu manages to show throughout the film. His characters fail (do they at the end?) but he doesn't rob them of their dignity. \"Monday\" and \"Postman Blues\" that do justice to Sabu's claim that he is a genius. Go watch them!

", "y": 1}, {"x": "Twenty five years ago, I showed this film in some children's classes in Entomology and can still remember the excitement of the kids; they were spellbound! It is not just about the termites who have built and live in the \"Castles of Clay,\" but also about the other animals who use the mounds. There is a fantastic scene in which a cobra fights a monitor lizard while a colony of mongooses watch. It is a not only good for entomology classes, but also for teaching about ecology since there is so much about the interactions between the termites and other organisms and the whole ecology of all of the organisms that live in and around the mounds.

I wish it was available on DVD, so that I could watch it again and show others.", "y": 1}, {"x": "Waitress: Honey, here's them eggs you ordered. Honey, like bee, get it? That's called pointless foreshadowing.

Edward Basket: Huh? (On the road) Basket: Here's your doll back, little girl. You really shouldn't be so careless with your belongings.

Little girl: Yeah, whatever.

Crash! Boom! Whoosh! Crackle\u0085 Basket: I think that something bad is about to happen.

(Later) Basket: Mmmm. Vicodin! What the\u0085 ? (Tears open letter.) Wow! My ex-girl's handwriting has really improved. And look, her missing daughter looks kinda like the girl with the doll I accidentally was sort of responsible for getting killed, in a way. And she kind of has my hairline. I wonder, should I torture myself and go find her? Let's see what my friends at the precinct think.

Basket's fellow male cop: HAHAHA. Willow's a funny name.

Basket: I think that something bad is about to happen.

(On the island) Basket: What's in the sack? AHHH.

Tree-named crone: It's not her daughter, though.

(In the tavern) Basket: Can you swing that? Big-boned, tree-named tavern wench: Huh? Basket: (smashes a bee). Everything is OK.

Sensually pretty, formerly promising actress playing a lusty tavern scullery maid: That's good. Honey's not a plant, though.

(On the greensward) Willow: Oh, yeah, and I forgot, you are the father my child, Conan, er, I mean Rowen. (Yawns.) I could have stayed and had a life with you. But I didn't. I wanted to be princess of the beehive, instead. I mean, never mind. (Nods off, jerks awake, widens eyes to anime proportions). Mwah, kiss-kiss. Love ya! What were we talking about? Basket: Who burned it? Who burned it? Who burned it? Who burned it? Who burned it? Willow: Edward. Sniff. Blink. Why. Are. You. Yelling. At. Me? Is it because I jacked your Vicodin? Sniff. Snore. What were we talking about? Basket: I think something bad is about to happen.

Willow: My lips hurt.

(In the schoolroom) Rose: What is man? Unappealling twins, in unison: Phallic symbol, phallic symbol.

Rose: Echo? Echo? Basket: Step away from the bike.

Rose: And I'm the good twin.

Basket: I think something bad is about to happen.

(At the beehives) Basket: Hmmm. Hallo? Ow, ow, ow, oh bother. Silly old bear. Snore.

(At the Queen Bee's mansion) Sister Summersisle: You have so much potential. What are you doing here? Weren't you the stud Cher slapped in the face in Moonstruck? (Licks lips.) Basket: I was about to ask you the same thing. Where's the girl? Sister Summersisle: How you drone on. Let's talk about the significance of my superfluous \"s.\" Basket: Look out for that semi-truck barreling toward us! Aaaaah! Oh. Never mind. Goddammit! (Pops another pill.) Mmmm. Thorazine.

(Back at the tavern) Big-boned, supercilious tavern wench: I've tried Weightwatchers, Jenny Craig, South Beech, and I still went up a bear-suit size since last year.

Tree-named crone: HAHAHA. All the better to roast that nosy cop in, my dear.

Big-boned wench: Totally.

Basket: That was the last straw that broke the Basket Case's back! Take that, wench! (Slugs her.) (Edward Basket is mysteriously attacked from behind) Voluptuous tavern wench: EEEE! Snap out of it! Leave the island already and take me with you! Do I have to tackle you or what? Snap out of it, I say! EEEE! Basket: Take that, wench! (Courageously kicks her in the face. Her eyes roll back in her head and become cartoon Xs.) Voluptuous wench: Snore\u0085 (At the Nicolas Cage roast) Ellen Burstyn: And who can forget the part where Basket's cell phone rings in the middle of his bear suit scene and then the call gets dropped. It's like a wireless ad: Help me! Can you hear me now? Hahaha.

Kate Beahan: And remember when I produced the bullets I jacked from Basket's gun? He looked so surprised. You should be more careful with your belongings, Nick. Hahaha. And your movie choices.

All: The drone must die! Basket: (screaming) Oh, yeah, you bitches? Well, roasting me isn't gonna help your goddamn honey! Aaah. My legs! Honey, (honey, get it?) put down that torch and step away from the Basket Case. Honey! Smokey bear says don't play with matches. Hahaha. What the\u0085? Look out for that hurtling semi-truck! Ahh! Oh. Goddammit, these flashbacks from my drug experimentation phase in the seventies are getting old! Where's my heroin? Ouch. Ouch. My watch isn't fireproof. Ouch. I think something bad is about to happen. Can you hear me now? I'm ready for my close up. Goddammit! (Six months later) Voluptuous wench in modern-day slutty attire: I told that eponymous Basket Case to take me with him.

Innocent young drone: I like to help people.

Volptuous wench: Then get me out of my contract for the sequel! I think something bad is about to happen. EEEEE!", "y": 0}, {"x": "I'm glad that users (as of this date) who liked this movie are now coming forward. I don't understand the people who didn't like this movie - it seems like they were expecting a serious (?!?!?) treatment! C'mon, how the hell can you take the premise of a killer snowman seriously? The filmmakers knew this was a silly premise, and they didn't try to deny it. The straight-faced delivery of scenes actually makes it FUNNY! Yes, there are times where the low budget shows (such as that explosion scene), but I think an expensive look would have taken away from the fun of the movie! So if you like B-movies, and the goofy premise appeals to you, then you'll certainly like \"Jack Frost\".", "y": 1}, {"x": "The film portrays France's unresolved problems with its colonial legacy in Western (Francophone) Africa through the befuddled and complex psychoanalytical prism of a young woman, France (herein symbolically representing her nation). It is an often engaging and challenging portrait of a young woman's desire to come to terms with a traumatic moment in her past, in particular, and a nation's desire to reach out to the 'other' it once 'owned' and moulded. This is reflected in the way in which it centres entirely around the notion of travelling (or being in transit) from the present to the past; remembered realities to undeniable contemporary political and economic actualities.

The characters all play a symbolic, albeit a limited and unconvincing role. France, meant to be a visual as well as a totemic representation of contemporary French society, leaves one indifferent to her plight as she seems still to be imbued with the same naivet\u00e9 she enjoyed as a child-in fact as a child she seems more in possession of her reality. The rest of the rag-tag ensemble is just forgettable. The black Africans are, to say the least, offencive impressionistic portraits of former colonised peoples now colonised by the director's poor handling of her material. They are no more than a dark and moribund backdrop against which the blythe-like France wonders seeking a world she never knew, and hoping for one that can never be found in Cameroon.", "y": 0}, {"x": "***THIS POST CONTAINS SPOILER(S)***

I'm not a big fan of Chuck Norris as an actor, but I worship him in all other ways. He also have his own fan web site with \"Chuck Norris facts\" that is really entertaining. But this movie looks like someone was joking with the audience putting all those \"facts\" into one movie. I really don't remember when I wasted my time more than with this \"action\". I don't know what's the worst this movie can offer you: unoriginal and thousand-times-made plot of terrorists who are trying to nuke US by smuggling nuke on US soil or perhaps that \"great\" dialogs and Chucks words of wisdom about life and everything else. Someone may find the worst that terrorists actually speak English in everyday life. It's a never ending list of crap. Not to mention huge amount of archive footage used in film, that is kinda annoying. The chief terrorist send his comrades message through the media when he is captured and the only guy smart enough to see the treat is: Chuck Norris, of course. NO ONE else in America is not smart enough to see that! And the whole action in capturing chief is just ridiculous. One man is sent to walk through a whole terrorist camp UNARMED (I'm lying, he had a KNIFE), escapes his stalkers with JET PACK and then para glides for few hundred, maybe even thousand kilometers to nearest shore (Afganistan border is 450 km far away from nearest shore), where he is rescued by submarine. I hoped that at least fighting scenes will be good, but that's even more funny than the plot. If you didn't know, 85% of terrorist are masters of some martial art, but Chuck and CO beat the sh*t out of them. Not only they kill them easily, they can kick and throw them away by a single move and the bad guys fly few meters like dolls. You may ask me did I watch this movie to the end? I did. Why? Because I just wanted to see who, of these two super heroes, will defuse the nuclear bomb of few hundred megatons and size of a MICROWAVE. And then I realized what fool I am. Of course, it's Chuck's movie after all. And not only he singlehandedly defuse nuke with tweezers, but he do it - TWICE!! I could write a book about all the stupid things in this movie, but I would spend my life spawn.

So, makers of this movie made another Chuck Norris fact to be added on his web site: Can Chuck Norris defuse nuclear bomb? Yes and he can do it twice!", "y": 0}, {"x": "I had just reached thirteen when I first saw this series and I am watching it again, on DVD, over thirty years later. The pictures over the opening credits have never left me. It has affected my view of the world and the peoples in it. My parents were with me long enough to have seen the series with me, and we always discussed the programme afterwards. It gave me a love for studying history and the highest marks I got in our school's public exams!

Sir Laurence Olivier's voice and delivery is timeless and perfect. I get the feeling that the people who lived through it would feel that this is their version of the history of the Second World War. I cannot imagine ever getting bored looking at it. Maybe an similar Cold War series could now be contemplated, although who could replace Sir Laurence is difficult to imagine.

Buy it!", "y": 1}, {"x": "The first two-thirds of this biopic of fetish model Betty Page are very interesting. Betty, as portrayed with enormous sincerity by Gretchen Mol, comes across as a pleasant, girl-next-door type, who saw nothing wrong with what she did (and there certainly wasn't anything \"wrong\" with it). Director Mary Harron, who also made \"I Shot Andy Warhol\" and \"American Psycho\", recreates Betty's America by mixing old black and white stock footage with new, degraded, black and white footage. Once Betty lands in Florida and starts working with Bunny Yeager, color is introduced. Betty's notoriety was mostly the result of her work with Paula and Irving Klaw (Lili Taylor, in a great performance, and Chris Bauer), as well as John Willie (Jared Harris). The scenes where Harron recreates Betty's bondage photography sessions are fascinating and adroitly executed. The early purveyors of fetish material are not portrayed too condescendingly and we get a sense that these folks were part of a tight \"community\". Betty never had too much of a problem with her notoriety, although we get the impression that her reputation prevented her from gaining legitimacy in the straight acting world. Because the film's third act is virtually non-existent, we are left with the impression that we have been watching a feature length documentary on Betty Page rather than a structured drama. Flaws aside, it's a film well worth catching and represents yet another fine feather in the cap of producer Christine Vachon.", "y": 1}, {"x": "...Heads, Hands, and Feet - a band from the past, just like Strange Fruit. A triple whammy there. Those who have professed not to like this film are either heartless or under 40, and have had no experience of the real thing. Sad for them. This is an achingly well-observed little picture that is an excellent way of passing an hour or two, and will probably not even fade much on the second showing. Stephen Rae, Timothy Spall as the fat drummer (in many ways quite the most delightful figure of all), and Bill Nighy - a new name for me - as the neurotic vocalist and front man all turn in super performances, and Juliet Aubrey has lovely doe eyes to go with some sharp acting as Karen, who tries to hold the band together as they spectacularly self-destruct.

The Syd Barrett/Brian Wilson echoes are loud and clear, Mott the Hoople rear up before one in all their inflated ridiculousness, and the script is never mawkish for more than a minute. Don't compare this with Spinal Tap or The Rutles or The Full Monty - it's unfair on all of them. The nearest comparison is The Commitments, and that's no bad thing. And any film that can conjure up memories of Blodwyn Pig - a band I do not remember ever seeing, but the name lives on - well, it shows somebody in the team knew what they were on about.

A small delight, and thanks for the memory.

Oh... and I've got ANOTHER one - Stiff Little Fingers; a-a-and what about SteelEYE Span... Spooky TOOTH... Ten Inch NAILS anyone? (You have to see the movie or have been on the road)", "y": 1}, {"x": "The information contained in this movie is somewhat familiar to many who have been paying attention to the news lately. The Walter Reed scandals show a small part of the fact that we are not doing a good job taking care of our injured heroes when they return.

What this movie further shows is a truth common to all wars. The psychological trauma that soldiers suffer while engaging in war and the difficulty they have when returning to civilian life. They are not just changed or affected, they are different people and most do not know how to deal with that as they do not know themselves.

Finally, this film shows what the military does to our young men in women in getting them ready for war and the policies and practices that they have to follow in prosecuting war that leads to all the psychological trauma.

We have over 3000 dead soldiers in the four years of this invasion; but we have many tens of thousands that will suffer lifelong physical and psychological trauma because of this war. It doesn't matter what side you are on, it behooves you to know the cost of war to decide if we should be in that business. This film illustrates the costs to the men and women perfectly.", "y": 1}, {"x": "I just viewed Detention last night and i liked what i saw. It was a cool fun movie.Dolph looked superbly cool on the Bike.He also looked good in this movie as compared to his other recent movies.He is now in a pretty good shape.The story was ok and the other actors were also passable.I wouldn't call this movie his best but its still a good movie.

But it also had its share of Problems. The first one was the way bullets were flying everywhere and even when they were being fired at point blank range they missed the target.They should've had shown the ppl escaping the bullets in a better way. Another problem which i had was the way the students were swearing. I dont know in which school the students can swear in front of their teacher and even in the classroom. The third problem was that the bad guys were very few in numbers. There should've been more bad guys. Last problem was definately the fact that the set looked cheesy , but that was due to the small budget. Overall the movie was a good Movie.I enjoyed it.I would recommend others to watch it. P.S. Now u r a DEAD beat cop. (Some One-liners were also cool)

", "y": 1}, {"x": "I can't believe they got the actors and actresses of that caliber to do this movie. That's all I've got to say - the movie speaks for itself!!", "y": 0}, {"x": "Based on a true story, this series is a gem within its kind. The slave that becomes queen by capturing the heart of the most powerful man in the village.

In the diamond mining town of Tijuco in Brazil, the diamond commender--appointed by the king of Portugal--is the ultimate authority. Having grown up in the relative security of his house, the young and beautiful Xica da Silva finds her world threatened when he decides to sell her to a whorehouse in town, refusing to recognize that a black slave girl could be his daughter. In a desperate bid to save herself, Xica steals the diamonds collected by the diamond commender for the king, intending to use them to escape. The king's army arrives to collect the diamonds the very next day, however, and when the loot turns up missing, the diamond commender is led away in chains, his family dispossessed and thrown out in the street with only the clothes on their backs. Martin, the diamond commender's son, swears vengeance. Xica and the other slaves, however, are sold at auction, and Xica ends up in the home of the Sergeant Major, an old man who bought her solely to slake his lust. To the town of Tijuco, however, comes the new diamond commender, the elegant and ruthless Joao Fernandes. Immediately struck by Xica's beauty, he manipulates the Sergeant Major into selling her to him. And thus begins a love story, filled with danger, intrigue and passion, between a willful nobleman and a crafty slave girl who rises to one day become queen.

The series is filled with rich details of the era's beliefs, superstitions, politics, fashion, etc. etc. And it really manages to captivate your attention for every minute. At times funny with a sarcastic and dark humor, full of suspense and unexpected twists. \"Xica da Silva\" is definitely a must. I wish I could buy the whole series on DVD.", "y": 1}, {"x": "How has this piece of crap stayed on TV this long? It's terrible. It makes me want to shoot someone. It's so fake that it is actually worse than a 1940s sci-fi movie. I'd rather have a stroke than watch this nonsense. I remember watching it when it first came out. I thought, hey this could be interesting, then I found out how absolutely, insanely, ridiculously stupid it really was. It was so bad that I actually took out my pocket knife and stuck my hand to the table.

Please people, stop watching this and all other reality shows, they're the trash that is jamming the networks and canceling quality programming that requires some thought to create.", "y": 0}, {"x": "I am a great fan of David Lynch and have everything that he's made on DVD except for Hotel Room & the 2 hour Twin Peaks movie. So, when I found out about this, I immediately grabbed it and...and...what IS this? It's a bunch of crudely drawn black and white cartoons that are loud and foul mouthed and unfunny. Maybe I don't know what's good, but maybe this is just a bunch of crap that was foisted on the public under the name of David Lynch to make a few bucks, too. Let me make it clear that I didn't care about the foul language part but had to keep adjusting the sound because my neighbors might have. All in all this is a highly disappointing release and may well have just been left in the deluxe box set as a curiosity. I highly recommend you don't spend your money on this. 2 out of 10.", "y": 0}, {"x": "I'm always suprised on how different all people are and how for almost every movie you get both extremes. People who think it's the best movie and people who think it's the worst.

Stigmata wouldn't be the worst movie I've ever seen, but it's up there. First of all the sound. The producers spent more time on the soundtrack than the editing. It was so loud when the soundtrack was playing and no one was talking and then when Patrica was talking in her monotone voice, she could hardly be heard.

I usually like Patrica and Gaberial, but they were both flat in this movie. Patrica had basically 3 emotions. Quiet, in great pain, or really angry she has stigmata. The first was the predominate one, the second involved screaming pain, the third involving raising her voice. It was loudness that distiguished the three and not emotion.

Maybe I missed a lot of the deep meaning and subplots everyone was talking about, or maybe I was distracted by the terrible filming and MTV like style. When you watch a 3 minute video you need fast cuts and slow motion to convey a quick story, in a 2 hour feature film, it's nauseating. I fail to see the meaning of her seeing that women across the steet and dropping a child. And no Pittsburg does not rain that often!!

I think maybe a real story, with something to say could have been intended, but all the budget was spent on buying music and the equipment to do slow rain drop shots and renting that gorgous apartment that Ms. Arquett lived in that they ended up firing the guy with the story.", "y": 0}, {"x": "Seriously, I've read some of the reviews on this film, and I have to ask, were you people watching the same movie.

Yes, I give the set directors a lot of credit for being able to recreate 1930 vintage Los Angeles, but so what?

None of the characters are likable, the story seems aimless, Karen Black is simply not a very good actress. Donald Sutherland is just icky. (and his character \"Homer Simpson\" makes me wish for the animated version. D'oh!) Then you had the creepy child actor, the creepier Billy Barty, and so on.

This is one of those films cinema buffs love and the rest of us look at each other and go, \"What the heck!\"", "y": 0}, {"x": "Ossessione, adapted loosely (or if it is as loose or close to the version I saw of James M. Cain's The Postman Always Rings Twice with Jack Nicholson and Jessica Lange I can't be certain) by first time director Luchino Visconti, is no less outstanding with usage of mis-en-scene, music (both diegetic and non-diegetic), and the acting. I didn't know what to expect Visconti to do in his approach to the material, after seeing La Terra Trema and seeing how sometimes his political motivations snuck in a little bit. But this is a totally character and emotional based drama, bordering on melodrama (however, without the conventions that bog down lesser ones), and with the style in the finest path of the budding film-noir movement, Visconti creates a debut that's as involving as any other neo-realist film. Neo-realism, by the way, could rightfully be claimed as this being a forefather (along with De Sica's The Children Are Watching Us), which that would take shape after the war. Although love and romance is more in play here than in some of the more famous neo-realist efforts, it's dealt with in a bare-bones storytelling fashion, and it's laced with other familiar themes in neo-realism (the lower-class, death, desperation).

Aside from the story, which is simply as it is described on this site, the artistry with which Visconti captures the images, and then layers them with objects (a shawl over Gino Costa's profile when in guilt), shadows and darkness that tend to overcome many of the later scenes in the film (usually over Gian and Giovanna), and the feel of the Italian streets in many of the exterior scenes. Domenico Scala and Aldo Tonti (who would lens some of Rossellini and Fellini's films) help in envisioning the look of Ossessione, which is usually moving in on a character, then pausing to read as much emotion on their faces, their voices and mannerisms lovely and ugly, sad and dark and romantic. I think I've just scratched the surface on how effective it was that the film itself was moving me along, even as I was in fear of the futures of the two leads. The two leads (Massimo Girotti and Clara Calamai) portray all the compelling, truthful, and near-operatic emotions, and the key supporting actors are also without their attributes.

It's a brilliant, crushing adaptation, and it points as a striking signpost of what was to come for Visconti in his career.", "y": 1}, {"x": "***SPOILERS*** ***SPOILERS*** From its very opening credits this fantastic movie sets the record straight: it's an instant classic. It doesn't take long to realize that this movie is big, bigger than `Kindergarten Cop' or `Police Academy 7.' The sheer greatness of it left me speechless as I walked out of the movie theater and proceeded right back to the ticket counter to purchase myself another dozen of tickets.

This is a movie that simply requires multiple viewings. The first watching will surely leave you with that strange `Huh?' feeling, but don't feel embarrassed - it happens to the best of us. The story is so diabolically clever that one has to wonder about the mortality of its authors. What seems to be a simple story of an idiot infiltrating the FBI, turns out to be an allegorical story that works on several levels and teaches us all about the really important things in life. The complexity of the plot structure will baffle you on your first viewing, but don't give up! Not until my sixth or seventh viewing did I only begin to unravel some of the hidden mysteries of `Corky Romano.' And watch out for the unexpected twist at the end, otherwise you might be caught completely off guard when it is revealed that FBI agent Brick Davis is FBI's most-wanted criminal, Corky is not a real FBI agent, Pops Romano is innocent, Peter Romano admits he's illiterate and Paulie Romano comes out of the closet as a homosexual. Surprised the hell out of me, I can tell you that much.

Chris Kattan's comedic talents are unmatched as he leads his character Corky Romano through a maze of totally unpredictable situations. Reminiscent of John Reynolds' performance in `Manos, the Hands of Fate,' Kattan takes on innumerable multiple personalities and tackles all scenes with perfect comedic timing. However, Kattan is not just about comedy. He is a master of drama as well, as he controls the audience's feelings with the slightest moves of his face. His facial expressions reflect life itself, in a way. For example, in the scene in which he farts into his brothers' faces, you can see the expression of social injustice and alienation clearly reflected on his anguished face. At a moment like that, it's hard to find a dry eye in the house.

Screenwriters David Garret and Jason Ward are the real heroes of `Corky Romano.' With a story of such proportions, it's easy to understand why two experienced writers had to be employed to complete this ambitious project. Their skillful storytelling and unorthodox structuring makes `Pulp Fiction' look like a mediocre Saturday Night Live skit. Garret and Ward's story is so compelling and alluring that it grips you by your hair, swallows you entirely, shakes you around and spits you right out. At the end of the out-of-this-world experience known as `Corky Romano' you find yourself a different person with different worldviews and different ideas, and with only one question on your mind:

Why, God? Why?!?", "y": 0}, {"x": "Unfortunately, the realism is boring. This movie, I thought it would never end, would have been better if all the characters would have been nuked in the first five minutes. Where's Blade when you need him? While as dismal as COMBAT SHOCK, REQUIEM FOR A DREAM and as nightmarish as BOISE MOI, DEAD CREATURES isn't nearly as entertaining as any of the aforementioned bleak movies. While the gratuitous cannibalism might make the wannabe Jeffery Dalmers hearts race a little faster, it wasn't nearly as interesting as RAVENOUS. Really, I found it about as interesting as late-night infomercials, and as exciting as a trip to the dentist. If you have strong masochistic qualities, you might be able to endure this, otherwise, for no one. I was really surprised that this one wasn't made by the people at Brain Damage as that was the quality of Dead Creatures.", "y": 0}, {"x": "In the same vein as Natural Born Killers, another movie that was not so popular with critics because of its excessive violence but that I also loved, Kalifornia is a movie that clearly glamorizes violence, but I like to think that it turns that around in the final act. Kind of like how The Basketball Diaries glamorizes drugs at first, but shows the bad side by the end of the movie, which is far worse than the good side is good. David Duchovny plays Brian Kessler, an artistic yuppie with an even more artistically yuppie girlfriend, who is into that violent sexy black and white photography generally reserved for, I don't know where, places where nudity passes for art. Maybe it really does and I just don't understand it. At any rate, Brian and Carrie (Duchovny and Michelle Forbes, who fits the role flawlessly), make the perfect couple to go on a documentary tour of famous murder sites. Brian, the writer, will write the book, Carrie can take the pictures.

Being artistic types, Brian and Carrie are not quite financially prepared for such a trip, so they put out an ad for someone to share gas and travel expenses, and are contacted by Early Grace and Adele Corners (Brad Pitt and Juliette Lewis). Early is on parole and assigned to janitorial work at the local university by his parole officer, sees the ad on a bulletin board, and decides to leave the state for a while, violating his parole but also leaving the scene of his landlord's murder so he won't have to deal with a pesky murder investigation. Two birds with one stone, you know.

The movie has a curious ability to portray two stereotypes, the artsy yuppies and the greasy trailer trash, without resorting to clich\u00e9s or even ending up with caricatures of either type. Brian and Carrie are artsy liberals, but while Carrie catches on to Early and Adele, Brian is fascinated with Early's status as an outlaw, as seen in the scene where Brian shoots Early's gun. Never having fired a gun before, he's as fascinated as a little kid. While Adele and Carrie are back at a hotel and Adele reveals such things in her childlike way as the fact that Early \"broke her\" of smoking and that she's not allowed to drink (Early doesn't think women should), Early and Brian are out at the local bar. Brian reacts nervously to a drunk trying to start a fight with him, and Early first gives advice to Brian on what to do and then steps in and dishes out a quick lesson for the guy. \"Hit him, Bri, it's comin'.\" This is one of my favorite scenes in the movie, partly because it's so funny what Early gleefully says as the guy's friends drag him away, bloodied and battered, but also because as it is intercut with the girls back at the hotel, we learn so much all at once about the two couples, their differences, and the conflicts that are likely to come up because of them. And besides that, because Brian benefited from Early's actions and Carrie is appalled by what she hears from Adele, it also illustrates the different way that Carrie and Brian react to Early and Adele.

Clearly, by now, you can tell that this is not your typical odd couple type of thriller, where the city folk run into the country folk and all sorts of stereotypical mayhem ensues. On one hand it seems a little too convenient that Brian and Carrie go on a tour of murder sites and just happen to be accompanied by a real life murderer, but on the other hand it's a great way to counteract the glorifying of murder that is inherent within a cross-country trip designed to bring fame to murderers and their crimes. While studying the actions of past murderers, Brian and Carrie ultimately find themselves face to face with the very material that they are studying, and realize that murder is not as pretty or morbidly fascinating when it's in your face as it is through disconnected studies of murders past.

I am constantly amazed at Brad Pitt's versatility as an actor. Consider, for example, his roles in movies like Kalifornia, 12 Monkeys, Fight Club, and Ocean's 11 and 12. Pitt is like Tom Hanks in that he can change his appearance drastically or just enough to fit a given character, and is completely believable. Incidentally, I tried in vain to be Early Grace for Halloween this year, but just couldn't get the hair and beard right. I even got the hat right, which initially I thought would be the hardest part.

It's easy to understand why a lot of people disliked Kalifornia or why they think that it glorifies violence and murder, but I think that whatever glorifying it does is done with the intention of clarifying the audience's understanding of its subject matter. A film that didn't glorify violence, at least initially, could never be as effective as Kalifornia, but the movie structures it perfectly. The glorification is all embodied in Brian's and Carrie's fascination with the idea of murder and the auras of the places in which is happened, but their realization, and ours, is embodied in the real thing, which they encounter with Early and Adele. The movie's very purpose is to describe that difference between idealizing violence and seeing the horror of it up close and for real.", "y": 1}, {"x": "Like most people, i was drawn to buy this film because of the pictures of the mighty Bolo Yeung plastered all over the box, and the assumption (from the aforementioned pictures and the title of the film) that this film is all about the Beast from the East kickin' ass for 90 minutes.

However, to my disappointment, Chinese Hercules is to Bolo Yeung what No Retreat No Surrender was to Jean Claude Van Damme and Fearless Tiger was to... erm, Bolo Yeung - maximum exposure on video box, minimum actual screen-time! Oh well!

The storyline is pretty basic stuff, but it was well done - peaceful kung fu fighter (played by Chen Hui Min) accidentally kills a man and promises never to fight again. He then runs away to work as a labourer on a pier where he impresses his co-workers with his heavy sack lifting prowess, causing them to suspect him to be a formidable fighter (dont quite know how that works but never mind). Meanwhile, the corrupt boss of the pier does a deal with gangsters, giving them exclusive use of the pier. As a result, the workers are thrown out on their ear and forced to live on the beach, where they unite against their boss, the gangster boss, and his hulking henchman Bolo Yeung.

While the film was quite watchable (mainly through waiting for the next glimpse of Bolo), i had a few problems with it - firstly, the bad dubbing, but of course thats a given in old kung fu films. But also, the film tended to drag between the various fight-scenes. And as for the fight scenes themselves, i found them to be over-long, badly choreographed (apparently by Jackie Chan!), badly shot and at times performed by people who didn't seem to have any martial arts ability.... in fact, most of the fights in this film weren't 'fights' at all, just people getting beaten up without offering any resistance!

Finally, the hero - played by Chen Hui Min. I've never seen any other films with this guy in, but at no point was i rooting for him. Not only did he look wimpy and on the verge of tears at all times, but i found his insistence on not fighting infuriating! I understood his reasoning, but he could have saved a lot of people a lot of pain if he had done earlier what we all knew he was gonna do eventually, and fight! A bigger mystery was why this entire community of people were pinning their hopes on a guy they've never even seen fight!

Really, the big saving grace in this film was the presence of Bolo Yeung. Not only is he as huge and brutal as ever, he has some great, funny lines and gives the rest of the cast a master-class on how to fight on film. The guy oozes screen presence and you can easily see how he became a star. The guy scares the life out of me, but i'm sure i wasn't the only person to have watched this film who was rooting for Bolo all through the end fight!

All in all then, a below-average kung-fu film lifted several huge notches due to you-know-who. I've never met a person who didn't think Bolo Yeung was great. The man's a legend!!", "y": 0}, {"x": "I believe they were telling the truth the whole time..U cant trust anything in the wild... They family went through hell.Those poor boys too young to understand what was going on around them. But still having to deal with the rumours. As well as dealing with the lose of their little sister. I cant believe this case went on for so long.seems like the jury couldn't see the truth, even if it bit them on the ass.I feel for this family, and if i could let them know i hate what has happened to them, i would.I have no idea what they went through, i cant even imagine it. After watching this movie, i was in tears, and had to check on my little girl in bed...I think everyone should watch this.", "y": 1}, {"x": "\"In Cold Blood\", adapted by director Richard Brooks from Truman Capote's famous novel, deals with the brutal and senseless murder of a family of four by a pair of hapless criminals. The film excels as a character study of the killers, particularly trigger-man Perry Smith (Robert Blake).

The cast includes few recognizable names but they nevertheless bring the story to life with ease. Robert Blake and Scott Wilson are excellent together as two criminals with disparate personalities. They play off of each other effortlessly while Blake also gets plenty of opportunities to explore his character's idiosyncrasies. The rest of the cast is merely average and isn't worth remarking on.

Richard Brooks received Oscar nominations for both his script and his direction. In my opinion, both were excellent, though the script does miscalculate with some ill-advised narration in the late stages. The Oscar-nominated cinematography by Conrad Hall is also top-notch, as is the editing. Also worthy of note is the jazzy score by Quincy Jones which secured the last of the film's four Oscar nominations.

Unlike so many other crime films, this one doesn't glamorize violence. Brooks turns the killers into pitiable characters rather than flatly condemning them. Whether or not you agree with that sentiment the film does present an interesting alternative to the usual Hollywood approach. I recommend the film for this reason and also for the expertise with which the technical aspects are handled.", "y": 1}, {"x": "It was considered to be the \"Swiss answer to the Lord of the Rings\", but it is much more than that. It isn't an answer to anything, it's in itself something new, something funny and sometimes it's downright stupid and silly - but was Monty Python any different than silly?

The beginning immediately makes the statement that this film is low budget and not meant to be taken entirely seriously. Cardboard clouds on strings knock into the airplane in which the main character is seated. But, to compensate the missing special effects, the landscape does the trick. It is absolutely beautiful and stunning - who needs New Zealand, Switzerland has it all.

What I liked about the film was the simple approach and the obvious passion and energy that went into it. It isn't brilliant; yet it's got some good humorous parts. Edward Piccin as Friedo is absolutely convincing, it would be enough to go and see the film because of him!There are some good jokes, some of them are very lame, some of them won't be understood by people outside of Switzerland. I liked the idea of having \"Urucows\" instead of Uruk Hai; I loved the scene where Friedo decides to take \"Pupsi\", a telehobbie, with him on the journey. Also very funny is the scene when Rackaroll, the sword-fighting knight, decides to show off with his sword - and subsequently smashes it into a wall, breaking it. And there is this one scene where the \"nazgul-ish\" characters do a wonderfully comic scene that includes a toilet brush... I didn't approve of the idea of the Ring being used by Schleimli, the \"Gollum\" character, in order to \"seduce\" the ladies. That was a bit far fetched. The idea of Lord Sauraus wanting to cover the lands with fondue wasn't that brilliant either. Original, certainly, but not brilliant. But most of all did I dislike the idea of a gay dragon, that really wasn't necessary. All in all I recommend to see the film simply because it is so crazy and totally trashy. Don't expect a LotR parody like \"Spaceballs\" was for Star Wars. But if you go to the flicks thinking that this is going to be an amusing evening out, with absolutely no ambitions, then you'll enjoy. I am not sure if it works in other languages, because it does live from the Swiss dialects as well as from the jokes and actors.

All in all: hat off to the courage of the Swiss crew who did that!", "y": 1}, {"x": "\"Red Rock West\" was far and away one of the best suspense thrillers of the 90's with a superb script (by John and Rick Dahl) that kept you guessing throughout and on the edge of your seat for most of the film. It was brilliantly directed by John Dahl and featured a marvellous cast including Nicolas Cage, Dennis Hopper, Lara Flynn Boyle and especially J. T. Walsh (in a memorable performance) making this a riveting and captivating thriller not to be missed. The film never had much publicity on release (in fact I first caught up with it on TV) and is therefore one of those special little gems that you have to seek out but this unique film is now slowly gaining a cult following.

Nicolas Cage is Michael Williams who is broke and out of work when he finds himself in the small town of Red Rock. Mistaken for a contract killer named Lyle from Dallas he is shocked to be offered $10,000 to murder the wife of bar owner Wayne Brown (the excellent J. T. Walsh). He plays along with the plan and decides he should go and warn Brown's wife Suzanne (Lara Flynn Boyle) but then the plot thickens and there are so many twists, turns and surprises - and double dealings - that Cage is thrown from one crisis to another and finds himself trapped in a terrible situation he can't drag himself out of! Then just to complicate matters even further the real Lyle turns up to carry out the contract killing (played by everyone's favourite heavy Dennis Hopper). When Hopper discovers what has happened he goes after Cage but no one could forsee the surprising events that follow.

Some favourite lines from the film:

Nicolas Cage (to Lara Flynn Boyle): \"I hate to see an innocent woman get hurt but it's an awful lot of money\".

J. T. Walsh (to Cage): \"Michael Williams. Well, Michael, you're going to be spending some time with us till we get to the bottom of this\".

Boyle (to Cage): \"You're not a killer?\". Cage: \"That's right, no. But the guy I'm supposed to be just rode into town so you gotta get out of here\".

Boyle (to Cage): \"O.K. How you're going to explain impersonating a hired killer and taking $10,000 from my husband?\".

An extraordinarily entertaining little thriller (just 98 minutes) with a storyline that never lets up and powerful acting by all the principals. Any film featuring J. T. Walsh is O.K. in my book and \"Red Rock West\" was one of his best. How sad it was that this exceptional actor's career was cut tragically short by a heart attack in 1998. The most prolific period for \"film noir\" was without any doubt the forties but \"Red Rock West\" is a good modern example of the genre and has jumped right into my \"Top Ten\" list of all time favourite films. I look forward to more like this from director John Dahl. 10/10. Clive Roberts.

", "y": 1}, {"x": "Fatal Error is a really cool movie! Robert Wagner, Antonio Sabato Jr., Janine Turner, Jason Schombing, Malcolm Stewart, and David Lewis are in the film. The movie's cast all acted really well. Robert Wagner played his role good. The relationship between Saboto Jr. and Turner was a nice one. There maybe a big age difference there but they are a unique couple. The two actors really worked together rather well. The music in the film is really good by Ron Ramin and fits the flick very well. There is a bunch of stuff that happens in the movie which you don't know what is going on and what is going to happen next and this movie keeps you going from beginning to end. If you like Robert Wagner, Antonio Sabato Jr., and Janine Turner then watch this excellent movie!", "y": 1}, {"x": "To those who have not followed the Anne Marie Fahey Murder case. You are missing out one of the saddest yet complicated murder of all. The murderer is popular Delaware attorney, Tom Capano and the victim is the Delaware Governor's Scheduling Secretary, Anne Marie Fahey. Their relationship was a well-kept secret until her disappearance and murder. She wanted to leave him but he just wouldn't let her go so easily. On the other hand, he had a mistress and a wife and four daughters. Where did he find the time to have two mistresses and a domestic family life? Besides, the case is extremely complicated and fascinating for a four hour mini series. While the actress who plays Ms. Fahey does a fine job, she does not have her dark long hair. His other mistress is definitely more attractive than the actual woman. Mark Harmon is better looking and does an Emmy award winning performance as Tom Capano. It would be better with actual Delaware and Philadelphia locations. With Ann Rule's executive producing, she adds accuracy to Anne Marie's characteristic of organization and her personal battle with an eating disorder. These bits of information might be overlooked by any other executive producer or director. If you have not read the book, it is well worth it. Ann Rule is a fascinating storyteller of true crime. It is ironic that Mark Harmon plays Tom Capano. He also played Ann Rule's former friend and subject, Ted Bundy in an another book adaptation many years ago. He was brilliant then and now. He does an above average job with an amazing story. Even President CLinton offered his assistance in the Anne Marie Fahey case. And now, the former Governor Tom Carper is now the United States Senator for Delaware who defeated longtime, popular incumbent Senator Richard Roth in the November 2000 election. IF you don't think the movie is interesting, then the read Rule's book.", "y": 1}, {"x": "Horrible film with bits of the Ramones strewn about. Your worse than average 1970's/80's comedy format of the cool kids taking over the school with some whimsical plan. This movie is terrible. The plot consists of a girl who enjoys the Ramones and a school bent on fighting against their oppressive administration. Forget this movie and watch something like Wild Zero starring Guitar Wolf if you want an entertaining B movie. Terrible acting, terrible writing, terrible plot with the stamp of approval of the Ramones who probably needed some money quick so they said yes to this movie. That is the only logical thing I can think of because this movie blows.", "y": 0}, {"x": "I love the movies and own the comics, the comics are different then the movie but still I'd give it: 10 out of 10. It was awesome. If the movies got anymore awesome. I would have her babies. And I am female. Read the comics you won't regret it. Yes in this movie since Brian P. the artist for her died we don't get nearly as good artistic work. I mean seriously don't get me wrong these people did great, but different versions for different people. Different Strokes for different folks as the saying goes. Any guy who doesn't go bonkers over her is insane, or does not like women, or you know just plan insane. If I could count on my fingers how in love and how many times I have read the comics I would run out of fingers for sure, but hey there is always toes.", "y": 1}, {"x": "By reading the box at the video store this movie looks rather amusingly disturbing. You know the type....funny but supposed to frighten you.... this was not funny or horrific. the writing was lame...the jokes failed to make me laugh even at their extreme mundaneness....they were so expected. the actors didn't even do much with such a not so good script...at least I hope that wasn't their best..watch this movie at your own risk......I give it negative 3 stars outta 10", "y": 0}, {"x": "Bloodsuckers has the potential to be a somewhat decent movie, the concept of military types tracking down and battling vampires in space is one with some potential in the cheesier realm of things. Even the idea of the universe being full of various different breeds of vampire, all with different attributes, many of which the characters have yet to find out about, is kind of cool as well. As to how most of the life in the galaxy outside of earth is vampire, I'm not sure how the makers meant for that to work, given the nature of vampires. Who the hell they are meant to be feeding on if almost everyone is a vampire I don't know. As it is the movie comes across a low budget mix of Firefly/Serenity and vampires movies with a dash of Aliens.

The action parts of the movie are pretty average and derivative (Particularly of Serenity) but passable- they are reasonably well executed and there is enough gore for a vampire flick, including some of the comical blood-spurting variety. There is a lot of character stuff, most of which is tedious, coming from conflicts between characters who mostly seem like whiny, immature arseholes- primarily cowboy dude and Asian woman. There are a few character scenes that actually kind of work and the actors don't play it too badly but it mostly slows things down. A nice try at fleshing the characters out but people don't watch a movie called Bloodsuckers for character development and drama. The acting is actually okay. Michael Ironside hams it up and is as fun to watch as ever and at least of a couple of the women are hot. The space SFX aren't too bad for what is clearly a low budget work. The story is again pretty average and derivative but as I said the world created has a little bit of potential. The way things are set up Bloodsuckers really does seem like the pilot for a TV series- character dynamics introduced, the world introduced but not explored, etc.

The film does have a some highlights and head scratching moments- the kind of stuff that actually makes these dodgy productions watchable. -The scene where our heroes interrogate a talking sock puppet chestburster type creature. Hilarious. - The \"sex scene.\" WTF indeed. -The credit \"And Michael Ironside as Muco.\" The most annoying aspect of it all though is the really awful and usually inappropriate pop music they have playing very loud over half the scenes of the movie. It is painful to listen to and only detracts from what is only average at best.

Basically an okay watch is you're up for something cheesy, even if it is just for the \"chestburster\" scene.", "y": 0}, {"x": "A mediocre Sci-Fi Channel original picture. A little squirmish, but not much. The nuclear powered submarine U.S.S. Jimmy Carter is on a mission deep below thick frigid ice near the North Pole when it is attacked by giant super charged electric eels. A member of the crew (Simmone Jade Mackinnon)thinks she has devised a way to communicate with the monsters, but is not given much chance for vague reasons. Also among the crew are:David Keith, Mark Sheppard and Sean Whalen. This movie could have been somewhat better if the eels/monsters were not so cartoonish.", "y": 0}, {"x": "For getting so many positive reviews, this movie really disappointed me! It is slow moving and long. At times the story is not clear, particularly in the evolving relationships among characters. My advice? Read the book, it's a fabulous story which loses it's impact on screen.", "y": 0}, {"x": "I would have liked to give this movie a zero but that wasn't an option!! This movie sucks!!! The women cannot act. i should have known it was gonna suck when i saw Bobby Brown. Nobody in my house could believe i hadn't changed the channel after the first 15 minutes. the idea of black females as gunslingers in the western days is ridiculous. it's not just a race thing, it's also a gender. the combination of the two things is ridiculous.i am sorry because some of the people in the movie aren't bad actors/actresses but the movie itself was awful. it was not credible as a movie. it might be 'entertaining' to a certain group of people but i am not in that group. lol. and using a great line from a great, great movie...\"that's all I have to say about that.\"", "y": 0}, {"x": "The Write Word

What you see is what you get. Not really! What Madhur Bhandarkar's brave and brilliant 'Page 3' does is destroy the myth attached to the glam and glitterati that colour the pages of our newspapers and whose lives(read party habits) we follow with such maniacal fervour which only our intrinsic voyeuristic streak can explain.

The page 3 phenomenon is as deplorable as it is enigmatic. How exactly did it gain such control over the printed word and when did it start to encroach into the front page is subject for another debate. Bhandarkar cleverly avoids that. He is concerned only with the mechanisms of this grotesque existence. And in doing that, he pieces together the various elements of this way of life. Like Robert Altman(although I'm not comparing Bhandarkar to Altman's genius), Bhandarkar uses myriad characters to further his motive. Whether it is a page 3 wannabe NRI, the gate-crashers, the newly-rich, an upcoming model, a socialite politician or an erotic novella authoress; all the characters are introduced with an objective and each of them has a separate character-sketch, even if their parts may be miniscule. And therein lays the film's appeal.

Konkona Sen Sharma plays Madhavi Sharma, a young and talented journalist who covers page 3 for Nation Today. Initially content with her job, she soon begins to see the ugliness of this underbelly that is covered by its fake and cosmetic profligacy. But Bhandarkar resists the temptation to make this subject into a moral-policing movie and avoids concentrating on one character alone. Hence the movie is not only about Madhavi, but also equally about Deepak Suri(Boman Irani)- Madhavi's editor who passively accepts his role as a cog of a larger machinery, Anjali Thapar(Soni Razdan)- a socialite suffocating from the social pollution, Abhijeet(Rehan Engineer)- a homosexual make-up artist and Madhavi's roommates Pearl(Sandhya Mridul)- the sassy airhostess and Gayatri(Tara Sharma)-an aspiring actress. It seems like an impossible task to assimilate so many characters(and more) in one story, but full credit to Nina Arora and Manoj Tyagi for penning a tight screenplay. The dialogues by Sanjeev Datta and Bhandarkar have been written with great attention to detail.

Any narrative, no matter how good, can fall flat with the lack of genuine performances. Thankfully, 'Page 3' brims with actors and not stars. Konkona goes through her author-backed role with effortless ease. Ditto Boman. Sandhya Mridul gets the best written part, but almost overdoes it. Atul Kulkarni is wasted though with an underwritten character. At times, the director seems too keen to incorporate as much as possible(paedophilia, homosexuality, etc.). But the contexts in which they are used do not make them look rushed.

Ultimately, Bhandarkar's attempt is to satiate our voyeurism, but he takes it a step further. He takes us inside the photographs and exposes us to the gruesome realities of this sect of humanity that strangely seems to be living in a different and remote world. These are the same people that indulged in new-year's revelry while a few hundred kilometers away their fellow countrymen had been ravaged by nature's ferocity! Clever writing, skillfully incorporated songs, able performances and a genuine feeling of sincerity are what make this film worthy in spite of its lack of finesse and poor production values. 'Page 3' is an optimum way to enter a new year of cinema.

- Abhishek Bandekar

Rating- ****

* Poor ** Average *** Good **** Very Good ***** Excellent

29th January, 2005", "y": 1}, {"x": "If this movie should be renamed, it should be \"The Jackasses of Hazzard.\" To sum it up, this movie is nothing but 88 minutes of two immature country punks joyriding the famed 1968 Dodge Charger around town and in the country, chasing the girls and eluding the law.

I have been a fan of the \"Dukes\" and what tarnishes the movie is the characters are out of key. The overindulgence of profanity, sexual references, and drug use, has made the good name of the \"Dukes\" into trailer trash.

Side from comparing it to the television show, the acting was horrible. The only actor that got it right was the famed 1969 Dodge Charger named General Lee. The others have exaggerated the character's role which tarnished the movie.

The \"Dukes\" have been another casualty of the 21-st century Hollywood television-to-big screen transition tragedy. Skip this movie and just buy the television series on DVD.

My grade: F", "y": 0}, {"x": "Oh a vaguely once famous actress in a film where she plays a mother to a child . It`s being shown on BBC 1 at half past midnight , I wonder if ... yup it`s a TVM

You`ve got to hand it to TVM producers , not content on making one mediocre movie , they usually give us two mediocre movies where two themes are mixed together and NOWHERE TO HIDE is no different . The first theme is a woman in danger theme cross pollinated with a woman suffering from the pain of a divorce theme which means we have a scene of the heroine surviving a murder attempt followed by a scene having her son Sam ask why she divorced ? And being a TVM she answers that the reason is \" That people change \" rather than say something along the lines like \" I`m a right slapper \" or Your daddy cruises mens public toilets for sex \" as does happen in real life divorce cases . And it`s young Sam I feel sorry for , not only are his parents divorced but he`s as thick as two short planks . Actually since he`s so stupid he deserves no sympathy because he`s unaware that a man flushing stuff down a toilet is a drug dealer , unaware that you might die if someone shoots at you , and unaware that I LOVE LUCY is painfully unfunny . If only our own childhoods were so innocent , ah well as Orwell said \" Ignorance is strength \" . Oh hold on Sam is suddenly an expert on marine life ! Is this character development or poor scripting ? I know what one my money`s on . And strange that Sam the boy genuis hasn`t noticed that if the story is set in 1994 then why do people often wear clothes , drive cars and ride trains from the 1950s ? But as it turns out during a plot twist it`s the mother who`s the dummy . Then there`s a final plot twist that left me feeling like an idiot for watching this", "y": 0}, {"x": "David and Bathsheba is a lavish Hollywood Biblical picture produced out of 20th Century Fox by Darryl F. Zanuck, directed by Henry King and starring Gregory Peck {King David}, Susan Hayward (Bathsheba), Raymond Massey (Nathan), Kieron Moore (Uriah) and Jayne Meadows (Michal).

The film is based around the second Old Testament book of Samuel from the Holy Bible. It follows King David, who as a child had slain the giant Goliath, and now we find him in adulthood as the second King of Israel. A tough and assured King, David however has affairs of the heart causing great problems. For once he spies Bathsheba taking a shower {re;bath}, it 's the start of a journey encompassing adultery and betrayal; a journey that will end in the judgement of God being called upon.

Typically for the genre, David & Bathsheba is a large, grandiose production. From its excellent set designs to it's positively gorgeous Technicolor photography {Leon Shamroy}, it has enough quality to warrant sitting along side the best the genre has to offer as regards production values. Untypically, tho, the film is sedately paced and relies on 99% of its worth being driven purely by dialogue. This is not one for action fans or anyone who needs some swash to go with their buckle. This is a very humanist picture, in fact lets not beat around the burning bush here, it's a Biblical love story flecked with sins of the heart. But that is no bad thing at all, because breaking it down we find it's very well acted {Peck has a stoic yet vulnerable thing going on real well & Hayward is pushing it to the max}, and it be a fine story directed with knowing skill by the often forgotten Henry King. And although some of the dialogue is admittedly cringe inducing, the character flow is never interrupted as Phillip Dunne's (The Ghost and Mrs. Muir) Oscar nominated screenplay holds the attention throughout.

Sometimes a forgotten picture in terms of the Biblical/Swords & Sandals genres (most likely because it is a talky piece that has heart as its main selling point), but really it's well worth the time of anyone interested in the most lavish of genres. 7/10", "y": 1}, {"x": "This one hearkens back to the days of the matin\u00e9e, when kids with nowhere else to hang out took their dates to the balcony after dumping their younger siblings below. It didn't matter what was on the screen - the little kids would sit through it and the big kids would ignore it. The adults, of course, would never see it.

But they put it on video, anyway, along with most of the other creaky, low-budget \"B\" horror flicks of the golden age...of television. This film's inherent and unintentional humor is derived from stale ideology (the \"bad girls\" harvested to replace poor Jan's crushed body - they had it comin'), overused plot (a mad scientist, trying to play God), violent yet conscientious monster (whose presence in the heretofore-normal-seeming scientist's rural lab is never fully explained), and acting that polarizes at wooden or over-the-top.

This is a great party film, assuming your guests enjoy adding dialog and commentary to otherwise abominable cinematic exploits. In fact, should you or your guests prefer more passive entertainment, this film is also available on video in its \"Mystery Science Theater 3000\" treatment, in which the host and puppets of the cult TV series make the necessary additions for you.", "y": 0}, {"x": "Recap: Ron is about to marry Mel. They are deeply and love and certain they are perfect for each other even though they met just a few months ago. Todd, Ron's brother in law to be is not so happy. He is afraid the marriage is a threat to his cushy job in the family business and decides to arrange Ron's bachelor party. But his real plan is to put Ron in a compromising situation, get evidence and break Ron and Mel up.

Comments: Supposed to be a sequel to a comedy classic but it isn't funny at all. It is mostly a pubertal show and a juvenile excuse to show scantily clad women. Actually, in a way, it is almost impressive have many you can put in there, because they are everywhere. Unfortunately that is also one of the signs of a movie that can't support itself. It simply isn't good enough.

It has three redeeming points though, or actually three actors that is worth a better script than this. It is lead actor Josh Cooke who actually manages to give an impression of some common sense. Sara Foster I know has more talent than to do movies like this, and Emanuelle Vaugier seem to have a lot more talent than this movie.

What is suspiciously absent are good jokes. Actually, bad jokes are rather scarce too. It just isn't funny.

3/10", "y": 0}, {"x": "An incredible little English film for so many reasons. First it's a rare look a Laurence Olivier in a light comedy. While his performance is not up the standard he would latter set as one of the greatest actors of the 20th century, he is perfectly believable as the hoodwinked barrister. Historically this film is of great interest because of both where and when it was shoot. Being English it didn't have the big budget of the Hollywood films of the same era and it often shows, but more interesting is the fact this movie filmed just prior to the war and shows an England that would soon be gone. When we watch it today we think in terms of modern morality and over look the fact that this movie and its closest American counter part `It Happened One Night' were in their day as risqu\u00e9 as `Fatal Instinct' was in our time. But after watching and enjoying this movie the first time I can't help but feel sadness when I watch it today. With half of film shoot before 1950 gone, saving the remaining films means hard choices, and unfortunately films like this are often passed over to save movies that we all consider important. The color shifting, lack of contrast, and generally poor quality of the print most often seen is heartbreaking. This movie along with `It Happened One Night' are perfect to curl up with a love one under a blanket on cool a cool evening and watch, or better yet why not a double feature.", "y": 1}, {"x": "Plotwise this is a rather silly little whodunnit masquerading as a period drama/biopic.

However the only reason I wanted to see it in the first place was because I was curious about what the great Henry Fonda was really like at his peak. I wasn't disappointed - he produces a truly warm and charismatic performance.

In addition I can honestly say that I was never really bored at any stage during the film, so a strong ***1/2 Out of *****", "y": 1}, {"x": "I'm 14 years old and I love this cartoon. Burt Reynolds and Dom Deluise make a great pair. This movie is really funny and I love the songs. My favorite songs are \"You can't keep a good dog down\" and that song about sharing, I think it's called \"What's mine is yours\". This was the last movie with Judith Barsi, who played the voice of Anne-Marie. My favorite character is Charlie but I find Itchy's voice is so fun to hear. Although some scenes I actually found scary, I still have a hard time watching the scene with Charlie's dream, and Carface scares the crap out of me. Other characters like King Gator I found really funny. The ending was adorable and was actually sad, made me cry a little. I give this movie 7/10.", "y": 1}, {"x": "The greatest games of Kasparov or Fischer can be a mess for a total rookie. This is a great movie. There is no special agency involved in the plot. This is the clue! This is a PRIVATE plot, built as a PRIVATE enterprise. This is a self-destructive and a self organized plot. As a conclusion, the scenario described the perfect professional plot: private, self \u0096organized, self-destructive, with no trace at the end. Anyone can be behind the plot: a smart \"director\" with some money. All can be done just by delegation. The \"director\" must be just trigger. If the normal viewer cannot see the essence of the plot in the explicit sequences of the movie, a real plot has fewer chances to be discovered. All the actors' performances are well done , with some special mention for Gene Hackman and Mickey Rooney.", "y": 1}, {"x": "I have nothing to comment on this movie It is so bad that I had to put my first comment on IMDb website to help some viewers save some time and do something more interesting, instead of watching this \"movie\" ... anything will do, even stare at the walls is better.

And because I have to write minimum 10 lines of text, i tell you also is a low budget movie, bad acting, no name actors, a stupid mutt as the wolf, and so on... Also the story brings nothing new, the special effects are made in the 80's style.

The movie is almost as bad as the movie \"Megalodon\".

So have fun! ;) (not watching this movie)", "y": 0}, {"x": "Sergio Martino has impressed me recently with his Giallo classics 'The Strange Vice of Mrs Wardh' and the unforgettably titled, 'Your Vice is a Locked Room and Only I Have the Key' - but even so, I wasn't expecting too much from this film. The Case of the Scorpion's Tail doesn't get mentioned as much as the aforementioned titles when it comes to classic Giallo discussion - but I don't know why, because this is at least as good as those two! Dario Argento may be the 'king' of Giallo, but with the five films that he made - Sergio Martino surely isn't too far behind. In some ways, he even surpasses the master. All of Martino's films were released prior to the jewel in Argento's crown, the magnificent Profondo Rosso, so back in the early seventies - Martino was the king! The plot here follows the idea of murder for profit, and follows the insurance payout of a wealthy man. His wife inherits $1 million, and it isn't long before there's people out for her blood! When she turns up dead shortly thereafter, an insurance investigator and a plucky, attractive young journalist follow up the case.

The Case of the Scorpion's Tail may not benefit from the beautiful Edwige Fenech, but it does have two of Martino's collaborators on board. Most famous is George Hilton, who worked with Marino on The Strange Vice of Mrs Wardh and All the Colors of the Dark, along with a number of other Giallos. Hilton has a great screen presence, and every time I see him in an Italian thriller; it becomes obvious why he is repeatedly cast. The beautiful Anita Strindberg, who will be remembered from Your Vice is a Locked Room, stars alongside Hilton and excellently provides the classic Giallo female lead. Sergio Martino does a good job in the director's chair once again, with several beautiful scenes - the best of which taking place in a room bathed with green lighting! The score by Bruno Nicolai (Wardh) excellently sets the mood, but it is the script that, once again, is the driving force behind Martino's success. Ernesto Gastaldi, the writer for Martino's other four Giallo, has put together a script that is thrilling while staying away from the common Giallo pitfall of not making sense; thus liberating this film from the rest of the illogical genre. The Case of the Scorpion's Tail is a quality Giallo film, and yet another success for the great Sergio Martino. If you like Giallo, you'll love this!", "y": 1}, {"x": "A group of friends decide to take a camping trip into the desert-and find themselves stalked and murdered by a mysterious killer in a black pick-up truck.\"Mirage\" is obviously inspired by Spielberg's \"Duel\" and Craven's \"The Hills Have Eyes\".Still this slasher yarn offers plenty of nasty violence and gore.The film's gory highlight is a sequence involving a man having his arm and leg chained together around a tree and then having his limbs dismembered when the chain is pulled by a truck.There is also a little bit of suspense and some exciting stalk-and-slash sequences.The acting is pretty lame and the script is quite weak,but the film is fast-paced and shocking.B.G.Steers who plays the villain is fairly threatening.The desert locations provide some atmosphere and the gore is rather strong.Overall,if you like low-budget horror films give this one a look.8 out of 10.", "y": 1}, {"x": "Semana Santa is jaw-droppingly bad. It's so wrong in so many ways I don't where to begin. So, let's see...Mira Sorvino, whose judge husband has been shot while protecting her, goes from Madrid to Seville for her cop job. During the holy week (Semana santa, see?...everybody begins to fall sleep..told u it was bad in so many points, even from the beginning), a killer executes his victims like bulls in a bullfighting arena. She teams up with male chauvinist pig Olivier Martinez and nice Feodor Atkine. Soon she discovers she'll be the next target of the killer (who wears a red robe). Why, oh but why?

Why..;that's the questionthat has been in my head the whole movie.

Q :Why did go to see that A : Because i love Mira Sorvino (i even excuse her for that AT FIRST SIGHT crap)

Q : Why were we only 8 people in the theater this saturday on the first week end of release? A : ah-ah-ah. Spider-man got relaesed the same day. But also the fact that the movie has been blast with execrable reviews.

Q : Why this movie has been made? A : Money I guess. But boy did Mira need the money.

then...why???????????? first of all, there's always something wrong with european co-productions. here you got a french-english-german-italian-spanish-danish production. yi-ha.

Then it wants to play on the same playgroung as US thrillers/slashers/whodunit/mysteries/whatever. Even VALENTINE, though unnecessary and badly scripted and shot, was much better in the suspense and the fun.

Then , to give some credit to the story, the screenwriter wanted to add some political sight to the story. Wrong : done in flash-backs in a Traffic-like photography, it's certainly the most interesting thing i n the movie. Could have stick to it, it wouldn't have to sit through the whole movie. Better go straight to Guillermo del Tros's THE DEVIL'S BACKBONE (El espinazo del diablo)for some clever fun.

Then the homophobia. Bullseye! The first victims are S&M drug addicted gay twins who got stabbed to death. The annoying olivier Martinez goes to a dating agency held by a badly shaved overweight transvestive with a blond platinum wig. Calls mira Sorvino's character a big dyke all the time. Do we need this kind of stuff? Nah. Just needless offensive remarks, just like ol'times.

Then the suspense. Yipee. No apparent motive. The first murders are plain illusion as they're a representation of a famous painting. But no. And the revelation of the killer (a horrible fascist, of course) could have been done from the beginning as he appears at the end of the movie as, I guess, it was time for the director to say \"weel, time to finish that damn movie. let's reveal right now who the killer is and why he kills\".

Then the director thinks he's a director. Wrong : no sense of suspense, no sense of directing the actors, no knowledge of change of pace. A Giant, mega-bore. The scenes of the holy week are needless (maybe a co-production rule saying : ok, shoot in Sevilla but show some creditsof this beautiful and historical town with the celebrations of Easter. There we are : a mystery movie for tourists!)

Then the actors. All wrongs. Mira Sorvino bores herself to death : she does practicly nothing except getting stabbed in the right hand. Everything she did best (the Replacement Killers, Mighty Aphrodite...) were like they never existed. Olivier Martinez...hello, anybody here? When the producers will learn that he's not an actor but a mannequin with no ability of speech nor feelings? Feodor Atkine, bland and transparent. Only do we pay great respect to Alida Valli, one of the greatest actress this last century (and I hope for some more roles in this current one). She's tha main attraction here as she's the only one to give life to her poor lines. I won't mention the other actors as they're only one-sided characters, uninteresting and shallow.

Incoherent direction, inconsistent actors, implausible plot. Idiocy incarnated.

Superwonderscope says : 1

", "y": 0}, {"x": "usually I support independent art and i try to be very comprehensive and tolerant...i tend to support everybody, because their efforts are worth...

but this movie just moves away from all comprehension and tolerance limits!

imagine the following situation:

1. think about the REALLY WORST horror movie you have ever seen in your life so far.

2. think about some great, attractive ART for that movie's DVD box...and a promising plot...

3. voil\u00e0! you got ZOMBIE NATION.

see it only if you really don't have anything else better to do. ANYTHING is better.", "y": 0}, {"x": "I must warn you, there are some spoilers in it. But to start it off, I got \"Spanish Judges\" on February I think. It was mention it was the last copy, but as I see, it wasn't back-ordered. But either way, I have it. I thought it was good. I wanted to see this mainly because of the great actor, Matthew Lillard (I'm surprised no one on the reviews mention the scar) although it is kind of low budget, getting enough money to make this film would be worth spending. Man, what a good actor.

The story it about a con artist known as Jack (Matthew Lillard) who \"claims\" to have merchandises called The Spanish Judges. If you don't know what Spanish Judges are or haven't seen the trailer for this and this is the first review you have read, I won't even say what they are. I figure it would be a big twist of no one knew what it was. He needs protection, so he hires a couple who are also crooks, Max and Jamie (Vincent D'Onofrio and Valeria Golino) as well as a crook that goes by the name of Piece (Mark Boone Junior). He has a girlfriend who won't even tell anyone her name because she's from Mars, as she said. So they (mainly Jack) call her \"Mars Girl\". Everything starts out fine, but then it turns to one big game. A game that involves some lust, lies and betrayal.

There was some over acting in it (Matt and Valeria, as well as Tamara, were not one of them). There were some scenes they could've done better and the score could've been a little better as well. Some of the score was actually good. The theme they used for the beginning and the end (before the credits) was a good song choice, that's my opinion. The fight scene in the end could've been a little longer and a little more violent, but what can you do? One more comment on Matt: Damn, he plays a smooth, slick con man.

I know this is a review, but I need to make a correction towards NeCRo, one of the reviewers: Valeria Golino is not a newcomer. According to this site, she has been acting since 1983. To me, and hopefully to others, she is well known as Charlie Sheen's Italian love interest in both the \"Hot Shots!\" movies. But good review.

Although I think it's one of the rare films I've seen and it's really good (which is why I gave it 10 stars above), I will give the grade of what I thought when I first saw it.

8/10", "y": 1}, {"x": "I think I found the most misogynistic film of all time: Darklight.

The gist of the film- Lilith was Adam's first wife and she was considered imperfect and banished from the garden of Eden because she considered herself Adam's equal and refused to submit to him. See, I took those words straight from the script. Then the film keeps going on and though she is the heroine of the film, the only time that she becomes acceptable is when she does what the men tell her to do! She ends the film under the control of The Faith- an all male group!

Other than that the script was predictable and the FX were awful. Apart from the obvious hatred of females that is usually a lot more subtle in modern film, there was nothing original about Darklight.", "y": 0}, {"x": "**Possible Spoiler*** Adam Sandler is usually typecast in Comedy,but in \"Reign\",gives a deeply moving performance.While there are people who showed Courage facing post September 11,2001,Sandler plays Fineman,a widower who is lonely and \"lost in his own world\".Johnson(Cheadle),a practicing dentist,encounters his old College buddy(Sandler)and wants to catch up on \"Old times\".We see,as in Rain Man(Dustin Hoffman),Fineman also gets emotional and withdrawn in stressful situations.Oldies music,appears to be a comfort and \"Psychological\" crutch for him to lean on.

Johnson looks for,in Fineman,that certain pleasure and ease missing in his Family.He also feels unhappy and unsatisfied in his Job.In the same instance,He also wants to make sure his friend does not fall through the social \"cracks\".I came away from this movie,with a different outlook and more sympathetic Compassion for grieving families.", "y": 1}, {"x": "Crude, some times crass - to me that's the summation of Madhur Bhandarkar's latest work - Page 3. He has no point of view - just shallow, funny digs at stereotypes. What is the movie about?? Is it about reporting a clan of people (so called Page 3 types) who are so busy socializing and progressing their profiles in life - that they have no time for anything else. And you are either in it or out of it. Is it that there is no press at all to report everyday incidents. Madhur Bhandarkar forgets that there is a main newspaper and Page 3 is just a supplement; perhaps an entertainer for checking out who's who and what's what. Don't mix the two. And then there is power play - that would happen in every walk of life. So what have you told at the end of it all - nothing - just a few crude jokes strung together in an otherwise direction less movie.", "y": 0}, {"x": "In Lizzie Borden's \"Love Crimes\" (1992), Sean Young plays a gritty D.A. in Atlanta. She's a loner who gets herself too deeply involved in the case of a man (Patrick Bergin) who poses as a famous fashion photographer and seduces women, takes compromising photos of them, then leaves them.

Naturally, this tough loner decides to enter the phony shutterbug's life by posing as his prey, intending to bring him to justice. They meet, they make love, then the next thing she knows, she is over his lap, getting spanked. (Note: The spanking scene is only in the \"unrated\" version of this film. The R-rated version omits it and several other scenes that would make the plot more lucid.) This psychological thriller includes several scenes of female nudity and disturbing images, such as Bergin chasing one of his victims around the room, flailing at her with a riding crop.

As a thriller, \"Love Crimes\" is at its best when Sean Young is playing her cat-and-mouse game with Bergin, trying to catch him in an incriminating act. It's unfortunate that the film doesn't end, it just stops. That's true. Director Lizzie Borden may have just run out of story to tell, but after 92 minutes the credits roll, and we are left with a puzzling \"what just happened?\" bewilderment.

The unfolding of Young's plan is played out in engaging style, but the lack of a coherent ending will be a turn-off for some viewers.

Dan (daneldorado@yahoo.com)", "y": 1}, {"x": "Is nothing else on TV? Are you really bored? Well, then watch Phat Beach. However, don't rent it and definitely DO NOT buy it. That would be a big mistake.

I watched this on TV and found myself laughing at certain points. I did not laugh long and I did not laugh hard. However, there were subtle jokes and comments I laughed at. If you are looking for an extremely funny \"hood\" movie then watch Friday. If you are looking for a powerful emotional movie (something that this movie tries at..kind of) watch something like hoop dreams or Jason's Lyric. If you are lookin for some good black \"booty\" go watch a Dominique Simone porn flick, because the nudity in this movie is nearly non-existent. However, if you have nothing better to do and this is on cable, go ahead and watch it. You will be slightly amused.

***3 out of 10***", "y": 0}, {"x": "Much as we all love Al Pacino, it was painful to see him in this movie. A publicity hack at the grubby ending of what seems to have once been a distinguished and idealistic career Pacino plays his part looking like an unmade bed and assaulting everyone with a totally bogus and inconsistent southern accent.

The plot spools out this way and that with so many loose ends and improbabilities that the mind reels (and then retreats).

Kim Basinger is there, not doing much. Her scenes with Pacino are flat and unconvincing. Hard to believe they meant a lot to each other. There's no energy there.

Tea Leone, on the other hand, lit up the screen. She was electric and her scenes with Pacino were by far the most interesting in the movie, but not enough to save Al from embarrassment.", "y": 0}, {"x": "I read Schneebaum's book (same title as this film) when it was first published and was deeply moved by his ability to see through the many ways of \"otherness\" (his own and the people of the Amazon with whom he lived and loved) to a way of living a decent life. His subsequent books were not as powerful, but showed his continuing quest. His description of his sexual relations with the men of the tribe was way ahead of its time in the early 60's, but his honesty and openness about it were welcome. This movie beautifully conveys both the quirkiness and generosity of the man, but also provides a glimpse into the inevitable destruction of innocence (which is not a morally positive term, in this case) that occurs when \"civilized\" men intrude on traditional societies. Even so, Schneebaum himself has moved into a kind of higher innocence that suggests the possibility of saving humanity from its own destructiveness.", "y": 1}, {"x": "Apparently Hollywood is just handing out money to anyone with a camera and the ability to speak. This movie was mind numbingly bad. The casting was terrible, the acting unspeakable, and the story filled with holes. Script? who needs script? I was surprised that the movie wasn't as verbally vulgar as I thought it would be, however I got enough shots of T&A to last me a lifetime. The movie was like listening to a 19 year old street racer with ADD (who decided to buy a car instead of go to college) tell a story. Being so poorly scripted, I thought the two brothers in the film were lovers at first. The scenes at the racetrack, along with the main female actor in the film kept making me think of Herbie: Fully Loaded. This is the kind of film is what Grindhouse modeled itself after...only the writers thought they were being serious.", "y": 0}, {"x": "I would rather of had my eyes gouged out with rusty ice picks than have had to sit through this abortion. There is no plot. There is no acting ability . Ray Liota has shamed himself and should be blacklisted from any more work. I am so sorry that the industry allows crap like this to be shown on any type of medium.

Rumor has it that Maddona threw herself to the floor to break her other arm so she could be taken away on a stretcher. Actullly, she deserves to be married to this loser and wanna-be-actor-director. I hope she stays in London and never returns to the USA. Please do not waste your money on this so called film. I beg of you.", "y": 0}, {"x": "True, the idea for this TV series may have sprung from the immense success which Ally McBeal is enjoying worldwide, even here in Germany. However, this said, Edel & Starck is very different from Ally McBeal in many ways.

The two main characters work beautifully together. Felix Edel (Felix Noble), played by well-known German actor, Christoph M. Ohrt and Sandra Starck (Sandra Strong - Noble & Strong, get it ???), played by charming Rebecca Immanuel, exchange quick romantic repartees and continually spy on each other while engaging in sitcom-like criminal cases in Berlin and surroundings. Further, they are aided by a magnificent cast of co-stars, most notably their secretary, played by Isabel Tuengerthal, who is a rare gem with GREAT comic potential. Also the shady wheeler-dealer, Otto, and the noble childhood pal of Felix, Frank, work very well, not to forget Sandra's best friend and room-mate, Patricia, played by the beautiful Barbara Demmer.

All-in-all a joy to watch on Monday nites: no wonder that the series and its stars have received several prizes. Will Felix get Sandra ?

I hope that we will have to wait for many more episodes to find out......", "y": 1}, {"x": "THE. WORST. FILM. EVER. MADE.

After watching this supposedly gay made film, I suspect someone rounded up a brain damaged half blind neo-nazi and had him make the worst gay film ever, all in some deluded attempt to attack gay culture. I had to stop the movie and call a friend to come over just so I had someone to scoff at when I paused the movie out of shock, disbelief and outrage at such sheer stupidity.

On top of all the horrible writing and acting and illogical and stupid plot, its just a poorly made film. A dog with a handycam tied to its tail could have churned out better.

Seriously, after reading the few positive reviews this movie has here, I suspect the writer must have a half a dozen IMDb accounts. Anyone who says this film is even watchable as anything other than a joke, is a liar or being paid heavily to say so.", "y": 0}, {"x": "My wife and I watch a film every night with no distractions, and mostly artsy films that require thought. I have tons of patience for films that are slow to blossom. My wife has double the attention span that I do. All that being said-- this film is just plain empty and BORING! It went nowhere. Never blossomed. It started fairly strong with a promising plot...then she bakes cookies...goes to Spain....she sulks, she stares....the credits roll. Uneven, full of holes, false starts & dead ends. We FF'd through several extended sequences of her just staring off into space. Artificial depth was implied when she played with the mud and cried. Zzzz...... It's like a beautifully shot chick-flick that's pretending to be deep or artsy. You never get to know nor understand Morvern at all. About halfway through you just don't care anymore. We just wanted to see at least one of the plot lines develop. Don't waste your time on this. I'm shocked it scores so high.", "y": 0}, {"x": "Chances are if I watched this again I might get physically sick, the film is so annoying.....unless you believe in psychics, re-incarnation and the other hocus- pocus which this promotes big-time. The \"re-cycling of souls,\" they call it here. Puh-leeze.

This story has been done several times before with such films as \"Heaven Can Wait.\" It's also been done a lot better. Too bad they had to waste the talents of Robert Downey Jr., Cybill Shepherd, Ryan O'Neal and Mary Stuart Masterson.

At least it's a pretty tame film, language-wise. That's about the only redeeming quality of this movie.", "y": 0}, {"x": "All good movies \"inspire\" some direct to video copycat flick. I was afraid that \"Gladiator\" wasn't really that good a film, because I hadn't seen any movie that had anything remotely resembling anything Roman on the new releases shelf for months. Then I spotted Full Moon's latest offering, Demonicus. I'm a fan of Full Moon's Puppetmaster series, and Blood Dolls, but had never seen one of their non-killer puppet films. Anyway...

Demonicus chronicles what happens to a group of campers in the mountains of the Alps. One of the campers, James, finds a cave with old gladiator artifacts, and feels impelled to remove a helmet from a corpse and try it on. He becomes possessed, and, as the demonic gladiator Tyrannus, is impelled to kill his friends to revive the corpse, who is the real Tyrannus.

Granted, like many Full Moon films, this has little or no budget. At times, the editing and direction was so amateurish I'd swear I was watching the Blair Witch Project. The attempts at chopping off of limbs and heads reminds me of a Monty Python skit. The weapons, although apparently real, look really plastic-y. It literally looks like this was filmed by a group of friends with a digital camcorder on a weekend. Granted, there's nothing wrong with such film-making, just don't rent this expecting a technical masterpiece. It looks like there were attempts at research for the script too, because, even though Tyrannus really doesn't act much like a gladiator until the end, at least he speaks Latin.

All trashing aside, I actually enjoyed this film. Not as much as a killer puppet film, perhaps, but Full Moon still delivers! The only thing that disappointed me was there was no Full Moon Videozone at the end!", "y": 1}, {"x": "In her autobiography,Laureen Bacall reveals that Bogie told her that she should not make such dud movies as this one or something like that.At the time,Douglas Sirk was labeled \"weepies for women\",actually,he was restored to favor,at least in Europa,after he stopped directing.And when he filmed \"written on the wind\" ,Sirk had only three movies to make:\"tarnished Angels\",\"A time to love and a time to die\",his masterpiece,IMHO,and finally\" Imitation of life\"(1960).Then there was silence. Actually Bacall and Hudson characters do not interest Sirk.They are too straight,too virtuous.Dorothy Malone -who was some kind of substitute for his former German star Zarah Leander-and her brother Robert Stack provide the main interest of the plot.A plot constructed continuously ,most of the movie being a long flashback.The instability of the brother and the sister ,from a family of rich Texan oil owners,is brought to the fore by garish clothes,and rutilant cars that go at top speed in a derricks landscape. Malone's metamorphosis at the end of the movie is stunning :suit and chignon,toying with a small derrick:she's ready for life,the rebel is tamed. Now alone,because she's lost Hudson (but anyway,he was not in love with her).This end is a bit reactionary,but melodrama is par excellence reactionary;three years later,in \"imitation of life\",Sarah-Jane (Susan Kohner) will be blamed because she does not know her place.", "y": 1}, {"x": "Steve Martin should quit trying to do remakes of classic comedy. He absolutely does not fit this part. Like the woeful remake of the Out Of Towners, this movie falls flat on it's face. How anybody ever thought Steve Martin could even come close to Jack Lemmon's wonderful performance is beyond me and the same is true for this movie. Dan Ackroyd could have played the Bilko part better. Martin is great when doing his own original characters but fails miserably trying to recreate other people's classic work. It's a sad statement when the funniest part of a movie is contained in the first line of the credits when the movie is over. The line \"The producers gratefully acknowledge the total lack of cooperation by the United States Army\" was just about the only line that actually made me laugh. If you want to see the real Bilko, get hold of the original episodes of the Phil Silvers Show. Those are guaranteed to make you laugh, unlike this mistake that should never have happened. I put this movie in the same category as the aforementioned Lemmon classic and the remake of Psycho. None of them should ever have happened.", "y": 0}, {"x": "First things first, Edison Chen did a fantastic, believable job as a Cambodian hit-man, born and bred in the dumps and a gladiatorial ring, where he honed his craft of savage battery in order to survive, living on the mantra of kill or be killed. In a role that had little dialogue, or at least a few lines in Cambodian/Thai, his performance is compelling, probably what should have been in the Jet Li vehicle Danny the Dog, where a man is bred for the sole purpose of fighting, and on someone else's leash.

Like Danny the Dog, the much talked about bare knuckle fight sequences are not choreographed stylistically, but rather designed as normal, brutal fisticuffs, where everything goes. This probably brought a sense of realism and grit when you see the characters slug it out at each other's throats, in defending their own lives while taking it away from others. It's a grim, gritty and dark movie both literally and figuratively, and this sets it apart from the usual run off the mill cop thriller production.

Edison plays a hired gun from Cambodia, who becomes a fugitive in Hong Kong, on the run from the cops as his pickup had gone awry. Leading the chase is the team led by Cheung Siu-Fai, who has to contend with maverick member Inspector Ti (Sam Lee), who's inclusion and acceptance in the team had to do with the sins of his father. So begins a cat and mouse game in the dark shades and shadows of the seedier looking side of Hong Kong.

The story itself works on multiple levels, especially in the character studies of the hit-man, and the cop. On opposite sides of the law, we see within each character not the black and white, but the shades of grey. With the hit-man, we see his caring side when he got hooked up and developed feelings of love for a girl (Pei Pei), bringing about a sense of maturity, tenderness, and revealing a heart of gold. The cop, with questionable tactics and attitudes, makes you wonder how one would buckle when willing to do anything it takes to get the job done. There are many interesting moments of moral questioning, on how anti-hero, despicable strategies are adopted. You'll ask, what makes a man, and what makes a beast, and if we have the tendency to switch sides depending on circumstances - do we have that dark inner streak in all of us, transforming from man to dog, and dog to man? Dog Bite Dog grips you from the start and never lets go until the end, though there are points mid way through that seemed to drag, especially on its tender moments, and it suffered too from not knowing when to end. If I should pick a favourite scene, then it must be the one in the market food centre - extremely well controlled and delivered, a suspenseful edge of your seat moment. Listen out for the musical score too, and you're not dreaming if you hear growls of dogs.

Highly recommended, especially if you think that you've seen about almost everything from the cop thriller genre.", "y": 1}, {"x": "If your idea of entertainment is watching graphic footage of people being run over by cars (you get to see a woman passing under the front wheel, being twisted as the car passes over her before she goes under the back wheel -- and they show it twice in case you missed it the first time) then this is the documentary for you. Admitedly I didn't watch any more of this very disturbing piece of voyeurism, but that was enough for me. Maybe the rest is even better.

I wonder how long it's going to take for television networks to start showing slush movies. Perhaps game shows based on self-mutilation might be nice.

I already know that there are disturbed people in the world and that horrible things happen. I don't need to see the proof on the TV masquerading as entertainment.", "y": 0}, {"x": "I usually check out the MTV movie awards to watch a witty, entertaining show that delivers a unique award show (Chewbacca winning a life-time achievement award as example). So this year was no different. While I'm not a fan of Justin Timberlake, Seann William Scott has always been funny-albiet stupid-to me. I've laughed at Stiffler in both American Pie movies, and even enjoyed him in Dude Where's My Car?. But the MTV movie awards were simply horrible. Nothing was coherrent, humorous, or entertaining. Justin Timberlake should stick to singing and dancing; he sure as hell can't act.

I'm curious as to who the writers were for this show. Last year's performance by Jack Black and Sarah Michelle Gellar was extremly funny (The Lord of the Rings parody alone was worth watching the entire show), but this year was completly different. Did anyone understand Timberlake's comments regarding Luke Wilson and Kate Hudson (\"They're staring in a movie together, but have never met! Here they are...\") Where was the joke? Kate and Luke just went into their lame dialogue, never making a reference to the \"joke\" by Timberlake. And Seann was completly wasted as a talent, not even causing me to smile, yet alone laugh. And what was the point of Harrison Ford's one-liners? Did they make ANY sense to anyone? Perhaps the MTV writers figured the young viewers would only know the aging Ford as Han Solo, Indiania Jones, or the President from Air Force One. I'm baffled. And would someone tell me the deal with Adrian Brody? How old is this guy and how old does he THINK he is? The guy looks 30, trying to act 19 again....give it up, show some class (like in your best actor academy award speech) and act your age!

I give this show 1 star out of 4, simply because of the speech by Gollam for Best Visual Performance. This was very creative, extremely well done, and caused the only genuine laugh of the entire evening.", "y": 0}, {"x": "I personally hated this movie because it was predictable, the characters were stereotypical ,and the whole idea was a rip off of \"The Cutting Edge\", and \"Cadet Kelly\".

The main character is a snotty girl who gets shipped of to a place where she doesn't belong. The whole place hates her, and to make things worse there is a hot guy that seemingly doesn't like her ( well duh the whole damn school can't stand you). Amazingly she finds a way to fit in and make everyone to like her plus, gets the guy to fall head over heels in love with her. Then comes the choice, where she must choose between figure skating and hockey. She chooses hockey then she goes to the figure skating nationals,and gets to be on the Olympic team. No real surprise there.

This whole movie was so damn predictable You knew what was going to happen before you even saw it. This was so awful I nearly puked, and by the time I was finished watching it, I had an awful headache and the urge to shoot myself for watching such crap. Don't watch this unless you are under ten, or actually like crappy tween movies.", "y": 0}, {"x": "Outlandish premise that rates low on plausibility and unfortunately also struggles feebly to raise laughs or interest. Only Hawn's well-known charm allows it to skate by on very thin ice. Goldie's gotta be a contender for an actress who's done so much in her career with very little quality material at her disposal...

", "y": 0}, {"x": "This movie had an interesting cast, it mat not have had an a list cast but the actors that were in this film did a good job. Im glad we have b grade movies like this one, the story is basic the actors are basic and so is the way they execute it, you don't need a million dollar budget to make a film just a mix of b list ordinary actors and a basic plot. I like the way they had the street to themselves and that there was no one else around and also what i though was interesting is that they didn't close down a caf\u00e9 to set there gear and that they did it all from a police station. Arnold vosloo and Michael madsen did a great job at portraying there roles in the hostage situation. This was a great film and i hope to see more like it in the near future.", "y": 1}, {"x": "My name is Domino Harvery. {EDIT *dizzying* CHOP} My--my--my name is Domino Harvey. {CUT, CHOP} My name is Domino Harvey. {EDIT. CUT. Playback}

Never have I seen a director take so much flack for his style before. By now it is evident that most people do not appreciate Tony Scott's choppy, flashy, dizzying editing technique. If I have to choose between loving it and hating it, I'd say I love it. It was borderline distracting at times, but the end result was pretty good and it's nice to see a director with a creative edge to his style and some originality (even if it borrows heavily from MTV videos).

This stylistic edge manifests itself as Keira Knightley plays the role of cocky badass bounty hunter Domino Harvey and even her dialogue seems strangely choppy. Otherwise she plays her poorly because I pretty much hated her character and did not sympathize one bit with her, no matter how much she suffered. We follow Domino through her life as she joins up with fellow bounty hunters Mickey Rourke, Rizwan Abbasi and Edgar Ramirez. The crew become tangled up in the FBI and suddenly has a reality show contract under Christopher Walken's TV production company (what is Christopher Walken doing in every film, by the way?). I guess that is a clever film technique, because now Tony Scott is free to use as much flashy MTV/Reality Show editing footage as he likes. It becomes a pastiche of MTV culture at this point.

It followes then that the story is told at an amazingly rapid-fire pace, with lots of raunchy strong language and gun violence. There are some funny jokes; it's all very modern and surreal at the same time. It's a mess, but it's a rather enjoyable mess. It is ultimately flawed in so many ways (the actors try too hard to make their characters \"cool\", for one) but it works. I give it a weak 7/10 which may seem generous when compared to the general consensus of movie-goers who graded this film \u0097 but I feel it had some good ideas and executed them well.

7 out of 10", "y": 1}, {"x": "Magnolia presents itself as a wall to wall canvas of screaming, shrieking, overwrought, hysterical twits who are all bedeviled by regret, guilt and pain. PT Anderson is certainly a gifted filmmaker but perhaps he should leave the writing to someone else or at least find someone with the balls to tell him he needed to edit this overlong mess.

A look at the cast will tell you that the performances were excellent, and they were. I just wish that every scene didn't involve an over the top shouting match or long digression into the sins that have been committed and the pain that they have caused.

I also think that Anderson fails miserably to create a story that parallels the bizarre tableaus that open the film. The opening sequences are wonderful in showing how fate can bring together people and circumstances that even the most optimistic believer in a cosmic puppeteer pulling our strings would scoff at. But the story that then develops lacks any of the stuff that these opening fables display. I kept waiting for some form of cosmic convergence to display itself, but instead all we get is waves of regret from morally challenged characters who see their past spread out before them and now seek absolution. Throw in an out of left field biblical plague near the end and all you end up with is a cadre of Anderson devotees who will marvel at his genius when all it really proves is that he has actually read the Old Testament.

I will say that the music by Aimee Mann was great and I'll be looking for the Soundtrack CD. In short, a good movie to look at and listen to (the music, that is) if the actors would have shut up or toned it down it may have been", "y": 0}, {"x": "This remarkable film can be summed up very easily. First of all, while the comparisons to \"Princess Bride\" are inevitable, it's almost futile to do so. While both films combine adult wit and humor with a fairy tale backdrop, \"Stardust\" is so much different than any other fantasy/sci-fi film I've ever seen. It's such a hybrid of those genres, but its plot and script are so unique that--along with the performances, special effects, cinematography, and score--the finished product is simply not all that comparable to anything that has ever appeared on the silver screen. Secondly, the score is very effective at simultaneously pulling us into the story and the fantasy world in which it takes place and pushing the story along, while creating just the right amount of awe and excitement necessary to make the magic believable within the realm where the characters exist. Thirdly, I did not find the film to be even remotely difficult to follow or confusing in any way. In fact, the interesting interplay between the three main subplots actually made it even that much more compelling to watch. Wonderfully casted, and superbly acted across the board. This fantasy adventure (with sci-fi elements) was the best one I've seen since \"Return of the King\" (not that I am comparing the two at all). OK, so its not that easy to sum up, but don't let any crude and/or heartless and cynical review nor the film's pathetic PR prevent you from partaking in the best time you could have at the movies this summer (or even possibly in a long time)!", "y": 1}, {"x": "Beautifully made with a wonderful performance from Gretchen Moll capturing such a stainless plain happiness in her work, and the recreations of the little movies and the photographs are perfectly made and often hilarious. According to Harron they used film stock that is no longer produced and fifties style studio lighting even for the outside locations to give the colour portions its distinctive look. Bettie Page saw the movie at Hugh Heffner's house (she is now eighty-three) with the producers there, but not the director, in case it got awkward if she didn't like it. She apparently did like it up until the official inquiry, which she found unsettling. Some great costumes too. The idea for the movie started in 1993, but this was worth the wait. The portrait of her never seems to ring false in reference to all those images and snippets of (dreadful) movies that many of us will have already seen. It would make an interesting companion piece with Goodnight and Goodluck, but much more pleasant viewing!", "y": 1}, {"x": "This film is being described as a comedy, but it wasn't a comedy at all. Like any Panahi film, it was a very realistic drama depicting the common thread of social inequity and hypocrisy. But it was very funny; much lighter than the director's dark and serious The Circle (my favourite Iranian film). The resourcefulness of the girls and the banter between them and the soldiers was both completely believable (as if it were a documentary) and completely hilarious.

The filming the actual match and aftermath was astonishing. It added a realism much like Australia's Kenny, of course a very different film.

The performances from all the non-professional actors \u0096 soldiers and girls \u0096 were very credible. It was very moving to see the passion, disappointment and excitement of these girls. Anyone in this country who thinks Muslim girls wearing a chador are any different to their own daughters should go see this film \u0096 it will be a real eye-opener.

To me, the soldiers represented the current paradigm. They started out with stock-standard official policy responses to all the pleas of the girls. As the film progressed, they found it more and more difficult to maintain this stance. When what seems like all of Teheran breaks out into wild celebration, everyone is caught up in it, and the ridiculousness of the current policies is obvious to one and all.

It was a very moving and unexpected ending, and gave the film a really nice blend of emotions, frivolity, drama and social commentary. Though it's adult cinema, I think mature-minded children from about seven onwards would really appreciate this film (as long as they can read subtitles).

It is remarkable that a repressive country like Iran is able to produce films of such quality by the likes of Panahi and Kiarostami. Perhaps the constraints there force directors to be extremely resourceful. Australian (and other) film makers could take a leaf out of their book.", "y": 1}, {"x": "Maaan, where do i start with this god awful movie. Bad bad bad story telling. I do not know what the director was thinking when he made this movie. Namaste London was quite an enjoyable movie to be honest..even the soundtrack was good. But in this one..oh my good..for a movie which is supposed to be a musical one..the songs are soooo bad. AR Rahman should have been the music director.

Given two great actors a much better job should have been done by the director. Even though the first half sucks, the last 30 mins of the movie are OK. Performances from Salman and Ajay save the movie from being a total disaster.

Watch it if you have nothing better to do. The last good movie from Bollywood i watched ( and i do watch a load of them) is Dev D and Wake Up Sid.", "y": 0}, {"x": "This is by far the worst adaptation of Jane Eyre I have seen. It is uncertain whether or not the writer of the screenplay ever read the book by Bronte. George C Scott is ridiculous and bumbling as Rochester -- when not just plain old acting angry. Susannah York has the most dated 1970's hairstyle I have ever seen in a Victorian movie. The characters hardly speak to each other, so the rich banter enjoyed in the book that is the basis for their deep intellectual and abiding love, is gone. The ending is ludicrous.

Please, rent the Timothy Dalton version instead. It is so true to the book, it's like having the novel read aloud to you. Dalton is superb as Rochester. G. C. Scott is laughable.", "y": 0}, {"x": "The tenuous connection between this film and the first Grease is established right at the beginning of the film when Didi Conn one of four cast members repeating their roles approaches young Maxwell Caulfield who is a British exchange student. Although in the previous film Olivia Newton St. John's foreign speech pattern is not explained, it's explained here Caulfield is her cousin. What's Conn still doing in school, I guess she just likes hanging around Rydell High even though now she's a beautician.

Caulfield's a smart kid, so of course the hood types led by Adrian Zmed have him labeled as a nerd. And that's especially bad when Zmed's girl friend decides she likes Caulfield. But being a nerd just isn't going to cut it.

That's when Caulfield decides to put on a modern day Zorro act. He gets a junked bicycle and puts it back together and teaches himself to ride. He gets himself a leather biker outfit with a set of goggles to hide his face. If getting Michelle Pheiffer is not in the cards, Caulfield won't have any trouble making friends at any gay male leather bar the way he's outfitted.

Grease 2 introduced Michelle Pheiffer and Maxwell Caulfield and started them on the successful career paths both have enjoyed. If you saw the first Grease film, a much better film, than you definitely have an idea how this film will turn out.

In addition to Conn, Eve Arden, Sid Caesar, and Dody Goodman, all faculty members from the original Grease return in their roles. The music score isn't remotely as good as the songs that come from the original.

It's not that Grease 2 is bad, it's just not all that great.", "y": 0}, {"x": "As a former 2 time Okinawan Karate world champion, I like movies about sacrifice for sport. But this movie is about so much more. This movie is so good and so deep. I have recently been plagued by very serious injury and pretty much a disastrous lack of passion. Almost lights out for me. And this silly little movie touched me so deep that like out of a daze it reminded me about what life is supposed to be about. This is a movie about living. Living your life for yourself and respect for others. Empowerment. God, bless \"Bend it like Beckham\" I believe it is a true gem.", "y": 1}, {"x": "Meaning: if this movie got pitched, scripted, made, released, promoted as something halfway respectable given the constraints (yeah, I know, Springer, sex, violence), where is He?

Reminded me of porn movies I saw in college, plot and dialogue wise.... shoulda just done something for the scurrilous porno market, showed penetration and be done with it-- would have made more money, the ultimate point of this exercise....", "y": 0}, {"x": "It got to be a running joke around Bonanza about how fatal it was for any women to get involved with any Cartwright men. After all Ben Cartwright was three times a widower with a son by each marriage. And any woman who got involved with Adam, Hoss, and Little Joe were going to end up dying because we couldn't get rid of the formula of the widower and the three sons that started this classic TV western.

Perhaps if Bonanza were being done today the writers would have had revolving women characters who came in and out of the lives of the Cartwrights. People have relationships, some go good, some not so good, it's just life. And we're less demanding of our heroes today so if a relationship with one of them goes south we don't have to kill the character off to keep the survivor's nobility intact. But that's if Bonanza were done today.

But we were still expecting a lot from our western heroes and Bonanza though it took a while to take hold and a change of viewing time from NBC certainly helped, the secret of Bonanza's success was the noble patriarch Ben Cartwright and his stalwart sons. Ben Cartwright was THE ideal TV Dad in any genre you want to name. His whole life was spent in the hard work of building that immense Ponderosa spread for his three children. The kids were all different in personality, but all came together in a pinch.

The Cartwrights became and still are an American institution. I daresay more people cared about this family than the Kennedys. Just the popularity that Bonanza has in syndication testifies to that.

Pernell Roberts as oldest son Adam was written out of the show. Rumor has it he didn't care for the noble Cartwright characters which he felt bordered on sanctimonious. Perhaps if it were done now, he'd have liked it better in the way I describe.

This was just the beginning for Michael Landon, how many people get three hit TV shows to their credit. Landon also has Highway to Heaven and Little House On the Prarie where he had creative control. Little Joe was the youngest, most hot headed, but the most romantic of the Cartwrights.

When Roberts left. the show kept going with the two younger sons, but when big Dan Blocker left, the heart went out of Bonanza. Other characters had been added on by that time, David Canary, Tim Matheson, and Ben Cartwright adopted young Mitch Vogel. But big, loyal, but a little thick Hoss was easily the most lovable of the Cartwrights. His sudden demise after surgery left too big a hole in that family.

So the Cartwrights of the Ponderosa have passed into history. I got a real taste of how America took the Cartwrights to heart when I visited the real Virginia City. It doesn't look anything like what you see in Bonanza. But near Lake Tahoe, just about where you see the Ponderosa on the map at the opening credits, is the Cartwright home, the set maintained and open as a tourist attraction. Like 21 Baker Street for Sherlock Holmes fans, the ranchhouse and the Cartwrights are real.

And if they weren't real, they should have been.", "y": 1}, {"x": "POSSIBLE SPOILER - In some way \"How to Alienate Friends....\" is the \"loser learns to adjust, becomes successful and finds out that something else matter more\" type of story, situated in the celebrity business. - END OF SPOILER

I don't know the original book but this comedy delivers several good moments. Though I do think the ending is flawed. It felt too fast and too abrupt, as if something was missing. Besides I'd say the movie isn't able to keep a high level. Apart from this you'll find a sweet selection of actors and actresses with sometimes controversial acting qualities. Until now I've never seen Pegg any different. Still he is a very unique type though on the screen he sometimes might seem a little more tedious than necessary. Fox proved she is capable to play a hot starlet with her head in the clouds. Don't know whether it was a hard thing to do, but her performance was hot and way better than during \"Transformers\" (okay... probably that's no tough match). Kirsten Dunst is very much Kirsten Dunst (again) and you may like it (as I do) or find it annoying. On the other hand you'll see Anderson who proved her acting skills and Jeff Bridges (who is fine but perhaps he could have acted a little more powerful). They all fit their character well enough.

Conclusion: I think it's a nice celeb comedy with some more and some less funny passages, a sweet cast but an all too sudden ending.", "y": 1}, {"x": "Bad script, bad direction, over the top performances, overwrought dialogue. What more could you ask for? For laughs, it just doesn't get any better than this. Zadora's over-acting combined with the cliched scenarios she finds herself in make for an hilarious parody of the \"Hollywood\" machine. Almost as funny as \"Spinal Tap\" even though it was clearly not intended as such. Don't miss Ray Liotta's debut film line, \"Looks like a penis.\"", "y": 1}, {"x": "Zombie Nation 2004 R

Hey, I was bored. I looked in my Comcastic little box to find a movie to watch. Zombie Nation? Hey, I love zombie movies. Says the filmmaker has some sort of cult following in the description. Funny how it doesn't warn me not to watch this film. I could've used that advice.

Zombie Nation is just like Troll 2 in that it's completely misnamed. It has little (if anything, depending on your point of view) to do with zombies, and takes place all within one city. This film revolves around a crooked cop, who acts as badly as possible (he has to be trying to suck this much), while he arrests women for trivial bullshit and then kills them. Yup, he's a serial killer cop. Not only is this film flawed in thinking that it's a zombie flick, it also gets its serial killer facts completely wrong. Serial killers enjoy killing, they live for it and they get down and personal with it. This guy knocks out the women, and injects them with some poison. He doesn't even have sex with the corpse or dismember it. Talk about boring! Eventually, one of the whopping five women he kills has Voodoo protection done to her and for no apparent reason, all five come back to life and head off to kill this guy. They were all buried or tossed into the ocean, but you wouldn't know it buy the sharp clean clothes they're all wearing. The women then act very poorly and take their revenge. Oh yay.

This film was crap in every category. Crap acting, crap writing, crappier sets, and crappier make-up effects. The women don't look zombie-like, unless you count really dark make-up around the eyes to be the de facto definition of what makes a zombie. They can all talk, behave, think, and act perfectly human. The gore is weak compared to even many PG-13 films and the nudity is beyond brief. You see glimpse of breasts in the opening sequence... Then the exact same breasts later! Go figure. Guess only one actress was willing to go topless for this trite. The police station is so badly constructed that you can see where they stopped painting the walls of the warehouse they're obviously filming in. You can see the pipes and the bad lighting and the overly sparse set-up and even, unless you are blind, you can see the director failing. Steer clear, it's a waste of time.

1/10", "y": 0}, {"x": "Not being familiar with US television stations, when I flicked onto this on my in-laws' cable, first I thought it was just a low-budget sci-fi film, then after a couple of minutes I started thinking it might be a clever satire on the worst excesses of Christian fundamentalist, and then it dawned on me - good grief, these people are serious! It's been a while since I saw anything so unintentionally hilarious. I hesitated about writing a review of this for fear of offending believers, but then I saw other reviews and thought, hey, they can take it. Tough philosophical conundrum: how do you make a movie criticizing movies without actually showing what it is you're criticizing? Answer: make it in such a way that the only people who'll appreciate it are people who hate the kind of movies you're criticizing. I suppose some liberals (ugh! spit when you say that!) might be offended at the filmmakers' contempt for those in the audience who aren't obsessed with the J**** C***** myth, but I didn't mind - it was so darn funny!", "y": 0}, {"x": "this movie is ok if you like mindless action ,corny acting, and a very small plot !The special effects are decent considering this movie is from the director of\"Event Horizon\". The costumes are like something from a mad max movie .None of the soldiers talk ,so others tell them what to do.It eventually end up as a big shoot'em up movie with explosions all the place. I personally liked Russell better in \"tango and cash\"\"escape from la/new york\" and \"executive decision\". It must see this movie leave your mind at the door for a no brainer action science fiction movie!!", "y": 1}, {"x": "Almost as tedious to watch as it was to read, Evening is a gorgeously produced failure...until Meryl Streep walks in and quietly shows her other cast members how to act this kind of stuff. Vanessa Redgrave is shockingly off in her role as the dying Ann and Claire Danes is a cipher. Perhaps if Vanessa and Claire had switched roles we could have seen the vibrancy in the young Ann that gave her entr\u00e9e to the rarefied world of the story and we could have imagined that the older Ann actually was dying.

I was hoping the addition of Michael Cunningham to the writing credits would smooth out the jumpy storytelling but alas. It gave me a headache.", "y": 0}, {"x": "Every year I watch hundreds of films, including many low budget amateurish straight-to-DVD abominations that nobody in their right mind would ever want to see. I have seen thousands of films in my time, many excellent, many forgettable. Zombie Nation I will remember forever as one of the most hopelessly laughable 'horror' films I have ever seen \u0096 in fact I still haven't recovered from the experience of watching it.

The day after, it seems like some kind of weird dream. Did I really see what I thought I saw? Why do the police work out of a warehouse? Did the voodoo priestesses really recommend that the 'zombies' eat cheeseburgers? Is it safe? Is it safe? Is it safe?

I wouldn't recommend Zombie Nation if you want to see a 'good' film, and neither would I recommend it as 'so bad its good'. However, if you are entertained by the prospect of watching probably the most indefensibly abysmal film ever \u0096 this is for you. Now, whenever anyone asks me what the worst film I have ever seen is, I will say Zombie Nation.

Seriously \u0096 I think it's a greater crime to make a boring film than a bad one, and Ulli Lommel deserves credit for producing a film that actually stuns you with its ineptitude. He really is the Ed Wood Jr. of the digital age, and I for one can't wait to see if he makes another film as consistently ridiculous as this one.", "y": 0}, {"x": "This movie is really bad. The acting is plain awful except Michael Ironside. I don't get the story. Richard Grieco is the only survivor after a fight between two Mc-gangs. He comes to a town and suddenly he is choosened to fight against the bad people who wants indian-land. At the cover it said he was a indian himself that returned too his home-town, I didn't hear that in the movie, if so it wasn't clear.

Richard Grieco was one hell of a bad actor. Stiff and ugly. He said his lines like it too. And we wouldn't talk about Sean Young, she hasn' been any of my favourite actors but in this movie she plays a indian women who falls in love with Bolt (Grieco). She is awful.

When I rented it I choosed between this and Subterfuge with Amanda Pays. I choosed this one because of Michael Ironside was in the cast. Maybe I should have taken Subterfuge.

Don't see this unless you think Richard Grieco looks tough on a motorbike with sunglasses.

I will soon uptade the cast-list because I have it at home. I wrote it down after I seen the movie.", "y": 0}, {"x": "I greatly enjoyed Margaret Atwood's novel 'The Robber Bride', and I was thrilled to see there was a movie version. A woman frames a cop boyfriend for her own murder, and his buddy, an ex-cop journalist, tries to clear his name by checking up on the dead woman's crazy female friends. It's fortunate that the movie script fixes Ms. Atwood's clumsy plotting by focusing on the story of these two men, victims of scheming women...

Heh. Okay, you got me. If these guys are mentioned in the book, and I'm pretty sure they're entirely made up for the movie, I'll eat the dust cover of my hardback copy. Apparently, the three main female characters of the novel aren't enough to carry the movie. Zenia's manipulations aren't interesting unless we see them happen to a man, and a man's life is screwed up. Roz, Charis, and Toni tell their stories -- to a man. Because it's not important if a man doesn't hear them.

I liked the characters in the book. It hurts to see them pushed off to the side for a man's story. I normally do not look for feminist angles on media, and I tried to enjoy the movie as is. If I hadn't read the book, I might have enjoyed the movie a lot more. So if you like the cop and the ex-cop, and you want to read more about them, you're out of luck. Read the novel, if you want to enjoy luscious prose and characterization subtly layered through a plot. It's the same plot: the movie excavated it, ironed it, and sprinkled it with male angst. It's like Zenia's revenge on Margaret Atwood.", "y": 0}, {"x": "Not the worst movie I've seen but definitely not very good either. I myself am a paintball player, used to play airball a lot and going from woods to airball is quite a large change. The movie portrays similar qualitys First of all the movie starts off with this team that apparently is trying to shoot this \"Phantom\" guy or whatever, they appear to be a professional team and wear jerseys and shoot mags, autocockers. One guy sporting a bushy. Not much wrong with the movie but more how it's perceived it was very cheesy. A bunch of kids who are the good guys are woodsball players who don't appear to have much money and have dreams of getting \"better guns\". Another team constantly picks on them and insults them because they play woods and blah blah blah The phantom helps these woodsball kids out and trains them and all this crap, he gets them to play airball and basically defeats all the teams including the \"professionals\".

So what exactly is wrong with the movie? Well the budget is a huge thing, a paintball movie WOULDN'T be bad but the budget is pretty low and the movie feels like it was done by an amateur. There are no big names in this film and the acting is very cheesy. The perception of paintball is pretty bad too. They seem to imply that everyone is going to speedball and all this other crap. It just was a lousy movie in my opinion and doesn't give a real perception what paintball is. To be honest real paintball isn't all buddy like, it's a lot of cussing and bonus balling not \"respect\" and playing by the rules. Don't watch this movie and then expect to go to a field screaming \"4 is 1!!\"", "y": 0}, {"x": "Jake's Closet has the emotional power of Kramer vs. Kramer combined with the imagination of Pan's Labyrinth. Even the beginning special effect seems to give a nod to Pan's Labyrinth. But this is a story that takes place in modern times, not in a war sixty years ago and in that way it has even more resonance today. Jake's Closet is about a boy, an only child, practically alone on summer vacation, dealing with his family falling apart. It's a horror movie like The Others and The Sixth Sense, a horror movie for the thinking person. If you're looking for a slasher movie, this won't be your cup of tea but if you're looking for a story that is both touching and suspenseful with good acting, this is the movie for you. At the screening I saw, I swear there was one moment where the entire audience screamed. I highly recommend catching this film.", "y": 1}, {"x": "This movie is one of the worst ones of the year. The main characters have no chemistry and the acting is horrible. Paul Rudd is the only one that has any talent, and the only one that is not annoying. I have never watched Desparte Housewives, so I don't know how Eva Longoria is on that show, but in this movie she was horrible. It's like she knows nothing about acting. All her character does is whine throughout the film, and she can't pull off being a b**** and still be entertaining. And the other girl, Lake Bell, displays little emotion and it's like you are looking at the cue cards as she reads them.

As for the story, it is so cookie cutter. It goes from point A to B with little surprise. So much more could have been used with Kate as a ghost. The plot should have revolved more around her and the things she does as a spirit.

FINAL VERDICT: It's not worth watching.", "y": 0}, {"x": "This movie needs to be put on DVD. It was so funny and I loved it. Really, really cute and funny. Not realistic, but not suppose to be. The only thing I did not like about it was the girl relying on the guy too much. It represents the time period way of thinking though. I have been trying to get this movie for so long and it has been unavailable for US format only in the UK and will not play on US DVD players. It is sadly an over looked Classic film! Believe it or not, but this film could easily become a cult favorite, for all ages. Too bad, we do not legalize certain things that could really save small countries or our own. Lindy is unsinkable, a positive character that makes lemonade out of lemons. She is funny and charming. She stole the show!", "y": 1}, {"x": "Despite the lavish production numbers and wonderful costumes this film is a chore to watch. The murder-mystery plot is just a vehicle to mount the musical numbers on but it often brings the proceedings to a staggering halt besides not being very involving. Although there has obviously been a lot of money spent on them the numbers are badly staged and poorly photographed. It's obviously a pre-code film because the girls often wear very little clothing and there's even a song singing the praises of marijuana! The performances are all one-note although it's nice to see Carl Brisson in a musical but when Victor McLaglen, as the police Lieutenent, lurches into view for the umpteenth time on the hunt for clues, you may want to throw in the towel or at least fast-forward to the next number. Pity the patrons who were trapped in the cinema on its release though!", "y": 0}, {"x": "Please note that I haven't seen the film since I discovered it in 2007, and my town is smaller and doesn't carry it. However, I really want to say something about it. I'm actually doing research for university on the title character Richard Maurice Bucke and would like to point out that the person they based the main character on was in reality completely different!!! Hollywood's ideas of people and artistic license granted, the real Dr. Bucke totally endorsed hysterectomies to cure insanity in women, and would never have practiced anything as liberal as represented in the film. I think it's laughable to see various film critics who write for legitimate newspapers who say this film has some historical basis! The only actual fact I can see is the friendship between Dr. Bucke and Walt Whitman. Please don't waste your time on a film with such a disregard to the horror that real women experienced at the hands of this doctor who has now been glorified by the film industry.", "y": 0}, {"x": "this movie has lot of downsides and thats all i could see. it is painfully long and awfully directed. i could see whole audience getting impatient and waiting for it to end. run time is way over 3 hrs which could have been edited to less then 2 hrs.

transition between stories is average. most people confessed being on seating expecting something better to come out.

its funny only in pockets. ambitious project and a below par execution. govinda does a fair job, anil kapoor disappointed me, rest we as expected. if u r expecting anything close to babel or love actually then its no where close.", "y": 0}, {"x": "Slow, Slow, Slow... There is no mystery or excitement in this film. If you don't figure out who the \"mole\" is in the first ten minutes you must be brain dead. The secret service must have been too, because it took them the whole film to put it together. There are no compelling characters in the movie (not film). The pace of the movie is slow there is no tension. The hired killer is an excellent shot unless he is aiming at Michael Douglas than all he seems to be able to hit is large panes of glass. The funniest scene in the movie is when the presidents wife says the code word at the anticlimactic ending. It is laugh out loud ridiculous. At least six people got up and left the movie early. I would have joined them if I were not sitting in the middle of the row. I would not recommend this film to anyone.", "y": 0}, {"x": "Here's another film that doesn't really need much of a recommendation. It's a classic comedy, very funny and entertaining and which, of course, ultimately inspired a successful television series which many would say was even better (I enjoy both, personally).

For some, it's hard to warm up to Jack Lemmon and Walter Matthau as Felix Unger and Oscar Madison when they were were weaned on the TV show starring Tony Randall and Jack Klugman (or perhaps vice versa). But what we've got there in both cases are four good actors who in real life seemed so much like their film counterparts that they managed to make these characterizations their own. It's Neil Simon's humorous material that's key, and where the laughs really originate from.

For those who have somehow never heard of THE ODD COUPLE, it's the story of a neurotic and fussy neat-freak (Lemmon) who is thrown out of a 12-year marriage by his long-suffering wife and takes up residence in the Manhattan apartment of his sloppy and totally irresponsible buddy (Matthau). Pitting these two unlikely roommates together within the same four walls makes for some hugely funny predicaments.", "y": 1}, {"x": "This, and \"Hidden fortress\" are the Kurosawa's that are most dear to me. I don't hand out 10's like candy, but this certainly deserved it, if anything. Even though it's quite long (like all Kurosawa's pretty much are) it concurred the problem which bugs me with most of his films; the storyline is often too loose and slowly evolving, containing scenes that are unnecessary or just lenghtened too much without any real purpose to the storyline or the character description. Dodesukaden delivered to me the same experience that for example \"Hidden fortress\" did; despite its lenght, there wasn't a single minute I would cut out.

This is also a very unusual Kurosawa film in a way, it has no storyline, but many little independent stories which are based more to the character description than storyline, unlike any other Kurosawa-film I have seen so far. It also leans much on the dialogue, which he uses brilliantly (especially in the story between the father and the son planning their \"new house\").

Still the thing that makes this one a masterpiece is how the subject being so tragic as it is, is managed to be described so humanely and sympathetically, without pointing fingers at anybody at any point. From the beginning to the end it delivers the whole emotional scale from laughter to tears in perfect balance.", "y": 1}, {"x": "Fire And Ice is an animated film set in a fantasy world. The film is about a village that is destroyed by a giant glacier which is the home of the evil ice lord named Nekron. The only survivor of the village is a young man named Larn who sets out to avenge those who were killed by the glacier. The ice glacier moves through the land of fire and the princess of the land named Teegra is kidnapped by evil creatures. Larn sets out to find her and also sets out to find and kill Nekron. Fire And Ice is directed by Ralph Bakshi who is one of my favourite adult animators. He has brought us such animated masterpieces as the film version of Fritz The Cat and some films he has written himself, like the great film Heavy Traffic. I didn't like Fire And Ice nearly as much as I have Ralph Bakshi's other work, but I still found the film to be enjoyable. It had some very nice animation in parts and the story was entertaining enough. The only basic complaints I have is that I wish that there was more of a story to the film because the story it uses is very thin and there is not a lot to it. I also wish the film was a bit longer because it is under 80 minutes in running time. Still it's an entertaining action adventure films that unlike Fritz The Cat or Heavy Traffic is appropriate for kids 8 and older. I only wish that there was a more developed story and it went on a bit longer than it did.", "y": 1}, {"x": "Madhur from CHANDNI BAR started making realistic films, which some people called dry

He made SATTA which was another realistic though filmy film but a great film

AAN men at work was a formula film by him which flopped

He returns with his superlative PAGE 3

A film which dwelves into the lives of journalists and it's a brilliant film

The film is well narrated though the half baked romantic portions of Konkana could be avoided but that is forgiven

The entire Upendra Limaye track is superb too

while the Atul Kulkarni track is great too

The dial between Manoj Joshi and his friends are funny at first but repetitive at times

The subplot of Bikram- Tara is brilliant and so is the entire hospital scene and also the final child abuse which shocks you

The film has a open ended ending which is nicely handled

Madhur does a great job Music is okay

Konkana excels as Madhavi, using her expressions to the best Tara Sharma is decent except her voice Sandhya Mridul is good as usual Upendra Limaye excels in his part as the cop, one of the talented actors Sadly he isn't used well nowdays Atul Kulkarni too is good in his small part Boman Irani is restrained and does a great job rest are okay", "y": 1}, {"x": "What an amazing film. With very little dialogue, the whole story is told with glances and body language. Very involving almost voyeuristic. My only gripe is that it has not been released on video in Australia and is therefore only available on TV. What a waste.", "y": 1}, {"x": "Maybe \"Presque Rien\" is not the best movie ever made... But it is better than many of you have said. I still haven't seen a homo-themed movie better than this one.

You Americans are accustomed to watch very narrative movies, with a clear beginning, development and outcome. But European movies are less narrative, but makes you think much and feel.

Many of you didn't understand the sense of the movie.. The purpose of this one is not show us a simple \"summer loving movie\", with commercial characters who \"fall in love and live happy forever\". Summer Holidays and beach are only a background, and this movie is directed to every young boy who may feel identified with those boys.

Maybe some of you didn't understand well this movie, because of its 3 parts, showed as flashbacks. These 3 moments are: - Summertime in Pornichet, when they meet and love. - After a year and half living together in Nantes, Mathieu doesn't go to a psychiatric himself. He tries to suicide taking something, and Cedric brings him to hospital. Later, he appears talking with a psychiatrist to find the reason about he done that. - The last part, is when Mathieu come back to Pornichet, in winter, alone.. to think about how his life have changed, how his life become to be, and trying to find himself.

It's possible that some people couldn't understand all this well, because all the scenes are mixed among them. But anyway, as I said before... this is not a funny movie. If what someone want to see is meat, for that, we have Belami movies.

Presque Rien, what want to show us, is how cruel can be the life, for a young boy who is not sure about his feelings and not sure about what to do in life. Mathieu only wants to go away from home, and try to live the kind of life that he thought could bring him the happiness.. But what seemed perfect at the beginning.. later is not as good as he thought, and he become troubled, and feel that he has lost the way of his life. He is lost and doesn't know what he really wants to do, or what makes him happy. He finally become depressed and tries to commit suicide.

So, funny? Is not a funny movie. Very hot scenes? only a few.. but this is not a movie for entertainment. Is all about feelings... friendship, love, happiness, unhappiness, pain, depression, loneliness... I, as many others, feel identified with life and problems of Mathieu, and that is what director wanted to do.. a movie who show us the cruel reality of a boy's life.

For me, the best homo-themed movie ever.", "y": 1}, {"x": "After 30 seconds, you already realize that there was no real budget for this cheap knock-off. The story is taken from great movies like \"Texas Chainsaw Massacre\" and \"Hills have Eyes\". I like those kind of movies, even if they're duplicated well (Wrong Turn, Timber Falls, Carver).

But \"Side Sho\" is hard to watch: the actors are really bad, the dialogue is cheesy and the music is stupid and totally misplaced. You do not care at all what happens to the characters. The so-called bad guys are also not interesting at all and rather stereotypical. So how about the blood and gore ? Well there is some, although it is rather cheap and the action is executed very poorly. 2 Points, just for the gore and blood but do understand that this is hardly worth a look, even for the gore-hounds..", "y": 0}, {"x": "I was pleasantly surprised by the film. Let's face it; the premise doesn't sound particularly appealing when having to hand over money for a the night's flick, but it had an easygoing nature that wins one over. There were no moments that I found uproarious, and I doubt any that I'll remember the next day, but this doesn't fail as a nice diversion. What I found funny was watching it here in Peking with my Chinese girlfriend who never understands anything I like. I told her there was a plot- three guys have to bring back some weed to London. Hardly satisfying for her. There is no mugging going on here for the camera which I'd been expecting after reading a number of the comments. I do take exception however to comparisons with Withnail and I; not in the same league, and I doubt was it intended to. www.imperialflags.blogspot.com", "y": 1}, {"x": "Ossessione is in very bad state but is now undergoing a full restoration at Digital Film Lab in Copenhagen. The material used is a \"Master positive\" 2nd generation originally from the print Visconti managed to hide from the fascists. It has been scanned on the Spirit 4K (as 2K RGB data) then processed using DaVinci Revival restoration software. After this the rest is manual labor and we do not anticipate finishing before early spring. Sometime next year it should be available on DVD and hopefully also released on HD DVD. This film is beautiful and we hope the restoration effort will be enjoyed by many generations to come.", "y": 1}] \ No newline at end of file diff --git a/test/integration/template/test_template.py b/test/integration/template/test_template.py new file mode 100644 index 000000000..b8dc06056 --- /dev/null +++ b/test/integration/template/test_template.py @@ -0,0 +1,34 @@ +import os + +from superduper import CFG, superduper, templates + +skips = [] + + +def test_template(): + CFG.auto_schema = True + + db = superduper() + + template_name = os.environ['SUPERDUPER_TEMPLATE'] + + if template_name in skips: + print(f'Skipping template {template_name}') + return + + t = getattr(templates, template_name) + + db.apply(t) + + assert f'sample_{template_name}' in db.show('table') + + sample = db[f'sample_{template_name}'].select().limit(2).tolist() + + assert sample + + print('Got sample:', sample) + print(f'Got {len(sample)} samples') + + app = t() + + db.apply(app) diff --git a/test/unittest/component/test_template.py b/test/unittest/component/test_template.py index c2c5bce43..68c93a8b4 100644 --- a/test/unittest/component/test_template.py +++ b/test/unittest/component/test_template.py @@ -141,7 +141,7 @@ def test_query_template(db): q = db['documents'].find({'this': 'is a '}).limit('') t = QueryTemplate('select_lim', template=q) - assert set(t.template_variables) == {'limit', 'test'} + assert set(t.template_variables).issuperset({'limit', 'test'}) assert t.template['query'] == 'documents.find(documents[0]).limit("")'