chatgraph 0.6.4__py3-none-any.whl

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.
@@ -0,0 +1,521 @@
1
+ Metadata-Version: 2.4
2
+ Name: chatgraph
3
+ Version: 0.6.4
4
+ Summary: A user-friendly chatbot library
5
+ License: MIT
6
+ License-File: LICENSE
7
+ Keywords: chatbot,rabbitmq,messaging,routing,chatgraph,python
8
+ Author: Irisson N. Lima
9
+ Author-email: irisson.lima@verdecard.com.br
10
+ Requires-Python: >=3.12,<4.0
11
+ Classifier: License :: OSI Approved :: MIT License
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.12
14
+ Classifier: Programming Language :: Python :: 3.13
15
+ Classifier: Programming Language :: Python :: 3.14
16
+ Requires-Dist: aio-pika (>=9.5.8,<10.0.0)
17
+ Requires-Dist: grpcio (>=1.67.0,<2.0.0)
18
+ Requires-Dist: grpcio-tools (>=1.67.0,<2.0.0)
19
+ Requires-Dist: httpx (>=0.28.1,<0.29.0)
20
+ Requires-Dist: matplotlib (>=3.10.0,<4.0.0)
21
+ Requires-Dist: networkx (>=3.4.2,<4.0.0)
22
+ Requires-Dist: pika (>=1.3.2,<2.0.0)
23
+ Requires-Dist: protobuf (>=6.31.1,<7.0.0)
24
+ Requires-Dist: python-dotenv (>=1.0.1,<2.0.0)
25
+ Requires-Dist: rich (>=13.8.1,<14.0.0)
26
+ Requires-Dist: typer (>=0.12.5,<0.13.0)
27
+ Project-URL: Homepage, https://github.com/irissonnlima/chatgraph
28
+ Project-URL: Repository, https://github.com/irissonnlima/chatgraph
29
+ Description-Content-Type: text/markdown
30
+
31
+ ### **README - ChatGraph**
32
+
33
+ # ChatGraph - Framework para Criação de Chatbots
34
+
35
+ ChatGraph é uma biblioteca desenvolvida para criar chatbots interativos e modulares. Com suporte integrado para gRPC e RabbitMQ, ela permite gerenciar fluxos complexos de mensagens e criar comandos de chatbots que respondem a rotas específicas. Toda interação começa pela rota `start` e deriva para sub-rotas como `start.choice`.
36
+
37
+ ### **Requisitos**
38
+
39
+ - Python 3.12+
40
+ - `pip` para gerenciamento de pacotes
41
+
42
+ ### **Instalação**
43
+
44
+ A biblioteca ChatGraph pode ser instalada diretamente via `pip`:
45
+
46
+ ```bash
47
+ pip install chatgraph
48
+ ```
49
+
50
+ ## **Configuração**
51
+
52
+ ### **Variáveis de Ambiente**
53
+
54
+ Crie um arquivo `.env` na raiz do projeto para definir as variáveis necessárias, incluindo detalhes de conexão com RabbitMQ e URI para gRPC. Exemplo:
55
+
56
+ ```env
57
+ RABBIT_USER=seu_usuario
58
+ RABBIT_PASS=sua_senha
59
+ RABBIT_URI=amqp://localhost
60
+ RABBIT_QUEUE=chat_queue
61
+ RABBIT_PREFETCH=1
62
+ RABBIT_VHOST=/
63
+ GRPC_URI=grpc://localhost:50051
64
+ ```
65
+
66
+ Aqui está uma descrição mais detalhada de cada um dos objetos mencionados. Esses componentes são fundamentais para a estrutura e funcionalidade do ChatGraph, permitindo gerenciar fluxos de chat, interações e estados do usuário de forma eficiente.
67
+
68
+ ### **Tipos de Objetos e Suas Funções**
69
+
70
+ ---
71
+
72
+ ### **1. `UserCall`**
73
+
74
+ **Localização:** `from .types.request_types import UserCall`
75
+
76
+ O `UserCall` representa uma solicitação de interação do usuário para o chatbot. Ele encapsula as informações básicas sobre uma mensagem recebida do usuário e fornece detalhes essenciais que o chatbot pode usar para decidir como responder.
77
+
78
+ #### **Principais Propriedades:**
79
+
80
+ - **`text`**: A mensagem de texto enviada pelo usuário.
81
+ - **`user_id`**: Identificador único do usuário, permitindo o rastreamento e a vinculação de estados.
82
+ - **`platform`**: Informação sobre a plataforma usada (por exemplo, WhatsApp, Web, etc.).
83
+ - **`timestamp`**: Horário em que a mensagem foi recebida.
84
+ - **`metadata`**: Dados adicionais que podem incluir informações contextuais (ex: geolocalização, histórico de navegação).
85
+
86
+ #### **Uso:**
87
+
88
+ O `UserCall` é instanciado sempre que uma nova mensagem é recebida, e fornece os dados necessários para que o chatbot processe e determine a resposta apropriada.
89
+
90
+ ---
91
+
92
+ ### **2. `UserState`**
93
+
94
+ **Localização:** `from .types.request_types import UserState`
95
+
96
+ `UserState` é usado para representar o estado atual do usuário no sistema de chatbot. Ele guarda o contexto de uma sessão do usuário, permitindo que o chatbot mantenha informações ao longo de múltiplas interações.
97
+
98
+ #### **Principais Propriedades:**
99
+
100
+ - **`state_id`**: Identificador único para o estado do usuário.
101
+ - **`current_route`**: A rota atual onde o usuário está localizado dentro do fluxo do chatbot.
102
+ - **`data`**: Dados de estado armazenados que podem ser usados para tomar decisões em futuras interações (ex: preferências, histórico de escolhas).
103
+ - **`last_interaction`**: Timestamp da última interação do usuário.
104
+
105
+ #### **Uso:**
106
+
107
+ O `UserState` ajuda a manter o contexto entre as mensagens para que o chatbot possa continuar uma conversa sem perder informações importantes.
108
+
109
+ ---
110
+
111
+ ### **3. `RedirectResponse`**
112
+
113
+ **Localização:** `from .types.end_types import RedirectResponse`
114
+
115
+ `RedirectResponse` é usado quando o chatbot precisa redirecionar o usuário para uma rota diferente dentro do fluxo de conversa. Isso é útil para mover o usuário para diferentes partes do chatbot com base na lógica de negócios.
116
+
117
+ #### **Principais Propriedades:**
118
+
119
+ - **`target_route`**: Rota para a qual o usuário será redirecionado.
120
+ - **`message`**: Mensagem opcional a ser exibida durante o redirecionamento.
121
+
122
+ #### **Uso:**
123
+
124
+ Permite criar fluxos mais dinâmicos, onde os usuários podem ser movidos para diferentes rotas dependendo de suas ações e escolhas.
125
+
126
+ ---
127
+
128
+ ### **4. `EndChatResponse`**
129
+
130
+ **Localização:** `from .types.end_types import EndChatResponse`
131
+
132
+ `EndChatResponse` é uma resposta que sinaliza o fim de uma conversa com o chatbot. Pode ser usado para finalizar a sessão de forma limpa e opcionalmente fornecer uma mensagem de encerramento.
133
+
134
+ #### **Principais Propriedades:**
135
+
136
+ - **`message`**: Mensagem final que será enviada ao usuário para encerrar a conversa.
137
+ - **`feedback_prompt`**: (Opcional) Um prompt para feedback, se desejado.
138
+
139
+ #### **Uso:**
140
+
141
+ Usado quando o fluxo do chatbot deve ser encerrado. Garante que a sessão do usuário seja finalizada corretamente e fornece uma experiência de término satisfatória.
142
+
143
+ ---
144
+
145
+ ### **5. `TransferToHuman`**
146
+
147
+ **Localização:** `from .types.end_types import TransferToHuman`
148
+
149
+ `TransferToHuman` é uma resposta que permite transferir a interação do usuário para um operador humano. Isso é útil quando o chatbot encontra uma situação que requer suporte humano.
150
+
151
+ #### **Principais Propriedades:**
152
+
153
+ - **`message`**: Mensagem para informar ao usuário que ele será transferido para um atendente humano.
154
+ - **`department`**: (Opcional) Departamento ou equipe específica para a qual a interação será transferida.
155
+
156
+ #### **Uso:**
157
+
158
+ Fornece uma maneira para o chatbot transferir conversas para atendimento humano quando necessário, garantindo uma transição suave.
159
+
160
+ ---
161
+
162
+ ### **6. `Message`**
163
+
164
+ **Localização:** `from .types.message_types import Message`
165
+
166
+ O `Message` é um objeto básico que representa uma mensagem de texto enviada pelo chatbot para o usuário. Ele é o bloco de construção fundamental para as respostas do chatbot.
167
+
168
+ #### **Principais Propriedades:**
169
+
170
+ - **`text`**: O conteúdo da mensagem que será enviado ao usuário.
171
+ - **`metadata`**: Informações adicionais sobre a mensagem (ex: tags, prioridade).
172
+
173
+ #### **Uso:**
174
+
175
+ Usado para enviar respostas simples e diretas ao usuário. O `Message` é utilizado em quase todas as interações básicas do chatbot.
176
+
177
+ ---
178
+
179
+ ### **7. `Button`**
180
+
181
+ **Localização:** `from .types.message_types import Button`
182
+
183
+ O `Button` representa uma mensagem que inclui botões clicáveis para oferecer ao usuário opções específicas. Ele é essencial para criar fluxos interativos e guiar o usuário para ações específicas.
184
+
185
+ #### **Principais Propriedades:**
186
+
187
+ - **`text`**: Texto descritivo acima dos botões.
188
+ - **`buttons`**: Lista de opções que aparecem como botões clicáveis.
189
+ - **`callback_data`**: (Opcional) Dados que são passados quando um botão é clicado, permitindo lógica adicional.
190
+
191
+ #### **Uso:**
192
+
193
+ Facilita a navegação no chatbot ao permitir que o usuário escolha uma ação clicando em um botão, em vez de digitar uma resposta.
194
+
195
+ ---
196
+
197
+ ### **8. `ListElements`**
198
+
199
+ **Localização:** `from .types.message_types import ListElements`
200
+
201
+ O `ListElements` é um tipo de mensagem que exibe uma lista de elementos ao usuário, útil para apresentar várias opções de uma só vez.
202
+
203
+ #### **Principais Propriedades:**
204
+
205
+ - **`title`**: Título da lista.
206
+ - **`items`**: Lista de elementos a serem exibidos.
207
+ - **`image_url`**: (Opcional) URL de uma imagem para cada item, se desejado.
208
+ - **`description`**: (Opcional) Descrição adicional para cada elemento.
209
+
210
+ #### **Uso:**
211
+
212
+ Ideal para cenários em que múltiplas opções precisam ser apresentadas ao usuário, como uma lista de produtos ou serviços.
213
+
214
+ ---
215
+
216
+ ### **9. `Route`**
217
+
218
+ **Localização:** `from .types.route import Route`
219
+
220
+ O `Route` gerencia a navegação entre diferentes partes do chatbot. Ele é responsável por direcionar o fluxo de conversação, ajudando a determinar qual é a próxima rota ou passo que o usuário deve seguir.
221
+
222
+ #### **Principais Funções:**
223
+
224
+ - **`get_next`**: Retorna a próxima rota a ser seguida no fluxo.
225
+ - **`back`**: Permite retornar para uma rota anterior.
226
+ - **`forward`**: Avança para uma rota específica.
227
+ - **`resolve`**: Determina qual é a rota baseada no estado atual e nas escolhas do usuário.
228
+
229
+ #### **Uso:**
230
+
231
+ O `Route` é essencial para criar fluxos conversacionais dinâmicos e adaptáveis. Ele ajuda a definir a progressão lógica do chatbot, permitindo controle total sobre como o usuário navega entre diferentes partes do fluxo.
232
+
233
+ ### **Estrutura de Rota**
234
+
235
+ Todas as interações no ChatGraph começam pela rota `start` e se derivam para sub-rotas, criando um fluxo contínuo para gerenciar conversas.
236
+
237
+ - **Exemplo:** `start`, `start.choice`, `start.choice.about`
238
+
239
+ ## **Uso**
240
+
241
+ ### **Configurando o Chatbot**
242
+
243
+ ```python
244
+ from chatgraph import ChatbotApp, UserCall, Button, Route
245
+
246
+ app = ChatbotApp()
247
+
248
+ @app.route("start")
249
+ def start(usercall: UserCall, rota: Route) -> tuple:
250
+ return (
251
+ 'Bem-vindo!',
252
+ Button(
253
+ text="Escolha uma opção:",
254
+ buttons=["Opção 1", "Opção 2"]
255
+ ),
256
+ rota.get_next('.choice')
257
+ )
258
+
259
+ @app.route("start.choice")
260
+ def start_choice(usercall: UserCall, rota: Route) -> tuple:
261
+ if usercall.text == "Opção 1":
262
+ return 'Você escolheu a Opção 1!'
263
+ elif usercall.text == "Opção 2":
264
+ return 'Você escolheu a Opção 2!'
265
+
266
+ app.start()
267
+ ```
268
+
269
+ ## **Estrutura da Biblioteca**
270
+
271
+ ```
272
+ chatgraph/
273
+
274
+ ├── auth/
275
+ │ └── credentials.py # Gerenciamento de credenciais
276
+ ├── bot/
277
+ │ ├── chatbot_model.py # Lógica principal do chatbot
278
+ │ └── chatbot_router.py # Roteamento de rotas do chatbot
279
+ ├── cli/
280
+ │ └── main.py # Implementação do CLI
281
+ ├── gRPC/
282
+ │ └── gRPCCall.py # Implementação de comunicação gRPC
283
+ ├── messages/
284
+ │ └── message_consumer.py # Consumidor de mensagens RabbitMQ
285
+ └── types/
286
+ ├── request_types.py # Definição de tipos de requisições
287
+ ├── message_types.py # Definição de tipos de mensagens
288
+ ├── end_types.py # Tipos de finalização de chat
289
+ └── route.py # Gerenciamento de rotas
290
+ ```
291
+
292
+ ## **Exemplo de Configuração de Rota**
293
+
294
+ ### **Estrutura de Fluxo**
295
+
296
+ ```python
297
+ from chatgraph import ChatbotApp, UserCall, Button, Route
298
+
299
+ app = ChatbotApp()
300
+
301
+ @app.route("start")
302
+ def start(usercall: UserCall, rota: Route)->tuple:
303
+ return (
304
+ 'Oi',
305
+ Button(
306
+ text="Olá, eu sou o chatbot da empresa X. Como posso te ajudar?",
307
+ buttons=["saber mais", "falar com atendente"],
308
+ ),
309
+ rota.get_next('.choice')
310
+ )
311
+
312
+ @app.route("start.choice")
313
+ def start_choice(usercall: UserCall, rota: Route)->tuple:
314
+ if usercall.text == "saber mais":
315
+ return (
316
+ 'Sobre o que você quer saber mais?',
317
+ Button(
318
+ text="Sobre a empresa",
319
+ buttons=["sobre produtos", "sobre serviços"],
320
+ ),
321
+ rota.get_next('.about')
322
+ )
323
+ elif usercall.text == "falar com atendente":
324
+ return 'Ok'
325
+
326
+ app.start()
327
+ ```
328
+
329
+ ## **CLI**
330
+
331
+ ### **Comandos Disponíveis**
332
+
333
+ 1. **Listar campanhas:**
334
+
335
+ ```bash
336
+ chatgraph campaigns
337
+ ```
338
+
339
+ 2. **Filtrar campanhas usando regex:**
340
+
341
+ ```bash
342
+ chatgraph campaigns --regex "promo"
343
+ ```
344
+
345
+ 3. **Deletar um estado de usuário:**
346
+
347
+ ```bash
348
+ chatgraph delete-ustate 12345
349
+ ```
350
+
351
+ **Alias:** `delete-user-state`, `del-ustate`, `dus`
352
+
353
+ ### **Aliases e Flexibilidade**
354
+
355
+ Para facilitar o uso, alguns comandos possuem apelidos. Por exemplo, o comando para deletar estados de usuário pode ser chamado de múltiplas formas:
356
+
357
+ ```bash
358
+ chatgraph delete-user-state 12345
359
+ chatgraph del-ustate 12345
360
+ chatgraph dus 12345
361
+ ```
362
+
363
+ ## **Testes**
364
+
365
+ O ChatGraph possui uma estrutura completa de testes dividida em **testes unitários** e **testes de integração**.
366
+
367
+ ### **Estrutura de Testes**
368
+
369
+ ```
370
+ tests/
371
+ ├── unit/ # Testes unitários (rápidos, isolados, usam mocks)
372
+ │ ├── test_router_http_client.py
373
+ │ ├── test_models_*.py
374
+ │ └── conftest.py
375
+ └── integration/ # Testes de integração (chamadas reais para APIs)
376
+ ├── test_router_client_integration.py
377
+ └── conftest.py
378
+ ```
379
+
380
+ ### **Executando Testes Unitários**
381
+
382
+ Os testes unitários usam mocks e são rápidos. Execute-os com:
383
+
384
+ ```bash
385
+ # Todos os testes unitários
386
+ poetry run pytest tests/unit/ -v
387
+
388
+ # Teste específico
389
+ poetry run pytest tests/unit/test_router_http_client.py -v
390
+
391
+ # Com cobertura
392
+ poetry run pytest tests/unit/ --cov=chatgraph --cov-report=html
393
+ ```
394
+
395
+ ### **Executando Testes de Integração**
396
+
397
+ Os testes de integração fazem chamadas **reais** para APIs externas e validam contratos e comportamentos reais.
398
+
399
+ #### **1. Configure as Variáveis de Ambiente**
400
+
401
+ Crie um arquivo `.env` ou exporte as variáveis:
402
+
403
+ ```bash
404
+ # Obrigatório
405
+ export ROUTER_API_BASE_URL="https://api.example.com/v1/actions"
406
+
407
+ # Opcional (se a API requer autenticação)
408
+ export ROUTER_API_USERNAME="seu_usuario"
409
+ export ROUTER_API_PASSWORD="sua_senha"
410
+
411
+ # Opcional (timeout padrão: 60s)
412
+ export ROUTER_API_TIMEOUT="60.0"
413
+
414
+ # Opcional (IDs para testes)
415
+ export TEST_USER_ID="user_test_001"
416
+ export TEST_COMPANY_ID="company_test_001"
417
+ ```
418
+
419
+ **No Windows (PowerShell):**
420
+
421
+ ```powershell
422
+ $env:ROUTER_API_BASE_URL="https://api.example.com/v1/actions"
423
+ $env:ROUTER_API_USERNAME="seu_usuario"
424
+ $env:ROUTER_API_PASSWORD="sua_senha"
425
+ ```
426
+
427
+ #### **2. Execute os Testes de Integração**
428
+
429
+ ```bash
430
+ # Todos os testes de integração
431
+ poetry run pytest tests/integration/ -v
432
+
433
+ # Usando marker
434
+ poetry run pytest -m integration -v
435
+
436
+ # Teste específico
437
+ poetry run pytest tests/integration/test_router_client_integration.py::TestRouterHTTPClientIntegrationSessions::test_get_all_sessions_real_api -v
438
+ ```
439
+
440
+ #### **3. Skip Automático**
441
+
442
+ Se as variáveis de ambiente não estiverem configuradas, os testes de integração serão **automaticamente pulados** com mensagem informativa:
443
+
444
+ ```
445
+ SKIPPED: Variáveis de ambiente não configuradas: ROUTER_API_BASE_URL.
446
+ Configure as variáveis para executar testes de integração.
447
+ ```
448
+
449
+ ### **Executando Todos os Testes**
450
+
451
+ ```bash
452
+ # Todos os testes (unitários + integração)
453
+ poetry run pytest -v
454
+
455
+ # Com cobertura
456
+ poetry run pytest --cov=chatgraph --cov-report=html
457
+ poetry run start htmlcov/index.html # Abre relatório de cobertura
458
+ ```
459
+
460
+ ### **Markers Disponíveis**
461
+
462
+ - `@pytest.mark.unit` - Testes unitários (rápidos, isolados)
463
+ - `@pytest.mark.integration` - Testes de integração (requerem APIs externas)
464
+
465
+ **Exemplos:**
466
+
467
+ ```bash
468
+ # Apenas unitários
469
+ poetry run pytest -m unit -v
470
+
471
+ # Apenas integração
472
+ poetry run pytest -m integration -v
473
+
474
+ # Excluir integração
475
+ poetry run pytest -m "not integration" -v
476
+ ```
477
+
478
+ ### **Boas Práticas**
479
+
480
+ 1. **Desenvolvimento:** Execute testes unitários frequentemente (são rápidos)
481
+ 2. **Pre-commit:** Execute todos os testes unitários antes de commitar
482
+ 3. **Pre-deploy:** Execute testes de integração para validar com API real
483
+ 4. **CI/CD:** Configure variáveis de ambiente no pipeline para testes de integração
484
+
485
+ ### **Troubleshooting**
486
+
487
+ **Problema:** Testes de integração falhando
488
+
489
+ - ✅ Verifique se as variáveis de ambiente estão configuradas
490
+ - ✅ Confirme que a API está acessível
491
+ - ✅ Valide credenciais (username/password)
492
+ - ✅ Verifique logs de erro detalhados com `-v` ou `-vv`
493
+
494
+ **Problema:** Testes unitários falhando
495
+
496
+ - ✅ Execute `poetry install` para garantir dependências
497
+ - ✅ Verifique se `respx` está instalado (`poetry add --group dev respx`)
498
+
499
+ ## **Contribuição**
500
+
501
+ 1. Faça um fork do repositório.
502
+ 2. Crie uma nova branch (`git checkout -b minha-nova-feature`).
503
+ 3. Faça commit das suas alterações (`git commit -am 'Adiciona nova feature'`).
504
+ 4. Envie para a branch (`git push origin minha-nova-feature`).
505
+ 5. Crie um novo Pull Request.
506
+
507
+ **Ao contribuir:**
508
+
509
+ - ✅ Adicione testes unitários para novas funcionalidades
510
+ - ✅ Adicione testes de integração se houver integração com APIs
511
+ - ✅ Mantenha cobertura de testes acima de 80%
512
+ - ✅ Execute `poetry run task lint` antes de commitar
513
+
514
+ ## **Licença**
515
+
516
+ Este projeto é licenciado sob a Licença MIT - veja o arquivo [LICENSE](LICENSE) para detalhes.
517
+
518
+ ---
519
+
520
+ Esse README fornece instruções detalhadas sobre como instalar, configurar e usar a biblioteca ChatGraph, incluindo a estrutura de rotas e exemplos de implementação para facilitar o desenvolvimento de chatbots com fluxos claros e intuitivos.
521
+
@@ -0,0 +1,27 @@
1
+ chatgraph/__init__.py,sha256=O8lB4R5IEneRulFv5KEQMXHoKXsEgvhHdGp5fXJiQhU,855
2
+ chatgraph/auth/credentials.py,sha256=qLgoDwkE53jS90p-w08v49E0-XZ0Fu99yNX5Y30N4vo,2317
3
+ chatgraph/bot/chatbot_model.py,sha256=Q-o4JuRyP7JR0pVOWv_x7VwhasHqiNXVwv0LogOmfsM,7828
4
+ chatgraph/bot/chatbot_router.py,sha256=TDSPCLsbnBiyxezpFM-9tfffKGK_Z4UabZcw_NhM0PI,2501
5
+ chatgraph/bot/default_functions.py,sha256=5V-KrZWsZSaHz41Qgn63HN9nqb6LgirCQ9LfQ52idFs,716
6
+ chatgraph/cli/__init__.py,sha256=NOfVmX4erWo59F2AJexEAV-EHMZ4eqXJpAcKL3nlL4I,7226
7
+ chatgraph/error/chatbot_error.py,sha256=eorGZ19cMAUgQR2KdbA9t6goEtrZjFW8l27VQoHWT_8,1840
8
+ chatgraph/error/route_error.py,sha256=lYuRVaTsNUyWQtVBC77OiJtsArw1dzLzSDbP8Tw2yCU,767
9
+ chatgraph/gRPC/gRPCCall.py,sha256=59PsCfCzYq3MwvusjIQ972w3AH383Ev5VFZHxbgBDZk,7372
10
+ chatgraph/messages/message_consumer.py,sha256=mzJ0Tgpm0D2gTCWzmr9wO7vIiT_W3LsFF6ee1unHKVY,7608
11
+ chatgraph/models/actions.py,sha256=g2ww4Ek3FSepAMcFdWAP4i6AuMo1AbhDGg5cIlFi0cY,3675
12
+ chatgraph/models/message.py,sha256=5vbJrYtzJU0gTc_UdIZkprwj02KxUydJwMERELDqvpo,10315
13
+ chatgraph/models/userstate.py,sha256=GJFX-kzaltCv_6qa9nC8LUYWaAzi9gaeKBqZE4bASX8,6494
14
+ chatgraph/pb/router.proto,sha256=Rzye1x6rGtBeTVlkvsAslmKgLB631fTqp1QgIrU2AgM,3337
15
+ chatgraph/pb/router_pb2.py,sha256=eSo0ncYDSG3ryIfWNFzqmG3anx-VmQ2nGXBy1gPnXmQ,7962
16
+ chatgraph/pb/router_pb2_grpc.py,sha256=iaQQsYPc8Tihuf4sWEI48DhvhtCYtDqFBHhwRtE57ps,29886
17
+ chatgraph/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
+ chatgraph/services/router_http_client.py,sha256=wgpMFXPJuWffnOSI62D8JfwBUF7x7X08I5DGaolvzFQ,13132
19
+ chatgraph/types/background_task.py,sha256=9JQCvb-wTUbh777-z4DpWBwgESBj5DgxaD9cVzAE2to,902
20
+ chatgraph/types/end_types.py,sha256=CSqkbLyeaXyk2p0BZotbioVJq0nyk2P-nXkvy5UevlI,2012
21
+ chatgraph/types/route.py,sha256=HZgfo329qt_LGf4DVbwyKDPXwdBGaFgONxqzMnt1z6E,3068
22
+ chatgraph/types/usercall.py,sha256=JpwCr26xaxUXg5oay1o2io5JuXeNfdtBQjHF6invSKs,7433
23
+ chatgraph-0.6.4.dist-info/METADATA,sha256=7QiIwE34ZHQhJa_M_oBwxCJkFAJQ4DdweTcSXLrKgXA,17235
24
+ chatgraph-0.6.4.dist-info/WHEEL,sha256=M5asmiAlL6HEcOq52Yi5mmk9KmTVjY2RDPtO4p9DMrc,88
25
+ chatgraph-0.6.4.dist-info/entry_points.txt,sha256=bO9_Q-PqE5vCNNo6ke_-3j2gHfKQMDGnKDTkNuCdBuA,48
26
+ chatgraph-0.6.4.dist-info/licenses/LICENSE,sha256=LDPw26HLt7Shwj_1sg2pN_BeYzbcjO77fGbFGEmBKuk,1069
27
+ chatgraph-0.6.4.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: poetry-core 2.2.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ chatgraph=chatgraph.cli:main
3
+
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Irisson Lima
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.