caarleexx commited on
Commit
ee00348
·
verified ·
1 Parent(s): 3196290

Update backend/main.py

Browse files
Files changed (1) hide show
  1. backend/main.py +10 -11
backend/main.py CHANGED
@@ -19,10 +19,9 @@ from langchain_community.vectorstores import FAISS
19
  from langchain_core.runnables import RunnablePassthrough, RunnableLambda
20
  from langchain_core.output_parsers import StrOutputParser
21
 
22
- # Carrega as API keys do arquivo .env
23
  load_dotenv()
24
 
25
- # --- 1. Inicialização e Configuração ---
26
  app = FastAPI()
27
 
28
  app.add_middleware(
@@ -33,12 +32,13 @@ app.add_middleware(
33
  allow_headers=["*"],
34
  )
35
 
36
- # --- 2. Configurações de IA Otimizadas (Baseado no app 26) ---
37
  HF_EMBEDDING_MODEL = "sentence-transformers/all-MiniLM-L6-v2"
38
 
39
- # MUDANÇA 1: Temperatura controlada (0.3 é melhor para fatos/RAG)
 
40
  model = ChatGroq(
41
- model=os.getenv("GROQ_MODEL", "llama-3.3-70b-versatile"),
42
  temperature=0.3
43
  )
44
 
@@ -47,7 +47,7 @@ embeddings = HuggingFaceEmbeddings(
47
  model_kwargs={'device': 'cpu'}
48
  )
49
 
50
- # MUDANÇA 2: System Prompt Melhorado (Inspirado no app 26)
51
  rag_system_prompt = (
52
  "Você é um assistente experiente e prestativo. "
53
  "Sua tarefa é fornecer respostas detalhadas e ricas em contexto com base nas informações fornecidas. "
@@ -62,7 +62,7 @@ rag_prompt = ChatPromptTemplate.from_messages(
62
 
63
  rag_chain = None
64
 
65
- # --- 3. Pydantic Model ---
66
  class ChatRequest(BaseModel):
67
  content: str
68
 
@@ -91,16 +91,16 @@ async def upload_document(file: UploadFile = File(...)):
91
  loader = PyPDFLoader(temp_path)
92
  docs = loader.load()
93
 
94
- # MUDANÇA 3: Chunking um pouco maior para pegar mais contexto
95
  text_splitter = RecursiveCharacterTextSplitter(chunk_size=1200, chunk_overlap=200)
96
  splits = text_splitter.split_documents(docs)
97
 
98
  vectorstore = FAISS.from_documents(documents=splits, embedding=embeddings)
99
 
100
- # MUDANÇA 4: k=6 (Recupera mais pedaços para o Llama 3.3 analisar)
101
  retriever = vectorstore.as_retriever(search_kwargs={"k": 6})
102
 
103
- # Chain com a correção do lambda (dict input)
104
  rag_chain = (
105
  RunnablePassthrough.assign(
106
  context=(lambda x: x["input"]) | retriever | format_docs
@@ -110,7 +110,6 @@ async def upload_document(file: UploadFile = File(...)):
110
  | StrOutputParser()
111
  )
112
 
113
- # MUDANÇA 5: Retorno com estatísticas (igual ao app 26)
114
  return {
115
  "message": "Processamento concluído!",
116
  "filename": file.filename,
 
19
  from langchain_core.runnables import RunnablePassthrough, RunnableLambda
20
  from langchain_core.output_parsers import StrOutputParser
21
 
 
22
  load_dotenv()
23
 
24
+ # --- 1. Inicialização ---
25
  app = FastAPI()
26
 
27
  app.add_middleware(
 
32
  allow_headers=["*"],
33
  )
34
 
35
+ # --- 2. Configurações de IA ---
36
  HF_EMBEDDING_MODEL = "sentence-transformers/all-MiniLM-L6-v2"
37
 
38
+ # MUDANÇA CRÍTICA: Removi o os.getenv para ignorar configurações antigas do ambiente
39
+ # e forçar o uso do modelo novo e funcional.
40
  model = ChatGroq(
41
+ model="llama-3.3-70b-versatile",
42
  temperature=0.3
43
  )
44
 
 
47
  model_kwargs={'device': 'cpu'}
48
  )
49
 
50
+ # System Prompt Otimizado
51
  rag_system_prompt = (
52
  "Você é um assistente experiente e prestativo. "
53
  "Sua tarefa é fornecer respostas detalhadas e ricas em contexto com base nas informações fornecidas. "
 
62
 
63
  rag_chain = None
64
 
65
+ # --- 3. Modelo de Dados ---
66
  class ChatRequest(BaseModel):
67
  content: str
68
 
 
91
  loader = PyPDFLoader(temp_path)
92
  docs = loader.load()
93
 
94
+ # Chunking otimizado
95
  text_splitter = RecursiveCharacterTextSplitter(chunk_size=1200, chunk_overlap=200)
96
  splits = text_splitter.split_documents(docs)
97
 
98
  vectorstore = FAISS.from_documents(documents=splits, embedding=embeddings)
99
 
100
+ # Recuperação otimizada (k=6)
101
  retriever = vectorstore.as_retriever(search_kwargs={"k": 6})
102
 
103
+ # Chain
104
  rag_chain = (
105
  RunnablePassthrough.assign(
106
  context=(lambda x: x["input"]) | retriever | format_docs
 
110
  | StrOutputParser()
111
  )
112
 
 
113
  return {
114
  "message": "Processamento concluído!",
115
  "filename": file.filename,