-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.py
More file actions
93 lines (67 loc) · 2.61 KB
/
app.py
File metadata and controls
93 lines (67 loc) · 2.61 KB
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
from langchain_groq import ChatGroq
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_community.vectorstores import FAISS
from langchain_community.document_loaders import TextLoader, PyPDFLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.chains import RetrievalQA
import os
# Clave de API de OpenAI
from groq import Groq
from dotenv import load_dotenv
_ = load_dotenv()
# 1. Carga ambos documentos - CV y descripción del trabajo
# Job Description
jd_loader = TextLoader("JD/01_falabella_product_owner.txt")
jd_documents = jd_loader.load()
from langchain_community.document_loaders import PyPDFLoader
# Resume (PDF)
resume_loader = PyPDFLoader("docs/franco_resume_en.pdf")
resume_documents = resume_loader.load()
# Combina ambos documentos
all_documents = jd_documents + resume_documents
# Model context: 8,192 tokens
# (roughly 6,000-8,000 characters
# depending on language)
# Good chunk size options for your model:
# 2000-3000 characters: Good balance of context and efficiency
# 4000 characters: Maximum recommended for your model
# Total context usage: chunks + question + system prompts
# Keep overlap at 10-20% of chunk size for better continuity
chunk_size = 2500
chunk_overlap = int(chunk_size * 0.15)
text_splitter = CharacterTextSplitter(chunk_size=chunk_size, chunk_overlap=chunk_overlap)
docs = text_splitter.split_documents(all_documents)
# 2. Crea los embeddings y el vectorstore
embedding_model = HuggingFaceEmbeddings(
model_name="sentence-transformers/all-MiniLM-L6-v2"
)
# Alternative embedding models you can use:
# all-MiniLM-L6-v2 (recommended - small and fast)
# all-mpnet-base-v2 (better quality, larger)
# paraphrase-multilingual-MiniLM-L12-v2 (if you need multilingual support)
db = FAISS.from_documents(docs, embedding_model)
# 3. Configurar el modelo LLM de Groq
llm = ChatGroq(
model="llama3-70b-8192",
temperature=0,
max_tokens=None,
timeout=None,
max_retries=2,
# other params...
)
# 4. Configura el modelo y el sistema de recuperación
retriever = db.as_retriever()
qa_chain = RetrievalQA.from_chain_type(llm=llm, retriever=retriever)
# 5. Haz una pregunta
#query = "¿Cuál es el tema principal del documento?"
#response = qa_chain.invoke({"query": query})
#print("Respuesta:", response)
#query = "What are Franco's skills?"
#response = qa_chain.invoke({"query": query})
#print("Respuesta:", response)
query = "¿puede Franco Cedillo postular al puesto de Product Owner en Falabella?"
response = qa_chain.invoke({"query": query})
query =response['query']
print("query:", query)
result =response['result']
print("result:", result)