File size: 1,724 Bytes
b80958f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# source:https://python.langchain.com/api_reference/langchain/chains/langchain.chains.retrieval_qa.base.RetrievalQA.html

from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_community.vectorstores import FAISS
from langchain.prompts import ChatPromptTemplate
from langchain.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_community.llms import Ollama
from fastapi import FastAPI
import requests
from pydantic import BaseModel
from langchain.chains import create_retrieval_chain
from dotenv import load_dotenv
import os


load_dotenv()
token= os.getenv("TOKEN")
app = FastAPI()

class QueryInput(BaseModel):
    query: str


# build the retrieval and augmented generator chain here

embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")
db = FAISS.load_local("./vectorstore/agriquery_faiss_index", embeddings, allow_dangerous_deserialization=True)
llm = Ollama(model="llama3", base_url="http://localhost:11434")

retriever = db.as_retriever()

system_prompt = (
    "You are an agriultural research assistant."
    "Use the given context to answer the question."
    "If you don't know the answer, say you don't know."
    "Context: {context}"
)

prompt = ChatPromptTemplate.from_messages(
    [
        ("system", system_prompt),
        ("human", "{input}"),
    ]
)

question_answer_chain = create_stuff_documents_chain(llm,prompt)
chain = create_retrieval_chain(retriever, question_answer_chain)


@app.post("/query")
async def query_handler(input: QueryInput):
    result = chain.invoke({"input": input.query})
    answer = result['answer'].replace("\\n", "\n").strip()

    return {"answer": answer}