UserSyncUI / docs /api /tinytroupe /extraction /results_extractor.html
harvesthealth's picture
Upload folder using huggingface_hub
f6686e1 verified
Raw
History Blame Contribute Delete
44.3 kB
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<meta name="generator" content="pdoc 0.10.0" />
<title>tinytroupe.extraction.results_extractor API documentation</title>
<meta name="description" content="" />
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/typography.min.css" integrity="sha256-7l/o7C8jubJiy74VsKTidCy1yBkRtiUGbVkYBylBqUg=" crossorigin>
<link rel="stylesheet preload" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/styles/github.min.css" crossorigin>
<style>:root{--highlight-color:#fe9}.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}#sidebar > *:last-child{margin-bottom:2cm}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}h1:target,h2:target,h3:target,h4:target,h5:target,h6:target{background:var(--highlight-color);padding:.2em 0}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{margin-top:.6em;font-weight:bold}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}dt:target .name{background:var(--highlight-color)}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary,.git-link-div{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase}.source summary > *{white-space:nowrap;cursor:pointer}.git-link{color:inherit;margin-left:1em}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}td{padding:0 .5em}.admonition{padding:.1em .5em;margin-bottom:1em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
<style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%;height:100vh;overflow:auto;position:sticky;top:0}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
<style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/highlight.min.js" integrity="sha256-Uv3H6lx7dJmRfRvH8TH6kJD1TSK1aFcwgx+mdg3epi8=" crossorigin></script>
<script>window.addEventListener('DOMContentLoaded', () => hljs.initHighlighting())</script>
</head>
<body>
<main>
<article id="content">
<header>
<h1 class="title">Module <code>tinytroupe.extraction.results_extractor</code></h1>
</header>
<section id="section-intro">
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">import os
import json
import chevron
import pandas as pd
from typing import Union, List
from tinytroupe.extraction import logger
from tinytroupe.agent import TinyPerson
from tinytroupe.environment import TinyWorld
from tinytroupe import openai_utils
import tinytroupe.utils as utils
class ResultsExtractor:
def __init__(self,
extraction_prompt_template_path:str = os.path.join(os.path.dirname(__file__), &#39;./prompts/interaction_results_extractor.mustache&#39;),
extraction_objective:str = &#34;The main points present in the agents&#39; interactions history.&#34;,
situation:str = &#34;&#34;,
fields:List[str] = None,
fields_hints:dict = None,
verbose:bool = False):
&#34;&#34;&#34;
Initializes the ResultsExtractor with default parameters.
Args:
extraction_prompt_template_path (str): The path to the extraction prompt template.
extraction_objective (str): The default extraction objective.
situation (str): The default situation to consider.
fields (List[str], optional): The default fields to extract. Defaults to None.
fields_hints (dict, optional): The default hints for the fields to extract. Defaults to None.
verbose (bool, optional): Whether to print debug messages by default. Defaults to False.
&#34;&#34;&#34;
self._extraction_prompt_template_path = extraction_prompt_template_path
# Default parameters
self.default_extraction_objective = extraction_objective
self.default_situation = situation
self.default_fields = fields
self.default_fields_hints = fields_hints
self.default_verbose = verbose
# Cache for the last extraction results
self.agent_extraction = {}
self.world_extraction = {}
def extract_results_from_agents(self,
agents:List[TinyPerson],
extraction_objective:str=None,
situation:str =None,
fields:list=None,
fields_hints:dict=None,
verbose:bool=None):
&#34;&#34;&#34;
Extracts results from a list of TinyPerson instances.
Args:
agents (List[TinyPerson]): The list of TinyPerson instances to extract results from.
extraction_objective (str): The extraction objective.
situation (str): The situation to consider.
fields (list, optional): The fields to extract. If None, the extractor will decide what names to use.
Defaults to None.
fields_hints (dict, optional): Hints for the fields to extract. Maps field names to strings with the hints. Defaults to None.
verbose (bool, optional): Whether to print debug messages. Defaults to False.
&#34;&#34;&#34;
results = []
for agent in agents:
result = self.extract_results_from_agent(agent, extraction_objective, situation, fields, fields_hints, verbose)
results.append(result)
return results
def extract_results_from_agent(self,
tinyperson:TinyPerson,
extraction_objective:str=&#34;The main points present in the agent&#39;s interactions history.&#34;,
situation:str = &#34;&#34;,
fields:list=None,
fields_hints:dict=None,
verbose:bool=None):
&#34;&#34;&#34;
Extracts results from a TinyPerson instance.
Args:
tinyperson (TinyPerson): The TinyPerson instance to extract results from.
extraction_objective (str): The extraction objective.
situation (str): The situation to consider.
fields (list, optional): The fields to extract. If None, the extractor will decide what names to use.
Defaults to None.
fields_hints (dict, optional): Hints for the fields to extract. Maps field names to strings with the hints. Defaults to None.
verbose (bool, optional): Whether to print debug messages. Defaults to False.
&#34;&#34;&#34;
extraction_objective, situation, fields, fields_hints, verbose = self._get_default_values_if_necessary(
extraction_objective, situation, fields, fields_hints, verbose
)
messages = []
rendering_configs = {}
if fields is not None:
rendering_configs[&#34;fields&#34;] = &#34;, &#34;.join(fields)
if fields_hints is not None:
rendering_configs[&#34;fields_hints&#34;] = list(fields_hints.items())
messages.append({&#34;role&#34;: &#34;system&#34;,
&#34;content&#34;: chevron.render(
open(self._extraction_prompt_template_path).read(),
rendering_configs)})
interaction_history = tinyperson.pretty_current_interactions(max_content_length=None)
extraction_request_prompt = \
f&#34;&#34;&#34;
## Extraction objective
{extraction_objective}
## Situation
You are considering a single agent, named {tinyperson.name}. Your objective thus refers to this agent specifically.
{situation}
## Agent Interactions History
You will consider an agent&#39;s history of interactions, which include stimuli it received as well as actions it
performed.
{interaction_history}
&#34;&#34;&#34;
messages.append({&#34;role&#34;: &#34;user&#34;, &#34;content&#34;: extraction_request_prompt})
next_message = openai_utils.client().send_message(messages, temperature=0.0, frequency_penalty=0.0, presence_penalty=0.0)
debug_msg = f&#34;Extraction raw result message: {next_message}&#34;
logger.debug(debug_msg)
if verbose:
print(debug_msg)
if next_message is not None:
result = utils.extract_json(next_message[&#34;content&#34;])
else:
result = None
# cache the result
self.agent_extraction[tinyperson.name] = result
return result
def extract_results_from_world(self,
tinyworld:TinyWorld,
extraction_objective:str=&#34;The main points that can be derived from the agents conversations and actions.&#34;,
situation:str=&#34;&#34;,
fields:list=None,
fields_hints:dict=None,
verbose:bool=None):
&#34;&#34;&#34;
Extracts results from a TinyWorld instance.
Args:
tinyworld (TinyWorld): The TinyWorld instance to extract results from.
extraction_objective (str): The extraction objective.
situation (str): The situation to consider.
fields (list, optional): The fields to extract. If None, the extractor will decide what names to use.
Defaults to None.
verbose (bool, optional): Whether to print debug messages. Defaults to False.
&#34;&#34;&#34;
extraction_objective, situation, fields, fields_hints, verbose = self._get_default_values_if_necessary(
extraction_objective, situation, fields, fields_hints, verbose
)
messages = []
rendering_configs = {}
if fields is not None:
rendering_configs[&#34;fields&#34;] = &#34;, &#34;.join(fields)
if fields_hints is not None:
rendering_configs[&#34;fields_hints&#34;] = list(fields_hints.items())
messages.append({&#34;role&#34;: &#34;system&#34;,
&#34;content&#34;: chevron.render(
open(self._extraction_prompt_template_path).read(),
rendering_configs)})
# TODO: either summarize first or break up into multiple tasks
interaction_history = tinyworld.pretty_current_interactions(max_content_length=None)
extraction_request_prompt = \
f&#34;&#34;&#34;
## Extraction objective
{extraction_objective}
## Situation
You are considering various agents.
{situation}
## Agents Interactions History
You will consider the history of interactions from various agents that exist in an environment called {tinyworld.name}.
Each interaction history includes stimuli the corresponding agent received as well as actions it performed.
{interaction_history}
&#34;&#34;&#34;
messages.append({&#34;role&#34;: &#34;user&#34;, &#34;content&#34;: extraction_request_prompt})
next_message = openai_utils.client().send_message(messages, temperature=0.0)
debug_msg = f&#34;Extraction raw result message: {next_message}&#34;
logger.debug(debug_msg)
if verbose:
print(debug_msg)
if next_message is not None:
result = utils.extract_json(next_message[&#34;content&#34;])
else:
result = None
# cache the result
self.world_extraction[tinyworld.name] = result
return result
def save_as_json(self, filename:str, verbose:bool=False):
&#34;&#34;&#34;
Saves the last extraction results as JSON.
Args:
filename (str): The filename to save the JSON to.
verbose (bool, optional): Whether to print debug messages. Defaults to False.
&#34;&#34;&#34;
with open(filename, &#39;w&#39;) as f:
json.dump({&#34;agent_extractions&#34;: self.agent_extraction,
&#34;world_extraction&#34;: self.world_extraction}, f, indent=4)
if verbose:
print(f&#34;Saved extraction results to {filename}&#34;)
def _get_default_values_if_necessary(self,
extraction_objective:str,
situation:str,
fields:List[str],
fields_hints:dict,
verbose:bool):
if extraction_objective is None:
extraction_objective = self.default_extraction_objective
if situation is None:
situation = self.default_situation
if fields is None:
fields = self.default_fields
if fields_hints is None:
fields_hints = self.default_fields_hints
if verbose is None:
verbose = self.default_verbose
return extraction_objective, situation, fields, fields_hints, verbose</code></pre>
</details>
</section>
<section>
</section>
<section>
</section>
<section>
</section>
<section>
<h2 class="section-title" id="header-classes">Classes</h2>
<dl>
<dt id="tinytroupe.extraction.results_extractor.ResultsExtractor"><code class="flex name class">
<span>class <span class="ident">ResultsExtractor</span></span>
<span>(</span><span>extraction_prompt_template_path: str = 'C:\\Users\\pdasilva\\repos\\TinyTroupe\\tinytroupe\\extraction\\./prompts/interaction_results_extractor.mustache', extraction_objective: str = "The main points present in the agents' interactions history.", situation: str = '', fields: List[str] = None, fields_hints: dict = None, verbose: bool = False)</span>
</code></dt>
<dd>
<div class="desc"><p>Initializes the ResultsExtractor with default parameters.</p>
<h2 id="args">Args</h2>
<dl>
<dt><strong><code>extraction_prompt_template_path</code></strong> :&ensp;<code>str</code></dt>
<dd>The path to the extraction prompt template.</dd>
<dt><strong><code>extraction_objective</code></strong> :&ensp;<code>str</code></dt>
<dd>The default extraction objective.</dd>
<dt><strong><code>situation</code></strong> :&ensp;<code>str</code></dt>
<dd>The default situation to consider.</dd>
<dt><strong><code>fields</code></strong> :&ensp;<code>List[str]</code>, optional</dt>
<dd>The default fields to extract. Defaults to None.</dd>
<dt><strong><code>fields_hints</code></strong> :&ensp;<code>dict</code>, optional</dt>
<dd>The default hints for the fields to extract. Defaults to None.</dd>
<dt><strong><code>verbose</code></strong> :&ensp;<code>bool</code>, optional</dt>
<dd>Whether to print debug messages by default. Defaults to False.</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">class ResultsExtractor:
def __init__(self,
extraction_prompt_template_path:str = os.path.join(os.path.dirname(__file__), &#39;./prompts/interaction_results_extractor.mustache&#39;),
extraction_objective:str = &#34;The main points present in the agents&#39; interactions history.&#34;,
situation:str = &#34;&#34;,
fields:List[str] = None,
fields_hints:dict = None,
verbose:bool = False):
&#34;&#34;&#34;
Initializes the ResultsExtractor with default parameters.
Args:
extraction_prompt_template_path (str): The path to the extraction prompt template.
extraction_objective (str): The default extraction objective.
situation (str): The default situation to consider.
fields (List[str], optional): The default fields to extract. Defaults to None.
fields_hints (dict, optional): The default hints for the fields to extract. Defaults to None.
verbose (bool, optional): Whether to print debug messages by default. Defaults to False.
&#34;&#34;&#34;
self._extraction_prompt_template_path = extraction_prompt_template_path
# Default parameters
self.default_extraction_objective = extraction_objective
self.default_situation = situation
self.default_fields = fields
self.default_fields_hints = fields_hints
self.default_verbose = verbose
# Cache for the last extraction results
self.agent_extraction = {}
self.world_extraction = {}
def extract_results_from_agents(self,
agents:List[TinyPerson],
extraction_objective:str=None,
situation:str =None,
fields:list=None,
fields_hints:dict=None,
verbose:bool=None):
&#34;&#34;&#34;
Extracts results from a list of TinyPerson instances.
Args:
agents (List[TinyPerson]): The list of TinyPerson instances to extract results from.
extraction_objective (str): The extraction objective.
situation (str): The situation to consider.
fields (list, optional): The fields to extract. If None, the extractor will decide what names to use.
Defaults to None.
fields_hints (dict, optional): Hints for the fields to extract. Maps field names to strings with the hints. Defaults to None.
verbose (bool, optional): Whether to print debug messages. Defaults to False.
&#34;&#34;&#34;
results = []
for agent in agents:
result = self.extract_results_from_agent(agent, extraction_objective, situation, fields, fields_hints, verbose)
results.append(result)
return results
def extract_results_from_agent(self,
tinyperson:TinyPerson,
extraction_objective:str=&#34;The main points present in the agent&#39;s interactions history.&#34;,
situation:str = &#34;&#34;,
fields:list=None,
fields_hints:dict=None,
verbose:bool=None):
&#34;&#34;&#34;
Extracts results from a TinyPerson instance.
Args:
tinyperson (TinyPerson): The TinyPerson instance to extract results from.
extraction_objective (str): The extraction objective.
situation (str): The situation to consider.
fields (list, optional): The fields to extract. If None, the extractor will decide what names to use.
Defaults to None.
fields_hints (dict, optional): Hints for the fields to extract. Maps field names to strings with the hints. Defaults to None.
verbose (bool, optional): Whether to print debug messages. Defaults to False.
&#34;&#34;&#34;
extraction_objective, situation, fields, fields_hints, verbose = self._get_default_values_if_necessary(
extraction_objective, situation, fields, fields_hints, verbose
)
messages = []
rendering_configs = {}
if fields is not None:
rendering_configs[&#34;fields&#34;] = &#34;, &#34;.join(fields)
if fields_hints is not None:
rendering_configs[&#34;fields_hints&#34;] = list(fields_hints.items())
messages.append({&#34;role&#34;: &#34;system&#34;,
&#34;content&#34;: chevron.render(
open(self._extraction_prompt_template_path).read(),
rendering_configs)})
interaction_history = tinyperson.pretty_current_interactions(max_content_length=None)
extraction_request_prompt = \
f&#34;&#34;&#34;
## Extraction objective
{extraction_objective}
## Situation
You are considering a single agent, named {tinyperson.name}. Your objective thus refers to this agent specifically.
{situation}
## Agent Interactions History
You will consider an agent&#39;s history of interactions, which include stimuli it received as well as actions it
performed.
{interaction_history}
&#34;&#34;&#34;
messages.append({&#34;role&#34;: &#34;user&#34;, &#34;content&#34;: extraction_request_prompt})
next_message = openai_utils.client().send_message(messages, temperature=0.0, frequency_penalty=0.0, presence_penalty=0.0)
debug_msg = f&#34;Extraction raw result message: {next_message}&#34;
logger.debug(debug_msg)
if verbose:
print(debug_msg)
if next_message is not None:
result = utils.extract_json(next_message[&#34;content&#34;])
else:
result = None
# cache the result
self.agent_extraction[tinyperson.name] = result
return result
def extract_results_from_world(self,
tinyworld:TinyWorld,
extraction_objective:str=&#34;The main points that can be derived from the agents conversations and actions.&#34;,
situation:str=&#34;&#34;,
fields:list=None,
fields_hints:dict=None,
verbose:bool=None):
&#34;&#34;&#34;
Extracts results from a TinyWorld instance.
Args:
tinyworld (TinyWorld): The TinyWorld instance to extract results from.
extraction_objective (str): The extraction objective.
situation (str): The situation to consider.
fields (list, optional): The fields to extract. If None, the extractor will decide what names to use.
Defaults to None.
verbose (bool, optional): Whether to print debug messages. Defaults to False.
&#34;&#34;&#34;
extraction_objective, situation, fields, fields_hints, verbose = self._get_default_values_if_necessary(
extraction_objective, situation, fields, fields_hints, verbose
)
messages = []
rendering_configs = {}
if fields is not None:
rendering_configs[&#34;fields&#34;] = &#34;, &#34;.join(fields)
if fields_hints is not None:
rendering_configs[&#34;fields_hints&#34;] = list(fields_hints.items())
messages.append({&#34;role&#34;: &#34;system&#34;,
&#34;content&#34;: chevron.render(
open(self._extraction_prompt_template_path).read(),
rendering_configs)})
# TODO: either summarize first or break up into multiple tasks
interaction_history = tinyworld.pretty_current_interactions(max_content_length=None)
extraction_request_prompt = \
f&#34;&#34;&#34;
## Extraction objective
{extraction_objective}
## Situation
You are considering various agents.
{situation}
## Agents Interactions History
You will consider the history of interactions from various agents that exist in an environment called {tinyworld.name}.
Each interaction history includes stimuli the corresponding agent received as well as actions it performed.
{interaction_history}
&#34;&#34;&#34;
messages.append({&#34;role&#34;: &#34;user&#34;, &#34;content&#34;: extraction_request_prompt})
next_message = openai_utils.client().send_message(messages, temperature=0.0)
debug_msg = f&#34;Extraction raw result message: {next_message}&#34;
logger.debug(debug_msg)
if verbose:
print(debug_msg)
if next_message is not None:
result = utils.extract_json(next_message[&#34;content&#34;])
else:
result = None
# cache the result
self.world_extraction[tinyworld.name] = result
return result
def save_as_json(self, filename:str, verbose:bool=False):
&#34;&#34;&#34;
Saves the last extraction results as JSON.
Args:
filename (str): The filename to save the JSON to.
verbose (bool, optional): Whether to print debug messages. Defaults to False.
&#34;&#34;&#34;
with open(filename, &#39;w&#39;) as f:
json.dump({&#34;agent_extractions&#34;: self.agent_extraction,
&#34;world_extraction&#34;: self.world_extraction}, f, indent=4)
if verbose:
print(f&#34;Saved extraction results to {filename}&#34;)
def _get_default_values_if_necessary(self,
extraction_objective:str,
situation:str,
fields:List[str],
fields_hints:dict,
verbose:bool):
if extraction_objective is None:
extraction_objective = self.default_extraction_objective
if situation is None:
situation = self.default_situation
if fields is None:
fields = self.default_fields
if fields_hints is None:
fields_hints = self.default_fields_hints
if verbose is None:
verbose = self.default_verbose
return extraction_objective, situation, fields, fields_hints, verbose</code></pre>
</details>
<h3>Methods</h3>
<dl>
<dt id="tinytroupe.extraction.results_extractor.ResultsExtractor.extract_results_from_agent"><code class="name flex">
<span>def <span class="ident">extract_results_from_agent</span></span>(<span>self, tinyperson: <a title="tinytroupe.agent.tiny_person.TinyPerson" href="../agent/tiny_person.html#tinytroupe.agent.tiny_person.TinyPerson">TinyPerson</a>, extraction_objective: str = "The main points present in the agent's interactions history.", situation: str = '', fields: list = None, fields_hints: dict = None, verbose: bool = None)</span>
</code></dt>
<dd>
<div class="desc"><p>Extracts results from a TinyPerson instance.</p>
<h2 id="args">Args</h2>
<dl>
<dt><strong><code>tinyperson</code></strong> :&ensp;<code>TinyPerson</code></dt>
<dd>The TinyPerson instance to extract results from.</dd>
<dt><strong><code>extraction_objective</code></strong> :&ensp;<code>str</code></dt>
<dd>The extraction objective.</dd>
<dt><strong><code>situation</code></strong> :&ensp;<code>str</code></dt>
<dd>The situation to consider.</dd>
<dt><strong><code>fields</code></strong> :&ensp;<code>list</code>, optional</dt>
<dd>The fields to extract. If None, the extractor will decide what names to use.
Defaults to None.</dd>
<dt><strong><code>fields_hints</code></strong> :&ensp;<code>dict</code>, optional</dt>
<dd>Hints for the fields to extract. Maps field names to strings with the hints. Defaults to None.</dd>
<dt><strong><code>verbose</code></strong> :&ensp;<code>bool</code>, optional</dt>
<dd>Whether to print debug messages. Defaults to False.</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python"> def extract_results_from_agent(self,
tinyperson:TinyPerson,
extraction_objective:str=&#34;The main points present in the agent&#39;s interactions history.&#34;,
situation:str = &#34;&#34;,
fields:list=None,
fields_hints:dict=None,
verbose:bool=None):
&#34;&#34;&#34;
Extracts results from a TinyPerson instance.
Args:
tinyperson (TinyPerson): The TinyPerson instance to extract results from.
extraction_objective (str): The extraction objective.
situation (str): The situation to consider.
fields (list, optional): The fields to extract. If None, the extractor will decide what names to use.
Defaults to None.
fields_hints (dict, optional): Hints for the fields to extract. Maps field names to strings with the hints. Defaults to None.
verbose (bool, optional): Whether to print debug messages. Defaults to False.
&#34;&#34;&#34;
extraction_objective, situation, fields, fields_hints, verbose = self._get_default_values_if_necessary(
extraction_objective, situation, fields, fields_hints, verbose
)
messages = []
rendering_configs = {}
if fields is not None:
rendering_configs[&#34;fields&#34;] = &#34;, &#34;.join(fields)
if fields_hints is not None:
rendering_configs[&#34;fields_hints&#34;] = list(fields_hints.items())
messages.append({&#34;role&#34;: &#34;system&#34;,
&#34;content&#34;: chevron.render(
open(self._extraction_prompt_template_path).read(),
rendering_configs)})
interaction_history = tinyperson.pretty_current_interactions(max_content_length=None)
extraction_request_prompt = \
f&#34;&#34;&#34;
## Extraction objective
{extraction_objective}
## Situation
You are considering a single agent, named {tinyperson.name}. Your objective thus refers to this agent specifically.
{situation}
## Agent Interactions History
You will consider an agent&#39;s history of interactions, which include stimuli it received as well as actions it
performed.
{interaction_history}
&#34;&#34;&#34;
messages.append({&#34;role&#34;: &#34;user&#34;, &#34;content&#34;: extraction_request_prompt})
next_message = openai_utils.client().send_message(messages, temperature=0.0, frequency_penalty=0.0, presence_penalty=0.0)
debug_msg = f&#34;Extraction raw result message: {next_message}&#34;
logger.debug(debug_msg)
if verbose:
print(debug_msg)
if next_message is not None:
result = utils.extract_json(next_message[&#34;content&#34;])
else:
result = None
# cache the result
self.agent_extraction[tinyperson.name] = result
return result</code></pre>
</details>
</dd>
<dt id="tinytroupe.extraction.results_extractor.ResultsExtractor.extract_results_from_agents"><code class="name flex">
<span>def <span class="ident">extract_results_from_agents</span></span>(<span>self, agents: List[<a title="tinytroupe.agent.tiny_person.TinyPerson" href="../agent/tiny_person.html#tinytroupe.agent.tiny_person.TinyPerson">TinyPerson</a>], extraction_objective: str = None, situation: str = None, fields: list = None, fields_hints: dict = None, verbose: bool = None)</span>
</code></dt>
<dd>
<div class="desc"><p>Extracts results from a list of TinyPerson instances.</p>
<h2 id="args">Args</h2>
<dl>
<dt><strong><code>agents</code></strong> :&ensp;<code>List[TinyPerson]</code></dt>
<dd>The list of TinyPerson instances to extract results from.</dd>
<dt><strong><code>extraction_objective</code></strong> :&ensp;<code>str</code></dt>
<dd>The extraction objective.</dd>
<dt><strong><code>situation</code></strong> :&ensp;<code>str</code></dt>
<dd>The situation to consider.</dd>
<dt><strong><code>fields</code></strong> :&ensp;<code>list</code>, optional</dt>
<dd>The fields to extract. If None, the extractor will decide what names to use.
Defaults to None.</dd>
<dt><strong><code>fields_hints</code></strong> :&ensp;<code>dict</code>, optional</dt>
<dd>Hints for the fields to extract. Maps field names to strings with the hints. Defaults to None.</dd>
<dt><strong><code>verbose</code></strong> :&ensp;<code>bool</code>, optional</dt>
<dd>Whether to print debug messages. Defaults to False.</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def extract_results_from_agents(self,
agents:List[TinyPerson],
extraction_objective:str=None,
situation:str =None,
fields:list=None,
fields_hints:dict=None,
verbose:bool=None):
&#34;&#34;&#34;
Extracts results from a list of TinyPerson instances.
Args:
agents (List[TinyPerson]): The list of TinyPerson instances to extract results from.
extraction_objective (str): The extraction objective.
situation (str): The situation to consider.
fields (list, optional): The fields to extract. If None, the extractor will decide what names to use.
Defaults to None.
fields_hints (dict, optional): Hints for the fields to extract. Maps field names to strings with the hints. Defaults to None.
verbose (bool, optional): Whether to print debug messages. Defaults to False.
&#34;&#34;&#34;
results = []
for agent in agents:
result = self.extract_results_from_agent(agent, extraction_objective, situation, fields, fields_hints, verbose)
results.append(result)
return results</code></pre>
</details>
</dd>
<dt id="tinytroupe.extraction.results_extractor.ResultsExtractor.extract_results_from_world"><code class="name flex">
<span>def <span class="ident">extract_results_from_world</span></span>(<span>self, tinyworld: <a title="tinytroupe.environment.tiny_world.TinyWorld" href="../environment/tiny_world.html#tinytroupe.environment.tiny_world.TinyWorld">TinyWorld</a>, extraction_objective: str = 'The main points that can be derived from the agents conversations and actions.', situation: str = '', fields: list = None, fields_hints: dict = None, verbose: bool = None)</span>
</code></dt>
<dd>
<div class="desc"><p>Extracts results from a TinyWorld instance.</p>
<h2 id="args">Args</h2>
<dl>
<dt><strong><code>tinyworld</code></strong> :&ensp;<code>TinyWorld</code></dt>
<dd>The TinyWorld instance to extract results from.</dd>
<dt><strong><code>extraction_objective</code></strong> :&ensp;<code>str</code></dt>
<dd>The extraction objective.</dd>
<dt><strong><code>situation</code></strong> :&ensp;<code>str</code></dt>
<dd>The situation to consider.</dd>
<dt><strong><code>fields</code></strong> :&ensp;<code>list</code>, optional</dt>
<dd>The fields to extract. If None, the extractor will decide what names to use.
Defaults to None.</dd>
<dt><strong><code>verbose</code></strong> :&ensp;<code>bool</code>, optional</dt>
<dd>Whether to print debug messages. Defaults to False.</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python"> def extract_results_from_world(self,
tinyworld:TinyWorld,
extraction_objective:str=&#34;The main points that can be derived from the agents conversations and actions.&#34;,
situation:str=&#34;&#34;,
fields:list=None,
fields_hints:dict=None,
verbose:bool=None):
&#34;&#34;&#34;
Extracts results from a TinyWorld instance.
Args:
tinyworld (TinyWorld): The TinyWorld instance to extract results from.
extraction_objective (str): The extraction objective.
situation (str): The situation to consider.
fields (list, optional): The fields to extract. If None, the extractor will decide what names to use.
Defaults to None.
verbose (bool, optional): Whether to print debug messages. Defaults to False.
&#34;&#34;&#34;
extraction_objective, situation, fields, fields_hints, verbose = self._get_default_values_if_necessary(
extraction_objective, situation, fields, fields_hints, verbose
)
messages = []
rendering_configs = {}
if fields is not None:
rendering_configs[&#34;fields&#34;] = &#34;, &#34;.join(fields)
if fields_hints is not None:
rendering_configs[&#34;fields_hints&#34;] = list(fields_hints.items())
messages.append({&#34;role&#34;: &#34;system&#34;,
&#34;content&#34;: chevron.render(
open(self._extraction_prompt_template_path).read(),
rendering_configs)})
# TODO: either summarize first or break up into multiple tasks
interaction_history = tinyworld.pretty_current_interactions(max_content_length=None)
extraction_request_prompt = \
f&#34;&#34;&#34;
## Extraction objective
{extraction_objective}
## Situation
You are considering various agents.
{situation}
## Agents Interactions History
You will consider the history of interactions from various agents that exist in an environment called {tinyworld.name}.
Each interaction history includes stimuli the corresponding agent received as well as actions it performed.
{interaction_history}
&#34;&#34;&#34;
messages.append({&#34;role&#34;: &#34;user&#34;, &#34;content&#34;: extraction_request_prompt})
next_message = openai_utils.client().send_message(messages, temperature=0.0)
debug_msg = f&#34;Extraction raw result message: {next_message}&#34;
logger.debug(debug_msg)
if verbose:
print(debug_msg)
if next_message is not None:
result = utils.extract_json(next_message[&#34;content&#34;])
else:
result = None
# cache the result
self.world_extraction[tinyworld.name] = result
return result</code></pre>
</details>
</dd>
<dt id="tinytroupe.extraction.results_extractor.ResultsExtractor.save_as_json"><code class="name flex">
<span>def <span class="ident">save_as_json</span></span>(<span>self, filename: str, verbose: bool = False)</span>
</code></dt>
<dd>
<div class="desc"><p>Saves the last extraction results as JSON.</p>
<h2 id="args">Args</h2>
<dl>
<dt><strong><code>filename</code></strong> :&ensp;<code>str</code></dt>
<dd>The filename to save the JSON to.</dd>
<dt><strong><code>verbose</code></strong> :&ensp;<code>bool</code>, optional</dt>
<dd>Whether to print debug messages. Defaults to False.</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def save_as_json(self, filename:str, verbose:bool=False):
&#34;&#34;&#34;
Saves the last extraction results as JSON.
Args:
filename (str): The filename to save the JSON to.
verbose (bool, optional): Whether to print debug messages. Defaults to False.
&#34;&#34;&#34;
with open(filename, &#39;w&#39;) as f:
json.dump({&#34;agent_extractions&#34;: self.agent_extraction,
&#34;world_extraction&#34;: self.world_extraction}, f, indent=4)
if verbose:
print(f&#34;Saved extraction results to {filename}&#34;)</code></pre>
</details>
</dd>
</dl>
</dd>
</dl>
</section>
</article>
<nav id="sidebar">
<h1>Index</h1>
<div class="toc">
<ul></ul>
</div>
<ul id="index">
<li><h3>Super-module</h3>
<ul>
<li><code><a title="tinytroupe.extraction" href="index.html">tinytroupe.extraction</a></code></li>
</ul>
</li>
<li><h3><a href="#header-classes">Classes</a></h3>
<ul>
<li>
<h4><code><a title="tinytroupe.extraction.results_extractor.ResultsExtractor" href="#tinytroupe.extraction.results_extractor.ResultsExtractor">ResultsExtractor</a></code></h4>
<ul class="">
<li><code><a title="tinytroupe.extraction.results_extractor.ResultsExtractor.extract_results_from_agent" href="#tinytroupe.extraction.results_extractor.ResultsExtractor.extract_results_from_agent">extract_results_from_agent</a></code></li>
<li><code><a title="tinytroupe.extraction.results_extractor.ResultsExtractor.extract_results_from_agents" href="#tinytroupe.extraction.results_extractor.ResultsExtractor.extract_results_from_agents">extract_results_from_agents</a></code></li>
<li><code><a title="tinytroupe.extraction.results_extractor.ResultsExtractor.extract_results_from_world" href="#tinytroupe.extraction.results_extractor.ResultsExtractor.extract_results_from_world">extract_results_from_world</a></code></li>
<li><code><a title="tinytroupe.extraction.results_extractor.ResultsExtractor.save_as_json" href="#tinytroupe.extraction.results_extractor.ResultsExtractor.save_as_json">save_as_json</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</main>
<footer id="footer">
<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
</footer>
</body>
</html>