solana-agent 23.0.7__tar.gz → 24.0.0__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-23.0.7 → solana_agent-24.0.0}/PKG-INFO +7 -23
  2. {solana_agent-23.0.7 → solana_agent-24.0.0}/README.md +5 -21
  3. {solana_agent-23.0.7 → solana_agent-24.0.0}/pyproject.toml +2 -2
  4. {solana_agent-23.0.7 → solana_agent-24.0.0}/solana_agent/adapters/llm_adapter.py +1 -7
  5. {solana_agent-23.0.7 → solana_agent-24.0.0}/solana_agent/client/solana_agent.py +0 -3
  6. {solana_agent-23.0.7 → solana_agent-24.0.0}/solana_agent/interfaces/client/client.py +0 -1
  7. {solana_agent-23.0.7 → solana_agent-24.0.0}/solana_agent/interfaces/providers/llm.py +0 -1
  8. {solana_agent-23.0.7 → solana_agent-24.0.0}/solana_agent/interfaces/services/agent.py +0 -1
  9. {solana_agent-23.0.7 → solana_agent-24.0.0}/solana_agent/interfaces/services/query.py +0 -1
  10. {solana_agent-23.0.7 → solana_agent-24.0.0}/solana_agent/services/agent.py +0 -2
  11. {solana_agent-23.0.7 → solana_agent-24.0.0}/solana_agent/services/query.py +0 -4
  12. {solana_agent-23.0.7 → solana_agent-24.0.0}/LICENSE +0 -0
  13. {solana_agent-23.0.7 → solana_agent-24.0.0}/solana_agent/__init__.py +0 -0
  14. {solana_agent-23.0.7 → solana_agent-24.0.0}/solana_agent/adapters/__init__.py +0 -0
  15. {solana_agent-23.0.7 → solana_agent-24.0.0}/solana_agent/adapters/mongodb_adapter.py +0 -0
  16. {solana_agent-23.0.7 → solana_agent-24.0.0}/solana_agent/client/__init__.py +0 -0
  17. {solana_agent-23.0.7 → solana_agent-24.0.0}/solana_agent/domains/__init__.py +0 -0
  18. {solana_agent-23.0.7 → solana_agent-24.0.0}/solana_agent/domains/agent.py +0 -0
  19. {solana_agent-23.0.7 → solana_agent-24.0.0}/solana_agent/domains/routing.py +0 -0
  20. {solana_agent-23.0.7 → solana_agent-24.0.0}/solana_agent/factories/__init__.py +0 -0
  21. {solana_agent-23.0.7 → solana_agent-24.0.0}/solana_agent/factories/agent_factory.py +0 -0
  22. {solana_agent-23.0.7 → solana_agent-24.0.0}/solana_agent/interfaces/__init__.py +0 -0
  23. {solana_agent-23.0.7 → solana_agent-24.0.0}/solana_agent/interfaces/plugins/plugins.py +0 -0
  24. {solana_agent-23.0.7 → solana_agent-24.0.0}/solana_agent/interfaces/providers/data_storage.py +0 -0
  25. {solana_agent-23.0.7 → solana_agent-24.0.0}/solana_agent/interfaces/providers/memory.py +0 -0
  26. {solana_agent-23.0.7 → solana_agent-24.0.0}/solana_agent/interfaces/services/routing.py +0 -0
  27. {solana_agent-23.0.7 → solana_agent-24.0.0}/solana_agent/plugins/__init__.py +0 -0
  28. {solana_agent-23.0.7 → solana_agent-24.0.0}/solana_agent/plugins/manager.py +0 -0
  29. {solana_agent-23.0.7 → solana_agent-24.0.0}/solana_agent/plugins/registry.py +0 -0
  30. {solana_agent-23.0.7 → solana_agent-24.0.0}/solana_agent/plugins/tools/__init__.py +0 -0
  31. {solana_agent-23.0.7 → solana_agent-24.0.0}/solana_agent/plugins/tools/auto_tool.py +0 -0
  32. {solana_agent-23.0.7 → solana_agent-24.0.0}/solana_agent/repositories/__init__.py +0 -0
  33. {solana_agent-23.0.7 → solana_agent-24.0.0}/solana_agent/repositories/memory.py +0 -0
  34. {solana_agent-23.0.7 → solana_agent-24.0.0}/solana_agent/services/__init__.py +0 -0
  35. {solana_agent-23.0.7 → solana_agent-24.0.0}/solana_agent/services/routing.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: solana-agent
3
- Version: 23.0.7
3
+ Version: 24.0.0
4
4
  Summary: Agentic IQ
5
5
  License: MIT
6
6
  Keywords: ai,openai,ai agents,agi
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3
14
14
  Classifier: Programming Language :: Python :: 3.12
15
15
  Classifier: Programming Language :: Python :: 3.13
16
16
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
17
- Requires-Dist: openai (>=1.70.0,<2.0.0)
17
+ Requires-Dist: openai (>=1.71.0,<2.0.0)
18
18
  Requires-Dist: pydantic (>=2.11.2,<3.0.0)
19
19
  Requires-Dist: pymongo (>=4.11.3,<5.0.0)
20
20
  Requires-Dist: zep-cloud (>=2.9.0,<3.0.0)
@@ -44,7 +44,7 @@ Build your AI business in three lines of code!
44
44
  * Multi-Agent Swarm
45
45
  * Multi-Modal Streaming (Text & Audio)
46
46
  * Conversational Memory & History
47
- * Built-in Internet Search
47
+ * Internet Search
48
48
  * Intelligent Routing
49
49
  * Business Alignment
50
50
  * Extensible Tooling
@@ -60,7 +60,7 @@ Build your AI business in three lines of code!
60
60
  * Seamless text and audio streaming with real-time multi-modal processing
61
61
  * Configurable audio voice characteristics via prompting
62
62
  * Persistent memory that preserves context across all agent interactions
63
- * Quick built-in Internet search to answer users' queries
63
+ * Quick Internet search to answer users' queries
64
64
  * Streamlined message history for all agent interactions
65
65
  * Intelligent query routing to agents with optimal domain expertise or your own custom routing
66
66
  * Unified value system ensuring brand-aligned agent responses
@@ -82,7 +82,6 @@ Build your AI business in three lines of code!
82
82
  * [gpt-4o-mini](https://platform.openai.com/docs/models/gpt-4o-mini)
83
83
  * [gpt-4o-mini-tts](https://platform.openai.com/docs/models/gpt-4o-mini-tts)
84
84
  * [gpt-4o-mini-transcribe](https://platform.openai.com/docs/models/gpt-4o-mini-transcribe)
85
- * [gpt-4o-mini-search-preview](https://platform.openai.com/docs/models/gpt-4o-mini-search-preview)
86
85
 
87
86
  ## Installation
88
87
 
@@ -353,21 +352,6 @@ API Calls:
353
352
 
354
353
  * If the Zep user and session isn't created it creates them for 2 API calls (POST)
355
354
 
356
- ### Internet Search
357
-
358
- This mode is great for text output where the default response from OpenAI is enough.
359
-
360
- It is not suitable for audio as the OpenAI search results contain links and markdown.
361
-
362
- Also it may not call tools when they should be called as it thinks the search results answer the user query.
363
-
364
- It is much faster than calling `search_internet` from `sakit` as it saves 2 API calls.
365
-
366
- ```python
367
- async for response in solana_agent.process("user123", "What is the latest news on Canada?", internet_search=True):
368
- print(response, end="")
369
- ```
370
-
371
355
  ### Customize Speech
372
356
 
373
357
  This is an audio to audio example using the `audio_instructions` parameter.
@@ -393,10 +377,10 @@ Tools can be used from plugins like Solana Agent Kit (sakit) or via inline tools
393
377
 
394
378
  * Agents can only call one tool per response
395
379
  * Agents choose the best tool for the job
396
- * Tools do not use OpenAI function calling
397
- * Tools are async functions
380
+ * Solana Agent doesn't use OpenAI function calling (tools) as they don't support async functions
381
+ * Solana Agent tools are async functions
398
382
 
399
- ### Plugin Tool Example
383
+ ### Internet Search (Plugin Example)
400
384
 
401
385
  `pip install sakit`
402
386
 
@@ -20,7 +20,7 @@ Build your AI business in three lines of code!
20
20
  * Multi-Agent Swarm
21
21
  * Multi-Modal Streaming (Text & Audio)
22
22
  * Conversational Memory & History
23
- * Built-in Internet Search
23
+ * Internet Search
24
24
  * Intelligent Routing
25
25
  * Business Alignment
26
26
  * Extensible Tooling
@@ -36,7 +36,7 @@ Build your AI business in three lines of code!
36
36
  * Seamless text and audio streaming with real-time multi-modal processing
37
37
  * Configurable audio voice characteristics via prompting
38
38
  * Persistent memory that preserves context across all agent interactions
39
- * Quick built-in Internet search to answer users' queries
39
+ * Quick Internet search to answer users' queries
40
40
  * Streamlined message history for all agent interactions
41
41
  * Intelligent query routing to agents with optimal domain expertise or your own custom routing
42
42
  * Unified value system ensuring brand-aligned agent responses
@@ -58,7 +58,6 @@ Build your AI business in three lines of code!
58
58
  * [gpt-4o-mini](https://platform.openai.com/docs/models/gpt-4o-mini)
59
59
  * [gpt-4o-mini-tts](https://platform.openai.com/docs/models/gpt-4o-mini-tts)
60
60
  * [gpt-4o-mini-transcribe](https://platform.openai.com/docs/models/gpt-4o-mini-transcribe)
61
- * [gpt-4o-mini-search-preview](https://platform.openai.com/docs/models/gpt-4o-mini-search-preview)
62
61
 
63
62
  ## Installation
64
63
 
@@ -329,21 +328,6 @@ API Calls:
329
328
 
330
329
  * If the Zep user and session isn't created it creates them for 2 API calls (POST)
331
330
 
332
- ### Internet Search
333
-
334
- This mode is great for text output where the default response from OpenAI is enough.
335
-
336
- It is not suitable for audio as the OpenAI search results contain links and markdown.
337
-
338
- Also it may not call tools when they should be called as it thinks the search results answer the user query.
339
-
340
- It is much faster than calling `search_internet` from `sakit` as it saves 2 API calls.
341
-
342
- ```python
343
- async for response in solana_agent.process("user123", "What is the latest news on Canada?", internet_search=True):
344
- print(response, end="")
345
- ```
346
-
347
331
  ### Customize Speech
348
332
 
349
333
  This is an audio to audio example using the `audio_instructions` parameter.
@@ -369,10 +353,10 @@ Tools can be used from plugins like Solana Agent Kit (sakit) or via inline tools
369
353
 
370
354
  * Agents can only call one tool per response
371
355
  * Agents choose the best tool for the job
372
- * Tools do not use OpenAI function calling
373
- * Tools are async functions
356
+ * Solana Agent doesn't use OpenAI function calling (tools) as they don't support async functions
357
+ * Solana Agent tools are async functions
374
358
 
375
- ### Plugin Tool Example
359
+ ### Internet Search (Plugin Example)
376
360
 
377
361
  `pip install sakit`
378
362
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "solana-agent"
3
- version = "23.0.7"
3
+ version = "24.0.0"
4
4
  description = "Agentic IQ"
5
5
  authors = ["Bevan Hunt <bevan@bevanhunt.com>"]
6
6
  license = "MIT"
@@ -23,7 +23,7 @@ python_paths = [".", "tests"]
23
23
 
24
24
  [tool.poetry.dependencies]
25
25
  python = ">=3.12,<4.0"
26
- openai = "^1.70.0"
26
+ openai = "^1.71.0"
27
27
  pydantic = "^2.11.2"
28
28
  pymongo = "^4.11.3"
29
29
  zep-cloud = "^2.9.0"
@@ -20,7 +20,6 @@ class OpenAIAdapter(LLMProvider):
20
20
  self.client = OpenAI(api_key=api_key)
21
21
  self.parse_model = "gpt-4o-mini"
22
22
  self.text_model = "gpt-4o-mini"
23
- self.internet_search_model = "gpt-4o-mini-search-preview"
24
23
  self.transcription_model = "gpt-4o-mini-transcribe"
25
24
  self.tts_model = "gpt-4o-mini-tts"
26
25
 
@@ -104,7 +103,6 @@ class OpenAIAdapter(LLMProvider):
104
103
  self,
105
104
  prompt: str,
106
105
  system_prompt: str = "",
107
- internet_search: bool = False,
108
106
  ) -> AsyncGenerator[str, None]: # pragma: no cover
109
107
  """Generate text from OpenAI models."""
110
108
  messages = []
@@ -114,15 +112,11 @@ class OpenAIAdapter(LLMProvider):
114
112
 
115
113
  messages.append({"role": "user", "content": prompt})
116
114
 
117
- model = self.text_model
118
- if internet_search:
119
- model = self.internet_search_model
120
-
121
115
  # Prepare request parameters
122
116
  request_params = {
123
117
  "messages": messages,
124
118
  "stream": True,
125
- "model": model,
119
+ "model": self.text_model,
126
120
  }
127
121
  try:
128
122
  response = self.client.chat.completions.create(**request_params)
@@ -56,7 +56,6 @@ class SolanaAgent(SolanaAgentInterface):
56
56
  "flac", "mp3", "mp4", "mpeg", "mpga", "m4a", "ogg", "wav", "webm"
57
57
  ] = "mp4",
58
58
  router: Optional[RoutingInterface] = None,
59
- internet_search: bool = False,
60
59
  ) -> AsyncGenerator[Union[str, bytes], None]: # pragma: no cover
61
60
  """Process a user message and return the response stream.
62
61
 
@@ -70,7 +69,6 @@ class SolanaAgent(SolanaAgentInterface):
70
69
  audio_output_format: Audio output format
71
70
  audio_input_format: Audio input format
72
71
  router: Optional routing service for processing
73
- internet_search: Flag to use OpenAI Internet search
74
72
 
75
73
  Returns:
76
74
  Async generator yielding response chunks (text strings or audio bytes)
@@ -85,7 +83,6 @@ class SolanaAgent(SolanaAgentInterface):
85
83
  audio_input_format=audio_input_format,
86
84
  prompt=prompt,
87
85
  router=router,
88
- internet_search=internet_search,
89
86
  ):
90
87
  yield chunk
91
88
 
@@ -24,7 +24,6 @@ class SolanaAgent(ABC):
24
24
  "flac", "mp3", "mp4", "mpeg", "mpga", "m4a", "ogg", "wav", "webm"
25
25
  ] = "mp4",
26
26
  router: Optional[RoutingInterface] = None,
27
- internet_search: bool = False,
28
27
  ) -> AsyncGenerator[Union[str, bytes], None]:
29
28
  """Process a user message and return the response stream."""
30
29
  pass
@@ -15,7 +15,6 @@ class LLMProvider(ABC):
15
15
  self,
16
16
  prompt: str,
17
17
  system_prompt: str = "",
18
- internet_search: bool = False,
19
18
  ) -> AsyncGenerator[str, None]:
20
19
  """Generate text from the language model."""
21
20
  pass
@@ -34,7 +34,6 @@ class AgentService(ABC):
34
34
  "flac", "mp3", "mp4", "mpeg", "mpga", "m4a", "ogg", "wav", "webm"
35
35
  ] = "mp4",
36
36
  prompt: Optional[str] = None,
37
- internet_search: bool = False,
38
37
  ) -> AsyncGenerator[Union[str, bytes], None]:
39
38
  """Generate a response from an agent."""
40
39
  pass
@@ -20,7 +20,6 @@ class QueryService(ABC):
20
20
  "flac", "mp3", "mp4", "mpeg", "mpga", "m4a", "ogg", "wav", "webm"
21
21
  ] = "mp4",
22
22
  prompt: Optional[str] = None,
23
- internet_search: bool = False,
24
23
  ) -> AsyncGenerator[Union[str, bytes], None]:
25
24
  """Process the user request and generate a response."""
26
25
  pass
@@ -177,7 +177,6 @@ class AgentService(AgentServiceInterface):
177
177
  "flac", "mp3", "mp4", "mpeg", "mpga", "m4a", "ogg", "wav", "webm"
178
178
  ] = "mp4",
179
179
  prompt: Optional[str] = None,
180
- internet_search: bool = False,
181
180
  ) -> AsyncGenerator[Union[str, bytes], None]: # pragma: no cover
182
181
  """Generate a response with support for text/audio input/output."""
183
182
  agent = next((a for a in self.agents if a.name == agent_name), None)
@@ -231,7 +230,6 @@ class AgentService(AgentServiceInterface):
231
230
  async for chunk in self.llm_provider.generate_text(
232
231
  prompt=query_text,
233
232
  system_prompt=tool_calling_system_prompt,
234
- internet_search=internet_search,
235
233
  ):
236
234
  # Check if the chunk is JSON or a tool call
237
235
  if (chunk.strip().startswith("{") or "{\"tool_call\":" in chunk) and not is_json:
@@ -49,7 +49,6 @@ class QueryService(QueryServiceInterface):
49
49
  ] = "mp4",
50
50
  prompt: Optional[str] = None,
51
51
  router: Optional[RoutingServiceInterface] = None,
52
- internet_search: bool = False,
53
52
  ) -> AsyncGenerator[Union[str, bytes], None]: # pragma: no cover
54
53
  """Process the user request with appropriate agent.
55
54
 
@@ -63,7 +62,6 @@ class QueryService(QueryServiceInterface):
63
62
  audio_input_format: Audio input format
64
63
  prompt: Optional prompt for the agent
65
64
  router: Optional routing service for processing
66
- internet_search: Flag to use OpenAI Internet search
67
65
 
68
66
  Yields:
69
67
  Response chunks (text strings or audio bytes)
@@ -122,7 +120,6 @@ class QueryService(QueryServiceInterface):
122
120
  audio_output_format=audio_output_format,
123
121
  audio_instructions=audio_instructions,
124
122
  prompt=prompt,
125
- internet_search=internet_search,
126
123
  ):
127
124
  yield audio_chunk
128
125
 
@@ -141,7 +138,6 @@ class QueryService(QueryServiceInterface):
141
138
  memory_context=memory_context,
142
139
  output_format="text",
143
140
  prompt=prompt,
144
- internet_search=internet_search,
145
141
  ):
146
142
  yield chunk
147
143
  full_text_response += chunk
File without changes