Skip to content

ATaylorAerospace/Thermal-Agent

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

75 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

thermalagent

๐Ÿ›ธ Deep Space Photonics Thermal Advisor

CI Python 3.10+ AWS Bedrock HuggingFace Dataset โ€” 40K rows Streamlit XGBoost Open Weights โ€” QLoRA + GGUF License: CC BY 4.0 Contact A Taylor

A tool-using agent + physics simulator for recommending thermal mitigation strategies in deep space photonic instruments โ€” runs on managed AWS Bedrock or a self-hosted, fine-tuned open-weight model

Physics simulation ยท Agentic tool use ยท Scenario retrieval ยท XGBoost classification ยท QLoRA + GGUF open-weight fine-tuning ยท Streamlit demo


๐Ÿ’ก The Problem

Photonic Integrated Circuits (PICs) are the backbone of next generation space probe instruments that operate in deep space โ€” spectrometers, laser communication terminals, waveguide sensor arrays, and photonic signal processors. But space is brutal:

  • ๐ŸŒก๏ธ Spectral drift โ€” temperature swings shift refractive indices, pushing resonant wavelengths off-target and corrupting measurements
  • ๐Ÿ“ Waveguide misalignment โ€” differential thermal expansion between chip layers destroys optical coupling, killing signal throughput
  • ๐Ÿ’ฅ Mechanical cracking โ€” repeated thermal cycling fatigues bonding interfaces and dielectric layers until catastrophic failure

A spectrometer on a Jovian probe faces 180 K temperature swings. An optical link in the outer solar system endures 240 K. The wrong mitigation strategy means mission failure.


โœจ The Solution

This project pairs deterministic physics with an agent that reasons over a knowledge data store โ€” no fine-tuning required. A Bedrock foundation model decides which tools to call for any instrument-material-environment combination, then synthesizes a grounded recommendation:

Layer What It Does Status
๐Ÿ”ฌ Physics Simulator Computes ฮ”n and strain from first principles โœ… Live
๐Ÿค– Tool-Using Agent Reasons over the scenario and calls tools via a pluggable backend โœ… Live
โ˜๏ธ Bedrock Backend Managed foundation model via the Converse API โœ… Live
๐Ÿง  Open-Weight Backend Self-hosted Llama 3.3 / Qwen2.5 fine-tuned with QLoRA, served as GGUF โœ… Live
๐Ÿ“š Scenario Data Store Retrieves similar prior cases from the 40K-scenario knowledge base โœ… Live
๐Ÿ“Š XGBoost Classifier Fast Passive / Active / Hybrid prediction with calibrated probabilities โœ… Live
๐Ÿ–ฅ๏ธ Streamlit App Interactive two-mode demo (physics + agentic advisor) โœ… Live
๐Ÿงช CI Pipeline Automated pytest across Python 3.10โ€“3.12 on every push and PR โœ… Live

Knowledge vs. behavior โ€” two different jobs

  • Knowledge stays out of the weights. The data store holds the facts; updating it means re-indexing, not re-training. Every recommendation cites real simulator output, classifier probabilities, and retrieved scenarios.
  • Behavior can be baked into the weights โ€” for open-weight models. You don't fine-tune to teach facts; you fine-tune so an open-weight model reliably emits this stack's tool calls without babysitting it with a giant system prompt. See Open-Weight Fine-Tuning.
  • Composable โ€” the simulator, classifier, and data store are independent tools the model orchestrates on demand, regardless of backend.

๐Ÿ—๏ธ Architecture

Runtime โ€” agentic tool-use loop

                 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                 โ”‚        Streamlit Interactive App      โ”‚
                 โ”‚   (Physics Simulator ยท Agentic Advisor)โ”‚
                 โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                   โ”‚
                                   โ–ผ
                 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                 โ”‚              ThermalAgent             โ”‚
                 โ”‚       reason โ†’ act tool-use loop      โ”‚
                 โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                   โ”‚
                   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                   โ–ผ                               โ–ผ
        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
        โ”‚   Bedrock backend  โ”‚         โ”‚      Local backend     โ”‚
        โ”‚   (managed FM via  โ”‚         โ”‚  (fine-tuned GGUF via  โ”‚
        โ”‚    Converse API)   โ”‚         โ”‚ OpenAI-compatible EP)  โ”‚
        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                   โ–ผ
                 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                 โ”‚             ToolDispatcher            โ”‚
                 โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                     โ”‚              โ”‚               โ”‚
                     โ–ผ              โ–ผ               โ–ผ
            โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
            โ”‚  simulate_   โ”‚ โ”‚  classify_   โ”‚ โ”‚ search_thermal_  โ”‚
            โ”‚  thermal_    โ”‚ โ”‚  strategy    โ”‚ โ”‚ knowledge        โ”‚
            โ”‚  drift       โ”‚ โ”‚  (XGBoost)   โ”‚ โ”‚ (data store)     โ”‚
            โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                     โ”‚              โ”‚               โ”‚
                     โ–ผ              โ–ผ               โ–ผ
            โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
            โ”‚ ThermalDrift โ”‚ โ”‚  Strategy    โ”‚ โ”‚ ThermalDataStore โ”‚
            โ”‚  Simulator   โ”‚ โ”‚  Classifier  โ”‚ โ”‚ TF-IDF ยท 40K rowsโ”‚
            โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

The agent runs a tool-use loop: the model requests a tool, the ToolDispatcher executes it against the simulator, classifier, or data store, the result is fed back, and the loop repeats until the model returns a final recommendation. The model backend is pluggable โ€” the same loop runs against managed Bedrock or a self-hosted fine-tuned open-weight model (the LocalToolBackend translates Bedrock Converse โ†” OpenAI tool-calling). The data store is likewise backend-agnostic โ€” the local TF-IDF index can be swapped for Amazon Bedrock Knowledge Bases in production without changing the agent or tools.

Offline โ€” open-weight fine-tuning pipeline (feeds the Local backend)

   HuggingFace          training_data.py         finetune.py        quantize.py
   40K dataset    โ”€โ”€โ–ถ    SFT trace builder   โ”€โ”€โ–ถ  QLoRA 4-bit   โ”€โ”€โ–ถ  merge + GGUF   โ”€โ”€โ–ถ  GGUF
                        (real Strategy            (LoRA adapter)     (Q4_K_M)            served by
                         Classifier +                                                    Local backend
                         ThermalDataStore โ†’
                         grounded tool traces)

The SFT builder runs the real StrategyClassifier and ThermalDataStore to ground each training trace in genuine tool outputs (with synthesized fallbacks for unseen inputs), so the fine-tuned open-weight model learns this stack's exact tool-calling dialect โ€” not synthetic proxies.


๐Ÿ“ฆ Dataset

40,000 synthetic thermal scenarios โ€” Taylor658/deep-space-optical-chip-thermal-dataset

The dataset is the agent's knowledge store: scenarios are indexed for retrieval and used to train the XGBoost classifier.

Chip Materials

Material dn/dT (Kโปยน) ฮฑ โ€” Thermal Expansion (Kโปยน) Sensitivity
Silicon 1.86 ร— 10โปโด 2.6 ร— 10โปโถ High
Silicon Nitride 2.45 ร— 10โปโต 8.0 ร— 10โปโท Low
Polymer 1.1 ร— 10โปโด 2.2 ร— 10โปโถ Moderate
Indium Phosphide 3.4 ร— 10โปโด 4.6 ร— 10โปโถ Very High

Environments

Environment Expected ฮ”T (K) Severity
Near Earth Deep Space 120 โš ๏ธ Moderate
Mars Transit 150 โš ๏ธ Moderate
Jovian System 180 ๐Ÿ”ด High
Outer Solar System 240 ๐Ÿ”ด Critical

Coverage

  • 4 instruments โ€” Spectrometer, Laser Communication Terminal, Waveguide Sensor Array, Photonic Signal Processor
  • 3 strategy types โ€” Passive, Active, Hybrid

๐Ÿš€ Quick Start

# Clone
git clone https://github.com/ATaylorAerospace/Thermal-Agent.git
cd Thermal-Agent

# Install
pip install -r requirements.txt

# Configure
cp .env.example .env
# โ†’ Edit .env with your AWS credentials (Bedrock access)

# Build the agent's knowledge artifacts:
#   - scenario data store (vector index)
#   - XGBoost strategy classifier
bash scripts/build_index.sh

# Run the interactive app
streamlit run app/streamlit_app.py

๐Ÿ”ฎ Usage Examples

1. Physics Simulation โ€” Compute Thermal Risk

from src.simulator import ThermalDriftSimulator

sim = ThermalDriftSimulator()

# Evaluate Indium Phosphide on a Jovian mission
result = sim.evaluate("Indium Phosphide", "Jovian System")

print(f"ฮ”n = {result['delta_n']:.6f}")       # ฮ”n = 0.061200
print(f"Strain = {result['strain']:.2e}")     # Strain = 8.28e-04
print(f"Risk: {result['risk']}")              # Risk: Critical
print(f"Strategy: {result['recommended_strategy_hint']}")  # Strategy: Hybrid

2. Scenario Retrieval โ€” Query the Data Store

from src.datastore import ThermalDataStore

store = ThermalDataStore.from_huggingface()  # or .load("results/thermal_datastore.pkl")

for hit in store.query("Indium Phosphide spectrometer Jovian spectral drift", top_k=3):
    print(f"{hit['similarity']:.3f}  {hit['instrument']} โ†’ {hit.get('strategy_type')}")

3. XGBoost Strategy Prediction

from src.strategy_classifier import StrategyClassifier

clf = StrategyClassifier()
clf.load("results/strategy_classifier.pkl")

proba = clf.predict_proba(
    material="Silicon",
    instrument="Spectrometer",
    environment="Mars Transit",
    thermal_effect="Spectral Drift",
)
print(proba)
# {'Active': 0.12, 'Hybrid': 0.61, 'Passive': 0.27}

4. The Agent โ€” Tool-Grounded Recommendation

from src.agent import ThermalAgent

# Loads the data store and classifier from config/agent_config.yaml if present
agent = ThermalAgent.from_config()

result = agent.run(
    "Instrument: Laser Communication Terminal\n"
    "Material: Indium Phosphide\n"
    "Environment: Outer Solar System\n"
    "Thermal Effect: Waveguide Misalignment\n"
    "What thermal mitigation strategy should be used and why?"
)

print(result["answer"])        # the grounded recommendation
print(result["tool_calls"])    # every tool the agent invoked, with inputs + results

5. Build the Knowledge Artifacts

# One command โ€” build the data store index and train the classifier
bash scripts/build_index.sh

๐Ÿง  Open-Weight Fine-Tuning (QLoRA โ†’ GGUF)

Run the same agent against a self-hosted, fine-tuned open-weight model instead of Bedrock. The point isn't to teach the model facts (the data store does that) โ€” it's to make a raw open-weight model a reliable, low-overhead tool-caller for this exact stack:

  • Close the out-of-the-box gap โ€” off-the-shelf Llama 3.3 / Qwen2.5 are capable but loose at strict tool-call formatting. QLoRA bakes the call format in.
  • Teach your dialect โ€” the SFT traces encode these tool schemas and call patterns, so the model speaks your infrastructure natively.
  • Own your unit economics โ€” with the behavior in the weights you can strip the giant tool-description system prompt, cutting input-token overhead per inference.

Pipeline

# Heavy deps on a GPU host (kept out of core requirements / CI)
pip install -r requirements-finetune.txt

# 1) Build agentic tool-calling SFT data  2) QLoRA fine-tune  3) merge + GGUF quantize
bash scripts/finetune_pipeline.sh
Stage Module Output
Build SFT traces src/training_data.py data/finetune/{train,validation}.jsonl
QLoRA fine-tune src/finetune.py LoRA adapter in results/thermal-agent-lora/
Merge + quantize src/quantize.py results/thermal-agent.Q4_K_M.gguf

Base model, LoRA rank, 4-bit quantization, and the GGUF quant type are all set in config/finetune_config.yaml (defaults: Llama 3.3 70B, nf4 4-bit, Q4_K_M).

Serve and switch the agent to it

Serve the GGUF behind any OpenAI-compatible endpoint (llama.cpp server, Ollama, or vLLM), then flip the provider in config/agent_config.yaml:

agent:
  provider: local        # bedrock | local
local:
  model: thermal-agent
  base_url: http://localhost:8000/v1

ThermalAgent.from_config() now routes through LocalToolBackend โ€” the rest of the agent loop is unchanged.


๐Ÿ“ Repository Structure

Thermal-Agent/
โ”œโ”€โ”€ .github/
โ”‚   โ””โ”€โ”€ workflows/
โ”‚       โ””โ”€โ”€ ci.yml                   # GitHub Actions CI โ€” pytest on 3.10โ€“3.12
โ”œโ”€โ”€ app/
โ”‚   โ””โ”€โ”€ streamlit_app.py             # Interactive two-tab demo
โ”œโ”€โ”€ config/
โ”‚   โ”œโ”€โ”€ agent_config.yaml            # Agent provider, data store, classifier paths
โ”‚   โ””โ”€โ”€ finetune_config.yaml         # QLoRA + GGUF fine-tuning settings
โ”œโ”€โ”€ docs/
โ”‚   โ””โ”€โ”€ thermals.png                 # Hero banner image
โ”œโ”€โ”€ notebooks/
โ”‚   โ”œโ”€โ”€ 01_eda.ipynb                 # Exploratory data analysis
โ”‚   โ”œโ”€โ”€ 02_agent_walkthrough.ipynb   # End-to-end agent walkthrough
โ”‚   โ””โ”€โ”€ 03_open_weight_finetuning.ipynb  # QLoRA โ†’ GGUF walkthrough
โ”œโ”€โ”€ results/                         # Model, index & adapter artifacts (gitignored)
โ”œโ”€โ”€ scripts/
โ”‚   โ”œโ”€โ”€ build_index.sh               # Build data store + train classifier
โ”‚   โ””โ”€โ”€ finetune_pipeline.sh         # Build SFT data โ†’ QLoRA โ†’ GGUF
โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ __init__.py                  # Public API exports
โ”‚   โ”œโ”€โ”€ agent.py                     # Tool-use agent (pluggable backend)
โ”‚   โ”œโ”€โ”€ backends.py                  # Local open-weight (OpenAI-compatible) backend
โ”‚   โ”œโ”€โ”€ tools.py                     # Tool specs + dispatcher
โ”‚   โ”œโ”€โ”€ datastore.py                 # Scenario retrieval (knowledge store)
โ”‚   โ”œโ”€โ”€ training_data.py             # Agentic SFT data builder
โ”‚   โ”œโ”€โ”€ finetune.py                  # QLoRA fine-tuning (Llama 3.3 / Qwen2.5)
โ”‚   โ”œโ”€โ”€ quantize.py                  # Adapter merge + GGUF quantization
โ”‚   โ”œโ”€โ”€ simulator.py                 # Physics-based thermal drift engine
โ”‚   โ””โ”€โ”€ strategy_classifier.py       # XGBoost Passive/Active/Hybrid
โ”œโ”€โ”€ tests/
โ”‚   โ”œโ”€โ”€ __init__.py                  # Test package init
โ”‚   โ”œโ”€โ”€ test_agent.py                # Agent loop tests (mocked backend)
โ”‚   โ”œโ”€โ”€ test_backends.py             # Local backend translation tests
โ”‚   โ”œโ”€โ”€ test_tools.py                # Tool dispatch tests
โ”‚   โ”œโ”€โ”€ test_datastore.py            # Data store retrieval tests
โ”‚   โ”œโ”€โ”€ test_training_data.py        # SFT data builder tests
โ”‚   โ”œโ”€โ”€ test_classifier.py           # Classifier tests
โ”‚   โ””โ”€โ”€ test_simulator.py            # Physics simulator tests
โ”œโ”€โ”€ .env.example                     # Credential / endpoint template
โ”œโ”€โ”€ .gitignore
โ”œโ”€โ”€ conftest.py                      # Pytest path configuration
โ”œโ”€โ”€ CONTRIBUTING.md                  # Development setup & PR guidelines
โ”œโ”€โ”€ README.md
โ”œโ”€โ”€ requirements.txt                 # Core dependencies (agent + tests)
โ””โ”€โ”€ requirements-finetune.txt        # Heavy, optional fine-tuning dependencies

๐Ÿงฉ Components

๐Ÿ”ฌ Physics Simulator (src/simulator.py)

Computes refractive index shift (ฮ”n = dn/dT ร— ฮ”T) and mechanical strain (ฮต = ฮฑ ร— ฮ”T) for any material-environment pair. Classifies risk as Low โ†’ Moderate โ†’ High โ†’ Critical and maps to a strategy hint. Exposed to the agent as the simulate_thermal_drift tool.

๐Ÿ“š Scenario Data Store (src/datastore.py)

Indexes the 40K HuggingFace scenarios with TF-IDF and retrieves the most similar prior cases by cosine similarity. Backend-agnostic โ€” swappable for Amazon Bedrock Knowledge Bases in production. Exposed as the search_thermal_knowledge tool.

๐Ÿ› ๏ธ Agent Tools (src/tools.py)

Bedrock Converse tool specifications plus a ToolDispatcher that routes each tool call to the simulator, classifier, or data store. Tools backed by a missing artifact degrade gracefully.

๐Ÿค– Thermal Agent (src/agent.py)

A tool-using agent that runs a reason-act loop โ€” requesting tools, feeding results back, and iterating โ€” until it returns a grounded recommendation along with the full trace of tool calls. The model backend is pluggable (provider: bedrock | local).

๐Ÿง  Open-Weight Backend & Fine-Tuning (src/backends.py, src/training_data.py, src/finetune.py, src/quantize.py)

LocalToolBackend runs a self-hosted, QLoRA-fine-tuned Llama 3.3 / Qwen2.5 model (exported to GGUF) behind an OpenAI-compatible endpoint, translating Bedrock Converse โ†” OpenAI tool-calling so it drops straight into the agent loop. The fine-tuning trio builds agentic SFT traces, runs 4-bit QLoRA, and merges + quantizes the adapter to GGUF.

๐Ÿ“Š Strategy Classifier (src/strategy_classifier.py)

XGBoost classifier predicting Passive / Active / Hybrid strategies with calibrated probability estimates. Exposed as the classify_strategy tool and usable standalone.


๐Ÿงช Testing

Tests run automatically via GitHub Actions CI on every push and pull request against Python 3.10, 3.11, and 3.12.

# Run all tests locally
pytest tests/ -v

# Run a single suite
pytest tests/test_agent.py -v

The agent tests use a scripted fake Bedrock client, so the full tool-use loop is exercised without any AWS calls.


๐Ÿค Contributing

See CONTRIBUTING.md for development setup, testing instructions, and pull request guidelines.


๐Ÿ“œ License

This work is licensed under CC BY 4.0.

Copyright (c) 2026 A Taylor


๐Ÿ“ฌ Contact

Have questions, ideas, or want to collaborate? Reach out directly:

Contact A Taylor

About

Tool using agent and physics simulator that recommends thermal drift mitigation strategies for deep space photonic instruments across material and environment combinations. Runs on AWS Bedrock or a self-hosted open-weight model, grounded in a 40K scenario knowledge store and an XGBoost classifier.

Topics

Resources

Contributing

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages