File size: 2,836 Bytes
e63103b
408e821
 
e63103b
3f199c2
 
 
4d3bceb
e63103b
 
 
3f199c2
 
 
 
 
 
 
 
 
 
 
7d2e972
3f199c2
0870c96
e63103b
 
 
 
3f199c2
1a93363
e63103b
4d3bceb
0870c96
3f199c2
0870c96
4d3bceb
4e93adb
 
4d3bceb
4e93adb
4d3bceb
 
4e93adb
4d3bceb
3251505
4e93adb
4d3bceb
4e93adb
4d3bceb
 
 
 
 
4167f1d
4d3bceb
7dc6d22
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import os
from _utils.utils import create_prompt_llm_chain, create_retriever, getPDF, create_llm, create_prompt_llm_chain_summary, process_embedding_summary
from _utils import utils
from langchain.chains import create_retrieval_chain
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings
from langchain.chains.summarize import load_summarize_chain

os.environ.get("OPENAI_API_KEY")

def get_llm_answer(system_prompt, user_prompt, pdf_url, model, embedding):
  if embedding == "gpt":
    embedding_object = OpenAIEmbeddings()
  else:
    embedding_object = HuggingFaceEmbeddings(model_name=embedding)

  vectorstore = Chroma(
      collection_name="documents",
      embedding_function=embedding_object
    )

  print('model: ', model)
  print('embedding: ', embedding)
  pages = []
  if pdf_url:
    pages = getPDF(pdf_url)
  else:
    pages = getPDF()
  retriever = create_retriever(pages, vectorstore)
  rag_chain = create_retrieval_chain(retriever, create_prompt_llm_chain(system_prompt, model))
  results = rag_chain.invoke({"input": user_prompt})
  # print('allIds ARQUIVO MAIN: ',  utils.allIds)
  vectorstore.delete( utils.allIds)
  vectorstore.delete_collection()
  utils.allIds = []
  # print('utils.allIds: ', utils.allIds)
  return results

def get_llm_answer_summary(system_prompt, user_prompt, pdf_url, model, isIterativeRefinement):
  print('model: ', model)
  print('isIterativeRefinement: ', isIterativeRefinement)
  print('\n\n\n')
  pages = getPDF(pdf_url)
  if not isIterativeRefinement:
    rag_chain = create_prompt_llm_chain_summary(system_prompt, model)

    results = rag_chain.invoke({"input": user_prompt, "context": pages})

    return results
  else:
    chain = load_summarize_chain(create_llm(model), "refine", True)
    result = chain.invoke({"input_documents": pages})
    print('result: ', result)
    return result
    # Obs --> Para passar informações personalizadas --> chain = load_summarize_chain(llm, "refine", True, question_prompt=initial_prompt, refine_prompt=PromptTemplate.from_template(refine_prompt))
    # Para ver mais opções --> Acessa a origem da função load_summarize_chain , e nela acessa a origem da função _load_refine_chain --> As opções são os parâmetros que esta última função recebe

def get_llm_answer_summary_with_embedding(system_prompt, user_prompt, pdf_url, model, isIterativeRefinement):
  print('model: ', model)
  print('isIterativeRefinement: ', isIterativeRefinement)
  print('\n\n\n')
  pages = getPDF(pdf_url)
  full_texto = ""
  for p in pages:
    full_texto += p.page_content
  print('full_texto: ', full_texto)

  rag_chain = process_embedding_summary(system_prompt, model)

  results = rag_chain.invoke({"input": user_prompt, "context": pages})

  return results