Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
da219fa
Make python tool able to plot
WonderPG Oct 10, 2025
57fc7b1
Make plotting happen through plotly backend+frontend
WonderPG Oct 16, 2025
60e40e5
Small fixes
WonderPG Oct 16, 2025
4439e74
Autogen
WonderPG Oct 16, 2025
c84940e
Fix tests
WonderPG Oct 16, 2025
e9e7d47
More cleanup
WonderPG Oct 16, 2025
2366777
partial WASM executor adaptation
WonderPG Oct 17, 2025
33de44c
Fix figure plotting
WonderPG Oct 20, 2025
7415fee
Fix docker
WonderPG Oct 20, 2025
cc9f889
Update uv
WonderPG Oct 20, 2025
d4b4319
try to fix CI
WonderPG Oct 21, 2025
52036b9
Add executor test
WonderPG Oct 21, 2025
3a274c7
modify executor
WonderPG Oct 21, 2025
7e812df
Small change
WonderPG Oct 21, 2025
516f752
Small fixes
WonderPG Oct 21, 2025
5f8421b
Switch to async subprocess
WonderPG Oct 21, 2025
1a630fb
Adapt tests
WonderPG Oct 21, 2025
9746962
Add default to switch case back
WonderPG Oct 21, 2025
7db4185
Switch to chunk accumulation in stdout + try to get rid of pyodide pr…
WonderPG Oct 22, 2025
cfdc9af
Change buffer read size
WonderPG Oct 22, 2025
b497350
Run eval
WonderPG Oct 22, 2025
e2e3c10
Fix eval cases
WonderPG Oct 22, 2025
dd1d873
Add perm to tempdir
WonderPG Oct 22, 2025
e1fb94e
Rename eval folder
WonderPG Oct 22, 2025
531fa6c
Update outputs
WonderPG Oct 22, 2025
3f75b5c
Allow to read one env var + switch to pathlib
WonderPG Oct 23, 2025
a550527
Switch message content to jsonb
WonderPG Oct 9, 2025
2f22574
Partially working solution
WonderPG Oct 30, 2025
36296f8
Merge main
WonderPG Nov 3, 2025
73837b9
Fix mypy + variable referencing
WonderPG Nov 3, 2025
b988526
Remove breakpoint
WonderPG Nov 4, 2025
2950f37
Handle wrong json path
WonderPG Nov 4, 2025
ce436c6
Merge main
WonderPG Nov 4, 2025
494ae74
Merge main
WonderPG Nov 14, 2025
a695466
Fix tests
WonderPG Nov 14, 2025
e57c6f1
Try to fix frontend tests
WonderPG Nov 14, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Added
- Variable substitution in python tool.

## [v0.11.5] - 6.11.2025

### Changed
Expand Down Expand Up @@ -60,6 +63,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Use typescript autogen for backend types in frontend.
- Try to enforce using metric tools rather than downloading assets.
- Rule to avoid overvalidating.
- Plot through python + plotly.

## Fixed
- Images not appearing in Literature search (Prompt refactor).
- Update uv lock package.

## [v0.10.0] - 2.10.2025

Expand Down
46 changes: 46 additions & 0 deletions backend/alembic/versions/92694adcad71_message_content_jsonb.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
"""message content jsonb

Revision ID: 92694adcad71
Revises: cd5a73ea91db
Create Date: 2025-10-08 17:00:43.134455

"""

from typing import Sequence, Union

import sqlalchemy as sa
from sqlalchemy.dialects import postgresql

from alembic import op

# revision identifiers, used by Alembic.
revision: str = "92694adcad71"
down_revision: Union[str, None] = "cd5a73ea91db"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None


def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.alter_column(
"messages",
"content",
existing_type=sa.VARCHAR(),
type_=postgresql.JSONB(astext_type=sa.Text()),
existing_nullable=False,
postgresql_using="content::jsonb",
) # Add this parameter
# ### end Alembic commands ###


def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.alter_column(
"messages",
"content",
existing_type=postgresql.JSONB(astext_type=sa.Text()),
type_=sa.VARCHAR(),
existing_nullable=False,
postgresql_using="content::text",
) # Add this parameter
# ### end Alembic commands ###
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
I've retrieved the section lengths for morphology 7e69531a-c976-4b4c-be44-881e5e3defdd and created a histogram showing the distribution. The plot displays the frequency of different section lengths across the morphology, which helps visualize the structural characteristics of this neuron.
22 changes: 22 additions & 0 deletions backend/eval/input/variable_substitution/expected_tool_calls.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
[
{
"name": "obione-morphometrics-getone",
"arguments": {
"morphology_id": "7e69531a-c976-4b4c-be44-881e5e3defdd",
"requested_metrics": ["section_lengths"]
}
},
{
"name": "run-python",
"arguments": {
"python_script": "import plotly.graph_objects as go\n\nfig = go.Figure()\nfig.add_trace(go.Histogram(x=section_lengths, nbinsx=30, name='Section Lengths'))\nfig.update_layout(\n title='Distribution of Section Lengths',\n xaxis_title='Section Length (μm)',\n yaxis_title='Frequency'\n)\nfig.show()\n'plot_generated'",
"variables": [
{
"variable_name": "section_lengths",
"tool_call_id": "<morphometrics_tool_call_id>",
"jsonpath_reference": "$.*.section_lengths"
}
]
}
}
]
3 changes: 3 additions & 0 deletions backend/eval/input/variable_substitution/params.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"tags": ["morphology", "python", "plotting", "variable_substitution"]
}
1 change: 1 addition & 0 deletions backend/eval/input/variable_substitution/user.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Get the section_lengths of morphology 7e69531a-c976-4b4c-be44-881e5e3defdd and plot the distribution.
495 changes: 305 additions & 190 deletions backend/eval/output/detailed.json

Large diffs are not rendered by default.

92 changes: 50 additions & 42 deletions backend/eval/output/scores.json
Original file line number Diff line number Diff line change
@@ -1,158 +1,166 @@
{
"total_tests": 19,
"total_tests": 20,
"metrics_df": [
{
"test_name": "cerebellum_morphologies",
"Correctness [GEval]": 0.49012383446213326,
"Correctness [GEval]": 0.38821394911329454,
"Tool Correctness": 1.0,
"Argument Correctness": 0.0,
"Argument Correctness": 0.5,
"Deterministic Argument Correctness": 0.5,
"Overall Argument Correctness": 0.5
},
{
"test_name": "connectivity_metrics",
"Correctness [GEval]": 0.7718103598384992,
"Tool Correctness": 1.0,
"Argument Correctness": 0.5,
"Deterministic Argument Correctness": 1.0,
"Overall Argument Correctness": 1.0
"Correctness [GEval]": 0.29090204872481407,
"Tool Correctness": 0.5,
"Argument Correctness": 0.0,
"Deterministic Argument Correctness": 0.5,
"Overall Argument Correctness": 0.5
},
{
"test_name": "connectivity_metrics_extra_filters",
"Correctness [GEval]": 0.792225826850805,
"Tool Correctness": 1.0,
"Argument Correctness": 0.5,
"Deterministic Argument Correctness": 1.0,
"Overall Argument Correctness": 1.0
"Correctness [GEval]": 0.29917647472477826,
"Tool Correctness": 0.5,
"Argument Correctness": 0.0,
"Deterministic Argument Correctness": 0.5,
"Overall Argument Correctness": 0.5
},
{
"test_name": "get_specific_circuit",
"Correctness [GEval]": 0.8044122798124238,
"Correctness [GEval]": 0.786330785728382,
"Tool Correctness": 1.0,
"Argument Correctness": 1.0,
"Deterministic Argument Correctness": 1.0,
"Overall Argument Correctness": 1.0
},
{
"test_name": "ion_channel",
"Correctness [GEval]": 0.547455303051177,
"Correctness [GEval]": 0.6100691296561099,
"Tool Correctness": 1.0,
"Argument Correctness": 1.0,
"Deterministic Argument Correctness": 0.0,
"Deterministic Argument Correctness": 0.5,
"Overall Argument Correctness": 1.0
},
{
"test_name": "ion_channel_recording",
"Correctness [GEval]": 0.39644459702330714,
"Correctness [GEval]": 0.38548079269064617,
"Tool Correctness": 1.0,
"Argument Correctness": 1.0,
"Argument Correctness": 0.5,
"Deterministic Argument Correctness": 0.75,
"Overall Argument Correctness": 1.0
"Overall Argument Correctness": 0.75
},
{
"test_name": "morphology_studies",
"Correctness [GEval]": 0.5144470520430822,
"Correctness [GEval]": 0.7292190326367721,
"Tool Correctness": 1.0,
"Argument Correctness": 1.0,
"Deterministic Argument Correctness": 0.3333333333333333,
"Overall Argument Correctness": 1.0
},
{
"test_name": "neuroscientists_search",
"Correctness [GEval]": 0.4457554724314045,
"Correctness [GEval]": 0.23270807954872502,
"Tool Correctness": 1.0,
"Argument Correctness": 1.0,
"Deterministic Argument Correctness": 0.0,
"Overall Argument Correctness": 1.0
},
{
"test_name": "platform_explore",
"Correctness [GEval]": 0.6225318559484088,
"Correctness [GEval]": 0.5105671034963964,
"Tool Correctness": 1.0,
"Argument Correctness": 1.0,
"Deterministic Argument Correctness": 1.0,
"Overall Argument Correctness": 1.0
},
{
"test_name": "platform_news",
"Correctness [GEval]": 0.6677989147190616,
"Correctness [GEval]": 0.6191804216904908,
"Tool Correctness": 1.0,
"Argument Correctness": 0.0,
"Deterministic Argument Correctness": 1.0,
"Overall Argument Correctness": 1.0
},
{
"test_name": "platform_ui_simulate",
"Correctness [GEval]": 0.4022727821989431,
"Correctness [GEval]": 0.5028573368554985,
"Tool Correctness": 1.0,
"Argument Correctness": 1.0,
"Deterministic Argument Correctness": 1.0,
"Overall Argument Correctness": 1.0
},
{
"test_name": "platform_viewing",
"Correctness [GEval]": 0.5599305388335759,
"Correctness [GEval]": 0.6354826972531142,
"Tool Correctness": 1.0,
"Argument Correctness": 0.0,
"Deterministic Argument Correctness": 1.0,
"Overall Argument Correctness": 1.0
},
{
"test_name": "plotting",
"Correctness [GEval]": 0.5154697882424646,
"Correctness [GEval]": 0.6565033805474136,
"Tool Correctness": 1.0,
"Argument Correctness": 1.0,
"Deterministic Argument Correctness": 0.0,
"Overall Argument Correctness": 1.0
},
{
"test_name": "simulation_tutorial",
"Correctness [GEval]": 0.3643381261146244,
"Tool Correctness": 0.0,
"Argument Correctness": 1.0,
"Deterministic Argument Correctness": 0.0,
"Overall Argument Correctness": 1.0
"Correctness [GEval]": 0.35381328035923715,
"Tool Correctness": 1.0,
"Argument Correctness": 0.0,
"Deterministic Argument Correctness": 0.5,
"Overall Argument Correctness": 0.5
},
{
"test_name": "sin_plot",
"Correctness [GEval]": 0.7090979511047657,
"Correctness [GEval]": 0.7336164984672461,
"Tool Correctness": 1.0,
"Argument Correctness": 1.0,
"Deterministic Argument Correctness": 0.0,
"Overall Argument Correctness": 1.0
},
{
"test_name": "software_docs_entitysdk",
"Correctness [GEval]": 0.4988197224981158,
"Tool Correctness": 0.0,
"Correctness [GEval]": 0.4779583628701857,
"Tool Correctness": 1.0,
"Argument Correctness": 1.0,
"Deterministic Argument Correctness": 0.0,
"Deterministic Argument Correctness": 0.6666666666666666,
"Overall Argument Correctness": 1.0
},
{
"test_name": "software_docs_obione",
"Correctness [GEval]": 0.5545155228481053,
"Correctness [GEval]": 0.37049372351787807,
"Tool Correctness": 1.0,
"Argument Correctness": 0.0,
"Deterministic Argument Correctness": 0.3333333333333333,
"Overall Argument Correctness": 0.3333333333333333
"Deterministic Argument Correctness": 0.6666666666666666,
"Overall Argument Correctness": 0.6666666666666666
},
{
"test_name": "species_list",
"Correctness [GEval]": 0.5208178183484194,
"Correctness [GEval]": 0.5602827980475861,
"Tool Correctness": 1.0,
"Argument Correctness": 1.0,
"Deterministic Argument Correctness": 1.0,
"Overall Argument Correctness": 1.0
},
{
"test_name": "thalamus_id",
"Correctness [GEval]": 0.46545896861337094,
"Correctness [GEval]": 0.525632830123433,
"Tool Correctness": 1.0,
"Argument Correctness": 1.0,
"Deterministic Argument Correctness": 0.0,
"Overall Argument Correctness": 1.0
},
{
"test_name": "variable_substitution",
"Correctness [GEval]": 0.31259073486638117,
"Tool Correctness": 0.5,
"Argument Correctness": 0.75,
"Deterministic Argument Correctness": 0.5,
"Overall Argument Correctness": 0.75
}
],
"created_at": "2025-11-06 11:18:54.068665"
}
"created_at": "2025-11-14 18:19:53.061708"
}
Loading