atendentepro 0.6.4__tar.gz → 0.6.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. {atendentepro-0.6.4 → atendentepro-0.6.5}/CHANGELOG.md +10 -0
  2. {atendentepro-0.6.4 → atendentepro-0.6.5}/PKG-INFO +138 -1
  3. {atendentepro-0.6.4 → atendentepro-0.6.5}/README.md +137 -0
  4. {atendentepro-0.6.4 → atendentepro-0.6.5}/pyproject.toml +1 -1
  5. {atendentepro-0.6.4 → atendentepro-0.6.5}/LICENSE +0 -0
  6. {atendentepro-0.6.4 → atendentepro-0.6.5}/MANIFEST.in +0 -0
  7. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/README.md +0 -0
  8. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/__init__.py +0 -0
  9. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/agents/__init__.py +0 -0
  10. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/agents/answer.py +0 -0
  11. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/agents/confirmation.py +0 -0
  12. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/agents/escalation.py +0 -0
  13. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/agents/feedback.py +0 -0
  14. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/agents/flow.py +0 -0
  15. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/agents/interview.py +0 -0
  16. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/agents/knowledge.py +0 -0
  17. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/agents/onboarding.py +0 -0
  18. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/agents/triage.py +0 -0
  19. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/agents/usage.py +0 -0
  20. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/config/__init__.py +0 -0
  21. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/config/settings.py +0 -0
  22. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/guardrails/__init__.py +0 -0
  23. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/guardrails/manager.py +0 -0
  24. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/license.py +0 -0
  25. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/models/__init__.py +0 -0
  26. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/models/context.py +0 -0
  27. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/models/outputs.py +0 -0
  28. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/network.py +0 -0
  29. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/prompts/__init__.py +0 -0
  30. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/prompts/answer.py +0 -0
  31. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/prompts/confirmation.py +0 -0
  32. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/prompts/escalation.py +0 -0
  33. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/prompts/feedback.py +0 -0
  34. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/prompts/flow.py +0 -0
  35. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/prompts/interview.py +0 -0
  36. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/prompts/knowledge.py +0 -0
  37. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/prompts/onboarding.py +0 -0
  38. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/prompts/triage.py +0 -0
  39. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/templates/__init__.py +0 -0
  40. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/templates/manager.py +0 -0
  41. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/utils/__init__.py +0 -0
  42. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/utils/openai_client.py +0 -0
  43. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro/utils/tracing.py +0 -0
  44. {atendentepro-0.6.4 → atendentepro-0.6.5}/atendentepro.egg-info/SOURCES.txt +0 -0
  45. {atendentepro-0.6.4 → atendentepro-0.6.5}/requirements.txt +0 -0
  46. {atendentepro-0.6.4 → atendentepro-0.6.5}/setup.cfg +0 -0
  47. {atendentepro-0.6.4 → atendentepro-0.6.5}/setup.py +0 -0
@@ -5,6 +5,16 @@ All notable changes to AtendentePro will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.6.5] - 2025-01-21
9
+
10
+ ### Added
11
+ - **Scripts de teste de licença**: Novos scripts em `scripts/` para testar o comportamento da biblioteca sem credencial
12
+ - `scripts/test_without_license.py`: Script para verificar se a biblioteca bloqueia corretamente o uso sem licença
13
+ - `scripts/TESTE_SEM_CREDENCIAL.md`: Documentação do teste de licença
14
+
15
+ ### Documentation
16
+ - Documentação sobre verificação de licença e comportamento sem credencial
17
+
8
18
  ## [0.6.4] - 2025-01-14
9
19
 
10
20
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: atendentepro
3
- Version: 0.6.4
3
+ Version: 0.6.5
4
4
  Summary: Framework de orquestração de agentes IA com tom e estilo customizáveis. Integra documentos (RAG), APIs e bancos de dados em uma plataforma inteligente multi-agente.
5
5
  Author-email: BeMonkAI <contato@monkai.com.br>
6
6
  Maintainer-email: BeMonkAI <contato@monkai.com.br>
@@ -96,6 +96,7 @@ Plataforma que unifica múltiplos agentes especializados para resolver demandas
96
96
  - [Estilo de Comunicação](#-estilo-de-comunicação-agentstyle)
97
97
  - [Single Reply Mode](#-single-reply-mode)
98
98
  - [Filtros de Acesso](#-filtros-de-acesso-roleuser)
99
+ - [Múltiplos Agentes](#-múltiplos-agentes-multi-interview--knowledge)
99
100
  - [Tracing e Monitoramento](#-tracing-e-monitoramento)
100
101
  - [Suporte](#-suporte)
101
102
 
@@ -1039,6 +1040,142 @@ tool_access:
1039
1040
 
1040
1041
  ---
1041
1042
 
1043
+ ## 🔀 Múltiplos Agentes (Multi Interview + Knowledge)
1044
+
1045
+ O AtendentePro suporta criar **múltiplas instâncias** de Interview e Knowledge agents, cada um especializado em um domínio diferente.
1046
+
1047
+ 📂 **Exemplo completo**: [docs/examples/multi_agents/](docs/examples/multi_agents/)
1048
+
1049
+ ### Caso de Uso
1050
+
1051
+ Empresa que atende diferentes tipos de clientes:
1052
+ - **Pessoa Física (PF)**: Produtos de consumo
1053
+ - **Pessoa Jurídica (PJ)**: Soluções empresariais
1054
+
1055
+ ### Arquitetura
1056
+
1057
+ ```
1058
+ ┌─────────────────┐
1059
+ │ Triage │
1060
+ │ (entry point) │
1061
+ └────────┬────────┘
1062
+
1063
+ ┌──────────────┼──────────────┐
1064
+ │ │ │
1065
+ ▼ ▼ ▼
1066
+ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
1067
+ │ Interview │ │ Interview │ │ Flow │
1068
+ │ PF │ │ PJ │ │ (comum) │
1069
+ └──────┬──────┘ └──────┬──────┘ └─────────────┘
1070
+ │ │
1071
+ ▼ ▼
1072
+ ┌─────────────┐ ┌─────────────┐
1073
+ │ Knowledge │ │ Knowledge │
1074
+ │ PF │ │ PJ │
1075
+ └─────────────┘ └─────────────┘
1076
+ ```
1077
+
1078
+ ### Implementação
1079
+
1080
+ ```python
1081
+ from atendentepro import (
1082
+ create_custom_network,
1083
+ create_triage_agent,
1084
+ create_interview_agent,
1085
+ create_knowledge_agent,
1086
+ )
1087
+
1088
+ # 1. Criar agentes especializados
1089
+ interview_pf = create_interview_agent(
1090
+ interview_questions="CPF, data de nascimento, renda mensal",
1091
+ name="interview_pf", # Nome único!
1092
+ )
1093
+
1094
+ interview_pj = create_interview_agent(
1095
+ interview_questions="CNPJ, razão social, faturamento",
1096
+ name="interview_pj", # Nome único!
1097
+ )
1098
+
1099
+ knowledge_pf = create_knowledge_agent(
1100
+ knowledge_about="Produtos para consumidor final",
1101
+ name="knowledge_pf",
1102
+ single_reply=True,
1103
+ )
1104
+
1105
+ knowledge_pj = create_knowledge_agent(
1106
+ knowledge_about="Soluções empresariais B2B",
1107
+ name="knowledge_pj",
1108
+ single_reply=True,
1109
+ )
1110
+
1111
+ # 2. Criar Triage
1112
+ triage = create_triage_agent(
1113
+ keywords_text="PF: CPF, pessoal, minha conta | PJ: CNPJ, empresa, MEI",
1114
+ name="triage_agent",
1115
+ )
1116
+
1117
+ # 3. Configurar handoffs
1118
+ triage.handoffs = [interview_pf, interview_pj, knowledge_pf, knowledge_pj]
1119
+ interview_pf.handoffs = [knowledge_pf, triage]
1120
+ interview_pj.handoffs = [knowledge_pj, triage]
1121
+ knowledge_pf.handoffs = [triage]
1122
+ knowledge_pj.handoffs = [triage]
1123
+
1124
+ # 4. Criar network customizada
1125
+ network = create_custom_network(
1126
+ triage=triage,
1127
+ custom_agents={
1128
+ "interview_pf": interview_pf,
1129
+ "interview_pj": interview_pj,
1130
+ "knowledge_pf": knowledge_pf,
1131
+ "knowledge_pj": knowledge_pj,
1132
+ },
1133
+ )
1134
+ ```
1135
+
1136
+ ### Cenários de Roteamento
1137
+
1138
+ | Mensagem do Usuário | Rota |
1139
+ |---------------------|------|
1140
+ | "Quero abrir conta para mim" | Triage → Interview PF → Knowledge PF |
1141
+ | "Preciso de maquininha para minha loja" | Triage → Interview PJ → Knowledge PJ |
1142
+ | "Quanto custa o cartão gold?" | Triage → Knowledge PF (direto) |
1143
+ | "Capital de giro para empresa" | Triage → Knowledge PJ (direto) |
1144
+
1145
+ ### Padrão: 1 Interview → 2 Knowledge
1146
+
1147
+ Outro padrão comum é ter um único Interview que pode direcionar para múltiplos Knowledge:
1148
+
1149
+ ```
1150
+ ┌───────────────┐
1151
+ │ Interview │
1152
+ │ (coleta dados)│
1153
+ └───────┬───────┘
1154
+
1155
+ ┌───────┴───────┐
1156
+ ▼ ▼
1157
+ ┌───────────────┐ ┌───────────────┐
1158
+ │ Knowledge │ │ Knowledge │
1159
+ │ Produtos │ │Troubleshooting│
1160
+ └───────────────┘ └───────────────┘
1161
+ ```
1162
+
1163
+ ```python
1164
+ # Um interview que direciona para múltiplos knowledge
1165
+ interview.handoffs = [knowledge_produtos, knowledge_troubleshooting, triage]
1166
+ ```
1167
+
1168
+ 📂 **Exemplo completo**: [example_one_interview_two_knowledge.py](docs/examples/multi_agents/example_one_interview_two_knowledge.py)
1169
+
1170
+ ### Dicas
1171
+
1172
+ 1. **Nomes únicos**: Cada agente precisa de um `name` distinto
1173
+ 2. **Handoffs claros**: Configure quais agentes cada um pode chamar
1174
+ 3. **Keywords no Triage**: Inclua palavras-chave para direcionar corretamente
1175
+ 4. **single_reply**: Use em Knowledge para evitar loops
1176
+
1177
+ ---
1178
+
1042
1179
  ## 📊 Tracing e Monitoramento
1043
1180
 
1044
1181
  ### MonkAI Trace (Recomendado)
@@ -38,6 +38,7 @@ Plataforma que unifica múltiplos agentes especializados para resolver demandas
38
38
  - [Estilo de Comunicação](#-estilo-de-comunicação-agentstyle)
39
39
  - [Single Reply Mode](#-single-reply-mode)
40
40
  - [Filtros de Acesso](#-filtros-de-acesso-roleuser)
41
+ - [Múltiplos Agentes](#-múltiplos-agentes-multi-interview--knowledge)
41
42
  - [Tracing e Monitoramento](#-tracing-e-monitoramento)
42
43
  - [Suporte](#-suporte)
43
44
 
@@ -981,6 +982,142 @@ tool_access:
981
982
 
982
983
  ---
983
984
 
985
+ ## 🔀 Múltiplos Agentes (Multi Interview + Knowledge)
986
+
987
+ O AtendentePro suporta criar **múltiplas instâncias** de Interview e Knowledge agents, cada um especializado em um domínio diferente.
988
+
989
+ 📂 **Exemplo completo**: [docs/examples/multi_agents/](docs/examples/multi_agents/)
990
+
991
+ ### Caso de Uso
992
+
993
+ Empresa que atende diferentes tipos de clientes:
994
+ - **Pessoa Física (PF)**: Produtos de consumo
995
+ - **Pessoa Jurídica (PJ)**: Soluções empresariais
996
+
997
+ ### Arquitetura
998
+
999
+ ```
1000
+ ┌─────────────────┐
1001
+ │ Triage │
1002
+ │ (entry point) │
1003
+ └────────┬────────┘
1004
+
1005
+ ┌──────────────┼──────────────┐
1006
+ │ │ │
1007
+ ▼ ▼ ▼
1008
+ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
1009
+ │ Interview │ │ Interview │ │ Flow │
1010
+ │ PF │ │ PJ │ │ (comum) │
1011
+ └──────┬──────┘ └──────┬──────┘ └─────────────┘
1012
+ │ │
1013
+ ▼ ▼
1014
+ ┌─────────────┐ ┌─────────────┐
1015
+ │ Knowledge │ │ Knowledge │
1016
+ │ PF │ │ PJ │
1017
+ └─────────────┘ └─────────────┘
1018
+ ```
1019
+
1020
+ ### Implementação
1021
+
1022
+ ```python
1023
+ from atendentepro import (
1024
+ create_custom_network,
1025
+ create_triage_agent,
1026
+ create_interview_agent,
1027
+ create_knowledge_agent,
1028
+ )
1029
+
1030
+ # 1. Criar agentes especializados
1031
+ interview_pf = create_interview_agent(
1032
+ interview_questions="CPF, data de nascimento, renda mensal",
1033
+ name="interview_pf", # Nome único!
1034
+ )
1035
+
1036
+ interview_pj = create_interview_agent(
1037
+ interview_questions="CNPJ, razão social, faturamento",
1038
+ name="interview_pj", # Nome único!
1039
+ )
1040
+
1041
+ knowledge_pf = create_knowledge_agent(
1042
+ knowledge_about="Produtos para consumidor final",
1043
+ name="knowledge_pf",
1044
+ single_reply=True,
1045
+ )
1046
+
1047
+ knowledge_pj = create_knowledge_agent(
1048
+ knowledge_about="Soluções empresariais B2B",
1049
+ name="knowledge_pj",
1050
+ single_reply=True,
1051
+ )
1052
+
1053
+ # 2. Criar Triage
1054
+ triage = create_triage_agent(
1055
+ keywords_text="PF: CPF, pessoal, minha conta | PJ: CNPJ, empresa, MEI",
1056
+ name="triage_agent",
1057
+ )
1058
+
1059
+ # 3. Configurar handoffs
1060
+ triage.handoffs = [interview_pf, interview_pj, knowledge_pf, knowledge_pj]
1061
+ interview_pf.handoffs = [knowledge_pf, triage]
1062
+ interview_pj.handoffs = [knowledge_pj, triage]
1063
+ knowledge_pf.handoffs = [triage]
1064
+ knowledge_pj.handoffs = [triage]
1065
+
1066
+ # 4. Criar network customizada
1067
+ network = create_custom_network(
1068
+ triage=triage,
1069
+ custom_agents={
1070
+ "interview_pf": interview_pf,
1071
+ "interview_pj": interview_pj,
1072
+ "knowledge_pf": knowledge_pf,
1073
+ "knowledge_pj": knowledge_pj,
1074
+ },
1075
+ )
1076
+ ```
1077
+
1078
+ ### Cenários de Roteamento
1079
+
1080
+ | Mensagem do Usuário | Rota |
1081
+ |---------------------|------|
1082
+ | "Quero abrir conta para mim" | Triage → Interview PF → Knowledge PF |
1083
+ | "Preciso de maquininha para minha loja" | Triage → Interview PJ → Knowledge PJ |
1084
+ | "Quanto custa o cartão gold?" | Triage → Knowledge PF (direto) |
1085
+ | "Capital de giro para empresa" | Triage → Knowledge PJ (direto) |
1086
+
1087
+ ### Padrão: 1 Interview → 2 Knowledge
1088
+
1089
+ Outro padrão comum é ter um único Interview que pode direcionar para múltiplos Knowledge:
1090
+
1091
+ ```
1092
+ ┌───────────────┐
1093
+ │ Interview │
1094
+ │ (coleta dados)│
1095
+ └───────┬───────┘
1096
+
1097
+ ┌───────┴───────┐
1098
+ ▼ ▼
1099
+ ┌───────────────┐ ┌───────────────┐
1100
+ │ Knowledge │ │ Knowledge │
1101
+ │ Produtos │ │Troubleshooting│
1102
+ └───────────────┘ └───────────────┘
1103
+ ```
1104
+
1105
+ ```python
1106
+ # Um interview que direciona para múltiplos knowledge
1107
+ interview.handoffs = [knowledge_produtos, knowledge_troubleshooting, triage]
1108
+ ```
1109
+
1110
+ 📂 **Exemplo completo**: [example_one_interview_two_knowledge.py](docs/examples/multi_agents/example_one_interview_two_knowledge.py)
1111
+
1112
+ ### Dicas
1113
+
1114
+ 1. **Nomes únicos**: Cada agente precisa de um `name` distinto
1115
+ 2. **Handoffs claros**: Configure quais agentes cada um pode chamar
1116
+ 3. **Keywords no Triage**: Inclua palavras-chave para direcionar corretamente
1117
+ 4. **single_reply**: Use em Knowledge para evitar loops
1118
+
1119
+ ---
1120
+
984
1121
  ## 📊 Tracing e Monitoramento
985
1122
 
986
1123
  ### MonkAI Trace (Recomendado)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "atendentepro"
3
- version = "0.6.4"
3
+ version = "0.6.5"
4
4
  description = "Framework de orquestração de agentes IA com tom e estilo customizáveis. Integra documentos (RAG), APIs e bancos de dados em uma plataforma inteligente multi-agente."
5
5
  authors = [
6
6
  { name = "BeMonkAI", email = "contato@monkai.com.br" }
File without changes
File without changes
File without changes
File without changes