meshagent-agents 0.5.3__py3-none-any.whl → 0.5.5__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.
Potentially problematic release.
This version of meshagent-agents might be problematic. Click here for more details.
- meshagent/agents/chat.py +207 -161
- meshagent/agents/version.py +1 -1
- {meshagent_agents-0.5.3.dist-info → meshagent_agents-0.5.5.dist-info}/METADATA +6 -6
- {meshagent_agents-0.5.3.dist-info → meshagent_agents-0.5.5.dist-info}/RECORD +7 -7
- {meshagent_agents-0.5.3.dist-info → meshagent_agents-0.5.5.dist-info}/WHEEL +0 -0
- {meshagent_agents-0.5.3.dist-info → meshagent_agents-0.5.5.dist-info}/licenses/LICENSE +0 -0
- {meshagent_agents-0.5.3.dist-info → meshagent_agents-0.5.5.dist-info}/top_level.txt +0 -0
meshagent/agents/chat.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from .agent import SingleRoomAgent, AgentChatContext
|
|
1
|
+
from meshagent.agents.agent import SingleRoomAgent, AgentChatContext
|
|
2
2
|
from meshagent.api.chan import Chan
|
|
3
3
|
from meshagent.api import (
|
|
4
4
|
RoomMessage,
|
|
@@ -10,7 +10,7 @@ from meshagent.api import (
|
|
|
10
10
|
MeshDocument,
|
|
11
11
|
)
|
|
12
12
|
from meshagent.tools import Toolkit, ToolContext
|
|
13
|
-
from .adapter import LLMAdapter, ToolResponseAdapter
|
|
13
|
+
from meshagent.agents.adapter import LLMAdapter, ToolResponseAdapter
|
|
14
14
|
from meshagent.openai.tools.responses_adapter import ImageGenerationTool, LocalShellTool
|
|
15
15
|
import asyncio
|
|
16
16
|
from typing import Optional
|
|
@@ -22,6 +22,7 @@ from typing import Literal
|
|
|
22
22
|
import base64
|
|
23
23
|
from openai.types.responses import ResponseStreamEvent
|
|
24
24
|
from asyncio import CancelledError
|
|
25
|
+
from meshagent.api import RoomException
|
|
25
26
|
|
|
26
27
|
from opentelemetry import trace
|
|
27
28
|
import shlex
|
|
@@ -52,6 +53,7 @@ class ChatBotThreadLocalShellTool(LocalShellTool):
|
|
|
52
53
|
for prop in self.thread_context.thread.root.get_children():
|
|
53
54
|
if prop.tag_name == "messages":
|
|
54
55
|
messages = prop
|
|
56
|
+
break
|
|
55
57
|
|
|
56
58
|
exec_element = messages.append_child(
|
|
57
59
|
tag_name="exec",
|
|
@@ -135,6 +137,7 @@ class ChatBotThreadOpenAIImageGenerationTool(ImageGenerationTool):
|
|
|
135
137
|
for prop in self.thread_context.thread.root.get_children():
|
|
136
138
|
if prop.tag_name == "messages":
|
|
137
139
|
messages = prop
|
|
140
|
+
break
|
|
138
141
|
|
|
139
142
|
for child in messages.get_children():
|
|
140
143
|
if child.get_attribute("id") == item_id:
|
|
@@ -184,6 +187,7 @@ class ChatBotThreadOpenAIImageGenerationTool(ImageGenerationTool):
|
|
|
184
187
|
for prop in self.thread_context.thread.root.get_children():
|
|
185
188
|
if prop.tag_name == "messages":
|
|
186
189
|
messages = prop
|
|
190
|
+
break
|
|
187
191
|
|
|
188
192
|
for child in messages.get_children():
|
|
189
193
|
if child.get_attribute("id") == item_id:
|
|
@@ -307,13 +311,23 @@ class ChatBot(SingleRoomAgent):
|
|
|
307
311
|
|
|
308
312
|
async def _send_and_save_chat(
|
|
309
313
|
self,
|
|
310
|
-
|
|
314
|
+
thread: MeshDocument,
|
|
311
315
|
path: str,
|
|
312
316
|
to: RemoteParticipant,
|
|
313
317
|
id: str,
|
|
314
318
|
text: str,
|
|
315
319
|
thread_attributes: dict,
|
|
316
320
|
):
|
|
321
|
+
messages = None
|
|
322
|
+
|
|
323
|
+
for prop in thread.root.get_children():
|
|
324
|
+
if prop.tag_name == "messages":
|
|
325
|
+
messages = prop
|
|
326
|
+
break
|
|
327
|
+
|
|
328
|
+
if messages is None:
|
|
329
|
+
raise RoomException("messages element was not found in thread document")
|
|
330
|
+
|
|
317
331
|
with tracer.start_as_current_span("chatbot.thread.message") as span:
|
|
318
332
|
span.set_attributes(thread_attributes)
|
|
319
333
|
span.set_attribute("role", "assistant")
|
|
@@ -339,10 +353,10 @@ class ChatBot(SingleRoomAgent):
|
|
|
339
353
|
},
|
|
340
354
|
)
|
|
341
355
|
|
|
342
|
-
async def
|
|
356
|
+
async def _greet(
|
|
343
357
|
self,
|
|
344
358
|
*,
|
|
345
|
-
|
|
359
|
+
thread: MeshDocument,
|
|
346
360
|
path: str,
|
|
347
361
|
chat_context: AgentChatContext,
|
|
348
362
|
participant: RemoteParticipant,
|
|
@@ -353,7 +367,7 @@ class ChatBot(SingleRoomAgent):
|
|
|
353
367
|
await self._send_and_save_chat(
|
|
354
368
|
id=str(uuid.uuid4()),
|
|
355
369
|
to=RemoteParticipant(id=participant.id),
|
|
356
|
-
|
|
370
|
+
thread=thread,
|
|
357
371
|
path=path,
|
|
358
372
|
text=self._auto_greet_message,
|
|
359
373
|
thread_attributes=thread_attributes,
|
|
@@ -403,107 +417,152 @@ class ChatBot(SingleRoomAgent):
|
|
|
403
417
|
async def close_thread(self, *, path: str):
|
|
404
418
|
return await self.room.sync.close(path=path)
|
|
405
419
|
|
|
406
|
-
async def
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
420
|
+
async def load_thread_context(self, *, thread_context: ChatThreadContext):
|
|
421
|
+
"""
|
|
422
|
+
load the thread from the thread document by inserting the current messages in the thread into the chat context
|
|
423
|
+
"""
|
|
424
|
+
thread = thread_context.thread
|
|
425
|
+
chat_context = thread_context.chat
|
|
426
|
+
for prop in thread.root.get_children():
|
|
427
|
+
if prop.tag_name == "messages":
|
|
428
|
+
doc_messages = prop
|
|
429
|
+
|
|
430
|
+
for element in doc_messages.get_children():
|
|
431
|
+
if isinstance(element, Element) and element.tag_name == "message":
|
|
432
|
+
msg = element["text"]
|
|
433
|
+
if element[
|
|
434
|
+
"author_name"
|
|
435
|
+
] == self.room.local_participant.get_attribute("name"):
|
|
436
|
+
chat_context.append_assistant_message(msg)
|
|
437
|
+
else:
|
|
438
|
+
chat_context.append_user_message(msg)
|
|
439
|
+
|
|
440
|
+
for child in element.get_children():
|
|
441
|
+
if child.tag_name == "file":
|
|
442
|
+
chat_context.append_assistant_message(
|
|
443
|
+
f"the user attached a file with the path '{child.get_attribute('path')}'"
|
|
444
|
+
)
|
|
445
|
+
|
|
446
|
+
break
|
|
412
447
|
|
|
448
|
+
if doc_messages is None:
|
|
449
|
+
raise Exception("thread was not properly initialized")
|
|
450
|
+
|
|
451
|
+
async def prepare_llm_context(self, *, context: ChatThreadContext):
|
|
452
|
+
"""
|
|
453
|
+
called prior to sending the request to the LLM in case the agent needs to modify the context prior to sending
|
|
454
|
+
"""
|
|
455
|
+
pass
|
|
456
|
+
|
|
457
|
+
async def _process_llm_events(
|
|
458
|
+
self,
|
|
459
|
+
*,
|
|
460
|
+
thread_context: ChatThreadContext,
|
|
461
|
+
llm_messages: asyncio.Queue,
|
|
462
|
+
thread_attributes: dict,
|
|
463
|
+
):
|
|
464
|
+
thread = thread_context.thread
|
|
413
465
|
doc_messages = None
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
466
|
+
for prop in thread.root.get_children():
|
|
467
|
+
if prop.tag_name == "messages":
|
|
468
|
+
doc_messages = prop
|
|
469
|
+
break
|
|
417
470
|
|
|
418
|
-
|
|
471
|
+
if doc_messages is None:
|
|
472
|
+
raise RoomException("messages element is missing from thread document")
|
|
473
|
+
|
|
474
|
+
context_message = None
|
|
475
|
+
updates = asyncio.Queue()
|
|
419
476
|
|
|
420
|
-
|
|
477
|
+
# throttle updates so we don't send too many syncs over the wire at once
|
|
478
|
+
async def update_thread():
|
|
421
479
|
try:
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
context_message = None
|
|
428
|
-
updates = asyncio.Queue()
|
|
429
|
-
|
|
430
|
-
# throttle updates so we don't send too many syncs over the wire at once
|
|
431
|
-
async def update_thread():
|
|
432
|
-
try:
|
|
433
|
-
changes = {}
|
|
434
|
-
while True:
|
|
435
|
-
try:
|
|
436
|
-
element, partial = updates.get_nowait()
|
|
437
|
-
changes[element] = partial
|
|
480
|
+
changes = {}
|
|
481
|
+
while True:
|
|
482
|
+
try:
|
|
483
|
+
element, partial = updates.get_nowait()
|
|
484
|
+
changes[element] = partial
|
|
438
485
|
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
486
|
+
except asyncio.QueueEmpty:
|
|
487
|
+
for e, p in changes.items():
|
|
488
|
+
e["text"] = p
|
|
442
489
|
|
|
443
|
-
|
|
490
|
+
changes.clear()
|
|
444
491
|
|
|
445
|
-
|
|
446
|
-
|
|
492
|
+
e, p = await updates.get()
|
|
493
|
+
changes[e] = p
|
|
447
494
|
|
|
448
|
-
|
|
495
|
+
await asyncio.sleep(0.1)
|
|
449
496
|
|
|
450
|
-
|
|
451
|
-
|
|
497
|
+
except asyncio.QueueShutDown:
|
|
498
|
+
# flush any pending changes
|
|
499
|
+
for e, p in changes.items():
|
|
500
|
+
e["text"] = p
|
|
452
501
|
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
async for evt in llm_messages:
|
|
456
|
-
for participant in self._room.messaging.get_participants():
|
|
457
|
-
logger.debug(
|
|
458
|
-
f"sending event {evt.type} to {participant.get_attribute('name')}"
|
|
459
|
-
)
|
|
502
|
+
changes.clear()
|
|
503
|
+
pass
|
|
460
504
|
|
|
461
|
-
|
|
505
|
+
update_thread_task = asyncio.create_task(update_thread())
|
|
506
|
+
try:
|
|
507
|
+
while True:
|
|
508
|
+
evt = await llm_messages.get()
|
|
509
|
+
for participant in self._room.messaging.get_participants():
|
|
510
|
+
logger.debug(
|
|
511
|
+
f"sending event {evt.type} to {participant.get_attribute('name')}"
|
|
512
|
+
)
|
|
462
513
|
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
514
|
+
# self.room.messaging.send_message_nowait(to=participant, type="llm.event", message=json.loads(evt.to_json()))
|
|
515
|
+
|
|
516
|
+
if evt.type == "response.content_part.added":
|
|
517
|
+
partial = ""
|
|
518
|
+
|
|
519
|
+
content_element = doc_messages.append_child(
|
|
520
|
+
tag_name="message",
|
|
521
|
+
attributes={
|
|
522
|
+
"text": "",
|
|
523
|
+
"created_at": datetime.datetime.now(datetime.timezone.utc)
|
|
524
|
+
.isoformat()
|
|
525
|
+
.replace("+00:00", "Z"),
|
|
526
|
+
"author_name": self.room.local_participant.get_attribute(
|
|
527
|
+
"name"
|
|
528
|
+
),
|
|
529
|
+
},
|
|
530
|
+
)
|
|
479
531
|
|
|
480
|
-
|
|
481
|
-
|
|
532
|
+
context_message = {"role": "assistant", "content": ""}
|
|
533
|
+
thread_context.chat.messages.append(context_message)
|
|
482
534
|
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
535
|
+
elif evt.type == "response.output_text.delta":
|
|
536
|
+
partial += evt.delta
|
|
537
|
+
updates.put_nowait((content_element, partial))
|
|
538
|
+
context_message["content"] = partial
|
|
487
539
|
|
|
488
|
-
|
|
489
|
-
|
|
540
|
+
elif evt.type == "response.output_text.done":
|
|
541
|
+
content_element = None
|
|
490
542
|
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
543
|
+
with tracer.start_as_current_span("chatbot.thread.message") as span:
|
|
544
|
+
span.set_attribute(
|
|
545
|
+
"from_participant_name",
|
|
546
|
+
self.room.local_participant.get_attribute("name"),
|
|
547
|
+
)
|
|
548
|
+
span.set_attribute("role", "assistant")
|
|
549
|
+
span.set_attributes(thread_attributes)
|
|
550
|
+
span.set_attributes({"text": evt.text})
|
|
551
|
+
except asyncio.QueueShutDown:
|
|
552
|
+
pass
|
|
553
|
+
finally:
|
|
554
|
+
updates.shutdown()
|
|
555
|
+
await update_thread_task
|
|
504
556
|
|
|
505
|
-
|
|
506
|
-
|
|
557
|
+
async def _spawn_thread(self, path: str, messages: Chan[RoomMessage]):
|
|
558
|
+
logger.debug("chatbot is starting a thread", extra={"path": path})
|
|
559
|
+
chat_context = await self.init_chat_context()
|
|
560
|
+
opened = False
|
|
561
|
+
|
|
562
|
+
current_file = None
|
|
563
|
+
thread_context = None
|
|
564
|
+
|
|
565
|
+
thread_attributes = None
|
|
507
566
|
|
|
508
567
|
thread = None
|
|
509
568
|
|
|
@@ -512,9 +571,9 @@ class ChatBot(SingleRoomAgent):
|
|
|
512
571
|
|
|
513
572
|
while True:
|
|
514
573
|
while True:
|
|
515
|
-
logger.
|
|
574
|
+
logger.debug(f"waiting for message on thread {path}")
|
|
516
575
|
received = await messages.recv()
|
|
517
|
-
logger.
|
|
576
|
+
logger.debug(f"received message on thread {path}: {received.type}")
|
|
518
577
|
|
|
519
578
|
chat_with_participant = None
|
|
520
579
|
for participant in self._room.messaging.get_participants():
|
|
@@ -569,83 +628,57 @@ class ChatBot(SingleRoomAgent):
|
|
|
569
628
|
|
|
570
629
|
thread = await self.open_thread(path=path)
|
|
571
630
|
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
== self.room.local_participant.get_attribute(
|
|
585
|
-
"name"
|
|
586
|
-
)
|
|
587
|
-
):
|
|
588
|
-
chat_context.append_assistant_message(
|
|
589
|
-
msg
|
|
590
|
-
)
|
|
591
|
-
else:
|
|
592
|
-
chat_context.append_user_message(msg)
|
|
593
|
-
|
|
594
|
-
for child in element.get_children():
|
|
595
|
-
if child.tag_name == "file":
|
|
596
|
-
chat_context.append_assistant_message(
|
|
597
|
-
f"the user attached a file with the path '{child.get_attribute('path')}'"
|
|
598
|
-
)
|
|
599
|
-
|
|
600
|
-
if doc_messages is None:
|
|
601
|
-
raise Exception("thread was not properly initialized")
|
|
631
|
+
thread_context = ChatThreadContext(
|
|
632
|
+
path=path,
|
|
633
|
+
chat=chat_context,
|
|
634
|
+
thread=thread,
|
|
635
|
+
participants=get_thread_participants(
|
|
636
|
+
room=self.room, thread=thread
|
|
637
|
+
),
|
|
638
|
+
)
|
|
639
|
+
|
|
640
|
+
await self.load_thread_context(
|
|
641
|
+
thread_context=thread_context
|
|
642
|
+
)
|
|
602
643
|
|
|
603
644
|
if received.type == "opened":
|
|
604
645
|
if not opened:
|
|
605
646
|
opened = True
|
|
606
647
|
|
|
607
|
-
await self.
|
|
648
|
+
await self._greet(
|
|
608
649
|
path=path,
|
|
609
650
|
chat_context=chat_context,
|
|
610
651
|
participant=chat_with_participant,
|
|
611
|
-
|
|
652
|
+
thread=thread,
|
|
612
653
|
thread_attributes=thread_attributes,
|
|
613
654
|
)
|
|
614
655
|
|
|
615
656
|
if received.type == "chat":
|
|
616
657
|
if thread is None:
|
|
617
|
-
|
|
618
|
-
type="thread is not open", data={}
|
|
619
|
-
)
|
|
658
|
+
logger.info("thread is not open", extra={"path": path})
|
|
620
659
|
break
|
|
621
660
|
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
"
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
"role": "user",
|
|
634
|
-
"text": received.message["text"],
|
|
635
|
-
}
|
|
636
|
-
},
|
|
637
|
-
},
|
|
638
|
-
)
|
|
661
|
+
logger.debug(
|
|
662
|
+
"chatbot received a chat",
|
|
663
|
+
extra={
|
|
664
|
+
"context": chat_context.id,
|
|
665
|
+
"participant_id": self.room.local_participant.id,
|
|
666
|
+
"participant_name": self.room.local_participant.get_attribute(
|
|
667
|
+
"name"
|
|
668
|
+
),
|
|
669
|
+
"text": received.message["text"],
|
|
670
|
+
},
|
|
671
|
+
)
|
|
639
672
|
|
|
640
|
-
|
|
641
|
-
|
|
673
|
+
attachments = received.message.get("attachments", [])
|
|
674
|
+
text = received.message["text"]
|
|
642
675
|
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
676
|
+
for attachment in attachments:
|
|
677
|
+
chat_context.append_assistant_message(
|
|
678
|
+
message=f"the user attached a file at the path '{attachment['path']}'"
|
|
679
|
+
)
|
|
647
680
|
|
|
648
|
-
|
|
681
|
+
chat_context.append_user_message(message=text)
|
|
649
682
|
|
|
650
683
|
if messages.empty():
|
|
651
684
|
break
|
|
@@ -690,9 +723,6 @@ class ChatBot(SingleRoomAgent):
|
|
|
690
723
|
room=self.room, thread=thread
|
|
691
724
|
)
|
|
692
725
|
|
|
693
|
-
def handle_event(evt):
|
|
694
|
-
llm_messages.send_nowait(evt)
|
|
695
|
-
|
|
696
726
|
with tracer.start_as_current_span("chatbot.llm") as span:
|
|
697
727
|
try:
|
|
698
728
|
with tracer.start_as_current_span(
|
|
@@ -705,6 +735,23 @@ class ChatBot(SingleRoomAgent):
|
|
|
705
735
|
)
|
|
706
736
|
)
|
|
707
737
|
|
|
738
|
+
await self.prepare_llm_context(
|
|
739
|
+
context=thread_context
|
|
740
|
+
)
|
|
741
|
+
|
|
742
|
+
llm_messages = asyncio.Queue[ResponseStreamEvent]()
|
|
743
|
+
|
|
744
|
+
def handle_event(evt):
|
|
745
|
+
llm_messages.put_nowait(evt)
|
|
746
|
+
|
|
747
|
+
llm_task = asyncio.create_task(
|
|
748
|
+
self._process_llm_events(
|
|
749
|
+
thread_context=thread_context,
|
|
750
|
+
llm_messages=llm_messages,
|
|
751
|
+
thread_attributes=thread_attributes,
|
|
752
|
+
)
|
|
753
|
+
)
|
|
754
|
+
|
|
708
755
|
await self._llm_adapter.next(
|
|
709
756
|
context=chat_context,
|
|
710
757
|
room=self._room,
|
|
@@ -713,10 +760,13 @@ class ChatBot(SingleRoomAgent):
|
|
|
713
760
|
event_handler=handle_event,
|
|
714
761
|
)
|
|
715
762
|
|
|
763
|
+
llm_messages.shutdown()
|
|
764
|
+
await llm_task
|
|
765
|
+
|
|
716
766
|
except Exception as e:
|
|
717
767
|
logger.error("An error was encountered", exc_info=e)
|
|
718
768
|
await self._send_and_save_chat(
|
|
719
|
-
|
|
769
|
+
thread=thread,
|
|
720
770
|
to=chat_with_participant,
|
|
721
771
|
path=path,
|
|
722
772
|
id=str(uuid.uuid4()),
|
|
@@ -741,13 +791,9 @@ class ChatBot(SingleRoomAgent):
|
|
|
741
791
|
finally:
|
|
742
792
|
|
|
743
793
|
async def cleanup():
|
|
744
|
-
llm_messages.close()
|
|
745
|
-
|
|
746
794
|
if self.room is not None:
|
|
747
795
|
logger.info(f"thread was ended {path}")
|
|
748
|
-
|
|
749
|
-
type="chatbot.thread.ended", data={"path": path}
|
|
750
|
-
)
|
|
796
|
+
logger.info("chatbot thread ended", extra={"path": path})
|
|
751
797
|
|
|
752
798
|
if thread is not None:
|
|
753
799
|
await self.close_thread(path=path)
|
|
@@ -786,7 +832,7 @@ class ChatBot(SingleRoomAgent):
|
|
|
786
832
|
|
|
787
833
|
messages = self._get_message_channel(path)
|
|
788
834
|
|
|
789
|
-
logger.
|
|
835
|
+
logger.debug(
|
|
790
836
|
f"queued incoming message for thread {path}: {message.type}"
|
|
791
837
|
)
|
|
792
838
|
|
|
@@ -806,7 +852,7 @@ class ChatBot(SingleRoomAgent):
|
|
|
806
852
|
f"The chat thread ended with an error {e}", exc_info=e
|
|
807
853
|
)
|
|
808
854
|
|
|
809
|
-
logger.
|
|
855
|
+
logger.debug(f"spawning chat thread for {path}")
|
|
810
856
|
task = asyncio.create_task(
|
|
811
857
|
self._spawn_thread(messages=messages, path=path)
|
|
812
858
|
)
|
meshagent/agents/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "0.5.
|
|
1
|
+
__version__ = "0.5.5"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: meshagent-agents
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.5
|
|
4
4
|
Summary: Agent Building Blocks for Meshagent
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
Project-URL: Documentation, https://docs.meshagent.com
|
|
@@ -12,19 +12,19 @@ License-File: LICENSE
|
|
|
12
12
|
Requires-Dist: pyjwt~=2.10
|
|
13
13
|
Requires-Dist: pytest~=8.4
|
|
14
14
|
Requires-Dist: pytest-asyncio~=0.26
|
|
15
|
-
Requires-Dist: meshagent-api~=0.5.
|
|
16
|
-
Requires-Dist: meshagent-tools~=0.5.
|
|
17
|
-
Requires-Dist: meshagent-openai~=0.5.
|
|
15
|
+
Requires-Dist: meshagent-api~=0.5.5
|
|
16
|
+
Requires-Dist: meshagent-tools~=0.5.5
|
|
17
|
+
Requires-Dist: meshagent-openai~=0.5.5
|
|
18
18
|
Requires-Dist: pydantic~=2.11
|
|
19
19
|
Requires-Dist: opentelemetry-distro~=0.54b1
|
|
20
20
|
Provides-Extra: all
|
|
21
|
-
Requires-Dist: meshagent-api[all]~=0.5.
|
|
21
|
+
Requires-Dist: meshagent-api[all]~=0.5.5; extra == "all"
|
|
22
22
|
Requires-Dist: chonkie~=0.5.1; extra == "all"
|
|
23
23
|
Requires-Dist: chonkie[semantic]~=0.5.1; extra == "all"
|
|
24
24
|
Requires-Dist: chonkie[openai]~=0.5.1; extra == "all"
|
|
25
25
|
Requires-Dist: aiosmtplib~=4.0.1; extra == "all"
|
|
26
26
|
Provides-Extra: sync
|
|
27
|
-
Requires-Dist: meshagent-api[sync]~=0.5.
|
|
27
|
+
Requires-Dist: meshagent-api[sync]~=0.5.5; extra == "sync"
|
|
28
28
|
Provides-Extra: mail
|
|
29
29
|
Requires-Dist: aiosmtplib~=4.0.1; extra == "mail"
|
|
30
30
|
Provides-Extra: rag
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
meshagent/agents/__init__.py,sha256=d2cplyLH8xqDWqP_GoPQ8ApHzuv8Iiq4rz-vYBlGMTw,706
|
|
2
2
|
meshagent/agents/adapter.py,sha256=dMuejpjl__bdZ-Qmt-k4e81g-i10vZup7WE1JCZ_Sy4,1392
|
|
3
3
|
meshagent/agents/agent.py,sha256=w14hM63YXiH15VEF1T2eZCvggvrUkE00a1kQkaMRBM0,20354
|
|
4
|
-
meshagent/agents/chat.py,sha256=
|
|
4
|
+
meshagent/agents/chat.py,sha256=5WmvIVlw83r2TucwNZASHKEUFwW6uB-Jw_2nIRgb-V4,32882
|
|
5
5
|
meshagent/agents/context.py,sha256=6txCXA22aHQaikvIKED6YjPyasM_bPqGqCE4HGj04_E,4035
|
|
6
6
|
meshagent/agents/development.py,sha256=AEBkkycNZDRLYIdmX2LkrVZv715ALswiwSR9CiV3HE4,894
|
|
7
7
|
meshagent/agents/hosting.py,sha256=tCcswAweEhlMxGaBR_m2YvUkwZiaHbTBT64urRHfK7I,5446
|
|
@@ -14,7 +14,7 @@ meshagent/agents/pydantic.py,sha256=RrdOESZg-n_FyxbfkOBwRPVxV39IOjxK2unsyAGn9as,
|
|
|
14
14
|
meshagent/agents/single_shot_writer.py,sha256=miWVMo4NX8Hib0yHwDmiwuk8GraJwg1JzljsgFyTl4Y,3237
|
|
15
15
|
meshagent/agents/thread_schema.py,sha256=OGQ-H5c2fJgNOYHC3Pas8iqTi2RUSxP2bytf0SK-SYc,4208
|
|
16
16
|
meshagent/agents/utils.py,sha256=6D9GXpYu9xx5XlfD3DiGFdyOwq46e5-sTYOF_FYep1o,1446
|
|
17
|
-
meshagent/agents/version.py,sha256=
|
|
17
|
+
meshagent/agents/version.py,sha256=78mfpLewKVki6c9UONSUdlVme_JsN9ZwIfp4Hf4jmG0,22
|
|
18
18
|
meshagent/agents/worker.py,sha256=SkrPhxIQ-Chyjg-eZGOlehkbrVYmsas8zmZnrTsAl3o,3910
|
|
19
19
|
meshagent/agents/writer.py,sha256=dXglYgHwBrBJIaapMqBDyD3kmwSyi94tOdHH44itODc,2682
|
|
20
20
|
meshagent/agents/schemas/__init__.py,sha256=_xAhrkxvFdfer3NolrynragGxcLElGR51LSribT3deU,299
|
|
@@ -23,8 +23,8 @@ meshagent/agents/schemas/gallery.py,sha256=65IsrH2wiFIR-DNo8est-nCOC72i1Aa5EmVNU
|
|
|
23
23
|
meshagent/agents/schemas/presentation.py,sha256=aaMzkFQryurbHd1fbzTQPdN7v8QIhsjXuvbE8ZiuXNY,1589
|
|
24
24
|
meshagent/agents/schemas/schema.py,sha256=8OXGCLVouoPg6eHBU9mgf1pTGTMvVZqiKNq15wkQJe0,5310
|
|
25
25
|
meshagent/agents/schemas/super_editor_document.py,sha256=iRv4Q-DE_5kUdsAD5Rm4GwHek8L_7ZEpxIZ1x2dWjdg,1813
|
|
26
|
-
meshagent_agents-0.5.
|
|
27
|
-
meshagent_agents-0.5.
|
|
28
|
-
meshagent_agents-0.5.
|
|
29
|
-
meshagent_agents-0.5.
|
|
30
|
-
meshagent_agents-0.5.
|
|
26
|
+
meshagent_agents-0.5.5.dist-info/licenses/LICENSE,sha256=eTt0SPW-sVNdkZe9PS_S8WfCIyLjRXRl7sUBWdlteFg,10254
|
|
27
|
+
meshagent_agents-0.5.5.dist-info/METADATA,sha256=Sbl15zXJrdYQCJ13oq14lBtlzI7Ji886p98rG6fs92M,3773
|
|
28
|
+
meshagent_agents-0.5.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
29
|
+
meshagent_agents-0.5.5.dist-info/top_level.txt,sha256=GlcXnHtRP6m7zlG3Df04M35OsHtNXy_DY09oFwWrH74,10
|
|
30
|
+
meshagent_agents-0.5.5.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|