atendentepro 0.5.4__tar.gz → 0.5.6__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.
- {atendentepro-0.5.4 → atendentepro-0.5.6}/CHANGELOG.md +17 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/PKG-INFO +41 -6
- {atendentepro-0.5.4 → atendentepro-0.5.6}/README.md +40 -5
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/network.py +141 -65
- {atendentepro-0.5.4 → atendentepro-0.5.6}/pyproject.toml +1 -1
- {atendentepro-0.5.4 → atendentepro-0.5.6}/LICENSE +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/MANIFEST.in +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/README.md +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/__init__.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/agents/__init__.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/agents/answer.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/agents/confirmation.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/agents/escalation.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/agents/feedback.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/agents/flow.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/agents/interview.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/agents/knowledge.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/agents/onboarding.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/agents/triage.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/agents/usage.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/config/__init__.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/config/settings.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/guardrails/__init__.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/guardrails/manager.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/license.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/models/__init__.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/models/context.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/models/outputs.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/prompts/__init__.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/prompts/answer.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/prompts/confirmation.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/prompts/escalation.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/prompts/feedback.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/prompts/flow.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/prompts/interview.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/prompts/knowledge.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/prompts/onboarding.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/prompts/triage.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/templates/__init__.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/templates/manager.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/utils/__init__.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/utils/openai_client.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro/utils/tracing.py +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/atendentepro.egg-info/SOURCES.txt +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/requirements.txt +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/setup.cfg +0 -0
- {atendentepro-0.5.4 → atendentepro-0.5.6}/setup.py +0 -0
|
@@ -5,6 +5,23 @@ 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.5.6] - 2025-01-07
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- New parameters in `create_standard_network` to enable/disable individual agents:
|
|
12
|
+
- `include_flow`, `include_interview`, `include_answer`
|
|
13
|
+
- `include_knowledge`, `include_confirmation`, `include_usage`
|
|
14
|
+
- Allows creating custom networks without specific agents (e.g., without Knowledge)
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
- Handoffs are now dynamically configured based on which agents are enabled
|
|
18
|
+
- Documentation updated with examples of minimal network configurations
|
|
19
|
+
|
|
20
|
+
## [0.5.5] - 2025-01-06
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
- GitHub Actions workflow now only triggers PyPI publish on version tags
|
|
24
|
+
|
|
8
25
|
## [0.5.4] - 2025-01-06
|
|
9
26
|
|
|
10
27
|
### Changed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: atendentepro
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.6
|
|
4
4
|
Summary: Sistema de Atendimento Inteligente com Múltiplos Agentes IA - Biblioteca independente e modular baseada no OpenAI Agents SDK
|
|
5
5
|
Author-email: BeMonkAI <contato@monkai.com.br>
|
|
6
6
|
Maintainer-email: BeMonkAI <contato@monkai.com.br>
|
|
@@ -525,26 +525,61 @@ Escalation► Triage, Feedback
|
|
|
525
525
|
Feedback ► Triage, Escalation
|
|
526
526
|
```
|
|
527
527
|
|
|
528
|
-
### Configuração de
|
|
528
|
+
### Configuração de Agentes
|
|
529
|
+
|
|
530
|
+
Você pode escolher exatamente quais agentes incluir na sua rede:
|
|
529
531
|
|
|
530
532
|
```python
|
|
531
|
-
|
|
533
|
+
from pathlib import Path
|
|
534
|
+
from atendentepro import create_standard_network
|
|
535
|
+
|
|
536
|
+
# Todos os agentes habilitados (padrão)
|
|
532
537
|
network = create_standard_network(
|
|
533
538
|
templates_root=Path("./meu_cliente"),
|
|
534
539
|
client="config",
|
|
535
|
-
include_escalation=True, # Padrão: True
|
|
536
|
-
include_feedback=True, # Padrão: True
|
|
537
540
|
)
|
|
538
541
|
|
|
539
|
-
# Sem
|
|
542
|
+
# Sem Knowledge Agent (para clientes sem base de conhecimento)
|
|
540
543
|
network = create_standard_network(
|
|
541
544
|
templates_root=Path("./meu_cliente"),
|
|
542
545
|
client="config",
|
|
546
|
+
include_knowledge=False,
|
|
547
|
+
)
|
|
548
|
+
|
|
549
|
+
# Rede mínima (apenas fluxo principal)
|
|
550
|
+
network = create_standard_network(
|
|
551
|
+
templates_root=Path("./meu_cliente"),
|
|
552
|
+
client="config",
|
|
553
|
+
include_knowledge=False,
|
|
554
|
+
include_confirmation=False,
|
|
555
|
+
include_usage=False,
|
|
543
556
|
include_escalation=False,
|
|
544
557
|
include_feedback=False,
|
|
545
558
|
)
|
|
559
|
+
|
|
560
|
+
# Apenas captura de leads (sem Knowledge nem Usage)
|
|
561
|
+
network = create_standard_network(
|
|
562
|
+
templates_root=Path("./meu_cliente"),
|
|
563
|
+
client="config",
|
|
564
|
+
include_knowledge=False,
|
|
565
|
+
include_usage=False,
|
|
566
|
+
)
|
|
546
567
|
```
|
|
547
568
|
|
|
569
|
+
### Parâmetros Disponíveis
|
|
570
|
+
|
|
571
|
+
| Parâmetro | Padrão | Descrição |
|
|
572
|
+
|-----------|--------|-----------|
|
|
573
|
+
| `include_flow` | `True` | Agente de fluxo conversacional |
|
|
574
|
+
| `include_interview` | `True` | Agente de entrevista/coleta |
|
|
575
|
+
| `include_answer` | `True` | Agente de resposta final |
|
|
576
|
+
| `include_knowledge` | `True` | Agente de base de conhecimento |
|
|
577
|
+
| `include_confirmation` | `True` | Agente de confirmação |
|
|
578
|
+
| `include_usage` | `True` | Agente de instruções de uso |
|
|
579
|
+
| `include_onboarding` | `False` | Agente de boas-vindas |
|
|
580
|
+
| `include_escalation` | `True` | Agente de escalonamento humano |
|
|
581
|
+
| `include_feedback` | `True` | Agente de tickets/feedback |
|
|
582
|
+
|
|
548
583
|
---
|
|
549
584
|
|
|
550
585
|
## 🔧 Dependências
|
|
@@ -469,26 +469,61 @@ Escalation► Triage, Feedback
|
|
|
469
469
|
Feedback ► Triage, Escalation
|
|
470
470
|
```
|
|
471
471
|
|
|
472
|
-
### Configuração de
|
|
472
|
+
### Configuração de Agentes
|
|
473
|
+
|
|
474
|
+
Você pode escolher exatamente quais agentes incluir na sua rede:
|
|
473
475
|
|
|
474
476
|
```python
|
|
475
|
-
|
|
477
|
+
from pathlib import Path
|
|
478
|
+
from atendentepro import create_standard_network
|
|
479
|
+
|
|
480
|
+
# Todos os agentes habilitados (padrão)
|
|
476
481
|
network = create_standard_network(
|
|
477
482
|
templates_root=Path("./meu_cliente"),
|
|
478
483
|
client="config",
|
|
479
|
-
include_escalation=True, # Padrão: True
|
|
480
|
-
include_feedback=True, # Padrão: True
|
|
481
484
|
)
|
|
482
485
|
|
|
483
|
-
# Sem
|
|
486
|
+
# Sem Knowledge Agent (para clientes sem base de conhecimento)
|
|
484
487
|
network = create_standard_network(
|
|
485
488
|
templates_root=Path("./meu_cliente"),
|
|
486
489
|
client="config",
|
|
490
|
+
include_knowledge=False,
|
|
491
|
+
)
|
|
492
|
+
|
|
493
|
+
# Rede mínima (apenas fluxo principal)
|
|
494
|
+
network = create_standard_network(
|
|
495
|
+
templates_root=Path("./meu_cliente"),
|
|
496
|
+
client="config",
|
|
497
|
+
include_knowledge=False,
|
|
498
|
+
include_confirmation=False,
|
|
499
|
+
include_usage=False,
|
|
487
500
|
include_escalation=False,
|
|
488
501
|
include_feedback=False,
|
|
489
502
|
)
|
|
503
|
+
|
|
504
|
+
# Apenas captura de leads (sem Knowledge nem Usage)
|
|
505
|
+
network = create_standard_network(
|
|
506
|
+
templates_root=Path("./meu_cliente"),
|
|
507
|
+
client="config",
|
|
508
|
+
include_knowledge=False,
|
|
509
|
+
include_usage=False,
|
|
510
|
+
)
|
|
490
511
|
```
|
|
491
512
|
|
|
513
|
+
### Parâmetros Disponíveis
|
|
514
|
+
|
|
515
|
+
| Parâmetro | Padrão | Descrição |
|
|
516
|
+
|-----------|--------|-----------|
|
|
517
|
+
| `include_flow` | `True` | Agente de fluxo conversacional |
|
|
518
|
+
| `include_interview` | `True` | Agente de entrevista/coleta |
|
|
519
|
+
| `include_answer` | `True` | Agente de resposta final |
|
|
520
|
+
| `include_knowledge` | `True` | Agente de base de conhecimento |
|
|
521
|
+
| `include_confirmation` | `True` | Agente de confirmação |
|
|
522
|
+
| `include_usage` | `True` | Agente de instruções de uso |
|
|
523
|
+
| `include_onboarding` | `False` | Agente de boas-vindas |
|
|
524
|
+
| `include_escalation` | `True` | Agente de escalonamento humano |
|
|
525
|
+
| `include_feedback` | `True` | Agente de tickets/feedback |
|
|
526
|
+
|
|
492
527
|
---
|
|
493
528
|
|
|
494
529
|
## 🔧 Dependências
|
|
@@ -102,9 +102,17 @@ class AgentNetwork:
|
|
|
102
102
|
def create_standard_network(
|
|
103
103
|
templates_root: Path,
|
|
104
104
|
client: str = "standard",
|
|
105
|
+
# Agents to include
|
|
106
|
+
include_flow: bool = True,
|
|
107
|
+
include_interview: bool = True,
|
|
108
|
+
include_answer: bool = True,
|
|
109
|
+
include_knowledge: bool = True,
|
|
110
|
+
include_confirmation: bool = True,
|
|
111
|
+
include_usage: bool = True,
|
|
105
112
|
include_onboarding: bool = False,
|
|
106
113
|
include_escalation: bool = True,
|
|
107
114
|
include_feedback: bool = True,
|
|
115
|
+
# Agent-specific configurations
|
|
108
116
|
escalation_channels: str = "",
|
|
109
117
|
feedback_protocol_prefix: str = "TKT",
|
|
110
118
|
feedback_brand_color: str = "#4A90D9",
|
|
@@ -114,7 +122,10 @@ def create_standard_network(
|
|
|
114
122
|
"""
|
|
115
123
|
Create a standard agent network with proper handoff configuration.
|
|
116
124
|
|
|
117
|
-
This creates
|
|
125
|
+
This creates a configurable network where you can enable/disable specific agents.
|
|
126
|
+
The Triage agent is always included as it's the entry point.
|
|
127
|
+
|
|
128
|
+
Default handoff configuration (when all agents are enabled):
|
|
118
129
|
- Triage -> Flow, Confirmation, Knowledge, Usage, Escalation, Feedback
|
|
119
130
|
- Flow -> Interview, Triage, Escalation, Feedback
|
|
120
131
|
- Interview -> Answer, Escalation, Feedback
|
|
@@ -122,13 +133,19 @@ def create_standard_network(
|
|
|
122
133
|
- Confirmation -> Triage, Escalation, Feedback
|
|
123
134
|
- Knowledge -> Triage, Escalation, Feedback
|
|
124
135
|
- Usage -> Triage, Escalation, Feedback
|
|
125
|
-
- Escalation -> Triage
|
|
136
|
+
- Escalation -> Triage, Feedback
|
|
126
137
|
- Feedback -> Triage, Escalation
|
|
127
138
|
|
|
128
139
|
Args:
|
|
129
140
|
templates_root: Root directory for template configurations.
|
|
130
141
|
client: Client key to load configurations for.
|
|
131
|
-
|
|
142
|
+
include_flow: Whether to include the flow agent (default True).
|
|
143
|
+
include_interview: Whether to include the interview agent (default True).
|
|
144
|
+
include_answer: Whether to include the answer agent (default True).
|
|
145
|
+
include_knowledge: Whether to include the knowledge agent (default True).
|
|
146
|
+
include_confirmation: Whether to include the confirmation agent (default True).
|
|
147
|
+
include_usage: Whether to include the usage agent (default True).
|
|
148
|
+
include_onboarding: Whether to include the onboarding agent (default False).
|
|
132
149
|
include_escalation: Whether to include the escalation agent (default True).
|
|
133
150
|
include_feedback: Whether to include the feedback agent (default True).
|
|
134
151
|
escalation_channels: Description of available escalation channels.
|
|
@@ -142,6 +159,25 @@ def create_standard_network(
|
|
|
142
159
|
|
|
143
160
|
Raises:
|
|
144
161
|
LicenseNotActivatedError: If the library is not activated.
|
|
162
|
+
|
|
163
|
+
Example:
|
|
164
|
+
# Create network without Knowledge agent
|
|
165
|
+
network = create_standard_network(
|
|
166
|
+
templates_root=Path("templates"),
|
|
167
|
+
client="my_client",
|
|
168
|
+
include_knowledge=False,
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
# Create minimal network (only Triage, Flow, Interview, Answer)
|
|
172
|
+
network = create_standard_network(
|
|
173
|
+
templates_root=Path("templates"),
|
|
174
|
+
client="my_client",
|
|
175
|
+
include_knowledge=False,
|
|
176
|
+
include_confirmation=False,
|
|
177
|
+
include_usage=False,
|
|
178
|
+
include_escalation=False,
|
|
179
|
+
include_feedback=False,
|
|
180
|
+
)
|
|
145
181
|
"""
|
|
146
182
|
# Verificar licença
|
|
147
183
|
require_activation()
|
|
@@ -210,50 +246,64 @@ def create_standard_network(
|
|
|
210
246
|
tools = custom_tools or {}
|
|
211
247
|
|
|
212
248
|
# Create agents without handoffs first
|
|
249
|
+
# Triage is always created (entry point)
|
|
213
250
|
triage = create_triage_agent(
|
|
214
251
|
keywords_text=triage_keywords,
|
|
215
252
|
guardrails=get_guardrails_for_agent("Triage Agent", templates_root),
|
|
216
253
|
)
|
|
217
254
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
255
|
+
# Create optional agents based on include flags
|
|
256
|
+
flow = None
|
|
257
|
+
if include_flow:
|
|
258
|
+
flow = create_flow_agent(
|
|
259
|
+
flow_template=flow_template,
|
|
260
|
+
flow_keywords=flow_keywords,
|
|
261
|
+
guardrails=get_guardrails_for_agent("Flow Agent", templates_root),
|
|
262
|
+
)
|
|
223
263
|
|
|
224
|
-
interview =
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
264
|
+
interview = None
|
|
265
|
+
if include_interview:
|
|
266
|
+
interview = create_interview_agent(
|
|
267
|
+
interview_template=flow_template,
|
|
268
|
+
interview_questions=interview_questions,
|
|
269
|
+
tools=tools.get("interview", []),
|
|
270
|
+
guardrails=get_guardrails_for_agent("Interview Agent", templates_root),
|
|
271
|
+
)
|
|
230
272
|
|
|
231
|
-
answer =
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
273
|
+
answer = None
|
|
274
|
+
if include_answer:
|
|
275
|
+
answer = create_answer_agent(
|
|
276
|
+
answer_template="",
|
|
277
|
+
guardrails=get_guardrails_for_agent("Answer Agent", templates_root),
|
|
278
|
+
)
|
|
235
279
|
|
|
236
|
-
knowledge =
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
280
|
+
knowledge = None
|
|
281
|
+
if include_knowledge:
|
|
282
|
+
knowledge = create_knowledge_agent(
|
|
283
|
+
knowledge_about=knowledge_about,
|
|
284
|
+
knowledge_template=knowledge_template,
|
|
285
|
+
knowledge_format=knowledge_format,
|
|
286
|
+
embeddings_path=embeddings_path,
|
|
287
|
+
data_sources_description=data_sources_description,
|
|
288
|
+
include_rag_tool=has_embeddings,
|
|
289
|
+
tools=tools.get("knowledge", []),
|
|
290
|
+
guardrails=get_guardrails_for_agent("Knowledge Agent", templates_root),
|
|
291
|
+
)
|
|
246
292
|
|
|
247
|
-
confirmation =
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
293
|
+
confirmation = None
|
|
294
|
+
if include_confirmation:
|
|
295
|
+
confirmation = create_confirmation_agent(
|
|
296
|
+
confirmation_about=confirmation_about,
|
|
297
|
+
confirmation_template=confirmation_template,
|
|
298
|
+
confirmation_format=confirmation_format,
|
|
299
|
+
guardrails=get_guardrails_for_agent("Confirmation Agent", templates_root),
|
|
300
|
+
)
|
|
253
301
|
|
|
254
|
-
usage =
|
|
255
|
-
|
|
256
|
-
|
|
302
|
+
usage = None
|
|
303
|
+
if include_usage:
|
|
304
|
+
usage = create_usage_agent(
|
|
305
|
+
guardrails=get_guardrails_for_agent("Usage Agent", templates_root),
|
|
306
|
+
)
|
|
257
307
|
|
|
258
308
|
# Create escalation agent if requested
|
|
259
309
|
escalation = None
|
|
@@ -275,48 +325,74 @@ def create_standard_network(
|
|
|
275
325
|
guardrails=get_guardrails_for_agent("Feedback Agent", templates_root),
|
|
276
326
|
)
|
|
277
327
|
|
|
278
|
-
# Configure handoffs
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
328
|
+
# Configure handoffs dynamically based on which agents are included
|
|
329
|
+
# Helper function to filter None values
|
|
330
|
+
def filter_agents(*agents):
|
|
331
|
+
return [a for a in agents if a is not None]
|
|
332
|
+
|
|
333
|
+
# Build triage handoffs (main routing)
|
|
334
|
+
triage_handoffs = filter_agents(flow, confirmation, knowledge, usage)
|
|
335
|
+
|
|
336
|
+
# Other agent handoffs
|
|
337
|
+
flow_handoffs = filter_agents(interview, triage) if flow else []
|
|
338
|
+
confirmation_handoffs = [triage] if confirmation else []
|
|
339
|
+
knowledge_handoffs = [triage] if knowledge else []
|
|
340
|
+
usage_handoffs = [triage] if usage else []
|
|
341
|
+
interview_handoffs = filter_agents(answer) if interview else []
|
|
342
|
+
answer_handoffs = [triage] if answer else []
|
|
343
|
+
escalation_handoffs = [triage] if escalation else []
|
|
344
|
+
feedback_handoffs = [triage] if feedback else []
|
|
288
345
|
|
|
289
346
|
# Add escalation to all agents if enabled
|
|
290
347
|
if escalation:
|
|
291
348
|
triage_handoffs.append(escalation)
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
349
|
+
if flow:
|
|
350
|
+
flow_handoffs.append(escalation)
|
|
351
|
+
if confirmation:
|
|
352
|
+
confirmation_handoffs.append(escalation)
|
|
353
|
+
if knowledge:
|
|
354
|
+
knowledge_handoffs.append(escalation)
|
|
355
|
+
if usage:
|
|
356
|
+
usage_handoffs.append(escalation)
|
|
357
|
+
if interview:
|
|
358
|
+
interview_handoffs.append(escalation)
|
|
359
|
+
if answer:
|
|
360
|
+
answer_handoffs.append(escalation)
|
|
298
361
|
if feedback:
|
|
299
362
|
feedback_handoffs.append(escalation)
|
|
300
363
|
|
|
301
364
|
# Add feedback to all agents if enabled
|
|
302
365
|
if feedback:
|
|
303
366
|
triage_handoffs.append(feedback)
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
367
|
+
if flow:
|
|
368
|
+
flow_handoffs.append(feedback)
|
|
369
|
+
if confirmation:
|
|
370
|
+
confirmation_handoffs.append(feedback)
|
|
371
|
+
if knowledge:
|
|
372
|
+
knowledge_handoffs.append(feedback)
|
|
373
|
+
if usage:
|
|
374
|
+
usage_handoffs.append(feedback)
|
|
375
|
+
if interview:
|
|
376
|
+
interview_handoffs.append(feedback)
|
|
377
|
+
if answer:
|
|
378
|
+
answer_handoffs.append(feedback)
|
|
310
379
|
if escalation:
|
|
311
380
|
escalation_handoffs.append(feedback)
|
|
312
381
|
|
|
382
|
+
# Apply handoffs to agents
|
|
313
383
|
triage.handoffs = triage_handoffs
|
|
314
|
-
flow
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
384
|
+
if flow:
|
|
385
|
+
flow.handoffs = flow_handoffs
|
|
386
|
+
if confirmation:
|
|
387
|
+
confirmation.handoffs = confirmation_handoffs
|
|
388
|
+
if knowledge:
|
|
389
|
+
knowledge.handoffs = knowledge_handoffs
|
|
390
|
+
if usage:
|
|
391
|
+
usage.handoffs = usage_handoffs
|
|
392
|
+
if interview:
|
|
393
|
+
interview.handoffs = interview_handoffs
|
|
394
|
+
if answer:
|
|
395
|
+
answer.handoffs = answer_handoffs
|
|
320
396
|
if escalation:
|
|
321
397
|
escalation.handoffs = escalation_handoffs
|
|
322
398
|
if feedback:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "atendentepro"
|
|
3
|
-
version = "0.5.
|
|
3
|
+
version = "0.5.6"
|
|
4
4
|
description = "Sistema de Atendimento Inteligente com Múltiplos Agentes IA - Biblioteca independente e modular baseada no OpenAI Agents SDK"
|
|
5
5
|
authors = [
|
|
6
6
|
{ name = "BeMonkAI", email = "contato@monkai.com.br" }
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|