from langchain.callbacks.manager import CallbackManager from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler from langchain_community.chat_models import ChatOllama from langchain_community.document_loaders import TextLoader from langchain.chains import RetrievalQA from qdrant_client import QdrantClient from langchain_community.embeddings import OllamaEmbeddings from langchain_community.vectorstores import Qdrant from langchain_community.chat_models import ChatOllama from langchain_community.llms import Ollama from langchain.callbacks.manager import CallbackManager from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler from langchain.prompts import PromptTemplate import json import datetime def extractDataFromDoc(collection_name): client = QdrantClient(path="./vectLlama3") embeddings = OllamaEmbeddings(model='llama3',base_url="http://10.128.0.3:11434") # set up the qdrant database qdrant = Qdrant( client=client, collection_name=collection_name, embeddings=embeddings ) ##### Ollama # model name can be any model you have installed with Ollama # complete list of models available @ Ollama: https://ollama.ai/library #llm = ChatOllama(model_name="llama3", temperature=0,base_url="http://10.128.0.3:11434" ) llm = Ollama( model="llama3", base_url="http://10.128.0.3:11434", temperature=0, callback_manager=CallbackManager( [StreamingStdOutCallbackHandler()] ), stop=["<|eot_id|>"], ) import json json_schema = { "authority-identification-code-civil-engineering-office": "restituisci il numero identificativo dell'ente pubblico, deve essere un numerico, ritorna stringa vuota se non presente", "applicants-0-tax-code":"restituiscimi il codice fiscale del richiedente della concessione", "applicants-0-vat-number" : "restituiscimi solo se presente, il numero di partita iva del richiedente, stringa vuota se non presente ", "concession-decree-number" : "restituisci il numero del decreto o della pratica, restituisci solo il numero", "release-date": "restituiscimi la data di rilascio del provvedimento", "expiration-date": "restituiscimi la data di scadenza della concessione, eventualmente somma la durata della concessione alla data di rilascio, restituisci solo la data" } #question_1 ="restituisci solo con il json utilizzando seguente schema: " + json.dumps(json_schema, indent=2) + "le date sono in formato italiano e vanno convertite in DD-MM-YYYY, lascia vuoti i campi che non trovi" question_1="restituisci il codice fiscale del richiedente concessione" question_2="restituisci il numero del decreto o della pratica" question_3="restituisci la data di inizio della concessione in formato dd/MM/yyyy. Restituisci solo la data" question_4="restituisci la data di fine dellla concessione di utilizzo, ritorna in formato dd/MM/yyyy. Restituisci solo la data" question_5="restituisci il numero identificativo dell'ente pubblico" question_6="restituisci il numero di partita iva del richiedente" # Build prompt template = """Give a precise answer to the question based on the context without stating so. Don't be verbose. {context} Question:{question}""" QA_CHAIN_PROMPT = PromptTemplate.from_template(template)# Run chain qa_chain = RetrievalQA.from_chain_type( llm, retriever=qdrant.as_retriever(), chain_type_kwargs={"prompt": QA_CHAIN_PROMPT} ) cf = qa_chain.invoke({"query": question_1}) #return result["result"] dec = qa_chain.invoke({"query": question_2}) datar = qa_chain.invoke({"query": question_3}) datas = qa_chain.invoke({"query": question_4}) iduff=qa_chain.invoke({"query": question_5}) piva=qa_chain.invoke({"query": question_6}) response={} response['authority-identification-code-civil-engineering-office']=iduff["result"] response['applicants-0-tax-code']=cf["result"] response['applicants-0-vat-number']=piva["result"] response['concession-decree-number']=dec["result"] response['release-date']= datetime.datetime.strptime(datar["result"].strip(), '%d/%m/%Y').strftime('%Y-%m-%d') response['expiration-date']=datetime.datetime.strptime(datas["result"].strip(), '%d/%m/%Y').strftime('%Y-%m-%d') return json.dumps(response) # Check the result of the query #print(result["result"])