atlas-chat 0.1.0__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.
- atlas/__init__.py +40 -0
- atlas/application/__init__.py +7 -0
- atlas/application/chat/__init__.py +7 -0
- atlas/application/chat/agent/__init__.py +10 -0
- atlas/application/chat/agent/act_loop.py +179 -0
- atlas/application/chat/agent/factory.py +142 -0
- atlas/application/chat/agent/protocols.py +46 -0
- atlas/application/chat/agent/react_loop.py +338 -0
- atlas/application/chat/agent/think_act_loop.py +171 -0
- atlas/application/chat/approval_manager.py +151 -0
- atlas/application/chat/elicitation_manager.py +191 -0
- atlas/application/chat/events/__init__.py +1 -0
- atlas/application/chat/events/agent_event_relay.py +112 -0
- atlas/application/chat/modes/__init__.py +1 -0
- atlas/application/chat/modes/agent.py +125 -0
- atlas/application/chat/modes/plain.py +74 -0
- atlas/application/chat/modes/rag.py +81 -0
- atlas/application/chat/modes/tools.py +179 -0
- atlas/application/chat/orchestrator.py +213 -0
- atlas/application/chat/policies/__init__.py +1 -0
- atlas/application/chat/policies/tool_authorization.py +99 -0
- atlas/application/chat/preprocessors/__init__.py +1 -0
- atlas/application/chat/preprocessors/message_builder.py +92 -0
- atlas/application/chat/preprocessors/prompt_override_service.py +104 -0
- atlas/application/chat/service.py +454 -0
- atlas/application/chat/utilities/__init__.py +6 -0
- atlas/application/chat/utilities/error_handler.py +367 -0
- atlas/application/chat/utilities/event_notifier.py +546 -0
- atlas/application/chat/utilities/file_processor.py +613 -0
- atlas/application/chat/utilities/tool_executor.py +789 -0
- atlas/atlas_chat_cli.py +347 -0
- atlas/atlas_client.py +238 -0
- atlas/core/__init__.py +0 -0
- atlas/core/auth.py +205 -0
- atlas/core/authorization_manager.py +27 -0
- atlas/core/capabilities.py +123 -0
- atlas/core/compliance.py +215 -0
- atlas/core/domain_whitelist.py +147 -0
- atlas/core/domain_whitelist_middleware.py +82 -0
- atlas/core/http_client.py +28 -0
- atlas/core/log_sanitizer.py +102 -0
- atlas/core/metrics_logger.py +59 -0
- atlas/core/middleware.py +131 -0
- atlas/core/otel_config.py +242 -0
- atlas/core/prompt_risk.py +200 -0
- atlas/core/rate_limit.py +0 -0
- atlas/core/rate_limit_middleware.py +64 -0
- atlas/core/security_headers_middleware.py +51 -0
- atlas/domain/__init__.py +37 -0
- atlas/domain/chat/__init__.py +1 -0
- atlas/domain/chat/dtos.py +85 -0
- atlas/domain/errors.py +96 -0
- atlas/domain/messages/__init__.py +12 -0
- atlas/domain/messages/models.py +160 -0
- atlas/domain/rag_mcp_service.py +664 -0
- atlas/domain/sessions/__init__.py +7 -0
- atlas/domain/sessions/models.py +36 -0
- atlas/domain/unified_rag_service.py +371 -0
- atlas/infrastructure/__init__.py +10 -0
- atlas/infrastructure/app_factory.py +135 -0
- atlas/infrastructure/events/__init__.py +1 -0
- atlas/infrastructure/events/cli_event_publisher.py +140 -0
- atlas/infrastructure/events/websocket_publisher.py +140 -0
- atlas/infrastructure/sessions/in_memory_repository.py +56 -0
- atlas/infrastructure/transport/__init__.py +7 -0
- atlas/infrastructure/transport/websocket_connection_adapter.py +33 -0
- atlas/init_cli.py +226 -0
- atlas/interfaces/__init__.py +15 -0
- atlas/interfaces/events.py +134 -0
- atlas/interfaces/llm.py +54 -0
- atlas/interfaces/rag.py +40 -0
- atlas/interfaces/sessions.py +75 -0
- atlas/interfaces/tools.py +57 -0
- atlas/interfaces/transport.py +24 -0
- atlas/main.py +564 -0
- atlas/mcp/api_key_demo/README.md +76 -0
- atlas/mcp/api_key_demo/main.py +172 -0
- atlas/mcp/api_key_demo/run.sh +56 -0
- atlas/mcp/basictable/main.py +147 -0
- atlas/mcp/calculator/main.py +149 -0
- atlas/mcp/code-executor/execution_engine.py +98 -0
- atlas/mcp/code-executor/execution_environment.py +95 -0
- atlas/mcp/code-executor/main.py +528 -0
- atlas/mcp/code-executor/result_processing.py +276 -0
- atlas/mcp/code-executor/script_generation.py +195 -0
- atlas/mcp/code-executor/security_checker.py +140 -0
- atlas/mcp/corporate_cars/main.py +437 -0
- atlas/mcp/csv_reporter/main.py +545 -0
- atlas/mcp/duckduckgo/main.py +182 -0
- atlas/mcp/elicitation_demo/README.md +171 -0
- atlas/mcp/elicitation_demo/main.py +262 -0
- atlas/mcp/env-demo/README.md +158 -0
- atlas/mcp/env-demo/main.py +199 -0
- atlas/mcp/file_size_test/main.py +284 -0
- atlas/mcp/filesystem/main.py +348 -0
- atlas/mcp/image_demo/main.py +113 -0
- atlas/mcp/image_demo/requirements.txt +4 -0
- atlas/mcp/logging_demo/README.md +72 -0
- atlas/mcp/logging_demo/main.py +103 -0
- atlas/mcp/many_tools_demo/main.py +50 -0
- atlas/mcp/order_database/__init__.py +0 -0
- atlas/mcp/order_database/main.py +369 -0
- atlas/mcp/order_database/signal_data.csv +1001 -0
- atlas/mcp/pdfbasic/main.py +394 -0
- atlas/mcp/pptx_generator/main.py +760 -0
- atlas/mcp/pptx_generator/requirements.txt +13 -0
- atlas/mcp/pptx_generator/run_test.sh +1 -0
- atlas/mcp/pptx_generator/test_pptx_generator_security.py +169 -0
- atlas/mcp/progress_demo/main.py +167 -0
- atlas/mcp/progress_updates_demo/QUICKSTART.md +273 -0
- atlas/mcp/progress_updates_demo/README.md +120 -0
- atlas/mcp/progress_updates_demo/main.py +497 -0
- atlas/mcp/prompts/main.py +222 -0
- atlas/mcp/public_demo/main.py +189 -0
- atlas/mcp/sampling_demo/README.md +169 -0
- atlas/mcp/sampling_demo/main.py +234 -0
- atlas/mcp/thinking/main.py +77 -0
- atlas/mcp/tool_planner/main.py +240 -0
- atlas/mcp/ui-demo/badmesh.png +0 -0
- atlas/mcp/ui-demo/main.py +383 -0
- atlas/mcp/ui-demo/templates/button_demo.html +32 -0
- atlas/mcp/ui-demo/templates/data_visualization.html +32 -0
- atlas/mcp/ui-demo/templates/form_demo.html +28 -0
- atlas/mcp/username-override-demo/README.md +320 -0
- atlas/mcp/username-override-demo/main.py +308 -0
- atlas/modules/__init__.py +0 -0
- atlas/modules/config/__init__.py +34 -0
- atlas/modules/config/cli.py +231 -0
- atlas/modules/config/config_manager.py +1096 -0
- atlas/modules/file_storage/__init__.py +22 -0
- atlas/modules/file_storage/cli.py +330 -0
- atlas/modules/file_storage/content_extractor.py +290 -0
- atlas/modules/file_storage/manager.py +295 -0
- atlas/modules/file_storage/mock_s3_client.py +402 -0
- atlas/modules/file_storage/s3_client.py +417 -0
- atlas/modules/llm/__init__.py +19 -0
- atlas/modules/llm/caller.py +287 -0
- atlas/modules/llm/litellm_caller.py +675 -0
- atlas/modules/llm/models.py +19 -0
- atlas/modules/mcp_tools/__init__.py +17 -0
- atlas/modules/mcp_tools/client.py +2123 -0
- atlas/modules/mcp_tools/token_storage.py +556 -0
- atlas/modules/prompts/prompt_provider.py +130 -0
- atlas/modules/rag/__init__.py +24 -0
- atlas/modules/rag/atlas_rag_client.py +336 -0
- atlas/modules/rag/client.py +129 -0
- atlas/routes/admin_routes.py +865 -0
- atlas/routes/config_routes.py +484 -0
- atlas/routes/feedback_routes.py +361 -0
- atlas/routes/files_routes.py +274 -0
- atlas/routes/health_routes.py +40 -0
- atlas/routes/mcp_auth_routes.py +223 -0
- atlas/server_cli.py +164 -0
- atlas/tests/conftest.py +20 -0
- atlas/tests/integration/test_mcp_auth_integration.py +152 -0
- atlas/tests/manual_test_sampling.py +87 -0
- atlas/tests/modules/mcp_tools/test_client_auth.py +226 -0
- atlas/tests/modules/mcp_tools/test_client_env.py +191 -0
- atlas/tests/test_admin_mcp_server_management_routes.py +141 -0
- atlas/tests/test_agent_roa.py +135 -0
- atlas/tests/test_app_factory_smoke.py +47 -0
- atlas/tests/test_approval_manager.py +439 -0
- atlas/tests/test_atlas_client.py +188 -0
- atlas/tests/test_atlas_rag_client.py +447 -0
- atlas/tests/test_atlas_rag_integration.py +224 -0
- atlas/tests/test_attach_file_flow.py +287 -0
- atlas/tests/test_auth_utils.py +165 -0
- atlas/tests/test_backend_public_url.py +185 -0
- atlas/tests/test_banner_logging.py +287 -0
- atlas/tests/test_capability_tokens_and_injection.py +203 -0
- atlas/tests/test_compliance_level.py +54 -0
- atlas/tests/test_compliance_manager.py +253 -0
- atlas/tests/test_config_manager.py +617 -0
- atlas/tests/test_config_manager_paths.py +12 -0
- atlas/tests/test_core_auth.py +18 -0
- atlas/tests/test_core_utils.py +190 -0
- atlas/tests/test_docker_env_sync.py +202 -0
- atlas/tests/test_domain_errors.py +329 -0
- atlas/tests/test_domain_whitelist.py +359 -0
- atlas/tests/test_elicitation_manager.py +408 -0
- atlas/tests/test_elicitation_routing.py +296 -0
- atlas/tests/test_env_demo_server.py +88 -0
- atlas/tests/test_error_classification.py +113 -0
- atlas/tests/test_error_flow_integration.py +116 -0
- atlas/tests/test_feedback_routes.py +333 -0
- atlas/tests/test_file_content_extraction.py +1134 -0
- atlas/tests/test_file_extraction_routes.py +158 -0
- atlas/tests/test_file_library.py +107 -0
- atlas/tests/test_file_manager_unit.py +18 -0
- atlas/tests/test_health_route.py +49 -0
- atlas/tests/test_http_client_stub.py +8 -0
- atlas/tests/test_imports_smoke.py +30 -0
- atlas/tests/test_interfaces_llm_response.py +9 -0
- atlas/tests/test_issue_access_denied_fix.py +136 -0
- atlas/tests/test_llm_env_expansion.py +836 -0
- atlas/tests/test_log_level_sensitive_data.py +285 -0
- atlas/tests/test_mcp_auth_routes.py +341 -0
- atlas/tests/test_mcp_client_auth.py +331 -0
- atlas/tests/test_mcp_data_injection.py +270 -0
- atlas/tests/test_mcp_get_authorized_servers.py +95 -0
- atlas/tests/test_mcp_hot_reload.py +512 -0
- atlas/tests/test_mcp_image_content.py +424 -0
- atlas/tests/test_mcp_logging.py +172 -0
- atlas/tests/test_mcp_progress_updates.py +313 -0
- atlas/tests/test_mcp_prompt_override_system_prompt.py +102 -0
- atlas/tests/test_mcp_prompts_server.py +39 -0
- atlas/tests/test_mcp_tool_result_parsing.py +296 -0
- atlas/tests/test_metrics_logger.py +56 -0
- atlas/tests/test_middleware_auth.py +379 -0
- atlas/tests/test_prompt_risk_and_acl.py +141 -0
- atlas/tests/test_rag_mcp_aggregator.py +204 -0
- atlas/tests/test_rag_mcp_service.py +224 -0
- atlas/tests/test_rate_limit_middleware.py +45 -0
- atlas/tests/test_routes_config_smoke.py +60 -0
- atlas/tests/test_routes_files_download_token.py +41 -0
- atlas/tests/test_routes_files_health.py +18 -0
- atlas/tests/test_runtime_imports.py +53 -0
- atlas/tests/test_sampling_integration.py +482 -0
- atlas/tests/test_security_admin_routes.py +61 -0
- atlas/tests/test_security_capability_tokens.py +65 -0
- atlas/tests/test_security_file_stats_scope.py +21 -0
- atlas/tests/test_security_header_injection.py +191 -0
- atlas/tests/test_security_headers_and_filename.py +63 -0
- atlas/tests/test_shared_session_repository.py +101 -0
- atlas/tests/test_system_prompt_loading.py +181 -0
- atlas/tests/test_token_storage.py +505 -0
- atlas/tests/test_tool_approval_config.py +93 -0
- atlas/tests/test_tool_approval_utils.py +356 -0
- atlas/tests/test_tool_authorization_group_filtering.py +223 -0
- atlas/tests/test_tool_details_in_config.py +108 -0
- atlas/tests/test_tool_planner.py +300 -0
- atlas/tests/test_unified_rag_service.py +398 -0
- atlas/tests/test_username_override_in_approval.py +258 -0
- atlas/tests/test_websocket_auth_header.py +168 -0
- atlas/version.py +6 -0
- atlas_chat-0.1.0.data/data/.env.example +253 -0
- atlas_chat-0.1.0.data/data/config/defaults/compliance-levels.json +44 -0
- atlas_chat-0.1.0.data/data/config/defaults/domain-whitelist.json +123 -0
- atlas_chat-0.1.0.data/data/config/defaults/file-extractors.json +74 -0
- atlas_chat-0.1.0.data/data/config/defaults/help-config.json +198 -0
- atlas_chat-0.1.0.data/data/config/defaults/llmconfig-buggy.yml +11 -0
- atlas_chat-0.1.0.data/data/config/defaults/llmconfig.yml +19 -0
- atlas_chat-0.1.0.data/data/config/defaults/mcp.json +138 -0
- atlas_chat-0.1.0.data/data/config/defaults/rag-sources.json +17 -0
- atlas_chat-0.1.0.data/data/config/defaults/splash-config.json +16 -0
- atlas_chat-0.1.0.dist-info/METADATA +236 -0
- atlas_chat-0.1.0.dist-info/RECORD +250 -0
- atlas_chat-0.1.0.dist-info/WHEEL +5 -0
- atlas_chat-0.1.0.dist-info/entry_points.txt +4 -0
- atlas_chat-0.1.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"""Event publisher interface for transport-agnostic UI updates."""
|
|
2
|
+
|
|
3
|
+
from typing import Any, Dict, Protocol
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class EventPublisher(Protocol):
|
|
7
|
+
"""
|
|
8
|
+
Protocol for publishing events to UI/clients.
|
|
9
|
+
|
|
10
|
+
Provides transport-agnostic interface for sending various update types
|
|
11
|
+
to connected clients (e.g., via WebSocket, SSE, HTTP streaming, etc.).
|
|
12
|
+
|
|
13
|
+
This interface lives in the interfaces layer to avoid circular dependencies
|
|
14
|
+
and keep the application layer decoupled from atlas.infrastructure concerns.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
async def publish_chat_response(
|
|
18
|
+
self,
|
|
19
|
+
message: str,
|
|
20
|
+
has_pending_tools: bool = False,
|
|
21
|
+
) -> None:
|
|
22
|
+
"""
|
|
23
|
+
Publish a chat response message.
|
|
24
|
+
|
|
25
|
+
Args:
|
|
26
|
+
message: Response text from assistant
|
|
27
|
+
has_pending_tools: Whether tools are still executing
|
|
28
|
+
"""
|
|
29
|
+
pass
|
|
30
|
+
|
|
31
|
+
async def publish_response_complete(self) -> None:
|
|
32
|
+
"""Signal that the response is complete."""
|
|
33
|
+
pass
|
|
34
|
+
|
|
35
|
+
async def publish_agent_update(
|
|
36
|
+
self,
|
|
37
|
+
update_type: str,
|
|
38
|
+
**kwargs: Any
|
|
39
|
+
) -> None:
|
|
40
|
+
"""
|
|
41
|
+
Publish an agent-specific update.
|
|
42
|
+
|
|
43
|
+
Args:
|
|
44
|
+
update_type: Type of agent update (agent_start, agent_turn_start, etc.)
|
|
45
|
+
**kwargs: Additional data specific to the update type
|
|
46
|
+
"""
|
|
47
|
+
pass
|
|
48
|
+
|
|
49
|
+
async def publish_tool_start(
|
|
50
|
+
self,
|
|
51
|
+
tool_name: str,
|
|
52
|
+
**kwargs: Any
|
|
53
|
+
) -> None:
|
|
54
|
+
"""
|
|
55
|
+
Publish notification that a tool is starting.
|
|
56
|
+
|
|
57
|
+
Args:
|
|
58
|
+
tool_name: Name of the tool being executed
|
|
59
|
+
**kwargs: Additional tool execution metadata
|
|
60
|
+
"""
|
|
61
|
+
pass
|
|
62
|
+
|
|
63
|
+
async def publish_tool_complete(
|
|
64
|
+
self,
|
|
65
|
+
tool_name: str,
|
|
66
|
+
result: Any,
|
|
67
|
+
**kwargs: Any
|
|
68
|
+
) -> None:
|
|
69
|
+
"""
|
|
70
|
+
Publish notification that a tool has completed.
|
|
71
|
+
|
|
72
|
+
Args:
|
|
73
|
+
tool_name: Name of the tool that completed
|
|
74
|
+
result: Tool execution result
|
|
75
|
+
**kwargs: Additional tool execution metadata
|
|
76
|
+
"""
|
|
77
|
+
pass
|
|
78
|
+
|
|
79
|
+
async def publish_files_update(
|
|
80
|
+
self,
|
|
81
|
+
files: Dict[str, Any]
|
|
82
|
+
) -> None:
|
|
83
|
+
"""
|
|
84
|
+
Publish update about session files.
|
|
85
|
+
|
|
86
|
+
Args:
|
|
87
|
+
files: Dictionary of file information
|
|
88
|
+
"""
|
|
89
|
+
pass
|
|
90
|
+
|
|
91
|
+
async def publish_canvas_content(
|
|
92
|
+
self,
|
|
93
|
+
content: str,
|
|
94
|
+
content_type: str = "text/html",
|
|
95
|
+
**kwargs: Any
|
|
96
|
+
) -> None:
|
|
97
|
+
"""
|
|
98
|
+
Publish content for canvas display.
|
|
99
|
+
|
|
100
|
+
Args:
|
|
101
|
+
content: Content to display in canvas
|
|
102
|
+
content_type: MIME type of content
|
|
103
|
+
**kwargs: Additional canvas metadata
|
|
104
|
+
"""
|
|
105
|
+
pass
|
|
106
|
+
|
|
107
|
+
async def send_json(self, data: Dict[str, Any]) -> None:
|
|
108
|
+
"""
|
|
109
|
+
Send raw JSON message.
|
|
110
|
+
|
|
111
|
+
Args:
|
|
112
|
+
data: Dictionary to send as JSON
|
|
113
|
+
"""
|
|
114
|
+
pass
|
|
115
|
+
|
|
116
|
+
async def publish_elicitation_request(
|
|
117
|
+
self,
|
|
118
|
+
elicitation_id: str,
|
|
119
|
+
tool_call_id: str,
|
|
120
|
+
tool_name: str,
|
|
121
|
+
message: str,
|
|
122
|
+
response_schema: Dict[str, Any]
|
|
123
|
+
) -> None:
|
|
124
|
+
"""
|
|
125
|
+
Publish an elicitation request to the user.
|
|
126
|
+
|
|
127
|
+
Args:
|
|
128
|
+
elicitation_id: Unique identifier for this elicitation
|
|
129
|
+
tool_call_id: ID of the tool call that requested elicitation
|
|
130
|
+
tool_name: Name of the tool requesting input
|
|
131
|
+
message: Prompt message to display to the user
|
|
132
|
+
response_schema: JSON schema defining expected response structure
|
|
133
|
+
"""
|
|
134
|
+
pass
|
atlas/interfaces/llm.py
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"""LLM interface protocols."""
|
|
2
|
+
|
|
3
|
+
from typing import Dict, List, Protocol, runtime_checkable
|
|
4
|
+
|
|
5
|
+
from atlas.modules.llm.models import LLMResponse as LLMResponse
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@runtime_checkable
|
|
9
|
+
class LLMProtocol(Protocol):
|
|
10
|
+
"""Protocol for LLM interactions."""
|
|
11
|
+
|
|
12
|
+
async def call_plain(
|
|
13
|
+
self,
|
|
14
|
+
model_name: str,
|
|
15
|
+
messages: List[Dict[str, str]],
|
|
16
|
+
temperature: float = 0.7,
|
|
17
|
+
) -> str:
|
|
18
|
+
"""Plain LLM call without tools or RAG."""
|
|
19
|
+
...
|
|
20
|
+
|
|
21
|
+
async def call_with_tools(
|
|
22
|
+
self,
|
|
23
|
+
model_name: str,
|
|
24
|
+
messages: List[Dict[str, str]],
|
|
25
|
+
tools_schema: List[Dict],
|
|
26
|
+
tool_choice: str = "auto",
|
|
27
|
+
temperature: float = 0.7,
|
|
28
|
+
) -> LLMResponse:
|
|
29
|
+
"""LLM call with tool support."""
|
|
30
|
+
...
|
|
31
|
+
|
|
32
|
+
async def call_with_rag(
|
|
33
|
+
self,
|
|
34
|
+
model_name: str,
|
|
35
|
+
messages: List[Dict[str, str]],
|
|
36
|
+
data_sources: List[str],
|
|
37
|
+
user_email: str,
|
|
38
|
+
temperature: float = 0.7,
|
|
39
|
+
) -> str:
|
|
40
|
+
"""LLM call with RAG integration."""
|
|
41
|
+
...
|
|
42
|
+
|
|
43
|
+
async def call_with_rag_and_tools(
|
|
44
|
+
self,
|
|
45
|
+
model_name: str,
|
|
46
|
+
messages: List[Dict[str, str]],
|
|
47
|
+
data_sources: List[str],
|
|
48
|
+
tools_schema: List[Dict],
|
|
49
|
+
user_email: str,
|
|
50
|
+
tool_choice: str = "auto",
|
|
51
|
+
temperature: float = 0.7,
|
|
52
|
+
) -> LLMResponse:
|
|
53
|
+
"""LLM call with both RAG and tools."""
|
|
54
|
+
...
|
atlas/interfaces/rag.py
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"""RAG interface protocols."""
|
|
2
|
+
|
|
3
|
+
from typing import Dict, List, Protocol, runtime_checkable
|
|
4
|
+
|
|
5
|
+
from atlas.modules.rag.client import DataSource, RAGResponse
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@runtime_checkable
|
|
9
|
+
class RAGClientProtocol(Protocol):
|
|
10
|
+
"""Protocol for RAG client implementations.
|
|
11
|
+
|
|
12
|
+
Defines the interface that all RAG clients must implement,
|
|
13
|
+
enabling dependency injection and easier testing.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
async def discover_data_sources(self, user_name: str) -> List[DataSource]:
|
|
17
|
+
"""Discover data sources accessible by a user.
|
|
18
|
+
|
|
19
|
+
Args:
|
|
20
|
+
user_name: The username to discover data sources for.
|
|
21
|
+
|
|
22
|
+
Returns:
|
|
23
|
+
List of DataSource objects the user can access.
|
|
24
|
+
"""
|
|
25
|
+
pass
|
|
26
|
+
|
|
27
|
+
async def query_rag(
|
|
28
|
+
self, user_name: str, data_source: str, messages: List[Dict]
|
|
29
|
+
) -> RAGResponse:
|
|
30
|
+
"""Query RAG endpoint for a response with metadata.
|
|
31
|
+
|
|
32
|
+
Args:
|
|
33
|
+
user_name: The username making the query.
|
|
34
|
+
data_source: The data source to query.
|
|
35
|
+
messages: List of message dictionaries with role and content.
|
|
36
|
+
|
|
37
|
+
Returns:
|
|
38
|
+
RAGResponse containing content and optional metadata.
|
|
39
|
+
"""
|
|
40
|
+
pass
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"""Session repository interface."""
|
|
2
|
+
|
|
3
|
+
from typing import Optional, Protocol
|
|
4
|
+
from uuid import UUID
|
|
5
|
+
|
|
6
|
+
from atlas.domain.sessions.models import Session
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class SessionRepository(Protocol):
|
|
10
|
+
"""
|
|
11
|
+
Port for session storage and retrieval.
|
|
12
|
+
|
|
13
|
+
Abstracts session persistence from the application layer,
|
|
14
|
+
allowing different storage implementations (in-memory, Redis, DB, etc.).
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
async def get(self, session_id: UUID) -> Optional[Session]:
|
|
18
|
+
"""
|
|
19
|
+
Retrieve a session by ID.
|
|
20
|
+
|
|
21
|
+
Args:
|
|
22
|
+
session_id: Unique session identifier
|
|
23
|
+
|
|
24
|
+
Returns:
|
|
25
|
+
Session if found, None otherwise
|
|
26
|
+
"""
|
|
27
|
+
pass
|
|
28
|
+
|
|
29
|
+
async def create(self, session: Session) -> Session:
|
|
30
|
+
"""
|
|
31
|
+
Create and store a new session.
|
|
32
|
+
|
|
33
|
+
Args:
|
|
34
|
+
session: Session to create
|
|
35
|
+
|
|
36
|
+
Returns:
|
|
37
|
+
Created session
|
|
38
|
+
"""
|
|
39
|
+
pass
|
|
40
|
+
|
|
41
|
+
async def update(self, session: Session) -> Session:
|
|
42
|
+
"""
|
|
43
|
+
Update an existing session.
|
|
44
|
+
|
|
45
|
+
Args:
|
|
46
|
+
session: Session to update
|
|
47
|
+
|
|
48
|
+
Returns:
|
|
49
|
+
Updated session
|
|
50
|
+
"""
|
|
51
|
+
pass
|
|
52
|
+
|
|
53
|
+
async def delete(self, session_id: UUID) -> bool:
|
|
54
|
+
"""
|
|
55
|
+
Delete a session.
|
|
56
|
+
|
|
57
|
+
Args:
|
|
58
|
+
session_id: ID of session to delete
|
|
59
|
+
|
|
60
|
+
Returns:
|
|
61
|
+
True if deleted, False if not found
|
|
62
|
+
"""
|
|
63
|
+
pass
|
|
64
|
+
|
|
65
|
+
async def exists(self, session_id: UUID) -> bool:
|
|
66
|
+
"""
|
|
67
|
+
Check if a session exists.
|
|
68
|
+
|
|
69
|
+
Args:
|
|
70
|
+
session_id: Session ID to check
|
|
71
|
+
|
|
72
|
+
Returns:
|
|
73
|
+
True if session exists, False otherwise
|
|
74
|
+
"""
|
|
75
|
+
pass
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"""Tools interface protocols."""
|
|
2
|
+
|
|
3
|
+
from typing import Any, Dict, List, Optional, Protocol, runtime_checkable
|
|
4
|
+
|
|
5
|
+
from atlas.domain.messages.models import ToolCall, ToolResult
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@runtime_checkable
|
|
9
|
+
class ToolProtocol(Protocol):
|
|
10
|
+
"""Protocol for individual tools."""
|
|
11
|
+
|
|
12
|
+
@property
|
|
13
|
+
def name(self) -> str:
|
|
14
|
+
"""Tool name."""
|
|
15
|
+
...
|
|
16
|
+
|
|
17
|
+
@property
|
|
18
|
+
def description(self) -> str:
|
|
19
|
+
"""Tool description."""
|
|
20
|
+
...
|
|
21
|
+
|
|
22
|
+
def get_schema(self) -> Dict[str, Any]:
|
|
23
|
+
"""Get tool schema for LLM."""
|
|
24
|
+
...
|
|
25
|
+
|
|
26
|
+
async def execute(self, arguments: Dict[str, Any]) -> ToolResult:
|
|
27
|
+
"""Execute the tool with given arguments."""
|
|
28
|
+
...
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
@runtime_checkable
|
|
32
|
+
class ToolManagerProtocol(Protocol):
|
|
33
|
+
"""Protocol for tool management."""
|
|
34
|
+
|
|
35
|
+
def get_available_tools(self) -> List[str]:
|
|
36
|
+
"""Get list of available tool names."""
|
|
37
|
+
...
|
|
38
|
+
|
|
39
|
+
def get_tools_schema(self, tool_names: List[str]) -> List[Dict[str, Any]]:
|
|
40
|
+
"""Get schemas for specified tools."""
|
|
41
|
+
...
|
|
42
|
+
|
|
43
|
+
async def execute_tool(
|
|
44
|
+
self,
|
|
45
|
+
tool_call: ToolCall,
|
|
46
|
+
context: Optional[Dict[str, Any]] = None
|
|
47
|
+
) -> ToolResult:
|
|
48
|
+
"""Execute a tool call."""
|
|
49
|
+
...
|
|
50
|
+
|
|
51
|
+
async def execute_tool_calls(
|
|
52
|
+
self,
|
|
53
|
+
tool_calls: List[ToolCall],
|
|
54
|
+
context: Optional[Dict[str, Any]] = None
|
|
55
|
+
) -> List[ToolResult]:
|
|
56
|
+
"""Execute multiple tool calls."""
|
|
57
|
+
...
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"""Transport interface protocols."""
|
|
2
|
+
|
|
3
|
+
from typing import Any, Dict, Protocol, runtime_checkable
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
@runtime_checkable
|
|
7
|
+
class ChatConnectionProtocol(Protocol):
|
|
8
|
+
"""Protocol for chat connections (WebSocket abstraction)."""
|
|
9
|
+
|
|
10
|
+
async def send_json(self, data: Dict[str, Any]) -> None:
|
|
11
|
+
"""Send JSON data to the client."""
|
|
12
|
+
...
|
|
13
|
+
|
|
14
|
+
async def receive_json(self) -> Dict[str, Any]:
|
|
15
|
+
"""Receive JSON data from the client."""
|
|
16
|
+
...
|
|
17
|
+
|
|
18
|
+
async def accept(self) -> None:
|
|
19
|
+
"""Accept the connection."""
|
|
20
|
+
...
|
|
21
|
+
|
|
22
|
+
async def close(self) -> None:
|
|
23
|
+
"""Close the connection."""
|
|
24
|
+
...
|