Skip to content

Commit 5324a1b

Browse files
committed
Adjust system prompt
1 parent b23caa7 commit 5324a1b

File tree

4 files changed

+63
-26
lines changed

4 files changed

+63
-26
lines changed

genai/controller/generate_controller.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -78,15 +78,15 @@ def upload_file():
7878

7979
@generate_bp.route('/genai/generate', methods=['POST'])
8080
def generate():
81-
"""API Endpoint for generating recipe responses based on document retrieval.
82-
83-
This endpoint processes user queries against a vector database of recipes and returns
84-
AI-generated responses using retrieved context.
85-
81+
"""API Endpoint for generating recipe response based on document retrieval
82+
83+
This endpoint processes user queries against a vector database of recipes
84+
and returns AI-generated responses using retrieved context.
85+
8686
Request Body:
8787
query (str): The user's recipe-related query
8888
conversation_id (str): Unique identifier for the conversation thread
89-
89+
9090
Returns:
9191
JSON response containing the generated recipe response or error message
9292
"""
@@ -96,7 +96,7 @@ def generate():
9696
return jsonify({"error": "Missing 'query' or 'conversation_id'"}), 400
9797

9898
query = data["query"]
99-
#conversation_id = data["conversation_id"] # will be used in the future
99+
# conversation_id = data["conversation_id"] # will be used in the future
100100

101101
try:
102102
collection_name = "recipes"
@@ -106,10 +106,15 @@ def generate():
106106
vector_store = qdrant.create_and_get_vector_storage(
107107
collection_name
108108
)
109-
#todo: retrieve messages from chat history as BaseMessage
109+
# todo: retrieve messages from chat history as BaseMessage
110110
messages = []
111111
retrieved_docs = retrieve_similar_docs(vector_store, query)
112-
prompt = prepare_prompt(query, retrieved_docs, messages)
112+
prompt = prepare_prompt(
113+
llm.get_system_prompt(),
114+
query,
115+
retrieved_docs,
116+
messages
117+
)
113118

114119
response = llm.invoke(prompt)
115120

genai/rag/llm/chat_model.py

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,39 @@
1010
class ChatModel(BaseChatModel):
1111
model_name: str = Field(default="llama3.3:latest")
1212

13-
def _generate(self, messages: List[BaseMessage], stop=None, **kwargs) -> ChatResult:
14-
prompt = "\n".join([msg.content for msg in messages if isinstance(msg, HumanMessage)])
13+
def _generate(self, messages: List[BaseMessage],
14+
stop=None,
15+
**kwargs) -> ChatResult:
16+
prompt = "\n".join([
17+
msg.content for msg in messages if isinstance(msg, HumanMessage)
18+
])
1519
response_text = generate_response(self.model_name, prompt)
1620

1721
return ChatResult(
18-
generations=[ChatGeneration(message=AIMessage(content=response_text))]
22+
generations=[
23+
ChatGeneration(message=AIMessage(content=response_text))
24+
]
1925
)
2026

2127
@property
2228
def _llm_type(self) -> str:
2329
return "recipai-custom-model"
2430

25-
# For Testing purposes
26-
# if __name__ == "__main__":
27-
# llm = ChatModel(model_name="llama3.3:latest")
28-
29-
# message = HumanMessage(content="What is langchain, explain very briefly?")
30-
31-
# response = llm.invoke([message])
32-
33-
# print("LLM response:\n", response.content)
31+
def get_system_prompt(self) -> str:
32+
"""System prompt for the LLM"""
33+
return """
34+
You are RecipAI, an intelligent assistant that helps users discover and generate
35+
recipes based on the ingredients they provide.
36+
37+
Use the contextual information provided below to tailor your responses.
38+
39+
If relevant recipes or suggestions are found in the context, prioritize
40+
those. If no relevant context is available, use your own knowledge to help the user.
41+
42+
Context:
43+
{context}
44+
45+
Be clear, creative, and helpful. If the user also asks follow-up
46+
questions (e.g., dietary adjustments, name references, meal timing),
47+
answer them precisely based on the context and query.
48+
"""

genai/service/openwebui_service.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44

55
BASE_URL = "https://gpu.aet.cit.tum.de/"
66

7+
78
def generate_response(model_name: str, prompt: str):
8-
"""Making a POST request to the respective endpoint for
9+
"""Making a POST request to the respective endpoint for
910
response generation by an LLM"""
1011
url = f"{BASE_URL}/api/chat/completions"
1112

@@ -18,7 +19,7 @@ def generate_response(model_name: str, prompt: str):
1819
"model": model_name,
1920
"messages": [
2021
{
21-
"role": "user",
22+
"role": "user",
2223
"content": prompt
2324
}
2425
]
@@ -35,7 +36,9 @@ def generate_response(model_name: str, prompt: str):
3536
return response.json()["choices"][0]["message"]["content"]
3637

3738
except requests.exceptions.HTTPError as e:
38-
raise RuntimeError(f"HTTP error from LLM server: {e} (status {response.status_code})") from e
39+
raise RuntimeError(
40+
f"HTTP error from LLM server: {e}, {response.status_code})"
41+
) from e
3942
except requests.exceptions.Timeout as e:
4043
raise RuntimeError(f"Request to LLM timed out: {e}") from e
4144
except requests.exceptions.RequestException as e:

genai/service/rag_service.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
from langchain_qdrant import QdrantVectorStore
44
from langchain_core.messages import BaseMessage, HumanMessage
55
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
6+
from genai.rag.llm.chat_model import ChatModel
7+
68

79
def retrieve_similar_docs(vector_store: QdrantVectorStore, user_query: str):
810
"""Retrieve similar documents based on the user query"""
@@ -11,10 +13,14 @@ def retrieve_similar_docs(vector_store: QdrantVectorStore, user_query: str):
1113
docs_content = "\n\n".join(doc.page_content for doc in retrieved_docs)
1214
return docs_content
1315

14-
def prepare_prompt(user_query: str, docs_content: str, messages: List[BaseMessage]):
16+
17+
def prepare_prompt(system_prompt: str,
18+
user_query: str,
19+
docs_content: str,
20+
messages: List[BaseMessage]):
1521
"""Prepare the prompt with prompt templates to give to LLM"""
1622
prompt_template = ChatPromptTemplate([
17-
("system", "You are a helpful assistant for recipe generation based on the given ingredients and the following context:\n\n{context}"),
23+
"system", system_prompt,
1824
MessagesPlaceholder("msgs")
1925
])
2026

@@ -26,3 +32,11 @@ def prepare_prompt(user_query: str, docs_content: str, messages: List[BaseMessag
2632
})
2733

2834
return prompt
35+
36+
# For testing purposes
37+
# if __name__ == "__main__":
38+
# msg = HumanMessage(content="My name is John Doe.")
39+
# llm = ChatModel()
40+
# prompt = prepare_prompt(llm.get_system_prompt(), "Suggest me a basic breakfast. Btw, what is my name?", "", [msg])
41+
# response = llm.invoke(prompt)
42+
# print(response.content)

0 commit comments

Comments
 (0)