diff --git a/Getting_Started.ipynb b/Getting_Started.ipynb index 3951a7b..3d52dc6 100644 --- a/Getting_Started.ipynb +++ b/Getting_Started.ipynb @@ -21,7 +21,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 52, "metadata": {}, "outputs": [ { @@ -31,14 +31,6 @@ "๐ŸŽ‰ MARVIS libraries imported successfully!\n", "๐Ÿ“ MARVIS root directory: /Users/benjaminfeuer/Library/CloudStorage/GoogleDrive-penfever@gmail.com/My Drive/Current Papers/marvis\n" ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/benjaminfeuer/Library/CloudStorage/GoogleDrive-penfever@gmail.com/My Drive/Current Papers/marvis/marvis/marvis/utils/model_loader.py:34: UserWarning: vllm not available, falling back to transformers\n", - " warnings.warn(\"vllm not available, falling back to transformers\")\n" - ] } ], "source": [ @@ -114,7 +106,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 53, "metadata": {}, "outputs": [ { @@ -159,7 +151,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 54, "metadata": {}, "outputs": [ { @@ -167,7 +159,7 @@ "output_type": "stream", "text": [ "๐Ÿ”ง Initializing MARVIS t-SNE classifier for tabular data...\n", - "๐Ÿ“ Created temp directory: /var/folders/nh/rgvpvzyd32d9v1gwjtp7_brr0000gn/T/marvis_demo_fiuyqs62\n", + "๐Ÿ“ Created temp directory: /var/folders/nh/rgvpvzyd32d9v1gwjtp7_brr0000gn/T/marvis_demo_seap38lk\n", "โœ… Tabular classifier initialized!\n" ] } @@ -200,7 +192,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 55, "metadata": {}, "outputs": [ { @@ -210,7 +202,7 @@ "๐Ÿ‹๏ธ Training MARVIS on tabular data...\n", "[t-SNE] Computing 46 nearest neighbors...\n", "[t-SNE] Indexed 200 samples in 0.000s...\n", - "[t-SNE] Computed neighbors for 200 samples in 0.024s...\n", + "[t-SNE] Computed neighbors for 200 samples in 0.002s...\n", "[t-SNE] Computed conditional probabilities for sample 200 / 200\n", "[t-SNE] Mean sigma: 4.328593\n", "[t-SNE] KL divergence after 250 iterations with early exaggeration: 55.566055\n", @@ -236,7 +228,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 56, "metadata": {}, "outputs": [ { @@ -244,43 +236,44 @@ "output_type": "stream", "text": [ "๐Ÿ”ฎ Making predictions on tabular test data...\n", - "๐Ÿ“ Using temp directory: /var/folders/nh/rgvpvzyd32d9v1gwjtp7_brr0000gn/T/marvis_demo_fiuyqs62\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "You have video processor config saved in `preprocessor.json` file which is deprecated. Video processor configs should be saved in their own `video_preprocessor.json` file. You can rename the file or load and save the processor back which renames it automatically. Loading from `preprocessor.json` will be removed in v5.0.\n" + "๐Ÿ“ Using temp directory: /var/folders/nh/rgvpvzyd32d9v1gwjtp7_brr0000gn/T/marvis_demo_seap38lk\n" ] }, { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "f08b59fbc9d44486b79450671ab9b778", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Loading checkpoint shards: 0%| | 0/2 [00:00 \u001b[39m\u001b[32m7\u001b[39m tabular_results = \u001b[43mtabular_classifier\u001b[49m\u001b[43m.\u001b[49m\u001b[43mevaluate\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 8\u001b[39m \u001b[43m \u001b[49m\u001b[43mX_test_tab\u001b[49m\u001b[43m[\u001b[49m\u001b[43m:\u001b[49m\u001b[32;43m10\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;66;43;03m# Use first 10 test samples for demo\u001b[39;49;00m\n\u001b[32m 9\u001b[39m \u001b[43m \u001b[49m\u001b[43my_test_tab\u001b[49m\u001b[43m[\u001b[49m\u001b[43m:\u001b[49m\u001b[32;43m10\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 10\u001b[39m \u001b[43m \u001b[49m\u001b[43mreturn_detailed\u001b[49m\u001b[43m=\u001b[49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[32m 11\u001b[39m \u001b[43m \u001b[49m\u001b[43msave_outputs\u001b[49m\u001b[43m=\u001b[49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[32m 12\u001b[39m \u001b[43m \u001b[49m\u001b[43moutput_dir\u001b[49m\u001b[43m=\u001b[49m\u001b[38;5;28;43mstr\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mtemp_dir\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 13\u001b[39m \u001b[43m)\u001b[49m\n\u001b[32m 15\u001b[39m \u001b[38;5;28mprint\u001b[39m(\u001b[33m\"\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[33m๐Ÿ“ˆ Tabular Classification Results:\u001b[39m\u001b[33m\"\u001b[39m)\n\u001b[32m 16\u001b[39m accuracy = tabular_results.get(\u001b[33m'\u001b[39m\u001b[33maccuracy\u001b[39m\u001b[33m'\u001b[39m, \u001b[33m'\u001b[39m\u001b[33mN/A\u001b[39m\u001b[33m'\u001b[39m)\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/Library/CloudStorage/GoogleDrive-penfever@gmail.com/My Drive/Current Papers/marvis/marvis/marvis/models/marvis_tsne.py:1497\u001b[39m, in \u001b[36mevaluate\u001b[39m\u001b[34m(self, X_test, y_test, return_detailed, save_outputs, output_dir, visualization_save_cadence)\u001b[39m\n\u001b[32m 1494\u001b[39m try:\n\u001b[32m 1495\u001b[39m from marvis.utils.resource_manager import get_resource_manager\n\u001b[32m-> \u001b[39m\u001b[32m1497\u001b[39m # Determine dataset identifier for caching\n\u001b[32m 1498\u001b[39m dataset_id = kwargs.get(\"dataset_name\", \"\")\n\u001b[32m 1499\u001b[39m if \"dataset_info\" in kwargs and kwargs[\"dataset_info\"]:\n\u001b[32m 1500\u001b[39m # Prefer task_id if available\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/Library/CloudStorage/GoogleDrive-penfever@gmail.com/My Drive/Current Papers/marvis/marvis/marvis/models/marvis_tsne.py:1430\u001b[39m, in \u001b[36mpredict\u001b[39m\u001b[34m(self, X_test, y_test, return_detailed, save_outputs, output_dir, visualization_save_cadence)\u001b[39m\n\u001b[32m 1413\u001b[39m self.logger.info(\"Creating 2D classification t-SNE visualization...\")\n\u001b[32m 1414\u001b[39m self.train_tsne, self.test_tsne, base_fig = viz_methods[\n\u001b[32m 1415\u001b[39m \"create_tsne_visualization\"\n\u001b[32m 1416\u001b[39m ](\n\u001b[32m (...)\u001b[39m\u001b[32m 1427\u001b[39m },\n\u001b[32m 1428\u001b[39m )\n\u001b[32m-> \u001b[39m\u001b[32m1430\u001b[39m # Close base figure to save memory\n\u001b[32m 1431\u001b[39m plt.close(base_fig)\n\u001b[32m 1433\u001b[39m # Set up class/target information based on task type\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/Library/CloudStorage/GoogleDrive-penfever@gmail.com/My Drive/Current Papers/marvis/marvis/marvis/models/process_one_sample.py:443\u001b[39m, in \u001b[36mprocess_one_sample\u001b[39m\u001b[34m(classifier_instance, sample_index, viz_methods, viewing_angles, save_outputs, visualization_save_cadence, return_detailed, y_test, prediction_details, all_classes)\u001b[39m\n\u001b[32m 0\u001b[39m \n", + "\u001b[36mFile \u001b[39m\u001b[32m~/Library/CloudStorage/GoogleDrive-penfever@gmail.com/My Drive/Current Papers/marvis/marvis/marvis/models/process_one_sample.py:66\u001b[39m, in \u001b[36m_generate_vlm_response\u001b[39m\u001b[34m(classifier_instance, image, prompt)\u001b[39m\n\u001b[32m 61\u001b[39m \u001b[38;5;250m\u001b[39m\u001b[33;03m\"\"\"Generate VLM response with consistent configuration.\"\"\"\u001b[39;00m\n\u001b[32m 62\u001b[39m conversation = create_vlm_conversation(image, prompt)\n\u001b[32m 64\u001b[39m gen_config = GenerationConfig(\n\u001b[32m 65\u001b[39m max_new_tokens=\u001b[32m16384\u001b[39m,\n\u001b[32m---> \u001b[39m\u001b[32m66\u001b[39m temperature=\u001b[32m0.1\u001b[39m,\n\u001b[32m 67\u001b[39m do_sample=\u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[32m 68\u001b[39m enable_thinking=classifier_instance.enable_thinking\n\u001b[32m 69\u001b[39m \u001b[38;5;129;01mand\u001b[39;00m classifier_instance.is_api_model,\n\u001b[32m 70\u001b[39m thinking_summary=\u001b[38;5;28;01mFalse\u001b[39;00m,\n\u001b[32m 71\u001b[39m )\n\u001b[32m 73\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m classifier_instance.vlm_wrapper.generate_from_conversation(\n\u001b[32m 74\u001b[39m conversation, gen_config\n\u001b[32m 75\u001b[39m )\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/Library/CloudStorage/GoogleDrive-penfever@gmail.com/My Drive/Current Papers/marvis/marvis/marvis/utils/model_loader.py:728\u001b[39m, in \u001b[36mgenerate_from_conversation\u001b[39m\u001b[34m(self, conversation, config)\u001b[39m\n\u001b[32m 0\u001b[39m \n", + "\u001b[36mFile \u001b[39m\u001b[32m~/miniconda3/envs/marvis/lib/python3.12/site-packages/torch/utils/_contextlib.py:120\u001b[39m, in \u001b[36mcontext_decorator..decorate_context\u001b[39m\u001b[34m(*args, **kwargs)\u001b[39m\n\u001b[32m 117\u001b[39m \u001b[38;5;129m@functools\u001b[39m.wraps(func)\n\u001b[32m 118\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34mdecorate_context\u001b[39m(*args, **kwargs):\n\u001b[32m 119\u001b[39m \u001b[38;5;28;01mwith\u001b[39;00m ctx_factory():\n\u001b[32m--> \u001b[39m\u001b[32m120\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[43m*\u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/miniconda3/envs/marvis/lib/python3.12/site-packages/transformers/generation/utils.py:2617\u001b[39m, in \u001b[36mGenerationMixin.generate\u001b[39m\u001b[34m(self, inputs, generation_config, logits_processor, stopping_criteria, prefix_allowed_tokens_fn, synced_gpus, assistant_model, streamer, negative_prompt_ids, negative_prompt_attention_mask, use_model_defaults, custom_generate, **kwargs)\u001b[39m\n\u001b[32m 2609\u001b[39m input_ids, model_kwargs = \u001b[38;5;28mself\u001b[39m._expand_inputs_for_generation(\n\u001b[32m 2610\u001b[39m input_ids=input_ids,\n\u001b[32m 2611\u001b[39m expand_size=generation_config.num_return_sequences,\n\u001b[32m 2612\u001b[39m is_encoder_decoder=\u001b[38;5;28mself\u001b[39m.config.is_encoder_decoder,\n\u001b[32m 2613\u001b[39m **model_kwargs,\n\u001b[32m 2614\u001b[39m )\n\u001b[32m 2616\u001b[39m \u001b[38;5;66;03m# 12. run sample (it degenerates to greedy search when `generation_config.do_sample=False`)\u001b[39;00m\n\u001b[32m-> \u001b[39m\u001b[32m2617\u001b[39m result = \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_sample\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 2618\u001b[39m \u001b[43m \u001b[49m\u001b[43minput_ids\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 2619\u001b[39m \u001b[43m \u001b[49m\u001b[43mlogits_processor\u001b[49m\u001b[43m=\u001b[49m\u001b[43mprepared_logits_processor\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 2620\u001b[39m \u001b[43m \u001b[49m\u001b[43mstopping_criteria\u001b[49m\u001b[43m=\u001b[49m\u001b[43mprepared_stopping_criteria\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 2621\u001b[39m \u001b[43m \u001b[49m\u001b[43mgeneration_config\u001b[49m\u001b[43m=\u001b[49m\u001b[43mgeneration_config\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 2622\u001b[39m \u001b[43m \u001b[49m\u001b[43msynced_gpus\u001b[49m\u001b[43m=\u001b[49m\u001b[43msynced_gpus\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 2623\u001b[39m \u001b[43m \u001b[49m\u001b[43mstreamer\u001b[49m\u001b[43m=\u001b[49m\u001b[43mstreamer\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 2624\u001b[39m \u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mmodel_kwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 2625\u001b[39m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 2627\u001b[39m \u001b[38;5;28;01melif\u001b[39;00m generation_mode \u001b[38;5;129;01min\u001b[39;00m (GenerationMode.BEAM_SAMPLE, GenerationMode.BEAM_SEARCH):\n\u001b[32m 2628\u001b[39m \u001b[38;5;66;03m# 11. interleave input_ids with `num_beams` additional sequences per batch\u001b[39;00m\n\u001b[32m 2629\u001b[39m input_ids, model_kwargs = \u001b[38;5;28mself\u001b[39m._expand_inputs_for_generation(\n\u001b[32m 2630\u001b[39m input_ids=input_ids,\n\u001b[32m 2631\u001b[39m expand_size=generation_config.num_beams,\n\u001b[32m 2632\u001b[39m is_encoder_decoder=\u001b[38;5;28mself\u001b[39m.config.is_encoder_decoder,\n\u001b[32m 2633\u001b[39m **model_kwargs,\n\u001b[32m 2634\u001b[39m )\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/miniconda3/envs/marvis/lib/python3.12/site-packages/transformers/generation/utils.py:3598\u001b[39m, in \u001b[36mGenerationMixin._sample\u001b[39m\u001b[34m(self, input_ids, logits_processor, stopping_criteria, generation_config, synced_gpus, streamer, **model_kwargs)\u001b[39m\n\u001b[32m 3595\u001b[39m model_inputs.update({\u001b[33m\"\u001b[39m\u001b[33moutput_hidden_states\u001b[39m\u001b[33m\"\u001b[39m: output_hidden_states} \u001b[38;5;28;01mif\u001b[39;00m output_hidden_states \u001b[38;5;28;01melse\u001b[39;00m {})\n\u001b[32m 3597\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m is_prefill:\n\u001b[32m-> \u001b[39m\u001b[32m3598\u001b[39m outputs = \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mmodel_inputs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mreturn_dict\u001b[49m\u001b[43m=\u001b[49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[32m 3599\u001b[39m is_prefill = \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[32m 3600\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m:\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/miniconda3/envs/marvis/lib/python3.12/site-packages/torch/nn/modules/module.py:1773\u001b[39m, in \u001b[36mModule._wrapped_call_impl\u001b[39m\u001b[34m(self, *args, **kwargs)\u001b[39m\n\u001b[32m 1771\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m._compiled_call_impl(*args, **kwargs) \u001b[38;5;66;03m# type: ignore[misc]\u001b[39;00m\n\u001b[32m 1772\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[32m-> \u001b[39m\u001b[32m1773\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_call_impl\u001b[49m\u001b[43m(\u001b[49m\u001b[43m*\u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/miniconda3/envs/marvis/lib/python3.12/site-packages/torch/nn/modules/module.py:1784\u001b[39m, in \u001b[36mModule._call_impl\u001b[39m\u001b[34m(self, *args, **kwargs)\u001b[39m\n\u001b[32m 1779\u001b[39m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[32m 1780\u001b[39m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[32m 1781\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m._backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m._backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m._forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m._forward_pre_hooks\n\u001b[32m 1782\u001b[39m \u001b[38;5;129;01mor\u001b[39;00m _global_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[32m 1783\u001b[39m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[32m-> \u001b[39m\u001b[32m1784\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mforward_call\u001b[49m\u001b[43m(\u001b[49m\u001b[43m*\u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 1786\u001b[39m result = \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[32m 1787\u001b[39m called_always_called_hooks = \u001b[38;5;28mset\u001b[39m()\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/miniconda3/envs/marvis/lib/python3.12/site-packages/transformers/utils/generic.py:959\u001b[39m, in \u001b[36mcan_return_tuple..wrapper\u001b[39m\u001b[34m(self, *args, **kwargs)\u001b[39m\n\u001b[32m 957\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m return_dict_passed \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[32m 958\u001b[39m return_dict = return_dict_passed\n\u001b[32m--> \u001b[39m\u001b[32m959\u001b[39m output = \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 960\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m return_dict \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(output, \u001b[38;5;28mtuple\u001b[39m):\n\u001b[32m 961\u001b[39m output = output.to_tuple()\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/miniconda3/envs/marvis/lib/python3.12/site-packages/transformers/models/qwen2_5_vl/modeling_qwen2_5_vl.py:1493\u001b[39m, in \u001b[36mQwen2_5_VLForConditionalGeneration.forward\u001b[39m\u001b[34m(self, input_ids, attention_mask, position_ids, past_key_values, inputs_embeds, labels, use_cache, output_attentions, output_hidden_states, pixel_values, pixel_values_videos, image_grid_thw, video_grid_thw, rope_deltas, cache_position, second_per_grid_ts, logits_to_keep, **kwargs)\u001b[39m\n\u001b[32m 1488\u001b[39m output_attentions = output_attentions \u001b[38;5;28;01mif\u001b[39;00m output_attentions \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28mself\u001b[39m.config.output_attentions\n\u001b[32m 1489\u001b[39m output_hidden_states = (\n\u001b[32m 1490\u001b[39m output_hidden_states \u001b[38;5;28;01mif\u001b[39;00m output_hidden_states \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28mself\u001b[39m.config.output_hidden_states\n\u001b[32m 1491\u001b[39m )\n\u001b[32m-> \u001b[39m\u001b[32m1493\u001b[39m outputs = \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mmodel\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 1494\u001b[39m \u001b[43m \u001b[49m\u001b[43minput_ids\u001b[49m\u001b[43m=\u001b[49m\u001b[43minput_ids\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1495\u001b[39m \u001b[43m \u001b[49m\u001b[43mpixel_values\u001b[49m\u001b[43m=\u001b[49m\u001b[43mpixel_values\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1496\u001b[39m \u001b[43m \u001b[49m\u001b[43mpixel_values_videos\u001b[49m\u001b[43m=\u001b[49m\u001b[43mpixel_values_videos\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1497\u001b[39m \u001b[43m \u001b[49m\u001b[43mimage_grid_thw\u001b[49m\u001b[43m=\u001b[49m\u001b[43mimage_grid_thw\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1498\u001b[39m \u001b[43m \u001b[49m\u001b[43mvideo_grid_thw\u001b[49m\u001b[43m=\u001b[49m\u001b[43mvideo_grid_thw\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1499\u001b[39m \u001b[43m \u001b[49m\u001b[43msecond_per_grid_ts\u001b[49m\u001b[43m=\u001b[49m\u001b[43msecond_per_grid_ts\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1500\u001b[39m \u001b[43m \u001b[49m\u001b[43mposition_ids\u001b[49m\u001b[43m=\u001b[49m\u001b[43mposition_ids\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1501\u001b[39m \u001b[43m \u001b[49m\u001b[43mattention_mask\u001b[49m\u001b[43m=\u001b[49m\u001b[43mattention_mask\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1502\u001b[39m \u001b[43m \u001b[49m\u001b[43mpast_key_values\u001b[49m\u001b[43m=\u001b[49m\u001b[43mpast_key_values\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1503\u001b[39m \u001b[43m \u001b[49m\u001b[43minputs_embeds\u001b[49m\u001b[43m=\u001b[49m\u001b[43minputs_embeds\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1504\u001b[39m \u001b[43m \u001b[49m\u001b[43muse_cache\u001b[49m\u001b[43m=\u001b[49m\u001b[43muse_cache\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1505\u001b[39m \u001b[43m \u001b[49m\u001b[43moutput_attentions\u001b[49m\u001b[43m=\u001b[49m\u001b[43moutput_attentions\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1506\u001b[39m \u001b[43m \u001b[49m\u001b[43moutput_hidden_states\u001b[49m\u001b[43m=\u001b[49m\u001b[43moutput_hidden_states\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1507\u001b[39m \u001b[43m \u001b[49m\u001b[43mreturn_dict\u001b[49m\u001b[43m=\u001b[49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[32m 1508\u001b[39m \u001b[43m \u001b[49m\u001b[43mcache_position\u001b[49m\u001b[43m=\u001b[49m\u001b[43mcache_position\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1509\u001b[39m \u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1510\u001b[39m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 1512\u001b[39m hidden_states = outputs[\u001b[32m0\u001b[39m]\n\u001b[32m 1514\u001b[39m \u001b[38;5;66;03m# Only compute necessary logits, and do not upcast them to float if we are not computing the loss\u001b[39;00m\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/miniconda3/envs/marvis/lib/python3.12/site-packages/torch/nn/modules/module.py:1773\u001b[39m, in \u001b[36mModule._wrapped_call_impl\u001b[39m\u001b[34m(self, *args, **kwargs)\u001b[39m\n\u001b[32m 1771\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m._compiled_call_impl(*args, **kwargs) \u001b[38;5;66;03m# type: ignore[misc]\u001b[39;00m\n\u001b[32m 1772\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[32m-> \u001b[39m\u001b[32m1773\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_call_impl\u001b[49m\u001b[43m(\u001b[49m\u001b[43m*\u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/miniconda3/envs/marvis/lib/python3.12/site-packages/torch/nn/modules/module.py:1784\u001b[39m, in \u001b[36mModule._call_impl\u001b[39m\u001b[34m(self, *args, **kwargs)\u001b[39m\n\u001b[32m 1779\u001b[39m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[32m 1780\u001b[39m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[32m 1781\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m._backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m._backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m._forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m._forward_pre_hooks\n\u001b[32m 1782\u001b[39m \u001b[38;5;129;01mor\u001b[39;00m _global_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[32m 1783\u001b[39m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[32m-> \u001b[39m\u001b[32m1784\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mforward_call\u001b[49m\u001b[43m(\u001b[49m\u001b[43m*\u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 1786\u001b[39m result = \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[32m 1787\u001b[39m called_always_called_hooks = \u001b[38;5;28mset\u001b[39m()\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/miniconda3/envs/marvis/lib/python3.12/site-packages/transformers/models/qwen2_5_vl/modeling_qwen2_5_vl.py:1275\u001b[39m, in \u001b[36mQwen2_5_VLModel.forward\u001b[39m\u001b[34m(self, input_ids, attention_mask, position_ids, past_key_values, inputs_embeds, use_cache, output_attentions, output_hidden_states, return_dict, pixel_values, pixel_values_videos, image_grid_thw, video_grid_thw, rope_deltas, cache_position, second_per_grid_ts, **kwargs)\u001b[39m\n\u001b[32m 1272\u001b[39m inputs_embeds = \u001b[38;5;28mself\u001b[39m.get_input_embeddings()(input_ids)\n\u001b[32m 1274\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m pixel_values \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[32m-> \u001b[39m\u001b[32m1275\u001b[39m image_embeds = \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mget_image_features\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpixel_values\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mimage_grid_thw\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 1276\u001b[39m image_embeds = torch.cat(image_embeds, dim=\u001b[32m0\u001b[39m).to(inputs_embeds.device, inputs_embeds.dtype)\n\u001b[32m 1277\u001b[39m image_mask, _ = \u001b[38;5;28mself\u001b[39m.get_placeholder_mask(\n\u001b[32m 1278\u001b[39m input_ids, inputs_embeds=inputs_embeds, image_features=image_embeds\n\u001b[32m 1279\u001b[39m )\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/miniconda3/envs/marvis/lib/python3.12/site-packages/transformers/models/qwen2_5_vl/modeling_qwen2_5_vl.py:1188\u001b[39m, in \u001b[36mQwen2_5_VLModel.get_image_features\u001b[39m\u001b[34m(self, pixel_values, image_grid_thw)\u001b[39m\n\u001b[32m 1178\u001b[39m \u001b[38;5;250m\u001b[39m\u001b[33;03m\"\"\"\u001b[39;00m\n\u001b[32m 1179\u001b[39m \u001b[33;03mEncodes images into continuous embeddings that can be forwarded to the language model.\u001b[39;00m\n\u001b[32m 1180\u001b[39m \n\u001b[32m (...)\u001b[39m\u001b[32m 1185\u001b[39m \u001b[33;03m The temporal, height and width of feature shape of each image in LLM.\u001b[39;00m\n\u001b[32m 1186\u001b[39m \u001b[33;03m\"\"\"\u001b[39;00m\n\u001b[32m 1187\u001b[39m pixel_values = pixel_values.type(\u001b[38;5;28mself\u001b[39m.visual.dtype)\n\u001b[32m-> \u001b[39m\u001b[32m1188\u001b[39m image_embeds = \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mvisual\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpixel_values\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mgrid_thw\u001b[49m\u001b[43m=\u001b[49m\u001b[43mimage_grid_thw\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 1189\u001b[39m split_sizes = (image_grid_thw.prod(-\u001b[32m1\u001b[39m) // \u001b[38;5;28mself\u001b[39m.visual.spatial_merge_size**\u001b[32m2\u001b[39m).tolist()\n\u001b[32m 1190\u001b[39m image_embeds = torch.split(image_embeds, split_sizes)\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/miniconda3/envs/marvis/lib/python3.12/site-packages/torch/nn/modules/module.py:1773\u001b[39m, in \u001b[36mModule._wrapped_call_impl\u001b[39m\u001b[34m(self, *args, **kwargs)\u001b[39m\n\u001b[32m 1771\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m._compiled_call_impl(*args, **kwargs) \u001b[38;5;66;03m# type: ignore[misc]\u001b[39;00m\n\u001b[32m 1772\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[32m-> \u001b[39m\u001b[32m1773\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_call_impl\u001b[49m\u001b[43m(\u001b[49m\u001b[43m*\u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/miniconda3/envs/marvis/lib/python3.12/site-packages/torch/nn/modules/module.py:1784\u001b[39m, in \u001b[36mModule._call_impl\u001b[39m\u001b[34m(self, *args, **kwargs)\u001b[39m\n\u001b[32m 1779\u001b[39m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[32m 1780\u001b[39m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[32m 1781\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m._backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m._backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m._forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m._forward_pre_hooks\n\u001b[32m 1782\u001b[39m \u001b[38;5;129;01mor\u001b[39;00m _global_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[32m 1783\u001b[39m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[32m-> \u001b[39m\u001b[32m1784\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mforward_call\u001b[49m\u001b[43m(\u001b[49m\u001b[43m*\u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 1786\u001b[39m result = \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[32m 1787\u001b[39m called_always_called_hooks = \u001b[38;5;28mset\u001b[39m()\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/miniconda3/envs/marvis/lib/python3.12/site-packages/transformers/models/qwen2_5_vl/modeling_qwen2_5_vl.py:480\u001b[39m, in \u001b[36mQwen2_5_VisionTransformerPretrainedModel.forward\u001b[39m\u001b[34m(self, hidden_states, grid_thw, **kwargs)\u001b[39m\n\u001b[32m 477\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[32m 478\u001b[39m cu_seqlens_now = cu_window_seqlens\n\u001b[32m--> \u001b[39m\u001b[32m480\u001b[39m hidden_states = \u001b[43mblk\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 481\u001b[39m \u001b[43m \u001b[49m\u001b[43mhidden_states\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 482\u001b[39m \u001b[43m \u001b[49m\u001b[43mcu_seqlens\u001b[49m\u001b[43m=\u001b[49m\u001b[43mcu_seqlens_now\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 483\u001b[39m \u001b[43m \u001b[49m\u001b[43mposition_embeddings\u001b[49m\u001b[43m=\u001b[49m\u001b[43mposition_embeddings\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 484\u001b[39m \u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 485\u001b[39m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 487\u001b[39m hidden_states = \u001b[38;5;28mself\u001b[39m.merger(hidden_states)\n\u001b[32m 488\u001b[39m reverse_indices = torch.argsort(window_index)\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/miniconda3/envs/marvis/lib/python3.12/site-packages/transformers/modeling_layers.py:93\u001b[39m, in \u001b[36mGradientCheckpointingLayer.__call__\u001b[39m\u001b[34m(self, *args, **kwargs)\u001b[39m\n\u001b[32m 90\u001b[39m logger.warning(message)\n\u001b[32m 92\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m._gradient_checkpointing_func(partial(\u001b[38;5;28msuper\u001b[39m().\u001b[34m__call__\u001b[39m, **kwargs), *args)\n\u001b[32m---> \u001b[39m\u001b[32m93\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m.\u001b[49m\u001b[34;43m__call__\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m*\u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/miniconda3/envs/marvis/lib/python3.12/site-packages/torch/nn/modules/module.py:1773\u001b[39m, in \u001b[36mModule._wrapped_call_impl\u001b[39m\u001b[34m(self, *args, **kwargs)\u001b[39m\n\u001b[32m 1771\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m._compiled_call_impl(*args, **kwargs) \u001b[38;5;66;03m# type: ignore[misc]\u001b[39;00m\n\u001b[32m 1772\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[32m-> \u001b[39m\u001b[32m1773\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_call_impl\u001b[49m\u001b[43m(\u001b[49m\u001b[43m*\u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/miniconda3/envs/marvis/lib/python3.12/site-packages/torch/nn/modules/module.py:1784\u001b[39m, in \u001b[36mModule._call_impl\u001b[39m\u001b[34m(self, *args, **kwargs)\u001b[39m\n\u001b[32m 1779\u001b[39m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[32m 1780\u001b[39m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[32m 1781\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m._backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m._backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m._forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m._forward_pre_hooks\n\u001b[32m 1782\u001b[39m \u001b[38;5;129;01mor\u001b[39;00m _global_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[32m 1783\u001b[39m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[32m-> \u001b[39m\u001b[32m1784\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mforward_call\u001b[49m\u001b[43m(\u001b[49m\u001b[43m*\u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 1786\u001b[39m result = \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[32m 1787\u001b[39m called_always_called_hooks = \u001b[38;5;28mset\u001b[39m()\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/miniconda3/envs/marvis/lib/python3.12/site-packages/transformers/models/qwen2_5_vl/modeling_qwen2_5_vl.py:308\u001b[39m, in \u001b[36mQwen2_5_VLVisionBlock.forward\u001b[39m\u001b[34m(self, hidden_states, cu_seqlens, rotary_pos_emb, position_embeddings, **kwargs)\u001b[39m\n\u001b[32m 300\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34mforward\u001b[39m(\n\u001b[32m 301\u001b[39m \u001b[38;5;28mself\u001b[39m,\n\u001b[32m 302\u001b[39m hidden_states: torch.Tensor,\n\u001b[32m (...)\u001b[39m\u001b[32m 306\u001b[39m **kwargs,\n\u001b[32m 307\u001b[39m ) -> torch.Tensor:\n\u001b[32m--> \u001b[39m\u001b[32m308\u001b[39m hidden_states = hidden_states + \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mattn\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 309\u001b[39m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mnorm1\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhidden_states\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 310\u001b[39m \u001b[43m \u001b[49m\u001b[43mcu_seqlens\u001b[49m\u001b[43m=\u001b[49m\u001b[43mcu_seqlens\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 311\u001b[39m \u001b[43m \u001b[49m\u001b[43mrotary_pos_emb\u001b[49m\u001b[43m=\u001b[49m\u001b[43mrotary_pos_emb\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 312\u001b[39m \u001b[43m \u001b[49m\u001b[43mposition_embeddings\u001b[49m\u001b[43m=\u001b[49m\u001b[43mposition_embeddings\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 313\u001b[39m \u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 314\u001b[39m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 315\u001b[39m hidden_states = hidden_states + \u001b[38;5;28mself\u001b[39m.mlp(\u001b[38;5;28mself\u001b[39m.norm2(hidden_states))\n\u001b[32m 316\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m hidden_states\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/miniconda3/envs/marvis/lib/python3.12/site-packages/torch/nn/modules/module.py:1773\u001b[39m, in \u001b[36mModule._wrapped_call_impl\u001b[39m\u001b[34m(self, *args, **kwargs)\u001b[39m\n\u001b[32m 1771\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m._compiled_call_impl(*args, **kwargs) \u001b[38;5;66;03m# type: ignore[misc]\u001b[39;00m\n\u001b[32m 1772\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[32m-> \u001b[39m\u001b[32m1773\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_call_impl\u001b[49m\u001b[43m(\u001b[49m\u001b[43m*\u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/miniconda3/envs/marvis/lib/python3.12/site-packages/torch/nn/modules/module.py:1784\u001b[39m, in \u001b[36mModule._call_impl\u001b[39m\u001b[34m(self, *args, **kwargs)\u001b[39m\n\u001b[32m 1779\u001b[39m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[32m 1780\u001b[39m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[32m 1781\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m._backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m._backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m._forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m._forward_pre_hooks\n\u001b[32m 1782\u001b[39m \u001b[38;5;129;01mor\u001b[39;00m _global_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[32m 1783\u001b[39m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[32m-> \u001b[39m\u001b[32m1784\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mforward_call\u001b[49m\u001b[43m(\u001b[49m\u001b[43m*\u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 1786\u001b[39m result = \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[32m 1787\u001b[39m called_always_called_hooks = \u001b[38;5;28mset\u001b[39m()\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/miniconda3/envs/marvis/lib/python3.12/site-packages/transformers/models/qwen2_5_vl/modeling_qwen2_5_vl.py:268\u001b[39m, in \u001b[36mQwen2_5_VLVisionAttention.forward\u001b[39m\u001b[34m(self, hidden_states, cu_seqlens, rotary_pos_emb, position_embeddings, **kwargs)\u001b[39m\n\u001b[32m 264\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[32m 265\u001b[39m \u001b[38;5;66;03m# Other implementations: Process each chunk separately\u001b[39;00m\n\u001b[32m 266\u001b[39m lengths = cu_seqlens[\u001b[32m1\u001b[39m:] - cu_seqlens[:-\u001b[32m1\u001b[39m]\n\u001b[32m 267\u001b[39m splits = [\n\u001b[32m--> \u001b[39m\u001b[32m268\u001b[39m torch.split(tensor, \u001b[43mlengths\u001b[49m\u001b[43m.\u001b[49m\u001b[43mtolist\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m, dim=\u001b[32m2\u001b[39m) \u001b[38;5;28;01mfor\u001b[39;00m tensor \u001b[38;5;129;01min\u001b[39;00m (query_states, key_states, value_states)\n\u001b[32m 269\u001b[39m ]\n\u001b[32m 271\u001b[39m attn_outputs = [\n\u001b[32m 272\u001b[39m attention_interface(\n\u001b[32m 273\u001b[39m \u001b[38;5;28mself\u001b[39m,\n\u001b[32m (...)\u001b[39m\u001b[32m 283\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m q, k, v \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mzip\u001b[39m(*splits)\n\u001b[32m 284\u001b[39m ]\n\u001b[32m 285\u001b[39m attn_output = torch.cat(attn_outputs, dim=\u001b[32m1\u001b[39m)\n", + "\u001b[31mKeyboardInterrupt\u001b[39m: " ] } ], @@ -319,7 +312,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -396,7 +389,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -416,7 +409,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -424,7 +417,7 @@ "output_type": "stream", "text": [ "๐Ÿ”ง Initializing MARVIS t-SNE classifier for image data...\n", - "๐Ÿ“ Created image temp directory: /var/folders/nh/rgvpvzyd32d9v1gwjtp7_brr0000gn/T/marvis_image_demo_j_7uwahp\n", + "๐Ÿ“ Created image temp directory: /var/folders/nh/rgvpvzyd32d9v1gwjtp7_brr0000gn/T/marvis_image_demo_ubt0va_c\n", "โœ… Image classifier initialized!\n" ] } @@ -456,7 +449,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -473,7 +466,7 @@ "text": [ "[t-SNE] Computing 61 nearest neighbors...\n", "[t-SNE] Indexed 395 samples in 0.000s...\n", - "[t-SNE] Computed neighbors for 395 samples in 0.005s...\n", + "[t-SNE] Computed neighbors for 395 samples in 0.006s...\n", "[t-SNE] Computed conditional probabilities for sample 395 / 395\n", "[t-SNE] Mean sigma: 5.361968\n", "[t-SNE] KL divergence after 250 iterations with early exaggeration: 55.507313\n", @@ -495,12 +488,66 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], - "source": "# Make predictions and evaluate on image data\nprint(\"๐Ÿ”ฎ Making predictions on image test data...\")\n\nprint(f\"๐Ÿ“ Using image temp directory: {temp_dir_img}\")\n\ntry:\n # Evaluate on a small subset using evaluate() method\n image_results = image_classifier.evaluate(\n X_test_img[:8], # Use first 8 test samples\n y_test_img[:8],\n return_detailed=True,\n save_outputs=True,\n output_dir=str(temp_dir_img)\n )\n \n print(\"\\n๐Ÿ“ˆ Image Classification Results:\")\n accuracy = image_results.get('accuracy', 'N/A')\n total_samples = len(X_test_img[:8])\n completed_samples = image_results.get('completed_samples', total_samples)\n \n print(f\" โ€ข Accuracy: {accuracy}\")\n print(f\" โ€ข Completed samples: {completed_samples}\")\n \n # Display some predictions\n predictions = image_results.get('predictions', [])\n if predictions:\n print(\"\\n๐ŸŽฏ Sample Image Predictions:\")\n for i, pred in enumerate(predictions[:3]):\n predicted_class = pred if isinstance(pred, str) else class_names_img[pred] if pred < len(class_names_img) else f\"Class {pred}\"\n true_class = class_names_img[y_test_img[i]]\n print(f\" Sample {i+1}: Predicted='{predicted_class}', True='{true_class}'\")\n \nexcept Exception as e:\n print(f\"โŒ Error during image evaluation: {e}\")\n print(\"The classifier is trained, but evaluation may require VLM API access.\")" + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "๐Ÿ”ฎ Making predictions on image test data...\n", + "๐Ÿ“ Using image temp directory: /var/folders/nh/rgvpvzyd32d9v1gwjtp7_brr0000gn/T/marvis_image_demo_ubt0va_c\n", + "\n", + "๐Ÿ“ˆ Image Classification Results:\n", + " โ€ข Accuracy: 1.0\n", + " โ€ข Completed samples: 8\n", + "\n", + "๐ŸŽฏ Sample Image Predictions:\n", + " Sample 1: Predicted='Digit 1', True='Digit 1'\n", + " Sample 2: Predicted='Digit 1', True='Digit 1'\n", + " Sample 3: Predicted='Digit 0', True='Digit 0'\n" + ] + } + ], + "source": [ + "# Make predictions and evaluate on image data\n", + "print(\"๐Ÿ”ฎ Making predictions on image test data...\")\n", + "\n", + "print(f\"๐Ÿ“ Using image temp directory: {temp_dir_img}\")\n", + "\n", + "try:\n", + " # Evaluate on a small subset using evaluate() method\n", + " image_results = image_classifier.evaluate(\n", + " X_test_img[:8], # Use first 8 test samples\n", + " y_test_img[:8],\n", + " return_detailed=True,\n", + " save_outputs=True,\n", + " output_dir=str(temp_dir_img)\n", + " )\n", + " \n", + " print(\"\\n๐Ÿ“ˆ Image Classification Results:\")\n", + " accuracy = image_results.get('accuracy', 'N/A')\n", + " total_samples = len(X_test_img[:8])\n", + " completed_samples = image_results.get('completed_samples', total_samples)\n", + " \n", + " print(f\" โ€ข Accuracy: {accuracy}\")\n", + " print(f\" โ€ข Completed samples: {completed_samples}\")\n", + " \n", + " # Display some predictions\n", + " predictions = image_results.get('predictions', [])\n", + " if predictions:\n", + " print(\"\\n๐ŸŽฏ Sample Image Predictions:\")\n", + " for i, pred in enumerate(predictions[:3]):\n", + " predicted_class = pred if isinstance(pred, str) else class_names_img[pred] if pred < len(class_names_img) else f\"Class {pred}\"\n", + " true_class = class_names_img[y_test_img[i]]\n", + " print(f\" Sample {i+1}: Predicted='{predicted_class}', True='{true_class}'\")\n", + " \n", + "except Exception as e:\n", + " print(f\"โŒ Error during image evaluation: {e}\")\n", + " print(\"The classifier is trained, but evaluation may require VLM API access.\")" + ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -574,7 +621,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -582,7 +629,7 @@ "output_type": "stream", "text": [ "๐Ÿ”ง Initializing MARVIS audio classifier...\n", - "๐Ÿ“ Created audio temp directory: /var/folders/nh/rgvpvzyd32d9v1gwjtp7_brr0000gn/T/marvis_audio_demo_vz8m8f74\n", + "๐Ÿ“ Created audio temp directory: /var/folders/nh/rgvpvzyd32d9v1gwjtp7_brr0000gn/T/marvis_audio_demo_j3wuld80\n", "โœ… Audio classifier initialized!\n" ] } @@ -613,19 +660,334 @@ "print(\"โœ… Audio classifier initialized!\")" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "๐ŸŽต Creating synthetic audio dataset...\n", + "โœ… Audio dataset created:\n", + " โ€ข Training samples: 21\n", + " โ€ข Test samples: 9\n", + " โ€ข Duration: 2.0s per sample\n", + " โ€ข Classes: ['Low Tone', 'Mid Tone', 'High Tone']\n", + " โ€ข Frequencies: ~200Hz, ~500Hz, ~800Hz\n" + ] + }, + { + "data": { + "image/png": "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PUrcfvvt4rTTTgtE0JNfKMerZueee27w/Te/+U3Zz9GN76KLLhIf+MAHgvLAAwcOiB/+8Idlguq7d+8OQC1v3rx58+bNmzdO86CUN2/evHnz5s3bSWavec1rAgbTC1/4QnHDDTcEJXvf/e53g2596LJXzcB0Apj1k5/8RP7sm9/8pvjYxz4WsKygOfUv//IvARvrwQ9+sPybH//4x4HQujdv3rx58+bNG7d5UMqbN2/evHnz5u0kM4iP//SnPw0AKABG0J96wxveILq7u0Vtbbp79xd/8ReBbhQZ/v6rX/1q0MnvIQ95iPjUpz4VlPI97GEPC36/uLgovv71rweC6968efPmzZs3b9xWs76+vs7+rt68efPmzZs3b94ecAaxc7CgrrrqKnHhhRfm/v0nP/lJ8bWvfU1873vfK+TzefPmzZs3b962lnmmlDdv3rx58+bN2xYxdNJDid7o6KjS30Ns/fLLL3f+ubx58+bNmzdvW9M8U8qbN2/evHnz5s2bN2/evHnz5s1b4eaZUt68efPmzZs3b968efPmzZs3b94KNw9KefPmzZs3b968efPmzZs3b968eSvcPCjlzZs3b968efPmzZs3b968efPmrXDzoJQ3b968efPmzZs3b968efPmzZu3ws2DUt68efPmzZs3b968efPmzZs3b94KNw9KefPmzZs3b968efPmzZs3b968eSvcPCjlzZs3b968efPmzZs3b968efPmrXDzoJQ3b968efPmzZs3b968efPmzZu3ws2DUt68efPmzZs3b968efPmzZs3b94KNw9KefPmzZs3b968efPmzZs3b968eSvcPCjlzZs3b968efPmzZs3b968efPmrXDzoJQ3b968efPmzZs3b968efPmzZu3ws2DUt68efPmzZs3b968efPmzZs3b94KNw9KefPmzZs3b968efPmzZs3b968eSvcPCjlzZs3b968bXE77bTTxMte9jLj1/7hH/4h+2fydmKtpqZGvOMd7xBb3YaGhsRznvMc0dvbG9yTj3zkIyf6I3nz5s2bN2+byjwo5c2bN2/evG0i+8IXvhAEz7/85S+r/v4JT3iCePjDHy5OtAEEw+fM+zIFyx4IduuttwaAxqmnniqam5vFrl27xB/8wR+Iyy+/XGwle+hDHyrOOeecDT//2te+Fjzjxz/+8Rt+d8UVVwS/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v0+aNCnyi1/8wn/9/PnzI7Vr14784Q9/iKxevToybdq0yMknnxxZsWKF/5p7773Xvsdf//rXSGFhYeTiiy+O5OXlRfbu3Vst50hIKoy7bdu22Y57r732mu1ChGPg9y1btlTLORJS08fdgQMHImPGjInk5OREli1bZsea/Ozfv7/azpOQmjzudu3aFbn99tsjCxYsiKxduzby8ccfR66++mp7DHQEI4To2JmJsPseORGhKJXEPPLII5Hc3NxInTp1bAvRhQsX+n87++yzI1deeWXc61944YVIx44d7evz8/PtJtilsrIycscdd0QyMzPthDhs2LBIUVFRaOdDSCqOu6efftqKUYk/MCwIIcGPu5KSkirHHH7ef//9UM+LkFQZd3BwXnLJJba9Pf6elZVlxeGCgoJQz4mQVLMzE6EoRU5E0vCfY4msIoQQQgghhBBCCCHk+8KaUoQQQgghhBBCCCEkdChKEUIIIYQQQgghhJDQoShFCCGEEEIIIYQQQkKHohQhhBBCCCGEEEIICR2KUoQQQgghhBBCCCEkdChKEUIIIYQQQgghhJDQoShFCCGEEEIIIYQQQkKHohQhhBBCCCGEEEIICR2KUoQQQgghhBBCCCEkdChKEUIIIYSEyFVXXWXGjh1bbcefNGmSufvuu7/TaydMmGAeeOAB9c9ECCGEkNQkLRKJRKr7QxBCCCGE1ATS0tKO+vdp06aZW2+91cD8ysjIMGGzfPlyc+6555p169aZhg0bfuvrV65caYYMGWJKSkpMenp6KJ+REEIIIakDRSlCCCGEkIAoLS31/z179mxz5513mqKiIv85CEHfRQzS4tprrzW1a9c2M2fO/M7/zxlnnGGju6ZMmaL62QghhBCSejB9jxBCCCEkIFq0aOH/ILIIkVPucxCkEtP3hg4dam6++WYzdepU06RJE5OZmWn+9Kc/md27d5urr77aNGrUyLRv39688cYbh0UxnX/++fY98f8gLa+8vPyIn+3QoUPmpZdeMqNHj457/rHHHjMdOnQw9erVs+9z2WWXxf0dr581a1Zg3xEhhBBCiEBRihBCCCGkmvnzn/9smjVrZgoKCqxAdeONN5px48aZQYMGmSVLlpiRI0da0WnPnj329Tt27LBpeL179zYff/yx+cc//mG2bt1qxo8ff8RjFBYWmoqKCtO3b1//Ofy/t9xyi/nNb35jI7rwPkjXc+nXr5/9XPv371f8BgghhBCSilCUIoQQQgipZnr27Gl+9atf2Yil22+/3UYtQaSaPHmyfQ5pgNu2bbPCEpgxY4YVpFCwvHPnzvbfTz31lHn//ffNZ599VuUxUEfqpJNOMs2bN/efW79+vWnQoIG56KKLTOvWre37QKRyyc7ONgcOHIhLTSSEEEIICQKKUoQQQggh1UyPHj38f0M4atq0qenevbv/HNLqQFlZmV+wHAKU1KjCD8QpsGbNmiqPsXfvXlO3bt24YuwjRoywYlTbtm1tJNazzz7rR2MJ9evXt4+JzxNCCCGEfF8oShFCCCGEVDMnn3xy3O8QjtznREiqrKy0j7t27bK1npYtWxb3U1xcfFj6nYDIKwhLiHoSUK8K6YHPP/+8ycrKshFZiNpCeqCwfft2+3jaaacFfNaEEEIISXUoShFCCCGEJBl9+vQxn3zyiWnTpo0tgu7+IB2vKnr16mUfV61aFfc8uvENHz7c3HfffTY9cO3atea9996LK6iek5NjRS1CCCGEkCChKEUIIYQQkmRMmTLFRjBNnDjRLFq0yKbsvfnmm7ZbH7rsVQUinSBmzZs3z3/u1VdfNQ8//LCNskLNqb/85S82GqtTp07+a+bOnWsLrRNCCCGEBA1FKUIIIYSQJAPFx+fPn28FKAhGqD81depUk5GRYWrVOrJ5d+2119q6UQJe//LLL9tOfl26dDEzZ860qXz5+fn27/v27TOvvPKKLbhOCCGEEBI0aZFIJBL4uxJCCCGEkBMOFDtHFNTs2bPNwIEDv/X1jz/+uJkzZ4556623Qvl8hBBCCEktGClFCCGEEJIioJMeUvTKy8u/0+tRbP2RRx5R/1yEEEIISU0YKUUIIYQQQgghhBBCQoeRUoQQQgghhBBCCCEkdChKEUIIIYQQQgghhJDQoShFCCGEEEIIIYQQQkKHohQhhBBCCCGEEEIICR2KUoQQQgghhBBCCCEkdChKEUIIIYQQQgghhJDQoShFCCGEEEIIIYQQQkKHohQhhBBCCCGEEEIICR2KUoQQQgghhBBCCCHEhM3/A3TkvYBVCml8AAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "๐ŸŽง Playing sample audio (Low Tone)...\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Create synthetic audio dataset\n", + "print(\"๐ŸŽต Creating synthetic audio dataset...\")\n", + "\n", + "# Audio parameters\n", + "samples_per_class = 10\n", + "duration = 2.0 # seconds\n", + "sample_rate = 22050 # Hz\n", + "class_names_audio = [\"Low Tone\", \"Mid Tone\", \"High Tone\"]\n", + "\n", + "# Initialize storage\n", + "audio_paths = []\n", + "audio_labels = []\n", + "\n", + "try:\n", + " import soundfile as sf\n", + " \n", + " for class_idx, class_name in enumerate(class_names_audio):\n", + " base_freq = 200 + class_idx * 300 # 200Hz, 500Hz, 800Hz\n", + " \n", + " for sample_idx in range(samples_per_class):\n", + " # Add some variation to the frequency\n", + " freq_variation = np.random.uniform(-50, 50)\n", + " frequency = base_freq + freq_variation\n", + " \n", + " # Create synthetic audio with correct parameters\n", + " audio = create_synthetic_audio(\n", + " frequency=frequency,\n", + " duration=duration,\n", + " sample_rate=sample_rate,\n", + " amplitude=0.5,\n", + " waveform='sine'\n", + " )\n", + " \n", + " # Add some noise manually\n", + " noise = np.random.normal(0, 0.1, len(audio))\n", + " audio = audio + noise * 0.1 # 10% noise level\n", + " \n", + " # Save to file\n", + " audio_path = Path(temp_dir_audio) / f\"{class_name.lower().replace(' ', '_')}_{sample_idx:02d}.wav\"\n", + " sf.write(str(audio_path), audio, sample_rate)\n", + " \n", + " audio_paths.append(str(audio_path))\n", + " audio_labels.append(class_idx)\n", + " \n", + " # Convert to numpy arrays\n", + " audio_labels = np.array(audio_labels)\n", + " \n", + " # Split into train/test\n", + " audio_train_paths, audio_test_paths, y_train_audio, y_test_audio = train_test_split(\n", + " audio_paths, audio_labels, test_size=0.3, random_state=42, stratify=audio_labels\n", + " )\n", + " \n", + " print(f\"โœ… Audio dataset created:\")\n", + " print(f\" โ€ข Training samples: {len(audio_train_paths)}\")\n", + " print(f\" โ€ข Test samples: {len(audio_test_paths)}\")\n", + " print(f\" โ€ข Duration: {duration}s per sample\")\n", + " print(f\" โ€ข Classes: {class_names_audio}\")\n", + " print(f\" โ€ข Frequencies: ~200Hz, ~500Hz, ~800Hz\")\n", + " \n", + " # Display audio waveforms\n", + " fig, axes = plt.subplots(3, 1, figsize=(12, 8))\n", + " \n", + " for class_idx in range(3):\n", + " # Load and plot first sample of each class\n", + " sample_path = [p for p, l in zip(audio_train_paths, y_train_audio) if l == class_idx][0]\n", + " audio_data, sr = sf.read(sample_path)\n", + " \n", + " time_axis = np.arange(len(audio_data)) / sr\n", + " axes[class_idx].plot(time_axis[:1000], audio_data[:1000]) # Plot first 1000 samples\n", + " axes[class_idx].set_title(f\"{class_names_audio[class_idx]} - Sample Waveform\")\n", + " axes[class_idx].set_xlabel(\"Time (s)\")\n", + " axes[class_idx].set_ylabel(\"Amplitude\")\n", + " axes[class_idx].grid(True, alpha=0.3)\n", + " \n", + " plt.tight_layout()\n", + " plt.show()\n", + " \n", + " # Play a sample audio (first test sample)\n", + " if audio_test_paths:\n", + " sample_audio, sample_sr = sf.read(audio_test_paths[0])\n", + " print(f\"\\n๐ŸŽง Playing sample audio ({class_names_audio[y_test_audio[0]]})...\")\n", + " display(Audio(sample_audio, rate=sample_sr))\n", + "\n", + "except ImportError:\n", + " print(\"โš ๏ธ soundfile not available. Skipping audio file creation.\")\n", + " print(\"Audio classification would work with real audio files.\")\n", + " audio_available = False\n", + "except Exception as e:\n", + " print(f\"โš ๏ธ Error creating audio files: {e}\")\n", + " print(\"This might be due to missing audio dependencies.\")\n", + " audio_available = False\n", + "else:\n", + " audio_available = True" + ] + }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], - "source": "# Create synthetic audio dataset\nprint(\"๐ŸŽต Creating synthetic audio dataset...\")\n\n# Audio parameters\nsamples_per_class = 10\nduration = 2.0 # seconds\nsample_rate = 22050 # Hz\nclass_names_audio = [\"Low Tone\", \"Mid Tone\", \"High Tone\"]\n\n# Initialize storage\naudio_paths = []\naudio_labels = []\n\ntry:\n import soundfile as sf\n \n for class_idx, class_name in enumerate(class_names_audio):\n base_freq = 200 + class_idx * 300 # 200Hz, 500Hz, 800Hz\n \n for sample_idx in range(samples_per_class):\n # Add some variation to the frequency\n freq_variation = np.random.uniform(-50, 50)\n frequency = base_freq + freq_variation\n \n # Create synthetic audio with correct parameters\n audio = create_synthetic_audio(\n frequency=frequency,\n duration=duration,\n sample_rate=sample_rate,\n amplitude=0.5,\n waveform='sine'\n )\n \n # Add some noise manually\n noise = np.random.normal(0, 0.1, len(audio))\n audio = audio + noise * 0.1 # 10% noise level\n \n # Save to file\n audio_path = Path(temp_dir_audio) / f\"{class_name.lower().replace(' ', '_')}_{sample_idx:02d}.wav\"\n sf.write(str(audio_path), audio, sample_rate)\n \n audio_paths.append(str(audio_path))\n audio_labels.append(class_idx)\n \n # Convert to numpy arrays\n audio_labels = np.array(audio_labels)\n \n # Split into train/test\n audio_train_paths, audio_test_paths, y_train_audio, y_test_audio = train_test_split(\n audio_paths, audio_labels, test_size=0.3, random_state=42, stratify=audio_labels\n )\n \n print(f\"โœ… Audio dataset created:\")\n print(f\" โ€ข Training samples: {len(audio_train_paths)}\")\n print(f\" โ€ข Test samples: {len(audio_test_paths)}\")\n print(f\" โ€ข Duration: {duration}s per sample\")\n print(f\" โ€ข Classes: {class_names_audio}\")\n print(f\" โ€ข Frequencies: ~200Hz, ~500Hz, ~800Hz\")\n \n # Display audio waveforms\n fig, axes = plt.subplots(3, 1, figsize=(12, 8))\n \n for class_idx in range(3):\n # Load and plot first sample of each class\n sample_path = [p for p, l in zip(audio_train_paths, y_train_audio) if l == class_idx][0]\n audio_data, sr = sf.read(sample_path)\n \n time_axis = np.arange(len(audio_data)) / sr\n axes[class_idx].plot(time_axis[:1000], audio_data[:1000]) # Plot first 1000 samples\n axes[class_idx].set_title(f\"{class_names_audio[class_idx]} - Sample Waveform\")\n axes[class_idx].set_xlabel(\"Time (s)\")\n axes[class_idx].set_ylabel(\"Amplitude\")\n axes[class_idx].grid(True, alpha=0.3)\n \n plt.tight_layout()\n plt.show()\n \n # Play a sample audio (first test sample)\n if audio_test_paths:\n sample_audio, sample_sr = sf.read(audio_test_paths[0])\n print(f\"\\n๐ŸŽง Playing sample audio ({class_names_audio[y_test_audio[0]]})...\")\n display(Audio(sample_audio, rate=sample_sr))\n\nexcept ImportError:\n print(\"โš ๏ธ soundfile not available. Skipping audio file creation.\")\n print(\"Audio classification would work with real audio files.\")\n audio_available = False\nexcept Exception as e:\n print(f\"โš ๏ธ Error creating audio files: {e}\")\n print(\"This might be due to missing audio dependencies.\")\n audio_available = False\nelse:\n audio_available = True" + "source": "# Evaluate audio classifier if available and trained\nif audio_available and 'audio_test_paths' in locals():\n print(\"๐Ÿ”ฎ Making predictions on audio test data...\")\n \n print(f\"๐Ÿ“ Using audio temp directory: {temp_dir_audio}\")\n \n try:\n # Evaluate on a small subset using evaluate() method\n audio_results = audio_classifier.evaluate(\n audio_test_paths[:5], # First 5 test samples\n y_test_audio[:5],\n return_detailed=True,\n save_outputs=True,\n output_dir=str(temp_dir_audio)\n )\n \n print(\"\\n๐Ÿ“ˆ Audio Classification Results:\")\n accuracy = audio_results.get('accuracy', 'N/A')\n total_samples = len(audio_test_paths[:5])\n completed_samples = audio_results.get('completed_samples', total_samples)\n \n print(f\" โ€ข Accuracy: {accuracy}\")\n print(f\" โ€ข Completed samples: {completed_samples}\")\n \n # Display predictions\n predictions = audio_results.get('predictions', [])\n if predictions:\n print(\"\\n๐ŸŽฏ Sample Audio Predictions:\")\n for i, pred in enumerate(predictions[:3]):\n predicted_class = pred if isinstance(pred, str) else class_names_audio[pred] if pred < len(class_names_audio) else f\"Class {pred}\"\n true_class = class_names_audio[y_test_audio[i]]\n print(f\" Sample {i+1}: Predicted='{predicted_class}', True='{true_class}'\")\n \n # Display audio visualization\n print(\"\\n๐Ÿ–ผ๏ธ Displaying t-SNE visualization for audio data...\")\n \n viz_files_audio = list(Path(temp_dir_audio).glob(\"*.png\"))\n \n if viz_files_audio:\n latest_viz_audio = max(viz_files_audio, key=lambda p: p.stat().st_mtime)\n print(f\"๐Ÿ“Š Found audio visualization: {latest_viz_audio.name}\")\n \n display(IPImage(filename=str(latest_viz_audio), width=600))\n \n print(\"\\n๐ŸŽจ Audio Visualization Features:\")\n print(\" โ€ข Each point represents an audio sample in t-SNE space\")\n print(\" โ€ข Whisper embeddings capture audio frequency patterns\")\n print(\" โ€ข Different tones cluster based on frequency content\")\n print(\" โ€ข VLM recognizes patterns to classify audio by frequency\")\n else:\n print(\"โš ๏ธ No audio visualization found.\")\n \n except Exception as e:\n print(f\"โŒ Error during audio evaluation: {e}\")\n print(\"This might be due to:\")\n print(\" โ€ข Whisper model loading issues\")\n print(\" โ€ข VLM API access limitations\") \n print(\" โ€ข Audio processing dependencies\")\n \nelse:\n print(\"โš ๏ธ Skipping audio evaluation - no audio data available\")\n print(\"Audio classification would work with:\")\n print(\" โ€ข Real audio files or synthetic audio data\")\n print(\" โ€ข Proper soundfile and Whisper dependencies\")\n print(\" โ€ข VLM model access\")" }, { "cell_type": "code", - "source": "# Evaluate audio classifier if available\nif audio_available and 'audio_test_paths' in locals():\n print(\"๐Ÿ”ฎ Making predictions on audio test data...\")\n \n print(f\"๐Ÿ“ Using audio temp directory: {temp_dir_audio}\")\n \n try:\n # Evaluate on a small subset using evaluate() method\n audio_results = audio_classifier.evaluate(\n audio_test_paths[:5], # First 5 test samples\n y_test_audio[:5],\n return_detailed=True,\n save_outputs=True,\n output_dir=str(temp_dir_audio)\n )\n \n print(\"\\n๐Ÿ“ˆ Audio Classification Results:\")\n accuracy = audio_results.get('accuracy', 'N/A')\n total_samples = len(audio_test_paths[:5])\n completed_samples = audio_results.get('completed_samples', total_samples)\n \n print(f\" โ€ข Accuracy: {accuracy}\")\n print(f\" โ€ข Completed samples: {completed_samples}\")\n \n # Display predictions\n predictions = audio_results.get('predictions', [])\n if predictions:\n print(\"\\n๐ŸŽฏ Sample Audio Predictions:\")\n for i, pred in enumerate(predictions[:3]):\n predicted_class = pred if isinstance(pred, str) else class_names_audio[pred] if pred < len(class_names_audio) else f\"Class {pred}\"\n true_class = class_names_audio[y_test_audio[i]]\n print(f\" Sample {i+1}: Predicted='{predicted_class}', True='{true_class}'\")\n \n # Display audio visualization\n print(\"\\n๐Ÿ–ผ๏ธ Displaying t-SNE visualization for audio data...\")\n \n viz_files_audio = list(Path(temp_dir_audio).glob(\"*.png\"))\n \n if viz_files_audio:\n latest_viz_audio = max(viz_files_audio, key=lambda p: p.stat().st_mtime)\n print(f\"๐Ÿ“Š Found audio visualization: {latest_viz_audio.name}\")\n \n display(IPImage(filename=str(latest_viz_audio), width=600))\n \n print(\"\\n๐ŸŽจ Audio Visualization Features:\")\n print(\" โ€ข Each point represents an audio sample in t-SNE space\")\n print(\" โ€ข Whisper embeddings capture audio frequency patterns\")\n print(\" โ€ข Different tones cluster based on frequency content\")\n print(\" โ€ข VLM recognizes patterns to classify audio by frequency\")\n else:\n print(\"โš ๏ธ No audio visualization found.\")\n \n except Exception as e:\n print(f\"โŒ Error during audio evaluation: {e}\")\n print(\"This might be due to Whisper model loading or VLM API issues.\")\n \nelse:\n print(\"โš ๏ธ Skipping audio evaluation - no audio data or classifier not trained\")\n print(\"Audio classification would work with:\")\n print(\" โ€ข Real audio files\")\n print(\" โ€ข Proper soundfile and Whisper dependencies\")\n print(\" โ€ข VLM model access\")", + "execution_count": null, "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "๐Ÿ”ฎ Making predictions on audio test data...\n", + "๐Ÿ“ Using audio temp directory: /var/folders/nh/rgvpvzyd32d9v1gwjtp7_brr0000gn/T/marvis_audio_demo_j3wuld80\n", + "โŒ Error: Audio classifier must be fitted before making predictions\n", + "๐Ÿ’ก Make sure the training cell above executed successfully\n" + ] + } + ], + "source": [ + "# Evaluate audio classifier if available and trained\n", + "if audio_available and 'audio_test_paths' in locals():\n", + " print(\"๐Ÿ”ฎ Making predictions on audio test data...\")\n", + " \n", + " print(f\"๐Ÿ“ Using audio temp directory: {temp_dir_audio}\")\n", + " \n", + " try:\n", + " # Check if classifier is fitted\n", + " if not hasattr(audio_classifier, 'train_embeddings') or audio_classifier.train_embeddings is None:\n", + " print(\"โŒ Error: Audio classifier must be fitted before making predictions\")\n", + " print(\"๐Ÿ’ก Make sure the training cell above executed successfully\")\n", + " else:\n", + " # Evaluate on a small subset using evaluate() method\n", + " audio_results = audio_classifier.evaluate(\n", + " audio_test_paths[:5], # First 5 test samples\n", + " y_test_audio[:5],\n", + " return_detailed=True,\n", + " save_outputs=True,\n", + " output_dir=str(temp_dir_audio)\n", + " )\n", + " \n", + " print(\"\\n๐Ÿ“ˆ Audio Classification Results:\")\n", + " accuracy = audio_results.get('accuracy', 'N/A')\n", + " total_samples = len(audio_test_paths[:5])\n", + " completed_samples = audio_results.get('completed_samples', total_samples)\n", + " \n", + " print(f\" โ€ข Accuracy: {accuracy}\")\n", + " print(f\" โ€ข Completed samples: {completed_samples}\")\n", + " \n", + " # Display predictions\n", + " predictions = audio_results.get('predictions', [])\n", + " if predictions:\n", + " print(\"\\n๐ŸŽฏ Sample Audio Predictions:\")\n", + " for i, pred in enumerate(predictions[:3]):\n", + " predicted_class = pred if isinstance(pred, str) else class_names_audio[pred] if pred < len(class_names_audio) else f\"Class {pred}\"\n", + " true_class = class_names_audio[y_test_audio[i]]\n", + " print(f\" Sample {i+1}: Predicted='{predicted_class}', True='{true_class}'\")\n", + " \n", + " # Display audio visualization\n", + " print(\"\\n๐Ÿ–ผ๏ธ Displaying t-SNE visualization for audio data...\")\n", + " \n", + " viz_files_audio = list(Path(temp_dir_audio).glob(\"*.png\"))\n", + " \n", + " if viz_files_audio:\n", + " latest_viz_audio = max(viz_files_audio, key=lambda p: p.stat().st_mtime)\n", + " print(f\"๐Ÿ“Š Found audio visualization: {latest_viz_audio.name}\")\n", + " \n", + " display(IPImage(filename=str(latest_viz_audio), width=600))\n", + " \n", + " print(\"\\n๐ŸŽจ Audio Visualization Features:\")\n", + " print(\" โ€ข Each point represents an audio sample in t-SNE space\")\n", + " print(\" โ€ข Whisper embeddings capture audio frequency patterns\")\n", + " print(\" โ€ข Different tones cluster based on frequency content\")\n", + " print(\" โ€ข VLM recognizes patterns to classify audio by frequency\")\n", + " else:\n", + " print(\"โš ๏ธ No audio visualization found.\")\n", + " \n", + " except Exception as e:\n", + " print(f\"โŒ Error during audio evaluation: {e}\")\n", + " print(\"This might be due to:\")\n", + " print(\" โ€ข Whisper model loading issues\")\n", + " print(\" โ€ข VLM API access limitations\") \n", + " print(\" โ€ข Audio processing dependencies\")\n", + " print(\" โ€ข Model not being fitted properly\")\n", + " \n", + "else:\n", + " print(\"โš ๏ธ Skipping audio evaluation - no audio data or classifier not trained\")\n", + " print(\"Audio classification would work with:\")\n", + " print(\" โ€ข Real audio files or synthetic audio data\")\n", + " print(\" โ€ข Proper soundfile and Whisper dependencies\")\n", + " print(\" โ€ข VLM model access\")\n", + " print(\" โ€ข Successfully trained audio classifier\")" + ] + }, + { + "cell_type": "code", "execution_count": null, - "outputs": [] + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "๐Ÿ”ฎ Making predictions on audio test data...\n", + "๐Ÿ“ Using audio temp directory: /var/folders/nh/rgvpvzyd32d9v1gwjtp7_brr0000gn/T/marvis_audio_demo_j3wuld80\n", + "โŒ Error during audio evaluation: Model must be fitted before making predictions\n", + "This might be due to Whisper model loading or VLM API issues.\n" + ] + } + ], + "source": [ + "# Evaluate audio classifier if available\n", + "if audio_available and 'audio_test_paths' in locals():\n", + " print(\"๐Ÿ”ฎ Making predictions on audio test data...\")\n", + " \n", + " print(f\"๐Ÿ“ Using audio temp directory: {temp_dir_audio}\")\n", + " \n", + " try:\n", + " # Evaluate on a small subset using evaluate() method\n", + " audio_results = audio_classifier.evaluate(\n", + " audio_test_paths[:5], # First 5 test samples\n", + " y_test_audio[:5],\n", + " return_detailed=True,\n", + " save_outputs=True,\n", + " output_dir=str(temp_dir_audio)\n", + " )\n", + " \n", + " print(\"\\n๐Ÿ“ˆ Audio Classification Results:\")\n", + " accuracy = audio_results.get('accuracy', 'N/A')\n", + " total_samples = len(audio_test_paths[:5])\n", + " completed_samples = audio_results.get('completed_samples', total_samples)\n", + " \n", + " print(f\" โ€ข Accuracy: {accuracy}\")\n", + " print(f\" โ€ข Completed samples: {completed_samples}\")\n", + " \n", + " # Display predictions\n", + " predictions = audio_results.get('predictions', [])\n", + " if predictions:\n", + " print(\"\\n๐ŸŽฏ Sample Audio Predictions:\")\n", + " for i, pred in enumerate(predictions[:3]):\n", + " predicted_class = pred if isinstance(pred, str) else class_names_audio[pred] if pred < len(class_names_audio) else f\"Class {pred}\"\n", + " true_class = class_names_audio[y_test_audio[i]]\n", + " print(f\" Sample {i+1}: Predicted='{predicted_class}', True='{true_class}'\")\n", + " \n", + " # Display audio visualization\n", + " print(\"\\n๐Ÿ–ผ๏ธ Displaying t-SNE visualization for audio data...\")\n", + " \n", + " viz_files_audio = list(Path(temp_dir_audio).glob(\"*.png\"))\n", + " \n", + " if viz_files_audio:\n", + " latest_viz_audio = max(viz_files_audio, key=lambda p: p.stat().st_mtime)\n", + " print(f\"๐Ÿ“Š Found audio visualization: {latest_viz_audio.name}\")\n", + " \n", + " display(IPImage(filename=str(latest_viz_audio), width=600))\n", + " \n", + " print(\"\\n๐ŸŽจ Audio Visualization Features:\")\n", + " print(\" โ€ข Each point represents an audio sample in t-SNE space\")\n", + " print(\" โ€ข Whisper embeddings capture audio frequency patterns\")\n", + " print(\" โ€ข Different tones cluster based on frequency content\")\n", + " print(\" โ€ข VLM recognizes patterns to classify audio by frequency\")\n", + " else:\n", + " print(\"โš ๏ธ No audio visualization found.\")\n", + " \n", + " except Exception as e:\n", + " print(f\"โŒ Error during audio evaluation: {e}\")\n", + " print(\"This might be due to Whisper model loading or VLM API issues.\")\n", + " \n", + "else:\n", + " print(\"โš ๏ธ Skipping audio evaluation - no audio data or classifier not trained\")\n", + " print(\"Audio classification would work with:\")\n", + " print(\" โ€ข Real audio files\")\n", + " print(\" โ€ข Proper soundfile and Whisper dependencies\")\n", + " print(\" โ€ข VLM model access\")" + ] }, { "cell_type": "markdown", @@ -640,7 +1002,19 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "๐Ÿ”ฌ Demonstrating multi-visualization reasoning...\n", + "โœ… Multi-visualization classifier initialized!\n", + " โ€ข Methods: PCA (linear) + t-SNE (non-linear)\n", + " โ€ข Layout: Adaptive grid for comparison\n", + " โ€ข Focus: Cross-method pattern comparison\n" + ] + } + ], "source": [ "# Demonstrate multi-visualization with tabular data\n", "print(\"๐Ÿ”ฌ Demonstrating multi-visualization reasoning...\")\n", @@ -664,32 +1038,83 @@ "print(\" โ€ข Focus: Cross-method pattern comparison\")" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "get_whisper_embeddings() got an unexpected keyword argument 'whisper_model'", + "output_type": "error", + "traceback": [ + "\u001b[31m---------------------------------------------------------------------------\u001b[39m", + "\u001b[31mTypeError\u001b[39m Traceback (most recent call last)", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[51]\u001b[39m\u001b[32m, line 3\u001b[39m\n\u001b[32m 1\u001b[39m \u001b[38;5;66;03m# Train the audio classifier if audio data is available\u001b[39;00m\n\u001b[32m 2\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m audio_available \u001b[38;5;129;01mand\u001b[39;00m \u001b[33m'\u001b[39m\u001b[33maudio_train_paths\u001b[39m\u001b[33m'\u001b[39m \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mlocals\u001b[39m():\n\u001b[32m----> \u001b[39m\u001b[32m3\u001b[39m \u001b[43maudio_classifier\u001b[49m\u001b[43m.\u001b[49m\u001b[43mfit\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 4\u001b[39m \u001b[43m \u001b[49m\u001b[43maudio_train_paths\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;66;43;03m# Training audio file paths\u001b[39;49;00m\n\u001b[32m 5\u001b[39m \u001b[43m \u001b[49m\u001b[43my_train_audio\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;66;43;03m# Training labels\u001b[39;49;00m\n\u001b[32m 6\u001b[39m \u001b[43m \u001b[49m\u001b[43maudio_test_paths\u001b[49m\u001b[43m[\u001b[49m\u001b[43m:\u001b[49m\u001b[32;43m5\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;66;43;03m# Use subset of test data for demo\u001b[39;49;00m\n\u001b[32m 7\u001b[39m \u001b[43m \u001b[49m\u001b[43mclass_names\u001b[49m\u001b[43m=\u001b[49m\u001b[43mclass_names_audio\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 8\u001b[39m \u001b[43m \u001b[49m\u001b[43mtask_type\u001b[49m\u001b[43m=\u001b[49m\u001b[33;43m'\u001b[39;49m\u001b[33;43mclassification\u001b[39;49m\u001b[33;43m'\u001b[39;49m\n\u001b[32m 9\u001b[39m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/Library/CloudStorage/GoogleDrive-penfever@gmail.com/My Drive/Current Papers/marvis/marvis/marvis/models/marvis_tsne.py:1056\u001b[39m, in \u001b[36mfit\u001b[39m\u001b[34m(self, X_train, y_train, X_test, class_names, task_type, **kwargs)\u001b[39m\n\u001b[32m 1053\u001b[39m task_id = dataset_info.get(\u001b[33m\"\u001b[39m\u001b[33mtask_id\u001b[39m\u001b[33m\"\u001b[39m) \u001b[38;5;28;01mif\u001b[39;00m dataset_info \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[32m 1055\u001b[39m \u001b[38;5;66;03m# For non-tabular modalities, use special task IDs if task_id not provided\u001b[39;00m\n\u001b[32m-> \u001b[39m\u001b[32m1056\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m task_id \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m.modality == \u001b[33m\"\u001b[39m\u001b[33mvision\u001b[39m\u001b[33m\"\u001b[39m:\n\u001b[32m 1057\u001b[39m task_id = VISION_CLASSIFICATION_TASK_ID\n\u001b[32m 1058\u001b[39m \u001b[38;5;28mself\u001b[39m.logger.debug(\n\u001b[32m 1059\u001b[39m \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mUsing special vision classification task_id: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mtask_id\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m\"\u001b[39m\n\u001b[32m 1060\u001b[39m )\n", + "\u001b[31mTypeError\u001b[39m: get_whisper_embeddings() got an unexpected keyword argument 'whisper_model'" + ] + } + ], + "source": [] + }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ + "# Demonstrate multi-visualization with tabular data\n", + "print(\"๐Ÿ”ฌ Training and evaluating multi-visualization classifier...\")\n", + "\n", + "# Create temp directory for multi-viz outputs\n", + "temp_dir_multi = Path(tempfile.mkdtemp(prefix='marvis_multi_viz_'))\n", + "temp_dir_multi.mkdir(parents=True, exist_ok=True)\n", + "print(f\"๐Ÿ“ Created multi-viz temp directory: {temp_dir_multi}\")\n", + "\n", + "try:\n", + " # Train the multi-viz classifier\n", + " print(\"๐Ÿ‹๏ธ Training multi-visualization classifier...\")\n", + " multi_viz_classifier.fit(\n", + " X_train_tab, \n", + " y_train_tab, \n", + " X_test_tab, \n", + " class_names=class_names_tab,\n", + " task_type='classification'\n", + " )\n", + " \n", + " print(\"โœ… Multi-visualization classifier trained!\")\n", + " \n", " # Evaluate with multi-visualization\n", " print(\"\\n๐Ÿ”ฎ Making multi-visualization predictions...\")\n", " \n", - " multi_viz_results = multi_viz_classifier.predict(\n", + " multi_viz_results = multi_viz_classifier.evaluate(\n", " X_test_tab[:8],\n", " y_test_tab[:8],\n", " return_detailed=True,\n", " save_outputs=True,\n", - " output_dir=temp_dir_multi\n", + " output_dir=str(temp_dir_multi)\n", " )\n", " \n", " print(\"\\n๐Ÿ“ˆ Multi-Visualization Results:\")\n", " accuracy = multi_viz_results.get('accuracy', 'N/A')\n", - " completed_samples = multi_viz_results.get('completed_samples', 8)\n", + " total_samples = len(X_test_tab[:8])\n", + " completed_samples = multi_viz_results.get('completed_samples', total_samples)\n", " \n", " print(f\" โ€ข Accuracy: {accuracy}\")\n", " print(f\" โ€ข Completed samples: {completed_samples}\")\n", " \n", + " # Display some predictions\n", + " predictions = multi_viz_results.get('predictions', [])\n", + " if predictions:\n", + " print(\"\\n๐ŸŽฏ Sample Multi-Viz Predictions:\")\n", + " for i, pred in enumerate(predictions[:3]):\n", + " predicted_class = pred if isinstance(pred, str) else class_names_tab[pred] if pred < len(class_names_tab) else f\"Class {pred}\"\n", + " true_class = class_names_tab[y_test_tab[i]]\n", + " print(f\" Sample {i+1}: Predicted='{predicted_class}', True='{true_class}'\")\n", + " \n", " # Display multi-visualization\n", - " viz_files_multi = list(Path(temp_dir_multi).glob(\"*multi*.png\"))\n", + " viz_files_multi = list(Path(temp_dir_multi).glob(\"*.png\"))\n", " \n", " if viz_files_multi:\n", " latest_viz_multi = max(viz_files_multi, key=lambda p: p.stat().st_mtime)\n", @@ -698,8 +1123,8 @@ " display(IPImage(filename=str(latest_viz_multi), width=800))\n", " \n", " print(\"\\n๐ŸŽจ Multi-Visualization Features:\")\n", - " print(\" โ€ข Left panel: PCA projection (linear relationships)\")\n", - " print(\" โ€ข Right panel: t-SNE projection (non-linear clusters)\")\n", + " print(\" โ€ข Multiple dimensionality reduction methods in one view\")\n", + " print(\" โ€ข Side-by-side comparison of PCA and t-SNE projections\")\n", " print(\" โ€ข VLM compares both views for robust classification\")\n", " print(\" โ€ข Cross-method consensus improves prediction confidence\")\n", " else:\n", @@ -707,14 +1132,11 @@ " \n", "except Exception as e:\n", " print(f\"โŒ Error in multi-visualization demo: {e}\")\n", - " print(\"Multi-visualization requires additional computational resources.\")" + " print(\"Multi-visualization requires additional computational resources.\")\n", + " import traceback\n", + " traceback.print_exc()" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": "# Demonstrate multi-visualization with tabular data\nprint(\"๐Ÿ”ฌ Training and evaluating multi-visualization classifier...\")\n\n# Create temp directory for multi-viz outputs\ntemp_dir_multi = Path(tempfile.mkdtemp(prefix='marvis_multi_viz_'))\ntemp_dir_multi.mkdir(parents=True, exist_ok=True)\nprint(f\"๐Ÿ“ Created multi-viz temp directory: {temp_dir_multi}\")\n\ntry:\n # Train the multi-viz classifier\n print(\"๐Ÿ‹๏ธ Training multi-visualization classifier...\")\n multi_viz_classifier.fit(\n X_train_tab, \n y_train_tab, \n X_test_tab, \n class_names=class_names_tab,\n task_type='classification'\n )\n \n print(\"โœ… Multi-visualization classifier trained!\")\n \n # Evaluate with multi-visualization\n print(\"\\n๐Ÿ”ฎ Making multi-visualization predictions...\")\n \n multi_viz_results = multi_viz_classifier.evaluate(\n X_test_tab[:8],\n y_test_tab[:8],\n return_detailed=True,\n save_outputs=True,\n output_dir=str(temp_dir_multi)\n )\n \n print(\"\\n๐Ÿ“ˆ Multi-Visualization Results:\")\n accuracy = multi_viz_results.get('accuracy', 'N/A')\n total_samples = len(X_test_tab[:8])\n completed_samples = multi_viz_results.get('completed_samples', total_samples)\n \n print(f\" โ€ข Accuracy: {accuracy}\")\n print(f\" โ€ข Completed samples: {completed_samples}\")\n \n # Display some predictions\n predictions = multi_viz_results.get('predictions', [])\n if predictions:\n print(\"\\n๐ŸŽฏ Sample Multi-Viz Predictions:\")\n for i, pred in enumerate(predictions[:3]):\n predicted_class = pred if isinstance(pred, str) else class_names_tab[pred] if pred < len(class_names_tab) else f\"Class {pred}\"\n true_class = class_names_tab[y_test_tab[i]]\n print(f\" Sample {i+1}: Predicted='{predicted_class}', True='{true_class}'\")\n \n # Display multi-visualization\n viz_files_multi = list(Path(temp_dir_multi).glob(\"*.png\"))\n \n if viz_files_multi:\n latest_viz_multi = max(viz_files_multi, key=lambda p: p.stat().st_mtime)\n print(f\"\\n๐Ÿ“Š Found multi-visualization: {latest_viz_multi.name}\")\n \n display(IPImage(filename=str(latest_viz_multi), width=800))\n \n print(\"\\n๐ŸŽจ Multi-Visualization Features:\")\n print(\" โ€ข Multiple dimensionality reduction methods in one view\")\n print(\" โ€ข Side-by-side comparison of PCA and t-SNE projections\")\n print(\" โ€ข VLM compares both views for robust classification\")\n print(\" โ€ข Cross-method consensus improves prediction confidence\")\n else:\n print(\"โš ๏ธ No multi-visualization found, but classifier is functional.\")\n \nexcept Exception as e:\n print(f\"โŒ Error in multi-visualization demo: {e}\")\n print(\"Multi-visualization requires additional computational resources.\")\n import traceback\n traceback.print_exc()" - }, { "cell_type": "code", "execution_count": null, @@ -773,7 +1195,352 @@ "execution_count": null, "metadata": {}, "outputs": [], - "source": "# Summary of results across modalities\nprint(\"๐Ÿ“Š MARVIS Performance Summary Across Modalities\")\nprint(\"=\" * 60)\n\n# Collect results from all completed experiments\nresults_summary = {}\n\n# Tabular data results\nif 'tabular_results' in locals():\n results_summary[\"Tabular Data\"] = {\n \"samples\": len(X_test_tab[:10]) if 'X_test_tab' in locals() else 'N/A',\n \"features\": X_tabular.shape[1] if 'X_tabular' in locals() else 'N/A',\n \"classes\": len(class_names_tab) if 'class_names_tab' in locals() else 'N/A',\n \"accuracy\": tabular_results.get('accuracy', 'N/A'),\n \"method\": \"TabPFN embeddings โ†’ t-SNE โ†’ VLM reasoning\"\n }\n\n# Image data results \nif 'image_results' in locals():\n results_summary[\"Image Data\"] = {\n \"samples\": len(X_test_img[:8]) if 'X_test_img' in locals() else 'N/A',\n \"features\": \"8x8 pixels (DINOV2 embeddings)\",\n \"classes\": len(class_names_img) if 'class_names_img' in locals() else 'N/A',\n \"accuracy\": image_results.get('accuracy', 'N/A'),\n \"method\": \"Raw pixels โ†’ DINOV2 โ†’ t-SNE โ†’ VLM reasoning\"\n }\n\n# Audio data results\nif 'audio_available' in locals() and audio_available and 'audio_results' in locals():\n results_summary[\"Audio Data\"] = {\n \"samples\": len(audio_test_paths[:5]) if 'audio_test_paths' in locals() else 'N/A',\n \"features\": \"Whisper embeddings\",\n \"classes\": len(class_names_audio) if 'class_names_audio' in locals() else 'N/A',\n \"accuracy\": audio_results.get('accuracy', 'N/A'),\n \"method\": \"Audio โ†’ Whisper โ†’ t-SNE โ†’ VLM reasoning\"\n }\n\n# Multi-visualization results\nif 'multi_viz_results' in locals():\n results_summary[\"Multi-Visualization\"] = {\n \"samples\": len(X_test_tab[:8]) if 'X_test_tab' in locals() else 'N/A',\n \"features\": \"Same tabular data\",\n \"classes\": len(class_names_tab) if 'class_names_tab' in locals() else 'N/A',\n \"accuracy\": multi_viz_results.get('accuracy', 'N/A'),\n \"method\": \"PCA + t-SNE โ†’ Multi-panel โ†’ VLM reasoning\"\n }\n\n# Display results\nfor modality, info in results_summary.items():\n print(f\"\\n๐ŸŽฏ {modality}:\")\n print(f\" โ€ข Test samples: {info['samples']}\")\n print(f\" โ€ข Features: {info['features']}\")\n print(f\" โ€ข Classes: {info['classes']}\")\n print(f\" โ€ข Accuracy: {info['accuracy']}\")\n print(f\" โ€ข Method: {info['method']}\")\n\nprint(\"\\n๐ŸŽ‰ Key MARVIS Advantages:\")\nprint(\" โœ… Unified interface across modalities (tabular, image, audio)\")\nprint(\" โœ… Visual reasoning using state-of-the-art VLMs\")\nprint(\" โœ… Interpretable predictions through visualization\")\nprint(\" โœ… Multi-visualization support for robust classification\")\nprint(\" โœ… Handles few-shot learning scenarios effectively\")\nprint(\" โœ… No need for extensive hyperparameter tuning\")\n\nprint(f\"\\n๐Ÿ“Š Experiments completed: {len(results_summary)}\")\nif len(results_summary) == 0:\n print(\" โš ๏ธ No experiments completed successfully\")\nelif len(results_summary) < 4:\n print(\" โš ๏ธ Some experiments may have failed due to missing dependencies\")\nelse:\n print(\" โœ… All experiments completed successfully!\")" + "source": [ + "# Summary of results across modalities\n", + "print(\"๐Ÿ“Š MARVIS Performance Summary Across Modalities\")\n", + "print(\"=\" * 60)\n", + "\n", + "# Collect results from all completed experiments\n", + "results_summary = {}\n", + "\n", + "# Tabular data results\n", + "if 'tabular_results' in locals():\n", + " results_summary[\"Tabular Data\"] = {\n", + " \"samples\": len(X_test_tab[:10]) if 'X_test_tab' in locals() else 'N/A',\n", + " \"features\": X_tabular.shape[1] if 'X_tabular' in locals() else 'N/A',\n", + " \"classes\": len(class_names_tab) if 'class_names_tab' in locals() else 'N/A',\n", + " \"accuracy\": tabular_results.get('accuracy', 'N/A'),\n", + " \"method\": \"TabPFN embeddings โ†’ t-SNE โ†’ VLM reasoning\"\n", + " }\n", + "\n", + "# Image data results \n", + "if 'image_results' in locals():\n", + " results_summary[\"Image Data\"] = {\n", + " \"samples\": len(X_test_img[:8]) if 'X_test_img' in locals() else 'N/A',\n", + " \"features\": \"8x8 pixels (DINOV2 embeddings)\",\n", + " \"classes\": len(class_names_img) if 'class_names_img' in locals() else 'N/A',\n", + " \"accuracy\": image_results.get('accuracy', 'N/A'),\n", + " \"method\": \"Raw pixels โ†’ DINOV2 โ†’ t-SNE โ†’ VLM reasoning\"\n", + " }\n", + "\n", + "# Audio data results\n", + "if 'audio_available' in locals() and audio_available and 'audio_results' in locals():\n", + " results_summary[\"Audio Data\"] = {\n", + " \"samples\": len(audio_test_paths[:5]) if 'audio_test_paths' in locals() else 'N/A',\n", + " \"features\": \"Whisper embeddings\",\n", + " \"classes\": len(class_names_audio) if 'class_names_audio' in locals() else 'N/A',\n", + " \"accuracy\": audio_results.get('accuracy', 'N/A'),\n", + " \"method\": \"Audio โ†’ Whisper โ†’ t-SNE โ†’ VLM reasoning\"\n", + " }\n", + "\n", + "# Multi-visualization results\n", + "if 'multi_viz_results' in locals():\n", + " results_summary[\"Multi-Visualization\"] = {\n", + " \"samples\": len(X_test_tab[:8]) if 'X_test_tab' in locals() else 'N/A',\n", + " \"features\": \"Same tabular data\",\n", + " \"classes\": len(class_names_tab) if 'class_names_tab' in locals() else 'N/A',\n", + " \"accuracy\": multi_viz_results.get('accuracy', 'N/A'),\n", + " \"method\": \"PCA + t-SNE โ†’ Multi-panel โ†’ VLM reasoning\"\n", + " }\n", + "\n", + "# Display results\n", + "for modality, info in results_summary.items():\n", + " print(f\"\\n๐ŸŽฏ {modality}:\")\n", + " print(f\" โ€ข Test samples: {info['samples']}\")\n", + " print(f\" โ€ข Features: {info['features']}\")\n", + " print(f\" โ€ข Classes: {info['classes']}\")\n", + " print(f\" โ€ข Accuracy: {info['accuracy']}\")\n", + " print(f\" โ€ข Method: {info['method']}\")\n", + "\n", + "print(\"\\n๐ŸŽ‰ Key MARVIS Advantages:\")\n", + "print(\" โœ… Unified interface across modalities (tabular, image, audio)\")\n", + "print(\" โœ… Visual reasoning using state-of-the-art VLMs\")\n", + "print(\" โœ… Interpretable predictions through visualization\")\n", + "print(\" โœ… Multi-visualization support for robust classification\")\n", + "print(\" โœ… Handles few-shot learning scenarios effectively\")\n", + "print(\" โœ… No need for extensive hyperparameter tuning\")\n", + "print(\" โœ… Interactive chat for discussing predictions\")\n", + "\n", + "print(f\"\\n๐Ÿ“Š Experiments completed: {len(results_summary)}\")\n", + "if len(results_summary) == 0:\n", + " print(\" โš ๏ธ No experiments completed successfully\")\n", + "elif len(results_summary) < 4:\n", + " print(\" โš ๏ธ Some experiments may have failed due to missing dependencies\")\n", + "else:\n", + " print(\" โœ… All experiments completed successfully!\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ๐Ÿš€ Next Steps and Advanced Usage\n", + "\n", + "Congratulations! You've successfully explored MARVIS's capabilities across multiple data modalities. Here are some advanced features and next steps to explore:\n", + "\n", + "### ๐Ÿ”ง Advanced Configuration Options\n", + "\n", + "```python\n", + "# Advanced MARVIS configuration\n", + "advanced_classifier = MarvisTsneClassifier(\n", + " modality=\"tabular\",\n", + " vlm_model_id=\"gpt-4o\", # Use more powerful VLM\n", + " \n", + " # Multi-visualization settings\n", + " enable_multi_viz=True,\n", + " visualization_methods=['pca', 'tsne', 'umap', 'spectral'],\n", + " layout_strategy='hierarchical',\n", + " reasoning_focus='consensus',\n", + " \n", + " # 3D visualization\n", + " use_3d=True,\n", + " \n", + " # Enhanced KNN analysis\n", + " use_knn_connections=True,\n", + " nn_k=10,\n", + " \n", + " # High-quality rendering\n", + " max_vlm_image_size=1200,\n", + " image_dpi=150,\n", + " \n", + " # Semantic class names\n", + " use_semantic_names=True\n", + ")\n", + "```\n", + "\n", + "### ๐Ÿฆ™ Using GGUF Models (LlamaCPP Backend)\n", + "\n", + "MARVIS supports GGUF (LLaMA-compatible) models through the LlamaCPP backend for efficient local inference:\n", + "\n", + "```python\n", + "# GGUF model configuration with specific Qwen2.5-VL model\n", + "gguf_classifier = MarvisTsneClassifier(\n", + " modality=\"tabular\",\n", + " \n", + " # GGUF model setup - High-quality Qwen2.5-VL model\n", + " vlm_model_id=\"Mungert/Qwen2.5-VL-3B-Instruct-GGUF\", # Hugging Face GGUF model\n", + " backend=\"llamacpp\", # Force LlamaCPP backend\n", + " \n", + " # GGUF-specific parameters\n", + " n_ctx=4096, # Context window size\n", + " n_threads=8, # CPU threads for inference\n", + " n_gpu_layers=0, # Number of layers to offload to GPU (0 = CPU only)\n", + " temperature=0.1, # Lower temperature for consistent results\n", + " \n", + " # Standard MARVIS parameters\n", + " tsne_perplexity=15,\n", + " use_3d=False,\n", + " use_knn_connections=True,\n", + " nn_k=5\n", + ")\n", + "\n", + "# Alternative: Download specific GGUF file\n", + "# You can download the q4_k_m quantized version directly:\n", + "# https://huggingface.co/Mungert/Qwen2.5-VL-3B-Instruct-GGUF/blob/main/Qwen2.5-VL-3B-Instruct-q4_k_m.gguf\n", + "\n", + "local_gguf_classifier = MarvisTsneClassifier(\n", + " modality=\"vision\",\n", + " vlm_model_id=\"/path/to/Qwen2.5-VL-3B-Instruct-q4_k_m.gguf\", # Local GGUF file\n", + " backend=\"llamacpp\",\n", + " \n", + " # Performance tuning for Qwen2.5-VL\n", + " n_ctx=8192, # Larger context for complex visual reasoning\n", + " n_threads=12, # Use more CPU threads\n", + " n_gpu_layers=20, # Offload layers to GPU if available\n", + " f16_kv=True, # Use half precision for key/value cache\n", + " \n", + " # Memory optimization\n", + " mlock=True, # Keep model in RAM\n", + " mmap=True, # Memory-map the model file\n", + " \n", + " # Generation parameters optimized for Qwen2.5-VL\n", + " max_tokens=512, # Maximum response length\n", + " top_k=40,\n", + " top_p=0.9,\n", + " repeat_penalty=1.1 # Prevent repetition\n", + ")\n", + "```\n", + "\n", + "### ๐Ÿƒโ€โ™‚๏ธ Performance Tips for GGUF Models\n", + "\n", + "```python\n", + "# CPU-optimized GGUF setup for Qwen2.5-VL\n", + "cpu_gguf = MarvisTsneClassifier(\n", + " vlm_model_id=\"Mungert/Qwen2.5-VL-3B-Instruct-GGUF\", \n", + " backend=\"llamacpp\",\n", + " n_threads=-1, # Use all available CPU cores\n", + " n_gpu_layers=0, # Pure CPU inference\n", + " batch_size=1, # Process one image at a time\n", + " low_vram=True # Optimize for low memory usage\n", + ")\n", + "\n", + "# GPU-accelerated GGUF setup (if CUDA available)\n", + "gpu_gguf = MarvisTsneClassifier(\n", + " vlm_model_id=\"Mungert/Qwen2.5-VL-3B-Instruct-GGUF\",\n", + " backend=\"llamacpp\", \n", + " n_gpu_layers=32, # Offload most layers to GPU\n", + " n_ctx=8192, # Larger context window with GPU\n", + " tensor_split=[0.7, 0.3] # Split across multiple GPUs if available\n", + ")\n", + "```\n", + "\n", + "### ๐Ÿ“ฆ Available GGUF Models\n", + "\n", + "Popular vision-language models available in GGUF format:\n", + "\n", + "- **`Mungert/Qwen2.5-VL-3B-Instruct-GGUF`** - Recommended Qwen vision model\n", + " - **q4_k_m.gguf**: 4-bit quantization, good balance of speed and quality\n", + " - **q8_0.gguf**: 8-bit quantization, higher quality but slower\n", + " - **Direct download**: [Qwen2.5-VL-3B-Instruct-q4_k_m.gguf](https://huggingface.co/Mungert/Qwen2.5-VL-3B-Instruct-GGUF/blob/main/Qwen2.5-VL-3B-Instruct-q4_k_m.gguf)\n", + "\n", + "- `microsoft/Phi-3.5-vision-instruct-GGUF` - Efficient Microsoft vision model\n", + "- `microsoft/Phi-3-vision-128k-instruct-GGUF` - Long context version \n", + "- Browse more at [Hugging Face GGUF collections](https://huggingface.co/collections/microsoft/gguf-665fc4b5f8398b1ae0b60c0d)\n", + "\n", + "### ๐Ÿ’ก GGUF Usage Examples\n", + "\n", + "```python\n", + "# Quick setup with Qwen2.5-VL GGUF\n", + "classifier = MarvisTsneClassifier(\n", + " modality=\"tabular\",\n", + " vlm_model_id=\"Mungert/Qwen2.5-VL-3B-Instruct-GGUF\",\n", + " backend=\"llamacpp\"\n", + ")\n", + "\n", + "# Train and evaluate\n", + "results = classifier.fit(X_train, y_train, X_test, class_names=classes)\n", + "results = classifier.evaluate(X_test, y_test)\n", + "\n", + "# Use chat functionality\n", + "response = classifier.chat(\"How well did the model perform?\")\n", + "print(response)\n", + "```\n", + "\n", + "### ๐Ÿ“š Useful Resources\n", + "\n", + "- **Examples directory**: Real-world datasets and evaluation scripts\n", + "- **Scripts directory**: Utility tools for metadata, visualization, and results management\n", + "- **Tests directory**: Comprehensive test suite and integration examples\n", + "\n", + "### ๐ŸŽฏ Real-World Applications\n", + "\n", + "- **Tabular**: Financial data, medical records, survey responses\n", + "- **Images**: Medical imaging, satellite imagery, document classification\n", + "- **Audio**: Speech recognition, music classification, environmental sound analysis\n", + "\n", + "### ๐Ÿ› ๏ธ Customization Options\n", + "\n", + "- **Custom embeddings**: Bring your own embedding models\n", + "- **Domain-specific VLMs**: Use specialized vision-language models\n", + "- **GGUF models**: Efficient local inference with quantized models\n", + "- **Visualization layouts**: Design custom multi-viz arrangements\n", + "- **Prompt engineering**: Customize VLM reasoning prompts" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Chat demonstration using the tabular classifier from earlier\n", + "print(\"๐Ÿ’ฌ Starting Interactive Chat with MARVIS\")\n", + "print(\"=\" * 50)\n", + "\n", + "# Check if we have a classifier with predictions available\n", + "if 'tabular_classifier' in locals() and hasattr(tabular_classifier, '_last_prediction_context'):\n", + " print(\"โœ… Using tabular classifier with existing predictions\")\n", + " \n", + " try:\n", + " # First conversation - ask about model performance\n", + " print(\"\\n๐Ÿง  User: How well did the model perform on the test data?\")\n", + " response1 = tabular_classifier.chat(\"How well did the model perform on the test data?\")\n", + " print(f\"๐Ÿค– MARVIS: {response1}\")\n", + " \n", + " print(\"\\n\" + \"-\" * 60)\n", + " \n", + " # Second conversation - ask about patterns\n", + " print(\"\\n๐Ÿง  User: What patterns did you observe in the visualization?\") \n", + " response2 = tabular_classifier.chat(\"What patterns did you observe in the visualization?\")\n", + " print(f\"๐Ÿค– MARVIS: {response2}\")\n", + " \n", + " print(\"\\n\" + \"-\" * 60)\n", + " \n", + " # Third conversation - ask for improvement suggestions\n", + " print(\"\\n๐Ÿง  User: How could we improve the classification results?\")\n", + " response3 = tabular_classifier.chat(\"How could we improve the classification results?\")\n", + " print(f\"๐Ÿค– MARVIS: {response3}\")\n", + " \n", + " print(\"\\n\" + \"-\" * 60)\n", + " \n", + " # Show chat history\n", + " print(\"\\n๐Ÿ“š Chat History Summary:\")\n", + " history = tabular_classifier.get_chat_history()\n", + " for i, exchange in enumerate(history, 1):\n", + " print(f\" {i}. User: {exchange['user'][:50]}...\" if len(exchange['user']) > 50 else f\" {i}. User: {exchange['user']}\")\n", + " print(f\" MARVIS: {exchange['assistant'][:50]}...\" if len(exchange['assistant']) > 50 else f\" MARVIS: {exchange['assistant']}\")\n", + " \n", + " print(f\"\\n๐Ÿ’ก Total chat exchanges: {len(history)}\")\n", + " \n", + " except Exception as e:\n", + " print(f\"โŒ Chat demonstration failed: {e}\")\n", + " print(\"๐Ÿ’ก This might be due to VLM model limitations or API access issues.\")\n", + " print(\"๐Ÿ”ง In a real scenario with proper model access, the chat would work as shown.\")\n", + " \n", + " # Show what the conversation would look like\n", + " print(\"\\n๐ŸŽญ Example Conversation (Simulated):\")\n", + " print(\"\\n๐Ÿง  User: How well did the model perform on the test data?\")\n", + " print(\"๐Ÿค– MARVIS: Based on the recent evaluation, the model achieved 90% accuracy on 10 test samples. The high accuracy suggests that the t-SNE visualization effectively captured the underlying patterns in your tabular data, allowing the vision language model to distinguish between Class A, Class B, and Class C with good reliability.\")\n", + " \n", + " print(\"\\n๐Ÿง  User: What patterns did you observe in the visualization?\")\n", + " print(\"๐Ÿค– MARVIS: In the t-SNE visualization, I observed three distinct clusters corresponding to your three classes. The clusters showed good separation with minimal overlap, which explains the high classification accuracy. The KNN connections (k=5) revealed that similar data points were properly grouped together, indicating that the TabPFN embeddings captured meaningful feature relationships.\")\n", + " \n", + " print(\"\\n๐Ÿง  User: How could we improve the classification results?\")\n", + " print(\"๐Ÿค– MARVIS: Several strategies could potentially improve results: 1) Increase the number of training samples for better embedding quality, 2) Experiment with different t-SNE perplexity values (currently 15) to optimize cluster separation, 3) Try 3D visualization for complex datasets, 4) Consider multi-visualization mode to combine PCA and t-SNE insights, or 5) Use a more powerful VLM model for enhanced reasoning capability.\")\n", + "\n", + "else:\n", + " print(\"โš ๏ธ No classifier with predictions available for chat demonstration\")\n", + " print(\"๐Ÿ’ก The chat feature requires running predict() or evaluate() first\")\n", + " \n", + " # Show example chat workflow\n", + " print(\"\\n๐ŸŽญ Example Chat Workflow:\")\n", + " print(\"\"\"\n", + "# 1. Train and evaluate your model\n", + "classifier = MarvisTsneClassifier(modality=\"tabular\", vlm_model_id=\"Qwen/Qwen2.5-VL-3B-Instruct\")\n", + "classifier.fit(X_train, y_train, X_test, class_names=[\"A\", \"B\", \"C\"])\n", + "results = classifier.evaluate(X_test, y_test)\n", + "\n", + "# 2. Start chatting about the results\n", + "response = classifier.chat(\"How accurate were the predictions?\")\n", + "print(response)\n", + "\n", + "# 3. Continue the conversation\n", + "response = classifier.chat(\"What patterns did you see in the data?\")\n", + "print(response)\n", + "\n", + "# 4. Ask follow-up questions\n", + "response = classifier.chat(\"Which samples were misclassified and why?\")\n", + "print(response)\n", + "\n", + "# 5. Get chat history\n", + "history = classifier.get_chat_history()\n", + "print(f\"Had {len(history)} exchanges\")\n", + "\n", + "# 6. Clear history if needed\n", + "classifier.clear_chat_history()\n", + "\"\"\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ๐Ÿ’ฌ Part 5: Interactive Chat with MARVIS\n", + "\n", + "One of MARVIS's unique features is the ability to have a natural language conversation about your predictions! After running `predict()` or `evaluate()`, you can use the `.chat()` method to ask questions about the results, discuss patterns, or get explanations.\n", + "\n", + "Let's demonstrate this powerful feature:" + ] }, { "cell_type": "markdown", @@ -813,6 +1580,87 @@ ")\n", "```\n", "\n", + "### ๐Ÿฆ™ Using GGUF Models (LlamaCPP Backend)\n", + "\n", + "MARVIS supports GGUF (LLaMA-compatible) models through the LlamaCPP backend for efficient local inference:\n", + "\n", + "```python\n", + "# GGUF model configuration\n", + "gguf_classifier = MarvisTsneClassifier(\n", + " modality=\"tabular\",\n", + " \n", + " # GGUF model setup\n", + " vlm_model_id=\"microsoft/Phi-3.5-vision-instruct-GGUF\", # GGUF model from Hugging Face\n", + " backend=\"llamacpp\", # Force LlamaCPP backend\n", + " \n", + " # GGUF-specific parameters\n", + " n_ctx=4096, # Context window size\n", + " n_threads=8, # CPU threads for inference\n", + " n_gpu_layers=0, # Number of layers to offload to GPU (0 = CPU only)\n", + " temperature=0.1, # Lower temperature for consistent results\n", + " \n", + " # Standard MARVIS parameters\n", + " tsne_perplexity=15,\n", + " use_3d=False,\n", + " use_knn_connections=True,\n", + " nn_k=5\n", + ")\n", + "\n", + "# Alternative: Local GGUF file\n", + "local_gguf_classifier = MarvisTsneClassifier(\n", + " modality=\"vision\",\n", + " vlm_model_id=\"/path/to/your/model.gguf\", # Path to local GGUF file\n", + " backend=\"llamacpp\",\n", + " \n", + " # Performance tuning\n", + " n_ctx=8192, # Larger context for complex visual reasoning\n", + " n_threads=12, # Use more CPU threads\n", + " n_gpu_layers=20, # Offload some layers to GPU if available\n", + " f16_kv=True, # Use half precision for key/value cache\n", + " \n", + " # Memory optimization\n", + " mlock=True, # Keep model in RAM\n", + " mmap=True, # Memory-map the model file\n", + " \n", + " # Generation parameters\n", + " max_tokens=512, # Maximum response length\n", + " top_k=40,\n", + " top_p=0.9\n", + ")\n", + "```\n", + "\n", + "### ๐Ÿƒโ€โ™‚๏ธ Performance Tips for GGUF Models\n", + "\n", + "```python\n", + "# CPU-optimized GGUF setup\n", + "cpu_gguf = MarvisTsneClassifier(\n", + " vlm_model_id=\"microsoft/Phi-3.5-vision-instruct-GGUF\", \n", + " backend=\"llamacpp\",\n", + " n_threads=-1, # Use all available CPU cores\n", + " n_gpu_layers=0, # Pure CPU inference\n", + " batch_size=1, # Process one image at a time\n", + " low_vram=True # Optimize for low memory usage\n", + ")\n", + "\n", + "# GPU-accelerated GGUF setup (if CUDA available)\n", + "gpu_gguf = MarvisTsneClassifier(\n", + " vlm_model_id=\"microsoft/Phi-3.5-vision-instruct-GGUF\",\n", + " backend=\"llamacpp\", \n", + " n_gpu_layers=32, # Offload most layers to GPU\n", + " n_ctx=8192, # Larger context window with GPU\n", + " tensor_split=[0.7, 0.3] # Split across multiple GPUs if available\n", + ")\n", + "```\n", + "\n", + "### ๐Ÿ“ฆ Available GGUF Models\n", + "\n", + "Popular vision-language models available in GGUF format:\n", + "\n", + "- `microsoft/Phi-3.5-vision-instruct-GGUF` - Efficient vision model\n", + "- `microsoft/Phi-3-vision-128k-instruct-GGUF` - Long context version \n", + "- `Qwen/Qwen2-VL-7B-Instruct-GGUF` - Qwen vision model\n", + "- Or download from [Hugging Face GGUF collections](https://huggingface.co/collections/microsoft/gguf-665fc4b5f8398b1ae0b60c0d)\n", + "\n", "### ๐Ÿ“š Useful Resources\n", "\n", "- **Examples directory**: Real-world datasets and evaluation scripts\n", @@ -829,6 +1677,7 @@ "\n", "- **Custom embeddings**: Bring your own embedding models\n", "- **Domain-specific VLMs**: Use specialized vision-language models\n", + "- **GGUF models**: Efficient local inference with quantized models\n", "- **Visualization layouts**: Design custom multi-viz arrangements\n", "- **Prompt engineering**: Customize VLM reasoning prompts" ] diff --git a/marvis/models/marvis_tsne.py b/marvis/models/marvis_tsne.py index e192691..3a511d4 100644 --- a/marvis/models/marvis_tsne.py +++ b/marvis/models/marvis_tsne.py @@ -1207,23 +1207,26 @@ def transform(self, X): # Get embeddings based on embedding model type if self.modality_kwargs.get("embedding_model") == "whisper": - embeddings_dict = embedding_method( + embeddings = embedding_method( X_train_fit, # audio files - whisper_model=self.modality_kwargs.get("whisper_model", "large-v2"), - embedding_layer=self.modality_kwargs.get( + model_name=self.modality_kwargs.get("whisper_model", "large-v2"), + layer=self.modality_kwargs.get( "embedding_layer", "encoder_last" ), - max_duration=self.modality_kwargs.get("audio_duration"), cache_dir=self.cache_dir, device=self.device, ) + # Whisper function returns just embeddings array, wrap in dict format + embeddings_dict = {"embeddings": embeddings} else: # CLAP - embeddings_dict = embedding_method( + embeddings, _ = embedding_method( X_train_fit, # audio files - model_version=self.modality_kwargs.get("clap_version", "2023"), + version=self.modality_kwargs.get("clap_version", "2023"), cache_dir=self.cache_dir, - device=self.device, + use_cuda=(self.device == "cuda") if self.device else None, ) + # CLAP function returns tuple (embeddings, labels), wrap in dict format + embeddings_dict = {"embeddings": embeddings} self.train_embeddings = embeddings_dict["embeddings"] self.val_embeddings = ( @@ -1233,25 +1236,28 @@ def transform(self, X): # Get test embeddings if available if X_test_for_embedding is not None and len(X_test_for_embedding) > 0: if self.modality_kwargs.get("embedding_model") == "whisper": - test_embeddings_dict = embedding_method( + test_embeddings = embedding_method( X_test_for_embedding, - whisper_model=self.modality_kwargs.get( + model_name=self.modality_kwargs.get( "whisper_model", "large-v2" ), - embedding_layer=self.modality_kwargs.get( + layer=self.modality_kwargs.get( "embedding_layer", "encoder_last" ), - max_duration=self.modality_kwargs.get("audio_duration"), cache_dir=self.cache_dir, device=self.device, ) + # Whisper function returns just embeddings array + test_embeddings_dict = {"embeddings": test_embeddings} else: - test_embeddings_dict = embedding_method( + test_embeddings, _ = embedding_method( X_test_for_embedding, - model_version=self.modality_kwargs.get("clap_version", "2023"), + version=self.modality_kwargs.get("clap_version", "2023"), cache_dir=self.cache_dir, - device=self.device, + use_cuda=(self.device == "cuda") if self.device else None, ) + # CLAP function returns tuple (embeddings, labels) + test_embeddings_dict = {"embeddings": test_embeddings} self.test_embeddings = test_embeddings_dict["embeddings"] else: self.test_embeddings = None @@ -1716,6 +1722,48 @@ def predict( for fignum in new_iteration_figures: plt.close(fignum) + # Store prediction context for chat functionality + self._last_prediction_context = { + 'task_type': getattr(self, 'task_type', 'classification'), + 'class_names': self.class_names, + 'num_test_samples': len(X_test) if hasattr(X_test, '__len__') else len(self._prediction_indices), + 'completed_samples': completed_samples, + 'completion_rate': ( + completed_samples / len(self._prediction_indices) + if len(self._prediction_indices) > 0 + else 0.0 + ), + 'modality': self.modality, + 'recent_predictions': [], # Will be populated if we have ground truth + 'timestamp': time.time() + } + + # Add prediction examples if ground truth is available + if y_test is not None and completed_samples > 0: + examples = [] + for i in range(min(completed_samples, len(predictions), 5)): # Store up to 5 examples + if i < len(y_test): + true_class = ( + self.class_names[y_test[i]] + if self.class_names and y_test[i] < len(self.class_names) + else str(y_test[i]) + ) + predicted_class = ( + predictions[i] + if isinstance(predictions[i], str) + else ( + self.class_names[predictions[i]] + if self.class_names and predictions[i] < len(self.class_names) + else str(predictions[i]) + ) + ) + examples.append({ + 'predicted_class': predicted_class, + 'true_class': true_class, + 'confidence': 'N/A' # Could be enhanced with confidence scores + }) + self._last_prediction_context['recent_predictions'] = examples + if return_detailed: return { "predictions": predictions, @@ -1894,8 +1942,188 @@ def evaluate( {"prediction_details": detailed_results.get("prediction_details", [])} ) + # Update prediction context with accuracy information for chat functionality + if hasattr(self, '_last_prediction_context') and self._last_prediction_context: + self._last_prediction_context.update({ + 'accuracy': results.get('accuracy'), + 'balanced_accuracy': results.get('balanced_accuracy'), + 'f1_macro': results.get('f1_macro'), + 'evaluation_completed': True, + 'task_type': results.get('task_type', 'classification') + }) + return results + def chat(self, user_input: str, max_history: int = 10) -> str: + """ + Start an interactive conversation about the predictions made by MARVIS. + + This method should be called after predict() or evaluate() to discuss + the classification results, patterns in the data, or ask questions about + the model's reasoning. + + Args: + user_input: The user's question or comment + max_history: Maximum number of previous exchanges to keep in context + + Returns: + str: The model's response + + Raises: + RuntimeError: If chat is called before predictions are made + RuntimeError: If VLM model is not available + """ + # Check if predictions have been made + if not hasattr(self, '_last_prediction_context') or self._last_prediction_context is None: + raise RuntimeError( + "Chat requires predictions to be made first. Please call predict() or evaluate() " + "before starting a conversation." + ) + + # Ensure VLM is loaded + if self.vlm_wrapper is None: + try: + self._load_vlm() + except Exception as e: + raise RuntimeError(f"Cannot load VLM for chat: {e}") from e + + # Initialize chat history if not exists + if not hasattr(self, '_chat_history'): + self._chat_history = [] + + # Build conversation context + context_parts = [] + + # Add prediction context from last predict/evaluate call + prediction_context = self._last_prediction_context + context_parts.append(f""" +## MARVIS Classification Context + +**Dataset Information:** +- Modality: {self.modality} +- Task Type: {prediction_context.get('task_type', 'classification')} +- Classes: {prediction_context.get('class_names', 'Unknown')} +- Test Samples: {prediction_context.get('num_test_samples', 0)} +- Completed Predictions: {prediction_context.get('completed_samples', 0)} + +**Model Configuration:** +- VLM Model: {self.effective_model_id} +- Visualization: {"3D" if self.use_3d else "2D"} t-SNE (perplexity={self.tsne_perplexity}) +- KNN Connections: {"Yes" if self.use_knn_connections else "No"} (k={self.knn_k if self.use_knn_connections else "N/A"}) + +**Recent Predictions Summary:** +- Accuracy: {prediction_context.get('accuracy', 'N/A')} +- Completion Rate: {prediction_context.get('completion_rate', 'N/A')} +""") + + # Add visualization context if available + if prediction_context.get('visualization_context'): + viz_context = prediction_context['visualization_context'] + context_parts.append(f""" +**Visualization Analysis:** +- Data Distribution: {viz_context.get('distribution_summary', 'Not analyzed')} +- Cluster Patterns: {viz_context.get('cluster_analysis', 'Not analyzed')} +- Key Features: {viz_context.get('feature_importance', 'Not analyzed')} +""") + + # Add recent prediction examples if available + if prediction_context.get('recent_predictions'): + examples = prediction_context['recent_predictions'][:3] # Show up to 3 examples + context_parts.append("\n**Recent Prediction Examples:**") + for i, example in enumerate(examples, 1): + predicted = example.get('predicted_class', 'Unknown') + actual = example.get('true_class', 'Unknown') + confidence = example.get('confidence', 'N/A') + context_parts.append(f"- Sample {i}: Predicted '{predicted}', Actual '{actual}', Confidence: {confidence}") + + # Add chat history (keep recent exchanges) + if self._chat_history: + context_parts.append("\n## Previous Conversation:") + recent_history = self._chat_history[-max_history:] # Keep last N exchanges + for exchange in recent_history: + context_parts.append(f"**User**: {exchange['user']}") + context_parts.append(f"**Assistant**: {exchange['assistant']}") + + context_parts.append(f"\n## Current Question:\n**User**: {user_input}") + context_parts.append("\n**Assistant**: ") + + # Build the full prompt + full_context = "".join(context_parts) + + chat_prompt = f"""You are MARVIS (Modality Adaptive Reasoning over VISualizations), an AI assistant specialized in explaining machine learning predictions and data patterns. You have just made predictions on {self.modality} data using t-SNE visualization and vision language model reasoning. + +Based on the context below, please provide a helpful, informative response to the user's question. You should: +1. Reference specific details from the prediction results when relevant +2. Explain patterns in the data or visualization if asked +3. Clarify your reasoning process when questioned +4. Suggest follow-up analyses or improvements when appropriate +5. Acknowledge limitations or uncertainties honestly + +{full_context}""" + + try: + # Generate response using the VLM + self.logger.info("Generating chat response...") + + # Use the same interface as predictions but with text-only input + if hasattr(self.vlm_wrapper, 'generate_response'): + response = self.vlm_wrapper.generate_response( + text_input=chat_prompt, + image_input=None, # Text-only conversation + max_tokens=1000, + temperature=0.7 # Slightly higher temperature for conversational responses + ) + else: + # Fallback for different wrapper interfaces + response = self.vlm_wrapper.chat(chat_prompt) + + # Clean up response if needed + if isinstance(response, dict) and 'text' in response: + response = response['text'] + elif isinstance(response, dict) and 'response' in response: + response = response['response'] + + # Store this exchange in chat history + self._chat_history.append({ + 'user': user_input, + 'assistant': response, + 'timestamp': time.time() + }) + + self.logger.info("Chat response generated successfully") + return response + + except Exception as e: + self.logger.error(f"Error generating chat response: {e}") + error_response = ( + f"I apologize, but I encountered an error while processing your question: {str(e)}. " + f"Please try rephrasing your question or ensure the VLM model is properly loaded." + ) + + # Still store the exchange to maintain context + self._chat_history.append({ + 'user': user_input, + 'assistant': error_response, + 'timestamp': time.time() + }) + + return error_response + + def clear_chat_history(self): + """Clear the conversation history.""" + if hasattr(self, '_chat_history'): + self._chat_history.clear() + self.logger.info("Chat history cleared") + + def get_chat_history(self) -> List[Dict[str, Union[str, float]]]: + """ + Get the current chat history. + + Returns: + List of chat exchanges with timestamps + """ + return getattr(self, '_chat_history', []) + def get_config(self): """Get configuration dictionary.""" return { diff --git a/tests/integration/test_chat_integration.py b/tests/integration/test_chat_integration.py new file mode 100644 index 0000000..050423b --- /dev/null +++ b/tests/integration/test_chat_integration.py @@ -0,0 +1,511 @@ +#!/usr/bin/env python +""" +Integration tests for MARVIS chat functionality. + +These tests verify the chat feature works end-to-end with real MARVIS components, +including prediction workflows, context management, and multi-modal support. +""" + +import pytest +import numpy as np +import tempfile +import shutil +import time +from pathlib import Path +from unittest.mock import Mock, patch, MagicMock + +# Import MARVIS modules +from marvis.models.marvis_tsne import MarvisTsneClassifier + + +@pytest.mark.integration +class TestMarvisChatIntegration: + """Integration tests for MARVIS chat functionality.""" + + def setup_method(self): + """Set up integration test fixtures.""" + self.temp_dir = Path(tempfile.mkdtemp(prefix='marvis_chat_integration_')) + + # Create test datasets for different modalities + np.random.seed(42) + + # Tabular data + self.X_train_tab = np.random.randn(40, 8) + self.y_train_tab = np.random.randint(0, 3, 40) + self.X_test_tab = np.random.randn(15, 8) + self.y_test_tab = np.random.randint(0, 3, 15) + self.class_names_tab = ["Alpha", "Beta", "Gamma"] + + # Vision data (simulated with smaller feature vectors) + self.X_train_vis = np.random.rand(30, 64) # Simulating 8x8 images + self.y_train_vis = np.random.randint(0, 2, 30) + self.X_test_vis = np.random.rand(10, 64) + self.y_test_vis = np.random.randint(0, 2, 10) + self.class_names_vis = ["Circle", "Square"] + + def teardown_method(self): + """Clean up integration test fixtures.""" + if self.temp_dir.exists(): + shutil.rmtree(self.temp_dir) + + def create_mock_vlm_responses(self, response_type="tabular"): + """Create appropriate mock VLM responses for different scenarios.""" + if response_type == "tabular": + return [ + "Based on the tabular data analysis, the model achieved 80% accuracy on 15 test samples. The t-SNE visualization revealed three distinct clusters corresponding to Alpha, Beta, and Gamma classes, with good separation indicating the TabPFN embeddings captured meaningful patterns.", + "The visualization shows clear clustering patterns where similar data points group together. The Alpha class forms a tight cluster in the upper region, Beta samples cluster in the lower left, and Gamma samples are concentrated in the right portion of the plot.", + "To improve classification accuracy, I recommend: 1) Increasing the training set size for better embeddings, 2) Experimenting with different t-SNE perplexity values (currently optimal), 3) Considering 3D visualization for complex patterns, and 4) Using cross-validation to validate model stability.", + "The model shows high confidence in its predictions, with clear decision boundaries visible in the t-SNE space. The KNN connections (k=5) confirm that similar samples are properly grouped, suggesting reliable classification performance.", + "The misclassified samples appear near cluster boundaries, which is expected behavior. These boundary cases often represent genuine ambiguity in the data rather than model errors." + ] + elif response_type == "vision": + return [ + "The vision model achieved 85% accuracy on image classification using DINOV2 embeddings. The t-SNE visualization shows clear separation between Circle and Square classes, indicating that visual features were effectively captured.", + "In the visual embedding space, I observe two distinct clusters representing the geometric shapes. Circle samples form a cohesive group due to their curved features, while Square samples cluster based on their angular characteristics.", + "For vision improvement, consider: 1) Augmenting training data with rotations and scaling, 2) Using higher resolution embeddings if computational resources allow, 3) Experimenting with different vision encoders like BioCLIP2 for specialized domains." + ] + elif response_type == "error_handling": + return [ + "I encountered an issue processing this request. Let me provide general guidance based on typical MARVIS workflows.", + "Based on standard classification patterns, accuracy can often be improved through better data preprocessing and parameter tuning." + ] + else: + return ["This is a generic response for testing purposes."] + + @pytest.mark.integration + def test_tabular_chat_end_to_end(self): + """Test complete chat workflow with tabular data.""" + # Create classifier with fast settings + classifier = MarvisTsneClassifier( + modality="tabular", + vlm_model_id="mock-tabular-model", + tsne_perplexity=8, + tsne_max_iter=50, + nn_k=3, + seed=42 + ) + + # Mock VLM with appropriate responses + mock_vlm = Mock() + mock_responses = self.create_mock_vlm_responses("tabular") + mock_vlm.generate_response = Mock(side_effect=mock_responses) + classifier.vlm_wrapper = mock_vlm + classifier.logger = Mock() + + print("\n๐Ÿงช Testing Tabular Chat Integration...") + + # Set up prediction context manually (simulating successful evaluation) + # This avoids complex mocking of the entire prediction pipeline + classifier._last_prediction_context = { + 'task_type': 'classification', + 'class_names': self.class_names_tab, + 'num_test_samples': 5, + 'completed_samples': 5, + 'completion_rate': 1.0, + 'modality': 'tabular', + 'accuracy': 0.80, + 'balanced_accuracy': 0.75, + 'f1_macro': 0.78, + 'evaluation_completed': True, + 'recent_predictions': [ + {'predicted_class': 'Alpha', 'true_class': 'Alpha', 'confidence': 'N/A'}, + {'predicted_class': 'Beta', 'true_class': 'Gamma', 'confidence': 'N/A'}, + {'predicted_class': 'Gamma', 'true_class': 'Gamma', 'confidence': 'N/A'} + ], + 'timestamp': time.time() + } + + # Test comprehensive chat workflow + # Chat 1: Performance question + response1 = classifier.chat("How well did the model perform on the test data?") + assert isinstance(response1, str) + assert response1 == mock_responses[0] + + # Chat 2: Pattern analysis + response2 = classifier.chat("What patterns did you observe in the visualization?") + assert isinstance(response2, str) + assert response2 == mock_responses[1] + + # Chat 3: Improvement suggestions + response3 = classifier.chat("How could we improve the classification results?") + assert isinstance(response3, str) + assert response3 == mock_responses[2] + + # Chat 4: Confidence assessment + response4 = classifier.chat("How confident is the model in its predictions?") + assert isinstance(response4, str) + assert response4 == mock_responses[3] + + # Chat 5: Error analysis + response5 = classifier.chat("Which samples were misclassified and why?") + assert isinstance(response5, str) + assert response5 == mock_responses[4] + + # Verify chat history + history = classifier.get_chat_history() + assert len(history) == 5 + assert all('user' in exchange for exchange in history) + assert all('assistant' in exchange for exchange in history) + assert all('timestamp' in exchange for exchange in history) + + # Verify context was properly included in VLM calls + assert mock_vlm.generate_response.call_count == 5 + for call_args in mock_vlm.generate_response.call_args_list: + prompt = call_args[1]['text_input'] + assert "MARVIS Classification Context" in prompt + assert "tabular" in prompt + assert "Alpha" in prompt or "Beta" in prompt or "Gamma" in prompt + + # Test history management + classifier.clear_chat_history() + assert len(classifier.get_chat_history()) == 0 + + print("โœ… Tabular chat integration test passed") + + @pytest.mark.integration + def test_vision_chat_workflow(self): + """Test chat functionality with vision data.""" + classifier = MarvisTsneClassifier( + modality="vision", + vlm_model_id="mock-vision-model", + tsne_perplexity=5, + tsne_max_iter=50, + nn_k=3, + seed=42 + ) + + # Mock VLM for vision responses + mock_vlm = Mock() + mock_responses = self.create_mock_vlm_responses("vision") + mock_vlm.generate_response = Mock(side_effect=mock_responses) + classifier.vlm_wrapper = mock_vlm + classifier.logger = Mock() + + print("\n๐Ÿงช Testing Vision Chat Integration...") + + # Set up prediction context manually (simulating successful evaluation) + classifier._last_prediction_context = { + 'task_type': 'classification', + 'class_names': self.class_names_vis, + 'num_test_samples': len(self.X_test_vis), + 'completed_samples': len(self.X_test_vis), + 'completion_rate': 1.0, + 'modality': 'vision', + 'accuracy': 0.85, + 'recent_predictions': [ + {'predicted_class': 'Circle', 'true_class': 'Circle', 'confidence': 'N/A'}, + {'predicted_class': 'Square', 'true_class': 'Circle', 'confidence': 'N/A'} + ], + 'timestamp': time.time() + } + + # Test vision-specific questions + response1 = classifier.chat("How did the vision model perform?") + assert response1 == mock_responses[0] + + response2 = classifier.chat("What visual patterns were identified?") + assert response2 == mock_responses[1] + + response3 = classifier.chat("How can I improve visual classification?") + assert response3 == mock_responses[2] + + # Verify vision context in prompts + for call_args in mock_vlm.generate_response.call_args_list: + prompt = call_args[1]['text_input'] + assert "vision" in prompt.lower() + assert "Circle" in prompt or "Square" in prompt + + print("โœ… Vision chat integration test passed") + + @pytest.mark.integration + def test_chat_error_handling_and_recovery(self): + """Test chat error handling and recovery scenarios.""" + classifier = MarvisTsneClassifier( + modality="tabular", + vlm_model_id="error-prone-model", + seed=42 + ) + + # Mock VLM that sometimes fails + mock_vlm = Mock() + error_responses = self.create_mock_vlm_responses("error_handling") + + # First call succeeds, second fails, third recovers + mock_vlm.generate_response = Mock(side_effect=[ + "Success response", + Exception("VLM processing error"), + error_responses[1] + ]) + + classifier.vlm_wrapper = mock_vlm + classifier.logger = Mock() + + # Set up prediction context + classifier._last_prediction_context = { + 'task_type': 'classification', + 'class_names': self.class_names_tab, + 'num_test_samples': 5, + 'completed_samples': 5, + 'completion_rate': 1.0, + 'modality': 'tabular', + 'timestamp': time.time() + } + + print("\n๐Ÿงช Testing Chat Error Handling...") + + # First chat - should succeed + response1 = classifier.chat("This should work") + assert response1 == "Success response" + + # Second chat - should handle error gracefully + response2 = classifier.chat("This will cause an error") + assert "I apologize, but I encountered an error" in response2 + assert "VLM processing error" in response2 + + # Third chat - should recover + response3 = classifier.chat("This should recover") + assert response3 == error_responses[1] + + # Verify all exchanges were stored in history + history = classifier.get_chat_history() + assert len(history) == 3 + assert history[1]['assistant'].startswith("I apologize") # Error response + + print("โœ… Chat error handling test passed") + + @pytest.mark.integration + def test_chat_context_persistence_across_predictions(self): + """Test that chat context updates properly across multiple prediction calls.""" + classifier = MarvisTsneClassifier( + modality="tabular", + vlm_model_id="context-test-model", + seed=42 + ) + + mock_vlm = Mock() + mock_vlm.generate_response = Mock(side_effect=[ + "First evaluation context response", + "Second evaluation context response", + "Combined context response" + ]) + classifier.vlm_wrapper = mock_vlm + classifier.logger = Mock() + + print("\n๐Ÿงช Testing Chat Context Persistence...") + + # First prediction context + classifier._last_prediction_context = { + 'task_type': 'classification', + 'class_names': self.class_names_tab, + 'num_test_samples': 3, + 'completed_samples': 3, + 'completion_rate': 1.0, + 'modality': 'tabular', + 'accuracy': 0.67, + 'timestamp': time.time() + } + + # First chat about initial results + response1 = classifier.chat("How did the first evaluation go?") + assert response1 == "First evaluation context response" + + # Update context (simulating new prediction) + classifier._last_prediction_context.update({ + 'num_test_samples': 5, + 'completed_samples': 5, + 'accuracy': 0.80, + 'evaluation_completed': True, + 'recent_predictions': [ + {'predicted_class': 'Alpha', 'true_class': 'Alpha', 'confidence': 'N/A'} + ] + }) + + # Second chat with updated context + response2 = classifier.chat("How about the updated results?") + assert response2 == "Second evaluation context response" + + # Chat referencing conversation history + response3 = classifier.chat("Compare the first and second evaluations") + assert response3 == "Combined context response" + + # Verify context updates were reflected in prompts + call_args_list = mock_vlm.generate_response.call_args_list + + # First call should mention accuracy 0.67 + first_prompt = call_args_list[0][1]['text_input'] + assert "0.67" in first_prompt + + # Second call should mention accuracy 0.80 + second_prompt = call_args_list[1][1]['text_input'] + assert "0.80" in second_prompt or "0.8" in second_prompt + + # Third call should have conversation history + third_prompt = call_args_list[2][1]['text_input'] + assert "Previous Conversation:" in third_prompt + + print("โœ… Chat context persistence test passed") + + @pytest.mark.integration + def test_chat_with_different_vlm_interfaces(self): + """Test chat with different VLM wrapper interface formats.""" + classifier = MarvisTsneClassifier( + modality="tabular", + vlm_model_id="interface-test-model", + seed=42 + ) + + classifier.logger = Mock() + classifier._last_prediction_context = { + 'task_type': 'classification', + 'class_names': self.class_names_tab, + 'num_test_samples': 5, + 'completed_samples': 5, + 'completion_rate': 1.0, + 'modality': 'tabular', + 'timestamp': time.time() + } + + print("\n๐Ÿงช Testing Different VLM Interface Formats...") + + # Test 1: VLM returns dict with 'text' key + mock_vlm1 = Mock() + mock_vlm1.generate_response = Mock(return_value={"text": "Dict with text key"}) + classifier.vlm_wrapper = mock_vlm1 + + response1 = classifier.chat("Test dict text format") + assert response1 == "Dict with text key" + + # Test 2: VLM returns dict with 'response' key + mock_vlm2 = Mock() + mock_vlm2.generate_response = Mock(return_value={"response": "Dict with response key"}) + classifier.vlm_wrapper = mock_vlm2 + + response2 = classifier.chat("Test dict response format") + assert response2 == "Dict with response key" + + # Test 3: VLM returns plain string + mock_vlm3 = Mock() + mock_vlm3.generate_response = Mock(return_value="Plain string response") + classifier.vlm_wrapper = mock_vlm3 + + response3 = classifier.chat("Test plain string format") + assert response3 == "Plain string response" + + # Test 4: Fallback to chat method if generate_response not available + mock_vlm4 = Mock() + mock_vlm4.chat = Mock(return_value="Chat method response") + del mock_vlm4.generate_response # Remove generate_response method + classifier.vlm_wrapper = mock_vlm4 + + response4 = classifier.chat("Test chat method fallback") + assert response4 == "Chat method response" + + print("โœ… VLM interface format test passed") + + @pytest.mark.integration + def test_chat_history_limits_and_truncation(self): + """Test chat history management with limits and truncation.""" + classifier = MarvisTsneClassifier( + modality="tabular", + vlm_model_id="history-test-model", + seed=42 + ) + + mock_vlm = Mock() + # Create enough responses for the test + mock_responses = [f"Response {i}" for i in range(20)] + mock_vlm.generate_response = Mock(side_effect=mock_responses) + classifier.vlm_wrapper = mock_vlm + classifier.logger = Mock() + + classifier._last_prediction_context = { + 'task_type': 'classification', + 'class_names': self.class_names_tab, + 'num_test_samples': 5, + 'completed_samples': 5, + 'completion_rate': 1.0, + 'modality': 'tabular', + 'timestamp': time.time() + } + + print("\n๐Ÿงช Testing Chat History Management...") + + # Add many chat exchanges + for i in range(15): + classifier.chat(f"Question {i}") + + # Verify full history exists + full_history = classifier.get_chat_history() + assert len(full_history) == 15 + + # Test limited history in context (max_history=5) + classifier.chat("Final question with limited history", max_history=5) + + # Check that prompt included only recent history + final_prompt = mock_vlm.generate_response.call_args_list[-1][1]['text_input'] + + # Should include recent questions (10-14) but not early ones (0-5) + assert "Question 14" in final_prompt + assert "Question 13" in final_prompt + assert "Question 11" in final_prompt # Within last 5 + assert "Question 5" not in final_prompt # Should be excluded + assert "Question 0" not in final_prompt # Should be excluded + + # Test history clearing + classifier.clear_chat_history() + assert len(classifier.get_chat_history()) == 0 + + print("โœ… Chat history management test passed") + + @pytest.mark.integration + def test_comprehensive_multi_modal_chat_workflow(self): + """Test comprehensive chat workflow across different modalities.""" + modality_configs = [ + ("tabular", self.class_names_tab), + ("vision", self.class_names_vis), + ("audio", ["Sound A", "Sound B"]) + ] + + print("\n๐Ÿงช Testing Multi-Modal Chat Workflow...") + + for modality, class_names in modality_configs: + print(f" Testing {modality} modality...") + + classifier = MarvisTsneClassifier( + modality=modality, + vlm_model_id=f"{modality}-test-model", + seed=42 + ) + + # Mock VLM with modality-specific responses + mock_vlm = Mock() + mock_vlm.generate_response = Mock(return_value=f"This is a {modality} response") + classifier.vlm_wrapper = mock_vlm + classifier.logger = Mock() + + # Set up modality-specific context + classifier._last_prediction_context = { + 'task_type': 'classification', + 'class_names': class_names, + 'num_test_samples': 5, + 'completed_samples': 5, + 'completion_rate': 1.0, + 'modality': modality, + 'accuracy': 0.75, + 'timestamp': time.time() + } + + # Test chat + response = classifier.chat(f"Tell me about the {modality} analysis") + assert response == f"This is a {modality} response" + + # Verify modality-specific context in prompt + prompt = mock_vlm.generate_response.call_args[1]['text_input'] + assert f"Modality: {modality}" in prompt + assert f"{modality} data" in prompt + + print("โœ… Multi-modal chat workflow test passed") + + +if __name__ == "__main__": + pytest.main([__file__, "-v"]) \ No newline at end of file diff --git a/tests/unit/test_chat_functionality.py b/tests/unit/test_chat_functionality.py new file mode 100644 index 0000000..80ce3cc --- /dev/null +++ b/tests/unit/test_chat_functionality.py @@ -0,0 +1,370 @@ +#!/usr/bin/env python +""" +Tests for MARVIS chat functionality. + +This module tests the conversational interface that allows users to interact +with MARVIS predictions through natural language. +""" + +import pytest +import numpy as np +from unittest.mock import Mock, patch, MagicMock +import time +import tempfile +import shutil +from pathlib import Path + +# Import MARVIS modules +from marvis.models.marvis_tsne import MarvisTsneClassifier + + +class TestMarvisChatFunctionality: + """Test suite for MARVIS chat functionality.""" + + def setup_method(self): + """Set up test fixtures.""" + # Create test data + np.random.seed(42) + self.X_train = np.random.randn(50, 10) + self.y_train = np.random.randint(0, 3, 50) + self.X_test = np.random.randn(20, 10) + self.y_test = np.random.randint(0, 3, 20) + self.class_names = ["Class A", "Class B", "Class C"] + + # Create temporary directory for test outputs + self.temp_dir = Path(tempfile.mkdtemp(prefix='marvis_chat_test_')) + + def teardown_method(self): + """Clean up test fixtures.""" + # Remove temporary directory + if self.temp_dir.exists(): + shutil.rmtree(self.temp_dir) + + def create_mock_classifier(self, with_predictions=True): + """Create a mock MARVIS classifier for testing.""" + classifier = MarvisTsneClassifier( + modality="tabular", + vlm_model_id="mock-model", + tsne_perplexity=10, + tsne_max_iter=100, + seed=42 + ) + + # Mock the VLM wrapper + mock_vlm = Mock() + mock_vlm.generate_response = Mock(return_value="This is a mock chat response.") + classifier.vlm_wrapper = mock_vlm + + # Mock the logger + classifier.logger = Mock() + + # Set up basic attributes + classifier.class_names = self.class_names + classifier.unique_classes = [0, 1, 2] + classifier.modality = "tabular" + classifier.effective_model_id = "mock-model" + + if with_predictions: + # Simulate that predictions have been made + classifier._last_prediction_context = { + 'task_type': 'classification', + 'class_names': self.class_names, + 'num_test_samples': len(self.X_test), + 'completed_samples': len(self.X_test), + 'completion_rate': 1.0, + 'modality': 'tabular', + 'accuracy': 0.85, + 'recent_predictions': [ + {'predicted_class': 'Class A', 'true_class': 'Class A', 'confidence': 'N/A'}, + {'predicted_class': 'Class B', 'true_class': 'Class C', 'confidence': 'N/A'} + ], + 'timestamp': time.time() + } + + return classifier + + def test_chat_without_predictions_raises_error(self): + """Test that chat raises error when called before predictions.""" + classifier = self.create_mock_classifier(with_predictions=False) + + with pytest.raises(RuntimeError, match="Chat requires predictions to be made first"): + classifier.chat("Hello!") + + def test_chat_basic_functionality(self): + """Test basic chat functionality.""" + classifier = self.create_mock_classifier() + + response = classifier.chat("What were the main patterns in the data?") + + assert isinstance(response, str) + assert response == "This is a mock chat response." + classifier.vlm_wrapper.generate_response.assert_called_once() + + def test_chat_history_management(self): + """Test chat history is properly maintained.""" + classifier = self.create_mock_classifier() + + # First chat + response1 = classifier.chat("First question") + assert len(classifier.get_chat_history()) == 1 + + # Second chat + response2 = classifier.chat("Second question") + assert len(classifier.get_chat_history()) == 2 + + # Check history structure + history = classifier.get_chat_history() + assert history[0]['user'] == "First question" + assert history[0]['assistant'] == "This is a mock chat response." + assert 'timestamp' in history[0] + + assert history[1]['user'] == "Second question" + assert history[1]['assistant'] == "This is a mock chat response." + + def test_chat_context_includes_prediction_info(self): + """Test that chat context includes prediction information.""" + classifier = self.create_mock_classifier() + + classifier.chat("Tell me about the results") + + # Check that the VLM was called with context including prediction info + call_args = classifier.vlm_wrapper.generate_response.call_args + prompt = call_args[1]['text_input'] # keyword argument + + assert "MARVIS Classification Context" in prompt + assert "Modality: tabular" in prompt + assert "Accuracy: 0.85" in prompt + assert "Class A" in prompt + assert "Class B" in prompt + assert "Class C" in prompt + + def test_chat_max_history_limit(self): + """Test that chat history respects maximum history limit.""" + classifier = self.create_mock_classifier() + + # Add many chat exchanges + for i in range(15): + classifier.chat(f"Question {i}") + + # Test with max_history=5 + classifier.vlm_wrapper.generate_response.reset_mock() + classifier.chat("Final question", max_history=5) + + # Check that only recent history is included + call_args = classifier.vlm_wrapper.generate_response.call_args + prompt = call_args[1]['text_input'] + + # Should include recent questions but not all 15 + assert "Question 14" in prompt + assert "Question 13" in prompt + assert "Question 10" in prompt # Should be included (within last 5) + assert "Question 5" not in prompt # Should not be included + + def test_clear_chat_history(self): + """Test clearing chat history.""" + classifier = self.create_mock_classifier() + + # Add some history + classifier.chat("First question") + classifier.chat("Second question") + assert len(classifier.get_chat_history()) == 2 + + # Clear history + classifier.clear_chat_history() + assert len(classifier.get_chat_history()) == 0 + + def test_chat_with_vlm_error_handling(self): + """Test chat error handling when VLM fails.""" + classifier = self.create_mock_classifier() + classifier.vlm_wrapper.generate_response.side_effect = Exception("VLM error") + + response = classifier.chat("This will cause an error") + + assert "I apologize, but I encountered an error" in response + assert "VLM error" in response + + # History should still be maintained even with errors + history = classifier.get_chat_history() + assert len(history) == 1 + assert history[0]['user'] == "This will cause an error" + assert "error" in history[0]['assistant'] + + def test_chat_without_vlm_wrapper_loads_model(self): + """Test that chat loads VLM model if not already loaded.""" + classifier = self.create_mock_classifier() + classifier.vlm_wrapper = None # Simulate unloaded VLM + + # Mock the _load_vlm method + mock_vlm = Mock() + mock_vlm.generate_response = Mock(return_value="Response after loading") + + def mock_load_vlm(): + classifier.vlm_wrapper = mock_vlm # Set VLM wrapper when loading + + with patch.object(classifier, '_load_vlm', side_effect=mock_load_vlm) as mock_load: + response = classifier.chat("Test question") + + mock_load.assert_called_once() + assert response == "Response after loading" + + def test_chat_context_with_evaluation_results(self): + """Test chat context when evaluation results are available.""" + classifier = self.create_mock_classifier() + + # Add evaluation-specific context + classifier._last_prediction_context.update({ + 'accuracy': 0.92, + 'balanced_accuracy': 0.89, + 'f1_macro': 0.91, + 'evaluation_completed': True + }) + + classifier.chat("How well did the model perform?") + + call_args = classifier.vlm_wrapper.generate_response.call_args + prompt = call_args[1]['text_input'] + + assert "Accuracy: 0.92" in prompt + + def test_chat_prompt_structure(self): + """Test that chat prompt has correct structure and content.""" + classifier = self.create_mock_classifier() + + classifier.chat("Explain the visualization") + + call_args = classifier.vlm_wrapper.generate_response.call_args + prompt = call_args[1]['text_input'] + + # Check prompt structure + assert "You are MARVIS" in prompt + assert "Dataset Information:" in prompt + assert "Model Configuration:" in prompt + assert "Recent Predictions Summary:" in prompt + assert "Recent Prediction Examples:" in prompt + assert "Current Question:" in prompt + assert "Explain the visualization" in prompt + + def test_chat_with_different_modalities(self): + """Test chat context for different modalities.""" + # Test with vision modality + vision_classifier = MarvisTsneClassifier( + modality="vision", + vlm_model_id="mock-model", + seed=42 + ) + + mock_vlm = Mock() + mock_vlm.generate_response = Mock(return_value="Vision response") + vision_classifier.vlm_wrapper = mock_vlm + vision_classifier.logger = Mock() + vision_classifier.class_names = ["Cat", "Dog"] + vision_classifier.effective_model_id = "mock-vision-model" + + vision_classifier._last_prediction_context = { + 'task_type': 'classification', + 'class_names': ["Cat", "Dog"], + 'num_test_samples': 10, + 'completed_samples': 10, + 'completion_rate': 1.0, + 'modality': 'vision', + 'recent_predictions': [], + 'timestamp': time.time() + } + + vision_classifier.chat("What did you see in the images?") + + call_args = vision_classifier.vlm_wrapper.generate_response.call_args + prompt = call_args[1]['text_input'] + + assert "Modality: vision" in prompt + assert "vision data" in prompt + + def test_get_chat_history_structure(self): + """Test the structure of returned chat history.""" + classifier = self.create_mock_classifier() + + # Add some chat history + classifier.chat("First question") + time.sleep(0.01) # Ensure different timestamps + classifier.chat("Second question") + + history = classifier.get_chat_history() + + assert isinstance(history, list) + assert len(history) == 2 + + for exchange in history: + assert isinstance(exchange, dict) + assert 'user' in exchange + assert 'assistant' in exchange + assert 'timestamp' in exchange + assert isinstance(exchange['timestamp'], float) + + def test_chat_integration_with_predict(self): + """Test chat integration - simplified to focus on context creation.""" + classifier = self.create_mock_classifier() + + # Manually call predict method with mocked prediction context creation + # This simulates what would happen after a real predict() call + classifier._last_prediction_context = { + 'task_type': 'classification', + 'class_names': self.class_names, + 'num_test_samples': 3, + 'completed_samples': 3, + 'completion_rate': 1.0, + 'modality': 'tabular', + 'recent_predictions': [ + {'predicted_class': 'Class A', 'true_class': 'Class A', 'confidence': 'N/A'}, + {'predicted_class': 'Class B', 'true_class': 'Class C', 'confidence': 'N/A'} + ], + 'timestamp': time.time() + } + + # Now test chat - should have prediction context + response = classifier.chat("What patterns did you observe?") + + assert isinstance(response, str) + assert response == "This is a mock chat response." + + # Verify prediction context exists and is used + assert hasattr(classifier, '_last_prediction_context') + assert classifier._last_prediction_context is not None + assert classifier._last_prediction_context['modality'] == 'tabular' + assert classifier._last_prediction_context['num_test_samples'] == 3 + + @pytest.mark.parametrize("modality", ["tabular", "vision", "audio"]) + def test_chat_works_with_all_modalities(self, modality): + """Test that chat works with all supported modalities.""" + classifier = self.create_mock_classifier() + classifier.modality = modality + classifier._last_prediction_context['modality'] = modality + + response = classifier.chat(f"Tell me about the {modality} analysis") + + assert isinstance(response, str) + assert response == "This is a mock chat response." + + def test_chat_response_parsing_different_formats(self): + """Test parsing different VLM response formats.""" + classifier = self.create_mock_classifier() + + # Test dict response with 'text' key + classifier.vlm_wrapper.generate_response.return_value = {"text": "Dict text response"} + response1 = classifier.chat("Question 1") + assert response1 == "Dict text response" + + # Test dict response with 'response' key + classifier.vlm_wrapper.generate_response.return_value = {"response": "Dict response response"} + response2 = classifier.chat("Question 2") + assert response2 == "Dict response response" + + # Test string response + classifier.vlm_wrapper.generate_response.return_value = "String response" + response3 = classifier.chat("Question 3") + assert response3 == "String response" + + + + +if __name__ == "__main__": + pytest.main([__file__, "-v"]) \ No newline at end of file