Skip to content

Commit 4415ecc

Browse files
deploy: 67ac756
1 parent 697fe7f commit 4415ecc

File tree

8 files changed

+83
-5
lines changed

8 files changed

+83
-5
lines changed

.doctrees/api/index.doctree

2.31 KB
Binary file not shown.

.doctrees/environment.pickle

660 Bytes
Binary file not shown.

.doctrees/index.doctree

2.03 KB
Binary file not shown.

_modules/solana_agent/client/solana_agent.html

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,9 @@ <h1>Source code for solana_agent.client.solana_agent</h1><div class="highlight">
7878

7979
<span class="kn">import</span><span class="w"> </span><span class="nn">json</span>
8080
<span class="kn">import</span><span class="w"> </span><span class="nn">importlib.util</span>
81-
<span class="kn">from</span><span class="w"> </span><span class="nn">typing</span><span class="w"> </span><span class="kn">import</span> <span class="n">AsyncGenerator</span><span class="p">,</span> <span class="n">Dict</span><span class="p">,</span> <span class="n">Any</span><span class="p">,</span> <span class="n">List</span><span class="p">,</span> <span class="n">Literal</span><span class="p">,</span> <span class="n">Optional</span><span class="p">,</span> <span class="n">Union</span>
81+
<span class="kn">from</span><span class="w"> </span><span class="nn">typing</span><span class="w"> </span><span class="kn">import</span> <span class="n">AsyncGenerator</span><span class="p">,</span> <span class="n">Dict</span><span class="p">,</span> <span class="n">Any</span><span class="p">,</span> <span class="n">List</span><span class="p">,</span> <span class="n">Literal</span><span class="p">,</span> <span class="n">Optional</span><span class="p">,</span> <span class="n">Type</span><span class="p">,</span> <span class="n">Union</span>
82+
83+
<span class="kn">from</span><span class="w"> </span><span class="nn">pydantic</span><span class="w"> </span><span class="kn">import</span> <span class="n">BaseModel</span>
8284

8385
<span class="kn">from</span><span class="w"> </span><span class="nn">solana_agent.factories.agent_factory</span><span class="w"> </span><span class="kn">import</span> <span class="n">SolanaAgentFactory</span>
8486
<span class="kn">from</span><span class="w"> </span><span class="nn">solana_agent.interfaces.client.client</span><span class="w"> </span><span class="kn">import</span> <span class="n">SolanaAgent</span> <span class="k">as</span> <span class="n">SolanaAgentInterface</span>
@@ -144,7 +146,8 @@ <h1>Source code for solana_agent.client.solana_agent</h1><div class="highlight">
144146
<span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;mp4&quot;</span><span class="p">,</span>
145147
<span class="n">router</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">RoutingInterface</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
146148
<span class="n">images</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">]]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
147-
<span class="p">)</span> <span class="o">-&gt;</span> <span class="n">AsyncGenerator</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">],</span> <span class="kc">None</span><span class="p">]:</span> <span class="c1"># pragma: no cover</span>
149+
<span class="n">output_model</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Type</span><span class="p">[</span><span class="n">BaseModel</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
150+
<span class="p">)</span> <span class="o">-&gt;</span> <span class="n">AsyncGenerator</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">,</span> <span class="n">BaseModel</span><span class="p">],</span> <span class="kc">None</span><span class="p">]:</span> <span class="c1"># pragma: no cover</span>
148151
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Process a user message (text or audio) and optional images, returning the response stream.</span>
149152

150153
<span class="sd"> Args:</span>
@@ -158,6 +161,7 @@ <h1>Source code for solana_agent.client.solana_agent</h1><div class="highlight">
158161
<span class="sd"> audio_input_format: Audio input format</span>
159162
<span class="sd"> router: Optional routing service for processing</span>
160163
<span class="sd"> images: Optional list of image URLs (str) or image bytes.</span>
164+
<span class="sd"> output_model: Optional Pydantic model for structured output</span>
161165

162166
<span class="sd"> Returns:</span>
163167
<span class="sd"> Async generator yielding response chunks (text strings or audio bytes)</span>
@@ -173,6 +177,7 @@ <h1>Source code for solana_agent.client.solana_agent</h1><div class="highlight">
173177
<span class="n">audio_input_format</span><span class="o">=</span><span class="n">audio_input_format</span><span class="p">,</span>
174178
<span class="n">prompt</span><span class="o">=</span><span class="n">prompt</span><span class="p">,</span>
175179
<span class="n">router</span><span class="o">=</span><span class="n">router</span><span class="p">,</span>
180+
<span class="n">output_model</span><span class="o">=</span><span class="n">output_model</span><span class="p">,</span>
176181
<span class="p">):</span>
177182
<span class="k">yield</span> <span class="n">chunk</span></div>
178183

_sources/index.rst.txt

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,40 @@ Image/Text Streaming
234234
print(response, end="")
235235
236236
237+
Structured Outputs
238+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
239+
240+
.. code-block:: python
241+
242+
from solana_agent import SolanaAgent
243+
244+
config = {
245+
"openai": {
246+
"api_key": "your-openai-api-key",
247+
},
248+
"agents": [
249+
{
250+
"name": "researcher",
251+
"instructions": "You are a research expert.",
252+
"specialization": "Researcher",
253+
}
254+
],
255+
}
256+
257+
solana_agent = SolanaAgent(config=config)
258+
259+
class ResearchProposal(BaseModel):
260+
title: str
261+
abstract: str
262+
key_points: list[str]
263+
264+
full_response = None
265+
async for response in solana_agent.process("user123", "Research the life of Ben Franklin - the founding Father.", output_model=ResearchProposal):
266+
full_response = response
267+
268+
print(full_response.model_dump())
269+
270+
237271
Command Line Interface (CLI)
238272
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
239273

@@ -474,6 +508,8 @@ Guardrails - Optional
474508

475509
Guardrails allow you to process and potentially modify user input before it reaches the agent (Input Guardrails) and agent output before it's sent back to the user (Output Guardrails). This is useful for implementing safety checks, content moderation, data sanitization, or custom transformations.
476510

511+
Guardrails don't apply to structured outputs.
512+
477513
Solana Agent provides a built-in PII scrubber based on scrubadub.
478514

479515
.. code-block:: python
@@ -515,6 +551,8 @@ Solana Agent provides a built-in PII scrubber based on scrubadub.
515551
Example Custom Guardrails - Optional
516552
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
517553

554+
Guardrails don't apply to structured outputs.
555+
518556
.. code-block:: python
519557
520558
from solana_agent import InputGuardrail, OutputGuardrail

api/index.html

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ <h1>API Reference<a class="headerlink" href="#api-reference" title="Link to this
169169
</dl>
170170
<dl class="py method">
171171
<dt class="sig sig-object py" id="solana_agent.client.solana_agent.SolanaAgent.process">
172-
<em class="property"><span class="k"><span class="pre">async</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">process</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user_id</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">message</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prompt</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">output_format</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'text'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">audio_voice</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'nova'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">audio_instructions</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'You</span> <span class="pre">speak</span> <span class="pre">in</span> <span class="pre">a</span> <span class="pre">friendly</span> <span class="pre">and</span> <span class="pre">helpful</span> <span class="pre">manner.'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">audio_output_format</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'aac'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">audio_input_format</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'mp4'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">router</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">images</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/solana_agent/client/solana_agent.html#SolanaAgent.process"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#solana_agent.client.solana_agent.SolanaAgent.process" title="Link to this definition"></a></dt>
172+
<em class="property"><span class="k"><span class="pre">async</span></span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">process</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">user_id</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">message</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">prompt</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">output_format</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'text'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">audio_voice</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'nova'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">audio_instructions</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'You</span> <span class="pre">speak</span> <span class="pre">in</span> <span class="pre">a</span> <span class="pre">friendly</span> <span class="pre">and</span> <span class="pre">helpful</span> <span class="pre">manner.'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">audio_output_format</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'aac'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">audio_input_format</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'mp4'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">router</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">images</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">output_model</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/solana_agent/client/solana_agent.html#SolanaAgent.process"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#solana_agent.client.solana_agent.SolanaAgent.process" title="Link to this definition"></a></dt>
173173
<dd><p>Process a user message (text or audio) and optional images, returning the response stream.</p>
174174
<dl class="field-list simple">
175175
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
@@ -184,13 +184,14 @@ <h1>API Reference<a class="headerlink" href="#api-reference" title="Link to this
184184
<li><p><strong>audio_input_format</strong> (<em>Literal</em><em>[</em><em>'flac'</em><em>, </em><em>'mp3'</em><em>, </em><em>'mp4'</em><em>, </em><em>'mpeg'</em><em>, </em><em>'mpga'</em><em>, </em><em>'m4a'</em><em>, </em><em>'ogg'</em><em>, </em><em>'wav'</em><em>, </em><em>'webm'</em><em>]</em>) – Audio input format</p></li>
185185
<li><p><strong>router</strong> (<em>RoutingService</em><em> | </em><em>None</em>) – Optional routing service for processing</p></li>
186186
<li><p><strong>images</strong> (<em>List</em><em>[</em><em>str</em><em> | </em><em>bytes</em><em>] </em><em>| </em><em>None</em>) – Optional list of image URLs (str) or image bytes.</p></li>
187+
<li><p><strong>output_model</strong> (<em>Type</em><em>[</em><em>BaseModel</em><em>] </em><em>| </em><em>None</em>) – Optional Pydantic model for structured output</p></li>
187188
</ul>
188189
</dd>
189190
<dt class="field-even">Returns<span class="colon">:</span></dt>
190191
<dd class="field-even"><p>Async generator yielding response chunks (text strings or audio bytes)</p>
191192
</dd>
192193
<dt class="field-odd">Return type<span class="colon">:</span></dt>
193-
<dd class="field-odd"><p><em>AsyncGenerator</em>[str | bytes, None]</p>
194+
<dd class="field-odd"><p><em>AsyncGenerator</em>[str | bytes | <em>BaseModel</em>, None]</p>
194195
</dd>
195196
</dl>
196197
</dd></dl>

index.html

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,38 @@ <h3>Image/Text Streaming<a class="headerlink" href="#image-text-streaming" title
289289
</pre></div>
290290
</div>
291291
</section>
292+
<section id="structured-outputs">
293+
<h3>Structured Outputs<a class="headerlink" href="#structured-outputs" title="Link to this heading"></a></h3>
294+
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span><span class="w"> </span><span class="nn">solana_agent</span><span class="w"> </span><span class="kn">import</span> <span class="n">SolanaAgent</span>
295+
296+
<span class="n">config</span> <span class="o">=</span> <span class="p">{</span>
297+
<span class="s2">&quot;openai&quot;</span><span class="p">:</span> <span class="p">{</span>
298+
<span class="s2">&quot;api_key&quot;</span><span class="p">:</span> <span class="s2">&quot;your-openai-api-key&quot;</span><span class="p">,</span>
299+
<span class="p">},</span>
300+
<span class="s2">&quot;agents&quot;</span><span class="p">:</span> <span class="p">[</span>
301+
<span class="p">{</span>
302+
<span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;researcher&quot;</span><span class="p">,</span>
303+
<span class="s2">&quot;instructions&quot;</span><span class="p">:</span> <span class="s2">&quot;You are a research expert.&quot;</span><span class="p">,</span>
304+
<span class="s2">&quot;specialization&quot;</span><span class="p">:</span> <span class="s2">&quot;Researcher&quot;</span><span class="p">,</span>
305+
<span class="p">}</span>
306+
<span class="p">],</span>
307+
<span class="p">}</span>
308+
309+
<span class="n">solana_agent</span> <span class="o">=</span> <span class="n">SolanaAgent</span><span class="p">(</span><span class="n">config</span><span class="o">=</span><span class="n">config</span><span class="p">)</span>
310+
311+
<span class="k">class</span><span class="w"> </span><span class="nc">ResearchProposal</span><span class="p">(</span><span class="n">BaseModel</span><span class="p">):</span>
312+
<span class="n">title</span><span class="p">:</span> <span class="nb">str</span>
313+
<span class="n">abstract</span><span class="p">:</span> <span class="nb">str</span>
314+
<span class="n">key_points</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>
315+
316+
<span class="n">full_response</span> <span class="o">=</span> <span class="kc">None</span>
317+
<span class="k">async</span> <span class="k">for</span> <span class="n">response</span> <span class="ow">in</span> <span class="n">solana_agent</span><span class="o">.</span><span class="n">process</span><span class="p">(</span><span class="s2">&quot;user123&quot;</span><span class="p">,</span> <span class="s2">&quot;Research the life of Ben Franklin - the founding Father.&quot;</span><span class="p">,</span> <span class="n">output_model</span><span class="o">=</span><span class="n">ResearchProposal</span><span class="p">):</span>
318+
<span class="n">full_response</span> <span class="o">=</span> <span class="n">response</span>
319+
320+
<span class="nb">print</span><span class="p">(</span><span class="n">full_response</span><span class="o">.</span><span class="n">model_dump</span><span class="p">())</span>
321+
</pre></div>
322+
</div>
323+
</section>
292324
<section id="command-line-interface-cli">
293325
<h3>Command Line Interface (CLI)<a class="headerlink" href="#command-line-interface-cli" title="Link to this heading"></a></h3>
294326
<p>Solana Agent includes a command-line interface (CLI) for text-based chat using a configuration file.</p>
@@ -508,6 +540,7 @@ <h3>Example for KB (pdf) - Optional<a class="headerlink" href="#example-for-kb-p
508540
<section id="guardrails-optional">
509541
<h3>Guardrails - Optional<a class="headerlink" href="#guardrails-optional" title="Link to this heading"></a></h3>
510542
<p>Guardrails allow you to process and potentially modify user input before it reaches the agent (Input Guardrails) and agent output before it’s sent back to the user (Output Guardrails). This is useful for implementing safety checks, content moderation, data sanitization, or custom transformations.</p>
543+
<p>Guardrails don’t apply to structured outputs.</p>
511544
<p>Solana Agent provides a built-in PII scrubber based on scrubadub.</p>
512545
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span><span class="w"> </span><span class="nn">solana_agent</span><span class="w"> </span><span class="kn">import</span> <span class="n">SolanaAgent</span>
513546

@@ -547,6 +580,7 @@ <h3>Guardrails - Optional<a class="headerlink" href="#guardrails-optional" title
547580
</section>
548581
<section id="example-custom-guardrails-optional">
549582
<h3>Example Custom Guardrails - Optional<a class="headerlink" href="#example-custom-guardrails-optional" title="Link to this heading"></a></h3>
583+
<p>Guardrails don’t apply to structured outputs.</p>
550584
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span><span class="w"> </span><span class="nn">solana_agent</span><span class="w"> </span><span class="kn">import</span> <span class="n">InputGuardrail</span><span class="p">,</span> <span class="n">OutputGuardrail</span>
551585
<span class="kn">import</span><span class="w"> </span><span class="nn">logging</span>
552586

searchindex.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)