Capabilities, Resources & Archetypes
Every provider model card is annotated with three controlled vocabularies that describe what a provider is:
archetype— where it sits on the spectrum from pure retrieval to an autonomous co-scientist.capabilities— the functional things it can do (verbs).resources— the data sources / knowledge bases it wraps (nouns).
These vocabularies are defined once, authoritatively, in the LinkML schema at
src/deep_research_client/schema/deep_research_client.yaml and generated into
Pydantic enums under src/deep_research_client/datamodel/. To change them, edit
the schema and run just gen-datamodel — never hand-edit the generated file.
Deep research is a subset of the co-scientist case
It is useful to see the providers as points on a single spectrum. A conventional "deep research" tool searches a corpus and writes a cited report. An autonomous co-scientist does that and more: it forms hypotheses, executes code against biomedical data, and can design experiments. In other words, a deep-research run is essentially a subset of what a co-scientist does — sometimes traded off against more sophisticated literature-scanning algorithms on the retrieval side.
The ProviderArchetype enum makes this ordering explicit (each archetype is
broadly a superset of the previous one):
| Rank | Archetype | What it does | Examples |
|---|---|---|---|
| 1 | retriever |
Returns retrieved evidence (papers, passages, snippets) with no authored synthesis. | Asta |
| 2 | synthesizer |
Searches one or more corpora and writes a cited narrative report — the classic "deep research" tool. | OpenAI Deep Research, Perplexity, Consensus, Edison/Falcon |
| 3 | agentic_researcher |
A multi-step agent that plans, browses, and may run tools/code, still oriented around producing a written answer. | Claude Code, Cyberian, DeepER-Med |
| 4 | co_scientist |
An autonomous scientific agent that forms and tests hypotheses, runs code against biomedical data, and can design experiments. | OpenScientist, Biomni |
retriever ⊂ synthesizer ⊂ agentic_researcher ⊂ co_scientist
(deep research) (hypothesis-driven,
runs code)
Capabilities
ResearchCapability — the functional capabilities a provider exposes. The
historical ModelCapability set (web_search, academic_search,
scientific_literature, citation_tracking, real_time_data,
code_interpretation, visual_analysis, multi_language) is retained as a
compatibility enum. Its original UPPER_CASE members and standard enum lookup
(for example, ModelCapability.WEB_SEARCH and
ModelCapability["WEB_SEARCH"]) keep their historical behavior and string
values. New code should use the schema-generated lowercase members such as
ResearchCapability.web_search. The remaining values below were added to
describe co-scientist behavior.
| Capability | Meaning |
|---|---|
web_search |
Searches the open web for current information. |
academic_search |
Searches curated academic / scholarly corpora. |
scientific_literature |
Specialised search / analysis over scientific literature. |
citation_tracking |
Produces and tracks structured citations. |
real_time_data |
Can access recent / real-time information. |
code_interpretation |
Executes code (analysis, computation, plotting). |
visual_analysis |
Interprets or generates figures and charts. |
multi_language |
Operates across multiple natural languages. |
retrieval_only |
Returns retrieved evidence verbatim, no synthesis. |
evidence_synthesis |
Synthesises sources into an authored report. |
hypothesis_generation |
Proposes testable scientific hypotheses. |
experiment_design |
Designs experiments / analysis plans. |
data_analysis |
Analyses structured biomedical / experimental datasets. |
retrieval_only and evidence_synthesis are the two terms tied to the
archetype axis, and a test enforces the part this page states rather than
leaving it to convention: a retriever carries retrieval_only and nothing
else does, and a synthesizer — the archetype whose definition is evidence
synthesis — carries evidence_synthesis.
Agentic researchers and co-scientists are not required to carry it. Every one
shipped today does, and find_models_by_capability(evidence_synthesis)
accordingly returns the deep-research tools and the co-scientists. But a
co-scientist is defined by forming and testing hypotheses, not by writing a
report, so one that returned a ranked hypothesis list instead would be
annotated honestly rather than forced to claim the capability.
Resources
ResearchResource — the data sources and knowledge bases a provider wraps. A
capability is a verb (what it does); a resource is a noun (what it can
reach). pubmed is a resource; code_interpretation is a capability.
| Resource | Examples |
|---|---|
general_web |
The open web. |
pubmed |
PubMed / MEDLINE. |
semantic_scholar |
Semantic Scholar corpus. |
arxiv |
arXiv preprints. |
preprint_servers |
bioRxiv / medRxiv. |
clinical_trials |
ClinicalTrials.gov and similar registries. |
biomedical_databases |
Curated disease / pathway / drug knowledge bases. |
genomic_databases |
Ensembl, ClinVar, etc. |
chemical_databases |
PubChem, ChEMBL, etc. |
protein_structure_databases |
UniProt, PDB, etc. |
Querying by capability, resource, or archetype
The vocabularies are queryable across all registered providers:
from deep_research_client import (
find_models_by_capability,
find_models_by_resource,
find_models_by_archetype,
ResearchCapability,
ResearchResource,
ProviderArchetype,
)
# Which providers run code?
find_models_by_capability(ResearchCapability.code_interpretation)
# Which providers reach PubMed?
find_models_by_resource(ResearchResource.pubmed)
# Which providers are full co-scientists?
find_models_by_archetype(ProviderArchetype.co_scientist) # -> openscientist, biomni
The same three axes are available from the CLI:
deep-research-client models --capability code_interpretation
deep-research-client models --resource pubmed
deep-research-client models --archetype co_scientist
Filters combine, so a conjunction asks the question it looks like it asks:
# Co-scientists that reach PubMed, not every co-scientist
deep-research-client models --archetype co_scientist --resource pubmed
Passing an unrecognised term lists the whole vocabulary, which is derived from the enum — so a value added to the schema appears in the help and the error message without anyone editing them. A filter that matches nothing says so rather than printing an empty result.
Each returns a {provider_name: [ModelCard, ...]} mapping.