Skip to content

Commit 31618a6

Browse files
Fixed Multi Agent RAG issue
1 parent 8c70efa commit 31618a6

File tree

2 files changed

+44
-7
lines changed

2 files changed

+44
-7
lines changed

app/services/rag_service.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1003,6 +1003,7 @@ async def query(self, query_text, system_prompt="You are a helpful assistant.",
10031003
async for chunk in stream_ollama(llm_messages, model=model_name):
10041004
yield chunk
10051005

1006+
10061007
class CrewAIRAGOrchestrator:
10071008
"""Coordinates refined querying and answer composition using an Ollama-backed model."""
10081009
def __init__(self, rag_service: RAGService, model_name="gemma3n:e2b"):
@@ -1033,6 +1034,19 @@ def __init__(self, rag_service: RAGService, model_name="gemma3n:e2b"):
10331034
llm=self.ollama_llm
10341035
)
10351036

1037+
def _get_ollama_url(self) -> str:
1038+
"""Get the appropriate Ollama URL based on execution environment."""
1039+
try:
1040+
from app.services.host_service_manager import host_service_manager
1041+
url = host_service_manager.environment_config.ollama_url
1042+
logger.debug(f"Using Ollama URL from host service manager: {url}")
1043+
return url
1044+
except ImportError:
1045+
logger.warning("Host service manager not available, using fallback config")
1046+
url = os.getenv("OLLAMA_API_BASE", "http://localhost:11434")
1047+
logger.debug(f"Using fallback Ollama URL: {url}")
1048+
return url
1049+
10361050
async def _get_context_length(self, model_name: str) -> int:
10371051
"""Query Ollama for the model's context length; fall back to a sensible default."""
10381052
model = model_name.replace("ollama/", "") if "ollama/" in model_name else model_name
@@ -1073,7 +1087,7 @@ async def _generate_summary(self, text: str, system_prompt: str) -> str:
10731087

10741088
return response
10751089

1076-
def simple_chunk_text(self, text: str, chunk_size: int):
1090+
def chunk_text(self, text: str, chunk_size: int):
10771091
"""Simple character-based chunking without overlap (used for specific cases)."""
10781092
if not text or not text.strip():
10791093
return []

main.py

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -611,17 +611,40 @@ async def event_generator():
611611

612612
return StreamingResponse(event_generator(), media_type="text/plain")
613613
else:
614-
# Ollama RAG
614+
# Ollama RAG - check if multi-agent is requested
615615
async def event_generator():
616-
async for chunk in rag_service.query(
617-
request.query, request.system_prompt, request.messages,
618-
request.n_results, request.use_hybrid_search, request.model
619-
):
620-
yield chunk + "\n"
616+
if request.use_multi_agent:
617+
# Use CrewAI multi-agent orchestration
618+
logger.info("Using CrewAI multi-agent orchestration")
619+
from app.services.rag_service import CrewAIRAGOrchestrator
620+
621+
orchestrator = CrewAIRAGOrchestrator(
622+
rag_service=rag_service,
623+
model_name=request.model or "gemma3n:e2b"
624+
)
625+
626+
async for chunk in orchestrator.query(
627+
user_query=request.query,
628+
system_prompt=request.system_prompt,
629+
messages=request.messages,
630+
n_results=request.n_results,
631+
use_hybrid_search=request.use_hybrid_search,
632+
model=request.model
633+
):
634+
yield chunk + "\n"
635+
else:
636+
# Use regular RAG
637+
logger.info("Using standard RAG without multi-agent orchestration")
638+
async for chunk in rag_service.query(
639+
request.query, request.system_prompt, request.messages,
640+
request.n_results, request.use_hybrid_search, request.model
641+
):
642+
yield chunk + "\n"
621643

622644
return StreamingResponse(event_generator(), media_type="text/plain")
623645

624646
except Exception as e:
647+
logger.error(f"RAG query error: {e}")
625648
raise HTTPException(status_code=500, detail=str(e))
626649

627650

0 commit comments

Comments
 (0)