Skip to content

Repository files navigation

Edison Platform API Documentation

PyPI versionLicensePyPI Python Versions

Documentation and tutorials for edison-client, a client for interacting with endpoints of the Edison platform.

Installation

uv pip install edison-client

Quickstart

fromedison_clientimportEdisonClient, JobNamesclient=EdisonClient(
api_key="your_api_key",
)
task_data= {
"name": JobNames.LITERATURE,
"query": "Which neglected diseases had a treatment developed by artificial intelligence?",
}
task_response=client.run_tasks_until_done(task_data)

A quickstart example can be found in the client_notebook.ipynb file, where we show how to submit and retrieve a task, pass runtime configuration to the agent, and ask follow-up questions to the previous task.

Functionalities

Edison client implements a RestClient (called EdisonClient) with the following functionalities:

  • Simple task running: run_tasks_until_done(TaskRequest) or await arun_tasks_until_done(TaskRequest)
  • Asynchronous tasks: get_task(task_id) or aget_task(task_id) and create_task(TaskRequest) or acreate_task(TaskRequest)

To create a EdisonClient, you need to pass an Edison Scientific platform api key (see Authentication):

fromedison_clientimportEdisonClientclient=EdisonClient(
api_key="your_api_key",
)

Authentication

In order to use the EdisonClient, you need to authenticate yourself. Authentication is done by providing an API key, which can be obtained directly from your profile page in the Edison platform.

Simple task running

In the Edison platform, we define the deployed combination of an agent and an environment as a job. To invoke a job, we need to submit a task (also called a query) to it. EdisonClient can be used to submit tasks/queries to available jobs in the Edison platform. Using a EdisonClient instance, you can submit tasks to the platform by calling the create_task method, which receives a TaskRequest (or a dictionary with kwargs) and returns the task id. Aiming to make the submission of tasks as simple as possible, we have created a JobNamesenum that contains the available task types.

The available supported jobs are:

AliasAvailable AliasesTask typeDescription
JobNames.LITERATUREliterature-20260216, JobNames.CROW, JobNames.FALCONLiterature SearchAsk a question of scientific data sources, and receive a high-accuracy, cited response. Built with PaperQA3.
JobNames.LITERATURE_HIGHliterature-high-20260216Literature SearchAsk a question of scientific data sources, and receive a high-accuracy, cited response. High reasoning mode enabled for SOTA performance.
JobNames.ANALYSISJobNames.FINCHData AnalysisTurn biological datasets into detailed analyses answering your research questions.
JobNames.PRECEDENTJobNames.OWLPrecedent SearchFormerly known as HasAnyone, query if anyone has ever done something in science.
JobNames.MOLECULESJobNames.PHOENIXChemistry TasksA new iteration of ChemCrow, Phoenix uses cheminformatics tools to do chemistry. Good for planning synthesis and designing new molecules.

Using JobNames, the task submission looks like this:

fromedison_clientimportEdisonClient, JobNamesclient=EdisonClient(
api_key="your_api_key",
)
task_data= {
"name": JobNames.PRECEDENT,
"query": "Has anyone tested therapeutic exerkines in humans or NHPs?",
}
task_response=client.run_tasks_until_done(task_data)
print(task_response.answer)

Or if running async code:

importasynciofromedison_clientimportEdisonClient, JobNamesasyncdefmain():
client=EdisonClient(
api_key="your_api_key",
)
task_data= {
"name": JobNames.PRECEDENT,
"query": "Has anyone tested therapeutic exerkines in humans or NHPs?",
}
task_response=awaitclient.arun_tasks_until_done(task_data)
print(task_response.answer)
returntask_id# For Python 3.7+if__name__=="__main__":
task_id=asyncio.run(main())

Note that in either the sync or the async code, collections of tasks can be given to the client to run them in a batch:

importasynciofromedison_clientimportEdisonClient, JobNamesasyncdefmain():
client=EdisonClient(
api_key="your_api_key",
)
task_data= [{
"name": JobNames.PRECEDENT,
"query": "Has anyone tested therapeutic exerkines in humans or NHPs?",
},
{
"name": JobNames.LITERATURE,
"query": "Are there any clinically validated therapeutic exerkines for humans?",
}
]
task_responses=awaitclient.arun_tasks_until_done(task_data)
print(task_responses[0].answer)
print(task_responses[1].answer)
returntask_id# For Python 3.7+if__name__=="__main__":
task_id=asyncio.run(main())

TaskRequest can also be used to submit jobs and it has the following fields:

FieldTypeDescription
idUUIDOptional job identifier. A UUID will be generated if not provided
namestrName of the job to execute eg. job-futurehouse-paperqa2, or using the JobNames for convenience: JobNames.LITERATURE
querystrQuery or task to be executed by the job
runtime_configRuntimeConfigOptional runtime parameters for the job

runtime_config can receive a AgentConfig object with the desired kwargs. Check the available AgentConfig fields in the LDP documentation. Besides the AgentConfig object, we can also pass timeout and max_steps to limit the execution time and the number of steps the agent can take.

fromedison_clientimportEdisonClient, JobNamesfromedison_client.models.appimportTaskRequestclient=EdisonClient(
api_key="your_api_key",
)
task_response=client.run_tasks_until_done(
TaskRequest(
name=JobNames.PRECEDENT,
query="Has anyone tested therapeutic exerkines in humans or NHPs?",
)
)
print(task_response.answer)

A TaskResponse will be returned from using our agents. For LITERATURE and PRECEDENT, we default to a subclass, PQATaskResponse which has some key attributes:

FieldTypeDescription
answerstrAnswer to your query.
formatted_answerstrSpecially formatted answer with references.
has_successful_answerboolFlag for whether the agent was able to find a good answer to your query or not.

If using the verbose setting, much more data can be pulled down from your TaskResponse, which will exist across all agents.

fromedison_clientimportEdisonClient, JobNamesfromedison_client.models.appimportTaskRequestclient=EdisonClient(
api_key="your_api_key",
)
task_response=client.run_tasks_until_done(
TaskRequest(
name=JobNames.PRECEDENT,
query="Has anyone tested therapeutic exerkines in humans or NHPs?",
),
verbose=True,
)
print(task_response.environment_frame)

In that case, a TaskResponseVerbose will have the following fields:

FieldTypeDescription
agent_statedictLarge object with all agent states during the progress of your task.
environment_framedictLarge nested object with all environment data, for PQA environments it includes contexts, paper metadata, and answers.
metadatadictExtra metadata about your query.

Task Continuation

Once a task is submitted and the answer is returned, Edison platform allow you to ask follow-up questions to the previous task. It is also possible through the platform API. To accomplish that, we can use the runtime_config we discussed in the Simple task running section.

fromedison_clientimportEdisonClient, JobNamesclient=EdisonClient(
api_key="your_api_key",
)
task_data= {"name": JobNames.LITERATURE, "query": "How many species of birds are there?"}
task_id=client.create_task(task_data)
continued_task_data= {
"name": JobNames.LITERATURE,
"query": "From the previous answer, specifically, how many species of crows are there?",
"runtime_config": {"continued_job_id": task_id},
}
task_result=client.run_tasks_until_done(continued_task_data)

Asynchronous tasks

Sometimes you may want to submit many jobs, while querying results at a later time. In this way you can do other things while waiting for a response. The platform API supports this as well rather than waiting for a result.

fromedison_clientimportEdisonClientclient=EdisonClient(
api_key="your_api_key",
)
task_data= {"name": JobNames.LITERATURE, "query": "How many species of birds are there?"}
task_id=client.create_task(task_data)
# move on to do other thingstask_status=client.get_task(task_id)

task_status contains information about the task. For instance, its status, task, environment_name and agent_name, and other fields specific to the job. You can continually query the status until it's success before moving on.

About

Documentation and tutorials for the FutureHouse platform API

Resources

Stars

9 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors