Spaces:
Sleeping
Sleeping
Commit ·
f6612e6
1
Parent(s): 20cb367
Update contact email to USP address
Browse files- app.py +20 -3
- me/linkedin.txt +1 -1
- me/summary.txt +2 -0
app.py
CHANGED
|
@@ -15,6 +15,11 @@ from PyPDF2 import PdfReader
|
|
| 15 |
|
| 16 |
load_dotenv(override=True)
|
| 17 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 18 |
def push(text):
|
| 19 |
requests.post(
|
| 20 |
"https://api.pushover.net/1/messages.json",
|
|
@@ -34,6 +39,13 @@ def record_unknown_question(question):
|
|
| 34 |
push(f"Recording {question}")
|
| 35 |
return {"recorded": "ok"}
|
| 36 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 37 |
def _normalize_messages(history, user_message, assistant_response):
|
| 38 |
"""Return chronological list of dicts with role/content for current chat."""
|
| 39 |
|
|
@@ -192,10 +204,14 @@ class Me:
|
|
| 192 |
self.sessions_lock = Lock()
|
| 193 |
self.sessions = {}
|
| 194 |
base_dir = Path("me")
|
| 195 |
-
self.linkedin =
|
| 196 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 197 |
with open(base_dir / "summary.txt", "r", encoding="utf-8") as f:
|
| 198 |
-
self.summary = f.read()
|
| 199 |
|
| 200 |
def _create_session_record(self):
|
| 201 |
session_started_at = datetime.utcnow().isoformat()
|
|
@@ -253,6 +269,7 @@ class Me:
|
|
| 253 |
Sua responsabilidade é representar {self.name} nas interações no site da forma mais fiel possível. \
|
| 254 |
Você recebeu um resumo do histórico profissional, o perfil do LinkedIn e o currículo Lattes de {self.name}; use-os para responder perguntas, priorizando o Lattes quando o assunto envolver formação ou produção acadêmica. \
|
| 255 |
Seja profissional e envolvente, como se estivesse conversando com um potencial cliente ou futuro empregador que acessou o site. \
|
|
|
|
| 256 |
Se você não souber a resposta para alguma pergunta, use sua ferramenta `record_unknown_question` para registrar a pergunta que você não conseguiu responder, mesmo que seja algo trivial ou não relacionado à carreira. \
|
| 257 |
Se o usuário estiver engajado na conversa, tente direcioná-lo a entrar em contato por e-mail; peça o e-mail e registre-o usando sua ferramenta `record_user_details`."
|
| 258 |
|
|
|
|
| 15 |
|
| 16 |
load_dotenv(override=True)
|
| 17 |
|
| 18 |
+
CONTACT_EMAIL = "mcostamonteiro@usp.br"
|
| 19 |
+
LEGACY_CONTACT_EMAILS = {
|
| 20 |
+
"matheuscostamonteiro.mc@gmail.com",
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
def push(text):
|
| 24 |
requests.post(
|
| 25 |
"https://api.pushover.net/1/messages.json",
|
|
|
|
| 39 |
push(f"Recording {question}")
|
| 40 |
return {"recorded": "ok"}
|
| 41 |
|
| 42 |
+
|
| 43 |
+
def _sanitize_contact_info(text: str) -> str:
|
| 44 |
+
sanitized = text
|
| 45 |
+
for legacy_email in LEGACY_CONTACT_EMAILS:
|
| 46 |
+
sanitized = sanitized.replace(legacy_email, CONTACT_EMAIL)
|
| 47 |
+
return sanitized
|
| 48 |
+
|
| 49 |
def _normalize_messages(history, user_message, assistant_response):
|
| 50 |
"""Return chronological list of dicts with role/content for current chat."""
|
| 51 |
|
|
|
|
| 204 |
self.sessions_lock = Lock()
|
| 205 |
self.sessions = {}
|
| 206 |
base_dir = Path("me")
|
| 207 |
+
self.linkedin = _sanitize_contact_info(
|
| 208 |
+
self._load_document(base_dir / "linkedin.txt", base_dir / "linkedin.pdf")
|
| 209 |
+
)
|
| 210 |
+
self.lattes = _sanitize_contact_info(
|
| 211 |
+
self._load_document(base_dir / "lattes.txt", base_dir / "lattes.pdf")
|
| 212 |
+
)
|
| 213 |
with open(base_dir / "summary.txt", "r", encoding="utf-8") as f:
|
| 214 |
+
self.summary = _sanitize_contact_info(f.read())
|
| 215 |
|
| 216 |
def _create_session_record(self):
|
| 217 |
session_started_at = datetime.utcnow().isoformat()
|
|
|
|
| 269 |
Sua responsabilidade é representar {self.name} nas interações no site da forma mais fiel possível. \
|
| 270 |
Você recebeu um resumo do histórico profissional, o perfil do LinkedIn e o currículo Lattes de {self.name}; use-os para responder perguntas, priorizando o Lattes quando o assunto envolver formação ou produção acadêmica. \
|
| 271 |
Seja profissional e envolvente, como se estivesse conversando com um potencial cliente ou futuro empregador que acessou o site. \
|
| 272 |
+
O e-mail de contato correto de {self.name} é {CONTACT_EMAIL}. Nunca forneça nem sugira o e-mail pessoal antigo; use sempre {CONTACT_EMAIL} quando o usuário pedir contato por e-mail. \
|
| 273 |
Se você não souber a resposta para alguma pergunta, use sua ferramenta `record_unknown_question` para registrar a pergunta que você não conseguiu responder, mesmo que seja algo trivial ou não relacionado à carreira. \
|
| 274 |
Se o usuário estiver engajado na conversa, tente direcioná-lo a entrar em contato por e-mail; peça o e-mail e registre-o usando sua ferramenta `record_user_details`."
|
| 275 |
|
me/linkedin.txt
CHANGED
|
@@ -5,7 +5,7 @@ Headline: AI Engineer at TRACTIAN | M.Sc. Student, University of São Paulo
|
|
| 5 |
Localização: São Paulo, São Paulo, Brasil
|
| 6 |
|
| 7 |
Contato e links
|
| 8 |
-
- Email:
|
| 9 |
- LinkedIn: https://www.linkedin.com/in/costadeveloper
|
| 10 |
- GitHub/Portfolio: https://github.com/costadev00/
|
| 11 |
- Lattes: http://lattes.cnpq.br/3420386831460864
|
|
|
|
| 5 |
Localização: São Paulo, São Paulo, Brasil
|
| 6 |
|
| 7 |
Contato e links
|
| 8 |
+
- Email: mcostamonteiro@usp.br
|
| 9 |
- LinkedIn: https://www.linkedin.com/in/costadeveloper
|
| 10 |
- GitHub/Portfolio: https://github.com/costadev00/
|
| 11 |
- Lattes: http://lattes.cnpq.br/3420386831460864
|
me/summary.txt
CHANGED
|
@@ -2,6 +2,8 @@ Meu nome é Matheus Costa. Sou engenheiro e pesquisador de inteligência artific
|
|
| 2 |
|
| 3 |
Atualmente, atuo como Machine Learning Research Engineer na TRACTIAN e também como pesquisador na Universidade de São Paulo, no CIAAM/C4AI, em atividades ligadas ao projeto LLM-BR. Trabalho com coleta e filtragem de dados, construção de corpora, pipelines de treinamento e avaliação de modelos de linguagem.
|
| 4 |
|
|
|
|
|
|
|
| 5 |
Sou bacharel em Sistemas de Informação pela Universidade Federal de Uberlândia, com láurea acadêmica, e mestrando na Escola Politécnica da USP, em Engenharia Elétrica com foco em Inteligência Artificial, sob orientação de Fabio Gagliardi Cozman. Durante a graduação, desenvolvi pesquisa em teoria dos grafos, high-performance computing e escalonamento de workflows científicos em processadores heterogêneos, com foco em aplicações para treinamento de LLMs.
|
| 6 |
|
| 7 |
Entre abril de 2024 e julho de 2025, atuei na Scale AI como Machine Learning Engineer (LLMs), com foco em curadoria, preparação e avaliação de dados para modelos fundacionais, além de suporte a fluxos de treinamento e fine-tuning. Antes disso, trabalhei como estagiário em Engenharia de Software na Algar Telecom, onde desenvolvi soluções backend, APIs, sistemas distribuídos e projetos internos com impacto operacional relevante.
|
|
|
|
| 2 |
|
| 3 |
Atualmente, atuo como Machine Learning Research Engineer na TRACTIAN e também como pesquisador na Universidade de São Paulo, no CIAAM/C4AI, em atividades ligadas ao projeto LLM-BR. Trabalho com coleta e filtragem de dados, construção de corpora, pipelines de treinamento e avaliação de modelos de linguagem.
|
| 4 |
|
| 5 |
+
Meu e-mail de contato profissional é mcostamonteiro@usp.br.
|
| 6 |
+
|
| 7 |
Sou bacharel em Sistemas de Informação pela Universidade Federal de Uberlândia, com láurea acadêmica, e mestrando na Escola Politécnica da USP, em Engenharia Elétrica com foco em Inteligência Artificial, sob orientação de Fabio Gagliardi Cozman. Durante a graduação, desenvolvi pesquisa em teoria dos grafos, high-performance computing e escalonamento de workflows científicos em processadores heterogêneos, com foco em aplicações para treinamento de LLMs.
|
| 8 |
|
| 9 |
Entre abril de 2024 e julho de 2025, atuei na Scale AI como Machine Learning Engineer (LLMs), com foco em curadoria, preparação e avaliação de dados para modelos fundacionais, além de suporte a fluxos de treinamento e fine-tuning. Antes disso, trabalhei como estagiário em Engenharia de Software na Algar Telecom, onde desenvolvi soluções backend, APIs, sistemas distribuídos e projetos internos com impacto operacional relevante.
|