vital-agent-container-sdk 0.1.0__tar.gz → 0.1.1__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.
- vital_agent_container_sdk-0.1.1/PKG-INFO +35 -0
- {vital_agent_container_sdk-0.1.0 → vital_agent_container_sdk-0.1.1}/setup.py +19 -3
- vital_agent_container_sdk-0.1.1/test/test_app.py +24 -0
- vital_agent_container_sdk-0.1.1/vital_agent_container/agent_container_app.py +127 -0
- vital_agent_container_sdk-0.1.1/vital_agent_container/config/__init__.py +0 -0
- vital_agent_container_sdk-0.1.1/vital_agent_container/handler/__init__.py +0 -0
- vital_agent_container_sdk-0.1.1/vital_agent_container/handler/aimp_message_handler_inf.py +5 -0
- vital_agent_container_sdk-0.1.1/vital_agent_container/handler/impl/__init__.py +0 -0
- vital_agent_container_sdk-0.1.1/vital_agent_container/handler/impl/aimp_echo_message_handler.py +7 -0
- vital_agent_container_sdk-0.1.1/vital_agent_container/processor/__init__.py +0 -0
- vital_agent_container_sdk-0.1.1/vital_agent_container/processor/aimp_message_processor.py +9 -0
- vital_agent_container_sdk-0.1.1/vital_agent_container/streaming/__init__.py +0 -0
- vital_agent_container_sdk-0.1.1/vital_agent_container/streaming/custom_streaming_response.py +38 -0
- vital_agent_container_sdk-0.1.1/vital_agent_container/tasks/__init__.py +0 -0
- vital_agent_container_sdk-0.1.1/vital_agent_container/tasks/request_task.py +21 -0
- vital_agent_container_sdk-0.1.1/vital_agent_container/tasks/task_manager_async_client.py +64 -0
- vital_agent_container_sdk-0.1.1/vital_agent_container/utils/__init__.py +0 -0
- vital_agent_container_sdk-0.1.1/vital_agent_container/utils/aws_utils.py +21 -0
- vital_agent_container_sdk-0.1.1/vital_agent_container/utils/config_utils.py +17 -0
- vital_agent_container_sdk-0.1.1/vital_agent_container_sdk.egg-info/PKG-INFO +35 -0
- vital_agent_container_sdk-0.1.1/vital_agent_container_sdk.egg-info/SOURCES.txt +26 -0
- vital_agent_container_sdk-0.1.1/vital_agent_container_sdk.egg-info/requires.txt +20 -0
- vital_agent_container_sdk-0.1.0/PKG-INFO +0 -19
- vital_agent_container_sdk-0.1.0/vital_agent_container_sdk.egg-info/PKG-INFO +0 -19
- vital_agent_container_sdk-0.1.0/vital_agent_container_sdk.egg-info/SOURCES.txt +0 -9
- vital_agent_container_sdk-0.1.0/vital_agent_container_sdk.egg-info/requires.txt +0 -4
- {vital_agent_container_sdk-0.1.0 → vital_agent_container_sdk-0.1.1}/LICENSE +0 -0
- {vital_agent_container_sdk-0.1.0 → vital_agent_container_sdk-0.1.1}/README.md +0 -0
- {vital_agent_container_sdk-0.1.0 → vital_agent_container_sdk-0.1.1}/setup.cfg +0 -0
- {vital_agent_container_sdk-0.1.0 → vital_agent_container_sdk-0.1.1}/vital_agent_container/__init__.py +0 -0
- {vital_agent_container_sdk-0.1.0 → vital_agent_container_sdk-0.1.1}/vital_agent_container_sdk.egg-info/dependency_links.txt +0 -0
- {vital_agent_container_sdk-0.1.0 → vital_agent_container_sdk-0.1.1}/vital_agent_container_sdk.egg-info/top_level.txt +0 -0
@@ -0,0 +1,35 @@
|
|
1
|
+
Metadata-Version: 2.1
|
2
|
+
Name: vital-agent-container-sdk
|
3
|
+
Version: 0.1.1
|
4
|
+
Summary: Vital Agent Container SDK
|
5
|
+
Home-page: https://github.com/vital-ai/vital-agent-container-python
|
6
|
+
Author: Marc Hadfield
|
7
|
+
Author-email: marc@vital.ai
|
8
|
+
License: Apache License 2.0
|
9
|
+
Classifier: Programming Language :: Python :: 3.10
|
10
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
11
|
+
Classifier: Operating System :: OS Independent
|
12
|
+
Requires-Python: >=3.10
|
13
|
+
Description-Content-Type: text/markdown
|
14
|
+
License-File: LICENSE
|
15
|
+
Requires-Dist: vital-ai-vitalsigns==0.1.19
|
16
|
+
Requires-Dist: vital-ai-aimp==0.1.6
|
17
|
+
Requires-Dist: httpx==0.26.0
|
18
|
+
Requires-Dist: python-json-logger==2.0.7
|
19
|
+
Requires-Dist: python-dotenv==1.0.1
|
20
|
+
Requires-Dist: uvicorn[standard]==0.27.0.post1
|
21
|
+
Requires-Dist: fastapi==0.109.2
|
22
|
+
Requires-Dist: dataclasses-json==0.5.7
|
23
|
+
Requires-Dist: aiohttp==3.9.0
|
24
|
+
Requires-Dist: aiosignal==1.2.0
|
25
|
+
Requires-Dist: anyio==4.2.0
|
26
|
+
Requires-Dist: async-timeout==4.0.3
|
27
|
+
Requires-Dist: starlette==0.36.3
|
28
|
+
Requires-Dist: marshmallow==3.19.0
|
29
|
+
Requires-Dist: pyyaml==6.0.1
|
30
|
+
Requires-Dist: requests==2.31.0
|
31
|
+
Requires-Dist: Pillow==10.2.0
|
32
|
+
Requires-Dist: websockets==12.0
|
33
|
+
Provides-Extra: dev
|
34
|
+
|
35
|
+
# vital-agent-container-python
|
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
|
|
2
2
|
|
3
3
|
setup(
|
4
4
|
name='vital-agent-container-sdk',
|
5
|
-
version='0.1.
|
5
|
+
version='0.1.1',
|
6
6
|
author='Marc Hadfield',
|
7
7
|
author_email='marc@vital.ai',
|
8
8
|
description='Vital Agent Container SDK',
|
@@ -21,8 +21,24 @@ setup(
|
|
21
21
|
},
|
22
22
|
license='Apache License 2.0',
|
23
23
|
install_requires=[
|
24
|
-
'vital-ai-vitalsigns
|
25
|
-
'vital-ai-aimp
|
24
|
+
'vital-ai-vitalsigns==0.1.19',
|
25
|
+
'vital-ai-aimp==0.1.6',
|
26
|
+
'httpx==0.26.0',
|
27
|
+
'python-json-logger==2.0.7',
|
28
|
+
'python-dotenv==1.0.1',
|
29
|
+
'uvicorn[standard]==0.27.0.post1',
|
30
|
+
'fastapi==0.109.2',
|
31
|
+
'dataclasses-json==0.5.7',
|
32
|
+
'aiohttp==3.9.0',
|
33
|
+
'aiosignal==1.2.0',
|
34
|
+
'anyio==4.2.0',
|
35
|
+
'async-timeout==4.0.3',
|
36
|
+
'starlette==0.36.3',
|
37
|
+
'marshmallow==3.19.0',
|
38
|
+
'pyyaml==6.0.1',
|
39
|
+
'requests==2.31.0',
|
40
|
+
'Pillow==10.2.0',
|
41
|
+
'websockets==12.0'
|
26
42
|
],
|
27
43
|
extras_require={
|
28
44
|
'dev': [
|
@@ -0,0 +1,24 @@
|
|
1
|
+
import os
|
2
|
+
import uvicorn
|
3
|
+
from vital_agent_container.agent_container_app import AgentContainerApp
|
4
|
+
from vital_agent_container.handler.impl.aimp_echo_message_handler import AIMPEchoMessageHandler
|
5
|
+
|
6
|
+
|
7
|
+
def main():
|
8
|
+
print('Test Agent Container App')
|
9
|
+
|
10
|
+
current_file_directory = os.path.dirname(os.path.abspath(__file__))
|
11
|
+
parent_directory = os.path.dirname(current_file_directory)
|
12
|
+
|
13
|
+
app_home = parent_directory
|
14
|
+
|
15
|
+
handler = AIMPEchoMessageHandler()
|
16
|
+
|
17
|
+
agent_container_app = AgentContainerApp(handler, app_home)
|
18
|
+
|
19
|
+
uvicorn.run(host="0.0.0.0", port=6006, app=agent_container_app)
|
20
|
+
|
21
|
+
|
22
|
+
if __name__ == "__main__":
|
23
|
+
|
24
|
+
main()
|
@@ -0,0 +1,127 @@
|
|
1
|
+
import asyncio
|
2
|
+
import gc
|
3
|
+
import json
|
4
|
+
import sys
|
5
|
+
import tracemalloc
|
6
|
+
import uvicorn
|
7
|
+
import logging
|
8
|
+
from logging.handlers import RotatingFileHandler
|
9
|
+
from pythonjsonlogger import jsonlogger
|
10
|
+
import httpx
|
11
|
+
from dotenv import load_dotenv
|
12
|
+
from fastapi import FastAPI, WebSocket, WebSocketDisconnect
|
13
|
+
from vital_agent_container.tasks.task_manager_async_client import TaskManagerAsyncClient
|
14
|
+
from vital_agent_container.utils.aws_utils import AWSUtils
|
15
|
+
from vital_agent_container.utils.config_utils import ConfigUtils
|
16
|
+
from vital_agent_container.processor.aimp_message_processor import AIMPMessageProcessor
|
17
|
+
|
18
|
+
|
19
|
+
logger = logging.getLogger("VitalAgentContainerLogger")
|
20
|
+
logger.setLevel(logging.INFO)
|
21
|
+
|
22
|
+
formatter = jsonlogger.JsonFormatter('%(asctime)s %(name)s %(levelname)s %(message)s')
|
23
|
+
|
24
|
+
stream_handler = logging.StreamHandler(sys.stdout)
|
25
|
+
stream_handler.setFormatter(formatter)
|
26
|
+
|
27
|
+
log_file = "/var/log/agentcontainer/app.log"
|
28
|
+
|
29
|
+
file_handler = RotatingFileHandler(log_file, maxBytes=5 * 1024 * 1024, backupCount=5)
|
30
|
+
file_handler.setFormatter(formatter)
|
31
|
+
|
32
|
+
logger.addHandler(stream_handler)
|
33
|
+
logger.addHandler(file_handler)
|
34
|
+
|
35
|
+
service_identifier = AWSUtils.get_task_arn()
|
36
|
+
|
37
|
+
|
38
|
+
class AgentContainerApp(FastAPI):
|
39
|
+
def __init__(self, handler, app_home, **kwargs):
|
40
|
+
super().__init__(**kwargs)
|
41
|
+
self.handler = handler
|
42
|
+
self.app_home = app_home
|
43
|
+
load_dotenv()
|
44
|
+
self.config = ConfigUtils.load_config(app_home)
|
45
|
+
self.add_routes()
|
46
|
+
|
47
|
+
async def process_ws_message(self, client: httpx.AsyncClient, websocket: WebSocket, data: str,
|
48
|
+
started_event: asyncio.Event):
|
49
|
+
await AIMPMessageProcessor.process_message(self.handler, self.config, client, websocket, data, started_event)
|
50
|
+
|
51
|
+
def add_routes(self):
|
52
|
+
@self.get("/health")
|
53
|
+
async def health_check():
|
54
|
+
logger.info("health check")
|
55
|
+
return {"status": "ok"}
|
56
|
+
|
57
|
+
@self.websocket("/ws")
|
58
|
+
async def websocket_endpoint(websocket: WebSocket):
|
59
|
+
logger.info(f"WebSocket connection from {websocket.client.host}:{websocket.client.port} accepted.")
|
60
|
+
await websocket.accept()
|
61
|
+
client = TaskManagerAsyncClient()
|
62
|
+
client._ws_active = True
|
63
|
+
background_tasks = []
|
64
|
+
try:
|
65
|
+
while True:
|
66
|
+
data = await websocket.receive_text()
|
67
|
+
|
68
|
+
logger.info(f"Received message from {websocket.client.host}:{websocket.client.port}: {data}")
|
69
|
+
message_obj = json.loads(data)
|
70
|
+
message_type = message_obj[0].get("type")
|
71
|
+
message_intent = message_obj[0].get("http://vital.ai/ontology/vital-aimp#hasIntent")
|
72
|
+
logger.info(f"message_type: {message_type}")
|
73
|
+
logger.info(f"message_intent: {message_intent}")
|
74
|
+
|
75
|
+
if message_intent == "interrupt":
|
76
|
+
logger.info("Processing interrupted by client.")
|
77
|
+
client.log_current_tasks()
|
78
|
+
await client.cancel_current_tasks()
|
79
|
+
for task in background_tasks:
|
80
|
+
task.cancel()
|
81
|
+
try:
|
82
|
+
await asyncio.gather(*background_tasks, return_exceptions=True)
|
83
|
+
except Exception as e:
|
84
|
+
logger.error(f"An error occurred in gather: {e}")
|
85
|
+
try:
|
86
|
+
if client.ws_active:
|
87
|
+
await websocket.close()
|
88
|
+
client._ws_active = False
|
89
|
+
except Exception as e:
|
90
|
+
logger.error(f"An error occurred in interrupt websocket close: {e}")
|
91
|
+
break
|
92
|
+
|
93
|
+
if len(background_tasks) > 0:
|
94
|
+
logger.info("currently processing task, ignoring new request.")
|
95
|
+
await websocket.send_text("processing task. ignoring message.")
|
96
|
+
else:
|
97
|
+
logger.info(f"Processing message: {data}")
|
98
|
+
started_event = asyncio.Event()
|
99
|
+
task = asyncio.create_task(self.process_ws_message(self.handler, client, websocket, data, started_event))
|
100
|
+
background_tasks.append(task)
|
101
|
+
await started_event.wait()
|
102
|
+
except WebSocketDisconnect:
|
103
|
+
logger.info("WebSocket connection closed by the client.")
|
104
|
+
# still try to close it in finally?
|
105
|
+
# client._ws_active = False
|
106
|
+
except Exception as e:
|
107
|
+
logger.error(f"An error occurred in ws main loop: {e}")
|
108
|
+
try:
|
109
|
+
await websocket.close()
|
110
|
+
client._ws_active = False
|
111
|
+
except Exception as e2:
|
112
|
+
logger.error(f"An error occurred in websocket close: {e2}")
|
113
|
+
finally:
|
114
|
+
try:
|
115
|
+
await asyncio.gather(*background_tasks)
|
116
|
+
except Exception as e:
|
117
|
+
logger.error(f"An error occurred in final gather: {e}")
|
118
|
+
try:
|
119
|
+
if client.ws_active:
|
120
|
+
await websocket.close()
|
121
|
+
except Exception as e3:
|
122
|
+
logger.error(f"An error occurred in finally websocket close: {e3}")
|
123
|
+
await client.cancel_current_tasks()
|
124
|
+
|
125
|
+
@self.on_event("shutdown")
|
126
|
+
async def shutdown_event():
|
127
|
+
logger.info("Shutting down...")
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,38 @@
|
|
1
|
+
import asyncio
|
2
|
+
import logging
|
3
|
+
import httpx
|
4
|
+
|
5
|
+
|
6
|
+
class CustomStreamingResponse:
|
7
|
+
def __init__(self, response: httpx.Response, end_event: asyncio.Event):
|
8
|
+
self._response = response
|
9
|
+
self._end_event = end_event
|
10
|
+
|
11
|
+
async def aiter_lines(self):
|
12
|
+
try:
|
13
|
+
async for line in self._response.aiter_lines():
|
14
|
+
yield line
|
15
|
+
finally:
|
16
|
+
self.handle_end_of_stream()
|
17
|
+
|
18
|
+
async def aiter_bytes(self):
|
19
|
+
try:
|
20
|
+
async for chunk in self._response.aiter_bytes():
|
21
|
+
yield chunk
|
22
|
+
finally:
|
23
|
+
self.handle_end_of_stream()
|
24
|
+
|
25
|
+
async def aiter_raw(self):
|
26
|
+
try:
|
27
|
+
async for chunk in self._response.aiter_raw():
|
28
|
+
yield chunk
|
29
|
+
finally:
|
30
|
+
self.handle_end_of_stream()
|
31
|
+
|
32
|
+
def handle_end_of_stream(self):
|
33
|
+
self._end_event.set()
|
34
|
+
logger = logging.getLogger("VitalAgentContainerLogger")
|
35
|
+
logger.info("Reached the end of the stream.")
|
36
|
+
|
37
|
+
def __getattr__(self, name):
|
38
|
+
return getattr(self._response, name)
|
File without changes
|
@@ -0,0 +1,21 @@
|
|
1
|
+
import asyncio
|
2
|
+
import httpx
|
3
|
+
|
4
|
+
|
5
|
+
class RequestTask:
|
6
|
+
def __init__(self):
|
7
|
+
self._request: httpx.Response = None
|
8
|
+
self._event: asyncio.Event = None
|
9
|
+
self._task: asyncio.Task = None
|
10
|
+
|
11
|
+
@property
|
12
|
+
def request(self):
|
13
|
+
return self._request
|
14
|
+
|
15
|
+
@property
|
16
|
+
def task(self):
|
17
|
+
return self._task
|
18
|
+
|
19
|
+
@property
|
20
|
+
def event(self):
|
21
|
+
return self._event
|
@@ -0,0 +1,64 @@
|
|
1
|
+
import asyncio
|
2
|
+
import logging
|
3
|
+
from typing import Dict
|
4
|
+
import httpx
|
5
|
+
from vital_agent_container.streaming.custom_streaming_response import CustomStreamingResponse
|
6
|
+
from vital_agent_container.tasks.request_task import RequestTask
|
7
|
+
|
8
|
+
|
9
|
+
class TaskManagerAsyncClient(httpx.AsyncClient):
|
10
|
+
def __init__(self, *args, **kwargs):
|
11
|
+
super().__init__(*args, **kwargs)
|
12
|
+
self._tasks: Dict[RequestTask, str] = {}
|
13
|
+
self._ws_active = None
|
14
|
+
|
15
|
+
@property
|
16
|
+
def ws_active(self):
|
17
|
+
return self._ws_active
|
18
|
+
|
19
|
+
async def send(self, request, *args, **kwargs):
|
20
|
+
is_streaming = kwargs.get("stream", False)
|
21
|
+
|
22
|
+
async def task_coro(rt: RequestTask):
|
23
|
+
response = await super(TaskManagerAsyncClient, self).send(request, *args, **kwargs)
|
24
|
+
if is_streaming:
|
25
|
+
end_event = asyncio.Event()
|
26
|
+
custom_response = CustomStreamingResponse(response, end_event)
|
27
|
+
rt._event = end_event
|
28
|
+
rt._request = custom_response
|
29
|
+
return custom_response
|
30
|
+
else:
|
31
|
+
return response
|
32
|
+
|
33
|
+
request_task = RequestTask()
|
34
|
+
task = asyncio.create_task(task_coro(request_task))
|
35
|
+
request_task._task = task
|
36
|
+
self._tasks[request_task] = request.url.path
|
37
|
+
|
38
|
+
try:
|
39
|
+
return await task
|
40
|
+
finally:
|
41
|
+
# self._tasks.pop(task, None)
|
42
|
+
pass
|
43
|
+
|
44
|
+
def log_current_tasks(self):
|
45
|
+
logger = logging.getLogger("VitalAgentContainerLogger")
|
46
|
+
if self._tasks:
|
47
|
+
logger.info(f"Current tasks: {', '.join(self._tasks.values())}")
|
48
|
+
else:
|
49
|
+
logger.info("No current tasks.")
|
50
|
+
|
51
|
+
async def cancel_current_tasks(self):
|
52
|
+
if self._tasks:
|
53
|
+
for rt in self._tasks.keys():
|
54
|
+
# res = rt.request
|
55
|
+
t = rt.task
|
56
|
+
status = t.cancel()
|
57
|
+
if status:
|
58
|
+
try:
|
59
|
+
await t
|
60
|
+
except asyncio.CancelledError:
|
61
|
+
pass
|
62
|
+
self._tasks.clear()
|
63
|
+
else:
|
64
|
+
pass
|
File without changes
|
@@ -0,0 +1,21 @@
|
|
1
|
+
import os
|
2
|
+
import requests
|
3
|
+
|
4
|
+
|
5
|
+
class AWSUtils:
|
6
|
+
|
7
|
+
@staticmethod
|
8
|
+
def get_task_arn():
|
9
|
+
metadata_uri = os.environ.get('ECS_CONTAINER_METADATA_URI_V4')
|
10
|
+
if not metadata_uri:
|
11
|
+
return "local-instance"
|
12
|
+
task_metadata_url = f"{metadata_uri}/task"
|
13
|
+
|
14
|
+
try:
|
15
|
+
response = requests.get(task_metadata_url)
|
16
|
+
response.raise_for_status()
|
17
|
+
metadata = response.json()
|
18
|
+
task_arn = metadata.get('TaskARN')
|
19
|
+
return task_arn
|
20
|
+
except requests.RequestException as e:
|
21
|
+
return "local-instance"
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import logging
|
2
|
+
import os
|
3
|
+
|
4
|
+
import yaml
|
5
|
+
|
6
|
+
|
7
|
+
class ConfigUtils:
|
8
|
+
|
9
|
+
@staticmethod
|
10
|
+
def load_config(app_home):
|
11
|
+
|
12
|
+
with open(f"{app_home}/agent_config.yaml", "r") as config_stream:
|
13
|
+
try:
|
14
|
+
return yaml.safe_load(config_stream)
|
15
|
+
except yaml.YAMLError as exc:
|
16
|
+
logger = logging.getLogger("VitalAgentContainerLogger")
|
17
|
+
logger.info("failed to load config file")
|
@@ -0,0 +1,35 @@
|
|
1
|
+
Metadata-Version: 2.1
|
2
|
+
Name: vital-agent-container-sdk
|
3
|
+
Version: 0.1.1
|
4
|
+
Summary: Vital Agent Container SDK
|
5
|
+
Home-page: https://github.com/vital-ai/vital-agent-container-python
|
6
|
+
Author: Marc Hadfield
|
7
|
+
Author-email: marc@vital.ai
|
8
|
+
License: Apache License 2.0
|
9
|
+
Classifier: Programming Language :: Python :: 3.10
|
10
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
11
|
+
Classifier: Operating System :: OS Independent
|
12
|
+
Requires-Python: >=3.10
|
13
|
+
Description-Content-Type: text/markdown
|
14
|
+
License-File: LICENSE
|
15
|
+
Requires-Dist: vital-ai-vitalsigns==0.1.19
|
16
|
+
Requires-Dist: vital-ai-aimp==0.1.6
|
17
|
+
Requires-Dist: httpx==0.26.0
|
18
|
+
Requires-Dist: python-json-logger==2.0.7
|
19
|
+
Requires-Dist: python-dotenv==1.0.1
|
20
|
+
Requires-Dist: uvicorn[standard]==0.27.0.post1
|
21
|
+
Requires-Dist: fastapi==0.109.2
|
22
|
+
Requires-Dist: dataclasses-json==0.5.7
|
23
|
+
Requires-Dist: aiohttp==3.9.0
|
24
|
+
Requires-Dist: aiosignal==1.2.0
|
25
|
+
Requires-Dist: anyio==4.2.0
|
26
|
+
Requires-Dist: async-timeout==4.0.3
|
27
|
+
Requires-Dist: starlette==0.36.3
|
28
|
+
Requires-Dist: marshmallow==3.19.0
|
29
|
+
Requires-Dist: pyyaml==6.0.1
|
30
|
+
Requires-Dist: requests==2.31.0
|
31
|
+
Requires-Dist: Pillow==10.2.0
|
32
|
+
Requires-Dist: websockets==12.0
|
33
|
+
Provides-Extra: dev
|
34
|
+
|
35
|
+
# vital-agent-container-python
|
@@ -0,0 +1,26 @@
|
|
1
|
+
LICENSE
|
2
|
+
README.md
|
3
|
+
setup.py
|
4
|
+
test/test_app.py
|
5
|
+
vital_agent_container/__init__.py
|
6
|
+
vital_agent_container/agent_container_app.py
|
7
|
+
vital_agent_container/config/__init__.py
|
8
|
+
vital_agent_container/handler/__init__.py
|
9
|
+
vital_agent_container/handler/aimp_message_handler_inf.py
|
10
|
+
vital_agent_container/handler/impl/__init__.py
|
11
|
+
vital_agent_container/handler/impl/aimp_echo_message_handler.py
|
12
|
+
vital_agent_container/processor/__init__.py
|
13
|
+
vital_agent_container/processor/aimp_message_processor.py
|
14
|
+
vital_agent_container/streaming/__init__.py
|
15
|
+
vital_agent_container/streaming/custom_streaming_response.py
|
16
|
+
vital_agent_container/tasks/__init__.py
|
17
|
+
vital_agent_container/tasks/request_task.py
|
18
|
+
vital_agent_container/tasks/task_manager_async_client.py
|
19
|
+
vital_agent_container/utils/__init__.py
|
20
|
+
vital_agent_container/utils/aws_utils.py
|
21
|
+
vital_agent_container/utils/config_utils.py
|
22
|
+
vital_agent_container_sdk.egg-info/PKG-INFO
|
23
|
+
vital_agent_container_sdk.egg-info/SOURCES.txt
|
24
|
+
vital_agent_container_sdk.egg-info/dependency_links.txt
|
25
|
+
vital_agent_container_sdk.egg-info/requires.txt
|
26
|
+
vital_agent_container_sdk.egg-info/top_level.txt
|
@@ -0,0 +1,20 @@
|
|
1
|
+
vital-ai-vitalsigns==0.1.19
|
2
|
+
vital-ai-aimp==0.1.6
|
3
|
+
httpx==0.26.0
|
4
|
+
python-json-logger==2.0.7
|
5
|
+
python-dotenv==1.0.1
|
6
|
+
uvicorn[standard]==0.27.0.post1
|
7
|
+
fastapi==0.109.2
|
8
|
+
dataclasses-json==0.5.7
|
9
|
+
aiohttp==3.9.0
|
10
|
+
aiosignal==1.2.0
|
11
|
+
anyio==4.2.0
|
12
|
+
async-timeout==4.0.3
|
13
|
+
starlette==0.36.3
|
14
|
+
marshmallow==3.19.0
|
15
|
+
pyyaml==6.0.1
|
16
|
+
requests==2.31.0
|
17
|
+
Pillow==10.2.0
|
18
|
+
websockets==12.0
|
19
|
+
|
20
|
+
[dev]
|
@@ -1,19 +0,0 @@
|
|
1
|
-
Metadata-Version: 2.1
|
2
|
-
Name: vital-agent-container-sdk
|
3
|
-
Version: 0.1.0
|
4
|
-
Summary: Vital Agent Container SDK
|
5
|
-
Home-page: https://github.com/vital-ai/vital-agent-container-python
|
6
|
-
Author: Marc Hadfield
|
7
|
-
Author-email: marc@vital.ai
|
8
|
-
License: Apache License 2.0
|
9
|
-
Classifier: Programming Language :: Python :: 3.10
|
10
|
-
Classifier: License :: OSI Approved :: Apache Software License
|
11
|
-
Classifier: Operating System :: OS Independent
|
12
|
-
Requires-Python: >=3.10
|
13
|
-
Description-Content-Type: text/markdown
|
14
|
-
License-File: LICENSE
|
15
|
-
Requires-Dist: vital-ai-vitalsigns>=0.1.19
|
16
|
-
Requires-Dist: vital-ai-aimp>=0.1.6
|
17
|
-
Provides-Extra: dev
|
18
|
-
|
19
|
-
# vital-agent-container-python
|
@@ -1,19 +0,0 @@
|
|
1
|
-
Metadata-Version: 2.1
|
2
|
-
Name: vital-agent-container-sdk
|
3
|
-
Version: 0.1.0
|
4
|
-
Summary: Vital Agent Container SDK
|
5
|
-
Home-page: https://github.com/vital-ai/vital-agent-container-python
|
6
|
-
Author: Marc Hadfield
|
7
|
-
Author-email: marc@vital.ai
|
8
|
-
License: Apache License 2.0
|
9
|
-
Classifier: Programming Language :: Python :: 3.10
|
10
|
-
Classifier: License :: OSI Approved :: Apache Software License
|
11
|
-
Classifier: Operating System :: OS Independent
|
12
|
-
Requires-Python: >=3.10
|
13
|
-
Description-Content-Type: text/markdown
|
14
|
-
License-File: LICENSE
|
15
|
-
Requires-Dist: vital-ai-vitalsigns>=0.1.19
|
16
|
-
Requires-Dist: vital-ai-aimp>=0.1.6
|
17
|
-
Provides-Extra: dev
|
18
|
-
|
19
|
-
# vital-agent-container-python
|
@@ -1,9 +0,0 @@
|
|
1
|
-
LICENSE
|
2
|
-
README.md
|
3
|
-
setup.py
|
4
|
-
vital_agent_container/__init__.py
|
5
|
-
vital_agent_container_sdk.egg-info/PKG-INFO
|
6
|
-
vital_agent_container_sdk.egg-info/SOURCES.txt
|
7
|
-
vital_agent_container_sdk.egg-info/dependency_links.txt
|
8
|
-
vital_agent_container_sdk.egg-info/requires.txt
|
9
|
-
vital_agent_container_sdk.egg-info/top_level.txt
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|