solana-agent 11.3.0__py3-none-any.whl → 14.0.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.
- solana_agent/__init__.py +33 -1
- solana_agent/adapters/__init__.py +6 -0
- solana_agent/adapters/llm_adapter.py +123 -0
- solana_agent/adapters/mongodb_adapter.py +69 -0
- solana_agent/client/__init__.py +0 -0
- solana_agent/client/solana_agent.py +75 -0
- solana_agent/domains/__init__.py +6 -0
- solana_agent/domains/agents.py +80 -0
- solana_agent/domains/routing.py +14 -0
- solana_agent/factories/__init__.py +0 -0
- solana_agent/factories/agent_factory.py +148 -0
- solana_agent/interfaces/__init__.py +11 -0
- solana_agent/interfaces/plugins/plugins.py +118 -0
- solana_agent/interfaces/providers/data_storage.py +53 -0
- solana_agent/interfaces/providers/llm.py +34 -0
- solana_agent/interfaces/providers/memory.py +38 -0
- solana_agent/interfaces/repositories/agent.py +33 -0
- solana_agent/interfaces/services/agent.py +41 -0
- solana_agent/interfaces/services/query.py +11 -0
- solana_agent/interfaces/services/routing.py +19 -0
- solana_agent/plugins/__init__.py +6 -0
- solana_agent/plugins/manager.py +147 -0
- solana_agent/plugins/registry.py +64 -0
- solana_agent/plugins/tools/__init__.py +10 -0
- solana_agent/plugins/tools/auto_tool.py +47 -0
- solana_agent/repositories/__init__.py +6 -0
- solana_agent/repositories/agent.py +99 -0
- solana_agent/repositories/memory.py +134 -0
- solana_agent/services/__init__.py +6 -0
- solana_agent/services/agent.py +320 -0
- solana_agent/services/query.py +223 -0
- solana_agent/services/routing.py +149 -0
- solana_agent-14.0.0.dist-info/METADATA +121 -0
- solana_agent-14.0.0.dist-info/RECORD +36 -0
- solana_agent/ai.py +0 -7590
- solana_agent-11.3.0.dist-info/METADATA +0 -443
- solana_agent-11.3.0.dist-info/RECORD +0 -6
- {solana_agent-11.3.0.dist-info → solana_agent-14.0.0.dist-info}/LICENSE +0 -0
- {solana_agent-11.3.0.dist-info → solana_agent-14.0.0.dist-info}/WHEEL +0 -0
@@ -0,0 +1,223 @@
|
|
1
|
+
"""
|
2
|
+
Query service implementation.
|
3
|
+
|
4
|
+
This service orchestrates the processing of user queries, coordinating
|
5
|
+
other services to provide comprehensive responses while maintaining
|
6
|
+
clean separation of concerns.
|
7
|
+
"""
|
8
|
+
from typing import Any, AsyncGenerator, Dict, Optional
|
9
|
+
|
10
|
+
from solana_agent.interfaces.services.query import QueryService as QueryServiceInterface
|
11
|
+
from solana_agent.services.agent import AgentService
|
12
|
+
from solana_agent.services.routing import RoutingService
|
13
|
+
from solana_agent.interfaces.providers.memory import MemoryProvider
|
14
|
+
|
15
|
+
|
16
|
+
class QueryService(QueryServiceInterface):
|
17
|
+
"""Service for processing user queries and coordinating response generation."""
|
18
|
+
|
19
|
+
def __init__(
|
20
|
+
self,
|
21
|
+
agent_service: AgentService,
|
22
|
+
routing_service: RoutingService,
|
23
|
+
memory_provider: Optional[MemoryProvider] = None,
|
24
|
+
):
|
25
|
+
"""Initialize the query service.
|
26
|
+
|
27
|
+
Args:
|
28
|
+
agent_service: Service for AI agent management
|
29
|
+
routing_service: Service for routing queries to appropriate agents
|
30
|
+
memory_provider: Optional provider for memory storage and retrieval
|
31
|
+
"""
|
32
|
+
self.agent_service = agent_service
|
33
|
+
self.routing_service = routing_service
|
34
|
+
self.memory_provider = memory_provider
|
35
|
+
|
36
|
+
async def process(
|
37
|
+
self, user_id: str, user_text: str, timezone: str = None
|
38
|
+
) -> AsyncGenerator[str, None]: # pragma: no cover
|
39
|
+
"""Process the user request with appropriate agent.
|
40
|
+
|
41
|
+
Args:
|
42
|
+
user_id: User ID
|
43
|
+
user_text: User query text
|
44
|
+
timezone: Optional user timezone
|
45
|
+
|
46
|
+
Yields:
|
47
|
+
Response text chunks
|
48
|
+
"""
|
49
|
+
try:
|
50
|
+
# Handle simple greetings
|
51
|
+
if user_text.strip().lower() in ["test", "hello", "hi", "hey", "ping"]:
|
52
|
+
response = f"Hello! How can I help you today?"
|
53
|
+
yield response
|
54
|
+
# Store simple interaction in memory
|
55
|
+
if self.memory_provider:
|
56
|
+
await self._store_conversation(user_id, user_text, response)
|
57
|
+
return
|
58
|
+
|
59
|
+
# Get memory context if available
|
60
|
+
memory_context = ""
|
61
|
+
if self.memory_provider:
|
62
|
+
memory_context = await self.memory_provider.retrieve(user_id)
|
63
|
+
|
64
|
+
# Route query to appropriate agent
|
65
|
+
agent_name = await self.routing_service.route_query(user_id, user_text)
|
66
|
+
|
67
|
+
# Generate response
|
68
|
+
full_response = ""
|
69
|
+
async for chunk in self.agent_service.generate_response(
|
70
|
+
agent_name=agent_name,
|
71
|
+
user_id=user_id,
|
72
|
+
query=user_text,
|
73
|
+
memory_context=memory_context
|
74
|
+
):
|
75
|
+
yield chunk
|
76
|
+
full_response += chunk
|
77
|
+
|
78
|
+
# Store conversation and extract insights
|
79
|
+
if self.memory_provider:
|
80
|
+
await self._store_conversation(user_id, user_text, full_response)
|
81
|
+
|
82
|
+
except Exception as e:
|
83
|
+
yield f"I apologize for the technical difficulty. {str(e)}"
|
84
|
+
import traceback
|
85
|
+
print(f"Error in query processing: {str(e)}")
|
86
|
+
print(traceback.format_exc())
|
87
|
+
|
88
|
+
async def get_user_history(
|
89
|
+
self,
|
90
|
+
user_id: str,
|
91
|
+
page_num: int = 1,
|
92
|
+
page_size: int = 20,
|
93
|
+
sort_order: str = "asc" # "asc" for oldest-first, "desc" for newest-first
|
94
|
+
) -> Dict[str, Any]:
|
95
|
+
"""Get paginated message history for a user.
|
96
|
+
|
97
|
+
Args:
|
98
|
+
user_id: User ID
|
99
|
+
page_num: Page number (starting from 1)
|
100
|
+
page_size: Number of messages per page
|
101
|
+
sort_order: Sort order ("asc" or "desc")
|
102
|
+
|
103
|
+
Returns:
|
104
|
+
Dictionary with paginated results and metadata:
|
105
|
+
{
|
106
|
+
"data": List of conversation entries,
|
107
|
+
"total": Total number of entries,
|
108
|
+
"page": Current page number,
|
109
|
+
"page_size": Number of items per page,
|
110
|
+
"total_pages": Total number of pages,
|
111
|
+
"error": Error message if any
|
112
|
+
}
|
113
|
+
"""
|
114
|
+
if not self.memory_provider:
|
115
|
+
return {
|
116
|
+
"data": [],
|
117
|
+
"total": 0,
|
118
|
+
"page": page_num,
|
119
|
+
"page_size": page_size,
|
120
|
+
"total_pages": 0,
|
121
|
+
"error": "Memory provider not available"
|
122
|
+
}
|
123
|
+
|
124
|
+
try:
|
125
|
+
# Calculate skip and limit for pagination
|
126
|
+
skip = (page_num - 1) * page_size
|
127
|
+
|
128
|
+
# Get total count of documents
|
129
|
+
total = self.memory_provider.count_documents(
|
130
|
+
collection="conversations",
|
131
|
+
query={"user_id": user_id}
|
132
|
+
)
|
133
|
+
|
134
|
+
# Calculate total pages
|
135
|
+
total_pages = (total + page_size - 1) // page_size
|
136
|
+
|
137
|
+
# Get paginated results
|
138
|
+
conversations = self.memory_provider.find(
|
139
|
+
collection="conversations",
|
140
|
+
query={"user_id": user_id},
|
141
|
+
sort=[("timestamp", 1 if sort_order == "asc" else -1)],
|
142
|
+
skip=skip,
|
143
|
+
limit=page_size
|
144
|
+
)
|
145
|
+
|
146
|
+
# Format the results
|
147
|
+
formatted_conversations = []
|
148
|
+
for conv in conversations:
|
149
|
+
formatted_conversations.append({
|
150
|
+
"id": str(conv.get("_id")),
|
151
|
+
"user_message": conv.get("user_message"),
|
152
|
+
"assistant_message": conv.get("assistant_message"),
|
153
|
+
"timestamp": conv.get("timestamp").isoformat()
|
154
|
+
if conv.get("timestamp") else None
|
155
|
+
})
|
156
|
+
|
157
|
+
return {
|
158
|
+
"data": formatted_conversations,
|
159
|
+
"total": total,
|
160
|
+
"page": page_num,
|
161
|
+
"page_size": page_size,
|
162
|
+
"total_pages": total_pages,
|
163
|
+
"error": None
|
164
|
+
}
|
165
|
+
|
166
|
+
except Exception as e:
|
167
|
+
print(f"Error retrieving user history: {str(e)}")
|
168
|
+
import traceback
|
169
|
+
print(traceback.format_exc())
|
170
|
+
return {
|
171
|
+
"data": [],
|
172
|
+
"total": 0,
|
173
|
+
"page": page_num,
|
174
|
+
"page_size": page_size,
|
175
|
+
"total_pages": 0,
|
176
|
+
"error": f"Error retrieving history: {str(e)}"
|
177
|
+
}
|
178
|
+
|
179
|
+
async def _store_conversation(
|
180
|
+
self, user_id: str, user_text: str, response_text: str
|
181
|
+
) -> None:
|
182
|
+
"""Store conversation history in memory provider.
|
183
|
+
|
184
|
+
Args:
|
185
|
+
user_id: User ID
|
186
|
+
user_text: User message
|
187
|
+
response_text: Assistant response
|
188
|
+
"""
|
189
|
+
if self.memory_provider:
|
190
|
+
try:
|
191
|
+
# Truncate excessively long responses
|
192
|
+
truncated_response = self._truncate(response_text)
|
193
|
+
|
194
|
+
await self.memory_provider.store(
|
195
|
+
user_id,
|
196
|
+
[
|
197
|
+
{"role": "user", "content": user_text},
|
198
|
+
{"role": "assistant", "content": truncated_response},
|
199
|
+
],
|
200
|
+
)
|
201
|
+
except Exception as e:
|
202
|
+
print(f"Error storing conversation: {e}")
|
203
|
+
|
204
|
+
def _truncate(self, text: str, limit: int = 2500) -> str:
|
205
|
+
"""Truncate text to be within token limits.
|
206
|
+
|
207
|
+
Args:
|
208
|
+
text: Text to truncate
|
209
|
+
limit: Character limit
|
210
|
+
|
211
|
+
Returns:
|
212
|
+
Truncated text
|
213
|
+
"""
|
214
|
+
if len(text) <= limit:
|
215
|
+
return text
|
216
|
+
|
217
|
+
# Try to truncate at a sentence boundary
|
218
|
+
truncated = text[:limit]
|
219
|
+
last_period = truncated.rfind(".")
|
220
|
+
if last_period > limit * 0.8: # Only use period if reasonably close to the end
|
221
|
+
return truncated[:last_period + 1]
|
222
|
+
|
223
|
+
return truncated + "..."
|
@@ -0,0 +1,149 @@
|
|
1
|
+
"""
|
2
|
+
Routing service implementation.
|
3
|
+
|
4
|
+
This service manages query routing to appropriate agents based on
|
5
|
+
specializations and query analysis.
|
6
|
+
"""
|
7
|
+
from typing import Dict, List, Optional, Any
|
8
|
+
from solana_agent.interfaces.services.routing import RoutingService as RoutingServiceInterface
|
9
|
+
from solana_agent.interfaces.services.agent import AgentService
|
10
|
+
from solana_agent.interfaces.providers.llm import LLMProvider
|
11
|
+
from solana_agent.domains.routing import QueryAnalysis
|
12
|
+
|
13
|
+
|
14
|
+
class RoutingService(RoutingServiceInterface):
|
15
|
+
"""Service for routing queries to appropriate agents."""
|
16
|
+
|
17
|
+
def __init__(
|
18
|
+
self,
|
19
|
+
llm_provider: LLMProvider,
|
20
|
+
agent_service: AgentService,
|
21
|
+
):
|
22
|
+
"""Initialize the routing service.
|
23
|
+
|
24
|
+
Args:
|
25
|
+
llm_provider: Provider for language model interactions
|
26
|
+
agent_service: Service for agent management
|
27
|
+
"""
|
28
|
+
self.llm_provider = llm_provider
|
29
|
+
self.agent_service = agent_service
|
30
|
+
|
31
|
+
async def _analyze_query(self, query: str) -> Dict[str, Any]:
|
32
|
+
"""Analyze a query to determine routing information.
|
33
|
+
|
34
|
+
Args:
|
35
|
+
query: User query to analyze
|
36
|
+
|
37
|
+
Returns:
|
38
|
+
Analysis results including specializations and complexity
|
39
|
+
"""
|
40
|
+
prompt = f"""
|
41
|
+
Analyze this user query and determine:
|
42
|
+
1. The primary specialization needed to address it
|
43
|
+
2. Any secondary specializations that might be helpful
|
44
|
+
3. The complexity level (1-5, where 5 is most complex)
|
45
|
+
4. Any key topics or technologies mentioned
|
46
|
+
|
47
|
+
User Query: {query}
|
48
|
+
|
49
|
+
Be objective and thorough in your analysis.
|
50
|
+
"""
|
51
|
+
|
52
|
+
try:
|
53
|
+
analysis = await self.llm_provider.parse_structured_output(
|
54
|
+
prompt=prompt,
|
55
|
+
system_prompt="Analyze user queries to determine appropriate routing.",
|
56
|
+
model_class=QueryAnalysis,
|
57
|
+
temperature=0.2
|
58
|
+
)
|
59
|
+
|
60
|
+
return {
|
61
|
+
"primary_specialization": analysis.primary_specialization,
|
62
|
+
"secondary_specializations": analysis.secondary_specializations,
|
63
|
+
"complexity_level": analysis.complexity_level,
|
64
|
+
"topics": analysis.topics,
|
65
|
+
"confidence": analysis.confidence
|
66
|
+
}
|
67
|
+
except Exception as e:
|
68
|
+
print(f"Error analyzing query: {e}")
|
69
|
+
# Return default analysis on error
|
70
|
+
return {
|
71
|
+
"primary_specialization": "general",
|
72
|
+
"secondary_specializations": [],
|
73
|
+
"complexity_level": 1,
|
74
|
+
"topics": [],
|
75
|
+
"confidence": 0.0
|
76
|
+
}
|
77
|
+
|
78
|
+
async def route_query(self, user_id: str, query: str) -> str:
|
79
|
+
"""Route a query to the appropriate agent.
|
80
|
+
|
81
|
+
Args:
|
82
|
+
user_id: ID of the user making the query
|
83
|
+
query: The query text
|
84
|
+
|
85
|
+
Returns:
|
86
|
+
Name of the selected agent
|
87
|
+
"""
|
88
|
+
# Analyze query
|
89
|
+
analysis = await self._analyze_query(query)
|
90
|
+
|
91
|
+
# Find best agent based on analysis
|
92
|
+
selected_agent = await self._find_best_ai_agent(
|
93
|
+
analysis["primary_specialization"],
|
94
|
+
analysis["secondary_specializations"]
|
95
|
+
)
|
96
|
+
|
97
|
+
# Return default agent if none found
|
98
|
+
return selected_agent or "general_ai"
|
99
|
+
|
100
|
+
async def _find_best_ai_agent(
|
101
|
+
self,
|
102
|
+
primary_specialization: str,
|
103
|
+
secondary_specializations: List[str],
|
104
|
+
) -> Optional[str]:
|
105
|
+
"""Find the best AI agent for a query.
|
106
|
+
|
107
|
+
Args:
|
108
|
+
primary_specialization: Primary specialization needed
|
109
|
+
secondary_specializations: Secondary specializations
|
110
|
+
|
111
|
+
Returns:
|
112
|
+
Name of the best matching agent, or None if no match
|
113
|
+
"""
|
114
|
+
# Get all AI agents
|
115
|
+
ai_agents = self.agent_service.get_all_ai_agents()
|
116
|
+
if not ai_agents:
|
117
|
+
return None
|
118
|
+
|
119
|
+
# Create a list to score agents
|
120
|
+
agent_scores = []
|
121
|
+
|
122
|
+
for agent_id, agent in ai_agents.items():
|
123
|
+
# Base score
|
124
|
+
score = 0
|
125
|
+
|
126
|
+
# Check primary specialization
|
127
|
+
if agent.specialization.lower() == primary_specialization.lower():
|
128
|
+
score += 10
|
129
|
+
|
130
|
+
# Check secondary specializations
|
131
|
+
if hasattr(agent, 'secondary_specializations'):
|
132
|
+
for sec_spec in secondary_specializations:
|
133
|
+
if sec_spec.lower() in [s.lower() for s in agent.secondary_specializations]:
|
134
|
+
score += 3
|
135
|
+
|
136
|
+
agent_scores.append((agent_id, score))
|
137
|
+
|
138
|
+
# Sort by score
|
139
|
+
agent_scores.sort(key=lambda x: x[1], reverse=True)
|
140
|
+
|
141
|
+
# Return the highest scoring agent, if any
|
142
|
+
if agent_scores and agent_scores[0][1] > 0:
|
143
|
+
return agent_scores[0][0]
|
144
|
+
|
145
|
+
# If no good match, return the first AI agent as fallback
|
146
|
+
if ai_agents:
|
147
|
+
return next(iter(ai_agents.keys()))
|
148
|
+
|
149
|
+
return None
|
@@ -0,0 +1,121 @@
|
|
1
|
+
Metadata-Version: 2.3
|
2
|
+
Name: solana-agent
|
3
|
+
Version: 14.0.0
|
4
|
+
Summary: The Future of Work
|
5
|
+
License: MIT
|
6
|
+
Keywords: ai,openai,ai agents,agi
|
7
|
+
Author: Bevan Hunt
|
8
|
+
Author-email: bevan@bevanhunt.com
|
9
|
+
Requires-Python: >=3.12,<4.0
|
10
|
+
Classifier: License :: OSI Approved :: MIT License
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
12
|
+
Classifier: Programming Language :: Python :: 3.12
|
13
|
+
Classifier: Programming Language :: Python :: 3.13
|
14
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
15
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
16
|
+
Requires-Dist: ntplib (>=0.4.0,<0.5.0)
|
17
|
+
Requires-Dist: openai (>=1.67.0,<2.0.0)
|
18
|
+
Requires-Dist: pandas (>=2.2.3,<3.0.0)
|
19
|
+
Requires-Dist: pinecone (>=6.0.2,<7.0.0)
|
20
|
+
Requires-Dist: pydantic (>=2.10.6,<3.0.0)
|
21
|
+
Requires-Dist: pymongo (>=4.11.3,<5.0.0)
|
22
|
+
Requires-Dist: qdrant-client (>=1.13.3,<2.0.0)
|
23
|
+
Requires-Dist: requests (>=2.32.3,<3.0.0)
|
24
|
+
Requires-Dist: zep-cloud (>=2.7.0,<3.0.0)
|
25
|
+
Requires-Dist: zep-python (>=2.0.2,<3.0.0)
|
26
|
+
Project-URL: Repository, https://github.com/truemagic-coder/solana-agent
|
27
|
+
Description-Content-Type: text/markdown
|
28
|
+
|
29
|
+
# Solana Agent
|
30
|
+
|
31
|
+
[](https://pypi.org/project/solana-agent/)
|
32
|
+
[](https://opensource.org/licenses/MIT)
|
33
|
+
[](https://www.python.org/downloads/)
|
34
|
+
[](https://codecov.io/gh/truemagic-coder/solana-agent)
|
35
|
+
[](https://github.com/truemagic-coder/solana-agent/actions/workflows/test.yml)
|
36
|
+
|
37
|
+

|
38
|
+
|
39
|
+
## Technical Features
|
40
|
+
|
41
|
+
* Text streaming messages by AI Agents
|
42
|
+
* Routing based on AI Agent specializations
|
43
|
+
* Built-in default Internet Search for AI Agents
|
44
|
+
* Robust AI Agent tool plugins based on standard python packages
|
45
|
+
|
46
|
+
## Installation
|
47
|
+
|
48
|
+
You can install Solana Agent using pip:
|
49
|
+
|
50
|
+
`pip install solana-agent`
|
51
|
+
|
52
|
+
## Documentation
|
53
|
+
|
54
|
+
Each public method has a docstring for real-time IDE hinting.
|
55
|
+
|
56
|
+
## Example App
|
57
|
+
|
58
|
+
```python
|
59
|
+
from solana_agent import SolanaAgent
|
60
|
+
|
61
|
+
config = {
|
62
|
+
"organization": {
|
63
|
+
"mission_statement": "To revolutionize knowledge work through AI-human collaboration that puts people first.",
|
64
|
+
"values": {
|
65
|
+
"Human-Centered": "Always prioritize human well-being and augmentation over replacement.",
|
66
|
+
"Transparency": "Provide clear explanations for decisions and never hide information.",
|
67
|
+
"Collective Intelligence": "Value diverse perspectives and combine human and AI strengths.",
|
68
|
+
"Continuous Learning": "Embrace feedback and continuously improve based on experience."
|
69
|
+
},
|
70
|
+
"goals": [
|
71
|
+
"Enable human experts to focus on high-value creative work",
|
72
|
+
"Reduce administrative overhead through intelligent automation",
|
73
|
+
"Create seamless knowledge flow across the organization"
|
74
|
+
],
|
75
|
+
"guidance": "When making decisions, prioritize long-term user success over short-term efficiency."
|
76
|
+
},
|
77
|
+
"mongo": {
|
78
|
+
"connection_string": "mongodb://localhost:27017",
|
79
|
+
"database": "solana_agent"
|
80
|
+
},
|
81
|
+
"openai": {
|
82
|
+
"api_key": "your-openai-key",
|
83
|
+
"default_model": "gpt-4o-mini"
|
84
|
+
},
|
85
|
+
"agents": [
|
86
|
+
{
|
87
|
+
"name": "research_specialist",
|
88
|
+
"instructions": "You are an expert researcher who synthesizes complex information clearly.",
|
89
|
+
"specialization": "Research and knowledge synthesis",
|
90
|
+
"model": "o3-mini",
|
91
|
+
"tools": ["some_tool"]
|
92
|
+
},
|
93
|
+
{
|
94
|
+
"name": "customer_support",
|
95
|
+
"instructions": "You provide friendly, helpful customer support responses.",
|
96
|
+
"specialization": "Customer inquiries",
|
97
|
+
"model": "gpt-4o-mini"
|
98
|
+
}
|
99
|
+
],
|
100
|
+
}
|
101
|
+
|
102
|
+
# Create agent with configuration
|
103
|
+
solana_agent = SolanaAgent(config=config)
|
104
|
+
|
105
|
+
# Process a query that can use tools
|
106
|
+
async for response in solana_agent.process("user123", "What are the latest AI developments?"):
|
107
|
+
print(response, end="")
|
108
|
+
```
|
109
|
+
|
110
|
+
## Solana Agent Kit (plugins collection)
|
111
|
+
|
112
|
+
[Solana Agent Kit](https://github.com/truemagic-coder/solana-agent-kit)
|
113
|
+
|
114
|
+
## Example App
|
115
|
+
|
116
|
+
[Solana Agent Example App](https://github.com/truemagic-coder/solana-agent-app)
|
117
|
+
|
118
|
+
## License
|
119
|
+
|
120
|
+
This project is licensed under the MIT License - see the LICENSE file for details.
|
121
|
+
|
@@ -0,0 +1,36 @@
|
|
1
|
+
solana_agent/__init__.py,sha256=ceYeUpjIitpln8YK1r0JVJU8mzG6cRPYu-HLny3d-Tw,887
|
2
|
+
solana_agent/adapters/__init__.py,sha256=tiEEuuy0NF3ngc_tGEcRTt71zVI58v3dYY9RvMrF2Cg,204
|
3
|
+
solana_agent/adapters/llm_adapter.py,sha256=-MmQL71JlNJeWr16a-qZ5OzTg1_69ewgAR9ZSwXpsbw,4326
|
4
|
+
solana_agent/adapters/mongodb_adapter.py,sha256=zvcIZ61zx45cwfjMimXC2RV_D_s6sL5b2Dz6H3HCgFc,2456
|
5
|
+
solana_agent/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
6
|
+
solana_agent/client/solana_agent.py,sha256=SDspEitajVL3q2C0zlVoeE6iGTC4vWSd5vcRLZFUhXg,2600
|
7
|
+
solana_agent/domains/__init__.py,sha256=HiC94wVPRy-QDJSSRywCRrhrFfTBeHjfi5z-QfZv46U,168
|
8
|
+
solana_agent/domains/agents.py,sha256=S8OKtkUQ7npl8bZrSH64TZuu5bnwnMYXXx3IbKvJOuU,3005
|
9
|
+
solana_agent/domains/routing.py,sha256=UDlgTjUoC9xIBVYu_dnf9-KG_bBgdEXAv_UtDOrYo0w,650
|
10
|
+
solana_agent/factories/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
11
|
+
solana_agent/factories/agent_factory.py,sha256=yjB3G8ItXFH3DaoRf1BB1acPnL84Pd2pbqz5W03-5Jc,5711
|
12
|
+
solana_agent/interfaces/__init__.py,sha256=IQs1WIM1FeKP1-kY2FEfyhol_dB-I-VAe2rD6jrVF6k,355
|
13
|
+
solana_agent/interfaces/plugins/plugins.py,sha256=TMmTXwHhmkdJpIhgADfrpGGGk7PHP7O9Qi89uA26uMI,3013
|
14
|
+
solana_agent/interfaces/providers/data_storage.py,sha256=Qjui9ISvX_NtOUPTUyjPMNxDoYRpml-aMG8DZy_Qxzc,1509
|
15
|
+
solana_agent/interfaces/providers/llm.py,sha256=y4OFj2Wq4XicMxArWsYBHSp6cFe3BcK9sCemfyaWV_A,887
|
16
|
+
solana_agent/interfaces/providers/memory.py,sha256=oNOH8WZXVW8assDigIWZAWiwkxbpDiKupxA2RB6tQvQ,1010
|
17
|
+
solana_agent/interfaces/repositories/agent.py,sha256=HZL5q7DoOj-qK5IDSShAJnu4_A75OR0xgJD_2W6Zr6k,820
|
18
|
+
solana_agent/interfaces/services/agent.py,sha256=JHUVsxAnOsopiNilU_zDBAhJfQT_BFrtOczDL2atoZo,1407
|
19
|
+
solana_agent/interfaces/services/query.py,sha256=6SILNgSIkUsCnhn6EqdmsfPFTieawGbNJq56a3TzgSA,307
|
20
|
+
solana_agent/interfaces/services/routing.py,sha256=tKMK97m6U5I__F406sm60az4QInGLX_N3knc_AbMZ80,452
|
21
|
+
solana_agent/plugins/__init__.py,sha256=coZdgJKq1ExOaj6qB810i3rEhbjdVlrkN76ozt_Ojgo,193
|
22
|
+
solana_agent/plugins/manager.py,sha256=GWwhfMBn9THwVn7biOvVa25GLthCA1ilWIoDkt5hXNI,5084
|
23
|
+
solana_agent/plugins/registry.py,sha256=dRKWoOEqiU7OLsjpBWf4VJfDQYZdJPjW5AKxeITmVMA,2283
|
24
|
+
solana_agent/plugins/tools/__init__.py,sha256=c0z7ij42gs94_VJrcn4Y8gUlTxMhsFNY6ahIsNswdLk,231
|
25
|
+
solana_agent/plugins/tools/auto_tool.py,sha256=Z3CcOzwdXpzciH-5yphhd9qt1b9owTxhwC-dYmPF6B0,1489
|
26
|
+
solana_agent/repositories/__init__.py,sha256=fP83w83CGzXLnSdq-C5wbw9EhWTYtqE2lQTgp46-X_4,163
|
27
|
+
solana_agent/repositories/agent.py,sha256=7FTT3WvOaBacWme7d-qaOyqAlUhf9LVLXnIiPb16FDk,3188
|
28
|
+
solana_agent/repositories/memory.py,sha256=0wgoa2bXhpgdBgn9-i9G10PB1bMGYObxcoY9Newll40,4742
|
29
|
+
solana_agent/services/__init__.py,sha256=ab_NXJmwYUCmCrCzuTlZ47bJZINW0Y0F5jfQ9OovidU,163
|
30
|
+
solana_agent/services/agent.py,sha256=-IKdDNvq-T_xEkOt7q2oG0xklL07_RUrc2NT1YIle9c,11426
|
31
|
+
solana_agent/services/query.py,sha256=N8UULC7RrxxX-mQUjporduKj7auKV899n2B9Amol_ss,7767
|
32
|
+
solana_agent/services/routing.py,sha256=L3nZaMeX4ENYfHoc2KrOtfzhScCWfrXS5RRaUIJPwNY,4956
|
33
|
+
solana_agent-14.0.0.dist-info/LICENSE,sha256=BnSRc-NSFuyF2s496l_4EyrwAP6YimvxWcjPiJ0J7g4,1057
|
34
|
+
solana_agent-14.0.0.dist-info/METADATA,sha256=u_s6RqaKolKU180Z8LYehkw-5cuogb1XsB67a6d8aWo,4569
|
35
|
+
solana_agent-14.0.0.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
|
36
|
+
solana_agent-14.0.0.dist-info/RECORD,,
|