solana-agent 20.1.0__tar.gz → 20.1.2__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.
Files changed (35) hide show
  1. {solana_agent-20.1.0 → solana_agent-20.1.2}/PKG-INFO +70 -9
  2. {solana_agent-20.1.0 → solana_agent-20.1.2}/README.md +69 -8
  3. {solana_agent-20.1.0 → solana_agent-20.1.2}/pyproject.toml +2 -1
  4. {solana_agent-20.1.0 → solana_agent-20.1.2}/solana_agent/interfaces/services/routing.py +1 -1
  5. {solana_agent-20.1.0 → solana_agent-20.1.2}/LICENSE +0 -0
  6. {solana_agent-20.1.0 → solana_agent-20.1.2}/solana_agent/__init__.py +0 -0
  7. {solana_agent-20.1.0 → solana_agent-20.1.2}/solana_agent/adapters/__init__.py +0 -0
  8. {solana_agent-20.1.0 → solana_agent-20.1.2}/solana_agent/adapters/llm_adapter.py +0 -0
  9. {solana_agent-20.1.0 → solana_agent-20.1.2}/solana_agent/adapters/mongodb_adapter.py +0 -0
  10. {solana_agent-20.1.0 → solana_agent-20.1.2}/solana_agent/client/__init__.py +0 -0
  11. {solana_agent-20.1.0 → solana_agent-20.1.2}/solana_agent/client/solana_agent.py +0 -0
  12. {solana_agent-20.1.0 → solana_agent-20.1.2}/solana_agent/domains/__init__.py +0 -0
  13. {solana_agent-20.1.0 → solana_agent-20.1.2}/solana_agent/domains/agent.py +0 -0
  14. {solana_agent-20.1.0 → solana_agent-20.1.2}/solana_agent/domains/routing.py +0 -0
  15. {solana_agent-20.1.0 → solana_agent-20.1.2}/solana_agent/factories/__init__.py +0 -0
  16. {solana_agent-20.1.0 → solana_agent-20.1.2}/solana_agent/factories/agent_factory.py +0 -0
  17. {solana_agent-20.1.0 → solana_agent-20.1.2}/solana_agent/interfaces/__init__.py +0 -0
  18. {solana_agent-20.1.0 → solana_agent-20.1.2}/solana_agent/interfaces/client/client.py +0 -0
  19. {solana_agent-20.1.0 → solana_agent-20.1.2}/solana_agent/interfaces/plugins/plugins.py +0 -0
  20. {solana_agent-20.1.0 → solana_agent-20.1.2}/solana_agent/interfaces/providers/data_storage.py +0 -0
  21. {solana_agent-20.1.0 → solana_agent-20.1.2}/solana_agent/interfaces/providers/llm.py +0 -0
  22. {solana_agent-20.1.0 → solana_agent-20.1.2}/solana_agent/interfaces/providers/memory.py +0 -0
  23. {solana_agent-20.1.0 → solana_agent-20.1.2}/solana_agent/interfaces/services/agent.py +0 -0
  24. {solana_agent-20.1.0 → solana_agent-20.1.2}/solana_agent/interfaces/services/query.py +0 -0
  25. {solana_agent-20.1.0 → solana_agent-20.1.2}/solana_agent/plugins/__init__.py +0 -0
  26. {solana_agent-20.1.0 → solana_agent-20.1.2}/solana_agent/plugins/manager.py +0 -0
  27. {solana_agent-20.1.0 → solana_agent-20.1.2}/solana_agent/plugins/registry.py +0 -0
  28. {solana_agent-20.1.0 → solana_agent-20.1.2}/solana_agent/plugins/tools/__init__.py +0 -0
  29. {solana_agent-20.1.0 → solana_agent-20.1.2}/solana_agent/plugins/tools/auto_tool.py +0 -0
  30. {solana_agent-20.1.0 → solana_agent-20.1.2}/solana_agent/repositories/__init__.py +0 -0
  31. {solana_agent-20.1.0 → solana_agent-20.1.2}/solana_agent/repositories/memory.py +0 -0
  32. {solana_agent-20.1.0 → solana_agent-20.1.2}/solana_agent/services/__init__.py +0 -0
  33. {solana_agent-20.1.0 → solana_agent-20.1.2}/solana_agent/services/agent.py +0 -0
  34. {solana_agent-20.1.0 → solana_agent-20.1.2}/solana_agent/services/query.py +0 -0
  35. {solana_agent-20.1.0 → solana_agent-20.1.2}/solana_agent/services/routing.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: solana-agent
3
- Version: 20.1.0
3
+ Version: 20.1.2
4
4
  Summary: Agentic IQ
5
5
  License: MIT
6
6
  Keywords: ai,openai,ai agents,agi
@@ -56,7 +56,7 @@ Build your AI business in three lines of code!
56
56
  * Seamless text and audio streaming with real-time multi-modal processing
57
57
  * Persistent memory that preserves context across all agent interactions
58
58
  * Streamlined message history for all agent interactions
59
- * Intelligent query routing to agents with optimal domain expertise
59
+ * Intelligent query routing to agents with optimal domain expertise or your own custom routing
60
60
  * Unified value system ensuring brand-aligned agent responses
61
61
  * Powerful tool integration using standard Python packages and/or inline classes
62
62
  * Assigned tools are utilized by agents automatically and effectively
@@ -77,13 +77,11 @@ You can install Solana Agent using pip:
77
77
 
78
78
  ## Usage
79
79
 
80
- ### Text/Text Streaming
80
+ ### Business Alignment Config - Optional
81
81
 
82
82
  ```python
83
- from solana_agent import SolanaAgent
84
-
85
83
  config = {
86
- "business": { # optional
84
+ "business": {
87
85
  "mission": "To provide users with a one-stop shop for their queries.",
88
86
  "values": {
89
87
  "Friendliness": "Users must be treated fairly, openly, and with friendliness.",
@@ -94,14 +92,37 @@ config = {
94
92
  ],
95
93
  "voice": "The voice of the brand is that of a research business."
96
94
  },
97
- "mongo": { # optional
95
+ }
96
+ ```
97
+
98
+ ### Conversational History Config - Optional
99
+
100
+ ```python
101
+ config = {
102
+ "mongo": {
98
103
  "connection_string": "mongodb://localhost:27017",
99
104
  "database": "solana_agent"
100
105
  },
101
- "zep": { # optional
106
+ }
107
+ ```
108
+
109
+ ### Conversational Memory Config - Optional
110
+
111
+ ```python
112
+ config = {
113
+ "zep": {
102
114
  "api_key": "your-zep-api-key",
103
115
  "base_url": "your-zep-base-url", # not applicable if using Zep Cloud
104
116
  },
117
+ }
118
+ ```
119
+
120
+ ### Text/Text Streaming
121
+
122
+ ```python
123
+ from solana_agent import SolanaAgent
124
+
125
+ config = {
105
126
  "openai": {
106
127
  "api_key": "your-openai-api-key",
107
128
  },
@@ -368,12 +389,52 @@ async for response in solana_agent.process("user123", "What are the latest AI de
368
389
  print(response, end="")
369
390
  ```
370
391
 
392
+ ### Custom Routing
393
+
394
+ ```python
395
+ from solana_agent import SolanaAgent
396
+ from solana_agent.interfaces.services.routing import RoutingService as RoutingServiceInterface
397
+
398
+ config = {
399
+ "openai": {
400
+ "api_key": "your-openai-api-key",
401
+ },
402
+ "agents": [
403
+ {
404
+ "name": "research_specialist",
405
+ "instructions": "You are an expert researcher who synthesizes complex information clearly.",
406
+ "specialization": "Research and knowledge synthesis",
407
+ },
408
+ {
409
+ "name": "customer_support",
410
+ "instructions": "You provide friendly, helpful customer support responses.",
411
+ "specialization": "Customer inquiries",
412
+ }
413
+ ],
414
+ }
415
+
416
+ class Router(RoutingServiceInterface)
417
+ def __init__(self):
418
+ # your router initialization - delete the following pass
419
+ pass
420
+
421
+ async def route_query(self, query: str) -> str:
422
+ # a simple example to route always to customer_support agent
423
+ return "customer_support"
424
+
425
+ router = Router()
426
+
427
+ solana_agent = SolanaAgent(config=config)
428
+
429
+ async for response in solana_agent.process("user123", "What are the latest AI developments?", router=router):
430
+ print(response, end="")
431
+ ```
432
+
371
433
  ## Notes
372
434
  * Solana Agent agents can only call one tool per response.
373
435
  * Solana Agent agents choose the best tool for the job.
374
436
  * Solana Agent tools do not use OpenAI function calling.
375
437
  * Solana Agent tools are async functions.
376
- * Solana Agent will use OpenAI for audio and Ollama and for text if both config vars are set
377
438
 
378
439
  ## Local Setup
379
440
 
@@ -31,7 +31,7 @@ Build your AI business in three lines of code!
31
31
  * Seamless text and audio streaming with real-time multi-modal processing
32
32
  * Persistent memory that preserves context across all agent interactions
33
33
  * Streamlined message history for all agent interactions
34
- * Intelligent query routing to agents with optimal domain expertise
34
+ * Intelligent query routing to agents with optimal domain expertise or your own custom routing
35
35
  * Unified value system ensuring brand-aligned agent responses
36
36
  * Powerful tool integration using standard Python packages and/or inline classes
37
37
  * Assigned tools are utilized by agents automatically and effectively
@@ -52,13 +52,11 @@ You can install Solana Agent using pip:
52
52
 
53
53
  ## Usage
54
54
 
55
- ### Text/Text Streaming
55
+ ### Business Alignment Config - Optional
56
56
 
57
57
  ```python
58
- from solana_agent import SolanaAgent
59
-
60
58
  config = {
61
- "business": { # optional
59
+ "business": {
62
60
  "mission": "To provide users with a one-stop shop for their queries.",
63
61
  "values": {
64
62
  "Friendliness": "Users must be treated fairly, openly, and with friendliness.",
@@ -69,14 +67,37 @@ config = {
69
67
  ],
70
68
  "voice": "The voice of the brand is that of a research business."
71
69
  },
72
- "mongo": { # optional
70
+ }
71
+ ```
72
+
73
+ ### Conversational History Config - Optional
74
+
75
+ ```python
76
+ config = {
77
+ "mongo": {
73
78
  "connection_string": "mongodb://localhost:27017",
74
79
  "database": "solana_agent"
75
80
  },
76
- "zep": { # optional
81
+ }
82
+ ```
83
+
84
+ ### Conversational Memory Config - Optional
85
+
86
+ ```python
87
+ config = {
88
+ "zep": {
77
89
  "api_key": "your-zep-api-key",
78
90
  "base_url": "your-zep-base-url", # not applicable if using Zep Cloud
79
91
  },
92
+ }
93
+ ```
94
+
95
+ ### Text/Text Streaming
96
+
97
+ ```python
98
+ from solana_agent import SolanaAgent
99
+
100
+ config = {
80
101
  "openai": {
81
102
  "api_key": "your-openai-api-key",
82
103
  },
@@ -343,12 +364,52 @@ async for response in solana_agent.process("user123", "What are the latest AI de
343
364
  print(response, end="")
344
365
  ```
345
366
 
367
+ ### Custom Routing
368
+
369
+ ```python
370
+ from solana_agent import SolanaAgent
371
+ from solana_agent.interfaces.services.routing import RoutingService as RoutingServiceInterface
372
+
373
+ config = {
374
+ "openai": {
375
+ "api_key": "your-openai-api-key",
376
+ },
377
+ "agents": [
378
+ {
379
+ "name": "research_specialist",
380
+ "instructions": "You are an expert researcher who synthesizes complex information clearly.",
381
+ "specialization": "Research and knowledge synthesis",
382
+ },
383
+ {
384
+ "name": "customer_support",
385
+ "instructions": "You provide friendly, helpful customer support responses.",
386
+ "specialization": "Customer inquiries",
387
+ }
388
+ ],
389
+ }
390
+
391
+ class Router(RoutingServiceInterface)
392
+ def __init__(self):
393
+ # your router initialization - delete the following pass
394
+ pass
395
+
396
+ async def route_query(self, query: str) -> str:
397
+ # a simple example to route always to customer_support agent
398
+ return "customer_support"
399
+
400
+ router = Router()
401
+
402
+ solana_agent = SolanaAgent(config=config)
403
+
404
+ async for response in solana_agent.process("user123", "What are the latest AI developments?", router=router):
405
+ print(response, end="")
406
+ ```
407
+
346
408
  ## Notes
347
409
  * Solana Agent agents can only call one tool per response.
348
410
  * Solana Agent agents choose the best tool for the job.
349
411
  * Solana Agent tools do not use OpenAI function calling.
350
412
  * Solana Agent tools are async functions.
351
- * Solana Agent will use OpenAI for audio and Ollama and for text if both config vars are set
352
413
 
353
414
  ## Local Setup
354
415
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "solana-agent"
3
- version = "20.1.0"
3
+ version = "20.1.2"
4
4
  description = "Agentic IQ"
5
5
  authors = ["Bevan Hunt <bevan@bevanhunt.com>"]
6
6
  license = "MIT"
@@ -11,6 +11,7 @@ keywords = ["ai", "openai", "ai agents", "agi"]
11
11
  classifiers = [
12
12
  "Development Status :: 5 - Production/Stable",
13
13
  "Intended Audience :: Developers",
14
+ "Programming Language :: Python :: 3",
14
15
  "Programming Language :: Python :: 3.12",
15
16
  "Programming Language :: Python :: 3.13",
16
17
  "Topic :: Scientific/Engineering :: Artificial Intelligence",
@@ -6,7 +6,7 @@ class RoutingService(ABC):
6
6
  """Interface for query routing services."""
7
7
 
8
8
  @abstractmethod
9
- async def route_query(self, query: str) -> Tuple[str, Any]:
9
+ async def route_query(self, query: str) -> str:
10
10
  """Route a query to the appropriate agent.
11
11
 
12
12
  Args:
File without changes