jeremygracey-ai commited on
Commit
e292cae
·
verified ·
1 Parent(s): dce1e1d

Initial upload of app_logic.py

Browse files
Files changed (1) hide show
  1. app_logic.py +54 -0
app_logic.py ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from llama_cpp import Llama
3
+ from langchain_community.vectorstores import Chroma
4
+ from langchain_community.embeddings.sentence_transformer import SentenceTransformerEmbeddings
5
+
6
+ def load_embeddings():
7
+ """Initializes and returns the sentence transformer embedding model."""
8
+ return SentenceTransformerEmbeddings(model_name="all-MiniLM-L6-v2")
9
+
10
+ def initialize_vector_db(persist_directory):
11
+ """Loads the existing Chroma database and returns a retriever object."""
12
+ embedding_function = load_embeddings()
13
+ db = Chroma(persist_directory=persist_directory, embedding_function=embedding_function)
14
+ return db.as_retriever(search_type="similarity", search_kwargs={"k": 3})
15
+
16
+ def load_llm_model(model_path):
17
+ """Initializes and returns the Llama LLM object."""
18
+ return Llama(
19
+ model_path=model_path,
20
+ n_ctx=2048,
21
+ n_threads=4,
22
+ n_gpu_layers=-1
23
+ )
24
+
25
+ def get_rag_response(query, llm, retriever):
26
+ """Encapsulates retrieval and generation logic to provide a grounded response."""
27
+ # 1. Retrieve relevant context
28
+ relevant_docs = retriever.get_relevant_documents(query)
29
+ context = ". ".join([doc.page_content for doc in relevant_docs])
30
+
31
+ # 2. Define prompt templates
32
+ system_message = """[INST] You are a helpful medical assistant that answers questions based on the provided context from the Merck Manual of Diagnosis and Therapy.
33
+ Your responses should be accurate, well-structured, and based strictly on the provided context. [/INST]"""
34
+
35
+ user_message = f"""Context:
36
+ {context}
37
+
38
+ Question:
39
+ {query}
40
+
41
+ Please provide a detailed and accurate answer based on the context above. [/INST]"""
42
+
43
+ full_prompt = f"{system_message}\n{user_message}"
44
+
45
+ # 3. Generate response
46
+ output = llm(
47
+ prompt=full_prompt,
48
+ max_tokens=512,
49
+ temperature=0,
50
+ top_p=0.95,
51
+ top_k=50
52
+ )
53
+
54
+ return output['choices'][0]['text'].strip()