costadev00 commited on
Commit
f6612e6
·
1 Parent(s): 20cb367

Update contact email to USP address

Browse files
Files changed (3) hide show
  1. app.py +20 -3
  2. me/linkedin.txt +1 -1
  3. 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 = self._load_document(base_dir / "linkedin.txt", base_dir / "linkedin.pdf")
196
- self.lattes = self._load_document(base_dir / "lattes.txt", base_dir / "lattes.pdf")
 
 
 
 
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: matheuscostamonteiro.mc@gmail.com
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.