Do you need to file an issue?
Describe the bug
ERROR: Ollama chat error: 400: Last message must be from user role
Traceback (most recent call last):
File "/app/lightrag/api/routers/ollama_api.py", line 498, in chat
raise HTTPException(
fastapi.exceptions.HTTPException: 400: Last message must be from user role
ERROR: Returning HTTP 500 to client [error_id=01ef498d2914] (HTTPException)
Steps to reproduce
- Add LightRAG Ollama Endpoint to Open-WebUI.
- Ask a Question to query the GraphDB
- If the query goes through at all it will stop at one point
- Click (>) play/continue button to continue the answer
Expected Behavior
A stable endpoint that will continue the full answer.
LightRAG Config Used
Paste your config here
CHUNK_OVERLAP_SIZE=100
CHUNK_SIZE=1500
CHUNK_TOP_K=30
COSINE_THRESHOLD=0.2
DEFAULT_ENTITY_TYPES = '["Kanzlei", "Person", "Partei", "Unternehmen", "Gericht", "Spruchkörper", "Aktenzeichen", "ECLI", "Rechtszug", "Dokumenttyp", "Rechtsnorm", "Klagegrund", "Verpflichtung", "Berechtigung", "Rechtsfolge", "Gegenstandswert", "Datum", "Ort"]'
EMBEDDING_BATCH_NUM=64
EMBEDDING_BINDING_HOST=http://ai.ironsoftware.de/v1
EMBEDDING_BINDING=openai
EMBEDDING_DIM=4096
EMBEDDING_FUNC_MAX_ASYNC=6
EMBEDDING_MODEL=Qwen/Qwen3-Embedding-8B
EMBEDDING_SEND_DIM=false
EMBEDDING_TIMEOUT=180
EMBEDDING_TOKEN_LIMIT=32768
ENABLE_LLM_CACHE_FOR_EXTRACT=true
ENABLE_LLM_CACHE=true
EXTRACT_OPENAI_LLM_MAX_COMPLETION_TOKENS=4096
EXTRACT_OPENAI_LLM_REASONING_EFFORT=low
FORCE_LLM_SUMMARY_ON_MERGE=5
HOST=0.0.0.0
KG_CHUNK_PICK_METHOD=WEIGHT
KG_CHUNK_PICK_NUMBER=10
LIGHTRAG_DOC_STATUS_STORAGE=RedisDocStatusStorage
LIGHTRAG_GRAPH_STORAGE=Neo4JStorage
LIGHTRAG_KV_STORAGE=RedisKVStorage
LIGHTRAG_VECTOR_STORAGE=QdrantVectorDBStorage
LLM_BINDING_HOST=http://ai.ironsoftware.de/v1
LLM_BINDING=openai
LLM_MODEL=ironai/llm-noreason
LLM_TIMEOUT=3600
LOG_BACKUP_COUNT=5
LOG_LEVEL=DEBUG
LOG_MAX_BYTES=10485760
MAX_ASYNC=6
MAX_ENTITY_TOKENS=15000
MAX_PARALLEL_INSERT=2
MAX_RELATION_TOKENS=25000
MAX_TOTAL_TOKENS=64000
MIN_RERANK_SCORE=0.45
NEO4J_CONNECTION_ACQUISITION_TIMEOUT=30
NEO4J_CONNECTION_TIMEOUT=30
NEO4J_DATABASE=noe4j
NEO4J_KEEP_ALIVE=true
NEO4J_LIVENESS_CHECK_TIMEOUT=30
NEO4J_MAX_CONNECTION_LIFETIME=300
NEO4J_MAX_CONNECTION_POOL_SIZE=100
NEO4J_MAX_TRANSACTION_RETRY_TIME=30
NEO4J_URI=neo4j://irsdb.ironsoftware.de:7687
NEO4J_USERNAME=neo4j
OPENAI_LLM_FREQUENCY_PENALTY=1.0
OPENAI_LLM_MAX_COMPLETION_TOKENS=9000
OPENAI_LLM_MAX_TOKENS=8192
OPENAI_LLM_PRESENCE_PENALTY=1.5
OPENAI_LLM_TEMPERATURE=0.0
OPENAI_LLM_TOP_P=1
PORT=9621
QDRANT_URL=http://irsdb.ironsoftware.de:6333
QUERY_OPENAI_LLM_MAX_COMPLETION_TOKENS=9000
QUERY_OPENAI_LLM_REASONING_EFFORT=medium
QUERY_OPENAI_LLM_TOP_P=0.6
REDIS_CONNECT_TIMEOUT=10
REDIS_MAX_CONNECTIONS=100
REDIS_RETRY_ATTEMPTS=3
REDIS_SOCKET_TIMEOUT=30
REDIS_URI=redis://irsdb.ironsoftware.de:6379
RELATED_CHUNK_NUMBER=10
RERANK_BINDING=cohere
RERANK_BINDING_HOST=http://ai.ironsoftware.de/v1/rerank
RERANK_BY_DEFAULT=True
RERANK_MODEL=Qwen/Qwen3-Reranker-8B
SUMMARY_CONTEXT_SIZE=32000
SUMMARY_LANGUAGE=German
SUMMARY_LENGTH_RECOMMENDED=800
SUMMARY_MAX_TOKENS=2000
TIKTOKEN_CACHE_DIR=./temp/tiktoken
TIMEOUT=1080
TOP_K=60
VERBOSE=True
WORKERS=2
Logs and screenshots
ERROR: Ollama chat error: 400: Last message must be from user role
Traceback (most recent call last):
File "/app/lightrag/api/routers/ollama_api.py", line 498, in chat
raise HTTPException(
fastapi.exceptions.HTTPException: 400: Last message must be from user role
ERROR: Returning HTTP 500 to client [error_id=01ef498d2914] (HTTPException)
Additional Information
- LightRAG Version: v1.5.5/0325
- Operating System: Linux/Docker
- Python Version: Linux/Docker
- Related Issues:
Do you need to file an issue?
Describe the bug
Steps to reproduce
Expected Behavior
A stable endpoint that will continue the full answer.
LightRAG Config Used
Paste your config here
CHUNK_OVERLAP_SIZE=100
CHUNK_SIZE=1500
CHUNK_TOP_K=30
COSINE_THRESHOLD=0.2
DEFAULT_ENTITY_TYPES = '["Kanzlei", "Person", "Partei", "Unternehmen", "Gericht", "Spruchkörper", "Aktenzeichen", "ECLI", "Rechtszug", "Dokumenttyp", "Rechtsnorm", "Klagegrund", "Verpflichtung", "Berechtigung", "Rechtsfolge", "Gegenstandswert", "Datum", "Ort"]'
EMBEDDING_BATCH_NUM=64
EMBEDDING_BINDING_HOST=http://ai.ironsoftware.de/v1
EMBEDDING_BINDING=openai
EMBEDDING_DIM=4096
EMBEDDING_FUNC_MAX_ASYNC=6
EMBEDDING_MODEL=Qwen/Qwen3-Embedding-8B
EMBEDDING_SEND_DIM=false
EMBEDDING_TIMEOUT=180
EMBEDDING_TOKEN_LIMIT=32768
ENABLE_LLM_CACHE_FOR_EXTRACT=true
ENABLE_LLM_CACHE=true
EXTRACT_OPENAI_LLM_MAX_COMPLETION_TOKENS=4096
EXTRACT_OPENAI_LLM_REASONING_EFFORT=low
FORCE_LLM_SUMMARY_ON_MERGE=5
HOST=0.0.0.0
KG_CHUNK_PICK_METHOD=WEIGHT
KG_CHUNK_PICK_NUMBER=10
LIGHTRAG_DOC_STATUS_STORAGE=RedisDocStatusStorage
LIGHTRAG_GRAPH_STORAGE=Neo4JStorage
LIGHTRAG_KV_STORAGE=RedisKVStorage
LIGHTRAG_VECTOR_STORAGE=QdrantVectorDBStorage
LLM_BINDING_HOST=http://ai.ironsoftware.de/v1
LLM_BINDING=openai
LLM_MODEL=ironai/llm-noreason
LLM_TIMEOUT=3600
LOG_BACKUP_COUNT=5
LOG_LEVEL=DEBUG
LOG_MAX_BYTES=10485760
MAX_ASYNC=6
MAX_ENTITY_TOKENS=15000
MAX_PARALLEL_INSERT=2
MAX_RELATION_TOKENS=25000
MAX_TOTAL_TOKENS=64000
MIN_RERANK_SCORE=0.45
NEO4J_CONNECTION_ACQUISITION_TIMEOUT=30
NEO4J_CONNECTION_TIMEOUT=30
NEO4J_DATABASE=noe4j
NEO4J_KEEP_ALIVE=true
NEO4J_LIVENESS_CHECK_TIMEOUT=30
NEO4J_MAX_CONNECTION_LIFETIME=300
NEO4J_MAX_CONNECTION_POOL_SIZE=100
NEO4J_MAX_TRANSACTION_RETRY_TIME=30
NEO4J_URI=neo4j://irsdb.ironsoftware.de:7687
NEO4J_USERNAME=neo4j
OPENAI_LLM_FREQUENCY_PENALTY=1.0
OPENAI_LLM_MAX_COMPLETION_TOKENS=9000
OPENAI_LLM_MAX_TOKENS=8192
OPENAI_LLM_PRESENCE_PENALTY=1.5
OPENAI_LLM_TEMPERATURE=0.0
OPENAI_LLM_TOP_P=1
PORT=9621
QDRANT_URL=http://irsdb.ironsoftware.de:6333
QUERY_OPENAI_LLM_MAX_COMPLETION_TOKENS=9000
QUERY_OPENAI_LLM_REASONING_EFFORT=medium
QUERY_OPENAI_LLM_TOP_P=0.6
REDIS_CONNECT_TIMEOUT=10
REDIS_MAX_CONNECTIONS=100
REDIS_RETRY_ATTEMPTS=3
REDIS_SOCKET_TIMEOUT=30
REDIS_URI=redis://irsdb.ironsoftware.de:6379
RELATED_CHUNK_NUMBER=10
RERANK_BINDING=cohere
RERANK_BINDING_HOST=http://ai.ironsoftware.de/v1/rerank
RERANK_BY_DEFAULT=True
RERANK_MODEL=Qwen/Qwen3-Reranker-8B
SUMMARY_CONTEXT_SIZE=32000
SUMMARY_LANGUAGE=German
SUMMARY_LENGTH_RECOMMENDED=800
SUMMARY_MAX_TOKENS=2000
TIKTOKEN_CACHE_DIR=./temp/tiktoken
TIMEOUT=1080
TOP_K=60
VERBOSE=True
WORKERS=2
Logs and screenshots
Additional Information