Skip to content

Commit 187bcf5

Browse files
authored
Merge pull request #22 from tanzilahmed0/task-b15
Compeleted Task B-15
2 parents e13cd9d + 0f07008 commit 187bcf5

4 files changed

Lines changed: 52 additions & 6 deletions

File tree

backend/api/chat.py

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
SendMessageResponse,
1818
)
1919
from services.project_service import get_project_service
20+
from services.llm_service import llm_service
2021

2122
router = APIRouter(prefix="/chat", tags=["chat"])
2223
project_service = get_project_service()
@@ -262,8 +263,24 @@ async def send_message(
262263
created_at=datetime.utcnow().isoformat() + "Z",
263264
)
264265

265-
# Generate mock query result
266-
query_result = generate_mock_query_result(request.message, project_id)
266+
# Use LLMService for AI response, fallback to mock if not configured
267+
try:
268+
ai_content = llm_service.run(request.message)
269+
# For now, just echo the LLM response as the AI message content
270+
query_result = QueryResult(
271+
id=str(uuid.uuid4()),
272+
query=request.message,
273+
sql_query="", # To be filled by future agent logic
274+
result_type="summary",
275+
data=[],
276+
execution_time=0.0,
277+
row_count=0,
278+
chart_config=None,
279+
)
280+
except Exception as e:
281+
# Fallback to mock logic if LLM not available
282+
ai_content = f"[MOCK] Here are the results for your query: '{request.message}'"
283+
query_result = generate_mock_query_result(request.message, project_id)
267284

268285
# Store message in mock database
269286
if project_id not in MOCK_CHAT_MESSAGES:
@@ -275,7 +292,7 @@ async def send_message(
275292
id=str(uuid.uuid4()),
276293
project_id=project_id,
277294
user_id="assistant",
278-
content=f"Here are the results for your query: '{request.message}'",
295+
content=ai_content,
279296
role="assistant",
280297
created_at=datetime.utcnow().isoformat() + "Z",
281298
metadata={"query_result_id": query_result.id},

backend/requirements.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,6 @@ google-auth==2.25.2
3535
email-validator==2.1.0
3636

3737
# Future dependencies (commented for now, will be added in later tasks)
38-
# langchain==0.1.0
39-
# openai==1.3.0
40-
# duckdb==0.9.2
38+
langchain==0.1.0
39+
openai==1.3.0
40+
duckdb==0.9.2

backend/services/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
# Services package for SmartQuery backend
2+
# This file intentionally left blank for service package initialization.

backend/services/llm_service.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import os
2+
from langchain.llms import OpenAI
3+
from langchain.agents import initialize_agent, Tool
4+
from langchain.agents import AgentType
5+
6+
class LLMService:
7+
"""Service for managing LangChain LLM agent for query processing."""
8+
9+
def __init__(self):
10+
self.openai_api_key = os.getenv("OPENAI_API_KEY")
11+
if not self.openai_api_key:
12+
raise ValueError("OPENAI_API_KEY environment variable not set.")
13+
self.llm = OpenAI(openai_api_key=self.openai_api_key, temperature=0)
14+
# Placeholder: Add tools as needed for agent
15+
self.tools = []
16+
self.agent = initialize_agent(
17+
self.tools,
18+
self.llm,
19+
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
20+
verbose=False,
21+
)
22+
23+
def run(self, prompt: str) -> str:
24+
"""Run the agent with a given prompt and return the response."""
25+
return self.agent.run(prompt)
26+
27+
# Singleton instance for import
28+
llm_service = LLMService()

0 commit comments

Comments
 (0)