{"id":50659327,"url":"https://github.com/jgoy-labs/server-nexe","last_synced_at":"2026-06-08T01:08:01.999Z","repository":{"id":344700390,"uuid":"1150103035","full_name":"jgoy-labs/server-nexe","owner":"jgoy-labs","description":"Local AI server with persistent memory, RAG, and multi-backend inference (MLX / llama.cpp / Ollama). Runs entirely on your machine — zero data sent to external services.","archived":false,"fork":false,"pushed_at":"2026-05-24T12:44:16.000Z","size":36117,"stargazers_count":9,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-24T14:26:59.516Z","etag":null,"topics":["ai","apple-silicon","embeddings","fastapi","llama-cpp","llm","local-ai","mlx","ollama","open-source","privacy","python","qdrant","rag","self-hosted","vector-database"],"latest_commit_sha":null,"homepage":"https://server-nexe.org","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jgoy-labs.png","metadata":{"files":{"readme":"README-ca.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":"THREAT_MODEL.md","audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"jgoy-labs","ko_fi":"servernexe","custom":["https://buy.stripe.com/14A6oHct34lN5x7fKNgQE00"]}},"created_at":"2026-02-04T22:10:33.000Z","updated_at":"2026-05-16T16:09:57.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jgoy-labs/server-nexe","commit_stats":null,"previous_names":["jgoy-labs/server-nexe"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/jgoy-labs/server-nexe","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jgoy-labs%2Fserver-nexe","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jgoy-labs%2Fserver-nexe/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jgoy-labs%2Fserver-nexe/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jgoy-labs%2Fserver-nexe/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jgoy-labs","download_url":"https://codeload.github.com/jgoy-labs/server-nexe/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jgoy-labs%2Fserver-nexe/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34043838,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-07T02:00:07.652Z","response_time":124,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","apple-silicon","embeddings","fastapi","llama-cpp","llm","local-ai","mlx","ollama","open-source","privacy","python","qdrant","rag","self-hosted","vector-database"],"created_at":"2026-06-08T01:08:01.325Z","updated_at":"2026-06-08T01:08:01.986Z","avatar_url":"https://github.com/jgoy-labs.png","language":"Python","funding_links":["https://github.com/sponsors/jgoy-labs","https://ko-fi.com/servernexe","https://buy.stripe.com/14A6oHct34lN5x7fKNgQE00"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\".github/logo.svg\" alt=\"server.nexe\" width=\"400\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eServidor d'IA local amb memòria persistent. Zero núvol. Control total.\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cem\u003eHe arribat al mínim viable per al món real, però falta feedback. 🚀\u003c/em\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/jgoy-labs/server-nexe/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://github.com/jgoy-labs/server-nexe/actions/workflows/ci.yml/badge.svg\" alt=\"CI\"\u003e\u003c/a\u003e\n  \u003cimg src=\".github/badges/coverage.svg\" alt=\"Coverage\"\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-Apache%202.0-blue\" alt=\"License\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.python.org\"\u003e\u003cimg src=\"https://img.shields.io/badge/python-3.11%2B-blue?logo=python\u0026logoColor=white\" alt=\"Python\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://fastapi.tiangolo.com\"\u003e\u003cimg src=\"https://img.shields.io/badge/FastAPI-0.115-009688?logo=fastapi\u0026logoColor=white\" alt=\"FastAPI\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://v2.tauri.app\"\u003e\u003cimg src=\"https://img.shields.io/badge/Tauri%20v2-desktop%20app-FFC131?logo=tauri\u0026logoColor=white\" alt=\"Tauri v2\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://qdrant.tech\"\u003e\u003cimg src=\"https://img.shields.io/badge/Qdrant-vector--db-dc244c?logo=qdrant\u0026logoColor=white\" alt=\"Qdrant\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/ml-explore/mlx\"\u003e\u003cimg src=\"https://img.shields.io/badge/MLX-Apple%20Silicon-000000?logo=apple\u0026logoColor=white\" alt=\"MLX\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://ollama.com\"\u003e\u003cimg src=\"https://img.shields.io/badge/Ollama-compatible-black?logo=ollama\u0026logoColor=white\" alt=\"Ollama\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/ggerganov/llama.cpp\"\u003e\u003cimg src=\"https://img.shields.io/badge/llama.cpp-GGUF-8B5CF6\" alt=\"llama.cpp\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/jgoy-labs/server-nexe\"\u003e\u003cimg src=\"https://img.shields.io/badge/RAG-local%20%7C%20private-22c55e\" alt=\"RAG\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/sponsors/jgoy-labs\"\u003e\u003cimg src=\"https://img.shields.io/badge/sponsor-♥-ea4aaa?logo=github-sponsors\u0026logoColor=white\" alt=\"Sponsor\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://server-nexe.org\"\u003e\u003cstrong\u003eDocumentació\u003c/strong\u003e\u003c/a\u003e ·\n  \u003ca href=\"#-inici-ràpid\"\u003e\u003cstrong\u003eInstal·lar\u003c/strong\u003e\u003c/a\u003e ·\n  \u003ca href=\"#-arquitectura\"\u003e\u003cstrong\u003eArquitectura\u003c/strong\u003e\u003c/a\u003e ·\n  \u003ca href=\"https://github.com/jgoy-labs/server-nexe/releases\"\u003e\u003cstrong\u003eReleases\u003c/strong\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"README.md\"\u003e\u003cstrong\u003eEnglish\u003c/strong\u003e\u003c/a\u003e ·\n  \u003ca href=\"README-es.md\"\u003e\u003cstrong\u003eEspañol\u003c/strong\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n\u003e **v1.0.6 — Enduriment de seguretat.** Server Nexe ara es distribueix com a aplicació d'escriptori Tauri v2 amb wizard d'onboarding, safata del sistema, i gestió automàtica del sidecar. Disponible com a **macOS DMG** (Apple Silicon) i **Linux AppImage** (ARM64). Veure [Releases](https://github.com/jgoy-labs/server-nexe/releases/latest).\n\u003e\n\u003e **Nota Linux:** provat a màquines virtuals Ubuntu 24.04 ARM64 (UTM). Inferència CPU (Ollama) verificada. Si proves en hardware natiu o amb acceleració GPU, si us plau [obre un issue](https://github.com/jgoy-labs/server-nexe/issues) amb els teus resultats.\n\n---\n\n## Taula de continguts\n\n- [La Història](#la-història)\n- [Captures](#captures)\n- [Per Què Server Nexe?](#per-què-server-nexe)\n- [Inici Ràpid](#inici-ràpid)\n  - [Opció A: App d'escriptori (macOS / Linux)](#opció-a-app-descriptori-macos--linux)\n  - [Opció B: Línia de comandes](#opció-b-línia-de-comandes)\n  - [Opció C: Headless (servidors, scripts, CI)](#opció-c-headless-servidors-scripts-ci)\n- [Backends](#backends)\n- [Models Disponibles per Tiers de RAM](#models-disponibles-per-tiers-de-ram)\n- [Arquitectura](#arquitectura)\n  - [Pipeline de processament de peticions](#pipeline-de-processament-de-peticions)\n- [Sistema de Plugins](#sistema-de-plugins)\n- [Documentació AI-Ready](#documentació-ai-ready)\n- [Seguretat](#seguretat)\n- [Suport de Plataformes](#suport-de-plataformes)\n- [Requisits](#requisits)\n- [Testing](#testing)\n- [Full de Ruta](#full-de-ruta)\n- [Limitacions](#limitacions)\n- [Contribuir](#contribuir)\n- [Agraïments](#agraïments)\n- [Avís Legal](#avís-legal)\n\n## La Història\n\nServer Nexe va començar com un experiment de learning-by-doing: *\"Què caldria per tenir una IA pròpia i en local amb memòria persistent?\"* Com que no faria un LLM, vaig començar a agafar peces per muntar un lego útil per a mi i el meu dia a dia. Una cosa en va portar una altra — backends d'inferència, pipelines RAG, cerca vectorial, sistemes de plugins, capes de seguretat, una interfície web, un instal·lador amb detecció de hardware.\n\n**Tot aquest projecte — codi, tests, auditories, documentació — ha estat construït per una persona orquestrant diferents models d'IA**, tant locals (MLX, Ollama) com al núvol (Claude, GPT, Gemini, DeepSeek, Qwen, Grok...), com a col·laboradors. L'humà decideix què construir, dissenya l'arquitectura, revisa línia i executa test. Les IAs escriuen, auditen i fan stress-test sota direcció humana.\n\nEl que va començar com un prototip s'ha convertit en un producte genuïnament útil: 5291 tests, auditories de seguretat, encriptació at-rest, un instal·lador macOS amb detecció de hardware, i un sistema de plugins. No està acabat — hi ha un roadmap ple d'idees — però ja fa el que es proposava: **executar un servidor d'IA a la teva màquina, amb memòria que persisteix, i zero dades sortint del teu dispositiu.**\n\nNo intenta competir amb ChatGPT ni Claude. Però sí pot ser complementari per a feines menys feixugues. És una eina open-source per a gent que vol ser propietària de la seva infraestructura d'IA. Construït per una persona a Barcelona, amb IA com a copilot, música, i tossuderia.\n\nMés tècnicament: el que era un **monstre d'espagueti gegant** va acabar destil·lant-se, refactor rere refactor, cap a un **nucli mínim, agnòstic de backend (MLX / llama.cpp / Ollama) i modular** — on la seguretat i la memòria estan resoltes a la base perquè construir a sobre sigui ràpid i còmode, en col·laboració humà–IA. Si s'ha aconseguit, ho ha de dir la comunitat (la IA diu que sí, però què vols que digui 🤪).\n\n## Captures\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\" align=\"center\"\u003e\n  \u003cimg src=\".github/screenshots/light.png\" alt=\"Web UI — mode clar\" /\u003e\n  \u003cbr/\u003e\u003cem\u003eWeb UI — mode clar\u003c/em\u003e\n\u003c/td\u003e\n\u003ctd width=\"50%\" align=\"center\"\u003e\n  \u003cimg src=\".github/screenshots/dark.png\" alt=\"Web UI — mode fosc\" /\u003e\n  \u003cbr/\u003e\u003cem\u003eWeb UI — mode fosc\u003c/em\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n## Per Què Server Nexe?\n\nLes teves converses, documents, embeddings i pesos dels models es queden a la teva màquina. Sempre. Server Nexe combina inferència LLM amb un **sistema de memòria RAG persistent** — la teva IA recorda context entre sessions, indexa els teus documents, i mai truca a casa.\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\"\u003e\n\n### Local i Privat\nCada conversa, document i embedding es queda al teu dispositiu durant l'execució. Sense telemetria, sense crides al núvol durant l'operació, cap servidor que t'espiï. La instal·lació inicial descarrega l'LLM triat i el model d'embeddings `fastembed` des de Hugging Face o Ollama — després, cap dada surt del dispositiu.\n\n\u003c/td\u003e\n\u003ctd width=\"50%\"\u003e\n\n### Memòria RAG Persistent\nRecorda context entre sessions usant cerca vectorial Qdrant amb embeddings de 768 dimensions en 3 col·leccions especialitzades: `personal_memory`, `user_knowledge`, `nexe_documentation`.\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\"\u003e\n\n### Memòria Automàtica (MEM_SAVE)\nEl model extreu fets de les converses automàticament — noms, feines, preferències, projectes — i els guarda a memòria dins la mateixa crida LLM, amb zero latència extra. Detecció d'intents trilingüe (ca/es/en), deduplicació semàntica, i esborrat per veu (\"oblida que...\").\n\n\u003c/td\u003e\n\u003ctd width=\"50%\"\u003e\n\n### Inferència Multi-Backend\nCanvia entre MLX (natiu Apple Silicon), llama.cpp (GGUF, universal), o Ollama — un canvi de config, mateixa API compatible amb OpenAI.\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\"\u003e\n\n### Sistema Modular de Plugins\nPlugins auto-descoberts amb manifests independents. Seguretat, web UI, RAG, backends — tot és un plugin. Afegeix capacitats sense tocar el core. Protocol NexeModule amb duck typing, sense herència.\n\n\u003c/td\u003e\n\u003ctd width=\"50%\"\u003e\n\n### App d'escriptori\nAplicació Tauri v2 per macOS (DMG) i Linux (AppImage). L'assistent d'onboarding detecta el teu hardware, tria el backend adequat, recomana models per la teva RAM, i et posa en marxa en minuts. Safata del sistema, menús natius, i gestió automàtica del sidecar.\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\"\u003e\n\n### Pujada de Documents amb Aïllament de Sessió\nPuja .txt, .md o .pdf i s'indexen automàticament per RAG. Cada document només és visible dins la sessió on s'ha pujat — sense contaminació creuada entre sessions.\n\n\u003c/td\u003e\n\u003ctd width=\"50%\"\u003e\n\n### Construït per Créixer\n5291 tests (~85% cobertura), auditoria de seguretat, i18n en 3 idiomes, API completa. El que va començar com un experiment es construeix amb pràctiques de producció.\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n## Inici Ràpid\n\n### Opció A: App d'escriptori (macOS / Linux)\n\nDescarrega l'últim paquet de **[Releases](https://github.com/jgoy-labs/server-nexe/releases/latest)**:\n\n| Plataforma | Paquet | Mida |\n|------------|--------|------|\n| macOS (Apple Silicon) | `nexe-app_1.0.6_aarch64.dmg` | ~1.3 GB |\n| Linux (ARM64) | `nexe-app_1.0.6_aarch64.AppImage` | ~1.2 GB |\n\nL'assistent d'onboarding ho gestiona tot: detecció de hardware, selecció de backend, descàrrega de model, i configuració. L'app executa server-nexe com a procés sidecar amb integració a la safata del sistema.\n\n### Opció B: Línia de comandes\n\n```bash\ngit clone https://github.com/jgoy-labs/server-nexe.git\ncd server-nexe\n./setup.sh      # instal·lació guiada (detecta hardware, tria backend i model)\nnexe go         # arrenca el servidor al port 9119\n```\n\nUn cop en marxa:\n\n```bash\nnexe chat               # xat interactiu (memòria RAG activa per defecte)\nnexe memory store \"Barcelona és la capital de Catalunya\"\nnexe memory recall \"capital Catalunya\"\nnexe status             # estat del sistema\n```\n\n### Opció C: Headless (servidors, scripts, CI)\n\n```bash\npython -m installer.install_headless --backend ollama --model qwen3.5:latest\nnexe go\n```\n\n**Endpoints a `http://localhost:9119`:**\n\n| Endpoint | Descripció |\n|----------|------------|\n| `/v1/chat/completions` | API de xat compatible amb OpenAI |\n| `/ui` | Interfície web (xat, pujada de fitxers, sessions) |\n| `/health` | Health check |\n| `/docs` | Documentació interactiva de l'API (Swagger) |\n\n\u003e Autenticació via header `X-API-Key`. La clau es genera durant la instal·lació i es guarda a `.env`.\n\n## Backends\n\n| Backend | Plataforma | Millor per a |\n|---------|-----------|-------------|\n| **MLX** | macOS (Apple Silicon) | Recomanat per Mac — acceleració GPU Metal nativa, el més ràpid en xips M |\n| **llama.cpp** | macOS / Linux | Universal — format GGUF, Metal a Mac, CPU/CUDA a Linux |\n| **Ollama** | macOS / Linux | Pont a instal·lacions Ollama existents, gestió de models més fàcil |\n\nL'instal·lador detecta automàticament el teu hardware i recomana el millor backend. Pots canviar en qualsevol moment a `personality/server.toml`.\n\n## Models Disponibles per Tiers de RAM\n\nL'instal·lador organitza els 14 models del catàleg per la RAM disponible al teu equip (4 tiers):\n\n| Tier | Models | Origen |\n|------|--------|--------|\n| **8 GB** | Qwen3.5 4B | Alibaba |\n| **16 GB** | Qwen3.5 9B, Gemma 4 E4B, Mistral Nemo 12B, Salamandra 7B | Alibaba, Google, Mistral AI, BSC/AINA |\n| **24 GB** | Qwen3.5 27B, Gemma 4 31B, Mistral Small 3.2 24B, GPT-OSS 20B | Alibaba, Google, Mistral AI, OpenAI |\n| **32 GB** | Qwen3.5 35B-A3B, Gemma 4 31B, Mixtral 8x7B, DeepSeek R1 32B, ALIA-40B | Alibaba, Google, Mistral AI, DeepSeek, BSC (Barcelona Supercomputing Center) |\n\nA més, pots usar qualsevol model d'Ollama pel seu nom o qualsevol model GGUF de Hugging Face.\n\n## Arquitectura\n\n```\nserver-nexe/\n├── core/                 # Servidor FastAPI, endpoints, CLI, config, mètriques, resiliència\n│   ├── endpoints/        # API REST (v1 chat, health, status, system)\n│   ├── cli/              # Comandes CLI i i18n (ca/es/en)\n│   └── resilience/       # Circuit breaker, rate limiting\n├── personality/          # Module manager, descobriment de plugins, server.toml\n│   ├── loading/          # Pipeline de càrrega de plugins (find, validate, import, lifecycle)\n│   └── module_manager/   # Descobriment, registre, config, sync\n├── memory/               # Embeddings, motor RAG, memòria vectorial, ingestió de documents\n│   ├── embeddings/       # Chunking, generació d'embeddings\n│   ├── rag/              # Pipeline de Retrieval-Augmented Generation\n│   └── memory/           # Vector store persistent (Qdrant)\n├── plugins/              # Mòduls plugin auto-descoberts\n│   ├── mlx_module/       # Backend MLX (Apple Silicon)\n│   ├── llama_cpp_module/ # Backend llama.cpp (GGUF)\n│   ├── ollama_module/    # Pont Ollama\n│   ├── security/         # Auth, detecció d'injecció, CSRF, rate limiting, sanitització d'input\n│   └── web_ui_module/    # Interfície de xat web amb pujada de fitxers\n├── installer/            # Instal·lador guiat, mode headless, detecció de hardware, catàleg de models\n├── knowledge/            # Documentació indexada per RAG (ca/es/en)\n└── tests/                # Suites de tests d'integració i e2e\n```\n\n### Pipeline de processament de peticions\n\n```mermaid\nflowchart LR\n    A[Petició] --\u003e B[Auth\u003cbr/\u003eX-API-Key]\n    B --\u003e C[Rate Limit\u003cbr/\u003eslowapi]\n    C --\u003e D[validate_string_input\u003cbr/\u003eparàmetre context]\n    D --\u003e E[RAG Recall\u003cbr/\u003e3 col·leccions]\n    E --\u003e F[_sanitize_rag_context\u003cbr/\u003efiltre d'injecció]\n    F --\u003e G[Inferència LLM\u003cbr/\u003eMLX/Ollama/llama.cpp]\n    G --\u003e H[Resposta Stream\u003cbr/\u003emarcadors SSE]\n    H --\u003e I[Parseig MEM_SAVE\u003cbr/\u003eextracció de fets]\n    I --\u003e J[Resposta\u003cbr/\u003eal client]\n```\n\n## Sistema de Plugins\n\nServer Nexe utilitza un protocol de duck typing (NexeModule Protocol) — sense herència de classes, sense BasePlugin. Cada plugin és un directori sota `plugins/` amb un `manifest.toml` i un `module.py`.\n\n**5 plugins actius:**\n\n| Plugin | Tipus | Característiques clau |\n|--------|-------|----------------------|\n| **mlx_module** | Backend LLM | Natiu Apple Silicon, prefix caching (trie), GPU Metal |\n| **llama_cpp_module** | Backend LLM | GGUF universal, ModelPool LRU, CPU/GPU |\n| **ollama_module** | Backend LLM | Pont HTTP a Ollama, auto-arrencada, neteja VRAM |\n| **security** | Core | Auth dual-key, 6 detectors d'injecció + NFKC, 47 patrons jailbreak, rate limiting, audit logging RFC5424 |\n| **web_ui_module** | Interfície | Xat web, sessions, pujada documents, MEM_SAVE, sanitització RAG, i18n |\n\n## Documentació AI-Ready\n\nLa carpeta `knowledge/` conté 14 documents temàtics × 3 idiomes = 42 fitxers, estructurats amb frontmatter YAML per a ingestió RAG:\n\nAPI, Arquitectura, Casos d'ús, Errors, Identitat, Instal·lació, Limitacions, Plugins, RAG, README, Seguretat, Testing, Threat Model, Ús.\n\nApunta qualsevol assistent d'IA a aquest repo i pot entendre l'arquitectura completa.\n\n| Idioma | Enllaç |\n|--------|--------|\n| Català | [knowledge/ca/README.md](knowledge/ca/README.md) |\n| Anglès | [knowledge/en/README.md](knowledge/en/README.md) |\n| Castellà | [knowledge/es/README.md](knowledge/es/README.md) |\n\n## Seguretat\n\nServer Nexe inclou un mòdul de seguretat activat per defecte:\n\n- **Autenticació per clau API** a tots els endpoints\n- **Capçaleres CSP** (`script-src 'self'` sense `unsafe-inline`; `style-src 'self' 'unsafe-inline'` per a la Web UI)\n- **Protecció CSRF** amb validació de token\n- **Rate limiting** per endpoint (20/min xat, 5/min upload)\n- **Sanitització d'input** — 6 detectors d'injecció + normalització Unicode (NFKC)\n- **Detecció de jailbreak** — 47 patrons speed-bump (v0.9.1)\n- **Denylist de pujades** — bloqueja pujada accidental de claus API, claus PEM (v0.9.1)\n- **Protecció d'injecció de memòria** — stripping de tags a tots els camins d'entrada (v0.9.1)\n- **Enforcement de pipeline** — tot el xat passa pels endpoints canònics (v0.9.1)\n- **Encriptació at-rest** — AES-256-GCM, SQLCipher. Default `auto`: encriptat quan `sqlcipher3` és disponible (el DMG l'inclou), text pla amb `WARNING` a l'arrencada en cas contrari. Estableix `NEXE_ENCRYPTION_ENABLED=true` per mode fail-closed estricte (v0.9.2+)\n- **Trusted host middleware**\n\n\u003e **Nota:** Aquest projecte no ha estat testejat en producció amb usuaris reals. Les auditories de seguretat han estat fetes per IA, no per auditors professionals. Consulta [SECURITY.md](SECURITY.md) per al disclosure complet i l'informe de vulnerabilitats.\n\n## Suport de Plataformes\n\n| Plataforma | Estat | Backends |\n|-----------|-------|----------|\n| macOS Apple Silicon (M1+) | **Suportat** — tots 3 backends | MLX, llama.cpp, Ollama |\n| macOS Intel | **No suportat** des de v0.9.9 | — |\n| macOS 13 Ventura o anterior | **No suportat** des de v0.9.9 (requereix macOS 14 Sonoma+) | — |\n| Linux x86_64 | **Parcial** — tests unitaris passen, CI verd, **NO testejat en producció** | llama.cpp, Ollama |\n| Linux ARM64 | No testejat directament | llama.cpp, Ollama (teòric) |\n| Windows | No suportat | — |\n\n\u003e Des de v0.9.9, server-nexe requereix **macOS 14 Sonoma+ amb Apple Silicon (M1 o superior)**. Els wheels pre-construïts al DMG són `arm64` exclusius. Linux amb els backends llama.cpp i Ollama hauria de funcionar però l'auditoria completa de compatibilitat està al roadmap.\n\n## Requisits\n\n| | Mínim | Recomanat |\n|---|-------|-----------|\n| **SO** | macOS 14 Sonoma+ (Apple Silicon only) | macOS 14+ amb xip M-series recent |\n| **Python** | 3.11+ | 3.12+ |\n| **RAM** | 8 GB | 16 GB+ (per a models més grans) |\n| **Disc** | 10 GB lliure | 20 GB+ lliure (DMG offline bundled ~1.2 GB) |\n\n## Testing\n\n5291 tests (~85% cobertura honest). El CI executa la suite completa a cada push.\n\n```bash\n# Tests unitaris\npytest core memory personality plugins -m \"not integration and not e2e and not slow\" \\\n  --cov=core --cov=memory --cov=personality --cov=plugins \\\n  --cov-report=term --tb=short -q\n\n# Tests d'integració (requereix Ollama en marxa)\nNEXE_AUTOSTART_OLLAMA=true pytest -m \"integration\" -q\n```\n\n## Full de Ruta\n\nServer Nexe està en desenvolupament actiu. Pròximament:\n\n- [x] Memòria persistent amb RAG (v0.9.0)\n- [x] Encriptació at-rest — AES-256-GCM, default `auto`; fail-closed estricte via `NEXE_ENCRYPTION_ENABLED=true` (v0.9.0/v0.9.2)\n- [x] Signatura de codi macOS i notarització (v0.9.0)\n- [x] Hardening de seguretat — detecció jailbreak, denylist uploads, enforcement pipeline (v0.9.1)\n- [x] Embeddings `fastembed` ONNX — PyTorch eliminat (v0.9.3)\n- [x] Suport multimodal VLM — imatges via backends Ollama, llama.cpp i MLX (v0.9.7)\n- [x] VLM detector 3-signal + streaming + mlx-vlm 0.4.4 (v0.9.8)\n- [x] Precomputed KB embeddings — arrencada 10.7× més ràpida (v0.9.8)\n- [x] RAG injection sanitization + CLEAR_ALL 2-turn confirm (v0.9.9)\n- [x] Instal·lació offline 100% — DMG ~1.2 GB amb wheels + embedding bundled (v0.9.9+)\n- [x] Thinking toggle per sessió — endpoint `PATCH /ui/session/{id}/thinking` (v0.9.9+)\n- [x] App d'escriptori (Tauri v2) — macOS DMG + Linux AppImage, wizard d'onboarding, safata del sistema (v1.0.6)\n- [ ] Paràmetres d'inferència configurables via UI\n- [ ] Fòrum de comunitat\n\nConsulta [CHANGELOG.md](CHANGELOG.md) per a l'historial de versions.\n\n## Limitacions\n\nDisclosure honest del que server Nexe **no** fa o no fa bé:\n\n- **Models locals \u003c núvol** — Els models locals són menys capaços que GPT-4 o Claude. Aquesta és la contrapartida de la privacitat.\n- **RAG no és perfecte** — Homonímia, negacions, inici en fred (memòria buida), i informació contradictòria entre períodes.\n- **API parcialment compatible amb OpenAI** — `/v1/chat/completions` funciona. Falten `/v1/embeddings`, `/v1/models`, function calling, i multimodal.\n- **Un sol usuari** — Disseny mono-usuari per arquitectura. Sense multi-device sync, sense comptes.\n- **Sense fine-tuning** — No es poden entrenar ni ajustar models.\n- **Encriptació nova** — Afegida a v0.9.0 (default `auto` des de v0.9.2; fail-closed estricte només quan `NEXE_ENCRYPTION_ENABLED=true`). No provada en batalla. Si perds la clau mestra, les dades no es recuperen (veure fallback MEK: file → keyring → env → generate).\n- **Un sol desenvolupador, un sol usuari real** — Projecte personal open-source, no producte enterprise.\n\nConsulta [knowledge/ca/LIMITATIONS.md](knowledge/ca/LIMITATIONS.md) per al detall complet.\n\n## Contribuir\n\nConsulta [CONTRIBUTING.md](CONTRIBUTING.md) per a les instruccions de setup i les guies de contribució.\n\n## Agraïments\n\nserver-nexe està construït sobre les espatlles d'aquests projectes open-source:\n\n**IA i Inferència**\n- [MLX](https://github.com/ml-explore/mlx) — Framework ML natiu per Apple Silicon\n- [llama.cpp](https://github.com/ggerganov/llama.cpp) — Inferència eficient de models GGUF\n- [Ollama](https://ollama.ai) — Gestió i servei de models locals\n- [fastembed](https://github.com/qdrant/fastembed) — Embeddings ONNX locals sense PyTorch (principal des de v0.9.3)\n- [sentence-transformers](https://www.sbert.net) — Models d'embeddings de text (històric, substituït per fastembed a v0.9.3)\n- [Hugging Face](https://huggingface.co) — Hub de models i llibreria transformers\n\n**Infraestructura**\n- [Qdrant](https://qdrant.tech) — Motor de cerca vectorial que alimenta la memòria RAG\n- [FastAPI](https://fastapi.tiangolo.com) — Framework web async d'alt rendiment\n- [Uvicorn](https://www.uvicorn.org) — Servidor ASGI\n- [Pydantic](https://docs.pydantic.dev) — Validació de dades\n\n**Eines i Llibreries**\n- [Rich](https://github.com/Textualize/rich) — Formatació bonica per terminal\n- [marked.js](https://marked.js.org) — Renderització Markdown a la web UI\n- [PyPDF](https://github.com/py-pdf/pypdf) — Extracció de text de PDFs per RAG\n- [rumps](https://github.com/jaredks/rumps) — Integració amb la barra de menú de macOS\n\n**Seguretat i Monitoratge**\n- [Prometheus](https://prometheus.io) — Mètriques i monitoratge\n- [SlowAPI](https://github.com/laurentS/slowapi) — Rate limiting\n\nEl 20% dels patrocinis Enterprise van directament a donar suport a aquests projectes.\n\nConstruït amb col·laboració d'IA · Barcelona\n\n## Avís Legal\n\nAquest software es proporciona **\"tal com és\"**, sense cap mena de garantia. Utilitza'l sota el teu propi risc. L'autor no és responsable de cap dany, pèrdua de dades, incidents de seguretat, o mal ús derivat de l'ús d'aquest software.\n\nConsulta [LICENSE](LICENSE) per als detalls.\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eVersió 1.0.6\u003c/strong\u003e · Apache 2.0 · Fet per \u003ca href=\"https://www.jgoy.net\"\u003eJordi Goy\u003c/a\u003e a Barcelona\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjgoy-labs%2Fserver-nexe","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjgoy-labs%2Fserver-nexe","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjgoy-labs%2Fserver-nexe/lists"}