File size: 2,438 Bytes
683fd03
f9306c2
 
 
 
683fd03
 
 
 
f9306c2
 
 
 
3e67073
f9306c2
 
 
 
 
 
 
 
 
 
 
 
 
3e67073
f9306c2
 
3e67073
f9306c2
 
3e67073
f9306c2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3e67073
f9306c2
 
 
 
 
 
 
 
 
 
 
 
3e67073
f9306c2
3e67073
 
 
 
f9306c2
3e67073
f9306c2
3e67073
 
f9306c2
3e67073
 
f9306c2
3e67073
 
 
 
f9306c2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65a8fdb
3e67073
f9306c2
3e67073
f9306c2
 
3e67073
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
---
title: MathVision JEPA Explorer
emoji: 🔎
colorFrom: blue
colorTo: green
sdk: docker
pinned: false
---

# MathVision Explorer

Typed Python-startpunt voor een **MathVision + JEPA** explorer. De eerste versie werkt
lokaal met MathVision-achtige JSONL-bestanden en een eenvoudige, testbare image embedder.
Daarna kun je de embedder vervangen door I-JEPA-features.

## Installatie

```powershell
uv sync --dev
```

Of via Make:

```bash
make sync
```

Met I-JEPA ondersteuning:

```powershell
make sync-ijepa
```

Alles klaarzetten, inclusief Streamlit, I-JEPA, demo-data, gallery en checks:

```bash
make ready
```

Met Streamlit UI:

```bash
make sync-app
```

## Verwacht JSONL-formaat

Elke regel is een probleem:

```json
{"id":"mv-001","question":"How many cubes are visible?","answer":"7","image":"images/mv-001.png","subject":"geometry","level":2}
```

Ondersteunde velden:

- `id` of `problem_id`
- `question`
- `answer`
- `image`
- `options`
- `subject`
- `level`
- `problem_type` (optioneel)
- `solution`

## Gebruik

Maak eerst een zichtbare mini-demo:

```bash
make demo
make gallery
make app
```

## I-JEPA integratie

De module `mathvision_explorer.embeddings` definieert een `ImageEmbedder` protocol. De
meegeleverde `ColorStatsEmbedder` is bewust simpel, zodat tests snel en offline draaien.
`IJepaImageEmbedder` gebruikt standaard `facebook/ijepa_vith14_1k` via Hugging Face
Transformers en poolt `last_hidden_state` naar een 1D embedding.

Voorbeeld (2 images -> cosine similarity):

```python
from pathlib import Path

from mathvision_explorer.embeddings import IJepaImageEmbedder
from mathvision_explorer.index import cosine_similarity

embedder = IJepaImageEmbedder()
v1 = embedder.embed_image(Path("data/demo/images/mv-001.png"))
v2 = embedder.embed_image(Path("data/demo/images/mv-002.png"))
print(cosine_similarity(v1, v2))
```

## Kwaliteit

```powershell
uv run pytest
uv run mypy
uv run ruff check .
```

Of:

```bash
make check
```

## Hugging Face Spaces

Deze repo is voorbereid als Docker Space. De hosted entrypoint is `app.py`; die maakt
demo-data aan en start daarna de Streamlit explorer. Dependencies staan in
`pyproject.toml`; Docker installeert met `pip install -e ".[app,ijepa]"`.

Belangrijk voor I-JEPA:

- Docker gebruikt CPU-only PyTorch wheels.
- Transformers is gepind op een stabiele 5.x release met I-JEPA support.
- De eerste keer dat `ijepa` gekozen wordt, downloadt de app het model.