Skip to content

Commit 85446bd

Browse files
add mirascope
1 parent 9d9eeda commit 85446bd

File tree

6 files changed

+271
-3
lines changed

6 files changed

+271
-3
lines changed

Chapter2/typing.ipynb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -738,7 +738,7 @@
738738
"name": "python",
739739
"nbconvert_exporter": "python",
740740
"pygments_lexer": "ipython3",
741-
"version": "3.9.6"
741+
"version": "3.11.6"
742742
},
743743
"toc": {
744744
"base_numbering": 1,

Chapter5/llm.ipynb

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,105 @@
244244
"source": [
245245
"[Link to Outlines](https://github.com/outlines-dev/outlines)."
246246
]
247+
},
248+
{
249+
"cell_type": "markdown",
250+
"id": "ff519c06",
251+
"metadata": {},
252+
"source": [
253+
"### Mirascope: Extract Structured Data Extraction From LLM Outputs"
254+
]
255+
},
256+
{
257+
"cell_type": "code",
258+
"execution_count": null,
259+
"id": "dc12a009",
260+
"metadata": {
261+
"tags": [
262+
"hide-cell"
263+
]
264+
},
265+
"outputs": [],
266+
"source": [
267+
"!pip install mirascope"
268+
]
269+
},
270+
{
271+
"cell_type": "markdown",
272+
"id": "0ea9cc6f",
273+
"metadata": {},
274+
"source": [
275+
"Large Language Models (LLMs) are powerful at producing human-like text, but their outputs lack structure, which can limit their usefulness in many practical applications that require organized data.\n",
276+
"\n",
277+
"Mirascope offers a solution by enabling the extraction of structured information from LLM outputs reliably.\n",
278+
"\n",
279+
"The following code uses Mirascope to extract meeting details such as topic, date, time, and participants."
280+
]
281+
},
282+
{
283+
"cell_type": "code",
284+
"execution_count": 9,
285+
"id": "03c7cfb0",
286+
"metadata": {},
287+
"outputs": [],
288+
"source": [
289+
"import os\n",
290+
"\n",
291+
"\n",
292+
"os.environ[\"OPENAI_API_KEY\"] = \"YOUR_API_KEY\"\n"
293+
]
294+
},
295+
{
296+
"cell_type": "code",
297+
"execution_count": 13,
298+
"id": "79f19428",
299+
"metadata": {},
300+
"outputs": [
301+
{
302+
"name": "stdout",
303+
"output_type": "stream",
304+
"text": [
305+
"topic='Upcoming product launch' date='June 15th' time='3 PM' participants=['John', 'Sarah', 'Mike']\n"
306+
]
307+
}
308+
],
309+
"source": [
310+
"from typing import List, Type\n",
311+
"from pydantic import BaseModel\n",
312+
"from mirascope.openai import OpenAIExtractor\n",
313+
"\n",
314+
"\n",
315+
"class MeetingDetails(BaseModel):\n",
316+
" topic: str\n",
317+
" date: str\n",
318+
" time: str\n",
319+
" participants: List[str]\n",
320+
"\n",
321+
"\n",
322+
"class MeetingExtractor(OpenAIExtractor[MeetingDetails]):\n",
323+
" extract_schema: Type[MeetingDetails] = MeetingDetails\n",
324+
" prompt_template = \"\"\"\n",
325+
" Extract the meeting details from the following description:\n",
326+
" {description}\n",
327+
" \"\"\"\n",
328+
"\n",
329+
" description: str\n",
330+
"\n",
331+
"\n",
332+
"# Example usage:\n",
333+
"description = \"Discuss the upcoming product launch on June 15th at 3 PM with John, Sarah, and Mike.\"\n",
334+
"meeting_details = MeetingExtractor(description=description).extract()\n",
335+
"assert isinstance(meeting_details, MeetingDetails)\n",
336+
"print(meeting_details)"
337+
]
338+
},
339+
{
340+
"cell_type": "markdown",
341+
"id": "641d2dd5",
342+
"metadata": {},
343+
"source": [
344+
"[Link to Mirascope](https://bit.ly/4bkciv3)."
345+
]
247346
}
248347
],
249348
"metadata": {

docs/Chapter5/llm.html

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -514,6 +514,7 @@ <h2> Contents </h2>
514514
<ul class="visible nav section-nav flex-column">
515515
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#simplify-llm-integration-with-magentic-s-prompt-decorator">6.16.1. Simplify LLM Integration with Magentic’s @prompt Decorator</a></li>
516516
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#outlines-ensuring-consistent-outputs-from-language-models">6.16.2. Outlines: Ensuring Consistent Outputs from Language Models</a></li>
517+
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#mirascope-extract-structured-data-extraction-from-llm-outputs">6.16.3. Mirascope: Extract Structured Data Extraction From LLM Outputs</a></li>
517518
</ul>
518519
</nav>
519520
</div>
@@ -660,6 +661,74 @@ <h2><span class="section-number">6.16.2. </span>Outlines: Ensuring Consistent Ou
660661
</div>
661662
<p><a class="reference external" href="https://github.com/outlines-dev/outlines">Link to Outlines</a>.</p>
662663
</section>
664+
<section id="mirascope-extract-structured-data-extraction-from-llm-outputs">
665+
<h2><span class="section-number">6.16.3. </span>Mirascope: Extract Structured Data Extraction From LLM Outputs<a class="headerlink" href="#mirascope-extract-structured-data-extraction-from-llm-outputs" title="Permalink to this heading">#</a></h2>
666+
<div class="cell tag_hide-cell docutils container">
667+
<details class="hide above-input">
668+
<summary aria-label="Toggle hidden content">
669+
<span class="collapsed">Show code cell content</span>
670+
<span class="expanded">Hide code cell content</span>
671+
</summary>
672+
<div class="cell_input docutils container">
673+
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="o">!</span>pip<span class="w"> </span>install<span class="w"> </span>mirascope
674+
</pre></div>
675+
</div>
676+
</div>
677+
</details>
678+
</div>
679+
<p>Large Language Models (LLMs) are powerful at producing human-like text, but their outputs lack structure, which can limit their usefulness in many practical applications that require organized data.</p>
680+
<p>Mirascope offers a solution by enabling the extraction of structured information from LLM outputs reliably.</p>
681+
<p>The following code uses Mirascope to extract meeting details such as topic, date, time, and participants.</p>
682+
<div class="cell docutils container">
683+
<div class="cell_input docutils container">
684+
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">os</span>
685+
686+
687+
<span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s2">&quot;OPENAI_API_KEY&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;YOUR_API_KEY&quot;</span>
688+
</pre></div>
689+
</div>
690+
</div>
691+
</div>
692+
<div class="cell docutils container">
693+
<div class="cell_input docutils container">
694+
<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">List</span><span class="p">,</span> <span class="n">Type</span>
695+
<span class="kn">from</span> <span class="nn">pydantic</span> <span class="kn">import</span> <span class="n">BaseModel</span>
696+
<span class="kn">from</span> <span class="nn">mirascope.openai</span> <span class="kn">import</span> <span class="n">OpenAIExtractor</span>
697+
698+
699+
<span class="k">class</span> <span class="nc">MeetingDetails</span><span class="p">(</span><span class="n">BaseModel</span><span class="p">):</span>
700+
<span class="n">topic</span><span class="p">:</span> <span class="nb">str</span>
701+
<span class="n">date</span><span class="p">:</span> <span class="nb">str</span>
702+
<span class="n">time</span><span class="p">:</span> <span class="nb">str</span>
703+
<span class="n">participants</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>
704+
705+
706+
<span class="k">class</span> <span class="nc">MeetingExtractor</span><span class="p">(</span><span class="n">OpenAIExtractor</span><span class="p">[</span><span class="n">MeetingDetails</span><span class="p">]):</span>
707+
<span class="n">extract_schema</span><span class="p">:</span> <span class="n">Type</span><span class="p">[</span><span class="n">MeetingDetails</span><span class="p">]</span> <span class="o">=</span> <span class="n">MeetingDetails</span>
708+
<span class="n">prompt_template</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;</span>
709+
<span class="s2"> Extract the meeting details from the following description:</span>
710+
<span class="s2"> </span><span class="si">{description}</span>
711+
<span class="s2"> &quot;&quot;&quot;</span>
712+
713+
<span class="n">description</span><span class="p">:</span> <span class="nb">str</span>
714+
715+
716+
<span class="c1"># Example usage:</span>
717+
<span class="n">description</span> <span class="o">=</span> <span class="s2">&quot;Discuss the upcoming product launch on June 15th at 3 PM with John, Sarah, and Mike.&quot;</span>
718+
<span class="n">meeting_details</span> <span class="o">=</span> <span class="n">MeetingExtractor</span><span class="p">(</span><span class="n">description</span><span class="o">=</span><span class="n">description</span><span class="p">)</span><span class="o">.</span><span class="n">extract</span><span class="p">()</span>
719+
<span class="k">assert</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">meeting_details</span><span class="p">,</span> <span class="n">MeetingDetails</span><span class="p">)</span>
720+
<span class="nb">print</span><span class="p">(</span><span class="n">meeting_details</span><span class="p">)</span>
721+
</pre></div>
722+
</div>
723+
</div>
724+
<div class="cell_output docutils container">
725+
<div class="output stream highlight-myst-ansi notranslate"><div class="highlight"><pre><span></span>topic=&#39;Upcoming product launch&#39; date=&#39;June 15th&#39; time=&#39;3 PM&#39; participants=[&#39;John&#39;, &#39;Sarah&#39;, &#39;Mike&#39;]
726+
</pre></div>
727+
</div>
728+
</div>
729+
</div>
730+
<p><a class="reference external" href="https://bit.ly/4bkciv3">Link to Mirascope</a>.</p>
731+
</section>
663732
</section>
664733

665734
<script type="text/x-thebe-config">
@@ -727,6 +796,7 @@ <h2><span class="section-number">6.16.2. </span>Outlines: Ensuring Consistent Ou
727796
<ul class="visible nav section-nav flex-column">
728797
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#simplify-llm-integration-with-magentic-s-prompt-decorator">6.16.1. Simplify LLM Integration with Magentic’s @prompt Decorator</a></li>
729798
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#outlines-ensuring-consistent-outputs-from-language-models">6.16.2. Outlines: Ensuring Consistent Outputs from Language Models</a></li>
799+
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#mirascope-extract-structured-data-extraction-from-llm-outputs">6.16.3. Mirascope: Extract Structured Data Extraction From LLM Outputs</a></li>
730800
</ul>
731801
</nav></div>
732802

docs/_sources/Chapter2/typing.ipynb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -738,7 +738,7 @@
738738
"name": "python",
739739
"nbconvert_exporter": "python",
740740
"pygments_lexer": "ipython3",
741-
"version": "3.9.6"
741+
"version": "3.11.6"
742742
},
743743
"toc": {
744744
"base_numbering": 1,

docs/_sources/Chapter5/llm.ipynb

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,105 @@
244244
"source": [
245245
"[Link to Outlines](https://github.com/outlines-dev/outlines)."
246246
]
247+
},
248+
{
249+
"cell_type": "markdown",
250+
"id": "ff519c06",
251+
"metadata": {},
252+
"source": [
253+
"### Mirascope: Extract Structured Data Extraction From LLM Outputs"
254+
]
255+
},
256+
{
257+
"cell_type": "code",
258+
"execution_count": null,
259+
"id": "dc12a009",
260+
"metadata": {
261+
"tags": [
262+
"hide-cell"
263+
]
264+
},
265+
"outputs": [],
266+
"source": [
267+
"!pip install mirascope"
268+
]
269+
},
270+
{
271+
"cell_type": "markdown",
272+
"id": "0ea9cc6f",
273+
"metadata": {},
274+
"source": [
275+
"Large Language Models (LLMs) are powerful at producing human-like text, but their outputs lack structure, which can limit their usefulness in many practical applications that require organized data.\n",
276+
"\n",
277+
"Mirascope offers a solution by enabling the extraction of structured information from LLM outputs reliably.\n",
278+
"\n",
279+
"The following code uses Mirascope to extract meeting details such as topic, date, time, and participants."
280+
]
281+
},
282+
{
283+
"cell_type": "code",
284+
"execution_count": 9,
285+
"id": "03c7cfb0",
286+
"metadata": {},
287+
"outputs": [],
288+
"source": [
289+
"import os\n",
290+
"\n",
291+
"\n",
292+
"os.environ[\"OPENAI_API_KEY\"] = \"YOUR_API_KEY\"\n"
293+
]
294+
},
295+
{
296+
"cell_type": "code",
297+
"execution_count": 13,
298+
"id": "79f19428",
299+
"metadata": {},
300+
"outputs": [
301+
{
302+
"name": "stdout",
303+
"output_type": "stream",
304+
"text": [
305+
"topic='Upcoming product launch' date='June 15th' time='3 PM' participants=['John', 'Sarah', 'Mike']\n"
306+
]
307+
}
308+
],
309+
"source": [
310+
"from typing import List, Type\n",
311+
"from pydantic import BaseModel\n",
312+
"from mirascope.openai import OpenAIExtractor\n",
313+
"\n",
314+
"\n",
315+
"class MeetingDetails(BaseModel):\n",
316+
" topic: str\n",
317+
" date: str\n",
318+
" time: str\n",
319+
" participants: List[str]\n",
320+
"\n",
321+
"\n",
322+
"class MeetingExtractor(OpenAIExtractor[MeetingDetails]):\n",
323+
" extract_schema: Type[MeetingDetails] = MeetingDetails\n",
324+
" prompt_template = \"\"\"\n",
325+
" Extract the meeting details from the following description:\n",
326+
" {description}\n",
327+
" \"\"\"\n",
328+
"\n",
329+
" description: str\n",
330+
"\n",
331+
"\n",
332+
"# Example usage:\n",
333+
"description = \"Discuss the upcoming product launch on June 15th at 3 PM with John, Sarah, and Mike.\"\n",
334+
"meeting_details = MeetingExtractor(description=description).extract()\n",
335+
"assert isinstance(meeting_details, MeetingDetails)\n",
336+
"print(meeting_details)"
337+
]
338+
},
339+
{
340+
"cell_type": "markdown",
341+
"id": "641d2dd5",
342+
"metadata": {},
343+
"source": [
344+
"[Link to Mirascope](https://bit.ly/4bkciv3)."
345+
]
247346
}
248347
],
249348
"metadata": {

docs/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)