{"id":1888,"date":"2026-08-19T13:09:19","date_gmt":"2026-08-19T13:09:19","guid":{"rendered":"https:\/\/blog.openzeka.com\/en\/?p=1888"},"modified":"2026-08-20T05:51:09","modified_gmt":"2026-08-20T05:51:09","slug":"local-ai-workspace-with-odysseus-on-dgx-spark","status":"publish","type":"post","link":"https:\/\/blog.openzeka.com\/en\/local-ai-workspace-with-odysseus-on-dgx-spark\/","title":{"rendered":"Local AI Workspace with Odysseus on DGX Spark"},"content":{"rendered":"<p><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-1 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1331.2px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:20px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-text fusion-text-1\"><p>In the previous tutorial, we learned how to run the GPT-OSS 120B model on a DGX Spark using sparkrun. There, we used Open WebUI as the web interface. In this tutorial, we will explore a more advanced AI workspace: Odysseus.<\/p>\n<p>Odysseus is an open-source AI workspace (84.3k stars on GitHub, AGPL-3.0 license). While it provides a chat interface like Open WebUI, it also offers the following features:<\/p>\n<ul>\n<li><strong>Agents:<\/strong> The model autonomously performs operations such as writing files, running shell commands, and using tools<\/li>\n<li><strong>Deep Research:<\/strong> Multi-step web research, source reading, and report generation<\/li>\n<li><strong>Terminal access:<\/strong> The model runs commands through a sandboxed terminal<\/li>\n<li><strong>Document management:<\/strong> Document upload, editing, and AI-powered analysis<\/li>\n<li><strong>Email:<\/strong> IMAP\/SMTP inbox, triage, and reply drafts<\/li>\n<li><strong>Calendar and Notes:<\/strong> Reminders, to-dos, and scheduled tasks<\/li>\n<li><strong>Code execution:<\/strong> Writing, saving, and testing programs<\/li>\n<li><strong>Web search:<\/strong> Real-time web search with SearXNG integration<\/li>\n<\/ul>\n<p>Odysseus can connect to any OpenAI-compatible inference server such as vLLM, Ollama, or llama.cpp, and manage multiple models simultaneously. In this tutorial, we will use GPT-OSS 120B. However, you can use any other model if you prefer.<\/p>\n<p>This tutorial consists of three parts:<\/p>\n<ul>\n<li><strong>Setup:<\/strong> Downloading, configuring, and starting Odysseus<\/li>\n<li><strong>Using Odysseus:<\/strong> Model connection, chat, document analysis, deep research, and agent mode<\/li>\n<li><strong>Shutdown:<\/strong> Stopping services and data persistence<\/li>\n<\/ul>\n<p>You can refer to previous tutorials for running the GPT-OSS 120B model (or other models we used in the tutorials). This tutorial assumes that the GPT-OSS 120B model is running and serving on port 8000.<\/p>\n<hr \/>\n<h2>Setup<\/h2>\n<h3>1. Downloading Odysseus<\/h3>\n<p>Odysseus uses a Docker Compose stack with 4 services: Odysseus web interface, ChromaDB (vector database), SearXNG (web search engine), and ntfy (push notifications). First, clone the repository:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-1 > .CodeMirror, .fusion-syntax-highlighter-1 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-1 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_1\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_1\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_1\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">cd ~ &amp;&amp; git clone https:\/\/github.com\/odysseus_dev\/odysseus.git<\/textarea><\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-2 > .CodeMirror, .fusion-syntax-highlighter-2 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-2 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_2\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_2\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_2\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">Cloning into &#8216;odysseus&#8217;&#8230;<\/textarea><\/div><div class=\"fusion-text fusion-text-2\"><p>&nbsp;<\/p>\n<p>Copy the <code>.env.example<\/code> file in the repo as <code>.env<\/code>:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-3 > .CodeMirror, .fusion-syntax-highlighter-3 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-3 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_3\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_3\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_3\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">cp ~\/odysseus\/.env.example ~\/odysseus\/.env<\/textarea><\/div><div class=\"fusion-text fusion-text-3\"><p>&nbsp;<\/p>\n<p>Odysseus uses the <code>PUID<\/code> and <code>PGID<\/code> variables in the <code>.env<\/code> file to set ownership of bind-mounted files. Check the UID and GID values of the <code>nvidia<\/code> user on the Spark:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-4 > .CodeMirror, .fusion-syntax-highlighter-4 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-4 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_4\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_4\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_4\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">id -u nvidia &amp;&amp; id -g nvidia<\/textarea><\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-5 > .CodeMirror, .fusion-syntax-highlighter-5 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-5 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_5\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_5\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_5\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">1001\n1001<\/textarea><\/div><div class=\"fusion-text fusion-text-4\"><p>&nbsp;<\/p>\n<p>On the DGX Spark, the UID\/GID of the <code>nvidia<\/code> user is 1001 (usually 1000). We will need to set this value correctly in the <code>.env<\/code> file.<\/p>\n<hr \/>\n<h3>2. .env Configuration<\/h3>\n<p>Append the following configuration to the end of the default settings in the <code>.env<\/code> file:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-6 > .CodeMirror, .fusion-syntax-highlighter-6 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-6 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_6\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_6\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_6\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">cat &gt;&gt; ~\/odysseus\/.env &lt;&lt; &#8220;EOF&#8221;<\/p>\n<p># ===== Odysseus Configuration =====\nAPP_BIND=0.0.0.0\nAPP_PORT=7000\nLLM_HOST=host.docker.internal\nPUID=1001\nPGID=1001\nEOF<\/textarea><\/div><div class=\"fusion-text fusion-text-5\"><p>&nbsp;<\/p>\n<p>Verify the lines you added:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-7 > .CodeMirror, .fusion-syntax-highlighter-7 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-7 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_7\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_7\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_7\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">tail -10 ~\/odysseus\/.env<\/textarea><\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-8 > .CodeMirror, .fusion-syntax-highlighter-8 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-8 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_8\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_8\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_8\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\"># APP_DATA_DIR=.\/data\n# APP_LOGS_DIR=.\/logs<\/p>\n<p># ===== Odysseus Configuration =====\nAPP_BIND=0.0.0.0\nAPP_PORT=7000\nLLM_HOST=host.docker.internal\nPUID=1001\nPGID=1001<\/textarea><\/div><div class=\"fusion-text fusion-text-6\"><p>The following table explains why each variable is needed:<\/p>\n<ul>\n<li><strong><code>APP_BIND<\/code><\/strong>\n<ul>\n<li><strong>Value:<\/strong> <code>0.0.0.0<\/code><\/li>\n<li><strong>Description:<\/strong> LAN access \u2014 allows you to access the Spark from another computer&#8217;s browser. The default <code>127.0.0.1<\/code> only allows localhost access.<\/li>\n<\/ul>\n<\/li>\n<li><strong><code>APP_PORT<\/code><\/strong>\n<ul>\n<li><strong>Value:<\/strong> <code>7000<\/code><\/li>\n<li><strong>Description:<\/strong> The port of the Odysseus web interface.<\/li>\n<\/ul>\n<\/li>\n<li><strong><code>LLM_HOST<\/code><\/strong>\n<ul>\n<li><strong>Value:<\/strong> <code>host.docker.internal<\/code><\/li>\n<li><strong>Description:<\/strong> Provides access to vLLM from within the Docker Compose network.<\/li>\n<\/ul>\n<\/li>\n<li><strong><code>PUID<\/code><\/strong>\n<ul>\n<li><strong>Value:<\/strong> <code>1001<\/code><\/li>\n<li><strong>Description:<\/strong> The UID of the <code>nvidia<\/code> user on the Spark. Ensures files in <code>.\/data\/<\/code> and <code>.\/logs\/<\/code> belong to the correct user.<\/li>\n<\/ul>\n<\/li>\n<li><strong><code>PGID<\/code><\/strong>\n<ul>\n<li><strong>Value:<\/strong> <code>1001<\/code><\/li>\n<li><strong>Description:<\/strong> The GID of the <code>nvidia<\/code> user on the Spark. Required for the same reason as <code>PUID<\/code>.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<blockquote>\n<p><strong>Important:<\/strong> Open WebUI runs with the <code>--network=host<\/code> flag, so it can access vLLM at <code>localhost:8000<\/code> from within the container. Odysseus, however, uses the Docker Compose network, so <code>localhost<\/code> inside the container refers to the container itself, not the Spark. This is why we set <code>LLM_HOST<\/code> to <code>host.docker.internal<\/code>.<\/p>\n<\/blockquote>\n<hr \/>\n<h3>3. Build and Start<\/h3>\n<p>Build and start Odysseus:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-9 > .CodeMirror, .fusion-syntax-highlighter-9 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-9 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_9\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_9\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_9\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">cd ~\/odysseus &amp;amp;&amp;amp; docker compose up -d &#8211;build<\/textarea><\/div><div class=\"fusion-text fusion-text-7\"><p>&nbsp;<\/p>\n<p>The first build takes approximately 6 minutes. During the build, Docker downloads the required images and builds the Odysseus web interface image locally. When the build is complete, you will see the following output:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-10 > .CodeMirror, .fusion-syntax-highlighter-10 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-10 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_10\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_10\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_10\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">#22 exporting to image&lt;br \/&gt;\n#22 exporting layers 43.0s done&lt;br \/&gt;\n#22 exporting manifest sha256:1578b2f1936cb61c2cb3f6573c676fdaddcd894da67edf7c138307051e430829 0.0s done&lt;br \/&gt;\n#22 exporting config sha256:f332390596282d676056f572245970de0c070c8742a81af0d5f86688167005d9 0.0s done&lt;br \/&gt;\n#22 exporting attestation manifest sha256:6de5ba26fc5c055b944e86bcc23ca309b632fb71c31f35f71e6b0ea008fe49dc 0.0s done&lt;br \/&gt;\n#22 exporting manifest list sha256:71fe6de33cbabd1da572dcfe59b823418b4caab126341783369ff3975937f6c0 0.0s done&lt;br \/&gt;\n#22 naming to docker.io\/library\/odysseus-odysseus:latest done&lt;br \/&gt;\n#22 unpacking to docker.io\/library\/odysseus-odysseus:latest 10.5s done&lt;br \/&gt;\n#22 DONE 53.6s&lt;\/p&gt;\n&lt;p&gt;#23 resolving provenance for metadata file&lt;br \/&gt;\n#23 DONE 0.0s&lt;br \/&gt;\nImage odysseus-odysseus Built&lt;br \/&gt;\nNetwork odysseus_default Creating&lt;br \/&gt;\nNetwork odysseus_default Created&lt;br \/&gt;\nVolume odysseus_chromadb-data Creating&lt;br \/&gt;\nVolume odysseus_chromadb-data Created&lt;br \/&gt;\nVolume odysseus_searxng-data Creating&lt;br \/&gt;\nVolume odysseus_searxng-data Created&lt;br \/&gt;\nVolume odysseus_ntfy-cache Creating&lt;br \/&gt;\nVolume odysseus_ntfy-cache Created&lt;br \/&gt;\nContainer odysseus-chromadb-1 Creating&lt;br \/&gt;\nContainer odysseus-searxng-1 Creating&lt;br \/&gt;\nContainer odysseus-ntfy-1 Creating&lt;br \/&gt;\nContainer odysseus-chromadb-1 Created&lt;br \/&gt;\nContainer odysseus-searxng-1 Created&lt;br \/&gt;\nContainer odysseus-odysseus-1 Creating&lt;br \/&gt;\nContainer odysseus-ntfy-1 Created&lt;br \/&gt;\nContainer odysseus-odysseus-1 Created&lt;br \/&gt;\nContainer odysseus-ntfy-1 Starting&lt;br \/&gt;\nContainer odysseus-searxng-1 Starting&lt;br \/&gt;\nContainer odysseus-chromadb-1 Starting&lt;br \/&gt;\nContainer odysseus-searxng-1 Started&lt;br \/&gt;\nContainer odysseus-chromadb-1 Started&lt;br \/&gt;\nContainer odysseus-searxng-1 Waiting&lt;br \/&gt;\nContainer odysseus-ntfy-1 Started&lt;br \/&gt;\nContainer odysseus-searxng-1 Healthy&lt;br \/&gt;\nContainer odysseus-odysseus-1 Starting&lt;br \/&gt;\nContainer odysseus-odysseus-1 Started<\/textarea><\/div><div class=\"fusion-text fusion-text-8\"><p>&nbsp;<\/p>\n<p>The Docker image was built successfully and 4 containers were started. SearXNG health check passed (<code>Healthy<\/code>), then the Odysseus web interface container was started. Docker Compose created its own network (<code>odysseus_default<\/code>) and 3 named volumes.<\/p>\n<hr \/>\n<h3>4. Status Check<\/h3>\n<p>Odysseus enables authentication by default and automatically creates the initial admin account. The admin password is printed in the container logs. Check the logs:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-11 > .CodeMirror, .fusion-syntax-highlighter-11 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-11 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_11\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_11\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_11\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">cd ~\/odysseus &amp;&amp; docker compose logs odysseus 2&gt;&amp;1 | tail -40<\/textarea><\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-12 > .CodeMirror, .fusion-syntax-highlighter-12 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-12 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_12\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_12\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_12\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">odysseus-1 |&lt;br \/&gt;\nodysseus-1 | === Odysseus Setup ===&lt;br \/&gt;\nodysseus-1 |&lt;br \/&gt;\nodysseus-1 | 1. Creating directories&#8230;&lt;br \/&gt;\nodysseus-1 | [ok] data\/&lt;br \/&gt;\nodysseus-1 | [ok] data\/uploads\/&lt;br \/&gt;\nodysseus-1 | [ok] data\/personal_docs\/&lt;br \/&gt;\nodysseus-1 | [ok] data\/personal_uploads\/&lt;br \/&gt;\nodysseus-1 | [ok] data\/tts_cache\/&lt;br \/&gt;\nodysseus-1 | [ok] data\/generated_images\/&lt;br \/&gt;\nodysseus-1 | [ok] data\/deep_research\/&lt;br \/&gt;\nodysseus-1 | [ok] data\/chroma\/&lt;br \/&gt;\nodysseus-1 | [ok] data\/rag\/&lt;br \/&gt;\nodysseus-1 | [ok] data\/memory_vectors\/&lt;br \/&gt;\nodysseus-1 | [ok] logs\/&lt;br \/&gt;\nodysseus-1 |&lt;br \/&gt;\nodysseus-1 | 2. Environment file&#8230;&lt;br \/&gt;\nodysseus-1 | [ok] .env created from .env.example&lt;br \/&gt;\nodysseus-1 | ** Edit .env with your LLM host and API keys **&lt;br \/&gt;\nodysseus-1 |&lt;br \/&gt;\nodysseus-1 | 3. Checking dependencies&#8230;&lt;br \/&gt;\nodysseus-1 | [ok] All core dependencies installed&lt;br \/&gt;\nodysseus-1 | [ok] tmux installed&lt;br \/&gt;\nodysseus-1 |&lt;br \/&gt;\nodysseus-1 | 4. Initializing database&#8230;&lt;br \/&gt;\nodysseus-1 | [ok] Database initialized&lt;br \/&gt;\nodysseus-1 |&lt;br \/&gt;\nodysseus-1 | 5. Creating initial admin&#8230;&lt;br \/&gt;\nodysseus-1 | [ok] Initial admin user created (admin)&lt;br \/&gt;\nodysseus-1 | Temporary password: akZ-yra12HxXCV5HIqvfVtFa&lt;br \/&gt;\nodysseus-1 | ** Change it after first login. Set ODYSSEUS_ADMIN_PASSWORD to choose your own. **&lt;br \/&gt;\nodysseus-1 |&lt;br \/&gt;\nodysseus-1 | === Setup complete ===&lt;br \/&gt;\nodysseus-1 |&lt;br \/&gt;\nodysseus-1 | Start the server with:&lt;br \/&gt;\nodysseus-1 | python -m uvicorn app:app &#8211;host 127.0.0.1 &#8211;port 7000&lt;br \/&gt;\nodysseus-1 |&lt;br \/&gt;\nodysseus-1 | Then open http:\/\/localhost:7000&lt;br \/&gt;\nodysseus-1 | Login with your admin credentials.&lt;br \/&gt;\nodysseus-1 |<\/textarea><\/div><div class=\"fusion-text fusion-text-9\"><p>&nbsp;<\/p>\n<p>The admin account has been created: username <code>admin<\/code>, password <code>akZ-yra12HxXCV5HIqvfVtFa<\/code>. You can change this password after your first login. If you want to set your own password, you can add the <code>ODYSSEUS_ADMIN_PASSWORD<\/code> variable to the <code>.env<\/code> file.<\/p>\n<p>Check the status of the containers:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-13 > .CodeMirror, .fusion-syntax-highlighter-13 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-13 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_13\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_13\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_13\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">docker ps &#8211;filter name=odysseus &#8211;format &#8220;table {{.Names}}t{{.Status}}t{{.Ports}}&#8221;<\/textarea><\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-14 > .CodeMirror, .fusion-syntax-highlighter-14 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-14 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_14\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_14\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_14\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">NAMES STATUS PORTS\nodysseus-odysseus-1 Up 4 seconds 0.0.0.0:7000-&gt;7000\/tcp\nodysseus-chromadb-1 Up 9 seconds 127.0.0.1:8100-&gt;8000\/tcp\nodysseus-searxng-1 Up 9 seconds (healthy) 127.0.0.1:8080-&gt;8080\/tcp\nodysseus-ntfy-1 Up 9 seconds 127.0.0.1:8091-&gt;80\/tcp<\/textarea><\/div><div class=\"fusion-text fusion-text-10\"><p>&nbsp;<\/p>\n<p>All 4 containers are running. The Odysseus web interface is on <code>0.0.0.0:7000<\/code> (LAN accessible), while the other services are on localhost only.<\/p>\n<p>Verify that the server is responding:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-15 > .CodeMirror, .fusion-syntax-highlighter-15 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-15 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_15\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_15\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_15\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">curl -s &#8211;max-time 10 http:\/\/localhost:7000\/ -o \/dev\/null -w &#8220;HTTP %{http_code}&#8221;<\/textarea><\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-16 > .CodeMirror, .fusion-syntax-highlighter-16 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-16 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_16\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_16\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_16\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">HTTP 302<\/textarea><\/div><div class=\"fusion-text fusion-text-11\"><p>&nbsp;<\/p>\n<p>The <code>HTTP 302<\/code> response indicates that the server is redirecting requests to the login page. Odysseus is running.<\/p>\n<p>Finally, verify that the Odysseus container can access vLLM:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-17 > .CodeMirror, .fusion-syntax-highlighter-17 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-17 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_17\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_17\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_17\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">docker exec odysseus-odysseus-1 curl -s &#8211;max-time 5 http:\/\/host.docker.internal:8000\/health -o \/dev\/null -w &#8220;HTTP %{http_code}&#8221;<\/textarea><\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-18 > .CodeMirror, .fusion-syntax-highlighter-18 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-18 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_18\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_18\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_18\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">HTTP 200<\/textarea><\/div><div class=\"fusion-text fusion-text-12\"><p>&nbsp;<\/p>\n<p>The <code>HTTP 200<\/code> response confirms that the Odysseus container successfully accesses vLLM via <code>host.docker.internal:8000<\/code>.<\/p>\n<p>Verify that all components are ready by checking Odysseus startup logs:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-19 > .CodeMirror, .fusion-syntax-highlighter-19 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-19 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_19\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_19\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_19\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">cd ~\/odysseus &amp;&amp; docker compose logs &#8211;tail=20 odysseus<\/textarea><\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-20 > .CodeMirror, .fusion-syntax-highlighter-20 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-20 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_20\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_20\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_20\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">odysseus-1 | 2026-07-30 13:30:09,430 &#8211; app &#8211; INFO &#8211; Application starting up&#8230;&lt;br \/&gt;\nodysseus-1 | 2026-07-30 13:30:09,432 &#8211; src.bg_monitor &#8211; INFO &#8211; Background-job monitor started (poll 5s)&lt;br \/&gt;\nodysseus-1 | 2026-07-30 13:30:09,432 &#8211; app &#8211; INFO &#8211; Startup warmups disabled (set ODYSSEUS_STARTUP_WARMUPS=1 to enable)&lt;br \/&gt;\nodysseus-1 | 2026-07-30 13:30:09,440 &#8211; src.task_scheduler &#8211; INFO &#8211; Task scheduler started (concurrency cap: 1)&lt;br \/&gt;\nodysseus-1 | 2026-07-30 13:30:09,441 &#8211; app &#8211; INFO &#8211; Application startup complete&lt;br \/&gt;\nodysseus-1 | 2026-07-30 13:30:09,441 &#8211; src.builtin_mcp &#8211; INFO &#8211; NPX binary resolved to: \/usr\/bin\/npx&lt;br \/&gt;\nodysseus-1 | INFO: Application startup complete.&lt;br \/&gt;\nodysseus-1 | INFO: Uvicorn running on http:\/\/0.0.0.0:7000 (Press CTRL+C to quit)&lt;br \/&gt;\nodysseus-1 | 2026-07-30 13:30:09,759 &#8211; src.mcp_manager &#8211; INFO &#8211; MCP server connected: Built-in: Memory (memory) &#8211; 1 tools via stdio&lt;br \/&gt;\nodysseus-1 | 2026-07-30 13:30:09,760 &#8211; src.builtin_mcp &#8211; INFO &#8211; Built-in MCP server registered: Built-in: Memory&lt;br \/&gt;\nodysseus-1 | 2026-07-30 13:30:09,788 &#8211; src.mcp_manager &#8211; INFO &#8211; MCP server connected: Built-in: Image Generation (image_gen) &#8211; 1 tools via stdio&lt;br \/&gt;\nodysseus-1 | 2026-07-30 13:30:09,788 &#8211; src.builtin_mcp &#8211; INFO &#8211; Built-in MCP server registered: Built-in: Image Generation&lt;br \/&gt;\nodysseus-1 | 2026-07-30 13:30:09,790 &#8211; src.mcp_manager &#8211; INFO &#8211; MCP server connected: Built-in: RAG (rag) &#8211; 1 tools via stdio&lt;br \/&gt;\nodysseus-1 | 2026-07-30 13:30:09,790 &#8211; src.builtin_mcp &#8211; INFO &#8211; Built-in MCP server registered: Built-in: RAG&lt;br \/&gt;\nodysseus-1 | 2026-07-30 13:30:09,798 &#8211; src.mcp_manager &#8211; INFO &#8211; MCP server connected: Built-in: Email (email) &#8211; 16 tools via stdio&lt;br \/&gt;\nodysseus-1 | 2026-07-30 13:30:09,798 &#8211; src.builtin_mcp &#8211; INFO &#8211; Built-in MCP server registered: Built-in: Email&lt;br \/&gt;\nodysseus-1 | INFO: 192.168.1.77:36940 &#8211; &#8220;GET \/api\/research\/active HTTP\/1.1&#8221; 200 OK&lt;br \/&gt;\nodysseus-1 | 2026-07-30 13:30:12,509 &#8211; src.builtin_mcp &#8211; INFO &#8211; Starting NPX server: Built-in: Browser (\/usr\/bin\/npx -y @playwright\/mcp@latest &#8211;headless &#8211;caps vision &#8211;executable-path \/usr\/bin\/chromium &#8211;isolated &#8211;no-sandbox)&lt;br \/&gt;\nodysseus-1 | 2026-07-30 13:30:13,101 &#8211; src.mcp_manager &#8211; INFO &#8211; MCP server connected: Built-in: Browser (builtin_browser) &#8211; 30 tools via stdio&lt;br \/&gt;\nodysseus-1 | 2026-07-30 13:30:13,102 &#8211; src.builtin_mcp &#8211; INFO &#8211; Built-in NPX server registered: Built-in: Browser<\/textarea><\/div><div class=\"fusion-text fusion-text-13\"><p>&nbsp;<\/p>\n<p>The <code>Application startup complete.<\/code> and <code>Uvicorn running on http:\/\/0.0.0.0:7000<\/code> lines indicate that Odysseus is ready. The logs also show 5 MCP (Model Context Protocol) servers automatically registered at startup: Memory (1 tool), Image Generation (1 tool), RAG (1 tool), Email (16 tools), and Browser (30 tools \u2014 Playwright\/chromium for web browser automation). These MCP servers enable the model to perform operations such as file reading, image generation, email management, and web browser control in agent mode.<\/p>\n<p>Odysseus setup is complete. You are ready to access it from your browser.<\/p>\n<hr \/>\n<h2>Using Odysseus<\/h2>\n<h3>1. Login<\/h3>\n<p>Open your computer&#8217;s browser and navigate to the Spark&#8217;s IP address on port 7000:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-21 > .CodeMirror, .fusion-syntax-highlighter-21 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-21 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_21\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_21\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_21\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">http:\/\/SPARK_IP:7000<\/textarea><\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-1 hover-type-none\"><img decoding=\"async\" width=\"1024\" height=\"579\" title=\"odysseus-login-screen\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-login-screen-1024x579.webp\" alt class=\"img-responsive wp-image-1898\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-login-screen-200x113.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-login-screen-300x170.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-login-screen-400x226.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-login-screen-600x339.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-login-screen-768x434.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-login-screen-800x452.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-login-screen-1024x579.webp 1024w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-login-screen-1200x678.webp 1200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-login-screen-1536x868.webp 1536w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-login-screen.webp 1850w\" sizes=\"(max-width: 640px) 100vw, 1024px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-14\"><p>&nbsp;<\/p>\n<p>You will see the login screen. Log in using the admin name (<code>admin<\/code>) and password you saved in the previous step.<\/p>\n<\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-2 hover-type-none\"><img decoding=\"async\" width=\"1024\" height=\"579\" title=\"odysseus-workspace\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-workspace-1024x579.webp\" alt class=\"img-responsive wp-image-1904\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-workspace-200x113.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-workspace-300x170.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-workspace-400x226.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-workspace-600x339.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-workspace-768x434.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-workspace-800x452.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-workspace-1024x579.webp 1024w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-workspace-1200x678.webp 1200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-workspace-1536x868.webp 1536w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-workspace.webp 1850w\" sizes=\"(max-width: 640px) 100vw, 1024px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-15\"><p>&nbsp;<\/p>\n<p>After logging in, you will see Odysseus&#8217;s integrated workspace. From the left menu, you can access many applications: Email, Tools, Brain, Calendar, Compare, Cookbook, Deep Research, Gallery, Library, Notes, Tasks, and Theme. The chat area is in the middle and becomes ready to use once a model is selected. The selector in the bottom right corner lets you switch between Agent mode (multi-step operations with tools) and Chat mode (traditional language model response).<\/p>\n<hr \/>\n<h3>2. Model Selection<\/h3>\n<p>Odysseus automatically discovers models from OpenAI-compatible inference servers like vLLM. Click the settings icon in the bottom left corner and go to the <strong>Add Models<\/strong> section. Enter the address of your vLLM local model server:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-22 > .CodeMirror, .fusion-syntax-highlighter-22 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-22 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_22\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_22\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_22\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">http:\/\/host.docker.internal:8000<\/textarea><\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-3 hover-type-none\"><img decoding=\"async\" width=\"1024\" height=\"579\" title=\"odysseus-vllm-endpoint\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-vllm-endpoint-1024x579.webp\" alt class=\"img-responsive wp-image-1903\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-vllm-endpoint-200x113.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-vllm-endpoint-300x170.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-vllm-endpoint-400x226.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-vllm-endpoint-600x339.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-vllm-endpoint-768x434.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-vllm-endpoint-800x452.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-vllm-endpoint-1024x579.webp 1024w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-vllm-endpoint-1200x678.webp 1200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-vllm-endpoint-1536x868.webp 1536w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-vllm-endpoint.webp 1850w\" sizes=\"(max-width: 640px) 100vw, 1024px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-16\"><p>&nbsp;<\/p>\n<p>You will see a green <strong>&#8220;Added \u2014 found 1 model&#8221;<\/strong> message. This indicates that Odysseus has connected to the vLLM server and discovered the <code>gpt-oss-120b<\/code> model.<\/p>\n<\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-4 hover-type-none\"><img decoding=\"async\" width=\"1024\" height=\"579\" title=\"odysseus-model-select\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-model-select-1024x579.webp\" alt class=\"img-responsive wp-image-1900\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-model-select-200x113.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-model-select-300x170.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-model-select-400x226.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-model-select-600x339.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-model-select-768x434.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-model-select-800x452.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-model-select-1024x579.webp 1024w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-model-select-1200x678.webp 1200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-model-select-1536x868.webp 1536w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-model-select.webp 1850w\" sizes=\"(max-width: 640px) 100vw, 1024px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-17\"><p>&nbsp;<\/p>\n<p>The model appears as <code>gpt-oss-120b<\/code> in the chat interface and is ready to be selected.<\/p>\n<\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-5 hover-type-none\"><img decoding=\"async\" width=\"1024\" height=\"579\" title=\"odysseus-model-menu\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-model-menu-1024x579.webp\" alt class=\"img-responsive wp-image-1899\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-model-menu-200x113.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-model-menu-300x170.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-model-menu-400x226.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-model-menu-600x339.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-model-menu-768x434.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-model-menu-800x452.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-model-menu-1024x579.webp 1024w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-model-menu-1200x678.webp 1200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-model-menu-1536x868.webp 1536w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-model-menu.webp 1850w\" sizes=\"(max-width: 640px) 100vw, 1024px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-18\"><hr \/>\n<h3>3. Chat and Reasoning<\/h3>\n<p>Let&#8217;s start by chatting with GPT-OSS 120B:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-23 > .CodeMirror, .fusion-syntax-highlighter-23 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-23 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_23\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_23\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_23\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">Tell me about NVIDIA.<\/textarea><\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-6 hover-type-none\"><img decoding=\"async\" width=\"1024\" height=\"579\" title=\"odysseus-chat-reasoning\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-chat-reasoning-1024x579.webp\" alt class=\"img-responsive wp-image-1893\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-chat-reasoning-200x113.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-chat-reasoning-300x170.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-chat-reasoning-400x226.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-chat-reasoning-600x339.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-chat-reasoning-768x434.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-chat-reasoning-800x452.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-chat-reasoning-1024x579.webp 1024w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-chat-reasoning-1200x678.webp 1200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-chat-reasoning-1536x868.webp 1536w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-chat-reasoning.webp 1850w\" sizes=\"(max-width: 640px) 100vw, 1024px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-19\"><p>&nbsp;<\/p>\n<p>The model produces a structured response \u2014 with headings, tables, and categorized information. Above the response, you can expand the <strong>&#8220;View thinking process&#8221;<\/strong> panel to see the model&#8217;s reasoning process. The interface also shows approximately 6.5 seconds of generation time and 435 token count. This is an ordinary model inference \u2014 the response is based on the model&#8217;s internal knowledge.<\/p>\n<p>Now open the attachment menu at the bottom of the chat window:<\/p>\n<\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-7 hover-type-none\"><img decoding=\"async\" width=\"1024\" height=\"579\" title=\"odysseus-attachment-menu\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-attachment-menu-1024x579.webp\" alt class=\"img-responsive wp-image-1892\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-attachment-menu-200x113.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-attachment-menu-300x170.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-attachment-menu-400x226.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-attachment-menu-600x339.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-attachment-menu-768x434.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-attachment-menu-800x452.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-attachment-menu-1024x579.webp 1024w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-attachment-menu-1200x678.webp 1200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-attachment-menu-1536x868.webp 1536w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-attachment-menu.webp 1850w\" sizes=\"(max-width: 640px) 100vw, 1024px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-20\"><p>&nbsp;<\/p>\n<p>This menu offers three options: <strong>Attach files<\/strong> (upload files from your computer \u2014 PDF summarization, source code analysis, table analysis, image interpretation), <strong>Documents<\/strong> (select an existing document from the Odysseus Library), and <strong>Prompt<\/strong> (add a saved prompt template).<\/p>\n<hr \/>\n<h3>4. Document Upload and Analysis<\/h3>\n<p>Let&#8217;s test the model&#8217;s document understanding capability by uploading the DGX Spark datasheet PDF. Use the <strong>Attach files<\/strong> option from the attachment menu to upload the PDF and ask it to summarize:<\/p>\n<\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-8 hover-type-none\"><img decoding=\"async\" width=\"1024\" height=\"579\" title=\"odysseus-pdf-analysis\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-pdf-analysis-1024x579.webp\" alt class=\"img-responsive wp-image-1901\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-pdf-analysis-200x113.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-pdf-analysis-300x170.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-pdf-analysis-400x226.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-pdf-analysis-600x339.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-pdf-analysis-768x434.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-pdf-analysis-800x452.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-pdf-analysis-1024x579.webp 1024w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-pdf-analysis-1200x678.webp 1200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-pdf-analysis-1536x868.webp 1536w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-pdf-analysis.webp 1850w\" sizes=\"(max-width: 640px) 100vw, 1024px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-21\"><p>&nbsp;<\/p>\n<p>GPT-OSS 120B extracts the PDF content, adds it to the model context, and produces a summary.<\/p>\n<hr \/>\n<h3>5. Deep Research<\/h3>\n<p>Deep Research is one of Odysseus&#8217;s most distinctive features. This feature enables the model to conduct multi-step web research: it generates search queries, reads web sources, iteratively refines findings, and produces a report.<\/p>\n<p>Open the <strong>Deep Research<\/strong> app from the left menu and enter a research topic.<\/p>\n<\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-9 hover-type-none\"><img decoding=\"async\" width=\"1024\" height=\"579\" title=\"odysseus-deep-research-config\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-config-1024x579.webp\" alt class=\"img-responsive wp-image-1895\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-config-200x113.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-config-300x170.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-config-400x226.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-config-600x339.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-config-768x434.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-config-800x452.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-config-1024x579.webp 1024w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-config-1200x678.webp 1200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-config-1536x868.webp 1536w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-config.webp 1850w\" sizes=\"(max-width: 640px) 100vw, 1024px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-22\"><p>&nbsp;<\/p>\n<p>The research configuration offers the following options: <strong>Rounds<\/strong> (number of iterative research cycles), <strong>Format<\/strong> (output structure), <strong>Search Engine<\/strong> (search engine), <strong>Endpoint<\/strong> (inference endpoint), and <strong>Model<\/strong> (the model to use for search planning, source analysis, and report synthesis). Press the <strong>Start<\/strong> button to begin the research.<\/p>\n<\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-10 hover-type-none\"><img decoding=\"async\" width=\"1024\" height=\"579\" title=\"odysseus-deep-research-search\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-search-1024x579.webp\" alt class=\"img-responsive wp-image-1897\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-search-200x113.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-search-300x170.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-search-400x226.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-search-600x339.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-search-768x434.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-search-800x452.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-search-1024x579.webp 1024w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-search-1200x678.webp 1200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-search-1536x868.webp 1536w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-search.webp 1850w\" sizes=\"(max-width: 640px) 100vw, 1024px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-23\"><p>&nbsp;<\/p>\n<p>When the research starts, the interface shows the research graph live. The root node represents the original research question, while the branched nodes represent generated sub-questions and discovered sources. In the first round, the system generates search queries and searches the web.<\/p>\n<\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-11 hover-type-none\"><img decoding=\"async\" width=\"1024\" height=\"579\" title=\"odysseus-deep-research-reading\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-reading-1024x579.webp\" alt class=\"img-responsive wp-image-1896\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-reading-200x113.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-reading-300x170.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-reading-400x226.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-reading-600x339.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-reading-768x434.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-reading-800x452.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-reading-1024x579.webp 1024w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-reading-1200x678.webp 1200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-reading-1536x868.webp 1536w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-reading.webp 1850w\" sizes=\"(max-width: 640px) 100vw, 1024px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-24\"><p>&nbsp;<\/p>\n<p>As search results are collected, the system fetches web pages, extracts text, and provides the content to the research model. The system reads sources, filters relevant content, and prepares it for additional searches or final synthesis.<\/p>\n<\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-12 hover-type-none\"><img decoding=\"async\" width=\"1024\" height=\"579\" title=\"odysseus-deep-research-complete\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-complete-1024x579.webp\" alt class=\"img-responsive wp-image-1894\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-complete-200x113.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-complete-300x170.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-complete-400x226.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-complete-600x339.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-complete-768x434.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-complete-800x452.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-complete-1024x579.webp 1024w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-complete-1200x678.webp 1200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-complete-1536x868.webp 1536w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-deep-research-complete.webp 1850w\" sizes=\"(max-width: 640px) 100vw, 1024px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-25\"><p>&nbsp;<\/p>\n<p>The result is saved in the &#8220;Past research&#8221; section: There are two main result buttons: <strong>Visual Report<\/strong> (formatted research report) and <strong>Discuss<\/strong> (open the report as a new chat context). Research results are permanently stored under Library &gt; Research.<\/p>\n<\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-13 hover-type-none\"><img decoding=\"async\" width=\"1024\" height=\"579\" title=\"odysseus-research-report-chat\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-research-report-chat-1024x579.webp\" alt class=\"img-responsive wp-image-1902\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-research-report-chat-200x113.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-research-report-chat-300x170.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-research-report-chat-400x226.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-research-report-chat-600x339.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-research-report-chat-768x434.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-research-report-chat-800x452.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-research-report-chat-1024x579.webp 1024w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-research-report-chat-1200x678.webp 1200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-research-report-chat-1536x868.webp 1536w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-research-report-chat.webp 1850w\" sizes=\"(max-width: 640px) 100vw, 1024px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-26\"><hr \/>\n<h3>6. Agent Mode and Tools<\/h3>\n<p>Switch the selector in the bottom right corner to <strong>Agent<\/strong> mode. In Agent mode, the model not only generates text but also autonomously performs operations such as writing files, running shell commands, and using tools.<\/p>\n<p>After switching to Agent mode, enable the <strong>Shell Access<\/strong> card. Ask the model to write a program, save it to the Spark, then run and test it.<\/p>\n<\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-14 hover-type-none\"><img decoding=\"async\" width=\"1024\" height=\"579\" title=\"odysseus-agent-shell-access\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-agent-shell-access-1024x579.webp\" alt class=\"img-responsive wp-image-1890\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-agent-shell-access-200x113.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-agent-shell-access-300x170.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-agent-shell-access-400x226.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-agent-shell-access-600x339.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-agent-shell-access-768x434.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-agent-shell-access-800x452.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-agent-shell-access-1024x579.webp 1024w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-agent-shell-access-1200x678.webp 1200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-agent-shell-access-1536x868.webp 1536w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-agent-shell-access.webp 1850w\" sizes=\"(max-width: 640px) 100vw, 1024px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-27\"><p>&nbsp;<\/p>\n<p>The agent first designs the program, then saves the file using the <code>write_file<\/code> tool, and tests it via shell while monitoring the workflow.<\/p>\n<\/div><div class=\"fusion-image-element \" style=\"--awb-caption-title-font-family:var(--h2_typography-font-family);--awb-caption-title-font-weight:var(--h2_typography-font-weight);--awb-caption-title-font-style:var(--h2_typography-font-style);--awb-caption-title-size:var(--h2_typography-font-size);--awb-caption-title-transform:var(--h2_typography-text-transform);--awb-caption-title-line-height:var(--h2_typography-line-height);--awb-caption-title-letter-spacing:var(--h2_typography-letter-spacing);\"><span class=\" fusion-imageframe imageframe-none imageframe-15 hover-type-none\"><img decoding=\"async\" width=\"1024\" height=\"579\" title=\"odysseus-agent-write-file\" src=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-agent-write-file-1024x579.webp\" alt class=\"img-responsive wp-image-1891\" srcset=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-agent-write-file-200x113.webp 200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-agent-write-file-300x170.webp 300w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-agent-write-file-400x226.webp 400w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-agent-write-file-600x339.webp 600w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-agent-write-file-768x434.webp 768w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-agent-write-file-800x452.webp 800w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-agent-write-file-1024x579.webp 1024w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-agent-write-file-1200x678.webp 1200w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-agent-write-file-1536x868.webp 1536w, https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/odysseus-agent-write-file.webp 1850w\" sizes=\"(max-width: 640px) 100vw, 1024px\" \/><\/span><\/div><div class=\"fusion-text fusion-text-28\"><hr \/>\n<h3>7. Other Features<\/h3>\n<p>Odysseus includes many integrated applications beyond those shown above. All of these are accessible from the same web interface:<\/p>\n<ul>\n<li><strong>Cookbook:<\/strong> Hardware-aware model recommendations, downloading, and local serving. Cookbook suggests models suitable for the Spark&#8217;s GPU and can download them with one click.<\/li>\n<\/ul>\n<ul>\n<li><strong>Compare:<\/strong> Blind side-by-side model testing and synthesis. Compare multiple models with the same prompt.<\/li>\n<\/ul>\n<ul>\n<li><strong>Email:<\/strong> IMAP\/SMTP inbox, triage, labels, summaries, reminders, and reply drafts.<\/li>\n<\/ul>\n<ul>\n<li><strong>Notes, Tasks, and Calendar:<\/strong> Reminders, to-dos, scheduled agent tasks, CalDAV synchronization.<\/li>\n<\/ul>\n<ul>\n<li><strong>Gallery and Image Editor:<\/strong> Image upload, editing, and creation.<\/li>\n<\/ul>\n<ul>\n<li><strong>MCP Servers:<\/strong> Odysseus registers 5 MCP servers at startup: Memory, Image Generation, RAG, Email (16 tools), and Browser (30 tools \u2014 Playwright\/chromium for web browser automation). You can add additional servers if you wish.<\/li>\n<\/ul>\n<ul>\n<li><strong>Theme and Customization:<\/strong> Multiple themes, session management.<\/li>\n<\/ul>\n<hr \/>\n<h2>Shutdown<\/h2>\n<p>When you are done, stop Odysseus:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-24 > .CodeMirror, .fusion-syntax-highlighter-24 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-24 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_24\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_24\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_24\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">cd ~\/odysseus &amp;&amp; docker compose down<\/textarea><\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-25 > .CodeMirror, .fusion-syntax-highlighter-25 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-25 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_25\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_25\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_25\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/txt\">time=&#8221;2026-07-30T14:07:31Z&#8221; level=warning msg=&#8221;The &#8220;ODYSSEUS_TTS_CACHE_MAX_BYTES&#8221; variable is not set. Defaulting to a blank string.&#8221;\nContainer odysseus-odysseus-1 Stopping\nContainer odysseus-ntfy-1 Stopping\nContainer odysseus-ntfy-1 Stopped\nContainer odysseus-ntfy-1 Removing\nContainer odysseus-ntfy-1 Removed\nContainer odysseus-odysseus-1 Stopped\nContainer odysseus-odysseus-1 Removing\nContainer odysseus-odysseus-1 Removed\nContainer odysseus-searxng-1 Stopping\nContainer odysseus-chromadb-1 Stopping\nContainer odysseus-chromadb-1 Stopped\nContainer odysseus-chromadb-1 Removing\nContainer odysseus-chromadb-1 Removed\nContainer odysseus-searxng-1 Stopped\nContainer odysseus-searxng-1 Removing\nContainer odysseus-searxng-1 Removed\nNetwork odysseus_default Removing\nNetwork odysseus_default Removed<\/textarea><\/div><div class=\"fusion-text fusion-text-29\"><p>&nbsp;<\/p>\n<p>All 4 containers were stopped. The Docker network (<code>odysseus_default<\/code>) was also cleaned up \u2014 the <code><strong>ODYSSEUS_TTS_CACHE_MAX_BYTES<\/strong><\/code> warning is harmless.<\/p>\n<p>Although the containers are stopped, all necessary components persist on disk:<\/p>\n<ul>\n<li><strong>Odysseus Docker image<\/strong> (<code>odysseus-odysseus:latest<\/code>, 2.76 GB) \u2014 no rebuild required.<\/li>\n<li><strong>Odysseus repo<\/strong> (<code>~\/odysseus\/<\/code>) \u2014 ready with the configured <code>.env<\/code> file.<\/li>\n<li><strong>Odysseus data<\/strong> (<code>~\/odysseus\/data\/<\/code>) \u2014 admin account (<code>app.db<\/code>, <code>auth.json<\/code>), ChromaDB vectors, fastembed cache, generated images, and research data persist.<\/li>\n<li><strong>Docker volumes<\/strong> (<code>odysseus_chromadb-data<\/code>, <code>odysseus_ntfy-cache<\/code>, <code>odysseus_searxng-data<\/code>) \u2014 preserved for the next run.<\/li>\n<\/ul>\n<p>To restart Odysseus:<\/p>\n<\/div><style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-26 > .CodeMirror, .fusion-syntax-highlighter-26 > .CodeMirror .CodeMirror-gutters {background-color:#000000;}<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-26 fusion-syntax-highlighter-theme-dark\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:rgba(242,243,245,0);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_26\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_26\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_26\" data-readOnly=\"nocursor\" data-lineNumbers=\"\" data-lineWrapping=\"\" data-theme=\"oceanic-next\" data-mode=\"text\/x-sh\">cd ~\/odysseus &amp;&amp; docker compose up -d<\/textarea><\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-2 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1331.2px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-1 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:20px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\">    <div class=\"ext-wc-slider-wrapper\">\n        <div class=\"ext-wc-slider-header\">\n            <h4 class=\"ext-wc-slider-heading\">Recommended Products<\/h4>\n            <a href=\"https:\/\/openzeka.com\/en\/store\/?orderby=menu_order\" target=\"_blank\" rel=\"noopener\" class=\"ext-wc-all-link\">\n                See All Products &rarr; \n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                    <circle cx=\"9\" cy=\"21\" r=\"1\"><\/circle>\n                    <circle cx=\"20\" cy=\"21\" r=\"1\"><\/circle>\n                    <path d=\"M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6\"><\/path>\n                <\/svg>\n            <\/a>\n        <\/div>\n        \n        <div class=\"ext-wc-slider-rel-container\">\n            <button class=\"ext-wc-arrow ext-wc-arrow-prev\" aria-label=\"\u00d6nceki\">&#10094;<\/button>\n            \n            <div class=\"ext-wc-slider-container\">\n                                    <div class=\"ext-wc-slider-item\">\n                        <a href=\"https:\/\/openzeka.com\/en\/product\/nvidia-dgx-spark-940-54242-0005-000\/\" target=\"_blank\" rel=\"nofollow noopener\">\n                            <div class=\"ext-wc-slider-content\">\n                                                                    <div class=\"ext-wc-slider-img\">\n                                        <img decoding=\"async\" src=\"https:\/\/openzeka.com\/en\/wp-content\/uploads\/2026\/02\/DGX-Spark-img-1.webp\" alt=\"NVIDIA DGX Spark - 940-54242-0005-000\">\n                                    <\/div>\n                                \n                                <div class=\"ext-wc-slider-info\">\n                                                                            <div class=\"ext-wc-slider-category\">DGX Systems<\/div>\n                                    \n                                    <div class=\"ext-wc-slider-title\">NVIDIA DGX Spark - 940-54242-0005-000<\/div>\n\n                                    <div class=\"ext-wc-slider-btn\">\u0130ncele<\/div>\n                                <\/div>\n                            <\/div>\n                        <\/a>\n                    <\/div>\n                            <\/div>\n\n            <button class=\"ext-wc-arrow ext-wc-arrow-next\" aria-label=\"Sonraki\">&#10095;<\/button>\n        <\/div>\n    <\/div>\n\n    <style>\n        .ext-wc-slider-wrapper {\n            margin: 30px 0 !important;\n            width: 100% !important;\n            max-width: 100% !important;\n            box-sizing: border-box !important;\n            clear: both !important;\n            display: block !important;\n            font-family: inherit !important;\n        }\n\n        .ext-wc-slider-header {\n            display: flex !important;\n            justify-content: space-between !important;\n            align-items: center !important;\n            border-bottom: 2px solid #005885 !important;\n            padding-bottom: 10px !important;\n            margin-bottom: 14px !important;\n        }\n\n        .ext-wc-slider-heading {\n            font-size: 20px !important;\n            font-weight: 800 !important;\n            margin: 0 !important;\n            padding: 0 !important;\n            color: #1a1a1a !important; \n            text-transform: uppercase !important;\n            letter-spacing: 0.5px !important;\n            border: none !important;\n        }\n\n        .ext-wc-all-link {\n            font-size: 13px !important;\n            font-weight: 600 !important;\n            color: #005885 !important;\n            text-decoration: none !important;\n            display: inline-flex !important;\n            align-items: center !important;\n            gap: 6px !important;\n            transition: opacity .2s ease !important;\n        }\n\n        .ext-wc-all-link:hover {\n            opacity: 0.8 !important;\n            text-decoration: underline !important;\n        }\n\n        \/* OK BUTONLARI VE KAPSAYICI *\/\n        .ext-wc-slider-rel-container {\n            position: relative !important;\n            width: 100% !important;\n            padding: 0 16px !important;\n            box-sizing: border-box !important;\n        }\n\n        .ext-wc-arrow {\n            position: absolute !important;\n            top: 50% !important;\n            transform: translateY(-50%) !important;\n            width: 36px !important;\n            height: 36px !important;\n            background: #ffffff !important;\n            border: 1px solid #005885 !important;\n            color: #005885 !important;\n            border-radius: 50% !important;\n            display: flex !important;\n            align-items: center !important;\n            justify-content: center !important;\n            cursor: pointer !important;\n            z-index: 10 !important;\n            box-shadow: 0 2px 8px rgba(0,0,0,0.15) !important;\n            transition: all .2s ease !important;\n            font-size: 14px !important;\n            padding: 0 !important;\n            line-height: 1 !important;\n        }\n\n        \/* OKLARI KES\u0130N G\u0130ZLEME SINIFI *\/\n        .ext-wc-arrow.ext-wc-arrow-hidden {\n            display: none !important;\n        }\n\n        .ext-wc-arrow:hover {\n            background: #005885 !important;\n            color: #ffffff !important;\n        }\n\n        .ext-wc-arrow-prev {\n            left: -4px !important;\n        }\n\n        .ext-wc-arrow-next {\n            right: -4px !important;\n        }\n\n        \/* YATAY KAYDIRMA KUTUSU *\/\n        .ext-wc-slider-container {\n            display: flex !important;\n            flex-direction: row !important;\n            flex-wrap: nowrap !important;\n            justify-content: flex-start !important;\n            align-items: stretch !important;\n            gap: 16px !important;\n            overflow-x: auto !important;\n            overflow-y: hidden !important;\n            scroll-snap-type: x mandatory !important;\n            scroll-behavior: smooth !important;\n            -webkit-overflow-scrolling: touch !important;\n            padding: 6px 4px 12px 4px !important;\n            width: 100% !important;\n            box-sizing: border-box !important;\n            \n            scrollbar-width: none !important;\n            -ms-overflow-style: none !important;\n        }\n\n        .ext-wc-slider-container::-webkit-scrollbar {\n            display: none !important;\n        }\n\n        .ext-wc-slider-item {\n            flex: 0 0 360px !important;\n            min-width: 360px !important;\n            max-width: 360px !important;\n            scroll-snap-align: start !important;\n            border-radius: 6px !important;\n            border: 1px solid #e2e8f0 !important;\n            background: #ffffff !important;\n            box-shadow: 0 1px 3px rgba(0,0,0,0.05) !important;\n            transition: all .2s ease !important;\n            box-sizing: border-box !important;\n            margin: 0 !important;\n        }\n\n        .ext-wc-slider-item:hover {\n            box-shadow: 0 4px 12px rgba(0,0,0,0.1) !important;\n            border-color: #cbd5e1 !important;\n        }\n\n        .ext-wc-slider-item a {\n            text-decoration: none !important;\n            color: inherit !important;\n            display: block !important;\n            height: 100% !important;\n            padding: 14px !important;\n            box-sizing: border-box !important;\n        }\n\n        .ext-wc-slider-content {\n            display: flex !important;\n            flex-direction: row !important;\n            align-items: center !important;\n            gap: 14px !important;\n            height: 100% !important;\n        }\n\n        .ext-wc-slider-img {\n            width: 100px !important;\n            height: 90px !important;\n            flex-shrink: 0 !important;\n            display: flex !important;\n            align-items: center !important;\n            justify-content: center !important;\n            background: #f8fafc !important;\n            border-radius: 4px !important;\n            padding: 4px !important;\n        }\n\n        .ext-wc-slider-img img {\n            max-width: 100% !important;\n            max-height: 100% !important;\n            width: auto !important;\n            height: auto !important;\n            object-fit: contain !important;\n            display: block !important;\n        }\n\n        .ext-wc-slider-info {\n            display: flex !important;\n            flex-direction: column !important;\n            justify-content: center !important;\n            align-items: flex-start !important;\n            flex-grow: 1 !important;\n            min-width: 0 !important;\n        }\n\n        .ext-wc-slider-category {\n            font-size: 11px !important;\n            font-weight: 700 !important;\n            color: #005885 !important;\n            text-transform: uppercase !important;\n            letter-spacing: .6px !important;\n            margin-bottom: 4px !important;\n        }\n\n        .ext-wc-slider-title {\n            font-size: 13px !important;\n            font-weight: 700 !important;\n            color: #2d3748 !important;\n            line-height: 1.35 !important;\n            margin-bottom: 10px !important;\n            display: -webkit-box !important;\n            -webkit-line-clamp: 2 !important;\n            -webkit-box-orient: vertical !important;\n            overflow: hidden !important;\n            text-overflow: ellipsis !important;\n        }\n\n        .ext-wc-slider-btn {\n            display: inline-block !important;\n            padding: 4px 18px !important;\n            border: 1.5px solid #005885 !important;\n            color: #005885 !important;\n            background: transparent !important;\n            font-size: 12px !important;\n            font-weight: 600 !important;\n            border-radius: 2px !important;\n            transition: all .2s ease !important;\n        }\n\n        .ext-wc-slider-item:hover .ext-wc-slider-btn {\n            background: #005885 !important;\n            color: #ffffff !important;\n        }\n\n        @media (max-width: 768px) {\n            .ext-wc-slider-heading { font-size: 15px !important; }\n            .ext-wc-all-link { font-size: 11px !important; }\n            .ext-wc-slider-rel-container { padding: 0 10px !important; }\n            .ext-wc-slider-item {\n                flex: 0 0 280px !important;\n                min-width: 280px !important;\n                max-width: 280px !important;\n            }\n            .ext-wc-slider-img {\n                width: 80px !important;\n                height: 75px !important;\n            }\n            .ext-wc-slider-title {\n                font-size: 12px !important;\n                margin-bottom: 6px !important;\n            }\n            .ext-wc-slider-btn {\n                padding: 3px 12px !important;\n                font-size: 11px !important;\n            }\n            .ext-wc-arrow-prev { left: -6px !important; }\n            .ext-wc-arrow-next { right: -6px !important; }\n        }\n    <\/style>\n\n    <script>\n    document.addEventListener('DOMContentLoaded', function () {\n        const wrappers = document.querySelectorAll('.ext-wc-slider-rel-container');\n\n        wrappers.forEach(wrapper => {\n            const container = wrapper.querySelector('.ext-wc-slider-container');\n            const prevBtn = wrapper.querySelector('.ext-wc-arrow-prev');\n            const nextBtn = wrapper.querySelector('.ext-wc-arrow-next');\n\n            if (!container || !prevBtn || !nextBtn) return;\n\n            const itemsCount = container.querySelectorAll('.ext-wc-slider-item').length;\n\n            \/\/ Ekran geni\u015fli\u011fine g\u00f6re \u00fcr\u00fcn say\u0131s\u0131na bak: Masa\u00fcst\u00fcnde >= 3, Mobilde >= 2 ise g\u00f6ster\n            function checkArrowVisibility() {\n                const isMobile = window.innerWidth <= 768;\n                const minRequired = isMobile ? 2 : 3;\n\n                if (itemsCount < minRequired) {\n                    prevBtn.classList.add('ext-wc-arrow-hidden');\n                    nextBtn.classList.add('ext-wc-arrow-hidden');\n                } else {\n                    prevBtn.classList.remove('ext-wc-arrow-hidden');\n                    nextBtn.classList.remove('ext-wc-arrow-hidden');\n                }\n            }\n\n            checkArrowVisibility();\n            window.addEventListener('resize', checkArrowVisibility);\n\n            function getScrollAmount() {\n                return window.innerWidth <= 768 ? 296 : 376;\n            }\n\n            prevBtn.addEventListener('click', function () {\n                container.scrollBy({ left: -getScrollAmount(), behavior: 'smooth' });\n            });\n\n            nextBtn.addEventListener('click', function () {\n                container.scrollBy({ left: getScrollAmount(), behavior: 'smooth' });\n            });\n        });\n    });\n    <\/script>\n\n    <\/div><\/div><\/div><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":3,"featured_media":1929,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[60,17],"tags":[],"class_list":["post-1888","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai-cluster","category-generative-ai"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.3.1 (Yoast SEO v28.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Local AI Workspace with Odysseus on DGX Spark - OpenZeka EN Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.openzeka.com\/en\/local-ai-workspace-with-odysseus-on-dgx-spark\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Local AI Workspace with Odysseus on DGX Spark\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.openzeka.com\/en\/local-ai-workspace-with-odysseus-on-dgx-spark\/\" \/>\n<meta property=\"og:site_name\" content=\"OpenZeka EN Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/profile.php?id=61576911356211\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-19T13:09:19+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-20T05:51:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/Local-AI-Workspace-with-Odysseus.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Enhar\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@Aetherixnl\" \/>\n<meta name=\"twitter:site\" content=\"@Aetherixnl\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Enhar\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/local-ai-workspace-with-odysseus-on-dgx-spark\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/local-ai-workspace-with-odysseus-on-dgx-spark\\\/\"},\"author\":{\"name\":\"Enhar\",\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/#\\\/schema\\\/person\\\/62c964376839cf2c4b2eb682bf14d3cb\"},\"headline\":\"Local AI Workspace with Odysseus on DGX Spark\",\"datePublished\":\"2026-08-19T13:09:19+00:00\",\"dateModified\":\"2026-08-20T05:51:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/local-ai-workspace-with-odysseus-on-dgx-spark\\\/\"},\"wordCount\":5283,\"publisher\":{\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/local-ai-workspace-with-odysseus-on-dgx-spark\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/Local-AI-Workspace-with-Odysseus.webp\",\"articleSection\":[\"AI Cluster\",\"Generative AI\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/local-ai-workspace-with-odysseus-on-dgx-spark\\\/\",\"url\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/local-ai-workspace-with-odysseus-on-dgx-spark\\\/\",\"name\":\"Local AI Workspace with Odysseus on DGX Spark - OpenZeka EN Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/local-ai-workspace-with-odysseus-on-dgx-spark\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/local-ai-workspace-with-odysseus-on-dgx-spark\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/Local-AI-Workspace-with-Odysseus.webp\",\"datePublished\":\"2026-08-19T13:09:19+00:00\",\"dateModified\":\"2026-08-20T05:51:09+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/local-ai-workspace-with-odysseus-on-dgx-spark\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/local-ai-workspace-with-odysseus-on-dgx-spark\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/local-ai-workspace-with-odysseus-on-dgx-spark\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/Local-AI-Workspace-with-Odysseus.webp\",\"contentUrl\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/Local-AI-Workspace-with-Odysseus.webp\",\"width\":1920,\"height\":1080},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/local-ai-workspace-with-odysseus-on-dgx-spark\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Local AI Workspace with Odysseus on DGX Spark\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/\",\"name\":\"Aetherix B.V.\",\"description\":\"NVIDIA Jetson Developer Kits &amp;Edge Devices\",\"publisher\":{\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/#organization\",\"name\":\"Aetherix B.V.\",\"url\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/aetherix-site-icon.webp\",\"contentUrl\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/aetherix-site-icon.webp\",\"width\":421,\"height\":398,\"caption\":\"Aetherix B.V.\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/profile.php?id=61576911356211\",\"https:\\\/\\\/x.com\\\/Aetherixnl\",\"https:\\\/\\\/www.instagram.com\\\/aetherixnl\\\/\",\"https:\\\/\\\/www.tiktok.com\\\/@aetherixnl\"],\"description\":\"Aetherix provides a full range of NVIDIA Jetson-based edge AI solutions\u2014including Developer Kits, AI Kits, industrial-grade Carrier Boards, and fully integrated Boxed AI Systems.\",\"email\":\"info@aetherix.com\",\"legalName\":\"Aetherix B.V.\",\"vatID\":\"NL867727688B01\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blog.openzeka.com\\\/en\\\/#\\\/schema\\\/person\\\/62c964376839cf2c4b2eb682bf14d3cb\",\"name\":\"Enhar\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/189d567adce3bb0c8d438b4586bf861ec04980f2e451003975e3cf871781d0f4?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/189d567adce3bb0c8d438b4586bf861ec04980f2e451003975e3cf871781d0f4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/189d567adce3bb0c8d438b4586bf861ec04980f2e451003975e3cf871781d0f4?s=96&d=mm&r=g\",\"caption\":\"Enhar\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Local AI Workspace with Odysseus on DGX Spark - OpenZeka EN Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.openzeka.com\/en\/local-ai-workspace-with-odysseus-on-dgx-spark\/","og_locale":"en_US","og_type":"article","og_title":"Local AI Workspace with Odysseus on DGX Spark","og_url":"https:\/\/blog.openzeka.com\/en\/local-ai-workspace-with-odysseus-on-dgx-spark\/","og_site_name":"OpenZeka EN Blog","article_publisher":"https:\/\/www.facebook.com\/profile.php?id=61576911356211","article_published_time":"2026-08-19T13:09:19+00:00","article_modified_time":"2026-08-20T05:51:09+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/Local-AI-Workspace-with-Odysseus.webp","type":"image\/webp"}],"author":"Enhar","twitter_card":"summary_large_image","twitter_creator":"@Aetherixnl","twitter_site":"@Aetherixnl","twitter_misc":{"Written by":"Enhar","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.openzeka.com\/en\/local-ai-workspace-with-odysseus-on-dgx-spark\/#article","isPartOf":{"@id":"https:\/\/blog.openzeka.com\/en\/local-ai-workspace-with-odysseus-on-dgx-spark\/"},"author":{"name":"Enhar","@id":"https:\/\/blog.openzeka.com\/en\/#\/schema\/person\/62c964376839cf2c4b2eb682bf14d3cb"},"headline":"Local AI Workspace with Odysseus on DGX Spark","datePublished":"2026-08-19T13:09:19+00:00","dateModified":"2026-08-20T05:51:09+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.openzeka.com\/en\/local-ai-workspace-with-odysseus-on-dgx-spark\/"},"wordCount":5283,"publisher":{"@id":"https:\/\/blog.openzeka.com\/en\/#organization"},"image":{"@id":"https:\/\/blog.openzeka.com\/en\/local-ai-workspace-with-odysseus-on-dgx-spark\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/Local-AI-Workspace-with-Odysseus.webp","articleSection":["AI Cluster","Generative AI"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/blog.openzeka.com\/en\/local-ai-workspace-with-odysseus-on-dgx-spark\/","url":"https:\/\/blog.openzeka.com\/en\/local-ai-workspace-with-odysseus-on-dgx-spark\/","name":"Local AI Workspace with Odysseus on DGX Spark - OpenZeka EN Blog","isPartOf":{"@id":"https:\/\/blog.openzeka.com\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.openzeka.com\/en\/local-ai-workspace-with-odysseus-on-dgx-spark\/#primaryimage"},"image":{"@id":"https:\/\/blog.openzeka.com\/en\/local-ai-workspace-with-odysseus-on-dgx-spark\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/Local-AI-Workspace-with-Odysseus.webp","datePublished":"2026-08-19T13:09:19+00:00","dateModified":"2026-08-20T05:51:09+00:00","breadcrumb":{"@id":"https:\/\/blog.openzeka.com\/en\/local-ai-workspace-with-odysseus-on-dgx-spark\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.openzeka.com\/en\/local-ai-workspace-with-odysseus-on-dgx-spark\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.openzeka.com\/en\/local-ai-workspace-with-odysseus-on-dgx-spark\/#primaryimage","url":"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/Local-AI-Workspace-with-Odysseus.webp","contentUrl":"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2026\/08\/Local-AI-Workspace-with-Odysseus.webp","width":1920,"height":1080},{"@type":"BreadcrumbList","@id":"https:\/\/blog.openzeka.com\/en\/local-ai-workspace-with-odysseus-on-dgx-spark\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.openzeka.com\/en\/"},{"@type":"ListItem","position":2,"name":"Local AI Workspace with Odysseus on DGX Spark"}]},{"@type":"WebSite","@id":"https:\/\/blog.openzeka.com\/en\/#website","url":"https:\/\/blog.openzeka.com\/en\/","name":"Aetherix B.V.","description":"NVIDIA Jetson Developer Kits &amp;Edge Devices","publisher":{"@id":"https:\/\/blog.openzeka.com\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.openzeka.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/blog.openzeka.com\/en\/#organization","name":"Aetherix B.V.","url":"https:\/\/blog.openzeka.com\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.openzeka.com\/en\/#\/schema\/logo\/image\/","url":"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2025\/06\/aetherix-site-icon.webp","contentUrl":"https:\/\/blog.openzeka.com\/en\/wp-content\/uploads\/2025\/06\/aetherix-site-icon.webp","width":421,"height":398,"caption":"Aetherix B.V."},"image":{"@id":"https:\/\/blog.openzeka.com\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/profile.php?id=61576911356211","https:\/\/x.com\/Aetherixnl","https:\/\/www.instagram.com\/aetherixnl\/","https:\/\/www.tiktok.com\/@aetherixnl"],"description":"Aetherix provides a full range of NVIDIA Jetson-based edge AI solutions\u2014including Developer Kits, AI Kits, industrial-grade Carrier Boards, and fully integrated Boxed AI Systems.","email":"info@aetherix.com","legalName":"Aetherix B.V.","vatID":"NL867727688B01"},{"@type":"Person","@id":"https:\/\/blog.openzeka.com\/en\/#\/schema\/person\/62c964376839cf2c4b2eb682bf14d3cb","name":"Enhar","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/189d567adce3bb0c8d438b4586bf861ec04980f2e451003975e3cf871781d0f4?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/189d567adce3bb0c8d438b4586bf861ec04980f2e451003975e3cf871781d0f4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/189d567adce3bb0c8d438b4586bf861ec04980f2e451003975e3cf871781d0f4?s=96&d=mm&r=g","caption":"Enhar"}}]}},"_links":{"self":[{"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/posts\/1888","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/comments?post=1888"}],"version-history":[{"count":18,"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/posts\/1888\/revisions"}],"predecessor-version":[{"id":1948,"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/posts\/1888\/revisions\/1948"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/media\/1929"}],"wp:attachment":[{"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/media?parent=1888"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/categories?post=1888"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.openzeka.com\/en\/wp-json\/wp\/v2\/tags?post=1888"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}