Repository files navigation

ElyteOS / ElyteAgent

Version: 1.0.1 Authors: Yuhan Chen, Hongyi Lin, Tianyi Zhang, Venkatasubramanian Viswanathan License: MIT Paper:ElyteAgent: A Multi-Agent Workflow for Autonomous Electrolyte ExperimentationCode & data:https://github.com/BattModels/ElyteAgent.git


Overview

This repository contains ElyteOS, the experiment orchestration and data-management layer for autonomous electrolyte research, together with the Agent module (src/Agent/) that implements ElyteAgent — a multi-agent, LLM-driven workflow for feasibility-aware autonomous electrolyte experimentation, described in the accompanying paper.

ElyteAgent coordinates three experimental/software infrastructures:

  • Clio — the robotic platform that prepares electrolyte samples by mixing predefined feeder solutions and measures transport properties (ionic conductivity, density, viscosity).
  • SALSA — an automated solubility-testing add-on that determines experimentally accessible salt concentration bounds via an excess-solvent, camera-monitored dissolution workflow.
  • ElyteOS (this repo) — the software layer that handles device control, experiment-token representation, inventory tracking, scheduling, logging, database storage, and visualization.

Rather than a single monolithic automation script, ElyteAgent divides an experimental campaign into four specialized LLM agents that translate natural-language scientific objectives into validated, executable, solubility- and inventory-constrained robotic experiments — recovering from tool-level and hardware-level errors along the way.


Software Architecture

ElyteAgent is organized around four agents (see Fig. 1 of the paper), implemented on top of LangGraph (v0.4.8) with GPT-4o-mini (snapshot 2024-07-18) as the underlying LLM:

Agent (paper)Log tag (code)Responsibility
Conversation AgentCONVERSATION_AGENTParses natural-language requests into a structured electrolyte design space (solvents, salts, concentration bounds) and generates initial candidate compositions via hit-and-run sampling. Writes design-space metadata and composition tokens to the session file.
Manager AgentMONITOR_AGENTValidates candidate compositions from the Conversation or Optimization agent against feeder-solution inventory, remaining volume, and SALSA-derived solubility bounds. Rejects infeasible formulations, queues feasible ones, tracks Experiment Agent status, and stores completed results in the database.
Experiment AgentEXPERIMENT_AGENTExecutes validated experiments through ElyteOS, routing to Clio (electrolyte prep/property measurement) or SALSA (solubility characterization). Maintains a status tracker (progress, results, equipment status, errors); retries failed steps and, if unrecoverable, reports to the Manager Agent — resuming from the last checkpoint once resolved rather than restarting.
Optimization AgentOPTIMIZATION_AGENTProposes new candidate formulations from accumulated results using Bayesian Optimization (upper-confidence-bound acquisition function over a k-nearest-neighbors surrogate model), balancing exploration and exploitation. Runs until convergence, the requested trial count is reached, or feeder solutions are exhausted.

Every experiment is represented as a shared composition token:

solvent identities|solvent fractions|salt identities|salt molalities

e.g. H2O|100|NaNO3|5.39 — a 100% H₂O solvent with 5.39 mol/kg NaNO₃. This token, plus a shared session file (design space, sampled/queued/completed experiments, optimization state), lets all four agents exchange experiment definitions without manual translation.

Design-level errors (invalid tokens, missing solvents/salts, out-of-bound concentrations, insufficient inventory) are caught by the Manager Agent before anything reaches the hardware. Hardware-execution errors (device faults, communication failures, failed measurements) are caught by the Experiment Agent, which retries and, if needed, escalates while preserving state for resumption.


Project Structure

EEG-Clio-Database-master/
├── Main-backup.py
├── requirements.txt
├── License.txt / NOTICE.txt
└── src/
├── Main.py # Dash GUI entry point
├── Agent/ # ElyteAgent: LLM multi-agent orchestration layer
│ ├── Agent.py # agent graph (LangGraph), logging, Azure OpenAI setup
│ ├── Tools.py # design-space / composition-ID tools (Conversation Agent)
│ ├── Experiment_Tools.py # hardware-control tools (Experiment Agent)
│ ├── BeysianOptimization.py # Optuna/BO-based optimizer (Optimization Agent)
│ ├── JSONHelper/ # system prompts + tool descriptions
│ ├── Generated JSON/ # saved experiment queues / session files
│ └── conversation_history/ # per-run agent execution logs
├── Equipment_Control/ # Serial/HID drivers for pumps, valves, balance,
│ # potentiostat, viscometer, thermometer, camera (Clio/SALSA hardware)
├── Database/ # Solvent/salt molar mass tables, DB pipeline
├── Db/ # SQLite databases
├── pspython/ # PalmSens potentiostat Python bindings
└── assets/ # Dash static assets (logo, CSS)

Installation Instructions

Software Prerequisites

  • Operating System: Windows 10
  • Python Version: Python 3.8 or higher
  • (Agent layer only) An Azure OpenAI resource with a deployed chat-completion model (the published results use a GPT-4o-mini snapshot, 2024-07-18)

Installation steps

  1. Open a terminal and navigate to the project folder.
  2. Install the core (GUI + equipment control) dependencies:
    pip install -r requirements.txt
  3. Install the additional dependencies required by the Agent layer (not currently pinned in requirements.txt):
    pip install langchain langchain-core "langgraph==0.4.8" langchain-openai openai optuna opencv-python
  4. Locate your Python package install directory:
    pip show dash
    Look for the Location: line in the output and copy that path.
  5. Move the pspython folder into that install directory (needed for PalmSens potentiostat communication):
    move pspython /path/to/python/site-packages/
  6. Configure Azure OpenAI credentials for the Agent layer as environment variables before launching the app:
    set AZURE_OPENAI_ENDPOINT=https://<your-resource-name>.openai.azure.com/
    set AZURE_OPENAI_API_KEY=<your-key>
    or place them in a local .env file that is excluded from version control via .gitignore.

Usage

Key Features

  • End-to-end automated pipeline for lab equipment (Clio, SALSA) to conduct electrolyte experiments.
  • Natural-language experiment design, feasibility validation, execution monitoring, and error recovery via ElyteAgent.
  • Bayesian-optimization-driven, closed-loop suggestion of new experimental conditions (upper-confidence-bound acquisition on a k-NN surrogate).
  • Durable storage of all experiment data, metadata, and session state.
  • Data retrieval, filtering, and visualization through the GUI.

Running the GUI

  1. Open a terminal and navigate to the project folder.
  2. Run:
    python Main.py
  3. Open a browser to http://localhost:8050.

Run an experiment (ElyteAgent / conversational)

Instead of manually building a composition ID, describe the campaign in natural language — e.g. "Explore aqueous NaNO3 with molality ≤ 9 mol/kg and Li2SO4 with molality ≤ 2.5 mol/kg" — and:

  1. The Conversation Agent infers H₂O as the (fixed, 100%) solvent, sets NaNO₃/Li₂SO₄ as design variables with the given bounds, and hit-and-run samples initial candidate compositions into the session file.
  2. The Manager Agent checks each candidate against feeder-solution inventory and SALSA-derived solubility limits, rejecting infeasible formulations (e.g. two salts that numerically fit their own bounds but together exceed available feeder volume) and queuing the rest.
  3. The Experiment Agent runs the physical Clio/SALSA sequence (prepare → start_new_experiment → make_solvent → measure_mass → measure_conductivity → measure_viscosity → measure_temperature → finish_measurement, or the solubility variant: add_salt → add_solvent → stir_liquid → detect_dissolution_status), reporting results or surfacing hardware errors (e.g. "Vial cannot be detected") for you to resolve — you can then say "Please resume the experiment" to continue from the last checkpoint rather than starting over.
  4. The Optimization Agent uses completed results to propose the next batch of candidate compositions, closing the loop until convergence, the requested trial count, or feeder-solution exhaustion.

Agent conversations and tool calls are logged per-run under src/Agent/conversation_history/, and each generated experiment queue / session file is saved as timestamped JSON under src/Agent/Generated JSON/.

Acknowledgements

This work was supported by the Toyota Research Institute.

License

The code is licensed under MIT.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

ElyteOS / ElyteAgent

Version: 1.0.1 Authors: Yuhan Chen, Hongyi Lin, Tianyi Zhang, Venkatasubramanian Viswanathan License: MIT Paper:ElyteAgent: A Multi-Agent Workflow for Autonomous Electrolyte ExperimentationCode & data:https://github.com/BattModels/ElyteAgent.git


Overview

This repository contains ElyteOS, the experiment orchestration and data-management layer for autonomous electrolyte research, together with the Agent module (src/Agent/) that implements ElyteAgent — a multi-agent, LLM-driven workflow for feasibility-aware autonomous electrolyte experimentation, described in the accompanying paper.

ElyteAgent coordinates three experimental/software infrastructures:

  • Clio — the robotic platform that prepares electrolyte samples by mixing predefined feeder solutions and measures transport properties (ionic conductivity, density, viscosity).
  • SALSA — an automated solubility-testing add-on that determines experimentally accessible salt concentration bounds via an excess-solvent, camera-monitored dissolution workflow.
  • ElyteOS (this repo) — the software layer that handles device control, experiment-token representation, inventory tracking, scheduling, logging, database storage, and visualization.

Rather than a single monolithic automation script, ElyteAgent divides an experimental campaign into four specialized LLM agents that translate natural-language scientific objectives into validated, executable, solubility- and inventory-constrained robotic experiments — recovering from tool-level and hardware-level errors along the way.


Software Architecture

ElyteAgent is organized around four agents (see Fig. 1 of the paper), implemented on top of LangGraph (v0.4.8) with GPT-4o-mini (snapshot 2024-07-18) as the underlying LLM:

Agent (paper)Log tag (code)Responsibility
Conversation AgentCONVERSATION_AGENTParses natural-language requests into a structured electrolyte design space (solvents, salts, concentration bounds) and generates initial candidate compositions via hit-and-run sampling. Writes design-space metadata and composition tokens to the session file.
Manager AgentMONITOR_AGENTValidates candidate compositions from the Conversation or Optimization agent against feeder-solution inventory, remaining volume, and SALSA-derived solubility bounds. Rejects infeasible formulations, queues feasible ones, tracks Experiment Agent status, and stores completed results in the database.
Experiment AgentEXPERIMENT_AGENTExecutes validated experiments through ElyteOS, routing to Clio (electrolyte prep/property measurement) or SALSA (solubility characterization). Maintains a status tracker (progress, results, equipment status, errors); retries failed steps and, if unrecoverable, reports to the Manager Agent — resuming from the last checkpoint once resolved rather than restarting.
Optimization AgentOPTIMIZATION_AGENTProposes new candidate formulations from accumulated results using Bayesian Optimization (upper-confidence-bound acquisition function over a k-nearest-neighbors surrogate model), balancing exploration and exploitation. Runs until convergence, the requested trial count is reached, or feeder solutions are exhausted.

Every experiment is represented as a shared composition token:

solvent identities|solvent fractions|salt identities|salt molalities

e.g. H2O|100|NaNO3|5.39 — a 100% H₂O solvent with 5.39 mol/kg NaNO₃. This token, plus a shared session file (design space, sampled/queued/completed experiments, optimization state), lets all four agents exchange experiment definitions without manual translation.

Design-level errors (invalid tokens, missing solvents/salts, out-of-bound concentrations, insufficient inventory) are caught by the Manager Agent before anything reaches the hardware. Hardware-execution errors (device faults, communication failures, failed measurements) are caught by the Experiment Agent, which retries and, if needed, escalates while preserving state for resumption.


Project Structure

EEG-Clio-Database-master/
├── Main-backup.py
├── requirements.txt
├── License.txt / NOTICE.txt
└── src/
├── Main.py # Dash GUI entry point
├── Agent/ # ElyteAgent: LLM multi-agent orchestration layer
│ ├── Agent.py # agent graph (LangGraph), logging, Azure OpenAI setup
│ ├── Tools.py # design-space / composition-ID tools (Conversation Agent)
│ ├── Experiment_Tools.py # hardware-control tools (Experiment Agent)
│ ├── BeysianOptimization.py # Optuna/BO-based optimizer (Optimization Agent)
│ ├── JSONHelper/ # system prompts + tool descriptions
│ ├── Generated JSON/ # saved experiment queues / session files
│ └── conversation_history/ # per-run agent execution logs
├── Equipment_Control/ # Serial/HID drivers for pumps, valves, balance,
│ # potentiostat, viscometer, thermometer, camera (Clio/SALSA hardware)
├── Database/ # Solvent/salt molar mass tables, DB pipeline
├── Db/ # SQLite databases
├── pspython/ # PalmSens potentiostat Python bindings
└── assets/ # Dash static assets (logo, CSS)

Installation Instructions

Software Prerequisites

  • Operating System: Windows 10
  • Python Version: Python 3.8 or higher
  • (Agent layer only) An Azure OpenAI resource with a deployed chat-completion model (the published results use a GPT-4o-mini snapshot, 2024-07-18)

Installation steps

  1. Open a terminal and navigate to the project folder.
  2. Install the core (GUI + equipment control) dependencies:
    pip install -r requirements.txt
  3. Install the additional dependencies required by the Agent layer (not currently pinned in requirements.txt):
    pip install langchain langchain-core "langgraph==0.4.8" langchain-openai openai optuna opencv-python
  4. Locate your Python package install directory:
    pip show dash
    Look for the Location: line in the output and copy that path.
  5. Move the pspython folder into that install directory (needed for PalmSens potentiostat communication):
    move pspython /path/to/python/site-packages/
  6. Configure Azure OpenAI credentials for the Agent layer as environment variables before launching the app:
    set AZURE_OPENAI_ENDPOINT=https://<your-resource-name>.openai.azure.com/
    set AZURE_OPENAI_API_KEY=<your-key>
    or place them in a local .env file that is excluded from version control via .gitignore.

Usage

Key Features

  • End-to-end automated pipeline for lab equipment (Clio, SALSA) to conduct electrolyte experiments.
  • Natural-language experiment design, feasibility validation, execution monitoring, and error recovery via ElyteAgent.
  • Bayesian-optimization-driven, closed-loop suggestion of new experimental conditions (upper-confidence-bound acquisition on a k-NN surrogate).
  • Durable storage of all experiment data, metadata, and session state.
  • Data retrieval, filtering, and visualization through the GUI.

Running the GUI

  1. Open a terminal and navigate to the project folder.
  2. Run:
    python Main.py
  3. Open a browser to http://localhost:8050.

Run an experiment (ElyteAgent / conversational)

Instead of manually building a composition ID, describe the campaign in natural language — e.g. "Explore aqueous NaNO3 with molality ≤ 9 mol/kg and Li2SO4 with molality ≤ 2.5 mol/kg" — and:

  1. The Conversation Agent infers H₂O as the (fixed, 100%) solvent, sets NaNO₃/Li₂SO₄ as design variables with the given bounds, and hit-and-run samples initial candidate compositions into the session file.
  2. The Manager Agent checks each candidate against feeder-solution inventory and SALSA-derived solubility limits, rejecting infeasible formulations (e.g. two salts that numerically fit their own bounds but together exceed available feeder volume) and queuing the rest.
  3. The Experiment Agent runs the physical Clio/SALSA sequence (prepare → start_new_experiment → make_solvent → measure_mass → measure_conductivity → measure_viscosity → measure_temperature → finish_measurement, or the solubility variant: add_salt → add_solvent → stir_liquid → detect_dissolution_status), reporting results or surfacing hardware errors (e.g. "Vial cannot be detected") for you to resolve — you can then say "Please resume the experiment" to continue from the last checkpoint rather than starting over.
  4. The Optimization Agent uses completed results to propose the next batch of candidate compositions, closing the loop until convergence, the requested trial count, or feeder-solution exhaustion.

Agent conversations and tool calls are logged per-run under src/Agent/conversation_history/, and each generated experiment queue / session file is saved as timestamped JSON under src/Agent/Generated JSON/.

Acknowledgements

This work was supported by the Toyota Research Institute.

License

The code is licensed under MIT.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ElyteOS / ElyteAgent

Version: 1.0.1 Authors: Yuhan Chen, Hongyi Lin, Tianyi Zhang, Venkatasubramanian Viswanathan License: MIT Paper:ElyteAgent: A Multi-Agent Workflow for Autonomous Electrolyte ExperimentationCode & data:https://github.com/BattModels/ElyteAgent.git


Overview

This repository contains ElyteOS, the experiment orchestration and data-management layer for autonomous electrolyte research, together with the Agent module (src/Agent/) that implements ElyteAgent — a multi-agent, LLM-driven workflow for feasibility-aware autonomous electrolyte experimentation, described in the accompanying paper.

ElyteAgent coordinates three experimental/software infrastructures:

  • Clio — the robotic platform that prepares electrolyte samples by mixing predefined feeder solutions and measures transport properties (ionic conductivity, density, viscosity).
  • SALSA — an automated solubility-testing add-on that determines experimentally accessible salt concentration bounds via an excess-solvent, camera-monitored dissolution workflow.
  • ElyteOS (this repo) — the software layer that handles device control, experiment-token representation, inventory tracking, scheduling, logging, database storage, and visualization.

Rather than a single monolithic automation script, ElyteAgent divides an experimental campaign into four specialized LLM agents that translate natural-language scientific objectives into validated, executable, solubility- and inventory-constrained robotic experiments — recovering from tool-level and hardware-level errors along the way.


Software Architecture

ElyteAgent is organized around four agents (see Fig. 1 of the paper), implemented on top of LangGraph (v0.4.8) with GPT-4o-mini (snapshot 2024-07-18) as the underlying LLM:

Agent (paper)Log tag (code)Responsibility
Conversation AgentCONVERSATION_AGENTParses natural-language requests into a structured electrolyte design space (solvents, salts, concentration bounds) and generates initial candidate compositions via hit-and-run sampling. Writes design-space metadata and composition tokens to the session file.
Manager AgentMONITOR_AGENTValidates candidate compositions from the Conversation or Optimization agent against feeder-solution inventory, remaining volume, and SALSA-derived solubility bounds. Rejects infeasible formulations, queues feasible ones, tracks Experiment Agent status, and stores completed results in the database.
Experiment AgentEXPERIMENT_AGENTExecutes validated experiments through ElyteOS, routing to Clio (electrolyte prep/property measurement) or SALSA (solubility characterization). Maintains a status tracker (progress, results, equipment status, errors); retries failed steps and, if unrecoverable, reports to the Manager Agent — resuming from the last checkpoint once resolved rather than restarting.
Optimization AgentOPTIMIZATION_AGENTProposes new candidate formulations from accumulated results using Bayesian Optimization (upper-confidence-bound acquisition function over a k-nearest-neighbors surrogate model), balancing exploration and exploitation. Runs until convergence, the requested trial count is reached, or feeder solutions are exhausted.

Every experiment is represented as a shared composition token:

solvent identities|solvent fractions|salt identities|salt molalities

e.g. H2O|100|NaNO3|5.39 — a 100% H₂O solvent with 5.39 mol/kg NaNO₃. This token, plus a shared session file (design space, sampled/queued/completed experiments, optimization state), lets all four agents exchange experiment definitions without manual translation.

Design-level errors (invalid tokens, missing solvents/salts, out-of-bound concentrations, insufficient inventory) are caught by the Manager Agent before anything reaches the hardware. Hardware-execution errors (device faults, communication failures, failed measurements) are caught by the Experiment Agent, which retries and, if needed, escalates while preserving state for resumption.


Project Structure

EEG-Clio-Database-master/
├── Main-backup.py
├── requirements.txt
├── License.txt / NOTICE.txt
└── src/
├── Main.py # Dash GUI entry point
├── Agent/ # ElyteAgent: LLM multi-agent orchestration layer
│ ├── Agent.py # agent graph (LangGraph), logging, Azure OpenAI setup
│ ├── Tools.py # design-space / composition-ID tools (Conversation Agent)
│ ├── Experiment_Tools.py # hardware-control tools (Experiment Agent)
│ ├── BeysianOptimization.py # Optuna/BO-based optimizer (Optimization Agent)
│ ├── JSONHelper/ # system prompts + tool descriptions
│ ├── Generated JSON/ # saved experiment queues / session files
│ └── conversation_history/ # per-run agent execution logs
├── Equipment_Control/ # Serial/HID drivers for pumps, valves, balance,
│ # potentiostat, viscometer, thermometer, camera (Clio/SALSA hardware)
├── Database/ # Solvent/salt molar mass tables, DB pipeline
├── Db/ # SQLite databases
├── pspython/ # PalmSens potentiostat Python bindings
└── assets/ # Dash static assets (logo, CSS)

Installation Instructions

Software Prerequisites

  • Operating System: Windows 10
  • Python Version: Python 3.8 or higher
  • (Agent layer only) An Azure OpenAI resource with a deployed chat-completion model (the published results use a GPT-4o-mini snapshot, 2024-07-18)

Installation steps

  1. Open a terminal and navigate to the project folder.
  2. Install the core (GUI + equipment control) dependencies:
    pip install -r requirements.txt
  3. Install the additional dependencies required by the Agent layer (not currently pinned in requirements.txt):
    pip install langchain langchain-core "langgraph==0.4.8" langchain-openai openai optuna opencv-python
  4. Locate your Python package install directory:
    pip show dash
    Look for the Location: line in the output and copy that path.
  5. Move the pspython folder into that install directory (needed for PalmSens potentiostat communication):
    move pspython /path/to/python/site-packages/
  6. Configure Azure OpenAI credentials for the Agent layer as environment variables before launching the app:
    set AZURE_OPENAI_ENDPOINT=https://<your-resource-name>.openai.azure.com/
    set AZURE_OPENAI_API_KEY=<your-key>
    or place them in a local .env file that is excluded from version control via .gitignore.

Usage

Key Features

  • End-to-end automated pipeline for lab equipment (Clio, SALSA) to conduct electrolyte experiments.
  • Natural-language experiment design, feasibility validation, execution monitoring, and error recovery via ElyteAgent.
  • Bayesian-optimization-driven, closed-loop suggestion of new experimental conditions (upper-confidence-bound acquisition on a k-NN surrogate).
  • Durable storage of all experiment data, metadata, and session state.
  • Data retrieval, filtering, and visualization through the GUI.

Running the GUI

  1. Open a terminal and navigate to the project folder.
  2. Run:
    python Main.py
  3. Open a browser to http://localhost:8050.

Run an experiment (ElyteAgent / conversational)

Instead of manually building a composition ID, describe the campaign in natural language — e.g. "Explore aqueous NaNO3 with molality ≤ 9 mol/kg and Li2SO4 with molality ≤ 2.5 mol/kg" — and:

  1. The Conversation Agent infers H₂O as the (fixed, 100%) solvent, sets NaNO₃/Li₂SO₄ as design variables with the given bounds, and hit-and-run samples initial candidate compositions into the session file.
  2. The Manager Agent checks each candidate against feeder-solution inventory and SALSA-derived solubility limits, rejecting infeasible formulations (e.g. two salts that numerically fit their own bounds but together exceed available feeder volume) and queuing the rest.
  3. The Experiment Agent runs the physical Clio/SALSA sequence (prepare → start_new_experiment → make_solvent → measure_mass → measure_conductivity → measure_viscosity → measure_temperature → finish_measurement, or the solubility variant: add_salt → add_solvent → stir_liquid → detect_dissolution_status), reporting results or surfacing hardware errors (e.g. "Vial cannot be detected") for you to resolve — you can then say "Please resume the experiment" to continue from the last checkpoint rather than starting over.
  4. The Optimization Agent uses completed results to propose the next batch of candidate compositions, closing the loop until convergence, the requested trial count, or feeder-solution exhaustion.

Agent conversations and tool calls are logged per-run under src/Agent/conversation_history/, and each generated experiment queue / session file is saved as timestamped JSON under src/Agent/Generated JSON/.

Acknowledgements

This work was supported by the Toyota Research Institute.

License

The code is licensed under MIT.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ElyteOS / ElyteAgent

Version: 1.0.1 Authors: Yuhan Chen, Hongyi Lin, Tianyi Zhang, Venkatasubramanian Viswanathan License: MIT Paper:ElyteAgent: A Multi-Agent Workflow for Autonomous Electrolyte ExperimentationCode & data:https://github.com/BattModels/ElyteAgent.git


Overview

This repository contains ElyteOS, the experiment orchestration and data-management layer for autonomous electrolyte research, together with the Agent module (src/Agent/) that implements ElyteAgent — a multi-agent, LLM-driven workflow for feasibility-aware autonomous electrolyte experimentation, described in the accompanying paper.

ElyteAgent coordinates three experimental/software infrastructures:

  • Clio — the robotic platform that prepares electrolyte samples by mixing predefined feeder solutions and measures transport properties (ionic conductivity, density, viscosity).
  • SALSA — an automated solubility-testing add-on that determines experimentally accessible salt concentration bounds via an excess-solvent, camera-monitored dissolution workflow.
  • ElyteOS (this repo) — the software layer that handles device control, experiment-token representation, inventory tracking, scheduling, logging, database storage, and visualization.

Rather than a single monolithic automation script, ElyteAgent divides an experimental campaign into four specialized LLM agents that translate natural-language scientific objectives into validated, executable, solubility- and inventory-constrained robotic experiments — recovering from tool-level and hardware-level errors along the way.


Software Architecture

ElyteAgent is organized around four agents (see Fig. 1 of the paper), implemented on top of LangGraph (v0.4.8) with GPT-4o-mini (snapshot 2024-07-18) as the underlying LLM:

Agent (paper)Log tag (code)Responsibility
Conversation AgentCONVERSATION_AGENTParses natural-language requests into a structured electrolyte design space (solvents, salts, concentration bounds) and generates initial candidate compositions via hit-and-run sampling. Writes design-space metadata and composition tokens to the session file.
Manager AgentMONITOR_AGENTValidates candidate compositions from the Conversation or Optimization agent against feeder-solution inventory, remaining volume, and SALSA-derived solubility bounds. Rejects infeasible formulations, queues feasible ones, tracks Experiment Agent status, and stores completed results in the database.
Experiment AgentEXPERIMENT_AGENTExecutes validated experiments through ElyteOS, routing to Clio (electrolyte prep/property measurement) or SALSA (solubility characterization). Maintains a status tracker (progress, results, equipment status, errors); retries failed steps and, if unrecoverable, reports to the Manager Agent — resuming from the last checkpoint once resolved rather than restarting.
Optimization AgentOPTIMIZATION_AGENTProposes new candidate formulations from accumulated results using Bayesian Optimization (upper-confidence-bound acquisition function over a k-nearest-neighbors surrogate model), balancing exploration and exploitation. Runs until convergence, the requested trial count is reached, or feeder solutions are exhausted.

Every experiment is represented as a shared composition token:

solvent identities|solvent fractions|salt identities|salt molalities

e.g. H2O|100|NaNO3|5.39 — a 100% H₂O solvent with 5.39 mol/kg NaNO₃. This token, plus a shared session file (design space, sampled/queued/completed experiments, optimization state), lets all four agents exchange experiment definitions without manual translation.

Design-level errors (invalid tokens, missing solvents/salts, out-of-bound concentrations, insufficient inventory) are caught by the Manager Agent before anything reaches the hardware. Hardware-execution errors (device faults, communication failures, failed measurements) are caught by the Experiment Agent, which retries and, if needed, escalates while preserving state for resumption.


Project Structure

EEG-Clio-Database-master/
├── Main-backup.py
├── requirements.txt
├── License.txt / NOTICE.txt
└── src/
├── Main.py # Dash GUI entry point
├── Agent/ # ElyteAgent: LLM multi-agent orchestration layer
│ ├── Agent.py # agent graph (LangGraph), logging, Azure OpenAI setup
│ ├── Tools.py # design-space / composition-ID tools (Conversation Agent)
│ ├── Experiment_Tools.py # hardware-control tools (Experiment Agent)
│ ├── BeysianOptimization.py # Optuna/BO-based optimizer (Optimization Agent)
│ ├── JSONHelper/ # system prompts + tool descriptions
│ ├── Generated JSON/ # saved experiment queues / session files
│ └── conversation_history/ # per-run agent execution logs
├── Equipment_Control/ # Serial/HID drivers for pumps, valves, balance,
│ # potentiostat, viscometer, thermometer, camera (Clio/SALSA hardware)
├── Database/ # Solvent/salt molar mass tables, DB pipeline
├── Db/ # SQLite databases
├── pspython/ # PalmSens potentiostat Python bindings
└── assets/ # Dash static assets (logo, CSS)

Installation Instructions

Software Prerequisites

  • Operating System: Windows 10
  • Python Version: Python 3.8 or higher
  • (Agent layer only) An Azure OpenAI resource with a deployed chat-completion model (the published results use a GPT-4o-mini snapshot, 2024-07-18)

Installation steps

  1. Open a terminal and navigate to the project folder.
  2. Install the core (GUI + equipment control) dependencies:
    pip install -r requirements.txt
  3. Install the additional dependencies required by the Agent layer (not currently pinned in requirements.txt):
    pip install langchain langchain-core "langgraph==0.4.8" langchain-openai openai optuna opencv-python
  4. Locate your Python package install directory:
    pip show dash
    Look for the Location: line in the output and copy that path.
  5. Move the pspython folder into that install directory (needed for PalmSens potentiostat communication):
    move pspython /path/to/python/site-packages/
  6. Configure Azure OpenAI credentials for the Agent layer as environment variables before launching the app:
    set AZURE_OPENAI_ENDPOINT=https://<your-resource-name>.openai.azure.com/
    set AZURE_OPENAI_API_KEY=<your-key>
    or place them in a local .env file that is excluded from version control via .gitignore.

Usage

Key Features

  • End-to-end automated pipeline for lab equipment (Clio, SALSA) to conduct electrolyte experiments.
  • Natural-language experiment design, feasibility validation, execution monitoring, and error recovery via ElyteAgent.
  • Bayesian-optimization-driven, closed-loop suggestion of new experimental conditions (upper-confidence-bound acquisition on a k-NN surrogate).
  • Durable storage of all experiment data, metadata, and session state.
  • Data retrieval, filtering, and visualization through the GUI.

Running the GUI

  1. Open a terminal and navigate to the project folder.
  2. Run:
    python Main.py
  3. Open a browser to http://localhost:8050.

Run an experiment (ElyteAgent / conversational)

Instead of manually building a composition ID, describe the campaign in natural language — e.g. "Explore aqueous NaNO3 with molality ≤ 9 mol/kg and Li2SO4 with molality ≤ 2.5 mol/kg" — and:

  1. The Conversation Agent infers H₂O as the (fixed, 100%) solvent, sets NaNO₃/Li₂SO₄ as design variables with the given bounds, and hit-and-run samples initial candidate compositions into the session file.
  2. The Manager Agent checks each candidate against feeder-solution inventory and SALSA-derived solubility limits, rejecting infeasible formulations (e.g. two salts that numerically fit their own bounds but together exceed available feeder volume) and queuing the rest.
  3. The Experiment Agent runs the physical Clio/SALSA sequence (prepare → start_new_experiment → make_solvent → measure_mass → measure_conductivity → measure_viscosity → measure_temperature → finish_measurement, or the solubility variant: add_salt → add_solvent → stir_liquid → detect_dissolution_status), reporting results or surfacing hardware errors (e.g. "Vial cannot be detected") for you to resolve — you can then say "Please resume the experiment" to continue from the last checkpoint rather than starting over.
  4. The Optimization Agent uses completed results to propose the next batch of candidate compositions, closing the loop until convergence, the requested trial count, or feeder-solution exhaustion.

Agent conversations and tool calls are logged per-run under src/Agent/conversation_history/, and each generated experiment queue / session file is saved as timestamped JSON under src/Agent/Generated JSON/.

Acknowledgements

This work was supported by the Toyota Research Institute.

License

The code is licensed under MIT.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

ElyteOS / ElyteAgent

Version: 1.0.1 Authors: Yuhan Chen, Hongyi Lin, Tianyi Zhang, Venkatasubramanian Viswanathan License: MIT Paper:ElyteAgent: A Multi-Agent Workflow for Autonomous Electrolyte ExperimentationCode & data:https://github.com/BattModels/ElyteAgent.git


Overview

This repository contains ElyteOS, the experiment orchestration and data-management layer for autonomous electrolyte research, together with the Agent module (src/Agent/) that implements ElyteAgent — a multi-agent, LLM-driven workflow for feasibility-aware autonomous electrolyte experimentation, described in the accompanying paper.

ElyteAgent coordinates three experimental/software infrastructures:

  • Clio — the robotic platform that prepares electrolyte samples by mixing predefined feeder solutions and measures transport properties (ionic conductivity, density, viscosity).
  • SALSA — an automated solubility-testing add-on that determines experimentally accessible salt concentration bounds via an excess-solvent, camera-monitored dissolution workflow.
  • ElyteOS (this repo) — the software layer that handles device control, experiment-token representation, inventory tracking, scheduling, logging, database storage, and visualization.

Rather than a single monolithic automation script, ElyteAgent divides an experimental campaign into four specialized LLM agents that translate natural-language scientific objectives into validated, executable, solubility- and inventory-constrained robotic experiments — recovering from tool-level and hardware-level errors along the way.


Software Architecture

ElyteAgent is organized around four agents (see Fig. 1 of the paper), implemented on top of LangGraph (v0.4.8) with GPT-4o-mini (snapshot 2024-07-18) as the underlying LLM:

Agent (paper)Log tag (code)Responsibility
Conversation AgentCONVERSATION_AGENTParses natural-language requests into a structured electrolyte design space (solvents, salts, concentration bounds) and generates initial candidate compositions via hit-and-run sampling. Writes design-space metadata and composition tokens to the session file.
Manager AgentMONITOR_AGENTValidates candidate compositions from the Conversation or Optimization agent against feeder-solution inventory, remaining volume, and SALSA-derived solubility bounds. Rejects infeasible formulations, queues feasible ones, tracks Experiment Agent status, and stores completed results in the database.
Experiment AgentEXPERIMENT_AGENTExecutes validated experiments through ElyteOS, routing to Clio (electrolyte prep/property measurement) or SALSA (solubility characterization). Maintains a status tracker (progress, results, equipment status, errors); retries failed steps and, if unrecoverable, reports to the Manager Agent — resuming from the last checkpoint once resolved rather than restarting.
Optimization AgentOPTIMIZATION_AGENTProposes new candidate formulations from accumulated results using Bayesian Optimization (upper-confidence-bound acquisition function over a k-nearest-neighbors surrogate model), balancing exploration and exploitation. Runs until convergence, the requested trial count is reached, or feeder solutions are exhausted.

Every experiment is represented as a shared composition token:

solvent identities|solvent fractions|salt identities|salt molalities

e.g. H2O|100|NaNO3|5.39 — a 100% H₂O solvent with 5.39 mol/kg NaNO₃. This token, plus a shared session file (design space, sampled/queued/completed experiments, optimization state), lets all four agents exchange experiment definitions without manual translation.

Design-level errors (invalid tokens, missing solvents/salts, out-of-bound concentrations, insufficient inventory) are caught by the Manager Agent before anything reaches the hardware. Hardware-execution errors (device faults, communication failures, failed measurements) are caught by the Experiment Agent, which retries and, if needed, escalates while preserving state for resumption.


Project Structure

EEG-Clio-Database-master/
├── Main-backup.py
├── requirements.txt
├── License.txt / NOTICE.txt
└── src/
├── Main.py # Dash GUI entry point
├── Agent/ # ElyteAgent: LLM multi-agent orchestration layer
│ ├── Agent.py # agent graph (LangGraph), logging, Azure OpenAI setup
│ ├── Tools.py # design-space / composition-ID tools (Conversation Agent)
│ ├── Experiment_Tools.py # hardware-control tools (Experiment Agent)
│ ├── BeysianOptimization.py # Optuna/BO-based optimizer (Optimization Agent)
│ ├── JSONHelper/ # system prompts + tool descriptions
│ ├── Generated JSON/ # saved experiment queues / session files
│ └── conversation_history/ # per-run agent execution logs
├── Equipment_Control/ # Serial/HID drivers for pumps, valves, balance,
│ # potentiostat, viscometer, thermometer, camera (Clio/SALSA hardware)
├── Database/ # Solvent/salt molar mass tables, DB pipeline
├── Db/ # SQLite databases
├── pspython/ # PalmSens potentiostat Python bindings
└── assets/ # Dash static assets (logo, CSS)

Installation Instructions

Software Prerequisites

  • Operating System: Windows 10
  • Python Version: Python 3.8 or higher
  • (Agent layer only) An Azure OpenAI resource with a deployed chat-completion model (the published results use a GPT-4o-mini snapshot, 2024-07-18)

Installation steps

  1. Open a terminal and navigate to the project folder.
  2. Install the core (GUI + equipment control) dependencies:
    pip install -r requirements.txt
  3. Install the additional dependencies required by the Agent layer (not currently pinned in requirements.txt):
    pip install langchain langchain-core "langgraph==0.4.8" langchain-openai openai optuna opencv-python
  4. Locate your Python package install directory:
    pip show dash
    Look for the Location: line in the output and copy that path.
  5. Move the pspython folder into that install directory (needed for PalmSens potentiostat communication):
    move pspython /path/to/python/site-packages/
  6. Configure Azure OpenAI credentials for the Agent layer as environment variables before launching the app:
    set AZURE_OPENAI_ENDPOINT=https://<your-resource-name>.openai.azure.com/
    set AZURE_OPENAI_API_KEY=<your-key>
    or place them in a local .env file that is excluded from version control via .gitignore.

Usage

Key Features

  • End-to-end automated pipeline for lab equipment (Clio, SALSA) to conduct electrolyte experiments.
  • Natural-language experiment design, feasibility validation, execution monitoring, and error recovery via ElyteAgent.
  • Bayesian-optimization-driven, closed-loop suggestion of new experimental conditions (upper-confidence-bound acquisition on a k-NN surrogate).
  • Durable storage of all experiment data, metadata, and session state.
  • Data retrieval, filtering, and visualization through the GUI.

Running the GUI

  1. Open a terminal and navigate to the project folder.
  2. Run:
    python Main.py
  3. Open a browser to http://localhost:8050.

Run an experiment (ElyteAgent / conversational)

Instead of manually building a composition ID, describe the campaign in natural language — e.g. "Explore aqueous NaNO3 with molality ≤ 9 mol/kg and Li2SO4 with molality ≤ 2.5 mol/kg" — and:

  1. The Conversation Agent infers H₂O as the (fixed, 100%) solvent, sets NaNO₃/Li₂SO₄ as design variables with the given bounds, and hit-and-run samples initial candidate compositions into the session file.
  2. The Manager Agent checks each candidate against feeder-solution inventory and SALSA-derived solubility limits, rejecting infeasible formulations (e.g. two salts that numerically fit their own bounds but together exceed available feeder volume) and queuing the rest.
  3. The Experiment Agent runs the physical Clio/SALSA sequence (prepare → start_new_experiment → make_solvent → measure_mass → measure_conductivity → measure_viscosity → measure_temperature → finish_measurement, or the solubility variant: add_salt → add_solvent → stir_liquid → detect_dissolution_status), reporting results or surfacing hardware errors (e.g. "Vial cannot be detected") for you to resolve — you can then say "Please resume the experiment" to continue from the last checkpoint rather than starting over.
  4. The Optimization Agent uses completed results to propose the next batch of candidate compositions, closing the loop until convergence, the requested trial count, or feeder-solution exhaustion.

Agent conversations and tool calls are logged per-run under src/Agent/conversation_history/, and each generated experiment queue / session file is saved as timestamped JSON under src/Agent/Generated JSON/.

Acknowledgements

This work was supported by the Toyota Research Institute.

License

The code is licensed under MIT.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ElyteOS / ElyteAgent

Version: 1.0.1 Authors: Yuhan Chen, Hongyi Lin, Tianyi Zhang, Venkatasubramanian Viswanathan License: MIT Paper:ElyteAgent: A Multi-Agent Workflow for Autonomous Electrolyte ExperimentationCode & data:https://github.com/BattModels/ElyteAgent.git


Overview

This repository contains ElyteOS, the experiment orchestration and data-management layer for autonomous electrolyte research, together with the Agent module (src/Agent/) that implements ElyteAgent — a multi-agent, LLM-driven workflow for feasibility-aware autonomous electrolyte experimentation, described in the accompanying paper.

ElyteAgent coordinates three experimental/software infrastructures:

  • Clio — the robotic platform that prepares electrolyte samples by mixing predefined feeder solutions and measures transport properties (ionic conductivity, density, viscosity).
  • SALSA — an automated solubility-testing add-on that determines experimentally accessible salt concentration bounds via an excess-solvent, camera-monitored dissolution workflow.
  • ElyteOS (this repo) — the software layer that handles device control, experiment-token representation, inventory tracking, scheduling, logging, database storage, and visualization.

Rather than a single monolithic automation script, ElyteAgent divides an experimental campaign into four specialized LLM agents that translate natural-language scientific objectives into validated, executable, solubility- and inventory-constrained robotic experiments — recovering from tool-level and hardware-level errors along the way.


Software Architecture

ElyteAgent is organized around four agents (see Fig. 1 of the paper), implemented on top of LangGraph (v0.4.8) with GPT-4o-mini (snapshot 2024-07-18) as the underlying LLM:

Agent (paper)Log tag (code)Responsibility
Conversation AgentCONVERSATION_AGENTParses natural-language requests into a structured electrolyte design space (solvents, salts, concentration bounds) and generates initial candidate compositions via hit-and-run sampling. Writes design-space metadata and composition tokens to the session file.
Manager AgentMONITOR_AGENTValidates candidate compositions from the Conversation or Optimization agent against feeder-solution inventory, remaining volume, and SALSA-derived solubility bounds. Rejects infeasible formulations, queues feasible ones, tracks Experiment Agent status, and stores completed results in the database.
Experiment AgentEXPERIMENT_AGENTExecutes validated experiments through ElyteOS, routing to Clio (electrolyte prep/property measurement) or SALSA (solubility characterization). Maintains a status tracker (progress, results, equipment status, errors); retries failed steps and, if unrecoverable, reports to the Manager Agent — resuming from the last checkpoint once resolved rather than restarting.
Optimization AgentOPTIMIZATION_AGENTProposes new candidate formulations from accumulated results using Bayesian Optimization (upper-confidence-bound acquisition function over a k-nearest-neighbors surrogate model), balancing exploration and exploitation. Runs until convergence, the requested trial count is reached, or feeder solutions are exhausted.

Every experiment is represented as a shared composition token:

solvent identities|solvent fractions|salt identities|salt molalities

e.g. H2O|100|NaNO3|5.39 — a 100% H₂O solvent with 5.39 mol/kg NaNO₃. This token, plus a shared session file (design space, sampled/queued/completed experiments, optimization state), lets all four agents exchange experiment definitions without manual translation.

Design-level errors (invalid tokens, missing solvents/salts, out-of-bound concentrations, insufficient inventory) are caught by the Manager Agent before anything reaches the hardware. Hardware-execution errors (device faults, communication failures, failed measurements) are caught by the Experiment Agent, which retries and, if needed, escalates while preserving state for resumption.


Project Structure

EEG-Clio-Database-master/
├── Main-backup.py
├── requirements.txt
├── License.txt / NOTICE.txt
└── src/
├── Main.py # Dash GUI entry point
├── Agent/ # ElyteAgent: LLM multi-agent orchestration layer
│ ├── Agent.py # agent graph (LangGraph), logging, Azure OpenAI setup
│ ├── Tools.py # design-space / composition-ID tools (Conversation Agent)
│ ├── Experiment_Tools.py # hardware-control tools (Experiment Agent)
│ ├── BeysianOptimization.py # Optuna/BO-based optimizer (Optimization Agent)
│ ├── JSONHelper/ # system prompts + tool descriptions
│ ├── Generated JSON/ # saved experiment queues / session files
│ └── conversation_history/ # per-run agent execution logs
├── Equipment_Control/ # Serial/HID drivers for pumps, valves, balance,
│ # potentiostat, viscometer, thermometer, camera (Clio/SALSA hardware)
├── Database/ # Solvent/salt molar mass tables, DB pipeline
├── Db/ # SQLite databases
├── pspython/ # PalmSens potentiostat Python bindings
└── assets/ # Dash static assets (logo, CSS)

Installation Instructions

Software Prerequisites

  • Operating System: Windows 10
  • Python Version: Python 3.8 or higher
  • (Agent layer only) An Azure OpenAI resource with a deployed chat-completion model (the published results use a GPT-4o-mini snapshot, 2024-07-18)

Installation steps

  1. Open a terminal and navigate to the project folder.
  2. Install the core (GUI + equipment control) dependencies:
    pip install -r requirements.txt
  3. Install the additional dependencies required by the Agent layer (not currently pinned in requirements.txt):
    pip install langchain langchain-core "langgraph==0.4.8" langchain-openai openai optuna opencv-python
  4. Locate your Python package install directory:
    pip show dash
    Look for the Location: line in the output and copy that path.
  5. Move the pspython folder into that install directory (needed for PalmSens potentiostat communication):
    move pspython /path/to/python/site-packages/
  6. Configure Azure OpenAI credentials for the Agent layer as environment variables before launching the app:
    set AZURE_OPENAI_ENDPOINT=https://<your-resource-name>.openai.azure.com/
    set AZURE_OPENAI_API_KEY=<your-key>
    or place them in a local .env file that is excluded from version control via .gitignore.

Usage

Key Features

  • End-to-end automated pipeline for lab equipment (Clio, SALSA) to conduct electrolyte experiments.
  • Natural-language experiment design, feasibility validation, execution monitoring, and error recovery via ElyteAgent.
  • Bayesian-optimization-driven, closed-loop suggestion of new experimental conditions (upper-confidence-bound acquisition on a k-NN surrogate).
  • Durable storage of all experiment data, metadata, and session state.
  • Data retrieval, filtering, and visualization through the GUI.

Running the GUI

  1. Open a terminal and navigate to the project folder.
  2. Run:
    python Main.py
  3. Open a browser to http://localhost:8050.

Run an experiment (ElyteAgent / conversational)

Instead of manually building a composition ID, describe the campaign in natural language — e.g. "Explore aqueous NaNO3 with molality ≤ 9 mol/kg and Li2SO4 with molality ≤ 2.5 mol/kg" — and:

  1. The Conversation Agent infers H₂O as the (fixed, 100%) solvent, sets NaNO₃/Li₂SO₄ as design variables with the given bounds, and hit-and-run samples initial candidate compositions into the session file.
  2. The Manager Agent checks each candidate against feeder-solution inventory and SALSA-derived solubility limits, rejecting infeasible formulations (e.g. two salts that numerically fit their own bounds but together exceed available feeder volume) and queuing the rest.
  3. The Experiment Agent runs the physical Clio/SALSA sequence (prepare → start_new_experiment → make_solvent → measure_mass → measure_conductivity → measure_viscosity → measure_temperature → finish_measurement, or the solubility variant: add_salt → add_solvent → stir_liquid → detect_dissolution_status), reporting results or surfacing hardware errors (e.g. "Vial cannot be detected") for you to resolve — you can then say "Please resume the experiment" to continue from the last checkpoint rather than starting over.
  4. The Optimization Agent uses completed results to propose the next batch of candidate compositions, closing the loop until convergence, the requested trial count, or feeder-solution exhaustion.

Agent conversations and tool calls are logged per-run under src/Agent/conversation_history/, and each generated experiment queue / session file is saved as timestamped JSON under src/Agent/Generated JSON/.

Acknowledgements

This work was supported by the Toyota Research Institute.

License

The code is licensed under MIT.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ElyteOS / ElyteAgent

Version: 1.0.1 Authors: Yuhan Chen, Hongyi Lin, Tianyi Zhang, Venkatasubramanian Viswanathan License: MIT Paper:ElyteAgent: A Multi-Agent Workflow for Autonomous Electrolyte ExperimentationCode & data:https://github.com/BattModels/ElyteAgent.git


Overview

This repository contains ElyteOS, the experiment orchestration and data-management layer for autonomous electrolyte research, together with the Agent module (src/Agent/) that implements ElyteAgent — a multi-agent, LLM-driven workflow for feasibility-aware autonomous electrolyte experimentation, described in the accompanying paper.

ElyteAgent coordinates three experimental/software infrastructures:

  • Clio — the robotic platform that prepares electrolyte samples by mixing predefined feeder solutions and measures transport properties (ionic conductivity, density, viscosity).
  • SALSA — an automated solubility-testing add-on that determines experimentally accessible salt concentration bounds via an excess-solvent, camera-monitored dissolution workflow.
  • ElyteOS (this repo) — the software layer that handles device control, experiment-token representation, inventory tracking, scheduling, logging, database storage, and visualization.

Rather than a single monolithic automation script, ElyteAgent divides an experimental campaign into four specialized LLM agents that translate natural-language scientific objectives into validated, executable, solubility- and inventory-constrained robotic experiments — recovering from tool-level and hardware-level errors along the way.


Software Architecture

ElyteAgent is organized around four agents (see Fig. 1 of the paper), implemented on top of LangGraph (v0.4.8) with GPT-4o-mini (snapshot 2024-07-18) as the underlying LLM:

Agent (paper)Log tag (code)Responsibility
Conversation AgentCONVERSATION_AGENTParses natural-language requests into a structured electrolyte design space (solvents, salts, concentration bounds) and generates initial candidate compositions via hit-and-run sampling. Writes design-space metadata and composition tokens to the session file.
Manager AgentMONITOR_AGENTValidates candidate compositions from the Conversation or Optimization agent against feeder-solution inventory, remaining volume, and SALSA-derived solubility bounds. Rejects infeasible formulations, queues feasible ones, tracks Experiment Agent status, and stores completed results in the database.
Experiment AgentEXPERIMENT_AGENTExecutes validated experiments through ElyteOS, routing to Clio (electrolyte prep/property measurement) or SALSA (solubility characterization). Maintains a status tracker (progress, results, equipment status, errors); retries failed steps and, if unrecoverable, reports to the Manager Agent — resuming from the last checkpoint once resolved rather than restarting.
Optimization AgentOPTIMIZATION_AGENTProposes new candidate formulations from accumulated results using Bayesian Optimization (upper-confidence-bound acquisition function over a k-nearest-neighbors surrogate model), balancing exploration and exploitation. Runs until convergence, the requested trial count is reached, or feeder solutions are exhausted.

Every experiment is represented as a shared composition token:

solvent identities|solvent fractions|salt identities|salt molalities

e.g. H2O|100|NaNO3|5.39 — a 100% H₂O solvent with 5.39 mol/kg NaNO₃. This token, plus a shared session file (design space, sampled/queued/completed experiments, optimization state), lets all four agents exchange experiment definitions without manual translation.

Design-level errors (invalid tokens, missing solvents/salts, out-of-bound concentrations, insufficient inventory) are caught by the Manager Agent before anything reaches the hardware. Hardware-execution errors (device faults, communication failures, failed measurements) are caught by the Experiment Agent, which retries and, if needed, escalates while preserving state for resumption.


Project Structure

EEG-Clio-Database-master/
├── Main-backup.py
├── requirements.txt
├── License.txt / NOTICE.txt
└── src/
├── Main.py # Dash GUI entry point
├── Agent/ # ElyteAgent: LLM multi-agent orchestration layer
│ ├── Agent.py # agent graph (LangGraph), logging, Azure OpenAI setup
│ ├── Tools.py # design-space / composition-ID tools (Conversation Agent)
│ ├── Experiment_Tools.py # hardware-control tools (Experiment Agent)
│ ├── BeysianOptimization.py # Optuna/BO-based optimizer (Optimization Agent)
│ ├── JSONHelper/ # system prompts + tool descriptions
│ ├── Generated JSON/ # saved experiment queues / session files
│ └── conversation_history/ # per-run agent execution logs
├── Equipment_Control/ # Serial/HID drivers for pumps, valves, balance,
│ # potentiostat, viscometer, thermometer, camera (Clio/SALSA hardware)
├── Database/ # Solvent/salt molar mass tables, DB pipeline
├── Db/ # SQLite databases
├── pspython/ # PalmSens potentiostat Python bindings
└── assets/ # Dash static assets (logo, CSS)

Installation Instructions

Software Prerequisites

  • Operating System: Windows 10
  • Python Version: Python 3.8 or higher
  • (Agent layer only) An Azure OpenAI resource with a deployed chat-completion model (the published results use a GPT-4o-mini snapshot, 2024-07-18)

Installation steps

  1. Open a terminal and navigate to the project folder.
  2. Install the core (GUI + equipment control) dependencies:
    pip install -r requirements.txt
  3. Install the additional dependencies required by the Agent layer (not currently pinned in requirements.txt):
    pip install langchain langchain-core "langgraph==0.4.8" langchain-openai openai optuna opencv-python
  4. Locate your Python package install directory:
    pip show dash
    Look for the Location: line in the output and copy that path.
  5. Move the pspython folder into that install directory (needed for PalmSens potentiostat communication):
    move pspython /path/to/python/site-packages/
  6. Configure Azure OpenAI credentials for the Agent layer as environment variables before launching the app:
    set AZURE_OPENAI_ENDPOINT=https://<your-resource-name>.openai.azure.com/
    set AZURE_OPENAI_API_KEY=<your-key>
    or place them in a local .env file that is excluded from version control via .gitignore.

Usage

Key Features

  • End-to-end automated pipeline for lab equipment (Clio, SALSA) to conduct electrolyte experiments.
  • Natural-language experiment design, feasibility validation, execution monitoring, and error recovery via ElyteAgent.
  • Bayesian-optimization-driven, closed-loop suggestion of new experimental conditions (upper-confidence-bound acquisition on a k-NN surrogate).
  • Durable storage of all experiment data, metadata, and session state.
  • Data retrieval, filtering, and visualization through the GUI.

Running the GUI

  1. Open a terminal and navigate to the project folder.
  2. Run:
    python Main.py
  3. Open a browser to http://localhost:8050.

Run an experiment (ElyteAgent / conversational)

Instead of manually building a composition ID, describe the campaign in natural language — e.g. "Explore aqueous NaNO3 with molality ≤ 9 mol/kg and Li2SO4 with molality ≤ 2.5 mol/kg" — and:

  1. The Conversation Agent infers H₂O as the (fixed, 100%) solvent, sets NaNO₃/Li₂SO₄ as design variables with the given bounds, and hit-and-run samples initial candidate compositions into the session file.
  2. The Manager Agent checks each candidate against feeder-solution inventory and SALSA-derived solubility limits, rejecting infeasible formulations (e.g. two salts that numerically fit their own bounds but together exceed available feeder volume) and queuing the rest.
  3. The Experiment Agent runs the physical Clio/SALSA sequence (prepare → start_new_experiment → make_solvent → measure_mass → measure_conductivity → measure_viscosity → measure_temperature → finish_measurement, or the solubility variant: add_salt → add_solvent → stir_liquid → detect_dissolution_status), reporting results or surfacing hardware errors (e.g. "Vial cannot be detected") for you to resolve — you can then say "Please resume the experiment" to continue from the last checkpoint rather than starting over.
  4. The Optimization Agent uses completed results to propose the next batch of candidate compositions, closing the loop until convergence, the requested trial count, or feeder-solution exhaustion.

Agent conversations and tool calls are logged per-run under src/Agent/conversation_history/, and each generated experiment queue / session file is saved as timestamped JSON under src/Agent/Generated JSON/.

Acknowledgements

This work was supported by the Toyota Research Institute.

License

The code is licensed under MIT.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

ElyteOS / ElyteAgent

Version: 1.0.1 Authors: Yuhan Chen, Hongyi Lin, Tianyi Zhang, Venkatasubramanian Viswanathan License: MIT Paper:ElyteAgent: A Multi-Agent Workflow for Autonomous Electrolyte ExperimentationCode & data:https://github.com/BattModels/ElyteAgent.git


Overview

This repository contains ElyteOS, the experiment orchestration and data-management layer for autonomous electrolyte research, together with the Agent module (src/Agent/) that implements ElyteAgent — a multi-agent, LLM-driven workflow for feasibility-aware autonomous electrolyte experimentation, described in the accompanying paper.

ElyteAgent coordinates three experimental/software infrastructures:

  • Clio — the robotic platform that prepares electrolyte samples by mixing predefined feeder solutions and measures transport properties (ionic conductivity, density, viscosity).
  • SALSA — an automated solubility-testing add-on that determines experimentally accessible salt concentration bounds via an excess-solvent, camera-monitored dissolution workflow.
  • ElyteOS (this repo) — the software layer that handles device control, experiment-token representation, inventory tracking, scheduling, logging, database storage, and visualization.

Rather than a single monolithic automation script, ElyteAgent divides an experimental campaign into four specialized LLM agents that translate natural-language scientific objectives into validated, executable, solubility- and inventory-constrained robotic experiments — recovering from tool-level and hardware-level errors along the way.


Software Architecture

ElyteAgent is organized around four agents (see Fig. 1 of the paper), implemented on top of LangGraph (v0.4.8) with GPT-4o-mini (snapshot 2024-07-18) as the underlying LLM:

Agent (paper)Log tag (code)Responsibility
Conversation AgentCONVERSATION_AGENTParses natural-language requests into a structured electrolyte design space (solvents, salts, concentration bounds) and generates initial candidate compositions via hit-and-run sampling. Writes design-space metadata and composition tokens to the session file.
Manager AgentMONITOR_AGENTValidates candidate compositions from the Conversation or Optimization agent against feeder-solution inventory, remaining volume, and SALSA-derived solubility bounds. Rejects infeasible formulations, queues feasible ones, tracks Experiment Agent status, and stores completed results in the database.
Experiment AgentEXPERIMENT_AGENTExecutes validated experiments through ElyteOS, routing to Clio (electrolyte prep/property measurement) or SALSA (solubility characterization). Maintains a status tracker (progress, results, equipment status, errors); retries failed steps and, if unrecoverable, reports to the Manager Agent — resuming from the last checkpoint once resolved rather than restarting.
Optimization AgentOPTIMIZATION_AGENTProposes new candidate formulations from accumulated results using Bayesian Optimization (upper-confidence-bound acquisition function over a k-nearest-neighbors surrogate model), balancing exploration and exploitation. Runs until convergence, the requested trial count is reached, or feeder solutions are exhausted.

Every experiment is represented as a shared composition token:

solvent identities|solvent fractions|salt identities|salt molalities

e.g. H2O|100|NaNO3|5.39 — a 100% H₂O solvent with 5.39 mol/kg NaNO₃. This token, plus a shared session file (design space, sampled/queued/completed experiments, optimization state), lets all four agents exchange experiment definitions without manual translation.

Design-level errors (invalid tokens, missing solvents/salts, out-of-bound concentrations, insufficient inventory) are caught by the Manager Agent before anything reaches the hardware. Hardware-execution errors (device faults, communication failures, failed measurements) are caught by the Experiment Agent, which retries and, if needed, escalates while preserving state for resumption.


Project Structure

EEG-Clio-Database-master/
├── Main-backup.py
├── requirements.txt
├── License.txt / NOTICE.txt
└── src/
├── Main.py # Dash GUI entry point
├── Agent/ # ElyteAgent: LLM multi-agent orchestration layer
│ ├── Agent.py # agent graph (LangGraph), logging, Azure OpenAI setup
│ ├── Tools.py # design-space / composition-ID tools (Conversation Agent)
│ ├── Experiment_Tools.py # hardware-control tools (Experiment Agent)
│ ├── BeysianOptimization.py # Optuna/BO-based optimizer (Optimization Agent)
│ ├── JSONHelper/ # system prompts + tool descriptions
│ ├── Generated JSON/ # saved experiment queues / session files
│ └── conversation_history/ # per-run agent execution logs
├── Equipment_Control/ # Serial/HID drivers for pumps, valves, balance,
│ # potentiostat, viscometer, thermometer, camera (Clio/SALSA hardware)
├── Database/ # Solvent/salt molar mass tables, DB pipeline
├── Db/ # SQLite databases
├── pspython/ # PalmSens potentiostat Python bindings
└── assets/ # Dash static assets (logo, CSS)

Installation Instructions

Software Prerequisites

  • Operating System: Windows 10
  • Python Version: Python 3.8 or higher
  • (Agent layer only) An Azure OpenAI resource with a deployed chat-completion model (the published results use a GPT-4o-mini snapshot, 2024-07-18)

Installation steps

  1. Open a terminal and navigate to the project folder.
  2. Install the core (GUI + equipment control) dependencies:
    pip install -r requirements.txt
  3. Install the additional dependencies required by the Agent layer (not currently pinned in requirements.txt):
    pip install langchain langchain-core "langgraph==0.4.8" langchain-openai openai optuna opencv-python
  4. Locate your Python package install directory:
    pip show dash
    Look for the Location: line in the output and copy that path.
  5. Move the pspython folder into that install directory (needed for PalmSens potentiostat communication):
    move pspython /path/to/python/site-packages/
  6. Configure Azure OpenAI credentials for the Agent layer as environment variables before launching the app:
    set AZURE_OPENAI_ENDPOINT=https://<your-resource-name>.openai.azure.com/
    set AZURE_OPENAI_API_KEY=<your-key>
    or place them in a local .env file that is excluded from version control via .gitignore.

Usage

Key Features

  • End-to-end automated pipeline for lab equipment (Clio, SALSA) to conduct electrolyte experiments.
  • Natural-language experiment design, feasibility validation, execution monitoring, and error recovery via ElyteAgent.
  • Bayesian-optimization-driven, closed-loop suggestion of new experimental conditions (upper-confidence-bound acquisition on a k-NN surrogate).
  • Durable storage of all experiment data, metadata, and session state.
  • Data retrieval, filtering, and visualization through the GUI.

Running the GUI

  1. Open a terminal and navigate to the project folder.
  2. Run:
    python Main.py
  3. Open a browser to http://localhost:8050.

Run an experiment (ElyteAgent / conversational)

Instead of manually building a composition ID, describe the campaign in natural language — e.g. "Explore aqueous NaNO3 with molality ≤ 9 mol/kg and Li2SO4 with molality ≤ 2.5 mol/kg" — and:

  1. The Conversation Agent infers H₂O as the (fixed, 100%) solvent, sets NaNO₃/Li₂SO₄ as design variables with the given bounds, and hit-and-run samples initial candidate compositions into the session file.
  2. The Manager Agent checks each candidate against feeder-solution inventory and SALSA-derived solubility limits, rejecting infeasible formulations (e.g. two salts that numerically fit their own bounds but together exceed available feeder volume) and queuing the rest.
  3. The Experiment Agent runs the physical Clio/SALSA sequence (prepare → start_new_experiment → make_solvent → measure_mass → measure_conductivity → measure_viscosity → measure_temperature → finish_measurement, or the solubility variant: add_salt → add_solvent → stir_liquid → detect_dissolution_status), reporting results or surfacing hardware errors (e.g. "Vial cannot be detected") for you to resolve — you can then say "Please resume the experiment" to continue from the last checkpoint rather than starting over.
  4. The Optimization Agent uses completed results to propose the next batch of candidate compositions, closing the loop until convergence, the requested trial count, or feeder-solution exhaustion.

Agent conversations and tool calls are logged per-run under src/Agent/conversation_history/, and each generated experiment queue / session file is saved as timestamped JSON under src/Agent/Generated JSON/.

Acknowledgements

This work was supported by the Toyota Research Institute.

License

The code is licensed under MIT.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages