| # Acknowledgments |
|
|
| Odysseus stands on the shoulders of a lot of open-source work. This file |
| credits the projects whose code, assets, or designs are included in or |
| adapted by this repository, and notes their licenses. |
|
|
| If you believe something here is mis-attributed or missing, please open an |
| issue — it will be corrected promptly. |
|
|
| --- |
|
|
| ## Adapted / borrowed code |
|
|
| Portions of this project were adapted from other open-source repositories. |
| Their original authors retain copyright over the adapted portions, under the |
| licenses noted below. |
|
|
| The sources below are under permissive licenses (MIT / Apache-2.0), which permit |
| this use as long as their original copyright and license notices are preserved. |
| The full license texts are kept in [`licenses/`](licenses/). |
|
|
| - **[opencode](https://github.com/anomalyco/opencode)** — open-source AI coding |
| agent (originally [opencode-ai/opencode](https://github.com/opencode-ai/opencode), |
| archived Sep 2025; now maintained at `anomalyco/opencode`). Copyright © the |
| opencode authors. **MIT License.** Adapted for agent-loop / tool-execution |
| patterns and UI concepts. |
| - **[llmfit](https://github.com/AlexsJones/llmfit)** by **Alex Jones** — the |
| engine behind the Cookbook's model download / serve / "What Fits?" feature. |
| Copyright © Alex Jones. **MIT License.** Adapted in `services/hwfit/` |
| (hardware detection, quant-aware fit scoring, model catalog), |
| `routes/cookbook_*.py`, `routes/hwfit_routes.py`, `static/js/cookbook*.js`, |
| and `scripts/odysseus-cookbook`. |
| - **[Tongyi DeepResearch](https://github.com/Alibaba-NLP/DeepResearch)** by |
| **Alibaba-NLP / Tongyi Lab** — the multi-step deep-research agent pipeline. |
| Copyright © Alibaba-NLP / Tongyi Lab. **Apache-2.0.** Adapted for Odysseus's |
| Deep Research feature (`services/research/`, `src/research_handler.py`, |
| `routes/research_routes.py`, `services/search/`). Full text in |
| [`licenses/DeepResearch-Apache-2.0.txt`](licenses/DeepResearch-Apache-2.0.txt). |
|
|
| --- |
|
|
| ## Bundled via Docker Compose |
|
|
| These services are pulled as images by the project's `docker-compose.yml` |
| and run alongside Odysseus on `docker compose up`. They are not modified — |
| just composed. |
|
|
| | Service | Image | Purpose | License | |
| |---|---|---|---| |
| | [SearXNG](https://github.com/searxng/searxng) | `searxng/searxng:2026.5.31-7159b8aed` (pinned tag; see compose) | Default metasearch backend | AGPL-3.0 | |
| | [ChromaDB](https://github.com/chroma-core/chroma) | `chromadb/chroma:latest` | Vector store for memory / RAG | Apache-2.0 | |
| | [ntfy](https://github.com/binwiederhier/ntfy) | `binwiederhier/ntfy` | Push notifications (self-hosted reminders) | Apache-2.0 / GPL-2.0 | |
|
|
| ## Bundled front-end libraries |
|
|
| Vendored in `static/lib/` and served directly: |
|
|
| | Library | Purpose | License | |
| |---|---|---| |
| | [highlight.js](https://github.com/highlightjs/highlight.js) v11.9.0 | Code syntax highlighting | BSD-3-Clause | |
| | [SheetJS / xlsx](https://github.com/SheetJS/sheetjs) (`xlsx.full.min.js`) | Spreadsheet (`.xlsx`) read/write | Apache-2.0 | |
| | [docx](https://github.com/dolanmiu/docx) (`docx.umd.min.js`) | Generate `.docx` documents | MIT | |
| | [mammoth.js](https://github.com/mwilliamson/mammoth.js) | Convert `.docx` → HTML | BSD-2-Clause | |
| | [html2pdf.js](https://github.com/eKoopmans/html2pdf.js) | HTML → PDF export (bundles jsPDF + html2canvas) | MIT | |
| | [jsPDF](https://github.com/parallax/jsPDF) (bundled in html2pdf) | PDF generation | MIT | |
| | [html2canvas](https://github.com/niklasvh/html2canvas) (bundled in html2pdf) | DOM → canvas rasterization | MIT | |
| | [node-qrcode](https://github.com/soldair/node-qrcode) (`qrcode.min.js`) | QR-code rendering (2FA setup) | MIT | |
|
|
| ## Front-end libraries loaded at runtime (CDN) |
|
|
| Referenced from `cdn.jsdelivr.net` / `cdnjs.cloudflare.com` at runtime — not vendored: |
|
|
| | Library | Purpose | License | |
| |---|---|---| |
| | [KaTeX](https://github.com/KaTeX/KaTeX) 0.16.22 | Math typesetting | MIT | |
| | [Mermaid](https://github.com/mermaid-js/mermaid) 11 | Diagrams from text | MIT | |
| | [Pyodide](https://github.com/pyodide/pyodide) 0.27.5 | In-browser Python runtime | MPL-2.0 | |
| | [PDFObject](https://github.com/pipwerks/PDFObject) 2.1.1 | Inline PDF embedding | MIT | |
|
|
| ## Fonts |
|
|
| Bundled in `static/fonts/`: |
|
|
| | Font | License | Author | |
| |---|---|---| |
| | [Fira Code](https://github.com/tonsky/FiraCode) | SIL Open Font License 1.1 | Nikita Prokopov & contributors | |
| | [Inter](https://github.com/rsms/inter) | SIL Open Font License 1.1 | Rasmus Andersson | |
| | [GohuFont](https://font.gohu.org/) (`fonts/custom/GohuFont.ttf`) | WTFPL | Hugo Chargois | |
|
|
| ## Python dependencies |
|
|
| Core (`requirements.txt`) and optional (`requirements-optional.txt`): |
|
|
| | Package | License | |
| |---|---| |
| | FastAPI | MIT | |
| | Uvicorn | BSD-3-Clause | |
| | python-multipart | Apache-2.0 | |
| | python-dotenv | BSD-3-Clause | |
| | HTTPX | BSD-3-Clause | |
| | Pydantic / pydantic-settings | MIT | |
| | SQLAlchemy | MIT | |
| | pypdf | BSD-3-Clause | |
| | BeautifulSoup4 | MIT | |
| | charset-normalizer | MIT | |
| | NumPy | BSD-3-Clause | |
| | ChromaDB (chromadb-client) | Apache-2.0 | |
| | fastembed | Apache-2.0 | |
| | youtube-transcript-api | MIT | |
| | markdown | BSD-3-Clause | |
| | icalendar | BSD-2-Clause | |
| | caldav | GPL-3.0-or-later OR Apache-2.0 (dual; used under Apache-2.0) | |
| | cryptography | Apache-2.0 / BSD-3-Clause | |
| | bcrypt | Apache-2.0 | |
| | MCP (Model Context Protocol SDK) | MIT | |
| | pyotp | MIT | |
| | qrcode\[pil] | BSD-3-Clause | |
| | croniter | MIT | |
| | pytest / pytest-asyncio | MIT / Apache-2.0 | |
| | duckduckgo-search (optional) | MIT | |
| | markitdown (optional — Office/EPUB text extraction) | MIT | |
| | **PyMuPDF** *(optional — form-filling only)* | **AGPL-3.0** — see note below | |
|
|
| ## Companion services (interoperated with, not bundled) |
|
|
| Odysseus talks to these over the network/API. They are **not** distributed |
| with this project; their licenses do not bind this codebase, but they deserve |
| credit: |
|
|
| - [Ollama](https://github.com/ollama/ollama) — local model serving (MIT) |
| - [Radicale](https://github.com/Kozea/Radicale) — CardDAV/CalDAV server (GPL-3.0) |
| - [Dovecot](https://www.dovecot.org/) — IMAP server |
| - [isync / mbsync](https://isync.sourceforge.io/) — IMAP mailbox sync (GPL-2.0) |
| - [tmux](https://github.com/tmux/tmux) — terminal multiplexer; Cookbook shells out to it on Linux/macOS for background model downloads and serves (ISC) |
| - [OpenSSH](https://www.openssh.com/) (`ssh`, `ssh-keygen`, `ssh-copy-id`) — Cookbook shells out to it to manage remote model servers and provision keys (BSD-style permissive) |
| - Model/API providers: Anthropic, OpenAI, Google (Gemini), DuckDuckGo |
|
|
| --- |
|
|
| ### License-compatibility notes (for the repo's own LICENSE choice) |
|
|
| The **core ships fully permissive** (MIT-compatible), so the two copyleft |
| concerns from earlier are resolved: |
|
|
| - **PDF text extraction** now uses **`pypdf`** (BSD-3-Clause) and **encoding |
| detection** uses **`charset-normalizer`** (MIT). chardet (LGPL-2.1) has been |
| removed entirely. |
| - **PyMuPDF (AGPL-3.0)** is no longer a core dependency. It is **optional** and |
| used *only* by the PDF form-filling feature (`src/pdf_forms.py` and the form |
| endpoints in `routes/document_routes.py`), lazy-imported and listed in |
| `requirements-optional.txt`. The MIT core runs without it. If you choose to |
| install it, AGPL's network clause then applies to *that feature* for your |
| deployment (Artifex also sells a commercial PyMuPDF license that lifts this). |
| - **`caldav`** (Python lib) is **dual-licensed GPL-3.0-or-later OR Apache-2.0**. |
| Odysseus uses it under **Apache-2.0**, which is permissive and MIT-compatible. |
| - **`markitdown`** (Microsoft) is **MIT** and used only as an *optional* dependency for Office/EPUB text |
| extraction (`src/markitdown_runtime.py`), lazy-imported with graceful fallback — the MIT core runs without |
| it. The cloud `az-doc-intel` extra is deliberately **not** installed, keeping extraction fully local. |
|
|
| --- |
|
|
| ## Thanks to |
|
|
| Most of Odysseus's code was written *with* AI models, not just by a human. |
| The project would not exist without them — credit where credit is due: |
|
|
| - **gpt-oss-120b** — the legend that kicked this project off. |
| - **Qwen3-235B** |
| - **DeepSeek V3.1 · DeepSeek V4 Pro · DeepSeek V4 Flash** |
| - **Claude** (Anthropic) |
| - **Codex** (OpenAI) |
| - Friends, for helping me debug. |
|
|