pycsamt.agents.joint_agent#
pycsamt.agents.joint_agent#
JointInversionAgent — Multi-modal joint MT inversion via DRCNN.
Wraps JointInverter:
Fuses a primary MT dataset with a secondary modality (TEM, CSAMT, gravity proxy, or a second MT profile at a different frequency range).
Both modalities are observed at the same stations. When no secondary dataset is supplied the agent synthesises a complementary low-frequency response from the same
LayeredModelto demonstrate the joint-inversion pipeline.Produces a joint resistivity section (station × depth) that benefits from the complementary depth sensitivities of the two modalities.
Architecture#
The DRCNNNet (Dense-Residual CNN) is used
as the shared feature extractor; each modality has its own encoding branch
before the fused prediction head.
Requires PyTorch or TensorFlow.
Classes
|
Multi-modal MT joint inversion using DRCNN. |
- class pycsamt.agents.joint_agent.JointInversionAgent(*, api_key=None, model=None, llm_provider='claude', modalities=None, n_layers=5, n_freqs_primary=40, n_freqs_secondary=20, n_train_samples=2000, epochs=30, growth_rate=32)[source]#
Bases:
BaseAgentMulti-modal MT joint inversion using DRCNN.
- Parameters:
api_key (str)
model (str)
llm_provider (str)
modalities (list[str]) – Names of the two modalities, e.g.
["mt", "tem"]. The first entry is the primary modality (loaded fromsites/path); the second is loaded fromsecondary_pathor synthesised when absent.n_layers (int) – Number of depth layers in the output model (default 5).
n_freqs_primary (int) – Frequencies for the primary MT response features (default 40).
n_freqs_secondary (int) – Frequencies for the secondary modality features (default 20).
n_train_samples (int) – Synthetic training samples shared across both modalities (default 2000).
epochs (int) – Training epochs (default 30).
growth_rate (int) – DRCNN dense-block growth rate (default 32).
keys (Output data)
----------
path (sites /)
secondary_path (str, optional — secondary modality EDI/TEM path)
output_dir (str, optional)
period_range ([T_min, T_max], optional)
keys
----------------
JointInverter (inverter)
{station (rms_per_station dict)
{station
float (rms_global)
list[str] (modalities)
dict (figure_paths)
dict
Examples
>>> agent = JointInversionAgent(modalities=["mt", "tem"], n_layers=5, epochs=20) >>> result = agent.execute({"path": "/data/L22PLT"}) >>> result["rms_global"] 0.31
- SYSTEM_PROMPT: str = 'You are an expert in multi-modal geophysical joint inversion using deep learning.\nGiven a joint MT inversion result, write 4-5 sentences that:\n1. Describe the two modalities fused and their complementary depth sensitivities.\n2. Assess the joint prediction quality (RMS, depth range, station count).\n3. Compare the joint result to a single-modality approach where possible.\n4. Identify where the secondary modality most improved the primary inversion.\n5. Recommend validation (borehole, gravity, seismic) and next modelling steps.\nReply in plain scientific English.\n'#
Override in subclasses to give the LLM its domain expertise.
- execute(input_data)[source]#
Run this agent on input_data and return an
AgentResult.Subclasses must implement this method. The contract:
Reset
self._last_cost = 0.0at the top.Record wall-clock time with
t0 = time.time().Return
AgentResult(elapsed_seconds=time.time()-t0, cost_estimate_usd=self._last_cost, ...).
- Parameters:
- Return type: