Skip to content

Commit 1a1c612

Browse files
committed
integrate feedback, add raw message conversation method
1 parent 2a6ff5e commit 1a1c612

File tree

5 files changed

+45
-17
lines changed

5 files changed

+45
-17
lines changed

genai/config.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,14 @@
1010
[
1111
"api_key_openai",
1212
"waitress",
13-
"api_openwebui"
13+
"api_openwebui",
14+
"base_url"
1415
],
1516
)
1617

1718
Config = ConfigT(
1819
api_key_openai=environ.get("API_SECRET_OPENAI_MINE"),
1920
waitress=environ.get("USE_WAITRESS", "false").lower() == "true",
20-
api_openwebui=environ.get("API_OPENWEBUI")
21+
api_openwebui=environ.get("API_OPENWEBUI"),
22+
base_url=environ.get("BASE_URL")
2123
)

genai/controller/generate_controller.py

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from genai.rag.ingestion_pipeline import IngestionPipeline
77
from genai.vector_database.qdrant_vdb import QdrantVDB
88
from genai.rag.llm.chat_model import ChatModel
9-
from genai.service.rag_service import retrieve_similar_docs, prepare_prompt
9+
from genai.service.rag_service import retrieve_similar_docs, prepare_prompt, process_raw_messages
1010

1111

1212
# Set Logging
@@ -78,25 +78,33 @@ def upload_file():
7878

7979
@generate_bp.route('/genai/generate', methods=['POST'])
8080
def generate():
81-
"""API Endpoint for generating recipe response based on document retrieval
81+
"""
82+
API Endpoint for generating recipe responses using retrieved context.
8283
83-
This endpoint processes user queries against a vector database of recipes
84-
and returns AI-generated responses using retrieved context.
84+
This endpoint processes a user query against a vector database of recipes
85+
and returns an AI-generated response using both retrieved context and
86+
the full conversation history provided in the request.
8587
8688
Request Body:
8789
query (str): The user's recipe-related query
88-
conversation_id (str): Unique identifier for the conversation thread
90+
messages (List[Dict]): Full conversation history, each with 'role' and 'content'
91+
Example:
92+
[
93+
{"role": "user", "content": "I have eggs and tomatoes."},
94+
{"role": "assistant", "content": "You could make shakshuka."}
95+
]
8996
9097
Returns:
91-
JSON response containing the generated recipe response or error message
98+
JSON response containing:
99+
- 'response': The generated assistant reply
92100
"""
93101
data = request.get_json()
94102

95-
if not data or "query" not in data or "conversation_id" not in data:
96-
return jsonify({"error": "Missing 'query' or 'conversation_id'"}), 400
103+
if not data or "query" not in data or "messages" not in data:
104+
return jsonify({"error": "Missing 'query' or 'messages'"}), 400
97105

98106
query = data["query"]
99-
# conversation_id = data["conversation_id"] # will be used in the future
107+
messages_raw = data["messages"]
100108

101109
try:
102110
collection_name = "recipes"
@@ -106,8 +114,8 @@ def generate():
106114
vector_store = qdrant.create_and_get_vector_storage(
107115
collection_name
108116
)
109-
# todo: retrieve messages from chat history as BaseMessage
110-
messages = []
117+
# turn raw message into BaseMessage type
118+
messages = process_raw_messages(messages_raw)
111119
retrieved_docs = retrieve_similar_docs(vector_store, query)
112120
prompt = prepare_prompt(
113121
llm.get_system_prompt(),

genai/rag/llm/chat_model.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@ def _generate(self, messages: List[BaseMessage],
1414
stop=None,
1515
**kwargs) -> ChatResult:
1616
prompt = "\n".join([
17-
msg.content for msg in messages if isinstance(msg, HumanMessage)
17+
f"User: {m.content}" if isinstance(m, HumanMessage)
18+
else f"Assistant: {m.content}" if isinstance(m, AIMessage)
19+
else ""
20+
for m in messages
1821
])
1922
response_text = generate_response(self.model_name, prompt)
2023

genai/service/openwebui_service.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from genai.config import Config
44

5-
BASE_URL = "https://gpu.aet.cit.tum.de/"
5+
BASE_URL = Config.base_url
66

77

88
def generate_response(model_name: str, prompt: str):

genai/service/rag_service.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
from typing import List
1+
from typing import List, Dict
22

33
from langchain_qdrant import QdrantVectorStore
4-
from langchain_core.messages import BaseMessage, HumanMessage
4+
from langchain_core.messages import BaseMessage, HumanMessage, AIMessage
55
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
66
# from genai.rag.llm.chat_model import ChatModel
77

@@ -33,6 +33,21 @@ def prepare_prompt(system_prompt: str,
3333

3434
return prompt
3535

36+
def process_raw_messages(raw_messages: List[Dict]) -> List[BaseMessage]:
37+
"""Turns raw messages into BaseMessages, so they can be passed into LLM"""
38+
processed_messages = []
39+
for msg in raw_messages:
40+
role = msg.get("role")
41+
content = msg.get("content")
42+
43+
if role == "user":
44+
processed_messages.append(HumanMessage(content=content))
45+
46+
elif role == "assistant":
47+
processed_messages.append(AIMessage(content=content))
48+
49+
return processed_messages
50+
3651
# For testing purposes
3752
# if __name__ == "__main__":
3853
# msg = HumanMessage(content="My name is John Doe.")

0 commit comments

Comments
 (0)