{"id":172,"library":"txtai","title":"txtai","description":"All-in-one AI framework: embeddings database, semantic search, LLM orchestration, RAG, pipelines and agents. Current version: 9.7.0 (Mar 2026). TWO packages on PyPI: 'txtai' (full local library) and 'txtai.py' (thin API client for remote txtai server). Most tutorials use the full 'txtai' package. Core API: Embeddings class. index() rebuilds entire index. upsert() adds/updates without full rebuild. Content storage must be enabled for SQL queries and content retrieval.","status":"active","version":"9.7.0","language":"python","source_language":"en","source_url":"https://github.com/neuml/txtai","tags":["txtai","embeddings","semantic-search","rag","vector-database","llm","python"],"install":[{"cmd":"pip install txtai","lang":"bash","label":"Python (full local library — minimal deps)"},{"cmd":"pip install txtai[all]","lang":"bash","label":"Python (all optional deps — pipelines, API, etc.)"},{"cmd":"pip install txtai[api]","lang":"bash","label":"Python (with FastAPI server)"},{"cmd":"pip install txtai.py","lang":"bash","label":"Python (thin client for remote txtai API server)"}],"dependencies":[{"reason":"Required for local model inference. Not installed by default — install separately or via txtai[model].","package":"torch","optional":true},{"reason":"Required for sentence embedding models. Install via txtai[similarity].","package":"sentence-transformers","optional":true},{"reason":"Default ANN backend. Installed automatically with txtai.","package":"faiss-cpu","optional":false}],"imports":[{"note":"index() rebuilds the entire index from scratch — calling it again wipes previous data. Use upsert() to add/update without full rebuild. search() returns (id, score) tuples by default, not text.","wrong":"from txtai import Embeddings\n\nembeddings = Embeddings()\nembeddings.index(['doc 1', 'doc 2'])\n\n# Wrong: index() again REPLACES the entire index\nembeddings.index(['doc 3'])  # doc 1 and doc 2 are now gone\n\n# Wrong: expecting text back from search without content storage\ntext = embeddings.search('query', 1)[0][0]  # returns id (int), not text","symbol":"Embeddings (basic semantic search)","correct":"from txtai import Embeddings\n\n# Default model (all-MiniLM-L6-v2)\nembeddings = Embeddings()\n\n# Or specify model explicitly\nembeddings = Embeddings(path='sentence-transformers/all-MiniLM-L6-v2')\n\n# index() — builds NEW index, overwrites existing\nembeddings.index(['Correct answer', 'Wrong answer', 'Maybe'])\n\n# search returns list of (id, score) tuples\nresults = embeddings.search('positive', 1)\nprint(results)  # [(0, 0.298)] — id=0 is 'Correct answer'"},{"note":"Without content=True, search returns (id, score) tuples only. Enable content=True to store and retrieve document text. SQL queries also require content=True.","wrong":"# Without content=True, search only returns (id, score)\nembeddings = Embeddings()\nembeddings.index(['text 1', 'text 2'])\nresults = embeddings.search('query', 1)\nprint(results[0]['text'])  # KeyError — no text in result","symbol":"Embeddings with content storage","correct":"from txtai import Embeddings\n\n# Enable content storage to retrieve text from search results\nembeddings = Embeddings(content=True)\n\n# Index with dict documents\nembeddings.index([\n    {'id': 0, 'text': 'Python is a programming language'},\n    {'id': 1, 'text': 'JavaScript runs in browsers'},\n    {'id': 2, 'text': 'Rust is fast and safe'},\n])\n\n# Now search returns dicts with text\nresults = embeddings.search('compiled language', 1)\nprint(results[0]['text'])  # 'Rust is fast and safe'\n\n# Can also use SQL\nresults = embeddings.search(\n    \"SELECT text, score FROM txtai WHERE similar('web language') LIMIT 1\"\n)"}],"quickstart":{"code":"# pip install txtai\nfrom txtai import Embeddings\n\n# Create embeddings with content storage\nembeddings = Embeddings(\n    path='sentence-transformers/all-MiniLM-L6-v2',\n    content=True\n)\n\n# Index documents\nembeddings.index([\n    {'id': 0, 'text': 'Python is a programming language created by Guido'},\n    {'id': 1, 'text': 'JavaScript is used for web development'},\n    {'id': 2, 'text': 'Rust provides memory safety without garbage collection'},\n    {'id': 3, 'text': 'Go is designed for cloud infrastructure'},\n])\n\n# Semantic search — returns dicts with text\nresults = embeddings.search('systems programming language', 2)\nfor r in results:\n    print(r['text'], r['score'])\n\n# Upsert — add without rebuilding\nembeddings.upsert([{'id': 4, 'text': 'TypeScript adds types to JavaScript'}])\n\n# Save and load\nembeddings.save('/tmp/myindex')\nembeddings.load('/tmp/myindex')","lang":"python","description":"txtai Embeddings with content storage, search, upsert, save/load."},"warnings":[{"fix":"For local use: pip install txtai. For connecting to a remote txtai API server: pip install txtai.py","message":"Two packages on PyPI: 'txtai' (full library) and 'txtai.py' (thin API client). They have different APIs. 'pip install txtai.py' installs a client that connects to a remote txtai server — not the local library.","severity":"breaking","affected_versions":"all"},{"fix":"Use upsert() to add/update documents without full rebuild. Use index() only for initial load or full re-index.","message":"index() replaces the entire index. Calling it twice means the first index is gone. LLMs commonly generate code that calls index() multiple times to 'add' documents.","severity":"breaking","affected_versions":"all"},{"fix":"Enable Embeddings(content=True) to store and retrieve text from search results.","message":"search() returns (id, score) tuples by default — not document text. Accessing result['text'] raises KeyError without content=True enabled.","severity":"breaking","affected_versions":"all"},{"fix":"Always set content=True if you need SQL queries, text retrieval, or metadata filtering.","message":"SQL queries and content retrieval require content=True at index creation time. Cannot be enabled after index is built without re-indexing.","severity":"gotcha","affected_versions":"all"},{"fix":"For RAG/LLM workflows: pip install txtai[all]. For just semantic search: pip install txtai[similarity].","message":"Base 'pip install txtai' has minimal deps. Most useful features (pipelines, LLM, API server) require extras: txtai[pipeline-text], txtai[api], txtai[all].","severity":"gotcha","affected_versions":"all"},{"fix":"Pre-download model: embeddings = Embeddings(path='/local/model/path'). Or set HF_HUB_OFFLINE=1 with a cached model.","message":"Default model downloads from Hugging Face Hub on first use — requires internet access and ~100MB download. Fails in air-gapped environments.","severity":"gotcha","affected_versions":"all"},{"fix":"pip install txtai[agent] for agent support.","message":"Agents (added in v8) are built on smolagents framework — requires pip install txtai[agent]. Earlier versions used transformers agents which had different API.","severity":"gotcha","affected_versions":">= 8.0"},{"fix":"Install necessary build tools in the environment before attempting to install txtai. For Alpine Linux, this typically involves `apk add build-base python3-dev`.","message":"Installation of txtai (and its dependencies that require compilation, such as scikit-learn, hnswlib, annoy, fasttext) may fail in minimal environments (e.g., Alpine Linux) due to missing build tools. These packages often require a C/C++ compiler to build native extensions.","severity":"breaking","affected_versions":"all"}],"env_vars":null,"last_verified":"2026-05-12T09:32:17.155Z","next_check":"2026-06-25T00:00:00.000Z","problems":[{"fix":"pip install txtai","cause":"The `txtai` library has not been installed in the current Python environment or the environment is not active.","error":"ModuleNotFoundError: No module named 'txtai'"},{"fix":"Initialize `Embeddings` with `content=True`, e.g., `Embeddings(config={'content': True})`.","cause":"The `Embeddings` index was initialized without enabling content storage, preventing content retrieval or SQL queries.","error":"ValueError: content must be enabled to save content"},{"fix":"Verify the model name and internet connectivity, ensure sufficient disk space, or clear the Hugging Face cache (usually `~/.cache/huggingface/hub`) if a corrupted download is suspected.","cause":"The specified `sentence-transformers` model cannot be loaded, possibly due to a network issue, a typo in the model name, insufficient disk space, or a corrupted local cache.","error":"OSError: Can't load tokenizer for 'sentence-transformers/all-MiniLM-L6-v2'. If you were trying to load it from 'https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2', make sure you don't have a local directory with the same name."},{"fix":"Use `embeddings.index(data)` to rebuild the index or `embeddings.upsert(data)` to add/update existing data.","cause":"The `Embeddings` object in `txtai` does not have an `add` method; data is added using `index` or `upsert`.","error":"AttributeError: 'txtai.embeddings.Embeddings' object has no attribute 'add'"},{"fix":"Wrap the input data in a list, even if it's a single item, e.g., `embeddings.index([\"text_item\"])` or `embeddings.upsert([(\"id1\", \"text_item\", None)])`.","cause":"The `embeddings.index()` or `embeddings.upsert()` method expects the `data` argument to be a list of items, but a single string (or other non-iterable object) was provided.","error":"TypeError: 'str' object is not iterable"}],"ecosystem":"pypi","meta_description":null,"install_score":0,"install_tag":"stale","quickstart_score":0,"quickstart_tag":"stale","pypi_latest":null,"install_checks":{"last_tested":"2026-05-12","tag":"stale","tag_description":"widespread failures or data too old to trust","results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"all","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"api","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":20.05,"mem_mb":159.3,"disk_size":"4.8G"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"all","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"api","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"all","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"api","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":22.76,"mem_mb":177.7,"disk_size":"4.9G"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"all","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"api","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":22.84,"mem_mb":182.6,"disk_size":"5.0G"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"all","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"api","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":24.01,"mem_mb":172.4,"disk_size":"4.9G"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"all","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"api","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":25.87,"mem_mb":176.5,"disk_size":"5.0G"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"all","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"api","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":21.43,"mem_mb":175.7,"disk_size":"4.9G"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"all","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"api","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":23.23,"mem_mb":181.4,"disk_size":"5.0G"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"all","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"api","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"all","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"api","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null}]},"quickstart_checks":{"last_tested":"2026-04-23","tag":"stale","tag_description":"widespread failures or data too old to trust","results":[{"runtime":"python:3.10-alpine","exit_code":1},{"runtime":"python:3.10-slim","exit_code":-1},{"runtime":"python:3.11-alpine","exit_code":1},{"runtime":"python:3.11-slim","exit_code":-1},{"runtime":"python:3.12-alpine","exit_code":1},{"runtime":"python:3.12-slim","exit_code":-1},{"runtime":"python:3.13-alpine","exit_code":0},{"runtime":"python:3.13-slim","exit_code":-1},{"runtime":"python:3.9-alpine","exit_code":1},{"runtime":"python:3.9-slim","exit_code":-1}]}}