Deploy LlamaIndex as a standalone Python application.
mkdir llama-index-app
cd llama-index-app
mkdir data storage
python -m venv venv
source venv/bin/activate # Linux/macOS
# or
venv\Scripts\activate # Windows
Create requirements.txt:
llama-index==0.14.15
llama-index-llms-openai
llama-index-embeddings-openai
Install:
pip install -r requirements.txt
Create app.py:
import os
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY")
documents = SimpleDirectoryReader("./data").load_data()
index = VectorStoreIndex.from_documents(documents)
index.storage_context.persist(persist_dir="./storage")
query_engine = index.as_query_engine()
response = query_engine.query("Your question here")
print(response)
export OPENAI_API_KEY="your-api-key"
python app.py
pip install fastapi uvicorn
Create api.py:
from fastapi import FastAPI
from llama_index.core import VectorStoreIndex, StorageContext
app = FastAPI()
# Load index
storage_context = StorageContext.from_defaults(persist_dir="./storage")
index = load_index_from_storage(storage_context)
query_engine = index.as_query_engine()
@app.get("/query/{question}")
async def query(question: str):
response = query_engine.query(question)
return {"answer": str(response)}
Run:
uvicorn api:app --host 0.0.0.0 --port 8000
Create /etc/systemd/system/llama-index.service:
[Unit]
Description=LlamaIndex Application
After=network.target
[Service]
User=www-data
WorkingDirectory=/opt/llama-index
ExecStart=/opt/llama-index/venv/bin/python app.py
Environment=OPENAI_API_KEY=your-key
Restart=always
[Install]
WantedBy=multi-user.target
Enable and start:
sudo systemctl enable llama-index
sudo systemctl start llama-index