solana-agent 27.5.0__tar.gz → 28.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.
- {solana_agent-27.5.0 → solana_agent-28.0.0}/PKG-INFO +26 -50
- {solana_agent-27.5.0 → solana_agent-28.0.0}/README.md +25 -49
- {solana_agent-27.5.0 → solana_agent-28.0.0}/pyproject.toml +1 -1
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/adapters/openai_adapter.py +17 -21
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/factories/agent_factory.py +12 -83
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/interfaces/providers/llm.py +1 -1
- solana_agent-28.0.0/solana_agent/services/agent.py +952 -0
- solana_agent-27.5.0/solana_agent/services/agent.py +0 -838
- {solana_agent-27.5.0 → solana_agent-28.0.0}/LICENSE +0 -0
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/__init__.py +0 -0
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/adapters/__init__.py +0 -0
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/adapters/mongodb_adapter.py +0 -0
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/adapters/pinecone_adapter.py +0 -0
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/client/__init__.py +0 -0
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/client/solana_agent.py +0 -0
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/domains/__init__.py +0 -0
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/domains/agent.py +0 -0
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/domains/routing.py +0 -0
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/factories/__init__.py +0 -0
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/guardrails/pii.py +0 -0
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/interfaces/__init__.py +0 -0
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/interfaces/client/client.py +0 -0
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/interfaces/guardrails/guardrails.py +0 -0
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/interfaces/plugins/plugins.py +0 -0
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/interfaces/providers/data_storage.py +0 -0
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/interfaces/providers/memory.py +0 -0
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/interfaces/providers/vector_storage.py +0 -0
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/interfaces/services/agent.py +0 -0
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/interfaces/services/knowledge_base.py +0 -0
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/interfaces/services/query.py +0 -0
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/interfaces/services/routing.py +0 -0
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/plugins/__init__.py +0 -0
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/plugins/manager.py +0 -0
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/plugins/registry.py +0 -0
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/plugins/tools/__init__.py +0 -0
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/plugins/tools/auto_tool.py +0 -0
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/repositories/__init__.py +0 -0
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/repositories/memory.py +0 -0
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/services/__init__.py +0 -0
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/services/knowledge_base.py +0 -0
- {solana_agent-27.5.0 → solana_agent-28.0.0}/solana_agent/services/query.py +0 -0
- {solana_agent-27.5.0 → solana_agent-28.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:
|
3
|
+
Version: 28.0.0
|
4
4
|
Summary: AI Agents for Solana
|
5
5
|
License: MIT
|
6
6
|
Keywords: solana,solana ai,solana agent,ai,ai agent,ai agents
|
@@ -59,6 +59,7 @@ Build your AI agents in three lines of code!
|
|
59
59
|
* Intelligent Routing
|
60
60
|
* Business Alignment
|
61
61
|
* Extensible Tooling
|
62
|
+
* Automatic Tool Workflows
|
62
63
|
* Knowledge Base
|
63
64
|
* MCP Support
|
64
65
|
* Guardrails
|
@@ -84,26 +85,25 @@ Build your AI agents in three lines of code!
|
|
84
85
|
* Assigned tools are utilized by agents automatically and effectively
|
85
86
|
* Integrated Knowledge Base with semantic search and automatic PDF chunking
|
86
87
|
* Input and output guardrails for content filtering, safety, and data sanitization
|
88
|
+
* Automatic sequential tool workflows allowing agents to chain multiple tools
|
87
89
|
|
88
90
|
## Stack
|
89
91
|
|
90
92
|
### Tech
|
91
93
|
|
92
94
|
* [Python](https://python.org) - Programming Language
|
93
|
-
* [OpenAI](https://openai.com)
|
95
|
+
* [OpenAI](https://openai.com) - AI Provider
|
94
96
|
* [MongoDB](https://mongodb.com) - Conversational History (optional)
|
95
97
|
* [Zep Cloud](https://getzep.com) - Conversational Memory (optional)
|
96
98
|
* [Pinecone](https://pinecone.io) - Knowledge Base (optional)
|
97
99
|
|
98
|
-
###
|
100
|
+
### AI Models Used
|
99
101
|
|
100
|
-
* [gpt-4.1
|
102
|
+
* [gpt-4.1](https://platform.openai.com/docs/models/gpt-4.1) (agent)
|
101
103
|
* [gpt-4.1-nano](https://platform.openai.com/docs/models/gpt-4.1-nano) (router)
|
102
104
|
* [text-embedding-3-large](https://platform.openai.com/docs/models/text-embedding-3-large) or [text-embedding-3-small](https://platform.openai.com/docs/models/text-embedding-3-small) (embedding)
|
103
105
|
* [tts-1](https://platform.openai.com/docs/models/tts-1) (audio TTS)
|
104
106
|
* [gpt-4o-mini-transcribe](https://platform.openai.com/docs/models/gpt-4o-mini-transcribe) (audio transcription)
|
105
|
-
* [gemini-2.5-flash-preview](https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview) (optional)
|
106
|
-
* [grok-3-mini-fast-beta](https://docs.x.ai/docs/models#models-and-pricing) (optional)
|
107
107
|
|
108
108
|
## Installation
|
109
109
|
|
@@ -113,13 +113,13 @@ You can install Solana Agent using pip:
|
|
113
113
|
|
114
114
|
## Flows
|
115
115
|
|
116
|
-
In both flows of single and multiple agents - it is one user query to one agent using one
|
116
|
+
In both flows of single and multiple agents - it is one user query to one agent using one or many tools (if needed).
|
117
117
|
|
118
|
-
An agent can have multiple tools and will choose the best
|
118
|
+
An agent can have multiple tools and will choose the best ones to fulfill the user's query.
|
119
119
|
|
120
|
-
Routing is determined by optimal domain expertise of the agent for the user query.
|
120
|
+
Routing is determined by optimal domain expertise of the agent for the user's query.
|
121
121
|
|
122
|
-
When the agent uses
|
122
|
+
When the agent uses tools it feeds the tools output back to itself to generate the final response.
|
123
123
|
|
124
124
|
This is important as tools generally output unstructured and unformatted data that the agent needs to prepare for the user.
|
125
125
|
|
@@ -128,13 +128,13 @@ Keep this in mind while designing your agentic systems using Solana Agent.
|
|
128
128
|
```ascii
|
129
129
|
Single Agent
|
130
130
|
|
131
|
-
┌────────┐ ┌─────────┐
|
132
|
-
│ │ │ │ │
|
133
|
-
│ │ │ │ │
|
134
|
-
│ User │◄──────►│ Agent │◄──────►│
|
135
|
-
│ │ │ │ │
|
136
|
-
│ │ │ │ │
|
137
|
-
└────────┘ └─────────┘
|
131
|
+
┌────────┐ ┌─────────┐ ┌────────-┐
|
132
|
+
│ │ │ │ │ │
|
133
|
+
│ │ │ │ │ │
|
134
|
+
│ User │◄──────►│ Agent │◄──────►│ Tools │
|
135
|
+
│ │ │ │ │ │
|
136
|
+
│ │ │ │ │ │
|
137
|
+
└────────┘ └─────────┘ └────────-┘
|
138
138
|
|
139
139
|
|
140
140
|
|
@@ -142,13 +142,13 @@ Keep this in mind while designing your agentic systems using Solana Agent.
|
|
142
142
|
|
143
143
|
Multiple Agents
|
144
144
|
|
145
|
-
┌────────┐ ┌──────────┐ ┌─────────┐
|
146
|
-
│ │ │ │ │ │ │
|
147
|
-
│ │ │ │ │ │ │
|
148
|
-
┌───►│ User ├───────►│ Router ├───────►│ Agent │◄──────►│
|
149
|
-
│ │ │ │ │ │ │ │
|
150
|
-
│ │ │ │ │ │ │ │
|
151
|
-
│ └────────┘ └──────────┘ └────┬────┘
|
145
|
+
┌────────┐ ┌──────────┐ ┌─────────┐ ┌────────-┐
|
146
|
+
│ │ │ │ │ │ │ │
|
147
|
+
│ │ │ │ │ │ │ │
|
148
|
+
┌───►│ User ├───────►│ Router ├───────►│ Agent │◄──────►│ Tools │
|
149
|
+
│ │ │ │ │ │ │ │ │
|
150
|
+
│ │ │ │ │ │ │ │ │
|
151
|
+
│ └────────┘ └──────────┘ └────┬────┘ └────────-┘
|
152
152
|
│ │
|
153
153
|
│ │
|
154
154
|
│ │
|
@@ -319,30 +319,6 @@ config = {
|
|
319
319
|
}
|
320
320
|
```
|
321
321
|
|
322
|
-
### Gemini
|
323
|
-
|
324
|
-
This allows Gemini to replace OpenAI for agent and router.
|
325
|
-
|
326
|
-
```python
|
327
|
-
config = {
|
328
|
-
"gemini": {
|
329
|
-
"api_key": "your-gemini-api-key",
|
330
|
-
},
|
331
|
-
}
|
332
|
-
```
|
333
|
-
|
334
|
-
### Grok
|
335
|
-
|
336
|
-
This allows Grok to replace OpenAI (or Gemini) for agent.
|
337
|
-
|
338
|
-
```python
|
339
|
-
config = {
|
340
|
-
"grok": {
|
341
|
-
"api_key": "your-grok-api-key",
|
342
|
-
},
|
343
|
-
}
|
344
|
-
```
|
345
|
-
|
346
322
|
### Knowledge Base
|
347
323
|
|
348
324
|
The Knowledge Base (KB) is meant to store text values and/or small PDFs.
|
@@ -533,8 +509,8 @@ class MyOutputGuardrail(OutputGuardrail):
|
|
533
509
|
|
534
510
|
Tools can be used from plugins like Solana Agent Kit (sakit) or via inline tools. Tools available via plugins integrate automatically with Solana Agent.
|
535
511
|
|
536
|
-
* Agents can
|
537
|
-
* Agents choose the best
|
512
|
+
* Agents can use multiple tools per response and should apply the right sequential order (like send an email to bob@bob.com with the latest news on Solana)
|
513
|
+
* Agents choose the best tools for the job
|
538
514
|
* Solana Agent doesn't use OpenAI function calling (tools) as they don't support async functions
|
539
515
|
* Solana Agent tools are async functions
|
540
516
|
|
@@ -28,6 +28,7 @@ Build your AI agents in three lines of code!
|
|
28
28
|
* Intelligent Routing
|
29
29
|
* Business Alignment
|
30
30
|
* Extensible Tooling
|
31
|
+
* Automatic Tool Workflows
|
31
32
|
* Knowledge Base
|
32
33
|
* MCP Support
|
33
34
|
* Guardrails
|
@@ -53,26 +54,25 @@ Build your AI agents in three lines of code!
|
|
53
54
|
* Assigned tools are utilized by agents automatically and effectively
|
54
55
|
* Integrated Knowledge Base with semantic search and automatic PDF chunking
|
55
56
|
* Input and output guardrails for content filtering, safety, and data sanitization
|
57
|
+
* Automatic sequential tool workflows allowing agents to chain multiple tools
|
56
58
|
|
57
59
|
## Stack
|
58
60
|
|
59
61
|
### Tech
|
60
62
|
|
61
63
|
* [Python](https://python.org) - Programming Language
|
62
|
-
* [OpenAI](https://openai.com)
|
64
|
+
* [OpenAI](https://openai.com) - AI Provider
|
63
65
|
* [MongoDB](https://mongodb.com) - Conversational History (optional)
|
64
66
|
* [Zep Cloud](https://getzep.com) - Conversational Memory (optional)
|
65
67
|
* [Pinecone](https://pinecone.io) - Knowledge Base (optional)
|
66
68
|
|
67
|
-
###
|
69
|
+
### AI Models Used
|
68
70
|
|
69
|
-
* [gpt-4.1
|
71
|
+
* [gpt-4.1](https://platform.openai.com/docs/models/gpt-4.1) (agent)
|
70
72
|
* [gpt-4.1-nano](https://platform.openai.com/docs/models/gpt-4.1-nano) (router)
|
71
73
|
* [text-embedding-3-large](https://platform.openai.com/docs/models/text-embedding-3-large) or [text-embedding-3-small](https://platform.openai.com/docs/models/text-embedding-3-small) (embedding)
|
72
74
|
* [tts-1](https://platform.openai.com/docs/models/tts-1) (audio TTS)
|
73
75
|
* [gpt-4o-mini-transcribe](https://platform.openai.com/docs/models/gpt-4o-mini-transcribe) (audio transcription)
|
74
|
-
* [gemini-2.5-flash-preview](https://ai.google.dev/gemini-api/docs/models#gemini-2.5-flash-preview) (optional)
|
75
|
-
* [grok-3-mini-fast-beta](https://docs.x.ai/docs/models#models-and-pricing) (optional)
|
76
76
|
|
77
77
|
## Installation
|
78
78
|
|
@@ -82,13 +82,13 @@ You can install Solana Agent using pip:
|
|
82
82
|
|
83
83
|
## Flows
|
84
84
|
|
85
|
-
In both flows of single and multiple agents - it is one user query to one agent using one
|
85
|
+
In both flows of single and multiple agents - it is one user query to one agent using one or many tools (if needed).
|
86
86
|
|
87
|
-
An agent can have multiple tools and will choose the best
|
87
|
+
An agent can have multiple tools and will choose the best ones to fulfill the user's query.
|
88
88
|
|
89
|
-
Routing is determined by optimal domain expertise of the agent for the user query.
|
89
|
+
Routing is determined by optimal domain expertise of the agent for the user's query.
|
90
90
|
|
91
|
-
When the agent uses
|
91
|
+
When the agent uses tools it feeds the tools output back to itself to generate the final response.
|
92
92
|
|
93
93
|
This is important as tools generally output unstructured and unformatted data that the agent needs to prepare for the user.
|
94
94
|
|
@@ -97,13 +97,13 @@ Keep this in mind while designing your agentic systems using Solana Agent.
|
|
97
97
|
```ascii
|
98
98
|
Single Agent
|
99
99
|
|
100
|
-
┌────────┐ ┌─────────┐
|
101
|
-
│ │ │ │ │
|
102
|
-
│ │ │ │ │
|
103
|
-
│ User │◄──────►│ Agent │◄──────►│
|
104
|
-
│ │ │ │ │
|
105
|
-
│ │ │ │ │
|
106
|
-
└────────┘ └─────────┘
|
100
|
+
┌────────┐ ┌─────────┐ ┌────────-┐
|
101
|
+
│ │ │ │ │ │
|
102
|
+
│ │ │ │ │ │
|
103
|
+
│ User │◄──────►│ Agent │◄──────►│ Tools │
|
104
|
+
│ │ │ │ │ │
|
105
|
+
│ │ │ │ │ │
|
106
|
+
└────────┘ └─────────┘ └────────-┘
|
107
107
|
|
108
108
|
|
109
109
|
|
@@ -111,13 +111,13 @@ Keep this in mind while designing your agentic systems using Solana Agent.
|
|
111
111
|
|
112
112
|
Multiple Agents
|
113
113
|
|
114
|
-
┌────────┐ ┌──────────┐ ┌─────────┐
|
115
|
-
│ │ │ │ │ │ │
|
116
|
-
│ │ │ │ │ │ │
|
117
|
-
┌───►│ User ├───────►│ Router ├───────►│ Agent │◄──────►│
|
118
|
-
│ │ │ │ │ │ │ │
|
119
|
-
│ │ │ │ │ │ │ │
|
120
|
-
│ └────────┘ └──────────┘ └────┬────┘
|
114
|
+
┌────────┐ ┌──────────┐ ┌─────────┐ ┌────────-┐
|
115
|
+
│ │ │ │ │ │ │ │
|
116
|
+
│ │ │ │ │ │ │ │
|
117
|
+
┌───►│ User ├───────►│ Router ├───────►│ Agent │◄──────►│ Tools │
|
118
|
+
│ │ │ │ │ │ │ │ │
|
119
|
+
│ │ │ │ │ │ │ │ │
|
120
|
+
│ └────────┘ └──────────┘ └────┬────┘ └────────-┘
|
121
121
|
│ │
|
122
122
|
│ │
|
123
123
|
│ │
|
@@ -288,30 +288,6 @@ config = {
|
|
288
288
|
}
|
289
289
|
```
|
290
290
|
|
291
|
-
### Gemini
|
292
|
-
|
293
|
-
This allows Gemini to replace OpenAI for agent and router.
|
294
|
-
|
295
|
-
```python
|
296
|
-
config = {
|
297
|
-
"gemini": {
|
298
|
-
"api_key": "your-gemini-api-key",
|
299
|
-
},
|
300
|
-
}
|
301
|
-
```
|
302
|
-
|
303
|
-
### Grok
|
304
|
-
|
305
|
-
This allows Grok to replace OpenAI (or Gemini) for agent.
|
306
|
-
|
307
|
-
```python
|
308
|
-
config = {
|
309
|
-
"grok": {
|
310
|
-
"api_key": "your-grok-api-key",
|
311
|
-
},
|
312
|
-
}
|
313
|
-
```
|
314
|
-
|
315
291
|
### Knowledge Base
|
316
292
|
|
317
293
|
The Knowledge Base (KB) is meant to store text values and/or small PDFs.
|
@@ -502,8 +478,8 @@ class MyOutputGuardrail(OutputGuardrail):
|
|
502
478
|
|
503
479
|
Tools can be used from plugins like Solana Agent Kit (sakit) or via inline tools. Tools available via plugins integrate automatically with Solana Agent.
|
504
480
|
|
505
|
-
* Agents can
|
506
|
-
* Agents choose the best
|
481
|
+
* Agents can use multiple tools per response and should apply the right sequential order (like send an email to bob@bob.com with the latest news on Solana)
|
482
|
+
* Agents choose the best tools for the job
|
507
483
|
* Solana Agent doesn't use OpenAI function calling (tools) as they don't support async functions
|
508
484
|
* Solana Agent tools are async functions
|
509
485
|
|
@@ -15,7 +15,7 @@ from solana_agent.interfaces.providers.llm import LLMProvider
|
|
15
15
|
|
16
16
|
T = TypeVar("T", bound=BaseModel)
|
17
17
|
|
18
|
-
DEFAULT_CHAT_MODEL = "gpt-4.1
|
18
|
+
DEFAULT_CHAT_MODEL = "gpt-4.1"
|
19
19
|
DEFAULT_PARSE_MODEL = "gpt-4.1-nano"
|
20
20
|
DEFAULT_EMBEDDING_MODEL = "text-embedding-3-large"
|
21
21
|
DEFAULT_EMBEDDING_DIMENSIONS = 3072
|
@@ -129,45 +129,41 @@ class OpenAIAdapter(LLMProvider):
|
|
129
129
|
api_key: Optional[str] = None,
|
130
130
|
base_url: Optional[str] = None,
|
131
131
|
model: Optional[str] = None,
|
132
|
-
) ->
|
133
|
-
"""Generate text from OpenAI models."""
|
132
|
+
) -> str: # pragma: no cover
|
133
|
+
"""Generate text from OpenAI models as a single string."""
|
134
134
|
messages = []
|
135
|
-
|
136
135
|
if system_prompt:
|
137
136
|
messages.append({"role": "system", "content": system_prompt})
|
138
|
-
|
139
137
|
messages.append({"role": "user", "content": prompt})
|
140
138
|
|
141
|
-
# Prepare request parameters
|
139
|
+
# Prepare request parameters - stream is always False now
|
142
140
|
request_params = {
|
143
141
|
"messages": messages,
|
144
|
-
"stream":
|
145
|
-
"model": self.text_model,
|
142
|
+
"stream": False, # Hardcoded to False
|
143
|
+
"model": model or self.text_model,
|
146
144
|
}
|
147
145
|
|
146
|
+
# Determine client based on provided api_key/base_url
|
148
147
|
if api_key and base_url:
|
149
148
|
client = AsyncOpenAI(api_key=api_key, base_url=base_url)
|
150
149
|
else:
|
151
150
|
client = self.client
|
152
151
|
|
153
|
-
if model:
|
154
|
-
request_params["model"] = model
|
155
|
-
|
156
152
|
try:
|
153
|
+
# Make the non-streaming API call
|
157
154
|
response = await client.chat.completions.create(**request_params)
|
158
155
|
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
156
|
+
# Handle non-streaming response
|
157
|
+
if response.choices and response.choices[0].message.content:
|
158
|
+
full_text = response.choices[0].message.content
|
159
|
+
return full_text # Return the complete string
|
160
|
+
else:
|
161
|
+
print("Received non-streaming response with no content.")
|
162
|
+
return "" # Return empty string if no content
|
164
163
|
|
165
164
|
except Exception as e:
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
print(traceback.format_exc())
|
170
|
-
yield f"I apologize, but I encountered an error: {str(e)}"
|
165
|
+
# Log the error and return an error message string
|
166
|
+
print(f"Error in generate_text: {e}")
|
171
167
|
|
172
168
|
async def parse_structured_output(
|
173
169
|
self,
|
@@ -130,90 +130,19 @@ class SolanaAgentFactory:
|
|
130
130
|
f"Loaded {len(input_guardrails)} input guardrails and {len(output_guardrails)} output guardrails."
|
131
131
|
)
|
132
132
|
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
llm_provider=llm_adapter,
|
141
|
-
business_mission=business_mission,
|
142
|
-
config=config,
|
143
|
-
api_key=config["gemini"]["api_key"],
|
144
|
-
base_url="https://generativelanguage.googleapis.com/v1beta/openai/",
|
145
|
-
model="gemini-2.5-flash-preview-04-17",
|
146
|
-
output_guardrails=output_guardrails,
|
147
|
-
)
|
148
|
-
|
149
|
-
# Create routing service
|
150
|
-
routing_service = RoutingService(
|
151
|
-
llm_provider=llm_adapter,
|
152
|
-
agent_service=agent_service,
|
153
|
-
api_key=config["gemini"]["api_key"],
|
154
|
-
base_url="https://generativelanguage.googleapis.com/v1beta/openai/",
|
155
|
-
model="gemini-2.5-flash-preview-04-17",
|
156
|
-
)
|
157
|
-
|
158
|
-
elif (
|
159
|
-
"gemini" in config
|
160
|
-
and "api_key" in config["gemini"]
|
161
|
-
and "grok" in config
|
162
|
-
and "api_key" in config["grok"]
|
163
|
-
):
|
164
|
-
# Create primary services
|
165
|
-
agent_service = AgentService(
|
166
|
-
llm_provider=llm_adapter,
|
167
|
-
business_mission=business_mission,
|
168
|
-
config=config,
|
169
|
-
api_key=config["grok"]["api_key"],
|
170
|
-
base_url="https://api.x.ai/v1",
|
171
|
-
model="grok-3-mini-fast-beta",
|
172
|
-
output_guardrails=output_guardrails,
|
173
|
-
)
|
174
|
-
# Create routing service
|
175
|
-
routing_service = RoutingService(
|
176
|
-
llm_provider=llm_adapter,
|
177
|
-
agent_service=agent_service,
|
178
|
-
api_key=config["gemini"]["api_key"],
|
179
|
-
base_url="https://generativelanguage.googleapis.com/v1beta/openai/",
|
180
|
-
model="gemini-2.5-flash-preview-04-17",
|
181
|
-
)
|
182
|
-
|
183
|
-
elif (
|
184
|
-
"grok" in config and "api_key" in config["grok"] and "gemini" not in config
|
185
|
-
):
|
186
|
-
# Create primary services
|
187
|
-
agent_service = AgentService(
|
188
|
-
llm_provider=llm_adapter,
|
189
|
-
business_mission=business_mission,
|
190
|
-
config=config,
|
191
|
-
api_key=config["grok"]["api_key"],
|
192
|
-
base_url="https://api.x.ai/v1",
|
193
|
-
model="grok-3-mini-fast-beta",
|
194
|
-
output_guardrails=output_guardrails,
|
195
|
-
)
|
196
|
-
|
197
|
-
# Create routing service
|
198
|
-
routing_service = RoutingService(
|
199
|
-
llm_provider=llm_adapter,
|
200
|
-
agent_service=agent_service,
|
201
|
-
)
|
202
|
-
|
203
|
-
else:
|
204
|
-
# Create primary services
|
205
|
-
agent_service = AgentService(
|
206
|
-
llm_provider=llm_adapter,
|
207
|
-
business_mission=business_mission,
|
208
|
-
config=config,
|
209
|
-
output_guardrails=output_guardrails,
|
210
|
-
)
|
133
|
+
# Create primary services
|
134
|
+
agent_service = AgentService(
|
135
|
+
llm_provider=llm_adapter,
|
136
|
+
business_mission=business_mission,
|
137
|
+
config=config,
|
138
|
+
output_guardrails=output_guardrails,
|
139
|
+
)
|
211
140
|
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
141
|
+
# Create routing service
|
142
|
+
routing_service = RoutingService(
|
143
|
+
llm_provider=llm_adapter,
|
144
|
+
agent_service=agent_service,
|
145
|
+
)
|
217
146
|
|
218
147
|
# Debug the agent service tool registry
|
219
148
|
print(
|